當前位置: 首頁 > 工業控制產品 > 自動化控制 > PLC可編程控制器 > 大型PLC可編程控制器
發布日期:2022-04-26 點擊率:85 品牌:三菱_Mitsubishi
摘要:介紹了根據三菱FX系列PLC編程口通信技術的特點,設計基于VB的PC與PLC機械手遠程控制程序。通過機械手監控系統軟件的具體應用,系統地介紹了VB環境下的MSComm通訊控件、PLC與上位機的編程口通信協議、系統控制方法設計以及監控軟件的實現過程。
關鍵詞:可編程控制器;編程口VB;通信;機械手
中圖分類號:TN919.3∶TP241文獻標識碼:A文章編號:1007—6921(2008)18—0116—03
可編程控制器PLC由于可靠性高、適應性好、接口功能強、體積小以及組態靈活等優點,在工業控制領域得到了廣泛的應用。但是PLC在實際的工程應用中一般與上位計算機組成分布式/分級型控制系統來完成監控任務,這就需要使用PLC的通訊技術。而PLC的編程口在上傳控制程序后,一般處于閑置狀態,在機械手監控系統中,三菱FX1N40MRPLC作為下位機并以編程口作為通信口,用來完成控制量的輸出、傳感器數據的采集等工作,上位機采用個人計算機(PC),用來完成傳感數據分析、運動規劃,狀態顯示等功能,以實現對機械手的實時監控。
為實現PLC與上位計算機的數據通訊,有多種開發平臺可以使用,其中VB是一套完全獨立的WINDOWS開發系統,是可視化的、面向對象、采用事件驅動方式的高級程序設計語言。尤其是它提供了一個預定義對象——MSComm通訊控件。通過設置該對象的屬性,向對象發送信息,以及為對象事件編寫響應代碼,可以很方便地完成用戶應用程序之間的串行通訊,對于通過編程口與串行口進行數據通訊的PLC與上位計算機組成的監控系統,它提供了穩定、可靠的通訊。
1機械手的系統控制方法
機械手是由機械本體、氣動控制系統、PC-PLC監控系統組成,其機械結構如圖1所示。機械手是由基座、腰部、手臂和手爪等幾部分組成,分別完成扭轉、升降、手爪翻轉、手臂伸縮和手爪夾持動作。而上述5種動作是由氣缸驅動實現的,氣動原理如圖2所示。其中扭轉氣缸、升降氣缸、手臂伸縮氣缸是由三位五通閥來控制,而手臂翻轉、手爪夾持、氣動系統通斷是由二位五通閥來控制的。對各電磁閥的控制是由PLC遠程實現的。
為了實現對機械手工作狀態的監視和控制,充分利用計算機系統具有的遠程控制和管理功能。為此,我們將控制系統確定為兩級計算機監控系統:PC計算機為管理級,可編程控制器PLC為控制級。系統組成如圖3所示:系統由上位機PC、PLC、驅動電路、執行元件以及傳感器、外部控制信號等幾部分組成。
2PLC編程口與上位機的通信協議基礎
帶有異步通信適配器的PC機與PLC只有滿足以下幾個條件,才能互聯通信:
2.1PC與PLC的異步通信接口采用的總線標準一致,否則要通過“總線標準變換單元”變換后才能互聯。在機械手的控制系統中,PC機與FX系列PLC不能直接連接,要通過FX-232AW單元進行RS232C/RS-422的變換,即上位機與可編程控制器是通過RS232/422編程電纜進行連接通信的。
2.2雙方的初始化,使波特率、數據位數、停止位、奇偶校驗都相同。FX系列PLC采用異步格式,由1位起始位、7位數據位、1位奇偶校驗位以及1位停止位組成,波特率為9600bps,字符為ASCII碼。
2.3嚴格按照PLC通信協議的規定及幀格式編寫PC機的通信程序。FX系列PLC有4個通信命令,它們是讀命令(0)、寫命令(1)、強制通命令(7)、強制斷命令(8)。同時FX系列PLC采用面向字符的傳輸規程,用到5個通信控制字符:
ENQ——計算機發出請求(05H)
ACK——PLC對ENQ的確認回答(06H)
NAK——PLC對ENQ的否認回答(15H)
STX——信息幀開始標記(02H)
ETX——信息幀結束標記(03H)
PC機向PLC發送的報文格式如下:
3利用VB編寫通信程序
利用VB提供的定時器控件和MSComm通訊控件,可以很方便地編制面向對象的應用程序,命令傳遞、數據交換、圖形顯示在定時器控件和通訊控件中完成。
使用MSComm通訊控件的第一步是建立與串行口的連接。通過設置CommPort,PortOpen和Settings屬性來打開串行端口。
CommPort屬性:設置或返回通訊端口號。注意:每個使用的MSComm控件對應著一個串行端口。如果應用程序要訪問多個串行端口,例如應用程序需要和多個下位PLC通訊,必須使用多個使用MSComm控件。
Settings屬性:以字符串的形式設置或返回串行通訊協議。該屬性值由4個設置值組成,有如下的形式:“BBBB,P,D,S”,BBBB為波特率,P為奇偶校驗,D為數據位數,S為停止位數。在實現上位機和PLC的通訊中,Settings屬性值的設置應該根據下位機PLC的D8120單元的值來設定。Fx系列的標準通訊參數為9600,E,7,1
PortOpen屬性:設置并返回通訊端口的狀態。將PorlOpen屬性設置為True打開端口,將PortOpen屬性設置為False關閉端口。注意:打開端口建立連接之前,必須先用CommPort,Settings屬性正確指定端口號(必須是物理或邏輯存在的端口)和通訊協議,一旦打開端口后,不可以隨便更改CommPort,Settings屬性的設置,如果在程序運行中必須更改這兩項屬性,應該先關閉端口,改變設置值之后,再重新打開端口。
端口打開后,就創建了空的接收和發送緩沖區,端口關閉緩沖區被清零。MSComm控件提供了一系列的屬性來管理這些緩沖區。
1nBufferSize和OutBufferSize屬性:分配接收和發送緩沖區內存的大小。
InBufferCount和OutBuffeiCount屬性:分別獲得接緩沖區和發送緩沖區中字節的數目。在程序執行過程中,將這兩個屬性的值設置為零,即可清空接收或發送緩沖區。
Rthreshold和Sthreshold屬性:設定OnComm事件發生前,接收或發送緩沖區中可以存放的字節數。將這兩個屬性值設置為零,可以抑制相應的OnComm事件發生。
Input屬性:獲取輸入緩沖區中的數據,并將保存在輸人緩沖區的數據刪除。
Output屬性:向發送緩沖區寫人數據。
InputLen屬性:設置并返回Input屬性從接收緩沖區讀取的字符數。如果把Input屬性設置為零,在使用Input屬性時,MSComm控件將讀取接收緩沖區的所有內容。
通信口初始化程序舉例如下:
PrivateSubForm_Load()進行通訊端口和初始化設置。
MSComm1.CommPort=1
MSComm1.Settings=“9600,e,7,1”端口設置:波特率為9600bit/s、偶校驗、7位數據位、1位停止位。
MSComm1.InputMode=comInputModeText'文本字符串接收方式
MSComm1.InBufferSize=1024'輸入數據接收緩沖區長度
MSComm1.OutBufferSize=512'輸出數據緩沖區長度
MSComm1.RThreshold=0'每接受到字符就產生接受中斷
MSComm1.SThreshold=0'禁止發送中斷,進行無條件發送
IfMSComm1.PortOpen=FalseThen
MSComm1.PortOpen=True'打開串行通信接口COM1
EndIf
EndSub
4機械手監控軟件的實現
利用計算機語言VB編寫的機械手監控程序主要分為以下幾部分:登陸及選擇控制方式畫面、手動控制界面和自動控制界面。手動控制界面與自動控制界面如圖4所示。
上位計算機主要完成運動命令的生成,在獲取機械手傳感器信息的基礎上,完成機械手動作在計算機屏幕上的實時顯示。在機械手出現故障時,允許通過手動控制界面的按鈕來遠程控制機械手動作。下位機PLC完成對電磁閥的控制從而驅動氣動執行元件。
手動控制界面主要由狀態顯示區、按鈕控制區、位置顯示區、時間顯示區以及各種交互控制按鈕組成。如圖4(a)所示。按鈕控制區的按鈕通過用戶程序和PLC與各電磁閥的線圈相連,實現遠程控制氣缸動作。每個氣缸控制按鈕的多少是與電磁閥的線圈數相對應的,如果是三位五通閥則有三個按鈕,二位五通閥有兩個按鈕。
自動循環控制界面主要由狀態顯示區、按鈕控制區、位置顯示區、時間顯示區、報警區以及日志報告區等。如圖4(b)所示。匣置顯示區的各狀態顯示是通過PC與PLC實時通信實現的。
4.1控制命令的發送:手動控制界面與自動循環控制界面中控制命令都是通過按鈕控制區的按鈕發送出去的,在發送控制命令之前,必須先形成控制命令幀。通常,按鈕對PLC的控制是對中間輔助繼電器的控制,是軟件對PLC內部寫命令過程,該過程是通過WriteToPLC()函數實現的,其程序如下:
PublicSubWriteToPLC()
DimDUMMYAsString
IfMSComm1.PortOpen=FalseThen
MSComm1.PortOpen=True''''''打開通信端口Comm1
EndIf
MSComm1.InputLen=0'''''初始化通信端口Comm1
MSComm1.Output=MWRITE)nCmdCounter)'''''通信端口Comm1寫出數據包
EndSub
控制界面中的所有的寫命令又是通過數組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定時讀取機械手狀態信息:在狀態顯示區內,顯示的是手爪氣缸、手臂氣缸、升降氣缸、扭轉氣缸和手腕氣缸的電磁閥的工作狀態。當按鈕控制區的按鈕被按下時,狀態顯示區的狀態指示燈將被點亮,表示PLC的某個對應的輸出端子正在工作。該信號是通過與PLC進行的實時數據交換得到的,是PLC的端子的實時狀態。同樣地,在位置顯示區,顯示的是機械手運動氣缸的活塞桿位置狀態,是否到達左右極限。當活塞桿到達極限位置,相應的位置顯示區的極限報警燈將被點亮,表示PLC的某個對應的輸入端子正在工作。該信號也是通過與PLC進行的實時數據交換得到的,是PLC的端子的實時狀態。軟件對PLC各個元器件狀態的獲取是通過讀命令和軟件的定時器控件Timer()來實現的。讀命令是通過函數ReadFromPLC()實現的。其程序為:
PublicSubReadFromPLC()
DimDUMMYAsString
''''向計算機發送讀取命令''''''''''''
IfMSComm1.PortOpen=FalseThen
MSComm1.PortOpen=True
EndIf
''讀取D數據寄存器的數據''''''
MSComm1.InputLen=0
MSComm1.Output=ReadCmd(nCounter)'''''''從MSComm1.Output發送數組ReadCmd(20)中的字符串
Do
DUMMY=DoEvents()
LoopUntilMSComm1.InBufferCount>=6
ReturnData(nCounter)=MSComm1.Input
將MSComm1.Input接收到的信號存放在數組ReturnData()中,然后根據接收到的數據分配給用戶界面中的各種狀態顯示。
手控界面中的所有的讀命令又是通過數組ReadCmd()來實現的。其元素包括舉例如下:
ReadCmd(0)=Chr$(2)+“0”+“100001”+Chr$(3)+“55”'''讀取D0數據
5結束語
通過機械手監控系統的具體程序,系統地闡述了VB環境下的PC與PLC編程口通信應用程序的設計方法。系統運行表明,用PLC編程口與VB通信控件編寫的實時通訊程序可靠、穩定,很好地滿足了機械手實時監控系統的應用要求。
[參考文獻]
[1]郁漢琪,郭健,等.可編程序控制器原理及應用[M].北京:中國電力出版社,2004.
[2]劉圣才,李春葆.VisualBasic6程序設計導學[M].北京:清華大學出版社,2002.
下一篇: PLC、DCS、FCS三大控
上一篇: 索爾維全系列Solef?PV