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

      技術頻道

      利用Visual Basic和PLC開發小型自控系統

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

      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 欧亚精品一区三区免费| 狠狠做深爱婷婷综合一区| 国产成人一区二区三区精品久久 | 在线观看一区二区精品视频| 国产日韩精品一区二区在线观看播放| 中文字幕人妻丝袜乱一区三区| 国产成人综合亚洲一区| 国产精品久久久久久麻豆一区| 国产无码一区二区在线| 精品免费久久久久国产一区 | 亚洲一区二区三区播放在线 | 国产福利电影一区二区三区,免费久久久久久久精 | 亚洲国产成人久久综合一区 | 欧美av色香蕉一区二区蜜桃小说| 精品一区二区三区自拍图片区| 国偷自产一区二区免费视频| 一区二区三区影院| 国产成人无码精品一区在线观看| 一区二区三区在线播放视频| 亚洲一区二区三区在线视频| 一区二区在线视频观看| 久久se精品一区二区影院| 久久无码一区二区三区少妇| 国产美女露脸口爆吞精一区二区 | 国产另类TS人妖一区二区| 伊人色综合一区二区三区| 日韩精品无码一区二区三区AV| 国产午夜三级一区二区三| 亚洲色欲一区二区三区在线观看| 亚洲AV综合色一区二区三区 | 亚洲一区二区三区久久| 3d动漫精品啪啪一区二区免费| 久久久无码一区二区三区| 国产电影一区二区| 暖暖免费高清日本一区二区三区 | 国产91一区二区在线播放不卡| 香蕉久久av一区二区三区| 色婷婷一区二区三区四区成人网 | 一区二区三区午夜视频| 日韩人妻无码一区二区三区久久| 久久综合亚洲色一区二区三区|