劉心紅 郭福田
摘? 要:在工業(yè)測控相關(guān)的教學(xué)實(shí)踐課程中,常常涉及上位機(jī)與智能儀器設(shè)備通信問題,而智能儀器儀表廣泛采用Modbus通信協(xié)議。鑒于工業(yè)用Modbus協(xié)議的設(shè)備價(jià)格昂貴,實(shí)驗(yàn)過程復(fù)雜,本文開發(fā)了用于實(shí)驗(yàn)的ModbusASCII仿真器,實(shí)現(xiàn)了ModbusASCII通信協(xié)議。
關(guān)鍵詞:通信協(xié)議;上位機(jī);ModbusASCII;仿真
中圖分類號(hào):TP2???? 文獻(xiàn)標(biāo)識(shí)碼:B
引言
在工業(yè)測控相關(guān)的教學(xué)實(shí)踐課程中,常常購買大量昂貴的工業(yè)測控智能儀器、儀表和實(shí)驗(yàn)臺(tái),硬件設(shè)備維護(hù)工作量巨大。工業(yè)測控課程主要是通過計(jì)算機(jī)或PLC等上位機(jī)對(duì)測控儀器儀表(下位機(jī))發(fā)送控制命令并從其采集數(shù)據(jù)實(shí)現(xiàn)測量與控制,主要涉及雙方的通信問題。由于智能儀器儀表都是用在工業(yè)控制系統(tǒng)中的,其功能強(qiáng)、可靠性高,價(jià)格昂貴,用于教學(xué)操作復(fù)雜,也過于奢侈浪費(fèi)。為了降低測控實(shí)驗(yàn)教學(xué)成本,本文開發(fā)了一個(gè)ModbusASCII仿真器,可構(gòu)成虛擬的測控系統(tǒng),用于學(xué)習(xí)編寫、運(yùn)行及調(diào)試計(jì)算機(jī)測控程序,進(jìn)行測控實(shí)驗(yàn)。這樣,充分利用學(xué)校的計(jì)算機(jī)資源,減少了智能儀器儀表的費(fèi)用和維護(hù)工作量,同時(shí)也可為學(xué)生提供了形象直觀的實(shí)驗(yàn)過程。
1? ModbusASCII通信協(xié)議
Modbus協(xié)議已經(jīng)成為工業(yè)領(lǐng)域通信協(xié)議的業(yè)界標(biāo)準(zhǔn),是智能儀器儀表之間常用的通信方式。Modbus協(xié)議支持傳統(tǒng)的RS-232、RS-422、RS-485和以太網(wǎng)設(shè)備,有ASCII、RTU和TCP三種通信格式,其標(biāo)準(zhǔn)性和多樣性非常適合作為測控軟件的教學(xué)內(nèi)容。其中ModbusASCII通信數(shù)據(jù)格式比較簡單,使用ASCII即字符串格式,字符傳輸間隔要求不高,小于1秒就行,數(shù)據(jù)串可讀性強(qiáng),易于實(shí)現(xiàn)。本文在分析了ModbusASCII通信格式的基礎(chǔ)上實(shí)現(xiàn)了相應(yīng)的軟件仿真器。
Modbus 通信協(xié)議通常用于RS-485工業(yè)總線上,采用一主多從的通信方式,由于從機(jī)多,需要為每一個(gè)從機(jī)分配一個(gè)地址,主從之間采用異步傳輸方式,1位起始位,8位數(shù)據(jù)位,可不用奇偶校驗(yàn)位,可采用1位停止位。
本文以ModbusASCII的2個(gè)常用功能03和06進(jìn)行說明。03功能為讀取一個(gè)或多個(gè)寄存器的數(shù)據(jù);06功能把1個(gè)16位的數(shù)據(jù)寫入某一寄存器。主機(jī)通過03和06號(hào)功能對(duì)從機(jī)的寄存器操作來讀寫其中任意存儲(chǔ)器中的數(shù)據(jù),實(shí)現(xiàn)主從機(jī)的遠(yuǎn)程測控。
以ModbusASCII的03功能為例(其它功能類似),其通信格式如下“:AA 03 XX XX YY YY LRC CR LF”,通信數(shù)據(jù)字符串可分為由2個(gè)16進(jìn)制數(shù)構(gòu)成的1個(gè)字節(jié)形式的2個(gè)字符對(duì),連在一起構(gòu)成命令或響應(yīng)數(shù)據(jù)串。這里,“:”為數(shù)據(jù)串的起始位,AA(01到FF之間)為從機(jī)地址,03即功能碼,XXXX為起始寄存器號(hào),YYYY為讀取寄存器數(shù)量,LRC為縱向校驗(yàn)碼,由前面的2位數(shù)對(duì)求和取補(bǔ)得到,以檢測數(shù)據(jù)串傳輸是否有誤。CRLF為回車和換行符號(hào),表示數(shù)據(jù)串結(jié)束。
2? ModbusASCII仿真器設(shè)計(jì)
ModbusASCII下位機(jī)仿真仿真器的設(shè)計(jì)思想是程序運(yùn)行后處于字符串接收狀態(tài),當(dāng)從串行口收到命令串后,在接收事件中處理,根據(jù)命令要求,將需要的寄存器值構(gòu)成應(yīng)答串。
為了在VB中實(shí)現(xiàn)串行通信[1],仿真器設(shè)計(jì)中采用了微軟的MSCOMM控件,其屬性設(shè)置為:CommPort=3,即仿真器連接在串口3上;Rthreshold=1,即事件接收方式;InputMode=0為字符串收發(fā)方式,對(duì)應(yīng)ModbusASCII的數(shù)據(jù)串格式;Settings=”9600,n,8,1”,即通信波特率為9600,無校驗(yàn),8位數(shù)據(jù)位,1個(gè)停止位。
Modbus協(xié)議是針對(duì)線圈和寄存器操作的,在仿真器程序中設(shè)計(jì)了10個(gè)16位寄存器,用戶可通過鍵盤輸入或顯示主機(jī)發(fā)來的4位16進(jìn)制數(shù)。主機(jī)可通過ModbusASCII命令串讀取或改寫這些寄存器中的值。仿真器運(yùn)行時(shí),處于等待被查詢狀態(tài),隨時(shí)接收上位機(jī)發(fā)來的命令串。在接收事件中對(duì)收到的命令串進(jìn)行分析。首先檢查地址,確定是否接收命令串;然后再對(duì)數(shù)據(jù)串進(jìn)行縱向冗余校驗(yàn),無錯(cuò)則進(jìn)一步查看是被讀命令還是寫命令;如果是被讀則發(fā)送需要的寄存器值,如果被寫則按設(shè)定值改寫相應(yīng)寄存器的值。
3? 仿真實(shí)驗(yàn)測試
為了在一臺(tái)計(jì)算機(jī)上進(jìn)行測試,首先建立實(shí)驗(yàn)測試環(huán)境,測試環(huán)境搭建需要3個(gè)軟件,一個(gè)是本文設(shè)計(jì)的仿真器;一個(gè)是測控工程中常用的Modbus Poll測試軟件;一個(gè)是模擬主從設(shè)備通過串口連接的虛擬串口軟件[2]。
如下圖所示,測試軟件用03功能讀取仿真器的10個(gè)寄存器數(shù)據(jù),也可以通過雙擊測試軟件中的數(shù)據(jù)改寫仿真器端對(duì)應(yīng)寄存器中的值。可以看到主從雙方數(shù)據(jù)傳輸一致,仿真器測試成功。
測試成功后就可以將仿真器作為PLC、變頻器或各種智能儀器儀表使用。上位機(jī)測控軟件可以采用VB、VC或VC#等編程軟件設(shè)計(jì),方便地通過字符串命令讀寫仿真器中寄存器數(shù)據(jù),實(shí)現(xiàn)工業(yè)測控上位機(jī)監(jiān)控系統(tǒng)。
4? 結(jié)束語
本文分析了ModbusASCII通信協(xié)議,開發(fā)了相應(yīng)的實(shí)驗(yàn)教學(xué)用的仿真器,可代替ModbusASCII通信協(xié)議的工業(yè)智能儀器儀表,該仿真器已經(jīng)用于工控軟件設(shè)計(jì)等實(shí)驗(yàn)教學(xué)中,替代了工業(yè)測控教學(xué)中一大類字符串通信的實(shí)驗(yàn)設(shè)備。仿真器的使用提高了實(shí)驗(yàn)效率,并節(jié)約了大量的經(jīng)費(fèi),同時(shí)去除了硬件設(shè)備的維護(hù)工作量。用仿真器的實(shí)驗(yàn)教學(xué)方法在測控課程學(xué)習(xí)方面具有一定的推廣意義。
參考文獻(xiàn)
[1]? 曾麗麗,劉心紅,趙忖,張昕編著. VB通信編程技術(shù)[M]. 北京:中國石化出版社. 2014.106-128
[2]? 劉心紅,郭福田,開關(guān)控制器仿真設(shè)計(jì)及其在教學(xué)中的應(yīng)用[J].北京:知識(shí)-力量:2019,8(23),80-81
作者簡介:劉心紅(1966-),女(漢族),黑龍江大慶市人,工學(xué)學(xué)士,副教授,教師?,F(xiàn)從事計(jì)算機(jī)軟件應(yīng)用方面的教學(xué)與研究工作。
基金項(xiàng)目:秦皇島市科學(xué)技術(shù)研究與發(fā)展計(jì)劃課題:Modbus通信協(xié)議仿真及其在教學(xué)中的應(yīng)用(201902A006)