本帖最后由 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 |