libmodbus
功能: a fast and portable Modbus library

库下载地址
https://libmodbus.org

使用指南
1)包含头文件
#include <modbus.h>
2) 编译
cc `pkg-config --cflags --libs libmodbus` files

示例:
#include <stdio.h>
#include <modbus.h>

int main(void) {
  modbus_t *mb;
  uint16_t tab_reg[32];

mb = modbus_new_tcp("127.0.0.1", 1502);
  modbus_connect(mb);

/* Read 5 registers from the address 0 */
  modbus_read_registers(mb, 0, 5, tab_reg);

modbus_close(mb);
  modbus_free(mb);
}

描述:
libmodbus是一个遵循Modbus协议的库,可以使一个设备用来发送接收数据。可以支持多种网络通信:串口通信RTU或者网口通信TCP/IPv6等。

相关概念
Contexts
The modbus_t context is an opaque structure containing all necessary information to establish a connection with other Modbus devices according to the selected variant.
常用的contexts有如下几种:
1)RTU Context:
A Modbus RTU message must be transmitted continuously without inter-character hesitations .The Modbus RTU framing calls a slave, a device/service
which handle Modbus requests, and a master, a client which send requests. The communication is always initiated by the master.
2)TCP(IPv4) Context:
The TCP backend implements a Modbus variant used for communications over TCP/IPv4 networks. It does not require a checksum calculation as lower                 layer takes care of the same.
3)TCP PI (IPv4 and IPv6) Context:
The TCP PI (Protocol Independent) backend implements a Modbus variant used for communications over TCP IPv4 and IPv6 networks. It does not require a checksum calculation as lower layer takes care of the same.Contrary to the TCP IPv4 only backend, the TCP PI backend offers hostname resolution but it consumes about
1Kb of additional memory.

常用API
1)释放context
modbus_free();
2)设置slave ID
modbus_set_slave();
3)启动调试模式
modbus_set_debut();
4)超时设置
modbus_get_byte_timeout();
modbus_set_byte_timeout();
modbus_get_response_timeout();
modbus_set_response_timeout();
modbus_get_indication_timeout();
modbus_set_indication_timeout();
5)错误恢复模式
modbus_set_error_recovery();
6)设置/获取内部socket
modbus_set_socket();
modbus_get_socket();
7)头部信息
modbus_get_header_length();
8)数据操作宏
MODBUS_GET_HIGH_BYTE(data)  // 获取数据的高字节
MODBUS_GET_LOW_BYTE(data)  // 获取数据的低字节
MODBUS_GET_INT64_FROM_INT16(tab_int16, index) // builds an int64 from the four first int16 starting at tab_int16[index]
MODBUS_GET_INT32_FROM_INT16(tab_int16, index) // builds an int32 from the two first int16 starting at tab_int16[index]
MODBUS_GET_INT16_FROM_INT8(tab_int8, index)   // builds an int16 from the two first int8 starting at tab_int8[index]
MODBUS_SET_INT16_TO_INT8(tab_int8, index, value)   // set an int16 value into the two first bytes starting at tab_int8[index]
MODBUS_SET_INT32_TO_INT16(tab_int16, index, value) // set an int32 value into the two first int16 starting at tab_int16[index]
MODBUS_SET_INT64_TO_INT16(tab_int16, index, value) // set an int64 value into the four first int16 starting at tab_int16[index]
9)处理bits和bytes
modbus_set_bits_from_byte();
modbus_set_bits_from_bytes();
modbus_get_byte_from_bits();
10)设置或获取浮点数
modbus_get_float_abcd();
modbus_set_float_abcd();
modbus_get_float_badc();
modbus_set_float_badc();
modbus_get_float_cdab();
modbus_set_float_cdab();
modbus_get_float_dcba();
modbus_set_float_dcba();

11) Connection连接
建立连接
mobus_connect();
关闭连接
modbu_close();
刷新
modbus_flush();

