ModBus通訊協(xié)議簡(jiǎn)介
Modbus協(xié)議是一種已廣泛應(yīng)用于當(dāng)今工業(yè)控制領(lǐng)域的通用通訊協(xié)議。通過(guò)此協(xié)議,控制器相互之間、或控制器經(jīng)由網(wǎng)絡(luò)(如以太網(wǎng))可以和其它設(shè)備之間進(jìn)行通信。Modbus協(xié)議使用的是主從通訊技術(shù),即由主設(shè)備主動(dòng)查詢(xún)和操作從設(shè)備。一般將主控設(shè)備方所使用的協(xié)議稱(chēng)為Modbus Master,從設(shè)備方使用的協(xié)議稱(chēng)為Modbus Slave。典型的主設(shè)備包括工控機(jī)和工業(yè)控制器等;典型的從設(shè)備如PLC可編程控制器等。Modbus通訊物理接口可以選用串口(包括RS232和RS485),也可以選擇以太網(wǎng)口。其通信遵循以下的過(guò)程:
●主設(shè)備向從設(shè)備發(fā)送請(qǐng)求
●從設(shè)備分析并處理主設(shè)備的請(qǐng)求,然后向主設(shè)備發(fā)送結(jié)果
●如果出現(xiàn)任何差錯(cuò),從設(shè)備將返回一個(gè)異常功能碼
英創(chuàng)ModBus通訊協(xié)議軟件產(chǎn)品簡(jiǎn)介
英創(chuàng)公司推出的ModBus通訊協(xié)議軟件產(chǎn)品主要應(yīng)用于英創(chuàng)ARM9嵌入式主板環(huán)境,英創(chuàng)工控主板均帶有豐富的串口、網(wǎng)絡(luò)資源、通用GPIO接口等,同時(shí)具有強(qiáng)大的處理能力。結(jié)合ModBus通訊協(xié)議軟件,就可非常方便地構(gòu)成符合ModBus通訊規(guī)范的主控(Master)及設(shè)備(Slave)的應(yīng)用平臺(tái)。針對(duì)ModBus通訊的主從方式這一特點(diǎn),英創(chuàng)公司的ModBus通訊協(xié)議軟件包分為兩個(gè)可獨(dú)立使用的部分,即“ModBus主控協(xié)議軟件”(簡(jiǎn)稱(chēng)modbus_Master)以及“ModBus設(shè)備方協(xié)議軟件”(簡(jiǎn)稱(chēng)modbus_Slave)。目前英創(chuàng)ModBus通訊協(xié)議軟件運(yùn)行于WinCE環(huán)境下,均以C函數(shù)加靜態(tài)LIB庫(kù)的形式提供給客戶(hù)。其主要特征如下:
●非常適用于實(shí)時(shí)的工業(yè)應(yīng)用
●可以支持基于串口的ModBus通訊協(xié)議應(yīng)用或TCP的ModBus通訊協(xié)議應(yīng)用
●RTU傳輸模式
●支持大多數(shù)的Modbus功能碼操作,包括對(duì)線(xiàn)圈、離散開(kāi)關(guān)輸入的位操作,以及對(duì)寄存器的字節(jié)操作
●支持廣播地址
●可以靈活設(shè)置ModBus通訊的超時(shí)時(shí)間
●可以獲取通訊中傳輸協(xié)議的錯(cuò)誤代碼的詳細(xì)信息
英創(chuàng)ModBus協(xié)議軟件通訊關(guān)系圖
英創(chuàng)ModBus協(xié)議軟件支持的功能碼
功能碼 | 描述 |
1 | 讀單個(gè)線(xiàn)圈 |
2 | 讀離散量輸入 |
3 | 讀多個(gè)寄存器 |
4 | 讀輸入寄存器 |
5 | 寫(xiě)單個(gè)線(xiàn)圈 |
6 | 寫(xiě)單個(gè)寄存器 |
15 | 寫(xiě)多個(gè)線(xiàn)圈 |
16 | 寫(xiě)多個(gè)寄存器 |
22 | 屏蔽寫(xiě)寄存器 |
23 | 讀/寫(xiě)寄存器 |
軟件基本使用方法
為了方便應(yīng)用程序的使用,對(duì)不同的通訊介質(zhì)保持一致的代碼形式,英創(chuàng)所提供的ModBus協(xié)議軟件(包括modbus_Master和modbus_Slave)中的API函數(shù)可以同時(shí)支持基于串口和TCP的Modbus協(xié)議,應(yīng)用程序只需要在調(diào)用初始化函數(shù)時(shí),用不同參數(shù)區(qū)分即可,有關(guān)參數(shù)的說(shuō)明請(qǐng)參見(jiàn)相應(yīng)的頭文件:modbus_Master.h和modbus_Slave.h
1、modbus_Master的應(yīng)用
作為Modbus客戶(hù)端模式的應(yīng)用,主要是準(zhǔn)備請(qǐng)求并向服務(wù)器設(shè)備發(fā)送請(qǐng)求,并等待服務(wù)器的響應(yīng)。在做此類(lèi)應(yīng)用開(kāi)發(fā)時(shí),用戶(hù)可參考Modbus標(biāo)準(zhǔn)文獻(xiàn)以及被控設(shè)備的通訊接口數(shù)據(jù)手冊(cè),直接調(diào)用英創(chuàng)提供的modbus_Master軟件包提供了相應(yīng)的操作API函數(shù),來(lái)完成對(duì)服務(wù)器設(shè)備的訪(fǎng)問(wèn)和控制。在進(jìn)行此類(lèi)應(yīng)用開(kāi)發(fā)時(shí),用戶(hù)只需要包含modbus_master.h/ modbus_master.lib 即可。
2、modbus_Slave的應(yīng)用
作為ModBus服務(wù)器模式的應(yīng)用,主要需要實(shí)現(xiàn)了對(duì)于ModBus應(yīng)用報(bào)文的分析與響應(yīng),但這還只是ModBus整個(gè)通訊的一部分,另一部分是還需要有對(duì)應(yīng)用數(shù)據(jù)的訪(fǎng)問(wèn),這部分的內(nèi)容則需要用戶(hù)自己來(lái)進(jìn)行定義。為了方便客戶(hù)的使用,在modbus_Slave軟件包中通過(guò)函數(shù)指針的形式,實(shí)現(xiàn)了這些用戶(hù)接口函數(shù)的自動(dòng)加載,將用戶(hù)應(yīng)用數(shù)據(jù)處理和ModBus應(yīng)用報(bào)文響應(yīng)關(guān)聯(lián)起來(lái)。用戶(hù)只需根據(jù)需求定義這些接口函數(shù)來(lái)實(shí)現(xiàn)相應(yīng)的功能,各個(gè)函數(shù)具體的定義是通過(guò)專(zhuān)門(mén)的一個(gè)CPP文件:DataProvider.cpp來(lái)實(shí)現(xiàn)。
由此可見(jiàn)在這類(lèi)的開(kāi)發(fā)應(yīng)用時(shí),需包含兩個(gè)部分的內(nèi)容,一部分是 modbus_slave.h/ modbus_slave.lib定義的API函數(shù);另一部分是DataProvider.h /DataProvider.cpp定義的用戶(hù)數(shù)據(jù)接口函數(shù),其中接口函數(shù)需要用戶(hù)在DataProvider.cpp中具體實(shí)現(xiàn)。
為了及時(shí)地響應(yīng)ModBus應(yīng)用報(bào)文,需要注意的是在程序設(shè)計(jì)時(shí)應(yīng)設(shè)計(jì)一個(gè)線(xiàn)程反復(fù)調(diào)用modbus_Slave執(zhí)行函數(shù),該函數(shù)為阻塞模式。
舉例如下:
(1)啟動(dòng)modbus設(shè)備方協(xié)議
hPort = mbusSlave_StartupServer( _T('*'), 1, 10000, mbusSlave_Interface );
或者
hPort=mbusSlave_StartupServer( _T('COM3:9600-8-1-0'),1,10000, mbusSlave_Interface );
(2)線(xiàn)程中調(diào)用執(zhí)行函數(shù)Serverloop 響應(yīng)請(qǐng)求
while( 1 )
{
// 調(diào)用執(zhí)行函數(shù),用于對(duì)ModBus報(bào)文的分析和響應(yīng)。
result = mbusSlave_ServerLoop( hPort );
if( result!=0 ) // 檢查是否返回錯(cuò)誤
{
// 出錯(cuò)處理:本例為獲取并打印錯(cuò)誤代碼的文本信息
wcscpy( szText, mbusSlave_GetErrorText( result ) );
i1 = wcslen( szText );
if( i1>0 )
{
wcstombs( strText, szText, i1 );
printf( ' error code: %s!\n', strText );
}
}
}
之前英創(chuàng)公司提供的ModBus通訊協(xié)議軟件,均是以C函數(shù)加靜態(tài)庫(kù)(modbus.lib或libmodbus.a文件)的形式提供給客戶(hù)。隨著越來(lái)越多的客戶(hù)使用,英創(chuàng)將ModBus通訊協(xié)議,特別是主控協(xié)議軟件(簡(jiǎn)稱(chēng)modbus_Master)以動(dòng)態(tài)庫(kù)(modbus_Master.dll或libmbusmaster.so文件)的形式預(yù)裝到英創(chuàng)嵌入式工控主板內(nèi)核系統(tǒng)中,以方便客戶(hù)應(yīng)用程序的調(diào)用。預(yù)裝Modbus協(xié)議的工控主板包括英創(chuàng)ESM系列所有主板(ESM6802、ESM6800、ESM335x、ESM928x等)。
相關(guān)參考資料
4~20mA電流環(huán)采集應(yīng)用方案 | WinCE下的Modbus主控通訊協(xié)議軟件 | |
WinCE下的Modbus設(shè)備方協(xié)議軟件 | 英創(chuàng)嵌入式Linux工控主板支持Modbus主控協(xié)議軟件 | |
Linux下的Modbus設(shè)備方協(xié)議軟件介紹 | ESM6802支持Qt MODBUS程序開(kāi)發(fā) | |
在英創(chuàng)主板中預(yù)裝Modbus通訊協(xié)議 |
-
Linux
+關(guān)注
關(guān)注
87文章
11335瀏覽量
210072 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6086瀏覽量
35510
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論