如果要进行一个“复杂运算”(包括加减运算,但是运算步骤很多),尤其是需要重复使

用这个算法处理数据时候,使用 C 函数功能块将非常方便。
举个栗子:用公式: a= b/c+b*c+(c-3)*d 完成运算。
方法一:如果使用梯形图编写上述公式,处理步骤与程序如下:
首先求出 c-3 然后算出三个乘式的积 最后求和虽然只有以上三个步骤,但是梯形图只支持两个源操作数,所以必须分成多步求结果。
在上面梯形图运算中有几点要注意:
(1)MUL 运算结果为双字,就是说 MUL D1 D2 D14[D15],结果是存放在D14[D15]两个
寄存器内。
(2)DIV 运算结果分商和余数,即:DIV D1 D2 D16,商在D16 中,余数在D17 中,所以
如果运算有余数则精度就降低了,要得到精确的结果得用浮点数运算。
(3)在求和时,由于D16 为商,是单字数据,所以加运算的时候得先统一数据类型,最终
得到的结果存放在D22[D23]中。
方法二:使用C 函数写,梯形图程序如下:
首先,我们对上面的 C 语言梯形图指令结构进行解析:
RESULT 为函数功能块的名称
D0 表示函数中 W[0]为 D0,W[1]为D1 以此类推,如果 S2 为D32,则函数块中
W[0]为D32,W[1]为D33 以此类推
M0 表示函数中 B[0]为 M0,B[1]为 M1 以此类推,如果 S2 为M32,则函数块中
B[0]为M32,B[1]为M33 以此类推
C 语言部分内容如下:
通过两种方法的对比可以看出,通过 C 函数功能,能够大大简化梯形图编程,提高编
程效率。
上面的C 函数运算和梯形图相似,精度也不高,如果要得到精确结果则使用浮点运算。
又来一个栗子:
利用函数功能块计算出CRC 校验值。
CRC 校验运算规则如下:(1)令16-bit 寄存器(CRC 寄存器)=FFFFH。
(2)将第一个8-bit byte 的讯息与低位元 16-bit CRC 寄存器异或(Exclusive OR)。
(3)右移一位CRC 寄存器,将0 填入高位元处。
(4)检查右移的值,如果是 0,就将第三步的新值存入 CRC 寄存器内,如果为非 0,那
么将CRC 寄存器的值与A001H 异或,将结果存入CRC 寄存器内。
(5)重复(3)到(4),将8-bit 全部运算完成。
(6)重复(2)到(5),取下一个8-bit 的讯息指令,直到所有讯息指令运算完成。最后,
得到的 CRC 寄存器的值,即是CRC 的校验码。值得注意的是CRC 的校验码必须交换放置与讯息指令的检查码中。
编辑C 语言功能块程序,如下:
编写PLC 梯形图程序,D0:校验数据的字节个数,D1~D5:校验数据的内容。如下:下载到 PLC 里,然后运行,使 M0 置 ON,通过自由监控就会发现寄存器 D6,D7 内
分别存入了 CRC 校验值的高位与低位。


还没有评论,来说两句吧...