西南科技大學(xué)信息工程學(xué)院 徐 勇
?
基于Modbus的通信驅(qū)動(dòng)設(shè)計(jì)
西南科技大學(xué)信息工程學(xué)院徐勇
【摘要】隨著工業(yè)控制領(lǐng)域的快速發(fā)展,集成監(jiān)控系統(tǒng)的應(yīng)用也越來越廣泛。本文根據(jù)集成監(jiān)控的開發(fā)需求,設(shè)計(jì)一套服務(wù)于集成監(jiān)控系統(tǒng)的Modbus通信驅(qū)動(dòng)組件。該組件以動(dòng)態(tài)鏈接庫的形式設(shè)計(jì)和開發(fā)。旨在設(shè)計(jì)和開發(fā)一套能夠支持二次開發(fā),并適用于集成監(jiān)控系統(tǒng)開發(fā)的工具。該通信驅(qū)動(dòng)程序根據(jù)XAML標(biāo)記語言特性,設(shè)置和保存通信驅(qū)動(dòng)的相關(guān)配置。并采用多線程的方式管理Modbus通信的多個(gè)主從連接。實(shí)現(xiàn)集成監(jiān)控系統(tǒng)對多個(gè)Modbus從站設(shè)備的數(shù)據(jù)采集和邏輯控制。
【關(guān)鍵詞】集成監(jiān)控系統(tǒng);Modbus;通信驅(qū)動(dòng);XAML
Modbus協(xié)議是一種用于電子控制器進(jìn)行通訊和控制的通信協(xié)議,是全球第一個(gè)真正用于工業(yè)現(xiàn)場的總線協(xié)議。通過此協(xié)議,控制器相互之間經(jīng)由網(wǎng)絡(luò)和其他設(shè)備就可以直接進(jìn)行通信,完成信息和數(shù)據(jù)的交換和傳遞。Modbus協(xié)議具有標(biāo)準(zhǔn)、開放、可以支持多種通信接口、數(shù)據(jù)幀格式簡單緊湊、數(shù)據(jù)傳輸量大、實(shí)時(shí)性好等特點(diǎn)。在工業(yè)控制系統(tǒng)中得到了非常廣泛的應(yīng)用。已經(jīng)成為了當(dāng)前工業(yè)控制領(lǐng)域的通用工業(yè)通信協(xié)議標(biāo)準(zhǔn)。
Modbus協(xié)議采用主-從式的通信結(jié)構(gòu),提供連接到不同類型總線或者網(wǎng)絡(luò)設(shè)備之間的客戶機(jī)/服務(wù)器進(jìn)行通信。主站程序使用不同的功能碼請求從站程序執(zhí)行不同的操作;從站程序執(zhí)行功能碼定義的操作并向主站程序發(fā)送響應(yīng),或者在操作中檢測到差錯(cuò)時(shí)發(fā)送異常響應(yīng)。
Modbus協(xié)議在串行鏈路上的實(shí)現(xiàn)模型和ISO/ OSI參考模型對比如圖1所示。由于Modbus現(xiàn)場總線的實(shí)時(shí)性特點(diǎn),所以Modbus通訊協(xié)議模型中的網(wǎng)絡(luò)層、傳輸層、會(huì)話層和表示層都沒有定義,這也是現(xiàn)場總線協(xié)議的一個(gè)共性特點(diǎn)。在應(yīng)用層規(guī)定了Modbus應(yīng)用層的協(xié)議模型包括消息幀格式,功能碼、校驗(yàn)、通訊時(shí)序控制等內(nèi)容。
圖1 Modbus模型與ISO/OSI模型的對比
Modbus協(xié)議定義了一個(gè)控制器能夠認(rèn)識(shí)并使用的消息結(jié)構(gòu),而不管他們是經(jīng)過何種網(wǎng)絡(luò)進(jìn)行通信的,它描述了一個(gè)控制器請求訪問其他下位機(jī)或者PC設(shè)備的過程。Modbus制定了消息域的格局和內(nèi)容的公共格式。
控制器通信使用主-從技術(shù),也就是一臺(tái)設(shè)備作為主設(shè)備能夠初始化傳輸(查詢)。其他設(shè)備作為從設(shè)備根據(jù)主設(shè)備查詢提供的數(shù)據(jù)做出相應(yīng)的反應(yīng)。
主設(shè)備可以單獨(dú)和從設(shè)備進(jìn)行通信。從設(shè)備按照協(xié)議返回消息給主設(shè)備作為回應(yīng)。
Modbus傳輸方式:
Modbus協(xié)議是一種應(yīng)用層報(bào)文傳輸協(xié)議,包括ASCII、RTU、TCP三種報(bào)文類型。協(xié)議本身是沒有定義物理層的,只是定義了控制器能夠認(rèn)識(shí)和使用的消息結(jié)構(gòu)。
Modbus協(xié)議使用串口傳輸時(shí)可以選擇RTU或者ASCII模式,并規(guī)定了消息、數(shù)據(jù)結(jié)構(gòu)、命令和應(yīng)答方式,并對數(shù)據(jù)進(jìn)行校驗(yàn)。ASCII模式采用LRC校驗(yàn)、RTU模式采用16位CRC校驗(yàn)。如果傳輸時(shí)使用TCP協(xié)議通信時(shí)不需要使用校驗(yàn),因?yàn)門CP協(xié)議本身就是一個(gè)面向連接且可靠的通信協(xié)議。
3.1通信驅(qū)動(dòng)運(yùn)行模塊
Modbus通信驅(qū)動(dòng)的運(yùn)行采用多線程的方式運(yùn)行。每一個(gè)Modbus主站都是一個(gè)IModbusStation實(shí)例化的對象,每個(gè)對象中都設(shè)定了Starp()方法和Stop()方法來管理Modbus主站的啟停。在每一個(gè)Modbus主站實(shí)例中,主線程用于監(jiān)控Modbus主站的運(yùn)行狀態(tài),并產(chǎn)生和監(jiān)視邏輯處理線程,用于與該Modbus主站下的所有從站進(jìn)行數(shù)據(jù)的交互和處理,而對于控制消息的下發(fā),Modbus通信驅(qū)動(dòng)采用消息隊(duì)列的方式跟從站進(jìn)行控制消息指令的發(fā)出。Modbus通信驅(qū)動(dòng)運(yùn)行流程圖如圖2所示:
圖2 Modbus通信驅(qū)動(dòng)程序運(yùn)行流程圖
3.2多線程并行處理模型
通信驅(qū)動(dòng)組態(tài)模塊作為集成監(jiān)控系統(tǒng)的核心,能夠支持一定數(shù)量的穩(wěn)定并發(fā)是最基本的要求。多線程的運(yùn)行模型,不僅能夠讓多個(gè)Modbus主站并行的執(zhí)行,還能減少系統(tǒng)的開銷。同時(shí),由于同一個(gè)進(jìn)程里的線程間的通信比較方便,開銷很小,所以,在每一個(gè)Modbus主站實(shí)例中,將不同的任務(wù)分配到多個(gè)線程中并行執(zhí)行,提高通信驅(qū)動(dòng)的執(zhí)行效率、實(shí)時(shí)性和穩(wěn)定性。本課題研究的通信驅(qū)動(dòng)組態(tài)根據(jù)集成監(jiān)控系統(tǒng)的需求設(shè)計(jì)了一套基于多線程通信和數(shù)據(jù)處理的運(yùn)行模型。
該模型通過線程的優(yōu)先級(jí)來調(diào)度線程,集成監(jiān)控系統(tǒng)通過通信驅(qū)動(dòng)內(nèi)的配置,為每一個(gè)Modbus主站實(shí)例化一個(gè)Modbus驅(qū)動(dòng)類的對象,并啟動(dòng)該對象的主線程。Modbus主站實(shí)例在主線程的驅(qū)動(dòng)下,完成下位機(jī)的實(shí)時(shí)數(shù)據(jù)采集、數(shù)據(jù)處理和控制指令的下發(fā)。多線程的并行處理模型如圖3所示:
圖3 多線程并行處理模型
本文多設(shè)計(jì)和開發(fā)的基于Modbus的通信驅(qū)動(dòng),依賴XAMl標(biāo)記語言完成對集成監(jiān)控系統(tǒng)中通信驅(qū)動(dòng)的配置和具體通信協(xié)議的二次開發(fā),采用多線程的方式并行訪問多個(gè)從站,實(shí)現(xiàn)對工業(yè)現(xiàn)場設(shè)備實(shí)時(shí)數(shù)據(jù)的采集,并通過共享消息隊(duì)列對現(xiàn)場設(shè)備進(jìn)行控制。性能完整且穩(wěn)定?,F(xiàn)已長期運(yùn)行于多個(gè)集成監(jiān)控系統(tǒng)的生產(chǎn)環(huán)境中。
參考文獻(xiàn)
[1]史運(yùn)濤,孫德輝,等.基于Modbus協(xié)議的通訊集成技術(shù)研究[J].研究與應(yīng)用,2010,04(1).
[2]宋文娟,趙強(qiáng),等.基于MODBUS網(wǎng)絡(luò)的液位測量系統(tǒng)設(shè)置[J].儀表儀器雪豹,2005,26(8).
[3]李娜.基于MODBUS協(xié)議的智能儀表的設(shè)計(jì)[D].北京:北京郵電大學(xué),2003.
[4]徐寧,趙冬梅.對基于XAML的新一代可拓展應(yīng)用程序標(biāo)記語言的研究[J].計(jì)算機(jī)時(shí)代,2004,11:68-71.
徐勇(1990—),四川眉山人,碩士,現(xiàn)就讀于西南科技大學(xué)。
作者簡介: