摘要:本文通過分析啤酒稀釋自控系統(tǒng)這一實例,介紹了利用微軟Visual Basic的串口通信控件MSComm和小型PLC開發(fā)小型自控系統(tǒng)的方法。
關(guān)鍵詞:串行通信、三菱FX、Visual Basic、自控系統(tǒng)
一. 前言
隨著生產(chǎn)自動化程度的不斷提高,可編程序控制器PLC得到了廣泛的應(yīng)用,特別是小型PLC具有編程簡單、性能可靠和價格低">

      技術(shù)頻道

      利用Visual Basic和PLC開發(fā)小型自控系統(tǒng)

       摘要:本文通過分析啤酒稀釋自控系統(tǒng)這一實例,介紹了利用微軟Visual Basic的串口通信控件MSComm和小型PLC開發(fā)小型自控系統(tǒng)的方法。
      關(guān)鍵詞:串行通信、三菱FX、Visual Basic、自控系統(tǒng)
      一. 前言
      隨著生產(chǎn)自動化程度的不斷提高,可編程序控制器PLC得到了廣泛的應(yīng)用,特別是小型PLC具有編程簡單、性能可靠和價格低的特點,被大量應(yīng)用于單機控制系統(tǒng)中,如啤酒的稀釋控制、離心機控制等。作為設(shè)備維修技術(shù)人員,一般都能掌握PLC和計算機PC的應(yīng)用知識,但如何利用PLC和PC來設(shè)計小型自控系統(tǒng),實現(xiàn)簡單的數(shù)據(jù)采集和監(jiān)控操作,從而滿足生產(chǎn)需要,卻是一個要深入學(xué)習(xí)研究的問題。
      面向生產(chǎn)操作,設(shè)計簡單有效的控制系統(tǒng),涉及到三部分的軟件編程:
      第一:PC上人機操作界面的設(shè)計。PC作為上位機,一般都是運行在Windows 98/2000操作系統(tǒng)下,利用微軟提供的可視化編程軟件Visual Basic 6.0,設(shè)備維修技術(shù)人員就可設(shè)計出優(yōu)美的人機操作界面,只需進行主要操作功能編程和少量界面控制編程。
      第二:實現(xiàn)生產(chǎn)工藝要求的PLC控制程序設(shè)計。因為是小型控制系統(tǒng),其生產(chǎn)控制過程并不復(fù)雜,技術(shù)人員只要充分了解了生產(chǎn)工藝和控制要求,運用PLC編程工具,此部分設(shè)計編程并不難。
      第三:PC與PLC通訊程序的設(shè)計。此部分的開發(fā)設(shè)計較難,需要掌握PC和PLC的有關(guān)通訊硬件驅(qū)動和通訊協(xié)議的知識。但對于小型控制系統(tǒng)來說,主要通過PC串口來通訊,所以通訊程序設(shè)計的關(guān)鍵是如何利用Visual Basic 6.0中的串口通信控件——MSComm控件,并根據(jù)PLC的串口通信協(xié)議設(shè)計出上下位機的數(shù)據(jù)交換程序。
      下面以啤酒稀釋自控系統(tǒng)設(shè)計為例,主要講解PC和PLC通訊程序的設(shè)計要點。
      二. 啤酒稀釋自控系統(tǒng)設(shè)計分析
      1. 啤酒稀釋控制要求
      啤酒稀釋是啤酒生產(chǎn)中一個重要環(huán)節(jié),通過把高濃度的酒液與脫氧水按比例混合成稀釋酒,從而提高啤酒產(chǎn)量和增加啤酒品種,稀釋的控制過程很簡單,主要步驟有:
      1) 輸入高濃度的濃度A和稀釋后要達到的濃度B ;
      2) 計算出加水量的百分比 [(B-A) / A]*100% ;
      3) 根據(jù)此百分比和高濃酒的瞬時流量,計算出脫氧水要達到的流量;
      4) 比較水的瞬時流量和計算出的流量,來控制水調(diào)節(jié)閥的開度,使水瞬時流量等于計算流量。
      由于酒和水的瞬時流量是變化的,所以3)、4)步要反復(fù)進行。以上所有的計算功能和PID調(diào)節(jié)功能都由PLC完成。
      2. 啤酒稀釋的人機操作界面:
      人機操作主要用來輸入啤酒濃度數(shù)據(jù)、操作命令,直觀顯示各種流量數(shù)據(jù)并記錄偏差曲線,界面圖如下:
      3. 硬件配置
      本例子中上位機PC選用聯(lián)想奔騰Ⅱ品牌機,外加RS232轉(zhuǎn)RS485通訊轉(zhuǎn)換卡。下位機PLC選用三菱FX2N-16MR,另加模擬輸入模塊FX2N-2AD 和模擬輸出模塊FX2N-2DA各一塊,外加一個485串口通訊模塊PC-485BD。
      三. PC與PLC通訊程序設(shè)計分析
      在分析具體的VB通訊程序之前,先要介紹有關(guān)VB串口通信控件MSComm的應(yīng)用知識和三菱PLC 通訊協(xié)議。
      1. MSComm控件簡介
      如圖所示是Mscomm控件的圖標(biāo)。
      它可以用來提供簡單的串行端口通信功能,也可以用來創(chuàng)建功能完備、事件驅(qū)動的高級通信工具。Mscomm控件提供了一系列標(biāo)準(zhǔn)通信命令的使用界面。使用它可以建立與串行端口的連接,通過串行端口再連接到其它設(shè)備(如調(diào)制解調(diào)器、PLC),發(fā)出命令,交換數(shù)據(jù),以及監(jiān)視和響應(yīng)串行連接中發(fā)生的事件和錯誤。
      2. MSComm控件的基本屬性
      MSComm 控件有很多重要的屬性,基本屬性如下:
      屬性 描述
      CommPort 設(shè)置并返回通訊端口號。
      Settings 以字符串的形式設(shè)置并返回波特率、奇偶校驗、數(shù)據(jù)位、停止位。
      PortOpen 設(shè)置并返回通訊端口的狀態(tài)。也可以打開和關(guān)閉端口。
      Input 從接收緩沖區(qū)返回和刪除字符。
      Output 向傳輸緩沖區(qū)寫一個字符串。
      如下程序打開串行端口COM1
      MSComm1.CommPort = 1 使用 COM1
      MSComm1.Settings = "9600,N,7,1" 9600波特率,無奇偶校驗,7位數(shù)據(jù),一個停止位。
      MSComm1.PortOpen = True ''打開端口,開始通信。
      3. MSComm控件的通信方式
      通信控件有2種不同的方式來處理和解決各類通信軟件的開發(fā)和設(shè)計問題。
      (1) 事件驅(qū)動
      事件驅(qū)動通訊是處理串行端口交互作用的一種非常有效的方法。在許多情況下,在事件發(fā)生時需要得到通知,例如:當(dāng)線路數(shù)據(jù)到達本端或CD線和RTS信號線狀態(tài)發(fā)生變化時,要求我們使用相應(yīng)的事件來跟蹤和出理。在這些情況下, Mscomm控件將觸發(fā)OnComm事件,CommEvent屬性值也將被改變。所以在OnComm事件中讀取CommEvent屬性值就可以檢測和處理通信錯誤等方面的問題。
      (2)查詢方式
      利用定時器控件Timer,我們可以設(shè)計程序每隔一段時間去讀取CommEvent的值并處理所發(fā)生錯誤和事件。
      4. 本實例中采用的通訊方式
      在本例子中,PC與PLC 采用無握手協(xié)議的串行通信,它們只用兩根數(shù)據(jù)線 TD和RD、一根信號地線連接,數(shù)據(jù)通信采用查詢方式。根據(jù)系統(tǒng)功能要求,PC需發(fā)送兩種類型的命令:
      (1) 周期性命令,它由定時器觸發(fā)引起,每隔0.5秒發(fā)送一次。用它來向PLC查詢實時顯示的數(shù)據(jù)。如酒、水的瞬時流量,調(diào)節(jié)閥開度等。
      (2) 非周期性命令,它由操作者按動命令按鈕引起,非周期性發(fā)送。用它來傳送輸入?yún)?shù)、操作命令給PLC 。
      在啤酒稀釋的人機操作界面中,有運行時不可見的通信控件(MSComm1)一個、定時器控件一個Timer1。通信控件(MSComm1)用于初始化串口數(shù)據(jù)并打開串口;定時器控件(Timer1)用于每隔0.5秒執(zhí)行通訊命令,把查詢命令從PC發(fā)送到PLC,同時接收PLC返回的應(yīng)答數(shù)據(jù)。設(shè)計通訊數(shù)據(jù)的發(fā)送和查詢功能,必須掌握PLC所遵循的通訊協(xié)議。
      5. 三菱FX系列PLC通訊協(xié)議
      三菱FX系列PLC共有四種通信模式,本實例采用的是PLC與計算機專用協(xié)議通信方式(無須PLC編程,電腦直接讀寫操縱PLC),其通訊命令字和通訊格式介紹如下:
      PC發(fā)送給PLC的通信命令字
      命令字 注釋
      BR 以1點為單位,讀出位元件的狀態(tài)
      WR 以16點為單位,讀出位元件的狀態(tài),或以1字為單位,讀出字元件的值
      BW 以1點為單位,寫入位元件的狀態(tài)
      WW 以16點為單位,寫入位元件的狀態(tài),或以1字為單位,寫入值到字元件
      BT 以1點為單位,設(shè)置/復(fù)位 位元件
      WT 以16點為單位,設(shè)置/復(fù)位 位元件,或以1字為單位,寫入值到字元件
      RR 控制PLC運行RUN
      RS 控制PLC停止STOP
      PC 讀出PLC設(shè)備類型
      TT 連接測試
      PC發(fā)送給PLC的通信命令格式
      約定說明:ENQ為請求標(biāo)志,ASCII值5,VB中以chr(5)表示;
           ACK為正確標(biāo)志,ASCII值6,VB中以chr(6)表示;
           STX為請求標(biāo)志,ASCII值2,VB中以chr(2)表示;
           EXT為請求標(biāo)志,ASCII值3,VB中以chr(3)表示;
           表格中粗體字為需要求和效驗的部分;
           和效驗為每一項的ASCII值的總和轉(zhuǎn)換成十六進制后,取其低兩位;
           站號、PLC號、元件數(shù)量、和效驗都是以十六進制表示;
          等待延時為0-150毫秒,以十六進制0H-FH表示,如100ms為AH。
      1) 批量讀出位元件—BR指令格式
      1 2 3 4 5 6 7 8 15 16 17
      PC側(cè): ENQ 站號 PLC號 BR 延時 首地址 數(shù)量 和校驗 ACK 站號 PLC號
      PLC側(cè): STX 站號 PLC號 數(shù)據(jù) EXT 和校驗
      9 10 11 12 13 14
      例如:要讀出站號為5的PLC的X40到X44共5點的狀態(tài)值,延時100毫秒,假設(shè)PLC中X40與X43為OFF,其余為ON,則指令數(shù)據(jù)如下:
      注釋: 請求 站號 PLC號 命令 延時 元件首地址 元件數(shù)量 和校驗
      代碼: ENQ 0 5 F F B R A X 0 0 4 0 0 5 4 7
      ASCII碼: 05H 30H 35H 46H 46H 42H 52H 41H 58 30H 30H 34H 30H 30H 35H 34H 37H
      只要將以上代碼以字符串形式(VB中可以表示為chr(5)&”05FFBRAX00400547”)發(fā)送到PLC,就會有正確的回應(yīng)信息,如下:
      注釋: 頭 站號 PLC號 位元件狀態(tài)值 尾 和校驗
      代碼: STX 0 5 F F 0 1 1 0 1 EXT E 7
      ASCII碼: 02H 30H 35H 46H 46H 30H 31H 31H 30H 31H 03H 45H 37H
      2) 批量讀出字元件—WR指令格式
      1 2 3 4 5 6 7 8 15 16 17
      PC側(cè): ENQ 站號 PLC號 WR 延時 首地址 數(shù)量 和校驗 ACK 站號 PLC號
      PLC側(cè): STX 站號 PLC號 數(shù)據(jù) EXT 和校驗
      9 10 11 12 13 14
      該命令使用與BR命令相同。
      3) 批量寫入位元件—BW指令格式
      1 2 3 4 5 6 7 8 9
      PC側(cè): ENQ 站號 PLC號 BW 延時 首地址 數(shù)量 寫入值 和校驗
      PLC側(cè): ACK 站號 PLC號
      10 11 12
      4) 批量寫入字元件—WW指令格式
      1 2 3 4 5 6 7 8 9
      PC側(cè): ENQ 站號 PLC號 WW 延時 首地址 數(shù)量 寫入值 和校驗
      PLC側(cè): ACK 站號 PLC號
      10 11 12
      6. VB通訊功能塊設(shè)計分析
      根據(jù)三菱PLC的通訊指令格式,在PC中編寫數(shù)據(jù)查詢功能塊RevData( )和數(shù)據(jù)發(fā)送功能塊SendData( ),就可以在定時中斷處理塊TIMER1( )中調(diào)用查詢功能塊RevData( ),實現(xiàn)PC界面數(shù)據(jù)定時刷新;在每一次操作命令執(zhí)行時,調(diào)用數(shù)據(jù)發(fā)送功能塊SendData( ),把控制值寫入PLC中,從而實現(xiàn)控制。下面給出這兩個功能塊的設(shè)計程序。
      1) 查詢數(shù)據(jù)函數(shù)RevData( )
      (沒有和校驗)
      Sub RevPLC (iNo As String, iType As String, iAdd As String, iNum As String)
      '' iNo為PLC站號,iType為元件類型,iAdd為首地址,iNum為元件數(shù)量
      Dim Stmp As String
      Dim cha, j As Integer
      Dim ChaCount As Integer
      Dim Comm As String
      Select Case iType
      Case "D" ''查詢數(shù)據(jù)寄存器的值
      Comm = "WR" ''命令類型:數(shù)據(jù)字讀
      cha = Val("&H" & iNum) * 4 ''數(shù)據(jù)寄存器的值為十六進制表示,占4個字符
      Case "M", "X", "Y" ''查詢繼電器觸電的值
      Comm = "BR" ''命令類型:二進制位讀
      cha = Val("&H" & iNum)
      End Select
      iAdd = Right$("000" & iAdd, 4)
      iNum = Right$("0" & iNum, 2)
      Stmp = Chr$(5) & iNo & "FF" & Comm & "A" & iType & iAdd & iNum ''輸出命令格式
      ChaCount = 6 + cha ''要返回字符個數(shù)
      main.MSComm1.InBufferCount = 0 ''輸入緩沖區(qū)清零
      main.MSComm1.Output = Stmp ''設(shè)傳送緩沖區(qū)內(nèi)容為命令格式
      Now=Second()
      Do
      DoEvents ''轉(zhuǎn)讓控制權(quán),以便讓操作系統(tǒng)進行數(shù)據(jù)傳輸
      If Second()-Now>1 Then Exit Sub
      Loop Until main.MSComm1.InBufferCount = ChaCount ''當(dāng)接收到規(guī)定字符時停止循環(huán)
      RevDataTmp = Mid$(main.MSComm1.Input, 6, cha) ''返回數(shù)據(jù)字符串保存在全局變量
      ''RevDataTmp中
      End Sub
      2) 發(fā)送數(shù)據(jù)函數(shù)SendData( )
      (沒有和校驗)
      Sub SendPLC(iNo As String, iType As String, iAdd As String, iNum As String, iValue As String)
      '' iNo為PLC站號,iType為元件類型,iAdd為首地址,iNum為元件數(shù)量,iValue為寫入值
      Dim Stmp As String
      Dim Comm As String
      Select Case iType
      Case "D" ''寫數(shù)據(jù)寄存器的值
      Comm = "WW" ''命令類型:數(shù)據(jù)字寫
      iValue = Right$("0000" + Hex$(Val(iValue)), 4) ''寫入值轉(zhuǎn)換成十六進制表示
      Case "M" ''寫繼電器觸點的值
      Comm = "BW" ''命令類型:二進制位寫
      End Select

      iAdd = Right$("000" & iAdd, 4)
      iNum = Right$("0" & iNum, 2)
      Stmp = Chr$(5) & iNo & "FF" & Comm & "A" & iType & iAdd & iNum & iValue ''輸出命令格式
      MSComm1.Output = Stmp ''輸出命令到傳送緩沖區(qū)
      Now= Second()
      Do
      DoEvents ''轉(zhuǎn)讓控制權(quán),以便讓操作系統(tǒng)進行數(shù)據(jù)傳輸
      If Second()-Now>1 Then Exit Sub
      Loop Until main.MSComm1.OutBufferCount = 0 ''當(dāng)命令傳送完時停止循環(huán)
      End Sub
      四. 總結(jié):
      生產(chǎn)自控系統(tǒng)的設(shè)計要解決好三部分的問題:PC上人機操作界面的編制,PC與PLC的通信程序編寫,PLC生產(chǎn)控制程序的編寫。對于串行通信的單機自控系統(tǒng),因為具有操作界面和生產(chǎn)工藝流程簡單的特點,所以利用Visual Basic設(shè)計操作界面和利用PLC編程語言設(shè)計生產(chǎn)控制程序都比較方便,但對如何編寫通信程序就比較陌生,也沒有許多相關(guān)資料可學(xué)習(xí)。本文介紹的方法簡單、實用,供各位參考。利用通信控件MSComm的OnComm事件和CommEvent屬性還可以設(shè)計出功能更完善的通信程序。

      文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。

      主站蜘蛛池模板: 高清一区二区三区免费视频| 国模私拍一区二区三区| 日韩制服国产精品一区| 国产在线第一区二区三区| 日本香蕉一区二区三区| 精品一区二区三区电影| 一区二区三区无码高清视频| 亚洲国产精品一区二区三区久久| 一区二区三区伦理高清| 国产成人欧美一区二区三区| 无码精品久久一区二区三区 | 男女久久久国产一区二区三区| 亚洲一区精品中文字幕| 亚洲中文字幕乱码一区| 精品一区二区三区在线观看l| 亚洲一区二区三区高清不卡 | 中文字幕一区二区三区5566| 国产成人精品第一区二区| 无码国产精品一区二区免费16| 中文字幕一区二区三区四区 | 亚洲蜜芽在线精品一区| 夜色福利一区二区三区| 久久无码人妻一区二区三区 | 亚洲午夜一区二区三区| 亚洲综合无码一区二区痴汉| 亚洲香蕉久久一区二区三区四区 | 亚洲熟妇成人精品一区| 精品无码av一区二区三区| 精品日韩亚洲AV无码一区二区三区| 国产精品视频一区二区噜噜| 午夜影视日本亚洲欧洲精品一区| 无码人妻久久一区二区三区免费 | 成人影片一区免费观看| 亚洲乱码国产一区三区| 精品少妇一区二区三区视频| 日韩精品无码免费一区二区三区 | 国产亚洲自拍一区| 一夲道无码人妻精品一区二区| 亚洲国产成人一区二区精品区| 色窝窝无码一区二区三区成人网站 | 亚洲福利电影一区二区?|