nanomodbus开发库
nanoMODBUS 是一个实现了Modbus协议的小型C语言开发库,非常适合嵌入式设备或资源紧张的MCU设备。
特点:
大约2000行左右
没有动态内存请求
支持RTU和TCP方式
支持Client和Server方式
仅依赖C99和标准库
交叉编译
以下是以GW102网关为测试设备
下面是下载nanoModbus代码,然后交叉编译为GW102平台的库。
git clone https://github.com/debevv/nanoMODBUS.git
cd nanoMODBUS/
git tag -l
git checkout -b v1.21.0 v1.21.0
source ~/i2SOM-gw102/environment-setup-cortexa7hf-neon-i2som-linux-gnueabi
mkdir build
cd build/
cmake ..
make
Scanning dependencies of target nanomodbus
[ 50%] Building C object CMakeFiles/nanomodbus.dir/nanomodbus.c.o
[100%] Linking C static library libnanomodbus.a
[100%] Built target nanomodbus
编译完成后,会生成libnanomodbus.a
文件,就可以放在自己的项目中,以静态方式来调用。
开发的API接口文档如下
debevv.github.io/nan...
TCP Demo
#include "nanomodbus.h"
// 自定义平台读写函数
int32_t my_transport_read(uint8_t* buf, uint16_t count, int32_t timeout_ms, void* conn) {
return tcp_read((SocketHandle)conn, buf, count, timeout_ms);
}
int32_t my_transport_write(const uint8_t* buf, uint16_t count, int32_t timeout_ms, void* conn) {
return tcp_write((SocketHandle)conn, buf, count, timeout_ms);
}
int main() {
nmbs_platform_conf platform_conf;
nmbs_platform_conf_create(&platform_conf);
platform_conf.transport = NMBS_TRANSPORT_TCP;
platform_conf.read = my_transport_read;
platform_conf.write = my_transport_write;
platform_conf.arg = tcp_connect("192.168.1.100", 502);
// 连接Modbus服务端
nmbs_t nmbs;
nmbs_client_create(&nmbs, &platform_conf);
// 3. 批量写入2个寄存器(地址26)
uint16_t write_data[2] = {123, 124};
nmbs_write_multiple_registers(&nmbs, 26, 2, write_data);
uint16_t read_data[2];
nmbs_read_holding_registers(&nmbs, 26, 2, read_data);
tcp_close(platform_conf.arg);
return0;
}
作者:SteveChen 创建时间:2025-07-07 23:33
最后编辑:SteveChen 更新时间:2025-07-08 09:01
最后编辑:SteveChen 更新时间:2025-07-08 09:01