南方创业(天津)科技发展有限公司,天津 300050
摘要:本文详细阐述西门子PLC中CP341模块的MODBUS RTU免授权通讯的设计方案在空压机变频改造中的应用实现,该方案通过采用西门子STEP7软件编程的方式使用集成在西门子CP341通讯模块内的ASCⅡDriver协议来实现MODBUS RTU免授权通讯功能。这样的优势在于不需要使用MODBUS协议驱动模块,能够节约项目成本。在该项目中的应用效果可以看出,这种设计方案虽然软件设计复杂,但是安全可靠、成本低廉,具有应用价值。
关键词:MODBUS RTU通信;西门子CP341模块; CRC冗余校验
1 引言
在工业自动化系统领域中,MODBUS RTU作为一种开放高效且可靠的通信协议得到了广泛的应用,它能够通过一组数据线将现场仪表内测量数据安全可靠传输到PLC控制系统,实现数据交换,这样既能减少电缆又能精准的采集得到仪表的数据。而西门子S7-300系列中的CP341模块集成了ASCⅡDriver驱动协议,支持RS485传输接口,可进行MODBUS RTU串口通信。
本文通过某污水处理厂项目中PLC与水质检测仪之间的通讯,对CP341通讯模块进行软件编程设计,这样能够免于购买授权模块来进行授权,该方案最终得以实现,经济效益明显。
2 硬件配置
该项中以技术成熟可靠的西门子S7300可编程控制器为核心,系统中通讯模块选用标配RS485接口的西门子CP341模块,以此来与污水处理厂内的水质监测仪表来进行数据交换。通讯配置过程中使用集成在CP341内的ASCⅡDriver驱动来实现Modbus Master/Slave RTU串口通讯功能。在编写程序之前,我们首先需要对CP341模块的参数进行设置,其中主要包括:字符延迟时间设置;接口方式设置;波特率的设置,数据位和停止位设置,奇偶校验位设置等等。对PLC硬件模块配置完成以及将其中的CP341模块硬件接口通信参数设置完成后,就可开始编写程序,该项目中主要包括通讯程序以及逻辑控制程序。
在STEP7中PLC硬件配置及CP341模块设置如下图所示:
CP341模块在STEP7中的硬件配置及设置
3 软件设计
3.1 CRC校验算法概述
在程序的设计调试时需要对从站进行一些必要的参数设置以使其与主站设置相匹配,其中包括协议类型,奇偶校验,传输超时,从站地址等,否则通讯很难成功。其中CRC循环冗余校验为本文研究的关键性问题。
此项目中采用Modbus RTU 通信方式,在软件设计时发送的数据包中包含通讯站号/数据存储区/读写指令等。MODBUS通信协议的CRC校验码长度为2 Byte,它包含一个16位二进制数。通过发送模块计算CRC数值,发送信息帧的末端放置CRC码。而接收设备负责重新计算接收到的CRC校验码内包含的所有信息,接受完信息后需要判断CRC校验码的计算结果是否为0,接收的信息帧正确无误则显示为0;如果不为0,则说明接收到的信息帧存在错误。只有CRC校验正确无误,才能进行RTU主站与从站的数据交换。因此,进行CRC校验是MODBUS通信成败的关键。
CRC检验码的计算不包含其中的校验位,起始位以及停止位,生成CRC校验码的计算步骤如下所示:
第一步,首先需要把CRC的16位寄存器置成FFFF H。
第二步,然后将这16位寄存器的地位与报文的开始字节进行“异或”运算,计算完成后将计算结果继续存放到这个寄存器中。
第三步,存放完运算结果后的CRC寄存器需要向右移一位,若向右移出的数值是0,则需要重复第3步;若向右移出的数值是1,则需要将CRC寄存器数值校验码与101000000000000进行“异或”运算,并将运算结果放入寄存器当中。
第四步,重复上面步骤完成8次移位,直至全部字节处理完毕。这个运算完成的16位寄存器中的数据结果就是上述的CRC校验值。
第五步,对CRC校验码进行放置时,需要将16位中的高8位和低8位应分开放置,并且需要先放低8位,然后再放高8位。
软件设计编程时,需要在STEP7编程软件的功能块FC21中编写可编程逻辑控制器与水质监测仪进行数据交换的程序,数据中包含仪表的站号、数据起始地址、功能码和CRC校验码等,并用数据块DB21来存放以PLC为主站的数据。利用STEP7编程软件中特有的程序功能块FB7“P-RCV-RK”接收数据以及FB8“P-SND-RK”来发送数据,通过以上软件编程规则就可实现CP341与水质监测仪表之间的MODBUS RTU的数据通信,以此来读取仪表中重要的水质数据,这些数值为污水处理中逻辑控制的依据。
3.2 CRC校验程序的编写原则
CRC校验程序在主程序中需要被多次用到,因此需要编写一个功能块FC18来完成此CRC校验。使用时只要在主程序中直接调用此功能块就可以完成CRC校验,这样用起来方便、灵活而且方便修改。
3.3主要程序的设计与实现
在通讯程序编写过程中,需要使用功能块FB8“P-SND-RK”发送数据。该功能块是通过上升沿来触发其工作的,一个上升沿触发一次,这样就能发送一个请求数据包。主要通讯程序内容如下所示:
CALL FC 18//调用CRC校验
DB_NO :=21//欲发送数据块FC21
DBB_LEN :=6//长度6字节的数据进行CRC校验
DBB_OFFSET:=0
CRC_VALUE :=MW18
CALL "P_SND_RK" , DB8
DONE :=M8.5
ERROR :=M8.6
STATUS :=MW36
调用功能块FB7“P-RCV-RK”来接收数据,并将接收到的数据存放在程序设计的相应数据块中,利用由西门子可编程逻辑控制器发送的CRC校验码进行校验。结果为0,则说明接收的数据正确。如果不是0,则接收数据会出现错误,具体错误内容可查看错误代码。
4 结语
随着国家经济的飞速发展,伴随的生态问题日渐严重,我们国家对环保问题越来越重视,因此污水处理也成为了当今的一个重要行业。西门子可编程逻辑控制器在污水处理行业中一直扮演着重要的角色,其通信的方式主要包括以太网通讯和Profibus DP通讯等,而污水处理站中的工业仪表品牌多且复杂,MODBUS RTU标准协议成为众多品牌普遍应用的通讯方式。本文通过软件编程来实现MODBUS RTU免驱动通讯,用软件编程开替代硬件驱动,虽然编写程序比较复杂,但是可以节省成本,并且软件可靠性要更高,减少故障点。经过长时间的稳定运行表明,该方案数据传输安全稳定可靠。由此可见其具有广泛的应用价值。
参考文献:
[1] 张明超. 西门子PLC在污水处理厂自控系统中的应用[J].通信设计与应用,2013,(2):165.
[2] 许焰.免加密狗西门子CP341模块的MODBUS RTU通信实现.微计算机信息,2012,28(10),141-143
[3] 刘立新. 用西门子CP341实现Modbus RTU通讯.冶金动力,2006,000(001),60-64
作者简介:宋文超(1984-),硕士,工程师,77956634@qq.com