libmodbus TCP断开重连

本文介绍了在项目中使用libmodbus进行TCP通信的情况,由于Qt自带的modbus不支持1对多通信,选择了libmodbus开源库。提供了libmodbus的协议介绍、源码下载、使用手册和调试工具链接。文章详细讲解了libmodbus在嵌入式arm平台上的安装步骤,并给出了一个简单的TCP通信demo。重点讨论了如何实现断网后的重连机制,该机制已被验证为有效。
摘要由CSDN通过智能技术生成

最近在项目中需要用到modbus TCP通信协议,Qt自带的modbus只能一对一通信,不能做到1对多,所以选择开源库libmodbus

libmodbus协议介绍中文完整带书签版:https://download.csdn.net/download/u011251940/11341158

下载libmodbus源码包:https://www.libmodbus.org/releases/libmodbus-3.0.6.tar.gz

libmodbus使用手册:https://libmodbus.org/docs/v3.0.6/

libmodbus调试工具:https://download.csdn.net/download/u011251940/11341326

安装嵌入式arm版本
tar -zxvf libmodbus-3.0.6.tar.gz
cd libmodbus-3.0.6
./configure --build=i686 --host=arm-cortexa9-linux-gnueabihf --prefix=/opt/libmodbus/install
make -j8;make install

一、简单写一个libmodbus TCP通信demo测试

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <modbus.h>

#include "modbus/modbus.h"
#include "modbus/modbus-tcp.h"
#include "modbus/modbus-version.h"
//线圈地址数据的定义
const uint16_t UT_BITS_ADDRESS = 0x13;
const uint16_t UT_BITS_NB = 0x25;
const uint8_t UT_BITS_TAB[] = { 0xCD, 0x6B, 0xB2, 0x0E, 0x1B };
//离散量输入寄存器地址数据的定义
const uint16_t UT_INPUT_BITS_ADDRESS = 0xC4;
const uint16_t UT_INPUT_BITS_NB = 0x16;
const uint8_t UT_INPUT_BITS_TAB[] = { 0xAC, 0xDB, 0x35 };
//读保持寄存器地址数据的定义
const uint16_t UT_REGISTERS_ADDRESS = 0x6B;
/* Raise a manual exception when this adress is used for the first byte */
const uint16_t UT_REGISTERS_ADDRESS_SPECIAL = 0x6C;
const uint16_t UT_REGISTERS_NB = 0x3;
const uint16_t UT_REGISTERS_TAB[] = { 0x022B, 0x0001, 0x0064 };
/* If the following value is used, a bad response is sent.
   It's better to test with a lower value than
   UT_REGISTERS_NB_POINTS to try to raise a segfault. */
const uint16_t UT_REGISTERS_NB_SPECIAL = 0x2;
//输入寄存器地址数据定义
const uint16_t UT_INP
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值