Modbus应用笔记
阅读量: 101
阅读人次: 102
Modbus 是一种请求/应答协议,其网络中只有一个 Modbus 客户端,但可能存在多个 Modbus 服务器。服务器只能控制自身的内部状态,而客户端可以读取和写入服务器中的数据。
每个Modbus服务器(从机)内部维护了四个独立的数据存储区域(即“Tables”),用于存储不同类型的数据。
名称 | 数据类型 | 客户端(主机)权限 | 典型应用 |
---|---|---|---|
离散输入/开关量输入(Discrete Inputs) | 二进制 0-1 | 读 | 传感器状态、开关信号 |
线圈/输出线圈(Coils) | 二进制 0-1 | 读/写 | 控制继电器、指示灯 |
输入寄存器(Input Registers) | 16位整数 0-65535(0xFFFF) | 读 | 模拟量输入(温度、压力) |
保持寄存器(Holding Registers) | 16位整数 0-65535(0xFFFF) | 读/写 | 设备参数配置、数据存储 |
在 MODBUS Application Protocol 1 1 b 这份文档有对其标准规范进行阐述。
ESP32
esp-modbus 实现了 Modbus 的协议,不过目前测试发现 mbc_master_send_request()
的实现对于 Function code 0x17 支持不太完善。
mb_commands_t
MB_FUNC_READWRITE_MULTIPLE_REGISTERS
libmodbus
include(FetchContent)
set(LIBMODBUS_GIT_TAG "v3.1.11")
FetchContent_Declare(
libmodbus
GIT_REPOSITORY "https://github.com/stephane/libmodbus.git"
GIT_TAG ${LIBMODBUS_GIT_TAG}
)
string(REGEX REPLACE "^v" "" LIBMODBUS_VERSION_STRING ${LIBMODBUS_GIT_TAG})
string(REPLACE "." ";" VERSION_LIST ${LIBMODBUS_VERSION_STRING})
list(GET VERSION_LIST 0 LIBMODBUS_VERSION_MAJOR)
list(GET VERSION_LIST 1 LIBMODBUS_VERSION_MINOR)
list(GET VERSION_LIST 2 LIBMODBUS_VERSION_MICRO)
FetchContent_MakeAvailable(libmodbus)
add_library(libmodbus STATIC
${libmodbus_SOURCE_DIR}/src/modbus.c
${libmodbus_SOURCE_DIR}/src/modbus-data.c
${libmodbus_SOURCE_DIR}/src/modbus-rtu.c
)
configure_file(${libmodbus_SOURCE_DIR}/src/win32/config.h.win32 ${libmodbus_SOURCE_DIR}/src/config.h)
configure_file(${libmodbus_SOURCE_DIR}/src/modbus-version.h.in ${libmodbus_SOURCE_DIR}/src/modbus-version.h)
target_include_directories(libmodbus PUBLIC
${libmodbus_SOURCE_DIR}/src
)
target_compile_definitions(libmodbus
PUBLIC DLLBUILD
)
target_link_libraries(libmodbus
PRIVATE ws2_32
)