基于Modbus/TCP协议台达PLC与上位机VB软件之间的通信
2012-10-16樊新乾潘存海
樊新乾,潘存海
(天津科技大学 机械工程学院,天津 300222)
0 引言
在工业控制中,基于PLC控制的工程在上/下位机通讯上普遍采用RS-232/RS-485串口或者Ethernet通信模块进行通讯。串行通信是工业控制领域应用最为广泛的通信方式,它的数据和控制信息是逐位地传送出去,因此对于数据量较大,通讯距离较远,实时性要求高的控制系统,很难满足通讯需要[1]。近年来,工业以太网得到了快速发展,越来越多的受到工业控制用户的青睐,其稳定性、准确性和实时性的特点,广泛应用于电力、水利、冶金、化工、机械和制造业等控制系统[2]。由此产生了人机界面及各种组态软件产品,这些产品的出现简化了对PLC的控制和操作,使PLC的应用更加方便。但也有其共同的缺点,价格普遍偏高和可二次开发性较差[3]。基于Visual Basic(VB)平台的上位机监控界面的设计,克服了以上缺点,受到越来越多工业用户的关注[4]。然而利用Visual Basic(VB)自身的串口通信控件与网络控件进行上位机监控程序的设计,由于控件的局限性,程序开发难度较大。由此,本文通过深入研究Windows API函数的结构,通过调用Windows API函数,设计出一种可同时进行串行通信与Ethernet通信的解决方案,大大提高了上位机监控软件的开发效率,打破了串行通信控件与网络控件对编程人员的限制。使得程序开发人员不用过多关注通信控件的属性设计,把更多的精力放到监控界面的开发上来。最后,本文以台达DVPEN01-SL模块为Ethernet通信载体,以及工控机自带的COM口为串行通信载体,设计了PLC与上位机串行与Ethernet整合通信的解决方案,为工业现场用户提供更多的通信选择方式,简化了上位机监控界面的编制过程,提高了工业通信的可靠性与准确性。
1 Modbus以及Modbus/TCP协议
Modbus是一种应用层报文传输协议,Modbus报文传输服务提供设备之间的客户机/服务器通信,而这些设备联接在一个以太网上,信息传递分4类报文:Modbus请求、Modbus证实、Modbus指示和Modbus响应。Modbus请求是服务器在网络上发送用来启动事务处理的报文;Modbus指示是客户机接收的请求报文;Modbus响应是客户机发送的响应报文;Modbus证实是服务器接收的响应报文[5]。如图1所示。
图1 Modbus报文类型
Modbus/TCP协议是Modbus家族中应用于自动控制装置上的开放的通讯协议,用于实现不同类型的总线或网络连接的设备之间的C/S(客户机/服务器)通信,通过通用的网络部件在Intranet/Internet上传输。物理层和数据链路层是标准的以太网协议,网际层是标准的IP协议,传输层是标准的TCP协议,应用层嵌入Modbus协议。其网络结构如图2所示。
图2 Modbus/TCP协议网络结构模型
2 Windows API函数
API函数[6](全称为Application Programming Interface)也称为应用程序编程接口,Windows API顾名思义就是Windows平台下的应用程序编程接口。它是操作系统预留给应用程序的一个调用接口,应用程序可通过调用操作系统提供的相关API函数来使操作系统使用应用程序区执行一些命令(动作)。API函数是构筑整个Windows框架的基础。在API函数下面是Windows 操作系统核心,而它的上面则是华丽的Windows系统的操作界面和各种应用程序。Windows系统结构如图3所示。
图3 Windows结构
Visual Basic(VB)就是Windows平台上优秀的可视化编程应用程序,其主要特点为操作简单,界面友好,所见即所得。提供了大量的类库和控件(这些类库或控件就是对API函数封装的结果),例如MSComm(Microsoft Communications Control)控件和Winsock控件,它们替代了API函数。但是它们的应用具有一定的局限性,编程人员需要花很大精力来设计控件的各个属性。因此我们可以在Visual Basic(VB)中调用自主开发的API函数的集合,省略掉上位机监控程序中通信控件的属性设计,简化成为简单地函数调用过程,可大大提高程序开发效率,拓展更多的功能。
DMT函式库就是以Windows Winsock API(WSA)为开发基础的API函数的集合。用来开发支持以Modbus格式连结的工业产品,开发者可以通过汇入函式库的方式来连结串行口及工业Ethernet的通讯。DMT函式库提供标准C/C++动态及静态连结方式,并支持Microsoft Visual C++/Visual Basic、Borland C++Builder等软体开发环境。其协议堆叠图如图4所示。
图4 协议堆叠图
3 通讯模块以及PLC主机
本系统所应用的Ethernet通信模块为台达 DVPEN01-SL,PLC主 机 为DVP32EH-L。DVPEN01-SL是台达系列产品Ethernet通讯模块[7],支持Modbus/TCP通讯协议,可使用图控软件或人机界面,做远程的监控。DVPEN01-SL也可以作为Modbus/TCP的主端,可发送 Modbus/TCP指令,控制周边设备。另外在MDI/MDI-X自动检测功能下,在选择网络线时不需跳线。通过DVPEN01-SL Ethernet通讯模块,可实现上位计算机与PLC主机的通信。D而串口通信则可通过DB9转8针圆头RS-232串口线缆直接连接PLC与上位机。由于篇幅所限,DVPEN01-SL的具体设置以及PLC主机的程序设计在此就不再赘述。系统硬件连接方式如图5所示。
图5 硬件连接示意图
4 监控程序的编写
我们通过VB6.0,编写上位机监控程序人机交互界面。在VB6.0中使用DMT2.0函式库,必须首先汇入模块(module),步骤如下。
1)将DMT.bas添加进项目。
2)复制DMT.dll到项目目录下。如图6所示。
图6 模块汇入
在台达PLC中[8],M1072为特殊辅助寄存器,M1072标志设置为ON,可使主程序为RUN状态,以下按照DMT2.0函式库使用步骤,并以此为范例,来说明上位机监控界面代码的设计。如图7所示。
图7 寄存器动作示意图
以Modbus功能码0x05写入单一线圈M1072为例,其Modbus起始位址0C30,设定线圈状态为FF00,PLC主程序为RUN,若设定0000则为STOP。程序编写过程如下:
首先声明WIN32 API函数
Private Declare Function inet_addr Lib "wsock32.dll" (ByVal s As String) As Long。
4.1 Modbus 串行通信过程
1)设定通信参数
2)开启串行通信
3)数据存取
Modbus数据请求
4)关闭通讯 Call CloseSerial(conn_num)
4.2 Modbus/TCP通信过程
1)设定通信参数
2)开启通信
3)数据存取
4)关闭通信 Call CloseSocket(conn_num)
5 监控界面简介
本监控系统主要包括通信模式选择,PLC运行指示,X轴运动监控,Y轴运动监控,输入运行监控,以及报错信息界面,能够满足本项目的基本调试运行要求。程序运行界面如图8所示。
图8 监控程序运行界面
6 结论
为了对工业设备进行实时有效的管理与监控,完善的兼容性,可靠的稳定性,对恶劣环境的适应性,强大的冗余能力和方便的可管理性,是人们越来越多地在Visual Basic(VB)平台下开发上位机监控程序的设计的原因,而这也势必成为本文所述通信方案在越来越多的工业控制网络环境里大显身手的重要契机。本方案的提出成功的整合了串口通信与Ethernet通信,使得上位机监控程序的开发更为简单和方便,程序员从繁杂的通信控件设计编程工作中解放出来,也为工业现场实现冗余设计以及应急通信方面提供了安全可靠的方案,应用前景广泛。本文所述程序已成功应用于台达PLC运动控制系统的监控界面部分中,实验证明,该程序安全可靠,运行正常稳定。
[1]张辉, 李荣利, 王和平.Visual Basic串口通信及编程实例[M].北京: 化学工业出版社, 2011.
[2]关学进, 刘娟.基于Modbus/TCP工业以太网的自动化控制系统[J].电子测试, 2011(4): 4-8.
[3]冯冬芹, 金建祥, 褚健等.工业以太网关键技术初探[J].信息与控制, 2003, 32(3): 219-224.
[4]魏庆福.现场总线技术发展的新动向[J].工业控制计算机, 2000(1): 11-12.
[5]霍恒裕.一种Modbus/TCP工业以太网协议的结构[J].Computer Knowledge And Technology电脑知识与技术,2008(4): 855-856.
[6]杨本伦, 等.Visual Basic开发技术大全[M].北京: 清华大学出版社, 2010.
[7]台达DVPEN01-SL Ethernet通讯模块操作手册.
[8]DVP-PLC应用技术手册.