产品库

西门子S7-1200PLC模块吉林代理商

产品信息
品Pai 其他品Pai 电动机功率 4KW
外形尺寸 6mm 重量 2kg
应用领域 环保/水工业,食品/饮料,地矿,造纸/印刷/包装,纺织/印染/服装/皮革

西门子S7-1200PLC模块吉林代理商

 

西门子S7-300/400参数类型Pointer的应用

    1.参数类型Pointer

    使用参数类型Pointer(指针),可以在调用逻辑块时,将变量的地址作为实参传送给声明的形参。Pointer可以直接指向一个数据块中的变量,例如P#DB2. DBX4.0Pointer只能用于形参中的INOUT(不能用于FB)、IN_OUT变量。

    Pointer6个字节(见图4-26),字节0和字节1中的数值用来存放数据块的编号。如果指针不是用于数据块,DB编号为0。字节2~5与图4-25中的寄存器间接寻址的双字指针的的格式相同。

    4-26    参数类型POINTER

    Pointer的实参可以采用指针形式,例如P#M50.0P#DB2. DBX4.0,也可以采用地址形式,例如将P#M50.0简写为M50.0,编译时STEP 7会将它自动地转换为指针格式。

    ANYPointer分别为10B6B,不能用32位的累加器1直接访问它们,因此在OB1中调用块时,CPUANYPointer的实参暂时保存在OB1的临时局部数据区中。

    2FC1的程序设计

    【例】  将同一地址区中相邻的若干个字累加。地址区的起始地址由参数类型为Pointer的输入参数Start_Addr提供。在项目“寄存器间接寻址”(见随书光盘的同名例程)中生成FC1,其局部变量如表4-5所示。

    4-5    FC1的局部变量

    下面是FC1中的程序,条指令中的P##Start_AddrOB1的局部数据区中保存参数Start_Addr的实参的地址,指令中的P#表示指针,第2#号表示局部变量。

    L    P##Start_Addr    //输入的地址指针送累加器1

    LAR1    //累加器1的指针值送地址寄存器AR1

    L    0

    L    W[AR1P#0.0]    //取指针第1个字内的数据块编号(见图4-26

    =I

    JC    _001    //不是数据块(编号为0)则跳转

    T    #DB_No    //保存数据块的编号

    OPN  DB[ #DB_No]    //用间接寻址打开指针指定的数据块

    _001L    D[AR1P#2.0]    //取指针内数据区的起始地址(图4-26中的第2~5个字节)

    LAR1    //保存到AR1AR1指向要累加的数据的起始地址

    L    L#0    //32位整数0装入累加器1

    T    #Result    //累加和清零

    L    #Number    //循环次数装入累加器1的低字

    BACK T    #Sycle_C    //暂存循环计数值

    L    W[ AR1P#0.0]    //取数据

    ITD    //转换为双整数

    L    #Result    //取累加和

    +D    //累加

    T    #Result    //保存累加和

    + AR1   P#2.0    //地址值增加两个字节,指到下一个字

    L    #Sycle_C    //循环计数器值装累加器

    LOOP BACK    //若循环计数器值的内容减1后非0,跳转到标号BACK

    3OB1的程序设计

    生成共享数据块DB2,在DB2中生成用于保存累加和的双整数Sum(见图4-29),以及有5个整数元素的数组Aray。下面是OB1调用FC1的程序,分别累加DB2M区中的5个字:

    CALL FC    1

    Start_Addr  =DB2DBX4.0    //数据区起始地址

    Number    =5    //需要累加的字数

    Result    I_DB2DBD0    //保存运算结果的双整数

    CALL FC

    Start_Addr  =P#M 10 0    //数据区起始地址

    Number    =5    //需要累加的字数

    Result    =MD20    //保存运算结果的双整数

    4.程序状态监控

    CPU运行时打开FC1,启动程序状态监控(见图4-27),监控累加器1(STAND-ARD)AR1和间接寻址(INDIRECT)的地址值。累加器1中的数字用十六进制格式显示。

    次调用FC1时,执行完条指令后,累加器1中为16#870000a8,即2#1000 0111 0000 0000 0000 0000 1010 1000,由图4-26和表4-3可知,这是地址P#V21.0,即次调用FC1OB1的局部变量LB21的地址。

    4条指令读取Pointer的实参的个字(数据块编号),判别是不是数据块。如果非零(表示是数据块)则用16位存储器间接寻址(DB[#DB_No])打开该数据块。用指令“L D[AR1P#2.0]”来读取Pointer实参的25个字节(数据区的起始地址DBX4.0)。将该地址送入AR1后,AR1指向DB2. DBX4.0,监控区中的AR1列显示DB4.0FC1中标号BACK下面的第2条“L  W[AR1P#0.0]”指令取出的是DB2. DBW4的值。

    为了验证V区是调用FC1OB1的局部数据区,在FC1的第2条指令处设置一个断点。执行完第2条指令后,CPU进入HOLD(保持)模式。

    此时打开CPU模块信息对话框的“堆栈”选项卡,选中B堆栈中的OB1,点击“L堆栈”按钮,打开OB1的局部数据堆栈对话框(见图4-28)。此时可以看到指针常数P#DB2. DBX4.0的值16#0002 8400 0020存放在从OB1的局部数据字节LB21开始的6个字节中。

    4-28    L堆栈中的局部变量

    4-29    DB2中的数据与运算结果

    4-30    变量表中的数据与运算结果

    5.程序运行的监控

    生成和打开名为“VAT累加”的变量表,在变量表中生成6个变量。图4-29和图4-30给出了两次调用FC1被累加的5个字和累加的结果(双整数)。

 参数类型是为逻辑块的形参定义的数据类型,用于在调用逻辑块时传递参数。除了简单数据类型和复杂数据类型之外,还可以使用下列参数类型:

    (1) TimerCounter

    使用参数类型Timer(定时器)和Counter(计数器),可以在调用逻辑块时,分别将定时器和计数器的编号(例如T3C21)作为实参传递给块的形参(见图4-16)。

 

    (2) Block

    使用参数类型Block_FCBlock_FBBlock_DBBlock_SDB,可以在调用逻辑块时,分别将FCFBDBSDB(系统数据块)作为实参传送给块的形参。块参数类型的实参应为同类型的块的地址编号(例如FB 2)或块的符号名。

    参数类型TimerCounterBlock只能用于块的输入参数(IN)的形参。


西门子S7-1200PLC模块吉林代理商

信息声明:本产品供应信息由仪器网为您整合,供应商为(上海卓曙自动化设备有限公司),内容包括 (西门子S7-1200PLC模块吉林代理商)的品牌、型号、技术参数、详细介绍等;如果您想了解更多关于 (西门子S7-1200PLC模块吉林代理商)的信息,请直接联系供应商,给供应商留言!
供应商产品推荐
    您可能感兴趣的产品