发布于 2015-03-17 18:25:06
2楼
从楼主的问题不难看出,楼主是位有追求的编程高手。
关于INVI(取反码)指令,楼上LJCLWYF大侠给了一个经典例子,这里就不赘述。
个人认为西门子PLC的大部分指令除了具有其本身的“数学”功能外,更多地用于逻辑控制,NEGI(16位整数补码)指令也不例外,这里举一个NEGI在寻址中的应用:
当某些数据值及其符合具有不同的含义时,例如:1,2,3,-4,-5...(值为轴编号,正号表示直线轴,负号表示旋转轴,在HMI上显示坐标时直线轴后面单位为mm或in即毫米或英寸,而旋转轴后面的单位为dg即度),当需要用数据值来寻址时,可以用NEGI结合JP指令进行逻辑控制:
...
L DBW [AR1,P#0.0]; //将轴编号(正值为直线轴,负值为旋转轴)装载到ACCU1
NEGI ; //在ACCU 1-L形成16位数值的二进制补码
JP e003; //如果大于0(即原值为负值),跳转至e003
TAK ; //切换ACCU1与ACCU2
e003: SLW 2; //左移2位(相当于乘以4),在此为每个数据的宽度或偏置
+ 174; //源数据首地址
SLW 3; //左移3位形成数据区域地址
LAR1 ; //将数据区域地址装载至地址寄存器1
L DBD [AR1,P#0.0]; //将源数据装入累加器1
T DBD [AR2,P#0.0]; //存入目标数据块的目标地址
...
在此NEGI起到了2个作用,
1)NEGI指令通过CC1和CC0状态位为JP指令判断正负提供依据;
2)将负值转换为正值,以便后续的寻址计算。
人的生命似洪水在奔流,不遇着岛屿、暗礁,难以激起美丽的浪花。