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