a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

關 閉

新聞中心

EEPW首頁 > 工控自動化 > 設計應用 > 利用Visual Basic和PLC開發小型監控系統

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

——
作者: 時間:2006-05-29 來源: 收藏
摘要:本文通過分析啤酒稀釋自控系統這一實例,介紹了利用微軟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屬性還可以設計出功能更完善的通信程序。



評論


相關推薦

技術專區

關閉