加载中…
个人资料
洒洒秦
洒洒秦
  • 博客等级:
  • 博客积分:0
  • 博客访问:132,100
  • 关注人气:30
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

libmodbus 基本手册

(2017-11-29 21:14:33)
分类: 知识类

版本号: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_mode3 modbus_rtu_set_serial_mode3 modbus_rtu_get_rts3modbus_rtu_set_rts3 modbus_rtu_set_custom_rts3 modbus_rtu_get_rts_delay3modbus_rtu_set_rts_delay3

 

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_connect3

关闭连接

modbus_close3

冲洗连接

modbus_flush3

客户端

Modbus协议定义了从远程设备读取和写入数据的不同数据类型和功能。客户端使用以下功能发送Modbus请求:

读取数据

modbus_read_bits3 modbus_read_input_bits3 modbus_read_registers3modbus_read_input_registers3 modbus_report_slave_id3

写数据

modbus_write_bit3 modbus_write_register3 modbus_write_bits3modbus_write_registers3

写和读数据

modbus_write_and_read_registers3

原始请求

modbus_send_raw_request3 modbus_receive_confirmation3

回复例外

modbus_reply_exception3

 

服务器正在等待来自客户端的请求,并且在请求时需要回答。libmodbus提供以下功能来处理请求:

数据映射: modbus_mapping_new3 modbus_mapping_free3

接收

modbus_receive3

回复

modbus_reply3 modbus_reply_exception3

 

错误处理

libmodbus功能使用POSIX系统上的标准约定处理错误。一般来说,这意味着一旦发生故障,libmodbus函数将返回一个NULL值(如果返回一个指针)或一个负值(如果返回一个整数),并且实际的错误代码将被存储在 errno变量中。

提供modbus_strerror()函数将libmodbus特定的错误代码转换为错误消息字符串; 详细信息请参考modbus_strerror3

 

 

杂项

该LIBMODBUS_VERSION_STRING表示libmodbus版本的程序已编译对应版本。变量libmodbus_version_major, libmodbus_version_minor,libmodbus_version_micro给出程序链接的版本。

 

作者

 libmodbus 文档作者

Stéphane Raimbault<<a target="_blank" href="mailto:stephane.raimbault@gmail.com" style="box-sizing: border-box; background: transparent; color: rgb(202, 12, 22); text-decoration: none; margin: 0px; padding: 0px; outline: none;">stephane.raimbault@gmail.com>

 

 

资源

主页: http://www.libmodbus.org/

提交问题 http://github.com/stephane/libmodbus/issues.

版权协议

根据GNU通用公共许可证(LGPLv2.1 +)的条款,免​​费使用此软件。有关详细信息,请参阅COPYING.LESSERlibmodbus发行版随附的文件。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有