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