12) Client客户端
The Modbus protocol defines different data types and functions to read and write them from/to remote devices. The following functions are used by the clients to send Modbus requests:
读数据
modbus_read_bits();
modbus_read_input_bits();
modbus_read_registers();
modbus_read_input_registers();
modbus_report_slave_id();
写数据
modbus_write_bit();
modbus_write_registers();
modbus_write_bits();
modbus_write_registers();
读写数据
modbus_write_and_read_registers();
Raw请求
modbus_send_raw_request();
modbus_receive_confirmation();
响应异常
modbus_reply_exception();

13)Sever
The server is waiting for request from clients and must answer when it is concerned by the request.
accept/listen
modbus_tcp_listen();
modbus_tcp_accept();
modbus_tcp_pi_listen();
modbus_tcp_pi_accept();
接收
modbus_receive();
发送响应
modbus_reply();
modbus_reply_exception();

14)错误处理
modbus_strerror();

15)RTU context
创建一个RTU context
modbus_new_rtu();
设置串口模式
modbus_rtu_get_serial_mode();
modbus_rtu_set_serial_mode();
modbus_rtu_get_rts();
modbus_rtu_set_rts();
modbus_rtu_set_custom_rts();
modbus_rtu_get_rts_delay();
modbus_rtu_set_rts_delay();

16) TCP(IPv4) Context
创建
modbus_new_tcp();

17) TCP PI(IPv4 and IPv6)
创建
modbus_new_tcp_pi();

libmodbus学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

随机推荐

  1. GeoGebra 代数输入的提示和技巧

    GeoGebra是Mac平台上一款自由且跨平台的动态数学软件,提供各级教育使用,包含了几何.代数.表格.图形.统计和微积分,集中在一个容易使用的软件.   确认表达式 始终按  Enter  键确认您 ...

  2. WingIDE Pro 7如何检查Python集成?

    在开始使用某些代码之前,让我们确保Wing已成功找到您的Python安装.立即从“ 工具”菜单中打开Python Shell工具.如果一切顺利,它应该启动Python并向您显示Python命令提示符, ...

  3. Ubuntu 18.10 安装之后做的一点事

    sb_release -c //查看系统代号 #更新源/etc/apt/sources.list //打开更新目录 deb https://linux.xidian.edu.cn/mirrors/ub ...

  4. org.apache.ibatis.exceptions.PersistenceException:

    org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.lang.Ill ...

  5. oracle安装11g以及建账号等等

    Oracle 11g安装步骤详解 一.Oracle 下载 注意Oracle分成两个文件,下载完后,将两个文件解压到同一目录下即可. 路径名称中,最好不要出现中文,也不要出现空格等不规则字符. 官方下地 ...

  6. python + redis +ipset实现IP黑名单的动态添加及解封禁

    1.抽空用python做了一个 动态添加/删除IP黑名单 的程序(或者说实现方案),项目地址: https://gitee.com/lowmanisbusy/ip_blacklists, 2.这里的实 ...

  7. React中组件通信的几种方式

    https://segmentfault.com/a/1190000012361461 需要组件之进行通信的几种情况 父组件向子组件通信 子组件向父组件通信 跨级组件通信 没有嵌套关系组件之间的通信 ...

  8. 浏览器渲染详细过程:重绘、重排和 composite 只是冰山一角

    https://juejin.im/entry/590801780ce46300617c89b8 渲染 这张很经典的图许多人都看过,其中的概念大家应该都很熟悉,也就是这么几个步骤:js修改dom结构或 ...

  9. 异步模型:上下文与时间---async = request + reponse + handler + context + time;

    futureHandler = current(handler, context(t0)) : T0    ->    handler(context(t0),taskResult) : Tx ...

  10. windows使用 xxx.bat运行相关指令

    今日思语:成人的世界,请停止低层次的忙碌 一般是windows上需要执行一些支持的命令时,我们一般都会直接使用控制台去操作,对于需要频繁操作的指令来说,使用控制台略显有些不便,比如不小心关闭后控制台后 ...