米尔-全志T113-i开发板与modbus设备的连接和操作

描述

继前面开发环境设置和libmodbus库的移植后,本文主要介绍通过米尔-全志T113-i开发板实现与modbus设备的连接和操作。

一、设备简介

刚好手头有个modbus温度传感设备。
 

MODBUS

各种参数也挺好,就直接拿来用了。
 

MODBUS

二、程序设计

目标功能就是读取温度传感设备的温度,libmodbus库提供了相关API,跟网络编程的socket一样好用。
 

MODBUS

涉及的主要API包括:modbus_new_rtu、modbus_set_slave、modbus_read_registers和modbus_close 以及 modbus_free等接口。顾名思义,各种API的功能都很清晰。

具体程序功能包括周期性读取连接到米尔-全志T113-i开发板上的温度传感器,源码如下:

 

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

int main(int argc, char *argv[])
{
    uint16_t tab_reg[2];
    modbus_t *ctx;
    int i;
    int rc;
    uint32_t *ireal;

    ctx = modbus_new_rtu("/dev/ttyAS4", 115200, 'N', 8, 1);
    if (ctx == NULL) {
        fprintf(stderr, "Unable to allocate libmodbus contextn");
        return -1;
    }
	
    modbus_set_debug(ctx, TRUE);
    modbus_set_slave(ctx, 1);
    if (modbus_connect(ctx) == -1) {
        fprintf(stderr, "Connection failed: %sn", modbus_strerror(errno));
        modbus_free(ctx);
        return -1;
    }

   while(1)
   {
        printf("--------------------n");
        rc = modbus_read_registers(ctx, 0x0000, 1, tab_reg);
        if(rc == -1)
        {   fprintf(stderr,"%sn",modbus_strerror(errno));
            return -1;
        }
      for(i=0; i< 2; i++)
      {
         printf("reg[%d] = %d(0x%x)n",i,tab_reg[i],tab_reg[i]);
      }
	  ireal = (uint32_t *)tab_reg;
	  printf("Resd data %f n", (*ireal)/10.0);
	  
      usleep(1000000);
   }

     modbus_close(ctx);
     modbus_free(ctx);
     return 0;
}

 

其它Modbus的协议在此不再接受,网络上到处都是。

三、功能执行

首先根据线序连接好温度传感器和米尔-全志T113-i开发板。
 

MODBUS

编译好源码。

 

root@EliteDesk800:~/libmodbus-3.1.10/tests$ make
make  all-am
make[1]: Entering directory '/home/libmodbus-3.1.10/tests'
  CC       mod-client.o
  CCLD     mod-client
make[1]: Leaving directory '/home/libmodbus-3.1.10/tests'
root@EliteDesk800:~

 

再将编译后的可执行程序SCP至米尔-全志T113-i开发板上,chmod + x后再执行。

MODBUS

其中的debug信息是modbus_set_debug函数设置的结果打印log。
根据执行结果,读出的温度OK。

四、结论

1、米尔-全志T113-i开发板提供了丰富的接口和稳定的操作系统环境,很适合工业控制软件程序开发;
2、依托libmodbus这个modbus协议库,对于linux应用下的modbus通信开发,简直就是一款神器,能够极大的方便工业控制程序的开发。

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分