zoukankan      html  css  js  c++  java
  • libmodbus学习笔记

    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();




  • 相关阅读:
    Pyhton入门 笔记 第二天 变量与运算符
    Pyhton入门 笔记 第一天 数据类型
    HTML 中的特殊字符
    Extjs--12种布局方式
    .NET easyUI tree树状结构
    SqlServer中嵌套事务使用--事务计数指示 BEGIN 和 COMMIT 语句的数目不匹配 --根本问题
    事务回滚 DEMO
    SQL 事物回滚
    一步一步教你玩转.NET Framework的配置文件app.config
    C# tostring() 方法
  • 原文地址:https://www.cnblogs.com/rohens-hbg/p/12072956.html
Copyright © 2011-2022 走看看