ModBus通訊協議軟件包

產品介紹相關資料

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通訊協議
Go Top
云南快乐十分