国产在线导航,欧美日本中文,黄色在线观看网站永久免费乱码,chinese国产在线视频,亚洲欧洲第一视频,天天做人人爱夜夜爽2020毛片,亚洲欧美中文字幕在线网站

現(xiàn)在位置:范文先生網(wǎng)>理工論文>計算機論文>基于VB的分布式監(jiān)控系統(tǒng)通信設(shè)計

基于VB的分布式監(jiān)控系統(tǒng)通信設(shè)計

時間:2023-02-20 22:36:20 計算機論文 我要投稿

基于VB的分布式監(jiān)控系統(tǒng)通信設(shè)計

摘  要  本文介紹了利用VB的多種通信手段實現(xiàn)分布式監(jiān)控系統(tǒng)的多種通信功能,對每一種通信手段給出其原理和應(yīng)用實例。
關(guān)鍵詞  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. 概論
分布式監(jiān)控系統(tǒng)已在工業(yè)領(lǐng)域得到廣泛應(yīng)用,許多企業(yè)對于中小規(guī)模的設(shè)備,如中小型熱電廠和水電站,出于硬件軟件投資利潤率和性能價格比的考慮,常常是自行開發(fā)或參與開發(fā)本企業(yè)的監(jiān)控系統(tǒng)。而許多企業(yè)在成套引進大型DCS系統(tǒng)后,也常因?qū)嶋H情況而需要自行開發(fā)或改進其監(jiān)控系統(tǒng)。
分布式監(jiān)控系統(tǒng)以微機為基礎(chǔ),用數(shù)據(jù)通信將微機連在一起實現(xiàn)數(shù)據(jù)共享,從而對工業(yè)過程進行集中監(jiān)視管理和分散控制。因此,分布式監(jiān)控系統(tǒng)中通信的設(shè)計與實現(xiàn)是至關(guān)重要的環(huán)節(jié)。Visual Basic開發(fā)語言具有簡潔明了、編程效率高、開發(fā)周期短的特點,利用VB中的多種通信手段,可實現(xiàn)分布式監(jiān)控系統(tǒng)的多種通信功能。
2. 與下位機的通信
分布式監(jiān)控系統(tǒng)的數(shù)據(jù)采集站可直接與現(xiàn)場帶有標準RS-232C接口的智能儀表、PLC和單片機等鏈接,并可通過擴展控制卡形成一個數(shù)據(jù)采集子網(wǎng),以高速準確地獲取數(shù)據(jù)。VB的MSCOMM通信控件具有完善的串口數(shù)據(jù)發(fā)送和接受功能,利用它可以屏蔽對硬件的操作,簡易快捷地進行串行通信編程。
本文的實例為上位機與OMRON 200HG系列PLC的1:N鏈接通信。帶有RS-485接口通信板的PLC直接掛在RS-485總線上,上位機通過RS-232C /RS-485轉(zhuǎn)換器與總線相連,這樣即構(gòu)成數(shù)據(jù)采集子網(wǎng),甚至可以是一個獨立的小型分布式監(jiān)控系統(tǒng)。其它儀器儀表設(shè)備,只要是標準串口都可以類似方式直接或間接與上位機鏈接。
關(guān)于VB的MSCOMM控件可參考相關(guān)資料。本例通信程序摘要如下:
(1) 初始化程序
Mscomm1.Commport=2           ' 選擇COM2
Mscomm1.Settings="9600,N,8,2"   ' 設(shè)置通信參數(shù)
Mscomm1.Inputlen=0             ' 讀入接收緩沖區(qū)全部字符  
Mscomm1.OutbufferSize=256      ' 設(shè)置發(fā)送緩沖區(qū)大小
Mscomm1.InbufferSize=512       ' 設(shè)置接收緩沖區(qū)大小
Mscomm1.PortOpen=True          '打開COM2
(2) 發(fā)送命令程序
比如讀取節(jié)點號03的PLC中IR000到IR009的內(nèi)容,并放到tag1字符串變量中,此時有:
Dim Command, node, begin, number as string
Dim Answerlen as integer
node="03"            '節(jié)點號
Command="RR"       '命令為讀IR區(qū)
begin="0000"          '從IR000開始
number=10              '讀取長度
Answerlen=51           '計算接收字符串長度
進行命令發(fā)送和接收應(yīng)答處理:
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)   '命令幀發(fā)送
Do
Dummy=DoEvents()
Loop Untill Commfrm.MSComm1.InbufferCount >= Answerlen   '等待應(yīng)答幀
Do tag1= Commfrm.MSComm1.Input
Loop Un

