imx6ull板子使用485+modbus+qt测试ADAN8020-C传感器变送模块

之前测试了qt交叉编译在imx6ull上运行,记录一下加上modbus库使用485读取ADAN8020-C变送模块数据。

一、交叉编译modbus库

到libmodbus官网https://libmodbus.org/download/下载安装包,内部自带configure文件,官网推荐v3.1.6稳定版。

github下载需要安装额外软件(官网下载跳过),然后解压将进入目录执行脚本autogen.sh,生成configure文件:

sudo apt install autoconf
sudo apt install automake
sudo apt install libtool
./autogen.sh

然后配置交叉编译modbus库


./configure --host=arm-linux-gnueabihf --prefix=/home/book/software/ArmModbus/libmodbus-master/install
make
make install

--host=arm-linux-gnueabihf-gcc  --host指定环境,我们要在imx6ull板子上运行,需要32位的交叉编译器

--prefix 指定安装路径,我的路径在/home/book/software/ArmModbus/libmodbus-master/install

配置编译安装完成会在目录下生成库,在后续qt里指定头文件和库。

二、板子配置

板子包含了485驱动,设备树配置(由于设备树有点问题,小白搞了一天没成功,后续查找资料修改设备树才实验成功(悲))

485使用uart3,设备树配置如下

设备名称为ttymxc2

三、Qt代码测试

在ADAN8020-C模块简单接了320欧电阻,简单做个朴素(丑)的界面测试下,功能是读取ADAN8020-C通道1的电阻,手动计算温度值。开始和停止读取按钮,每500毫秒读取一次。

Qt工程modbus库文件,指定头文件和库文件,找到自己的路径

INCLUDEPATH += /home/book/software/ArmModbus/libmodbus-master/install/include/modbus
LIBS += -L/home/book/software/ArmModbus/libmodbus-master/install/lib -lmodbus

modbus库调用部分,就正常调用读取,比较简单,读取不同的地址就可以读取不同的数据了

 // 打开串口并设置参数
    ctx = modbus_new_rtu("/dev/ttymxc2", 9600, 'N', 8, 1);
    if (ctx == NULL) {
        fprintf(stderr, "Unable to create the context\n");
        return -1;
    }
 // 打开调试模式
    if(modbus_set_debug(ctx,true) == -1){
        qDebug() << "debug set fail!";
        return -1;
    }
 // 设置从机地址
    if(modbus_set_slave(ctx,1) == -1){
        qDebug() << "set slave fail!";
        return -1;
    }
 // 连接设备
    if (modbus_connect(ctx) == -1) {
        fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));
        return -1;
    }
 // 读取保持寄存器
    rc = modbus_read_registers(ctx, 1660, 2, tab_reg);
    if (rc == -1) {
        fprintf(stderr, "Modbus read failed: %s\n", modbus_strerror(errno));
    }

完成后构建工程,拷贝可执行文件到nfs目录下,板子挂载执行

直接运行会报错,需要把交叉编译的modbus库文件拷贝到板子的环境中,复制到/lib目录下。

然后执行程序

参考文章:

libmodbus库linux 嵌入式设备中的使用 - HuDaXia - 博客园 (cnblogs.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值