三菱PLC的MODBUS RTU的CRC计算程序编写,通讯必须掌握

三菱PLC的MODBUS RTU的CRC计算程序编写,通讯必须掌握首先,原理在上一章讲到了,我们利用三菱PLC梯形图进行编写,先看下流程图:CRC计算流程图从上图中发现,有两个循环过程。

大家好,欢迎来到IT知识分享网。

上一章我们介绍了MODBUS协议中的RTU数据模式中的CRC校验码的计算原理,为了方便在PLC中完成通讯控制,今天我们说下PLC中CRC校验码程序的编写。

首先,原理在上一章讲到了,我们利用三菱PLC梯形图进行编写,先看下流程图:

三菱PLC的MODBUS RTU的CRC计算程序编写,通讯必须掌握

CRC计算流程图

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

按照流程图步骤进行编写:

1、初始CRC值:FFFFH,为了方便移位,我们采用位组成的方式来表示CRC暂存器: K4M0,

采用变址寄存器V对数据进行依次运算,大的循环次数要根据传输数据的个数来决定,小的循环(单个数据的CRC)移位8次就循环8次,将数据初始化。

基本框架如下:

三菱PLC的MODBUS RTU的CRC计算程序编写,通讯必须掌握

数据初始化

三菱PLC的MODBUS RTU的CRC计算程序编写,通讯必须掌握

程序整体框架

2、小循环单个数据的CRC

三菱PLC的MODBUS RTU的CRC计算程序编写,通讯必须掌握

小循环单个数据的CRC计算

首先将M100复位是为了后面的高位补零用,SFTR指令是位右移指令,表示对M0为起始位置的16数据右移1位置,高位用M100填补即高位补零,低位M0为移除的溢出数据即LSB。如果LSB=1,则需要把移位后的数据与A001H进行异或计算,结果保存到CRC暂存器K4M0中,此时将覆盖原来的K4M0中的数据,在这里需要跳转指令CJ跳过LSB=0的情况。。如果LSB=0,只要把移位后的数据放入CRC暂存器中即可。

这样首个数据就运算完成,进行下一个数据的运算(大循环)。

3、CRC校验码

全部数据运算完成后,我们要对暂存器进行高低8位调换,将CRC校验码的高位存放到D100,低位存放发到D102中。至此CRC校验码计算完成。

如果觉得麻烦,在FX3U中有现成的CRC计算指令CRC S D n,S代表要计算的数据的起始编号,D为CRC校验码保存的数据寄存器,n表示数据个数。

三菱PLC的MODBUS RTU的CRC计算程序编写,通讯必须掌握

CRC指令

下面看下仿真结果:

我们用CRC在线计算器看下结果与PLC程序结果进行对比:

三菱PLC的MODBUS RTU的CRC计算程序编写,通讯必须掌握

CRC计算器结果

三菱PLC的MODBUS RTU的CRC计算程序编写,通讯必须掌握

PLC计算结果

三菱PLC的MODBUS RTU的CRC计算程序编写,通讯必须掌握

PLC计算结果

三菱PLC的MODBUS RTU的CRC计算程序编写,通讯必须掌握

PLC计算结果

不清楚的留言或私信。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/78251.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信