源文档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
资源
主页:http://www.libmodbus.org/
提交问题http://github.com/stephane/libmodbus/issues.
版权协议
根据GNU通用公共许可证(LGPLv2.1 +)的条款,免费使用此软件。有关详细信息,请参阅COPYING.LESSERlibmodbus发行版随附的文件。