關鍵詞:可編程控制器;編程口VB;通信;機械手
中圖分類號:TN919.3∶TP241 文獻標識碼:A 文章 編號:1007—6921(2008)18—0116—03
可編程控制器PLC由于可靠性高、適應性好、接口功能強、體積小以及組態(tài)靈活等優(yōu)點,在 工業(yè)控制領域得到了廣泛的應用。但是PLC在實際的工程應用中一般與上位計算機組成分布 式/分級型控制系統(tǒng)來完成監(jiān)控任務,這就需要使用PLC的通訊技術。而PLC的編程口在上傳 控制程序后,一般處于閑置狀態(tài),在機械手監(jiān)控系統(tǒng)中,三菱FX1N 40MR PLC作為下位機并 以編程口作為通信口,用來完成控制量的輸出、傳感器數據的采集等工作,上位機采用個人 計算機(PC),用來完成傳感數據分析、運動規(guī)劃,狀態(tài)顯示等功能,以實現對機械手的實 時監(jiān)控。
為實現PLC與上位計算機的數據通訊,有多種開發(fā)平臺可以使用,其中VB是一套完 全獨立的bbbbbbS開發(fā)系統(tǒng),是可視化的、面向對象、采用事件驅動方式的高級程序設計語 言。尤其是它提供了一個預定義對象——MSComm通訊控件。通過設置該對象的屬性,向對象 發(fā)送信息,以及為對象事件編寫響應代碼,可以很方便地完成用戶應用程序之間的串行通訊 ,對于通過編程口與串行口進行數據通訊的PLC與上位計算機組成的監(jiān)控系統(tǒng),它提供了穩(wěn) 定、可靠的通訊。
1 機械手的系統(tǒng)控制方法
機械手是由機械本體、氣動控制系統(tǒng)、PC-PLC監(jiān)控系統(tǒng)組成,其機械結構如圖1所示。機械 手是由基座、腰部、手臂和手爪等幾部分組成,分別完成扭轉、升降、手爪翻轉、手臂伸縮 和手爪夾持動作。而上述5種動作是由氣缸驅動實現的,氣動原理如圖2所示。其中扭轉氣缸 、升降氣缸、手臂伸縮氣缸是由三位五通閥來控制,而手臂翻轉、手爪夾持、氣動系統(tǒng)通斷 是由二位五通閥來控制的。對各電磁閥的控制是由PLC遠程實現的。
為了實現對機械手工作狀態(tài)的監(jiān)視和控制,充分利用計算機系統(tǒng)具有的遠程控制和管理功能 。為此,我們將控制系統(tǒng)確定為兩級計算機監(jiān)控系統(tǒng):PC計算機為管理級,可編程控制器PL C為控制級。系統(tǒng)組成如圖3所示:系統(tǒng)由上位機PC、PLC、驅動電路、執(zhí)行元件以及傳感器 、外部控制信號等幾部分組成。

2 PLC編程口與上位機的通信協(xié)議基礎
帶有異步通信適配器的PC機與PLC只有滿足以下幾個條件,才能互聯通信:
2.1 PC與PLC的異步通信接口采用的總線標準一致,否則要通過“總線標準變換單元”變換 后才能互聯。在機械手的控制系統(tǒng)中,PC機與FX系列PLC不能直接連接,要通過FX-232AW單 元進行RS232C/RS-422的變換,即上位機與可編程控制器是通過RS232/422編程電纜進行連接 通信的。
2.2 雙方的初始化,使波特率、數據位數、停止位、奇偶校驗都相同。FX系列PLC采用異步 格式,由1位起始位、7位數據位、1位奇偶校驗位以及1位停止位組成,波特率為9600bps, 字符為ASCII碼。
2.3 嚴格按照PLC通信協(xié)議的規(guī)定及幀格式編寫PC機的通信程序。FX系列PLC有4個通信命令 ,它們是讀命令(0)、寫命令(1)、強制通命令(7)、強制斷命令(8)。同時FX系列PL C采用面向字符的傳輸規(guī)程,用到5個通信控制字符:
ENQ——計算機發(fā)出請求(05H)
ACK——PLC對ENQ的確認回答(06H)
NAK——PLC對ENQ的否認回答(15H)
STX——信息幀開始標記(02H)
ETX——信息幀結束標記(03H)
PC機向PLC發(fā)送的報文格式如下:

