源文檔libmodbus的中文翻譯

源文檔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 環境

modbus_new_rtu(3)

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環境

modbus_free(3)

設置從站ID

modbus_set_slave(3)

啓用調試模式

modbus_set_debug(3)

超時設置

modbus_get_byte_timeout(3)modbus_set_byte_timeout(3)modbus_get_response_timeout(3)modbus_set_response_timeout(3)

錯誤恢復模式

modbus_set_error_recovery(3)

設置/獲取內部Socket

modbus_set_socket(3)modbus_get_socket(3)

數據頭信息

modbus_get_header_length(3)

數據操作的宏

處理位和字節

連接

提供以下功能來建立和關閉與Modbus設備的連接:

建立連接

modbus_connect(3)

關閉連接

modbus_close(3)

沖洗連接

modbus_flush(3)

客戶端

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)

回覆例外

modbus_reply_exception(3)

服務器正在等待來自客戶端的請求,並且在請求時需要回答。libmodbus提供以下功能來處理請求:

數據映射:modbus_mapping_new(3)modbus_mapping_free(3)

接收

modbus_receive(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://www.libmodbus.org/

提交問題http://github.com/stephane/libmodbus/issues.

版權協議

根據GNU通用公共許可證(LGPLv2.1 +)的條款,免​​費使用此軟件。有關詳細信息,請參閱COPYING.LESSERlibmodbus發行版隨附的文件。



作者:冰淇淋的獵人
鏈接:https://www.jianshu.com/p/d93c17485c0a
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章