一、源码下载
1、libmodbus官网
http://libmodbus.org/download/
2、选择长期稳定版本libmodbus-3.0.6.tar.gz
下载链接:http://libmodbus.org/releases/libmodbus-3.0.6.tar.gz
3、MD5值
c80f88b6ca19cabc4ceffc195ca07771 libmodbus-3.0.6.tar.gz
二、交叉编译
1、拷贝到相应目录,解压
tar -zxvf libmodbus-3.0.6.tar.gz
2、创建安装目录
mkdir install
3、进入解压的目录
cd libmodbus-3.0.6
4、配置编译选项(注:--prefix选项是安装目录,根据自己环境确定)
./configure --host=arm-fsl-linux-gnueabi --enable-static --prefix=[安装路径]/install/
5、编译
make
6、安装
make install
7、在install生成三个目录:include lib share
三、测试与使用
1、进入install/lib目录,执行file libmodbus*,出现如下打印信息,信息中有“ARM”说明libmodbus库移植成功
-----------------------------------------------------------------
libmodbus.a: current ar archive
libmodbus.la: libtool library file,
libmodbus.so: symbolic link to `libmodbus.so.5.0.5'
libmodbus.so.5: symbolic link to `libmodbus.so.5.0.5'
libmodbus.so.5.0.5: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, not stripped
-----------------------------------------------------------------
2、测试程序
2.1 modbus_rtu测试
2.1.1 参数配置(根据自己情况配置)
从地址01 寄存器地址01 读取寄存器数量20 串口ttymxc1
波特率19200 8位 偶校验 1停止位
2.1.2 测试程序:modbus_rtu_test.c
--------------------------------modbus_rtu_test.c begin----------------------------------
/**********************************************
*简介:Linux下modbusRTU测试程序
*作者:郭纬
*日期:2017-5-16
*版本:V1.0
**********************************************/
#include
#include
#include"modbus.h"
#include
int main(void)
{
modbus_t *mb;
uint16_t tab_reg[64]={0};
//1-打开端口
mb = modbus_new_rtu("/dev/ttymxc1",19200,'E',8,1);
//2-设置从地址
modbus_set_slave(mb,1);
//3-建立连接
modbus_connect(mb);
//4-设置应答延时
struct timeval t;
t.tv_sec=0;
t.tv_usec=1000000;//1000ms
modbus_set_response_timeout(mb,&t);
//5-循环读
int num = 0;
while(1)
{
memset(tab_reg,0,64*2);
//6-读寄存器设置:寄存器地址、数量、数据缓冲
int regs=modbus_read_registers(mb, 0, 20, tab_reg);
printf("-------------------------------------------\n");
printf("[%4d][read num = %d]",num,regs);
num++;
int i;
for(i=0; i<20; i++)
{
printf("<%#x>",tab_reg[i]);
}
printf("\n");
printf("-------------------------------------------\n");
sleep(1);
}
//7-关闭modbus端口
modbus_close(mb);
//8-释放modbus资源
modbus_free(mb);
return 0;
}
--------------------------------------modbus_rtu_test.c end---------------------------------------
2.1.3 交叉编译
arm-fsl-linux-gnueabi-gcc -o modbus_rtu_test modbus_rtu_test.c -L../install/lib -lmodbus -I ../install/include/modbus
2.1.4 运行
将libmodbus库拷贝到开发板上,如/usr/lib目录下;
将测试程序拷贝到开发板上,连接好硬件,运行程序