nanoMODBUS 是一个实现了Modbus协议的小型C语言开发库,非常适合嵌入式设备或资源紧张的MCU设备。

github.com/debevv/na...

特点:

  • 大约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
上一篇:
下一篇: