一、git下载地址
libmodbus udp 下载
二、更改modbus-udp.c文件
如果是在windows环境下编译的话会有如下错误。
更改如下:
#ifdef OS_WIN32
ssize_t rc = ioctlsocket(ctx->s, FIONREAD, &b);
#else
ssize_t rc = ioctl(ctx->s,FIONREAD, &b);
#endif
三、更改udp接收函数
在处理了一段数据后,需要将当前buffer数据往前移len个位置,否则后面处理的数据还是会包含之前的数据。
memmove(ctx_udp->buffer,ctx_udp->buffer+len,(size_t)ctx_udp->_u);
四、应用示例
//.h
modbus_t *modbus;
//.cpp
modbus = modbus_new_udp(modbusIP,port);
if(-1 == modbus_connect(modbus))
{
//连接失败
modbus_free(modbus);
modbus = nullptr;
}
else
{
//设置等待回复时间,超时报错
modbus_set_response_timeout(modbus,0,500000);
//设置从机地址
modbus_set_slave(modbus, address);
}
//写位寄存器
if(-1 == modbus_write_bit(modbus, 0, 1))
{
//写入失败
}
else
{
//写入成功
}
四、测试
可以正常通信。