張暉(1978-)
男,漢族,江蘇南通人,在讀碩士研究生,
講師,研究方向為控制工程。
基金項目:江蘇省交通廳資助項目(項目編號:04X016)。
1 引言
在計算機監(jiān)控系統(tǒng)中,首先遇到的問題就是通信問題,只有通信問題解決了,才有可能實現(xiàn)計算機對整個工作系統(tǒng)的監(jiān)控。LabVIEW軟件多用在測試工程中,但隨著科學(xué)技術(shù)的發(fā)展和LabVIEW軟件功能的提高,在監(jiān)控系統(tǒng)中也可以采用LabVIEW來完成編程。本文主要討論LabVIEW與三菱FX2N系列PLC的通訊問題。
2 利用動態(tài)鏈接庫進行串口通信
DLL(動態(tài)鏈接庫)是Windows的重要組成部分,包含被程序或者其他動態(tài)鏈接庫調(diào)用來完成某項工作的函數(shù)。使用它的目的就是給不同的應(yīng)用程序提供完成某項工作的資源或函數(shù)。
上海理工大學(xué)信息與控制工程研究所開發(fā)出了基于FX_BD通訊板的動態(tài)鏈接庫。FX_ BD是三菱PLC通信的擴展板,主要分為FX232BD、FX485BD 和FX422BD 等3 種,而實現(xiàn)PLC 串口通信應(yīng)使用FX232BD、FX485BD 模塊。三菱PLC通信動態(tài)鏈接庫的編寫可以通過三菱PLC 上的編程口,利用編程電纜來實現(xiàn)對PLC的控制,但是因為串口通信的參數(shù)固定,且對PLC 可操作的寄存器數(shù)目有限,所以不采用這種通信方式??紤]到三菱PLC 支持計算機鏈接,采用計算機鏈接通信格式,利用FX_ BD ,可通過單個串行口來控制多PLC ,并且可以設(shè)定串口參數(shù),適應(yīng)不同的傳輸速率。通信時可以調(diào)整PLC 中的響應(yīng)等待時間,支持PLC 內(nèi)部所有寄存器,擴大了使用范圍,適用于多PLC 聯(lián)網(wǎng)和上位機通信等,滿足工業(yè)現(xiàn)場的各種控制需要。
使用DLL的動態(tài)鏈接庫并不是將庫代碼拷貝,只是在程序中記錄了函數(shù)的入口點和接口,在程序執(zhí)行時才將庫代碼動態(tài)地裝入內(nèi)存,裝載時DLL被映射到進程的地址空間中。動態(tài)連接庫DLL調(diào)用方式如圖1所示。
圖1 動態(tài)鏈接庫調(diào)用方式
調(diào)用DLL 主要完成如下一些操作: ①打開串口,完成對串口的參數(shù)設(shè)置; ②完成相關(guān)讀寫PLC、控制PLC 運行操作; ③操作完成關(guān)閉串口。
3 利用LabVIEW標(biāo)準(zhǔn)串口函數(shù)進行串口通信
這種方法適用于LabVIEW和FX2N PLC的編程口通信。
3.1 在Labview中提供了幾個標(biāo)準(zhǔn)的串口通訊函數(shù)
在LabVIEW中進行串口通信的基本步驟是:
(1)初始化端口,利用串口初始化函數(shù)設(shè)定進行串口通訊的端口號、波特率、停止位、校驗位、數(shù)據(jù)位,注意在Labview中串行端口號是從0開始編號的。
(2)讀寫端口,利用串口讀寫函數(shù)。從串口中讀入或輸出數(shù)據(jù)。
(3)關(guān)閉端口。
3.2 FX系列PLC編程口的通信協(xié)議
3.2.1 數(shù)據(jù)格式
數(shù)據(jù)格式如圖2所示。
圖2 數(shù)據(jù)格式
3.2.2通信命令
FX系列PLC有4個通信命令,它們是讀命令、寫命令、強制通命令、強制斷命令,如表1所示。表中X—輸入繼電器;Y—輸出繼電器;M—輔助繼電器;S—狀態(tài)元件;T—定時器;C—計數(shù)器;D—數(shù)據(jù)寄存器。
表1 通信命令
3.2.3通信控制字符
FX 系列PLC采用面向字符的傳輸規(guī)程,用到五個通信控制字符,如表2所示。
表2 通信控制字符
3.3 LabVIEW程序設(shè)計
3.3.1串口初始化
圖3是串口初始化流程圖,使用了VISA串口配置函數(shù),將串口設(shè)置為波特率9600 bps,7位數(shù)據(jù)位,偶校驗,1位停止位。
圖3 串口初始化
3.3.2 RS232COMM子VI
圖4 RS232COMM子VI
在完成串口配置后,下一步就是向串口寫入字符,這一步的動作是由“VISA寫入”函數(shù)完成的,寫入的數(shù)據(jù)必須按照三菱FX系列PLC編程口通信協(xié)議的格式進行。在串口將數(shù)據(jù)發(fā)送給PLC后,串口與PLC都需要時間執(zhí)行程序,因此在流程圖中使用了一個毫秒等待計時器。再下一步為讀取串口緩存動作,這一步由“VISA讀取”函數(shù)完成,主要功能是“VISA資源名稱端口”指定的設(shè)備中讀取由字節(jié)總數(shù)端口指定長度的數(shù)據(jù)。而檢測當(dāng)前串口輸入字節(jié)數(shù)可由屬性節(jié)點“Property Node”中完成,該節(jié)點的主要功能為返回串口的輸入緩存中數(shù)據(jù)的字節(jié)數(shù),在使用“VISA 讀取”函數(shù)讀取串口前,可以先用VISA Bytes at Serial Port節(jié)點檢測當(dāng)前串口輸入緩存中存在的字節(jié)數(shù),然后由此指定“VISA讀取”節(jié)點從串口輸入緩存中讀取的字節(jié)數(shù),可以保證一次將串口輸入緩存中的數(shù)據(jù)全部讀出。最后一步就是在完成發(fā)送與讀取后關(guān)閉占用的串口資源,這一步動作由VISA節(jié)點“VISA 關(guān)閉”完成,該節(jié)點的主要功能為關(guān)閉由“VISA資源名稱端口”指定的設(shè)備連接,可用于關(guān)閉一個已經(jīng)打開的串口,從而釋放LabVIEW對這個串口資源的占用。
由于在整個監(jiān)控系統(tǒng)中使用了許多數(shù)據(jù)寄存器,而根據(jù)三菱FX2N系列PLC的編程口協(xié)議,最多可以讀取64個字節(jié)(即32個數(shù)據(jù)寄存器),所以,要完成整個生產(chǎn)系統(tǒng)的數(shù)據(jù)讀取,必須要分開執(zhí)行多次讀和寫的動作。在這種情況下,就需要考慮讀寫的時序問題。要完成連續(xù)的周期性的多點讀寫操作,在LabVIEW中可以使用順序結(jié)構(gòu)。順序結(jié)構(gòu)的功能是強制程序按一定的順序執(zhí)行。順序結(jié)構(gòu)可分為層疊式與平鋪式。不過這兩種結(jié)構(gòu)執(zhí)行相同的讀寫操作,時間和順序都相同,都可以實現(xiàn)對于串口的連續(xù)多點讀寫。
4 利用MSComm控件進行串口通信
MSComm控件,即Microsoft Communication Control,是Microsoft為了簡化Windows下的串行通信編程而提供的ActiveX控件,它提供了一系列標(biāo)準(zhǔn)通信命令的使用接口,利用它可以建立與串口通信,可以通過串口連接到其他通信設(shè)備,發(fā)出命令、交換數(shù)據(jù)以及監(jiān)視和響應(yīng)串行連接中發(fā)生的事件和錯誤。關(guān)于該控件的相關(guān)屬性已經(jīng)有很多文章中提到了,本文不再贅述。
MSComm通信子VI如圖5所示,采用了順序結(jié)構(gòu),串口配置詳細(xì)情況見圖,其中InputMode要設(shè)置成“1”(二進制方式),否則數(shù)據(jù)若超過128則會產(chǎn)生錯誤。MSComm控件提供兩種處理通信的方式,本系統(tǒng)中采用事件驅(qū)動方式,即當(dāng)通信事件發(fā)生時,MSComm控件會觸發(fā)OnComm事件,LabVIEW可以捕獲該事件,通過檢查其CommEvent屬性便可知道發(fā)生的是哪種事件或錯誤。這種方法的優(yōu)點是響應(yīng)及時,可靠性高。
圖5 MSComm通信子VI
5 利用MX Component通訊控件包進行串口通信
MX Component是三菱電機開發(fā)的,用于支持個人計算機與可編程控制器之間通信的控件包,它不用考慮各種通信協(xié)議的不同,只要經(jīng)簡單處理即可實現(xiàn)通信,因此MX Component能大幅減少編制通信程序的工時。它支持VisualC++ 、Visual Basic 和Access Excel 的VBA、 VBScript、LabVIEW。
MX Component通訊控件包首先需要進行安裝,SW3D5C-ACT-E軟件目前版本3.0,安裝完成后,在操作系統(tǒng)的程序中就會出現(xiàn)相關(guān)程序,系統(tǒng)OCX控件列表內(nèi)也就有相應(yīng)的驅(qū)動OCX。
控件包安裝好后,就需要對其進行配置,點開“Communication Setup Utility”,利用其操作向?qū)?,根?jù)PLC站號、波特率、PLC主機類型、連接類型、控制類型等相關(guān)信息進行配置,配置完成后的界面如圖6所示,配置完成后還可進行通訊測試。
圖6 MX Component配置完成后的界面
與在LabVIEW中加載MSComm控件相類似,新建一個VI,從在前面板上將“控件”工具欄顯示出來,在“經(jīng)典容器”中找到“ActiveX容器”,并將其拖放到前面板上,在“ActiveX容器”對象上單擊鼠標(biāo)右鍵,從彈出的快捷菜單中選擇“插入ActiveX對象”,將彈出“選擇ActiveX對象”對話框,在對話框中選擇“MITSUBISHI ActFXCPU Control”添加到LabVIEW環(huán)境中。
圖7 MX Component通信子VI
該VI主要由三大部分組成,第一部分利用Open函數(shù)對通信端口進行打開,并返回一個布爾指示,顯示通信狀態(tài);第二部分利用WriteDeviceBlock函數(shù)對PLC的數(shù)據(jù)存儲器D100寫入一個數(shù)值456;第三部分利用ReadDeviceBlock函數(shù)將D100內(nèi)的數(shù)值讀出并顯示出來。
可以看出,利用MX Component通信控件可以很方便的構(gòu)筑起LabVIEW與三菱PLC之間的聯(lián)系,并且無需考慮通信協(xié)議等內(nèi)容。
6 結(jié)束語
實驗證明,本文列舉的幾種方式可以實現(xiàn)LabVIEW與三菱FX2N系列PLC的通訊,可以很方便的實現(xiàn)計算機對PLC的內(nèi)存單元進行讀寫操作,從而為實現(xiàn)工業(yè)現(xiàn)場的監(jiān)控與現(xiàn)場數(shù)據(jù)的分析打下基礎(chǔ)。
參考文獻:
[1]邱培林,沈昱明.基于FX_ BD的FX PLC串口通信DLL的實現(xiàn).自動化儀表,2005,26(5).
[2]王磊,陶梅.精通LabVIEW 8.0.電子工業(yè)出版社,2007.
[3]馬振鋒,劉獻禮,王鵬,蔣新苗.基于LabVIEW 7.1 的PC機與PLC通信.哈爾濱理工大學(xué)學(xué)報,2005,10(5).
[4]張崇智.PC與三菱FX2N型PLC串口通信的實現(xiàn).機床電器,2005(3).
[5]楊久紅,王小增.MSComm控件實現(xiàn)PC與PLC串行通訊.現(xiàn)代電子技術(shù),2005(5).