威纶通官方论坛

怎样对多个PLC寄存器数据进行同时递减运算

[复制链接]
发表于 2011-7-16 11:49:35 | 显示全部楼层 |阅读模式
本帖最后由 weinview 于 2011-7-16 11:51 编辑

问题描述:对多个地址的寄存器数据递减运算,如PLC的D20—D29,初始值是9,8,7,6,0,1,2,3,4,5。每触控一次按键就作为减一处理,直到全部为0(不能为负值)。
解决思路:
1、初始方法:叠加10个多状态设置元件(递减JOG-)。结果正确,但响应速度较慢。
2、改进方法:使用功能键触发一个宏指令处理,速度较快。但出现数值递减后为负(-1,-2,-3......)或跳转到65535的的情况。出现负值的原因是数值显示元件没有选择格式为16-bit unsigned;出现65535的原因是,宏指令中定义的数据格式是unsigned short短整型变量,范围是0---65535.零减一,溢出,变成65535。

        加入逻辑判断,改造后的宏指令如下:
        macro_command main()
          unsigned short A[10]                                        //无符号数短整型变量0-65535
          short i,plc_address
          
          GetData(A[0], "PLC", D, 20, 10)                //来自PLC的D20——D29
          for i=0 to 9
                if A<>0 then
                         A=A-1         
                         plc_address=i+20                        //PLC地址
                         SetData(A, "PLC", D, plc_address, 1)     
                  end if
          next i
        end macro_command
您需要登录后才可以发帖 登录 | 注册

本版积分规则

回复帖子

Archiver|小黑屋|威纶通官网 ( 粤ICP备06054553号 )

GMT+8, 2024-11-24 11:20

Powered by Discuz! X3.4

© 2001-2023 Comsenz Inc.

快速回复 返回顶部 返回列表