1. <code id="ya7qu"><span id="ya7qu"><label id="ya7qu"></label></span></code>

    <b id="ya7qu"><bdo id="ya7qu"></bdo></b>
    <wbr id="ya7qu"><optgroup id="ya7qu"><strike id="ya7qu"></strike></optgroup></wbr>
  2. <u id="ya7qu"><bdo id="ya7qu"></bdo></u>
    現(xiàn)在位置:范文先生網(wǎng)>理工論文>計(jì)算機(jī)論文>基于VB的分布式監(jiān)控系統(tǒng)通信設(shè)計(jì)

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

    時(shí)間:2023-02-20 22:36:20 計(jì)算機(jī)論文 我要投稿

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

    摘  要  本文介紹了利用VB的多種通信手段實(shí)現(xiàn)分布式監(jiān)控系統(tǒng)的多種通信功能,對(duì)每一種通信手段給出其原理和應(yīng)用實(shí)例。
    關(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è)對(duì)于中小規(guī)模的設(shè)備,如中小型熱電廠和水電站,出于硬件軟件投資利潤(rùn)率和性能價(jià)格比的考慮,常常是自行開發(fā)或參與開發(fā)本企業(yè)的監(jiān)控系統(tǒng)。而許多企業(yè)在成套引進(jìn)大型DCS系統(tǒng)后,也常因?qū)嶋H情況而需要自行開發(fā)或改進(jìn)其監(jiān)控系統(tǒng)。
    分布式監(jiān)控系統(tǒng)以微機(jī)為基礎(chǔ),用數(shù)據(jù)通信將微機(jī)連在一起實(shí)現(xiàn)數(shù)據(jù)共享,從而對(duì)工業(yè)過(guò)程進(jìn)行集中監(jiān)視管理和分散控制。因此,分布式監(jiān)控系統(tǒng)中通信的設(shè)計(jì)與實(shí)現(xiàn)是至關(guān)重要的環(huán)節(jié)。Visual Basic開發(fā)語(yǔ)言具有簡(jiǎn)潔明了、編程效率高、開發(fā)周期短的特點(diǎn),利用VB中的多種通信手段,可實(shí)現(xiàn)分布式監(jiān)控系統(tǒng)的多種通信功能。
    2. 與下位機(jī)的通信
    分布式監(jiān)控系統(tǒng)的數(shù)據(jù)采集站可直接與現(xiàn)場(chǎng)帶有標(biāo)準(zhǔn)RS-232C接口的智能儀表、PLC和單片機(jī)等鏈接,并可通過(guò)擴(kuò)展控制卡形成一個(gè)數(shù)據(jù)采集子網(wǎng),以高速準(zhǔn)確地獲取數(shù)據(jù)。VB的MSCOMM通信控件具有完善的串口數(shù)據(jù)發(fā)送和接受功能,利用它可以屏蔽對(duì)硬件的操作,簡(jiǎn)易快捷地進(jìn)行串行通信編程。
    本文的實(shí)例為上位機(jī)與OMRON 200HG系列PLC的1:N鏈接通信。帶有RS-485接口通信板的PLC直接掛在RS-485總線上,上位機(jī)通過(guò)RS-232C /RS-485轉(zhuǎn)換器與總線相連,這樣即構(gòu)成數(shù)據(jù)采集子網(wǎng),甚至可以是一個(gè)獨(dú)立的小型分布式監(jiān)控系統(tǒng)。其它儀器儀表設(shè)備,只要是標(biāo)準(zhǔn)串口都可以類似方式直接或間接與上位機(jī)鏈接。
    關(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é)點(diǎn)號(hào)03的PLC中IR000到IR009的內(nèi)容,并放到tag1字符串變量中,此時(shí)有:
    Dim Command, node, begin, number as string
    Dim Answerlen as integer
    node="03"            '節(jié)點(diǎn)號(hào)
    Command="RR"       '命令為讀IR區(qū)
    begin="0000"          '從IR000開始
    number=10              '讀取長(zhǎng)度
    Answerlen=51           '計(jì)算接收字符串長(zhǎng)度
    進(jìn)行命令發(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) )      '幀校驗(yàn)碼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ù)耐ㄓ眯裕瑢?duì)于其它設(shè)備不同的只是各自的數(shù)據(jù)幀格式,因而只需做相應(yīng)少量修改即可。
    3. 節(jié)點(diǎn)自身的"通信"
    節(jié)點(diǎn)自身的"通信"是一種形象的說(shuō)法,嚴(yán)格說(shuō)來(lái)應(yīng)是VB應(yīng)用程序利用DDE技術(shù)與本節(jié)點(diǎn)其它Windows應(yīng)用程序進(jìn)行數(shù)據(jù)交換。DDE(Dynamic Data Exchange)即動(dòng)態(tài)數(shù)據(jù)交換,它是Windows支持的三種內(nèi)部通信機(jī)制之一,是應(yīng)用程序間通過(guò)共享內(nèi)存進(jìn)行進(jìn)程間通信的一種形式。應(yīng)用程序間進(jìn)行數(shù)據(jù)交換稱為"會(huì)話"(Conversation),申請(qǐng)會(huì)話端叫客戶(Client),響應(yīng)申請(qǐng)端叫服務(wù)器(Server)。一旦客戶與服務(wù)器間建立起DDE所需的數(shù)據(jù)鏈路就可自動(dòng)進(jìn)行數(shù)據(jù)交換。
    在監(jiān)控系統(tǒng)開發(fā)中,工控組態(tài)軟件以其功能強(qiáng)大、使用方便等特點(diǎn)得到廣泛應(yīng)用,但在處理復(fù)雜數(shù)據(jù)時(shí)其計(jì)算功能受到一定限制,而VB可以較好地彌補(bǔ)這一不足,并且還能承擔(dān)數(shù)據(jù)采集、報(bào)表打印等功能。這就需要在VB應(yīng)用程序與組態(tài)軟件應(yīng)用程序間進(jìn)行動(dòng)態(tài)數(shù)據(jù)交換。
    VB中只有TextBox、PictureBox、Label和Form可以與其它應(yīng)用程序進(jìn)行動(dòng)態(tài)數(shù)據(jù)交換,控件用于DDE的屬性項(xiàng)有LinkTopic(連接主題)、LinkItem(連接項(xiàng))、LinkMode(連接模式)和LinkTimeout(連接等待時(shí)間)。
    這里以本實(shí)驗(yàn)室的小型分布式監(jiān)控實(shí)驗(yàn)系統(tǒng)為例,介紹一個(gè)VB應(yīng)用程序與組態(tài)王5.0應(yīng)用程序間實(shí)現(xiàn)DDE的實(shí)例。
    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ù)動(dòng)態(tài)傳遞給組態(tài)王的I/O變量SW,這時(shí)VB作為Server,組態(tài)王作為Client。
    VB程序Ser.vbp 中屬性設(shè)置如下(Form1為Text1所在窗體):
    Form1.LinkTopic = "water"      數(shù)據(jù)交換的話題
    Form1.LinkMode = 1           作為服務(wù)器
    組態(tài)王的設(shè)置如下:
    新建一個(gè)名為vbdde的DDE設(shè)備,服務(wù)程序名Ser,話題名water,數(shù)據(jù)交換方式為標(biāo)準(zhǔn)WINDOWS項(xiàng)目交換。新建一個(gè)名為SW的I/O變量,連接設(shè)備設(shè)為vbdde,項(xiàng)目名設(shè)為Text1。
    3.2 組態(tài)王作為Server,VB作為Client
    當(dāng)有些參數(shù)需要從組態(tài)王傳輸?shù)絍B,如為了提高變頻器電壓以提升泵速,可在組態(tài)王應(yīng)用程序中改變I/O變量BS值并動(dòng)態(tài)傳遞給VB的Text2,VB接收到數(shù)據(jù)后經(jīng)處理再傳遞給PLC相應(yīng)繼電器區(qū)。這時(shí)組態(tài)王作為Server,VB作為Client。
    組態(tài)王設(shè)置如下:
    新建一個(gè)名為BS的I/O變量,連接設(shè)備設(shè)為已建立的vbdde設(shè)備,項(xiàng)目名設(shè)為bengsu。
    VB程序Ser.vbp中設(shè)置如下:
    Text2.LinkTopic = "view|tagname"
    Text2.LinkItem = "bengsu"
    Text2.LinkMode = 1
    TextBox控件有無(wú)連接、自動(dòng)式連接、被動(dòng)式連接和通知式連接四種連接模式,可依據(jù)實(shí)際情況靈活運(yùn)用。
    4. 網(wǎng)絡(luò)通信
    VB6.0與舊版本相比較,最明顯的特點(diǎn)是增加了強(qiáng)大的網(wǎng)絡(luò)功能,將其用于分布式監(jiān)控系統(tǒng)中可以輕松地實(shí)現(xiàn)遠(yuǎn)程通信。VB的WINSOCK控件有效屏蔽了對(duì)WINDOWS套接字的低層操作,可方便地建立起網(wǎng)絡(luò)中任意兩個(gè)具有唯一IP地址節(jié)點(diǎn)間的連接,并通過(guò)UDP或TCP協(xié)議進(jìn)行數(shù)據(jù)交換,可用于創(chuàng)建Client/Server應(yīng)用程序。
    本文舉分布式監(jiān)控系統(tǒng)中節(jié)點(diǎn)間通信的實(shí)例,其中節(jié)點(diǎn)A(IP地址202.114.102.134)作為服務(wù)器負(fù)責(zé)某一區(qū)域的數(shù)據(jù)采集與處理,程序內(nèi)有一名為TCPServer的Winsock控件;節(jié)點(diǎn)B(IP地址202.114.102.135)是同級(jí)或上一級(jí)的某一節(jié)點(diǎn),作為客戶機(jī),其程序內(nèi)有一名為TCPClient的Winsock控件。
    節(jié)點(diǎn)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)處理客戶機(jī)連接請(qǐng)求程序
    Private Sub TCPServer_ConnectionRequest(Index As Integer, ByVal requestID As Long)
    Load tcpserver(Index)
    tcpserver(Index).Accept requestID
    End Sub
    (4)客戶機(jī)數(shù)據(jù)到達(dá)處理程序
    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
    以上程序著重說(shuō)明Winsock控件的主要屬性、方法和事件,如要實(shí)現(xiàn)多進(jìn)程(多個(gè)客戶程序同時(shí)運(yùn)行),可應(yīng)用創(chuàng)建控件數(shù)組來(lái)代表已連接的控件實(shí)例的方法處理。
    節(jié)點(diǎn)B客戶機(jī)核心程序如下:
    Private ConnectFlag As Boolean               '設(shè)置判斷是否連接標(biāo)志

    (1)初始化程序
    TCPClient.RemoteHost IP= 202.114.102.134     '遠(yuǎn)程計(jì)算機(jī)IP地址
    TCPClient.RemotePort = 1001                 '遠(yuǎn)程計(jì)算機(jī)端口
    ConnectFlag = False    
    (2)申請(qǐng)連接程序
    If  Not ConnectFlag Then
    TCPClient.Close
    TCPClient.Connect
    Do
      DoEvents
    Loop Until TCPClient.State = sckConnected
    ConnectFlag = True
    End Sub
    (3)數(shù)據(jù)到達(dá)處理程序
    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. 遠(yuǎn)程通信
    當(dāng)監(jiān)控系統(tǒng)的一些重要信息,如嚴(yán)重事故,需要及時(shí)通知有關(guān)部門即實(shí)現(xiàn)遠(yuǎn)程通信時(shí),可以利用網(wǎng)絡(luò)中某一連接至Internet的帶有MODEM的節(jié)點(diǎn),通過(guò)MODEM自動(dòng)撥打電話,將信息及時(shí)地送達(dá)有關(guān)部門。
    應(yīng)用VB的MSCOMM控件可實(shí)現(xiàn)這一功能,基本方法與下位機(jī)通信類似。這里介紹調(diào)用API函數(shù)直接寫I/O端口,使用設(shè)備控制塊DCB的方法撥打電話并掛起MODEM。
    首先利用VB的API Viewer瀏覽器在module1模塊中聲明對(duì)以下函數(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為通信源對(duì)象的句柄
    lCommHandle = CreateFile(COM2,GENERIC_READ Or GENERIC_WRITE, _
        0&, 0&, OPEN_EXISTING, 0&, 0&)
    '構(gòu)造DCB對(duì)象的初始化字符串
    tDCBConfig = "baud=9600" & "parity=NONE" & "data=8" & "stops=1"
    '用初始化字符串指定DCB對(duì)象的規(guī)范
    lResult = BuildCommDCB(tDCBConfig, DCB_Comm)
    '根據(jù)指定DCB對(duì)象的規(guī)范來(lái)設(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)
    本例重在說(shuō)明基本原理,沒有加入錯(cuò)誤捕獲陷阱及通信異常處理。
    6. 結(jié)束語(yǔ)
    本文介紹了應(yīng)用VB開發(fā)分布式監(jiān)控系統(tǒng)的各種通信功能的基本原理和實(shí)例。通過(guò)以上實(shí)例可以看出,用VB開發(fā)通信程序簡(jiǎn)潔明了,編程效率高,可維護(hù)性好,尤其適用于自行開發(fā)中小型分布式監(jiān)控系統(tǒng)。
    參考文獻(xiàn)
    1. 俞旭明等,Visual Basic 6.0網(wǎng)絡(luò)開發(fā)技術(shù),人民郵電出版社,1999
    2. 陶文偉等,InTouch和VB之間的動(dòng)態(tài)數(shù)據(jù)交換,電腦與信息技術(shù),1999,(6)
    3. C200HX/C200HG/C200HE編程手冊(cè),日本歐姆龍公司,1997

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

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

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

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

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

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

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

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

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

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

    国产福利萌白酱精品tv一区_日韩亚洲中字无码一区二区三区_亚洲欧洲高清无码在线_全黄无码免费一级毛片
    1. <code id="ya7qu"><span id="ya7qu"><label id="ya7qu"></label></span></code>

      <b id="ya7qu"><bdo id="ya7qu"></bdo></b>
      <wbr id="ya7qu"><optgroup id="ya7qu"><strike id="ya7qu"></strike></optgroup></wbr>
    2. <u id="ya7qu"><bdo id="ya7qu"></bdo></u>
      亚洲欧美日韩v在线观看不卡 | 中文字幕久久久久久精 | 亚洲成AV大片大片在线播放 | 亚洲欧美国产国产一区 | 中出系列中文字幕在线 | 亚洲色欧美色2019在线 |