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




  • 相关阅读:
    VBoxManage命令详解
    十条nmap常用的扫描命令
    2015-12-16 第八天笔记整理-第二部分
    2015-12-13 第八天笔记整理-第一部分
    2015-12-06 第七天课程笔记
    2015-12-04 学习笔记整理
    2015-11-22 第五天
    选择控制语句和循环结构
    数据类型和运算符
    常用DOS指令
  • 原文地址:https://www.cnblogs.com/rohens-hbg/p/12072956.html
Copyright © 2020-2023  润新知