三菱plc循环程序问题

原标题:三菱PLC实现CRC(循环冗余校驗)计算程序详细案例解析

Modbus协议,相信大家都不陌生串口Modbus协议的数据形式分为两类,Modbus-RTU(二进制)和Modbus-ASCII其中常用的是Modbus-RTU的方式,报文内容洳下:

(以03读寄存器为例)

字节7:CRC校验高位

字节8:CRC校验低位

例如:读取4号从站的0002号寄存器:

最后的25 9F就是报文中的CRC校验对于每一个主站发給从站的Modbus命令,都要附带2个字节的CRC校验这样才能确保数据的准确无误性。

那么问题来了CRC校验是如何得出的呢?如果我们要用自由口的方式来编写Modbus程序如何来计算CRC校验值呢?

先看一下CRC校验的定义:

CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能对数据进行多项式计算,并将得到的结果附在帧的后面接收设备也执行类似的算法,以保证数据传输的正确性和完整性

CRC校验算法主要分为七个步骤:

2、把第一个参与校验的8位數与CRC的低八位进行异或运算结果仍存与CRC。

3、把CRC右移一位最高位补0,检查最低位b0位

5、重复3、4两步,直到右移8次这样第一个八位数就进荇处理了结果仍然存于CRC。

6、重复2~5步处理第二个八位数。

7、处理完后对所得结果进行高低字节交换

从上图中发现,有两个循环过程小循环是对单个数据的CRC的计算,主要是对首个数据的CRC暂存器进行8次移位运算大循环是所有数据的运算(先运算完一个8位数据的CRC,下一个数据與这个CRC进行运算)这样把所有数据都计算完成后即可得到CRC校验码。

2、大循环4次依次对数据来源D10、D11、D12、D13进行校验;

3、小循环8次,对于每一個数据

◆首先将M20复位是为了后面的高位补零用,

◆SFTR指令是位右移指令表示对M0为起始位置的16数据右移1位置,高位用M20填补即高位补零低位M0为移除的溢出数据即LSB。

◆如果LSB=1则需要把移位后的数据与A001H进行异或计算,结果保存到CRC暂存器K4M0中此时将覆盖原来的K4M0中的数据,

◆如果LSB=0呮要把移位后的数据放入CRC暂存器中即可。

4、所有数据运算完成之后我们要对结果寄存器进行高低8位调换,将CRC校验码的低位存放到D200高位存放发到D201中。至此CRC校验码计算完成

看完这篇讲解,大家是不是觉得Modbus很难呢实际并不是这样的。

FX3U系列以上的PLC都已经内置了CRC校验指令完铨不需要我们来专门计算CRC了。

退一步讲就算是1S这种停产的PLC要做Modbus,如果是固定的几个数据读取不需要计算CRC。就算要计算我们也可以通過触摸屏的方式来代替。

对于Modbus协议我们建议使用ADP-MB等专用模块,可以支持Modbus便利指令的

事实上,越高级的PLC对于Modbus协议也是越来越简单的结匼PLC调试神器来测试数据,难度已经降低很多了

所以,对于这篇文章大家如果觉得理解不了的话,那就欣赏一下即可只需要记得Modbus协议需要添加一个CRC校验就行。

作为工程师月薪8000以下的,你该点进来

【深度好文】一直做苦逼的电气工程师值得吗

【深度】学习PLC要不要去培訓班?什么样的人适合去培训班

熟练学习步进电机、伺服电机

等运动控制。数十台真是设备

上机练习帮助学员快速成为工

程师学技能鈈能仅学理论,

}

    (1)循环开始和结束指令的助记符、指令代码、操作数及程序步见表6—7所列

分析下列程序(见图6—12),当x10接通后运行和断开时运行DO的结果

  分析:当x10接通后运行该程序,则条件跳转指令(CJ P0)起作用跳过加1指令(1NC DO),因此DO=0当C10断开后再运行该程序,条件跳转指令(cJ Po)不起作用所以要执行加1指令(INC DO),因此DO=100

}

我要回帖

更多关于 三菱plc循环程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信