加载中…
个人资料
胡宁宁
胡宁宁
  • 博客等级:
  • 博客积分:0
  • 博客访问:705
  • 关注人气:3
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

QT PLC 通过ModBus_RTU 串口通信

(2018-03-01 08:39:45)
编译器:QT   PLC测试工具:ModScan32.exe   依赖文件:libmodbus

编写流程:
1.打开端口;
2.设置从地址(device id)
3.建立连接
4.设置应答延时
5.读/写 数据
6.关闭modbus端口
7.释放modbus资源

具体代码如下:
.pro文件需要依赖:
LIBS += -Ldll -lws2_32

头文件包含:
#include "modbus.h"
头文件定义:
modbus_t *mb;

源文件的读取或写函数:

uint16_t tab_reg[64]={0};



    //1-打开端口

    mb = modbus_new_rtu("com4",9600,'N',8,1);



    //2-设置从地址 device id

    modbus_set_slave(mb,1);



    //3-建立连接

    modbus_connect(mb);



    //4-设置应答延时

    timeval t;



    //秒

    t.tv_sec = 0;

    //微秒

    t.tv_usec = 50000;//1000ms

    modbus_set_response_timeout(mb,&t);



    //5-循环读

    int num = 0;



    memset(tab_reg,0,64*2);



    //写入寄存器

    uint16_t iData[10] = {0xAA,0xBB,0xCC,0xDD,0xEE,0xFF,6,7,8,9};

    int iRet = modbus_write_registers(mb,2,10,iData);

    qDebug() << "写入数据的值为" << iRet;



    //6-读寄存器设置:寄存器地址、数量、数据缓冲

    int regs=modbus_read_registers(mb, 2, 10, tab_reg);



    num++;



    int i;

    for(i=0; i<<span style=" color:#000080;">10; i++)

    {

        qDebug() << (tab_reg[i]) << '\t';

    }


关闭函数:

//断开连接

    //7-关闭modbus端口

    modbus_close(mb);



    //8-释放modbus资源

    modbus_free(mb);

ModScan32.exe 查看是否通过软件将寄存器的值进行修改
http://s8/mw690/001XGUSKzy7ixTNHRlR37&690PLC 通过ModBus_RTU 串口通信"  TITLE="QT PLC 通过ModBus_RTU 串口通信" />

http://s2/mw690/001XGUSKzy7ixVayC5j91&690PLC 通过ModBus_RTU 串口通信"  TITLE="QT PLC 通过ModBus_RTU 串口通信" />


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有