源文檔libmodbus
版本號:V3.1.4
特點:
libmodbus是一個快速、並且跨平臺的Modbus庫
概要
#include
cc `pkg-config --cflags --libs libmodbus` files
描述
libmodbus是一個與使用Modbus協議的設備進行數據發送/接收的庫。該庫包含各種後端通過不同網絡進行通信(例如,RTU模式下的串口或TCP / IPv6中的以太網)。http://www.modbus.org網站提供的協議規範文檔http://www.modbus.org/specs.php。
libmodbus提供了較低通信層的抽象,並在所有支持的平臺上提供相同的API。
本文檔概述了libmodbus概念,介紹了libmodbus如何從不同的硬件和平臺中提取Modbus通信,併爲libmodbus庫提供的功能提供了參考手冊。
環境(上下文)
Modbus協議包含許多變體(例如串行RTU或Ehternet TCP),爲了簡化變種的實現,該庫旨在爲每個變體使用後端。後端也是滿足其他要求(例如實時操作)的便捷方式。每個後端都提供了一個特定的功能來創建一個新的modbus_t上下文。所述modbus_t上下文是包含所有必需的信息,根據所選擇的變體,以建立與其他Modbus設備的連接的不透明結構。
RTU環境
RTU後端(遠程終端單元)用於串行通信,並利用協議通信數據的連續的二進制表示形式。RTU格式遵循命令/數據CRC(cyclic redundancy check循環冗餘校驗)和作爲錯誤檢查機制,以確保數據的可靠性。Modbus RTU是可用於Modbus的最常用的實現方式。必須連續發送Modbus RTU消息,而不會出現字符間間斷http://en.wikipedia.org/wiki/Modbus(截至2011年3月13日,20:51 GMT))。
Modbus RTU框架調用從站,一個處理Modbus請求的設備/服務,以及一個發送請求的客戶端。通信始終由服務端發起。
許多Modbus設備可以在相同的物理鏈路上連接在一起(附註:總線結構),因此在發送消息之前,必須使用modbus_set_slave(3)設置從站(接收設備 )ID。如果您正在運行一個從站,則其從站號將用於過濾接收的消息。
RTU的libmodbus實現不是按照原始Modbus規範中所述的時間順序,而是所有字節都儘可能快地發送,並且當接收到所有預期字符時,響應或指示被認爲是完整的。此實現提供了非常快速的通信,但是您必須小心設置從站的響應超時小於主站的響應超時(否則其他從站可能忽略其中一個從站未響應時的主站請求)。
1. 創建一個modbus RTU 環境
2. 設置串口模式
modbus_rtu_get_serial_mode(3)modbus_rtu_set_serial_mode(3)modbus_rtu_get_rts(3)modbus_rtu_set_rts(3)modbus_rtu_set_custom_rts(3)modbus_rtu_get_rts_delay(3)modbus_rtu_set_rts_delay(3)
TCP(IPv4)環境
TCP後端實現了用於通過TCP / IPv4網絡進行通信的Modbus對象。它不需要校驗和計算,因爲底層TCP已經實現相同功能。
創建Modbus TCP環境
modbus_new_tcp(3)
TCP PI(IPv4和IPv6)環境
TCP PI(獨立協議)後端實現了用於通過TCP IPv4和IPv6網絡進行通信的Modbus對象。它不需要校驗和計算,因爲下層照顧相同。
TCP TCP後端與TCP IPv4僅後端相反,提供主機名解析,但它消耗大約1Kb的附加內存。
創建ModbusTCP獨立協議環境
modbus_new_tcp_pi(3)
共通
在使用任何libmodbus函數之前,調用者必須使用上述功能分配和初始化 modbus_t環境,然後提供以下函數來修改和釋放環境:
釋放libmodbus環境
設置從站ID
啓用調試模式
超時設置
modbus_get_byte_timeout(3)modbus_set_byte_timeout(3)modbus_get_response_timeout(3)modbus_set_response_timeout(3)
錯誤恢復模式
設置/獲取內部Socket
modbus_set_socket(3)modbus_get_socket(3)
數據頭信息
數據操作的宏
略
處理位和字節
略
連接
提供以下功能來建立和關閉與Modbus設備的連接:
建立連接
關閉連接
沖洗連接
客戶端
Modbus協議定義了從遠程設備讀取和寫入數據的不同數據類型和功能。客戶端使用以下功能發送Modbus請求:
讀取數據
modbus_read_bits(3)modbus_read_input_bits(3)modbus_read_registers(3)modbus_read_input_registers(3)modbus_report_slave_id(3)
寫數據
modbus_write_bit(3)modbus_write_register(3)modbus_write_bits(3)modbus_write_registers(3)
寫和讀數據
modbus_write_and_read_registers(3)
原始請求
modbus_send_raw_request(3)modbus_receive_confirmation(3)
回覆例外
服務器正在等待來自客戶端的請求,並且在請求時需要回答。libmodbus提供以下功能來處理請求:
數據映射:modbus_mapping_new(3)modbus_mapping_free(3)
接收
回覆
modbus_reply(3)modbus_reply_exception(3)
錯誤處理
libmodbus功能使用POSIX系統上的標準約定處理錯誤。一般來說,這意味着一旦發生故障,libmodbus函數將返回一個NULL值(如果返回一個指針)或一個負值(如果返回一個整數),並且實際的錯誤代碼將被存儲在errno變量中。
提供modbus_strerror()函數將libmodbus特定的錯誤代碼轉換爲錯誤消息字符串; 詳細信息請參考modbus_strerror(3)。
雜項
該LIBMODBUS_VERSION_STRING表示libmodbus版本的程序已編譯對應版本。變量libmodbus_version_major, libmodbus_version_minor,libmodbus_version_micro給出程序鏈接的版本。
作者
libmodbus 文檔作者
Stéphane Raimbault<[email protected]>
資源
提交問題http://github.com/stephane/libmodbus/issues.
版權協議
根據GNU通用公共許可證(LGPLv2.1 +)的條款,免費使用此軟件。有關詳細信息,請參閱COPYING.LESSERlibmodbus發行版隨附的文件。
作者:冰淇淋的獵人
鏈接:https://www.jianshu.com/p/d93c17485c0a
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。