基于libmodbus实现udp通信

一、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
{
	//写入成功
}

四、测试
在这里插入图片描述
在这里插入图片描述
可以正常通信。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值