libmodbus库linux 嵌入式设备中的使用

libmodbus库的交叉编译:
1】到libmodbus官网https://libmodbus.org/download/下载安装包,内部自带configure文件,官网推荐v3.1.6稳定版。
另外注意,如果是从github上克隆源码的,则包里没有configure文件,需要额外安装部分软件,才能生成configure脚本。
github下载需要安装额外软件(官网下载跳过):
sudo apt install autoconf
sudo apt install automake
sudo apt install libtool
./autogen.sh
即可生成configure文件。
2】解压安装包:tar zxvf libmodbus-3.1.6.tar.gz
3】进入安装包:cd libmodbus-3.1.6
4】创建文件夹,存放编译输出:mkdir install
5】source交叉编译环境变量:source ~/Downloads/neoway-arm-oe-linux/neoway-env-init.sh,根据实际目录调整
6】配置交叉编译器:./configure --host=arm-oe-linux-gnueabi --enable-static --prefix=/home/dan/gitlab-ws/libmodbus-3.1.6/install/,注意prefix目录改为第4】步创建的目录(pwd命令可查看路径,复制即可)
7】make
8】make install

这样就会在刚刚创建的install文件夹下,看到include,lib,以备主程序调用。
将lib下的3个动态库libmodbus.so.x.x,项目所在环境的/usr/lib目录。

使用:

在项目makefile文件中  -L./lib -lmodbus 在调用函数的c文件中引入.h文件

modbus的初始化对象操作和设置参数

ctx = modbus_new_rtu("/dev/ttyHSL0", 9600, 'N', 8, 1);

    //set slave modbus addr defalut is 3

    modbus_set_slave(ctx, 3);

    //set modbus timeout 3s 

    modbus_set_response_timeout(ctx, 3, 0); //sec,usec,超时设置 设置为3s

    //modbus_set_byte_timeout(ctx, 0, 800*1000);//800ms

    if (modbus_connect(ctx) == -1)

    {
        fprintf(stderr, "Connection failed: %s\n", modbus_strerror(errno));

        modbus_free(ctx);

        return -1;
    }

modbus读取输入寄存器实例

uint16_t inv_data_buf[125] = {0}; //每帧最多125个寄存器,官方规定
memset(inv_data_buf, 0, sizeof(inv_data_buf));
int len =modbus_read_input_registers(ctx, 1000, 56, inv_data_buf); //1000 56
if (len < 0)
  {
     printf("[error] read 3x registers: (%d)\n", len);
     return -1;
  }

猜你喜欢

转载自www.cnblogs.com/bliss-/p/12376424.html