till Commfrm.MSComm1.InbufferCount=0  '讀完應(yīng)答幀
上述程序具有相當(dāng)?shù)耐ㄓ眯,對于其它設(shè)備不同的只是各自的數(shù)據(jù)幀格式,因而只需做相應(yīng)少量修改即可。
3. 節(jié)點自身的"通信"
節(jié)點自身的"通信"是一種形象的說法,嚴格說來應(yīng)是VB應(yīng)用程序利用DDE技術(shù)與本節(jié)點其它Windows應(yīng)用程序進行數(shù)據(jù)交換。DDE(Dynamic Data Exchange)即動態(tài)數(shù)據(jù)交換,它是Windows支持的三種內(nèi)部通信機制之一,是應(yīng)用程序間通過共享內(nèi)存進行進程間通信的一種形式。應(yīng)用程序間進行數(shù)據(jù)交換稱為"會話"(Conversation),申請會話端叫客戶(Client),響應(yīng)申請端叫服務(wù)器(Server)。一旦客戶與服務(wù)器間建立起DDE所需的數(shù)據(jù)鏈路就可自動進行數(shù)據(jù)交換。
在監(jiān)控系統(tǒng)開發(fā)中,工控組態(tài)軟件以其功能強大、使用方便等特點得到廣泛應(yīng)用,但在處理復(fù)雜數(shù)據(jù)時其計算功能受到一定限制,而VB可以較好地彌補這一不足,并且還能承擔(dān)數(shù)據(jù)采集、報表打印等功能。這就需要在VB應(yīng)用程序與組態(tài)軟件應(yīng)用程序間進行動態(tài)數(shù)據(jù)交換。
VB中只有TextBox、PictureBox、Label和Form可以與其它應(yīng)用程序進行動態(tài)數(shù)據(jù)交換,控件用于DDE的屬性項有LinkTopic(連接主題)、LinkItem(連接項)、LinkMode(連接模式)和LinkTimeout(連接等待時間)。
這里以本實驗室的小型分布式監(jiān)控實驗系統(tǒng)為例,介紹一個VB應(yīng)用程序與組態(tài)王5.0應(yīng)用程序間實現(xiàn)DDE的實例。
3.1 VB作為Server,組態(tài)王作為Client
當(dāng)有些參數(shù)需要從VB應(yīng)用程序傳輸?shù)浇M態(tài)王應(yīng)用程序,如VB從PLC采集水位值參數(shù)至程序Ser.vbp的Text1,再將數(shù)據(jù)動態(tài)傳遞給組態(tài)王的I/O變量SW,這時VB作為Server,組態(tài)王作為Client。
VB程序Ser.vbp 中屬性設(shè)置如下(Form1為Text1所在窗體):
Form1.LinkTopic = "water"      數(shù)據(jù)交換的話題
Form1.LinkMode = 1           作為服務(wù)器
組態(tài)王的設(shè)置如下:
新建一個名為vbdde的DDE設(shè)備,服務(wù)程序名Ser,話題名water,數(shù)據(jù)交換方式為標準WINDOWS項目交換。新建一個名為SW的I/O變量,連接設(shè)備設(shè)為vbdde,項目名設(shè)為Text1。
3.2 組態(tài)王作為Server,VB作為Client
當(dāng)有些參數(shù)需要從組態(tài)王傳輸?shù)絍B,如為了提高變頻器電壓以提升泵速,可在組態(tài)王應(yīng)用程序中改變I/O變量BS值并動態(tài)傳遞給VB的Text2,VB接收到數(shù)據(jù)后經(jīng)處理再傳遞給PLC相應(yīng)繼電器區(qū)。這時組態(tài)王作為Server,VB作為Client。
組態(tài)王設(shè)置如下:
新建一個名為BS的I/O變量,連接設(shè)備設(shè)為已建立的vbdde設(shè)備,項目名設(shè)為bengsu。
VB程序Ser.vbp中設(shè)置如下:
Text2.LinkTopic = "view|tagname"
Text2.LinkItem = "bengsu"
Text2.LinkMode = 1
TextBox控件有無連接、自動式連接、被動式連接和通知式連接四種連接模式,可依據(jù)實際情況靈活運用。
4. 網(wǎng)絡(luò)通信
VB6.0與舊版本相比較,最明顯的特點是增加了強大的網(wǎng)絡(luò)功能,將其用于分布式監(jiān)控系統(tǒng)中可以輕松地實現(xiàn)遠程通信。VB的WINSOCK控件有效屏蔽了對WINDOWS套接字的低層操作,可方便地建立起網(wǎng)絡(luò)中任意兩個具有唯一IP地址節(jié)點間的連接,并通過UDP或TCP協(xié)議進行數(shù)據(jù)交換,可用于創(chuàng)建Client/Server應(yīng)用程序。
本文舉分布式監(jiān)控系統(tǒng)中節(jié)點間通信的實例,其中節(jié)點A(IP地址202.114.102.134)作為服務(wù)器負責(zé)某一區(qū)域的數(shù)據(jù)采集與處理,程序內(nèi)有一名為TCPServer的Winsock控件;節(jié)點B(IP地址202.114.102.135)是同級或上一級的某一節(jié)點,作為客戶機,其程序內(nèi)有一名為TCPClient的Winsock控件。
節(jié)點A服務(wù)器核心程序如下:
(1)初始化程序
tcpserver(0).RemoteHostIP = 202.114.102.135
tcpserver(0).LocalPort = 1001   'tcpserver(0)專用于偵聽
tcpserver(0).Listen
(2)發(fā)送數(shù)據(jù)程序
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)客戶機數(shù)據(jù)到達處理程序
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)關(guān)閉連接程序
Private Sub TCPServer_Close(Index As Integer)
tcpserver(Index).Close
Unload tcpserver(Index)
End Sub
以上程序著重說明Winsock控件的主要屬性、方法和事件,如要實現(xiàn)多進程(多個客戶程序同時運行),可應(yīng)用創(chuàng)建控件數(shù)組來代表已連接的控件實例的方法處理。
節(jié)點B客戶機核心程序如下:
Private ConnectFlag As Boolean               '設(shè)置判斷是否連接標志

