三菱PLC的MODBUS RTU的CRC计算程序编写,通讯必须掌握
上一章我们介绍了MODBUS协议中的RTU数据模式中的CRC校验码的计算原理,为了方便在PLC中完成通讯控制,今天我们说下PLC中CRC校验码程序的编写。
首先,原理在上一章讲到了,我们利用三菱PLC梯形图进行编写,先看下流程图:
CRC计算流程图
从上图中发现,有两个循环过程,即单个数据的CRC的计算,主要是对首个数据的CRC暂存器进行8次移位运算,另一个大循环是所有数据的运算(先运算完一个8位数据的CRC,下一个数据与这个CRC进行运算),这样把所有数据都计算完成后即可得到CRC校验码。
按照流程图步骤进行编写:
1、初始CRC值:FFFFH,为了方便移位,我们采用位组成的方式来表示CRC暂存器: K4M0,
采用变址寄存器V对数据进行依次运算,大的循环次数要根据传输数据的个数来决定,小的循环(单个数据的CRC)移位8次就循环8次,将数据初始化。
基本框架如下:
数据初始化
程序整体框架
2、小循环单个数据的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表示数据个数。
CRC指令
下面看下仿真结果:
我们用CRC在线计算器看下结果与PLC程序结果进行对比:
CRC计算器结果
PLC计算结果
PLC计算结果
PLC计算结果
不清楚的留言或私信。
西门子S7-200 SMART Modbus RTU通信,如何编写从站程序和主站程序
本篇我们来学习S7-200 SMART的Modbus RTU通信以及从站程序和主站程序的编写。
通过集成RS485端口或可选通信板SM CM01的RS485/RS232端口,S7-200 SMART可以作为Modbus RTU主站或者从站同多个设备进行通信。
Modbus RTU通信端口
西门子S7-200 SMART作为Modbus RTU主站时,最多可以控制247个从站,通信板SB CM01与CPU集成端口功能是一样的。利用STEP7 Micro/WIN SMART指令库编程可以使Modbus RTU主站和从站通信更为简单。下面我们通过一个简单的实例来练习使用S7-200 SMART Modbus RTU通信。
Modbus RTU主站
需要完成如下通信任务:1、Modbus主站读取Modbus从站DI通道I0.0开始的16位的值;2、Modbus主站向Modbus从站前5个保持寄存器写入数据。本次试验所需的硬件有:两台S7-200 SMART CPU、一台以太网交换机CSM1277、一台编程计算机、一根PROFIBUS通信电缆、三根以太网电缆。硬件之间的连接如下图中所示:
硬件连接
下面,我们先来学习编写Modbus RTU从站程序。首先编写Modbus从站初始化程序,在Modbus从站项目中完成硬件组态和符号定义后,在指令树中展开指令树库文件夹下的Modbus RTU Slave文件夹,拖放Modbus从站初始化指令到主程序中,在文件菜单功能区单击存储器按钮打开库存储器分配对话框,输入该指令库存储器的起始地址,例如VB1000,也可以单击建议地址按钮,系统自动计算可用的存储器地址。注意该存储区不能再重复使用。
设置指令库存储器起始地址
使能端插入一个常开触点,输入首次扫描位地址SM0.1,模式参数输入1,启用Modbus协议,Modbus从站地址设置为3,波特率设置为9600,奇偶校验设置为偶校验,端口设置为使用CPU集成的RS485端口,延时参数在有线网络运行时设置为0,可访问的IQ点数设置为256,可访问的AI寄存器数设置为16,可访问的V存储区中的字保持寄存器数设置为100,V存储区中的保持寄存器起始地址设置为VB0,输入初始化完成标志位地址和错误代码输出地址。
Modbus从站初始化指令
编写Modbus从站通信程序,从指令树中拖放Modbus从站通信指令到程序中,使能端插入一个常开触点,输入始终接通位地址SM0.0,输入从站通信完成标志位地址,输入错误代码输出地址。为了直观的查看试验结果编写程序将主站写入从站的第一个保持寄存器的数据送入QW0,用CPU面板的输出点指示灯显示,单击保存按钮保存项目。
Modbus从站通信指令
在项目树中展开程序块的库文件夹,可以看到Modbus从站指令使用了三个子程序和两个中断程序,将程序编译下载到PLC,设置CPU为RUN工作模式,至此,Modbus从站的编程就完成了。
编译下载程序
以上,我们介绍了S7-200 SMART的Modbus RTU通信如何编写从站程序,下面我们继续来学习编写Modbus RTU通信主站程序:
首先,我们来编写Modbus主站初始化程序,在Modbus主站项目中完成硬件组态和符号定义后,在指令树中展开指令树库文件夹下的Modbus RTU Master文件夹,拖放Modbus主站初始化指令到主程序中。
拖放Modbus主站初始化指令
与从站类似,分配库存储器,使能端插入一个常开触点,输入始终接通位地址SM0.0,模式端也插入一个常开触点输入地址SM0.0,启用Modbus协议。波特率设置为9600,奇偶校验设置为偶校验,端口设置为使用CPU集成的RS485端口,超时参数设置为1000毫秒,输入初始化完成标志位地址和错误代码输出地址。
设置Modbus主站初始化指令参数
编写实现Modbus主站读写Modbus从站的通信程序。要启动对Modbus从站的读写请求和处理响应需要使用Modbus通信指令,请注意同一时刻只能有一条Modbus通信指令处于激活状态,使用多条该指令时需要编写程序实现轮询。如下图所示,程序段2实现的功能是首次扫描时置位使用Modbus通信标志位,复位其它Modbus通信指令使能位。
程序段2
程序段3实现的功能是,当启用或者第一次调用Modbus通信指令时,从地址为3的Modbus从站中读取地址10001开始的16个数据,也就是读取DI通道从I0.0开始的十六位的值,读取到的数据存放到主站VB0开始的存储区中。
程序段3
程序段4实现的功能是,第一次调用完成后复位启用标志位,复位第一次调用使能位,复位第二次调用完成位,置位第二次调用使能位。
程序段4
程序段5实现的功能是,第二次调用时向地址为3的Modbus从站写入5个保持寄存器数据,从CPU的VB10到VB19获取5个字数据,然后写入到Modbus从站中的地址40001到40005。
程序段5
程序段6实现的功能是,第二次调用完成后复位第二次调用使能位,复位第一次调用完成位,置位第一次调用使能位。这样就通过轮询来实现了读Modbus从站输入位和写Modbus从站保持寄存器的功能,单击保存按钮保存项目,在项目树中展开程序块下的库文件夹,可以看到Modbus主站指令使用了三个子程序和一个中断程序。
程序段6
将程序编译下载到PLC,设置CPU为RUN工作模式,这样Modbus主站的编程就完成了。
今天我们分别学习了西门子S7-200 SMART Modbus RTU通信的从站程序编写和主站程序编写,在以后的文章中我们将继续学习西门子PLC编程的相关内容,欢迎持续关注!
相关问答
三菱plc与变频器modbus编程实例?
三菱PLC和变频器之间的通信可以使用ModbusRTU协议通过RS485总线进行通信。以下是使用GXWorks3编写PLC与变频器之间的通信程序的步骤:在GXWorks3中创建一个...
PLC技能扩展,如何实现PLC与多台变频器的MODBUS/RTU通信?
Modbus是一个请求/应答协议,并且提供功能码规定的服务,是工业中经常使用的一种协议。每种设备(PLC、变频器、HMI、控制面板、驱动程序、动作控制、输入/输出...
三菱fx2n如何进行modbusrtu通讯?
三菱FX2NPLC支持ModbusRTU通讯协议,以下是简单的通讯设置步骤:1.硬件连接将FX2NPLC的串口DB9连接到相应的ModbusRTU设备,同时将GND连接到通讯线中的对.....
西门子plc可以做rtu从站吗?
西门子plc可以做rtu从站硬件组态,必须选择CB1241或CM1241通讯块。硬件组态完成后,软件编程,用MB_COMM_LOAD指令初始化通信口,然后用通讯指令MB_MASTER指令...
rkc温控表怎样用modbusrtu写入参数吗?
走485通信,接两根线就可以了。温控器与PLC通信站号,通信格式,通信模式。设置一至。然后在PLC中编程MODBUS程度。编写程序的内容主要是写:站号,功能码,通信...
PLC怎么连接电脑?怎么把在电脑编程好的程序放入PLC运行?
三菱FX系列PLC如何接线及如何通过RS232进行下载程序今天简单给大家介绍下三菱FX系列PLC如何接线和如何通过RS232进行下载程序,简单的说明帮助大家能快速与PLC通...
欧姆龙变频器与PLCMODBUS-RTU通讯实例?
欧姆龙变频器与PLC(可编程逻辑控制器)MODBUS-RTU通讯示例步骤如下:1.连接线路:-将PLC与变频器通过RS485通讯线路连接起来。确保连接正确,其中PLC的TX端...
西门子PLC设置为自由口通讯方式,如果使用MODBUS通讯协议,要...
中关村在线vivoX90Pro+西门子PLC设置为自由口通讯方式,如果使用MODBUS通讯...保留一个端口PORT1用于程序调试与监控(或者使用EM277及PCADAPTER编程电缆)...
fx系列plc通信参数设置方法?
回答如下:以下是FX系列PLC通信参数设置的步骤:1.打开GXWorks2软件并连接PLC,选择PLC程序。2.在程序窗口中选择“系统参数”。3.在“系统参数”窗口中选...
如何实现人机plc控制变频器的频率?
变频器是现在常用的电机控制设备,很多的大型工厂,或者其他行业,都会采用变频器,那么什么是变频器呢,变频器又有什么作用于特点呢?变频器的定义与原理变频...4...