3 利用VB編寫通信程序
利用VB提供的定時器控件和MSComm通訊控件,可以很方便地編制面向對象的應用程序,命令 傳遞、數據交換、圖形顯示在定時器控件和通訊控件中完成。
使用MSComm通訊控件的第一步是建立與串行口的連接。通過設置CommPort , PortOpen和Se ttings屬性來打開串行端口。
CommPort屬性:設置或返回通訊端口號。注意:每個使用的MSComm控件對應著一個串行端口 。如果應用程序要訪問多個串行端口,例如應用程序需要和多個下位PLC通訊,必須使用多 個使用MSComm控件。
Settings屬性:以字符串的形式設置或返回串行通訊協(xié)議。該屬性值由4個設置值組成,有如 下的形式:“BBBB, P, D, S”, BBBB為波特率,P為奇偶校驗,D為數據位數,S為停止 位 數。在實現上位機和PLC的通訊中,Settings屬性值的設置應該根據下位機PLC的D8120單元 的值來設定。Fx系列的標準通訊參數為9600,E,7,1
PortOpen屬性:設置并返回通訊端口的狀態(tài)。將PorlOpen屬性設置為True打開端口,將Port Open屬性設置為False關閉端口。注意:打開端口建立連接之前,必須先用CommPort, Sett ings屬性正確指定端口號(必須是物理或邏輯存在的端口)和通訊協(xié)議,一旦打開端口后, 不可以隨便更改CommPort , Settings屬性的設置,如果在程序運行中必須更改這兩項屬性 ,應該先關閉端口,改變設置值之后,再重新打開端口。
端口打開后,就創(chuàng)建了空的接收和發(fā)送緩沖區(qū),端口關閉緩沖區(qū)被清零。MSComm控件提供了 一系列的屬性來管理這些緩沖區(qū)。
1nBufferSize和OutBufferSize屬性:分配接收和發(fā)送緩沖區(qū)內存的大小。
InBufferCount和OutBuffeiCount屬性:分別獲得接緩沖區(qū)和發(fā)送緩沖區(qū)中字節(jié)的數目。在程 序執(zhí)行過程中,將這兩個屬性的值設置為零,即可清空接收或發(fā)送緩沖區(qū)。
Rthreshold和Sthreshold屬性:設定OnComm事件發(fā)生前,接收或發(fā)送緩沖區(qū)中可以存放的字 節(jié)數。將這兩個屬性值設置為零,可以抑制相應的OnComm事件發(fā)生。
bbbbb屬性:獲取輸入緩沖區(qū)中的數據,并將保存在輸人緩沖區(qū)的數據刪除。
Output屬性:向發(fā)送緩沖區(qū)寫人數據。
bbbbbLen屬性:設置并返回bbbbb屬性從接收緩沖區(qū)讀取的字符數。如果把bbbbb屬性設置為 零,在使用bbbbb屬性時,MSComm控件將讀取接收緩沖區(qū)的所有內容。
通信口初始化程序舉例如下:
Private Sub bbbb_Load() 進行通訊端口和初始化設置。
MSComm1.CommPort=1
MSComm1.Settings=“9600,e,7,1”端口設置:波特率為9600bit/s、偶校驗、7位數據 位、1位停止位。
MSComm1.bbbbbMode=combbbbbModeText '文本字符串接收方式
MSComm1.InBufferSize=1024 '輸入數據接收緩沖區(qū)長度
MSComm1.OutBufferSize=512 '輸出數據緩沖區(qū)長度
MSComm1.RThreshold=0 '每接受到字符就產生接受中斷
MSComm1.SThreshold=0 '禁止發(fā)送中斷,進行無條件發(fā)送
If MSComm1.PortOpen=False Then
MSComm1.PortOpen=True '打開串行通信接口COM1
End If
End Sub
4 機械手監(jiān)控軟件的實現
利用計算機語言VB編寫的機械手監(jiān)控程序主要分為以下幾部分:登陸及選擇控制方式畫面、 手動控制界面和自動控制界面。手動控制界面與自動控制界面如圖4所示。
上位計算機主要完成運動命令的生成,在獲取機械手傳感器信息的基礎上,完成機械手動作 在計算機屏幕上的實時顯示。在機械手出現故障時,允許通過手動控制界面的按鈕來遠程控 制機械手動作。下位機PLC完成對電磁閥的控制從而驅動氣動執(zhí)行元件。
手動控制界面主要由狀態(tài)顯示區(qū)、按鈕控制區(qū)、位置顯示區(qū)、時間顯示區(qū)以及各種交互控制 按鈕組成。如圖4(a)所示。按鈕控制區(qū)的按鈕通過用戶程序和PLC與各電磁閥的線圈相連 ,實現遠程控制氣缸動作。每個氣缸控制按鈕的多少是與電磁閥的線圈數相對應的,如果是 三位五通閥則有三個按鈕,二位五通閥有兩個按鈕。
自動循環(huán)控制界面主要由狀態(tài)顯示區(qū)、按鈕控制區(qū)、位置顯示區(qū)、時間顯示區(qū)、報警區(qū)以及 日志報告區(qū)等。如圖4(b)所示。匣置顯示區(qū)的各狀態(tài)顯示是通過PC與PLC實時通信實現的 。
4.1 控制命令的發(fā)送:手動控制界面與自動循環(huán)控制界面中控制命令都是通過按鈕控制區(qū) 的按鈕發(fā)送出去的,在發(fā)送控制命令之前,必須先形成控制命令幀。通常,按鈕對PLC的控 制是對中間輔助繼電器的控制,是軟件對PLC內部寫命令過程,該過程是通過WriteToPLC() 函數實現的,其程序如下:
Public Sub WriteToPLC()
Dim DUMMY As bbbbbb
If MSComm1.PortOpen=False Then
MSComm1.PortOpen=True ''''''打開通信端口Comm1
End If
MSComm1.bbbbbLen=0 '''''初始化通信端口Comm1
MSComm1.Output=MWRITE)nCmdCounter) '''''通信端口Comm1寫出數據包
End Sub
控制界面中的所有的寫命令又是通過數組MWRITE()來實現的。其元素包括舉例如下:
MWRITE(1)=Chr$(2)+“1”+“0111011”+Chr$(3)+“89” '''手爪夾持M136置1
MWRITE(2)=Chr$(2)+“1”+“0111010”+Chr$(3)+“88” '''''手爪松開M136置 0
4.2 定時讀取機械手狀態(tài)信息:在狀態(tài)顯示區(qū)內,顯示的是手爪氣缸、手臂氣缸、升降氣 缸、扭轉氣缸和手腕氣缸的電磁閥的工作狀態(tài)。當按鈕控制區(qū)的按鈕被按下時,狀態(tài)顯示區(qū) 的狀態(tài)指示燈將被點亮,表示PLC的某個對應的輸出端子正在工作。該信號是通過與PLC進行 的實時數據交換得到的,是PLC的端子的實時狀態(tài)。同樣地,在位置顯示區(qū),顯示的是機械 手運動氣缸的活塞桿位置狀態(tài),是否到達左右極限。當活塞桿到達極限位置,相應的位置顯 示區(qū)的極限報警燈將被點亮,表示PLC的某個對應的輸入端子正在工作。該信號也是通過與P LC進行的實時數據交換得到的,是PLC的端子的實時狀態(tài)。軟件對PLC各個元器件狀態(tài)的獲取 是通過讀命令和軟件的定時器控件Timer()來實現的。讀命令是通過函數ReadFromPLC()實 現的。其程序為:
Public Sub ReadFromPLC()
Dim DUMMY As bbbbbb
''''向計算機發(fā)送讀取命令''''''''''''
If MSComm1.PortOpen=False Then
MSComm1.PortOpen=True
End If
''讀取D數據寄存器的數據''''''
MSComm1.bbbbbLen=0
MSComm1.Output=ReadCmd(nCounter) '''''''從MSComm1.Output發(fā)送數組ReadCmd(20) 中的字符串
Do
DUMMY=DoEvents()
Loop Until MSComm1.InBufferCount >=6
ReturnData(nCounter)=MSComm1.bbbbb
將MSComm1.bbbbb接收到的信號存放在數組ReturnData()中,然后根據接收到的數據分配給 用戶界面中的各種狀態(tài)顯示。
手控界面中的所有的讀命令又是通過數組ReadCmd()來實現的。其元素包括舉例如下:
ReadCmd(0)=Chr$(2)+“0”+“100001”+Chr$(3)+“55” '''讀取D0數據
5 結束語
通過機械手監(jiān)控系統(tǒng)的具體程序,系統(tǒng)地闡述了VB環(huán)境下的PC與PLC編程口通信應用程序的 設計方法。系統(tǒng)運行表明,用PLC編程口與VB通信控件編寫的實時通訊程序可靠、穩(wěn)定,很 好地滿足了機械手實時監(jiān)控系統(tǒng)的應用要求。
[參考文獻]
[1] 郁漢琪,郭健,等.可編程序控制器原理及應用[M].北京:中國電力出版社 ,2004.
[2] 劉圣才,李春葆.Visual Basic 6程序設計導學[M].北京:清華大學出版社 ,2002.










