力控组态软件与VB和下位机之间的通讯方法研究
2018-09-23豆勤勤
豆勤勤
前言
力控组态软件是对现场生产进行监控和数据采集的一种软件,可以与现场总线模块、智能模块等多种输入输出I/O设备进行通信,本文采用的力控组态软件对于采用不同协议通信的I/O设备,提供具有针对性的I/O驱动程序.实时数据库就借助于I/O驱动程序对I/O设备执行数据的采集与回送,与I/O驱动程序构成服务器与客户端的结构模式[1].
该项目是基于某大型钢厂钢坯标识码的读码监控系统.由于项目中采用的是国外的某款扫码枪设备,在力控组态软件中并没有提供其通讯驱动程序,而开发驱动程序工作量较大,因此需要采取其他方法实现与上位机的通信.对于力控不提供驱动程序的I/O设备,本项目采用的是借助于VB应用程序软件,利用力控向控制层和管理层提供的软、硬件全部接口实现间接控制的方法.
VB中提供有WinSock控件[2],此控件能够通过TCP协议连接到远程的机器并进行数据交换.而力控组态软件和VB之间又可以通过DDE协议来实现通信.整个工程项目实现过程如图1所示.
图1
1 VB使用WinSock控件与下位机设备通讯
VB是一个可视化的窗口开发环境,可以方便的应用到很多控制系统中.在使用WinSock控件时,可以使用的协议包括TCP和UDP.两种协议之间的重要区别在于它们的连接状态.TCP协议是一种基于连接的协议,可以将它同电话系统相比.在开始数据输出之前,用户必须先建立连接.UDP协议是一种无连接协议,两台计算机之间的传输类似于传递邮件,消息从一台计算机发送到另一台计算机,但是两者之间没有明确的连接.在应用程序使用TCP协议,首先必须决定应用程序是服务器还是客户端.如果要创建一个服务器端,那么应用程序需要“监听”指定的端口.当客户端提出连接请求时,服务器端能够接受请求并建立连接.在连接建立之后,客户端与服务器端可以自由地互相通讯.本项目中VB是作为客户端,与扫码设备进行数据通讯.
在VB中,由于WinSock通信控件不是内置控件,在使用时,需要将其添加到工具箱中.选择工程-部件-控件,选中Microsoft WinSock Control复选框,点击确定,就添加成功了.此时选择WinSock控件,添加到窗体上,利用此控件编程就可实现VB和设备通信.使用控件时,先对WinSock控件设置相应的属性和事件.首先必须知道服务器计算机名或IP地址及服务器进行侦听的端口,然后调用Connect方法.
WinSock控件的参数设置如下:
Private Sub Command1_Click()
Dim StartTime
Winsock1.RemoteHost="169.254.6.244"
Winsock1.RemotePort=23
Winsock1.Connect
StartTime=Timer
Do While ((Timer<StartTime+2)And(Winsock1.State<> 7))
DoEvents
Loop
If(Winsock1.State = 7)Then
Text5.Text= "Connected"
Text7.Text= "1"
Text5.BackColor= &HFF00&
Command1.Enabled = False
Else
Text5.Text="Can't connect to"+Text1.Text
Text5.BackColor= &HFF
Text7.Text= "0"
End If
End Sub
接收数据程序如下:
Private Sub Command4_Click()
If(Winsock1.State=7)Then
StartLow=Val(Text2.Text)Mod 256
StartHigh=Val(Text2.Text)256
LengthLow=Val(Text3.Text)Mod 256
LengthHigh=Val(Text3.Text)256
MbusWriteQuery=Chr(0)+Chr(0)+Chr(0)+Chr(0)+Chr(0)+Chr(7+2*Val(Text3.Text))+Chr(1)+Chr(16)+Chr(StartHigh)+Chr(Start-Low)+Chr(0)+Chr(Val(Text3.Text))
For i=0 To Val(Text3.Text)-1
ByteLow=Val(Text4(i).Text)Mod 256
ByteHigh=Val(Text4(i).Text)256
MbusWriteQuery=MbusWriteQuery+Chr(ByteHigh)+Chr(ByteLow)
Next i
MbusRead=False
MbusWrite=True
Winsock1.SendData MbusWriteQuery
ModbusWait=True
ModbusTimeOut=0
Timer1.Enabled=True
Else
MsgBox("Device not connected via TCP/IP")
End If
End Sub
2 VB通讯程序与力控组态软件的通信
VB与力控进行通信数据传输可以通过动态数据交换DDE来进行.
2.1 DDE动态数据交换
动态数据交换(DDE)[3,4]是微软的一种数据通信形式,它使用共享的内存在应用程序之间进行数据交换,能够及时更新数据,在两个应用程序之间信息是自动更新的,无须用户参与.两个同时运行的程序间通过DDE方式交换数据时他们之间是客户端/服务器关系;数据通信时,接收信息的应用程序称作客户端,提供信息的应用程序称作服务器.一个应用程序可以是DDE客户端或是DDE服务器,也可以两者都是.一旦客户端和服务器建立起来连接关系,则当服务器中的数据发生变化后就会马上通知客户端.通过DDE方式建立的数据连接通道是双向的,即客户端不但能够读取服务器中的数据,而且可以对其进行修改.
DDE有两种数据交换方式,即冷连接和热连接.冷连接(Cool Link)指数据交换是一次性数据传输,与剪贴板相同.当服务器中的数据发生变化后不通知客户端,但客户端可以随时从服务器读写数据.热连接(Hot Link)指当服务器中的数据发生变化后马上通知客户端,同时将变化的数据直接送给客户.
VB与力控组态软件进行DDE对话是通过机器名、应用程序名、主题名和项目名进行约定的.
2.2 VB与力控建立DDE会话的过程
在VB中新建一个工程,将窗体命名为“DDEServer”;其中,LinkMode 设为“1-Source(表示此程序作为服务端)”;LinkTopic为窗体的名字(即DDEServer).建立窗体如图2所示.VB应用程序中采用文本框控件和力控进行DDE通讯.
在力控组态软件中定义一个I/O设备DDE.服务名称设定为VB应用程序名,“工程1”,主题名称指定为VB应用程序窗体名称“DDESERVE”.链接模式为热连接,如图3和图4所示.
图2
图3
图4
在数据库中创建三个数据库点:A1,A2和A3,这几个数据点的数据连接项中的DDE分别指定为VB窗体中的文本框的名字,如图5所示.
先启动VB程序,然后启动力控运行程序,就可以实现VB与力控组态软件之间的DDE数据交换.整个系统运行如图6所示.
结束语
图5
图6
本文采用VB中WinSock控件和DDE通讯技术很好的实现了力控组态软件与下位机扫码设备之间的通信,较好地解决了对于力控组态程序没有驱动程序支持的设备之间数据的通信问题.采用力控组态软件编写了上位机监控界面,人机交互直观、方便.在实际项目中得到了很好地应用,实用价值很高.