欢迎您访问深圳自考网!本站由《帕思教育培训中心》提供助学服务,非政府官方网站,官方信息以广东省教育考试院(http://eea.gd.gov.cn/)为准。 RSS地图 | 网站导航

深圳自考网LOGO

服务热线:400-8077-735

自考办电话 | 在线提问 | 公众号

基于VB的分布式监控系统通信设计

编辑整理:深圳自考网 发布时间:2018-05-24 14:20:39阅读数:


郭爱文 (武汉大学动力工程系自动化专业)
王  静 (武汉大学电力工程系通讯专业) 武汉  430072
摘  要  本文介绍了利用VB的多种通信手段实现分布式监控系统的多种通信功能,对每一种通信手段给出其原理和应用实例。
关键词  VB  通信  串行口  控件  DDE  API
The Communication Design of Distributed Control System Based on VB
Abstract:  This article introduces the realization of many communication functions of Distributed Control System with the application on lots of communication methods of VB.
Key Words:  VB, Communication, Serial Port, Control Box, DDE, API
1. 概论
分布式监控系统已在工业领域得到广泛应用,许多企业对于中小规模的设备,如中小型热电厂和水电站,出于硬件软件投资利润率和性能价格比的考虑,常常是自行开发或参与开发本企业的监控系统。而许多企业在成套引进大型DCS系统后,也常因实际情况而需要自行开发或改进其监控系统。
分布式监控系统以微机为基础,用数据通信将微机连在一起实现数据共享,从而对工业过程进行集中监视管理和分散控制。因此,分布式监控系统中通信的设计与实现是至关重要的环节。Visual Basic开发语言具有简洁明了、编程效率高、开发周期短的特点,利用VB中的多种通信手段,可实现分布式监控系统的多种通信功能。
2. 与下位机的通信
分布式监控系统的数据采集站可直接与现场带有标准RS-232C接口的智能仪表、PLC和单片机等链接,并可通过扩展控制卡形成一个数据采集子网,以高速准确地获取数据。VB的MSCOMM通信控件具有完善的串口数据发送和接受功能,利用它可以屏蔽对硬件的操作,简易快捷地进行串行通信编程。
本文的实例为上位机与OMRON 200HG系列PLC的1:N链接通信。带有RS-485接口通信板的PLC直接挂在RS-485总线上,上位机通过RS-232C /RS-485转换器与总线相连,这样即构成数据采集子网,甚至可以是一个独立的小型分布式监控系统。其它仪器仪表设备,只要是标准串口都可以类似方式直接或间接与上位机链接。
关于VB的MSCOMM控件可参考相关资料。本例通信程序摘要如下:
(1) 初始化程序
Mscomm1.Commport=2  ' 选择COM2
Mscomm1.Settings="9600,N,8,2"  ' 设置通信参数
Mscomm1.Inputlen=0  ' 读入接收缓冲区全部字符 
Mscomm1.OutbufferSize=256  ' 设置发送缓冲区大小
Mscomm1.InbufferSize=512  ' 设置接收缓冲区大小
Mscomm1.PortOpen=True  '打开COM2
(2) 发送命令程序
比如读取节点号03的PLC中IR000到IR009的内容,并放到tag1字符串变量中,此时有:
Dim Command, node, begin, number as string
Dim Answerlen as integer
node="03"  '节点号
Command="RR"  '命令为读IR区
begin="0000"  '从IR000开始
number=10  '读取长度
Answerlen=51  '计算接收字符串长度
进行命令发送和接收应答处理:
Dim  FCS, I as integer
Dim  s ,f as string
s="@"+node+Commad+begin+number
FCS=0
For i=1 to Len(s)
  FCS=FCS xor Asc(Mid$(s,i,1) )  '帧校验码FCS
Next i
f=Hex$(FCS)
If  Len(f)=1  Then  f="0"+f
Commfrm.MSComm1.Output=s + f + "*" + CHR$(13)  '命令帧发送
Do
 Dummy=DoEvents()
Loop Untill Commfrm.MSComm1.InbufferCount >= Answerlen  '等待应答帧
Do tag1= Commfrm.MSComm1.Input
Loop Untill Commfrm.MSComm1.InbufferCount=0  '读完应答帧
上述程序具有相当的通用性,对于其它设备不同的只是各自的数据帧格式,因而只需做相应少量修改即可。
3. 节点自身的"通信"
节点自身的"通信"是一种形象的说法,严格说来应是VB应用程序利用DDE技术与本节点其它Windows应用程序进行数据交换。DDE(Dynamic Data Exchange)即动态数据交换,它是Windows支持的三种内部通信机制之一,是应用程序间通过共享内存进行进程间通信的一种形式。应用程序间进行数据交换称为"会话"(Conversation),申请会话端叫客户(Client),响应申请端叫服务器(Server)。一旦客户与服务器间建立起DDE所需的数据链路就可自动进行数据交换。
在监控系统开发中,工控组态软件以其功能强大、使用方便等特点得到广泛应用,但在处理复杂数据时其计算功能受到一定限制,而VB可以较好地弥补这一不足,并且还能承担数据采集、报表打印等功能。这就需要在VB应用程序与组态软件应用程序间进行动态数据交换。
VB中只有TextBox、PictureBox、Label和Form可以与其它应用程序进行动态数据交换,控件用于DDE的属性项有LinkTopic(连接主题)、LinkItem(连接项)、LinkMode(连接模式)和LinkTimeout(连接等待时间)。
这里以本实验室的小型分布式监控实验系统为例,介绍一个VB应用程序与组态王5.0应用程序间实现DDE的实例。
3.1 VB作为Server,组态王作为Client
当有些参数需要从VB应用程序传输到组态王应用程序,如VB从PLC采集水位值参数至程序Ser.vbp的Text1,再将数据动态传递给组态王的I/O变量SW,这时VB作为Server,组态王作为Client。
VB程序Ser.vbp 中属性设置如下(Form1为Text1所在窗体):
Form1.LinkTopic = "water"  数据交换的话题
Form1.LinkMode = 1  作为服务器
组态王的设置如下:
新建一个名为vbdde的DDE设备,服务程序名Ser,话题名water,数据交换方式为标准WINDOWS项目交换。新建一个名为SW的I/O变量,连接设备设为vbdde,项目名设为Text1。
3.2 组态王作为Server,VB作为Client
当有些参数需要从组态王传输到VB,如为了提高变频器电压以提升泵速,可在组态王应用程序中改变I/O变量BS值并动态传递给VB的Text2,VB接收到数据后经处理再传递给PLC相应继电器区。这时组态王作为Server,VB作为Client。
组态王设置如下:
新建一个名为BS的I/O变量,连接设备设为已建立的vbdde设备,项目名设为bengsu。
VB程序Ser.vbp中设置如下:
Text2.LinkTopic = "view|tagname"
Text2.LinkItem = "bengsu"
Text2.LinkMode = 1
TextBox控件有无连接、自动式连接、被动式连接和通知式连接四种连接模式,可依据实际情况灵活运用。
4. 网络通信
VB6.0与旧版本相比较,最明显的特点是增加了强大的网络功能,将其用于分布式监控系统中可以轻松地实现远程通信。VB的WINSOCK控件有效屏蔽了对WINDOWS套接字的低层操作,可方便地建立起网络中任意两个具有唯一IP地址节点间的连接,并通过UDP或TCP协议进行数据交换,可用于创建Client/Server应用程序。
本文举分布式监控系统中节点间通信的实例,其中节点A(IP地址202.114.102.134)作为服务器负责某一区域的数据采集与处理,程序内有一名为TCPServer的Winsock控件;节点B(IP地址202.114.102.135)是同级或上一级的某一节点,作为客户机,其程序内有一名为TCPClient的Winsock控件。
节点A服务器核心程序如下:
(1)初始化程序
tcpserver(0).RemoteHostIP = 202.114.102.135
tcpserver(0).LocalPort = 1001  'tcpserver(0)专用于侦听
tcpserver(0).Listen
(2)发送数据程序
tcpserver(Index).SendData Text1.Text
(3)处理客户机连接请求程序
Private Sub TCPServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Load tcpserver(Index)
tcpserver(Index).Accept requestID
End Sub
(4)客户机数据到达处理程序
Private Sub TCPServer_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim RD As String
tcpserver(Index).GetData RD, vbString
txtRD.text=RD
tcpserver(Index).SendData RD
End Sub
(5)关闭连接程序
Private Sub TCPServer_Close(Index As Integer)
tcpserver(Index).Close
Unload tcpserver(Index)
End Sub
以上程序着重说明Winsock控件的主要属性、方法和事件,如要实现多进程(多个客户程序同时运行),可应用创建控件数组来代表已连接的控件实例的方法处理。
节点B客户机核心程序如下:
Private ConnectFlag As Boolean  '设置判断是否连接标志
(1)初始化程序
TCPClient.RemoteHost IP= 202.114.102.134  '远程计算机IP地址
TCPClient.RemotePort = 1001  '远程计算机端口
ConnectFlag = False 
(2)申请连接程序
If  Not ConnectFlag Then
TCPClient.Close
TCPClient.Connect
Do
  DoEvents
Loop Until TCPClient.State = sckConnected
ConnectFlag = True
End Sub
(3)数据到达处理程序
Private Sub TCPClient_DataArrival(ByVal bytesTotal As Long)
Dim RD As String
TCPClient.GetData RD, vbString
txtRD.text = RD
End Sub
(4)发送数据程序
TCPClient.SendData txtSD.Text
(5)关闭连接程序
Private Sub TCPClient_Close()
TCPClient.Close
Do
  DoEvents
Loop Until TCPClient.State = sckClosed
ConnectFlag = False
End Sub
5. 远程通信
当监控系统的一些重要信息,如严重事故,需要及时通知有关部门即实现远程通信时,可以利用网络中某一连接至Internet的带有MODEM的节点,通过MODEM自动拨打电话,将信息及时地送达有关部门。
应用VB的MSCOMM控件可实现这一功能,基本方法与下位机通信类似。这里介绍调用API函数直接写I/O端口,使用设备控制块DCB的方法拨打电话并挂起MODEM。
首先利用VB的API Viewer浏览器在module1模块中声明对以下函数、数据类型和常量的引用:
CreateFile 函数
CloseHandle 函数
BuildCommDCB 函数
SetCommState 函数
DCB数据类型 
GENERIC_READ常量
GENERIC_WRITE 常量
OPEN_EXISTING 常量
(1) MODEM设置子程序
Public Function ModemSetup( ) As Boolean
Dim lResult As Long
Dim lCommHandle As Long
Dim DCB_Comm As DCB
Dim tDCBConfig As String
ModemSetup = True
'指定lCommHandle为通信源对象的句柄
lCommHandle = CreateFile(COM2,GENERIC_READ Or GENERIC_WRITE, _
  0&, 0&, OPEN_EXISTING, 0&, 0&)
'构造DCB对象的初始化字符串
tDCBConfig = "baud=9600" & "parity=NONE" & "data=8" & "stops=1"
'用初始化字符串指定DCB对象的规范
lResult = BuildCommDCB(tDCBConfig, DCB_Comm)
'根据指定DCB对象的规范来设定通信设备
lResult = SetCommState(lCommHandle, DCB_Comm)
lResult = CloseHandle(lCommHandle)
End Function
(2)发送数据子程序
Public Function ModemSD(tComm As String, tModemSend As String) As Boolean
Dim nModem As Integer
ModemSS = True
nModem = FreeFile
Open tComm For Output As nModem
Print #nModem, tModemSend
Close #nModem
End Function
(3)主程序
ModemSetup
ModemSS(COM2, "ATDT" &"02767802169"& vbCr)
ModemSS(COM2, "ATDT" & txt1.Text & vbCr)
ModemSS(COM2, "ATH" & vbCr)
本例重在说明基本原理,没有加入错误捕获陷阱及通信异常处理。
6. 结束语
本文介绍了应用VB开发分布式监控系统的各种通信功能的基本原理和实例。通过以上实例可以看出,用VB开发通信程序简洁明了,编程效率高,可维护性好,尤其适用于自行开发中小型分布式监控系统。
参考文献
1. 俞旭明等,Visual Basic 6.0网络开发技术,人民邮电出版社,1999
2. 陶文伟等,InTouch和VB之间的动态数据交换,电脑与信息技术,1999,(6)
3. C200HX/C200HG/C200HE编程手册,日本欧姆龙公司,1997

联系方式;
邮编:430072
地址:武汉水利电力大学动力系自动化教研室
电话:027-67802169或027-67802267
E-mail: evansguo@sina.com  or  evansguo@263.net


本文标签:深圳自考 毕业论文 基于VB的分布式监控系统通信设计

转载请注明:文章转载自(http://www.zikaosz.com

本文地址:http://www.zikaosz.com/lw/15275.html


《深圳自考网》免责声明:

1、由于考试政策等各方面情况的调整与变化,本网提供的考试信息仅供参考,最终考试信息请以省考试院及院校官方发布的信息为准。

2、本站内容部分信息均来源网络收集整理或来源出处标注为其它媒体的稿件转载,免费转载出于非商业性学习目的,版权归原作者所有,如有内容与版权问题等请与本站联系。联系邮箱:812379481@qq.com

深圳自考-便捷服务