酷文首页  
站内搜索:
网站地图 | RSS订阅 | 收藏本站
经济论文
证券金融
工商管理
会计审计
法学论文
医药论文
社会论文
教育论文
计算机论文
艺术论文
哲学论文
财政税收
财务管理
公共管理
理学论文
政治论文
文学论文
工学论文
文化论文
实用文档
应用文
自考成考
演讲稿
法律文书
子栏目导行↓
网站赞助商↓
本类热点↓
本类更新↓
热门标签↓
网摘收藏↓

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

作者:不详
来源:网络
点击:
载入中...
加入时间:2007-03-26
字体大小:[  ]

组态王的设置如下:
新建一个名为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)
本例重在说明基本原理,没有加入错误捕获陷阱及通信异常处理。转贴于 酷文网-论文下载中心 http://www.coolwen.net


共3页: 上一页 [1] 2 [3] 下一页

网摘收藏:
免责声明 | 关于我们 | 广告联系 | 友情链接 | 网站地图 | 共同合作
免费论文 毕业论文 毕业论文范文 酷文网(www.coolwen.net) 版权所有 coolwen.net 2007,All Rights Reserved
E-mail:hui_love#tom.com(为防止垃圾邮件请把#换成@) 点击这里给我发消息 点击这里给我发消息
湘ICP备07003917号