(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)數(shù)據(jù)到達處理程序
Private Sub TCPClient_DataArrival(ByVal bytesTotal As Long)
Dim RD As String
TCPClient.GetData RD, vbString
txtRD.text = RD
End Sub
(4)發(fā)送數(shù)據(jù)程序
TCPClient.SendData txtSD.Text
(5)關(guān)閉連接程序
Private Sub TCPClient_Close()
TCPClient.Close
Do
  DoEvents
Loop Until TCPClient.State = sckClosed
ConnectFlag = False
End Sub
5. 遠程通信
當(dāng)監(jiān)控系統(tǒng)的一些重要信息,如嚴重事故,需要及時通知有關(guān)部門即實現(xiàn)遠程通信時,可以利用網(wǎng)絡(luò)中某一連接至Internet的帶有MODEM的節(jié)點,通過MODEM自動撥打電話,將信息及時地送達有關(guān)部門。
應(yīng)用VB的MSCOMM控件可實現(xiàn)這一功能,基本方法與下位機通信類似。這里介紹調(diào)用API函數(shù)直接寫I/O端口,使用設(shè)備控制塊DCB的方法撥打電話并掛起MODEM。
首先利用VB的API Viewer瀏覽器在module1模塊中聲明對以下函數(shù)、數(shù)據(jù)類型和常量的引用:
CreateFile 函數(shù)
CloseHandle 函數(shù)
BuildCommDCB 函數(shù)
SetCommState 函數(shù)
DCB數(shù)據(jù)類型      
GENERIC_READ常量
GENERIC_WRITE 常量
OPEN_EXISTING 常量
(1) MODEM設(shè)置子程序
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&)
'構(gòu)造DCB對象的初始化字符串
tDCBConfig = "baud=9600" & "parity=NONE" & "data=8" & "stops=1"
'用初始化字符串指定DCB對象的規(guī)范
lResult = BuildCommDCB(tDCBConfig, DCB_Comm)
'根據(jù)指定DCB對象的規(guī)范來設(shè)定通信設(shè)備
lResult = SetCommState(lCommHandle, DCB_Comm)
lResult = CloseHandle(lCommHandle)
End Function
(2)發(fā)送數(shù)據(jù)子程序
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. 結(jié)束語
本文介紹了應(yīng)用VB開發(fā)分布式監(jiān)控系統(tǒng)的各種通信功能的基本原理和實例。通過以上實例可以看出,用VB開發(fā)通信程序簡潔明了,編程效率高,可維護性好,尤其適用于自行開發(fā)中小型分布式監(jiān)控系統(tǒng)。
參考文獻
1. 俞旭明等,Visual Basic 6.0網(wǎng)絡(luò)開發(fā)技術(shù),人民郵電出版社,1999
2. 陶文偉等,InTouch和VB之間的動態(tài)數(shù)據(jù)交換,電腦與信息技術(shù),1999,(6)
3. C200HX/C200HG/C200HE編程手冊,日本歐姆龍公司,1997

【基于VB的分布式監(jiān)控系統(tǒng)通信設(shè)計】相關(guān)文章:

基于VB的分布式監(jiān)控系統(tǒng)通信設(shè)計08-06

基于SMS通信的直放站監(jiān)控系統(tǒng)設(shè)計08-06

基于MPI網(wǎng)絡(luò)的自來水廠分布式監(jiān)控系統(tǒng)08-06

基于DSP芯片的分級分布式管理系統(tǒng)設(shè)計08-06

分布式發(fā)電機勵磁監(jiān)控系統(tǒng)的設(shè)計08-06

基于FPGA的總線型LVDS通信系統(tǒng)設(shè)計08-06

基于通信器S1503的門禁系統(tǒng)的設(shè)計08-06

基于CAN總線的EV電控系統(tǒng)通信的設(shè)計與開發(fā)08-06

基于Winodws CE的嵌入式網(wǎng)絡(luò)監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)08-06