QT ModbusTcp主站的使用 QModbusTcpClient

1.ModbusTcp主站的创建和连接
 1.创建
  QModbusTcpClient* modBusTcpClient = new QModbusTcpClient;
 2.设置参数
  1.设置从站地址以及端口号
   1.设置端口号 (ModbusTcp端口号默认为502)
    modBusTcpClient->setConnectionParameter(QModbusDevice::NetworkPortParameter,502);
   2.设置连接的从站地址(若是主从栈在同一电脑内部测试,则设置为本机ip 127.0.0.1,在局域网内则设置为从站的ip即可)
     modBusTcpClient->setConnectParameter(QModbusDevice::NetworkAddressParameter,“192.168.1.74”);
  2.设置连接超时时间以及连接尝试次数
   modBusTcpClient->setTimeout(2000);
   modBusTcpClient->setNumberOfRetries(3);
  3.连接操作 (下面函数 返回值为1时连接进程成功初始化,为0初始化失败)
modBusTcpClient->connectDevice();//要注意连接时在另一进程,函数执行完比不代表完成连接
 3.连接结果的查看
modbusTcpClient->status();//函数返回值为连接状态
signal QModbusDevice::stateChanged(QModbusDevice::State state)//连接状态变更信号
2.ModbusTcp值得获取
 以读取2字节长度无符号为例
 1.设置要读的数据的Address,和长度
  QModbusDataUnit requestData(QModbusDataUnit::HoldingRegisters,6,10);
  参数1指的是读寄存器(2字节为单位)
  参数2读的起始地址为6
  参数3读的长度为10
 2.指定ID向从站发出请求
  QModbusReply* reply = modBusTcpClient->sendReadRequest(requestData,1);
  参数2为从站号
  则上述的两行代码:向ID号为1的从站发送请求,读取Address为6长度为10的数据,也就是读取ID1的slave的6-15的数据共20个字节
 3.获取结果
 请求后,会在另一个线程处理获取数据,处理完成后可以在reply中获取结果
  1.等待获取完成,使用信号 replay->finished()
  2.连接上述信号,处理函数中QModbusDataUnit* data = reply->result();
  data->value();//返回值是一个长度为10的quint16的QVector,保存了返回的数据
  注意由于请求后获取参数在另一线程中执行,所以一定要使用reply->finished()作为信号,在处理函数中对reply->result()处理,否则没法获取到数据

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值