张翠平,宋文超,李根,付瑶,李古清
(天津电气科学研究院有限公司,天津 300180)
基于CP341模块的MODBUS RTU免授权通讯的实现与应用
张翠平,宋文超,李根,付瑶,李古清
(天津电气科学研究院有限公司,天津 300180)
根据实际项目介绍了一种基于RS485接口的西门子CP341通讯模块的MODBUS RΤU通讯设计方案,在这种方案中详细讨论了通过使用集成在CP341内的ASCⅡDriver通讯协议来实现MODBUS RΤU协议,并且通过采用在西门子SΤEP7中软件编程的方式实现MODBUS RΤU免授权通信。该方案不再需要使用MODBUS协议驱动模块,节省开销。实际应用结果表明,这种通讯方式不仅成本低廉而且安全可靠、使用方便,具有广泛的应用价值,值得推广。
CP341通讯模块;MODBUS RΤU通信;CRC冗余校验
MODBUS RΤU作为一种开放高效的通信协议在众多工业领域中的智能控制器以及智能仪表上已经得到了广泛的应用,它成功地解决了现场智能控制器以及工业仪表与PLC之间数据交换问题,这样不仅节省了传统的大量通讯电缆,而且其数据传输可靠性也得到了大幅度提升。CP341模块是西门子S7-300系列中的一种串行通信模块,它硬件集成了ASCⅡDriver等驱动协议,支持不同的传输接口如RS232C或RS485等。
本文通过空压机变频节能改造项目中PLC与美国寿力ΤS32S-600H型和LS25S-300L型螺杆空压机的通讯,对MODBUS RΤU协议免授权通讯进行了深入的研究并最终得以实现和应用。
1.1 CRC校验算法概述
在程序的设计调试时需要对从站的协议类型,奇偶校验,传输超时,从站地址等参数进行一些必要的设置以使其能够与主站相匹配,否则很难进行彼此间的数据交换。其中CRC循环冗余校验为本文研究的关键性问题。
MODBUS通信协议的CRC码为2B,包含了1个16位的二进制值。发送设备需要计算CRC码,并将其置于发送信息帧的末端。而接收设备则将接收到的所有信息(包含CRC码)进行重新计算,并判断计算结果的CRC码是否为0,如果计算结果为0,表明接收设备接收的信息帧正确无误;否则表明接收的信息帧有误。只有当计算的CRC校验结果正确时,RΤU主站才能接收从站的数据,RΤU从站才能准确无误地响应主站的请求。因此,如何准确地进行CRC校验是MODBUS通信成功与否的关键。
在计算CRC校验码时只有每个字符的8位数据用于CRC处理。而其中的起始位、停止位以及校验位不参与CRC校验码的计算。生成CRC校验码的算法如下:
1)把16位CRC寄存器置成FFFF H。
2)将报文的起始位字节与这16位寄存器的低位字节与进行“异或”运算,并将运算结果放入到这16位寄存器当中。
3)运算1次后CRC寄存器则向右移1位,MSB填零,检查LSB。
4)如果向右移出的数位是0,则重复步骤3);若向右移出的数位是1,CRC寄存器与101000000000000进行异或运算,并将其运算结果存至这个寄存器当中。
5)重复步骤3)和步骤4)直至完成8次移位,这样就完成了8位字节的处理。
6)重复步骤3)至步骤5),直至全部字节处理完毕。这个16位寄存器的内容即是CRC校验值。
7)放入CRC值信息时,高8位和低8位应分开放置,先放低8位,后放高8位。
1.2 CRC校验程序的编写
CRC校验程序需要在主程序中被多次调用,因此为了方便调用,设计了1个功能块FC100来完成此CRC校验。使用时只要在主程序中直接调用此功能块就可以完成CRC校验,这样既方便修改而且用起来也更为方便、灵活。采用SΤL语言编写部分程序代码,如下所示:
2.1 CP341硬件配置与参数设置
在调试CP341的过程中首先需要SΤEP7软件以及CP341模块自带的软件驱动程序。如果CP341模块的驱动程序未安装,则不能对其模块内的参数进行设置,这点是需要特别注意的。
本文选用了带有RS485接口的CP341通讯模块,使用集成在CP341内的ASCⅡDriver通讯协议来实现Modbus Master/Slave RΤU通讯。在编写程序之前需要对CP341模块参数进行必要的设置,其中包括:字符延迟时间设置4 ms来作为接收帧的结束方式;RS485接口方式;波特率设置为9 600 kb/s,8位数据位,1位截止位,1位奇偶校验位;其余为默认选项。
在SΤEP7中硬件配置及CP341模块设置如图1所示。
图1 CP341模块在STEP7中的硬件配置及设置Fig.1 Hardware configuration and settings of CP341 module in STEP7
对CP341模块硬件接口通信参数设置完成后,即可对程序进行编写。采用基于标准RS485接口的Modbus RΤU通讯方式,发送的数据包中应该包含站号/数据区/读写指令等相关信息。
2.2 程序的设计与实现
在SΤEP7中的功能块FC21中编写PLC与智能控制器进行数据传输的程序,组织好查询数据如站号、起始地址、功能码、CRC校验码等,并存放在数据块DB21中,以此作为PLC主站查询的发送数据源。利用程序中系统功能块FB7“P-RCV-RK”接收数据以及FB8“P-SND-RK”发送数据,结合CRC的数据校验,即可实现CP341与寿力空压机智能控制器之间的MODBUS RΤU的数据通信。
调用功能块FB8“P-SND-RK”发送数据。FB8是通过上升沿触发工作的,来1个上升沿FB8则被触发1次进而发送1个请求数据包,因此要设计触发程序。发送数据主要程序段如下:
调用功能块FB7“P-RCV-RK”来接收数据,并将接收到的数据存放在数据块DB22中,利用由PLC主站发送过来的CRC校验值进行计算。如果计算结果为0,则表示接收无误。否则接收出现问题。主要程序段如下:
Implementation and Application of MODBUS RTU Unlicensed Communication Based on CP341 Module
ZHANG Cuiping,SONG Wenchao,LI Gen,FU Yao,LI Guqing
(Tianjin Electric Research Institute Co.,Ltd.,Tianjin 300180,China)
A communications design based on Siemens CP341 module MODBUS RTU was described,The proposal was discussed which used ASCⅡ driver communication protocols integrated within the CP341 to enable MODBUS RTU protocol,and MODBUS RTU unlicensed communications were achieved by using Siemens STEP7 software programming way in detail.The program did not require the use of MODBUS protocol driver module,overhead was saved,application of the project results show that this communication is reliable,cheap cost and easy to use,and has wide application value.
CP341 communication module;MODBUS RTU communication;CRC redundancy check
TP29
A
10.19457/j.1001-2095.20170212
张翠平(1983-),女,本科,工程师,Email:zcp313@163.com