時間:2007-11-15 17:13:00來源:dujing
本文介紹了根據(jù)三菱FX系列PLC編程口通信技術(shù)的特點(diǎn),設(shè)計基于VB的PC與PLC搬運(yùn)機(jī)械手遠(yuǎn)程控制程序。通過搬運(yùn)機(jī)械手監(jiān)控系統(tǒng)軟件的具體應(yīng)用,系統(tǒng)地介紹了VB環(huán)境下的MSComm通訊控件、PLC與上位機(jī)的編程口通信協(xié)議、系統(tǒng)控制方法設(shè)計以及監(jiān)控軟件的實(shí)現(xiàn)過程。
1 引言
可編程控制器PLC由于可靠性高、適應(yīng)性好、接口功能強(qiáng)、體積小以及組態(tài)靈活等優(yōu)點(diǎn),在工業(yè)控制領(lǐng)域得到了廣泛的應(yīng)用。但是PLC在實(shí)際的工程應(yīng)用中一般與上位計算機(jī)組成分布式/分級型控制系統(tǒng)來完成監(jiān)控任務(wù),這就需要使用PLC的通訊技術(shù)。而PLC的編程口在上傳控制程序后,一般處于閑置狀態(tài),在搬運(yùn)機(jī)器手監(jiān)控系統(tǒng)中,三菱FX1N 40MR PLC作為下位機(jī)并以編程口作為通信口,用來完成控制量的輸出、傳感器數(shù)據(jù)的采集等工作,上位機(jī)采用個人計算機(jī)(PC),用來完成傳感數(shù)據(jù)分析、運(yùn)動規(guī)劃,狀態(tài)顯示等功能,以實(shí)現(xiàn)對搬運(yùn)機(jī)械手的實(shí)時監(jiān)控。為實(shí)現(xiàn)PLC與上位計算機(jī)的數(shù)據(jù)通訊,有多種開發(fā)平臺可以使用,其中VB是一套完全獨(dú)立的WINDOWS開發(fā)系統(tǒng),是可視化的、面向?qū)ο?、采用事件?qū)動方式的高級程序設(shè)計語言。尤其是它提供了一個預(yù)定義對象——MSComm通訊控件。通過設(shè)置該對象的屬性,向?qū)ο蟀l(fā)送信息,以及為對象事件編寫響應(yīng)代碼,可以很方便地完成用戶應(yīng)用程序之間的串行通訊,對于通過編程口與串行口進(jìn)行數(shù)據(jù)通訊的PLC與上位計算機(jī)組成的監(jiān)控系統(tǒng),它提供了穩(wěn)定、可靠的通訊。
2 搬運(yùn)機(jī)械手的系統(tǒng)控制方法
搬運(yùn)機(jī)械手是由機(jī)械本體、氣動控制系統(tǒng)、PC-PLC監(jiān)控系統(tǒng)組成,其機(jī)械結(jié)構(gòu)如圖1所示。搬運(yùn)機(jī)械手是由基座、腰部、手臂和手爪等幾部分組成,分別完成扭轉(zhuǎn)、升降、手爪翻轉(zhuǎn)、手臂伸縮和手爪夾持動作。而上述5種動作是由氣缸驅(qū)動實(shí)現(xiàn)的,氣動原理如圖2所示。其中扭轉(zhuǎn)氣缸、升降氣缸、手臂伸縮氣缸是由三位五通閥來控制,而手臂翻轉(zhuǎn)、手爪夾持、氣動系統(tǒng)通斷是由二位五通閥來控制的。對各電磁閥的控制是由PLC遠(yuǎn)程實(shí)現(xiàn)的。
為了實(shí)現(xiàn)對機(jī)械手工作狀態(tài)的監(jiān)視和控制,充分利用計算機(jī)系統(tǒng)具有的遠(yuǎn)程控制和管理功能。為此,我們將控制系統(tǒng)確定為兩級計算機(jī)監(jiān)控系統(tǒng):PC計算機(jī)為管理級,可編程控制器PLC為控制級。系統(tǒng)組成如圖3所示:系統(tǒng)由上位機(jī)PC、PLC、驅(qū)動電路、執(zhí)行元件以及傳感器、外部控制信號等幾部分組成。
3 PLC編程口與上位機(jī)的通信協(xié)議基礎(chǔ)
帶有異步通信適配器的PC機(jī)與PLC只有滿足以下幾個條件,才能互聯(lián)通信:
(1)PC與PLC的異步通信接口采用的總線標(biāo)準(zhǔn)一致,否則要通過“總線標(biāo)準(zhǔn)變換單元”變換后才能互聯(lián)。在搬運(yùn)機(jī)械手的控制系統(tǒng)中,PC機(jī)與FX系列PLC不能直接連接,要通過FX-232AW單元進(jìn)行RS232C/RS-422的變換,即上位機(jī)與可編程控制器是通過RS232/422編程電纜進(jìn)行連接通信的。
(2)雙方的初始化,使波特率、數(shù)據(jù)位數(shù)、停止位、奇偶校驗(yàn)都相同。FX系列PLC采用異步格式,由1位起始位、7位數(shù)據(jù)位、1位奇偶校驗(yàn)位以及1位停止位組成,波特率為9600bps,字符為ASCII碼。
(3)嚴(yán)格按照PLC通信協(xié)議的規(guī)定及幀格式編寫PC機(jī)的通信程序。FX系列PLC有4個通信命令,它們是讀命令(0)、寫命令(1)、強(qiáng)制通命令(7)、強(qiáng)制斷命令(8)。同時FX系列PLC采用面向字符的傳輸規(guī)程,用到5個通信控制字符: ENQ——計算機(jī)發(fā)出請求(05H) ACK——PLC對ENQ的確認(rèn)回答(06H) NAK——PLC對ENQ的否認(rèn)回答(15H) STX——信息幀開始標(biāo)記(02H); ETX——信息幀結(jié)束標(biāo)記(03H)。
PC機(jī)向PLC發(fā)送的報文格式如下:
例如,PC機(jī)向PLC發(fā)送讀取數(shù)據(jù)寄存器D0的數(shù)據(jù)命令的報文格式為: Chr$(2) + "0" + "100001" + Chr$(3) + "55" ′′′讀取D0數(shù)據(jù),即:┑0100001┖55 其中1000是D0的地址號,01是讀取數(shù)據(jù)的長度。 PLC向PC機(jī)發(fā)送的報文格式如下:
PLC對PC讀取命令的反饋信息報文格式為:9402000092
4 利用VB編寫通信程序
利用VB提供的定時器控件和MSComm通訊控件,可以很方便地編制面向?qū)ο蟮膽?yīng)用程序,命令傳遞、數(shù)據(jù)交換、圖形顯示在定時器控件和通訊控件中完成。
使用MSComm通訊控件的第一步是建立與串行口的連接。通過設(shè)置CommPort , PortOpen和Settings屬性來打開串行端口。
CommPort屬性: 設(shè)置或返回通訊端口號。注意:每個使用的MSComm控件對應(yīng)著一個串行端口。如果應(yīng)用程序要訪問多個串行端口,例如應(yīng)用程序需要和多個下位PLC通訊,必須使用多個使用MSComm控件。
Settings屬性:以字符串的形式設(shè)置或返回串行通訊協(xié)議。該屬性值由4個設(shè)置值組成,有如下的形式:"BBBB, P, D, S", BBBB為波特率,P為奇偶校驗(yàn),D為數(shù)據(jù)位數(shù),S為停止位數(shù)。在實(shí)現(xiàn)上位機(jī)和PLC的通訊中,Settings屬性值的設(shè)置應(yīng)該根據(jù)下位機(jī)PLC的D8120單元的值來設(shè)定。Fx系列的標(biāo)準(zhǔn)通訊參數(shù)為9600,E,7,1。
PortOpen屬性:設(shè)置并返回通訊端口的狀態(tài)。將PorlOpen屬性設(shè)置為True打開端口,將PortOpen屬性設(shè)置為False關(guān)閉端口。注意:打開端口建立連接之前,必須先用CommPort, Settings屬性正確指定端口號(必須是物理或邏輯存在的端口)和通訊協(xié)議,一旦打開端口后,不可以隨便更改CommPort , Settings屬性的設(shè)置,如果在程序運(yùn)行中必須更改這兩項屬性,應(yīng)該先關(guān)閉端口,改變設(shè)置值之后,再重新打開端口。
端口打開后,就創(chuàng)建了空的接收和發(fā)送緩沖區(qū),端口關(guān)閉緩沖區(qū)被清零。MSComm控件提供了一系列的屬性來管理這些緩沖區(qū)。
InBufferSize和OutBufferSize屬性:分配接收和發(fā)送緩沖區(qū)內(nèi)存的大小。
InBufferCount和OutBuffeiCount屬性:分別獲得接緩沖區(qū)和發(fā)送緩沖區(qū)中字節(jié)的數(shù)目。在程序執(zhí)行過程中,將這兩個屬性的值設(shè)置為零,即可清空接收或發(fā)送緩沖區(qū)。
Rthreshold和Sthreshold屬性:設(shè)定OnComm事件發(fā)生前,接收或發(fā)送緩沖區(qū)中可以存放的字節(jié)數(shù)。將這兩個屬性值設(shè)置為零,可以抑制相應(yīng)的OnComm事件發(fā)生。
Input屬性:獲取輸入緩沖區(qū)中的數(shù)據(jù),并將保存在輸人緩沖區(qū)的數(shù)據(jù)刪除。
Output屬性:向發(fā)送緩沖區(qū)寫人數(shù)據(jù)。
InputLen屬性:設(shè)置并返回Input屬性從接收緩沖區(qū)讀取的字符數(shù)。如果把Input屬性設(shè)置為零,在使用Input屬性時,MSComm控件將讀取接收緩沖區(qū)的所有內(nèi)容。 通信口初始化程序舉例如下: Private Sub Form_Load() 進(jìn)行通訊端口和初始化設(shè)置。
MSComm1.CommPort = 1 MSComm1.Settings = "9600,e,7,1" 端口設(shè)置:波特率為9600bit/s、偶校驗(yàn)、7位數(shù)據(jù)位、1位停止位。 MSComm1.InputMode = comInputModeText ‘文本字符串接收方式 MSComm1.InBufferSize = 1024 ‘輸入數(shù)據(jù)接收緩沖區(qū)長度 MSComm1.OutBufferSize = 512 ‘輸出數(shù)據(jù)緩沖區(qū)長度 MSComm1.RThreshold = 0 ‘每接受到字符就產(chǎn)生接受中斷 MSComm1.SThreshold = 0 ‘禁止發(fā)送中斷,進(jìn)行無條件發(fā)送 If MSComm1.PortOpen = False Then MSComm1.PortOpen = True ‘打開串行通信接口COM1 End If End Sub
5 搬運(yùn)機(jī)械手監(jiān)控軟件的實(shí)現(xiàn)
利用計算機(jī)語言VB編寫的搬運(yùn)機(jī)械手監(jiān)控程序主要分為以下幾部分:登陸及選擇控制方式畫面、手動控制界面和自動控制界面。手動控制界面與自動控制界面如圖4所示。
上位計算機(jī)主要完成運(yùn)動命令的生成,在獲取機(jī)械手傳感器信息的基礎(chǔ)上,完成機(jī)械手動作在計算機(jī)屏幕上的實(shí)時顯示。在機(jī)械手出現(xiàn)故障時,允許通過手動控制界面的按鈕來遠(yuǎn)程控制機(jī)械手動作。下位機(jī)PLC完成對電磁閥的控制從而驅(qū)動氣動執(zhí)行元件。
手動控制界面主要由狀態(tài)顯示區(qū)、按鈕控制區(qū)、位置顯示區(qū)、時間顯示區(qū)以及各種交互控制按鈕組成。如圖4(a)所示。按鈕控制區(qū)的按鈕通過用戶程序和PLC與各電磁閥的線圈相連,實(shí)現(xiàn)遠(yuǎn)程控制氣缸動作。每個氣缸控制按鈕的多少是與電磁閥的線圈數(shù)相對應(yīng)的,如果是三位五通閥則有三個按鈕,二位五通閥有兩個按鈕。
自動循環(huán)控制界面主要由狀態(tài)顯示區(qū)、按鈕控制區(qū)、位置顯示區(qū)、時間顯示區(qū)、報警區(qū)以及日志報告區(qū)等。如圖4(b)所示。位置顯示區(qū)的各狀態(tài)顯示是通過PC與PLC實(shí)時通信實(shí)現(xiàn)的。
(1)控制命令的發(fā)送
手動控制界面與自動循環(huán)控制界面中控制命令都是通過按鈕控制區(qū)的按鈕發(fā)送出去的,在發(fā)送控制命令之前,必須先形成控制命令幀。通常,按鈕對PLC的控制是對中間輔助繼電器的控制,是軟件對PLC內(nèi)部寫命令過程,該過程是通過WriteTo PLC()函數(shù)實(shí)現(xiàn)的,其程序如下: Public Sub WriteToPLC() Dim DUMMY As String If MSComm1.PortOpen = False Then MSComm1.PortOpen = True ‘‘‘‘‘‘打開通信端口Comm1 End If MSComm1.InputLen = 0 ‘‘‘‘‘初始化通信端口Comm1 MSComm1.Output = MWRITE(nCmdCounter) ‘‘‘‘‘通信端口Comm1寫出數(shù)據(jù)包 End Sub 控制界面中的所有的寫命令又是通過數(shù)組MWRITE()來實(shí)現(xiàn)的。其元素包括舉例如下: MWRITE(1) = Chr$(2) + "1" + "0111011" + Chr$(3) + "89" ‘‘‘手爪夾持M136置1 MWRITE(2) = Chr$(2) + "1" + "0111010" + Chr$(3) + "88" ‘‘‘‘‘手爪松開M136置0
(2)定時讀取機(jī)械手狀態(tài)信息
在狀態(tài)顯示區(qū)內(nèi),顯示的是手爪氣缸、手臂氣缸、升降氣缸、扭轉(zhuǎn)氣缸和手腕氣缸的電磁閥的工作狀態(tài)。當(dāng)按鈕控制區(qū)的按鈕被按下時,狀態(tài)顯示區(qū)的狀態(tài)指示燈將被點(diǎn)亮,表示PLC的某個對應(yīng)的輸出端子正在工作。該信號是通過與PLC進(jìn)行的實(shí)時數(shù)據(jù)交換得到的,是PLC的端子的實(shí)時狀態(tài)。同樣地,在位置顯示區(qū),顯示的是機(jī)械手運(yùn)動氣缸的活塞桿位置狀態(tài),是否到達(dá)左右極限。當(dāng)活塞桿到達(dá)極限位置,相應(yīng)的位置顯示區(qū)的極限報警燈將被點(diǎn)亮,表示PLC的某個對應(yīng)的輸入端子正在工作。該信號也是通過與PLC進(jìn)行的實(shí)時數(shù)據(jù)交換得到的,是PLC的端子的實(shí)時狀態(tài)。軟件對PLC各個元器件狀態(tài)的獲取是通過讀命令和軟件的定時器控件Timer()來實(shí)現(xiàn)的。讀命令是通過函數(shù)Read From PLC()實(shí)現(xiàn)的。其程序?yàn)椋?Public Sub ReadFromPLC() Dim DUMMY As String ‘‘‘‘向計算機(jī)發(fā)送讀取命令‘‘‘‘‘‘‘‘‘‘‘‘ If MSComm1.PortOpen = False Then MSComm1.PortOpen = True End If ‘‘讀取D數(shù)據(jù)寄存器的數(shù)據(jù)‘‘‘‘‘‘ MSComm1.InputLen = 0 MSComm1.Output = ReadCmd(nCounter) ‘‘‘‘‘‘‘從MSComm1.Output發(fā)送數(shù)組ReadCmd(20)中的字符串 Do DUMMY=DoEvents() Loop Until MSComm1.InBufferCount >= 6 ReturnData(nCounter) = MSComm1.Input 將MSComm1.Input接收到的信號存放在數(shù)組ReturnData()中,然后根據(jù)接收到的數(shù)據(jù)分配給用戶界面中的各種狀態(tài)顯示。
手控界面中的所有的讀命令又是通過數(shù)組ReadCmd()來實(shí)現(xiàn)的。其元素包括舉例如下: ReadCmd(0) = Chr$(2) + "0" + "100001" + Chr$(3) + "55" ‘‘‘讀取D0數(shù)據(jù)
6 結(jié)束語
通過搬運(yùn)機(jī)械手監(jiān)控系統(tǒng)的具體程序,系統(tǒng)地闡述了VB環(huán)境下的PC與PLC編程口通信應(yīng)用程序的設(shè)計方法。系統(tǒng)運(yùn)行表明,用PLC編程口與VB通信控件編寫的實(shí)時通訊程序可靠、穩(wěn)定,很好地滿足了搬運(yùn)機(jī)械手實(shí)時監(jiān)控系統(tǒng)的應(yīng)用要求。
標(biāo)簽:
中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(m.u63ivq3.com)獨(dú)家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>以簡驅(qū)繁,精準(zhǔn)智控 | 維智S1系列新一代...
2024-11-01
2024-10-31
2024-10-31
2024-10-31
2024-10-31
2024-10-29
推薦專題
更多>