LIBMODBUS+QT SLAVE实现

本文介绍了如何使用libmodbus库和QT编写Modbus TCP SLAVE程序,包括引入库、初始化、建立连接、解决TCP slave断开连接问题。详细讨论了在主站断开连接后,如何通过线程管理和代码调整实现代替重启程序来重新连接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:本文章是利用libmodbus + QT 编写服务端过程遇到的一些问题,仅供参考,酌情采纳 本次更新主要是上传了自己编辑的一个slave程序,感兴趣的可以下载测试一下。


前言

libmodbus API为编写modbus通讯提供了非常便捷快速的一个接口,利用libmodbus可以迅速建立起主站即客户端或从站服务端的代码框架,实现与modbus之间的通讯:


一、libmodbus是什么?

libmodbus是什么网上很多都有介绍,简而言之,其实就是一个API。以下提供其官方网站与说明文档地址以及使用到的头文件:
libmodbus官网:https://libmodbus.org/
libmodbus说明文档:https://libmodbus.org/reference/
libmodbus使用到的头文件以及lib等:libmodbus资源包

二、使用步骤

1.引入库

A.引入头文件,以及在pro文件中添加对应的lib
在这里插入图片描述
在这里插入图片描述
注意,lib需要放在exe运行目录下

2.master客户端建立步骤:

使用libmodbus建立master是非常快速的,所以这里不会过多的介绍
2.1初始化modbus上下文

modbus_t *m_ctx;
m_ctx = modbus_new_tcp("127.0.0.1",502);
//m_ctx = modbus_new_rtu("COM1",9600,'N',8,1);//rtu方式
//可以增加判断是否初始化成功

2.2 建立连接

//设置从站地址
modbus_set_slave(m_ctx,1);//具体看从站的地址是多少 本测试用例是1
int rx = modbus_connect(m_ctx);
if(rx == -1)
{
   
    qDebug() << "连接到MODBUS_TCP失败:" << modbus_strerror(errno);//libmodbus打印错误的方法
    return -1;
}else
{
   
    m_bisOpen = true;
    qDebug() << "连接MODBUS_TCP成功" ;
}

2.3使用具体的API接口进行具体的读写操作

//读取操作 address:寄存器地址 value:写入的值/返回读到的值 readType:读取的类型方式 readAmount:读取的寄存器数量
bool Modbus_TCP::readSingleHoldingRegister(QString address, QString &value,int readType,int readAmount)
{
   
    quint16 val;
    quint16 addr;
    quint8 Nval;//当读取类型是1或2时 传入的类型是uint8_t
    int rc;

    if(readType == 1 || readType == 2)
    {
   
        Nval = stringToUInt8(value);//QString转uint8_t 
        addr = stringToUInt8(address);

    }else if(readType == 3 || readType == 4)
    {
   
        val = stringToUInt16(value);
        addr = stringToUInt16(address);

    }else
    {
   
        qDebug() << "输入的读取类型错误,请输入1-4之间的整数类型" ;
        return false;
    }


    if(addr < 0)
    {
   
        qDebug() << "读取寄存器时发生错误,错误原因:非法寄存器地址" ;
        return false;
    }

    switch(readType)
    {
   
    case 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值