基于modbus通讯的上位监控软件设计

2014-10-21 20:06吴昊罡
中国机械 2014年24期

吴昊罡

摘要:本文基于Modbus通讯协议,使用VB编写上位软件,与西门子CP341-RS422/485模块进行通讯,对PLC中变量进行读取,并存入SQLServer数据库,实现对设备的实时监控。

关键词:Modbus;VB; SQLServer;PLC

在现代工业中使用PLC设备进行分散化控制,上位机监控软件提供图形界面并对下位设备进行数据采集、管理,已经成为工业控制系统中普遍使用的监控形式。其中Modbus协议以标准、开放等优点广泛应用于工业通讯当中,本文基于西门子的CP341模块作为Modbus从站,使用Visual Basic语言进行编程,在上位计算机中采集、存储PLC中状态变量,实现对设备的实时监控。

1.Modbus协议

一个Modbus通讯数据帧由若干个字节组成,一般通信数据帧的格式包括:地址域、功能码、数据域、错误校验(16位CRC校验)

地址域长度为1个字节,表示从站的地址。功能码是数据帧中传送的第二个字节,不同的功能码对应数据域格式不尽相同,常用的功能码有1、2、3、4、5、6、15和16,分别表示读线圈、读输入状态、读保持寄存器、读输入寄存器、写单个线圈、写单个输入状态、写多个线圈、写多个保持寄存器[1]。数据帧最后两个字节是CRC错误校验域。

若需要读取05从站以00 00为起始地址的两个REAL型数据:3.4和8.9,则主站发送的报文:05 03 00 00 00 04 C5 8F,从站返回报文:05 03 08 40 59 99 9A 41 0E 66 66 D6 72。

2.西门子CP341的组态与编程

2.1西门子CP341组态

本文涉及与计算机通讯的从站为西门子S7-300PLC加装CP341-RS422/485模块。在安装CP341之前需要插入硬件狗Dongle,安装驱动软件CP_PTP_PARAM和Modbus-Slave318,然后才能在Step7中对CP341进行组态。

设置模块时必须与计算机确认设置的内容:从站地址、波特率、数据位停止位,校验位。CP341模块的参数应按确认后的内容进行配置,波特率通常设为9600即可。本文中通讯参数设置为9600, 8, 1, n,从站地址为5。

传输DINT、REAL数据时,应设置FC 03,06,16选项卡,并建立一个DB块存储待传数据。本文中所需传输的变量数据类型为DINT、REAL。传输模式选择Half-Duplex。配置完成后,向CP341下载Modbus Slave驱动。

2.2PLC编程

在Step7中打开 “zXX21_05_PtP_Com_MODSL”项目,将Modbus通讯程序OB100、FB7、FB8、FB80、DB80复制到Step7程序中。在程序中调用FB80,并将通讯数据块名称DB80和CP341起始地址填入。建立与计算机通讯用的FC块并调用FB80,将通讯数据块名称DB80和CP341起始地址填入。其中FB80中的OB_MASK的值应始终为1,其余变量根据需要进行分配。

3.Visual Basic编程实现

为计算机安装RS485通讯卡,添加各个数据显示控件数组和MSComm控件。Modbus RTU模式的报文发送必须控制好字符间隔,1byte数据发送后延时应小于1.5倍字符时间,两帧报文之间的间隔必须大于3.5倍字符时间间隔。一个字符时间是指按照用户设定的波特率传输一个字节所需要的时间[2]。

软件通过串口发送查询数据帧,对PLC返回的数据分解、显示,PLC返回的内容包括各开关状态、元件状态、运行速度、运行负荷等。从通讯内容来说,包括开关量、模拟量,其中开关量均打包为DINT型变量整体发送。

3.1串口通讯与数据处理

在界面中加载VB自带的MSCOMM控件,在软件启动时,程序调用API函数自动从配置文件中读取设置的控件属性参数,在控件的CommEvent事件中编写响应程序。

使用Timer控件按照要求的周期發送报文。主站发出的查询报文为05 03 00 00 00 24 44 55(十六进制),通过MSComm.Output指令发送给从站。

取得从站返回给主站的数据帧后,从第4个字节开始,每4个字节为一个数据。数据帧中的DINT型变量按位进行分解,与相应的开关量对应显示,浮点数转换为小数并显示在界面上。

3.2数据管理

为及时记录设备运行状态,分析设备使用情况,软件将打包传输的数据存储在SQLServer数据库中,以备日后查询,存储数据的过程根据MSComm.CommEvent事件触发。VB应用程序开发中,可以通过ADO对微软所支持的数据库进行操作。

在数据库中建立存储表,建立不少于传输内容的字段,分别存储各开关量数据、模拟量数据。在VB中编写读写数据库的ADO语句对SQLServer进行操作。

Set Cnn = New ADODB.Connection

Cnn.Open strCnn

Cnn.Execute "INSERT INTO Database (iTime, …) VALUES (SQLtxt)"

需要读取存储信息时,可使用SQL查询语句读取相应字段进行数据转换和位处理即可,本文不再赘述。4 结论

本文实现了在Modbus通讯的条件下,使用Visual Basic编程实现了在计算机上读取PLC中少量数据,并存储入SQLServer数据库的功能。在只需要监控少量数据的情况下,可以不必在计算机上安装其他专业的工业控制软件就能够满足需求,只安装相应的控件补丁和硬件驱动即可。本文所实现的功能降低了监控软件对计算机性能的要求,也使得部署程序更加简便。

参考文献:

[1]白焰,钟艳辉,秦宇飞.基于VC的Modbus协议通信测试软件的实现[J].现代电力,2008 25(6):76-80

[2]佟为明,胡素君,刘勇, 李中伟.一种体现Modbus主要技术的实验系统[J].电子器件,2009 32(4):833-839.