/**************************************************/
author: fulinux
e-mail: fulinux@sina.com
csdn blog: http://blog.csdn.net/fulinus
/**************************************************/
libmodbus的移植的过程中,要注意几点:
第一,在交叉编译器是最好加上--prefix参数,叫相关的库直接集中起来,方便拷贝到开发板相应的目录中去;
嵌入式开发板:./configure --build=i686 --host=arm-none-linux-gnueabi --prefix=/root/libmodbus-3.1.1/install/ && make install
PC上运行 :./configure && make install
第二,如果在嵌入式开发板上运行类似unit-test-xxx测试程序时,首先要测试tcp的就要修改两个文件中的IP地址,默认是回环测试的,其次要测试rtu的就要修改两个文件中的串口设备文件名,嵌入式开发板上一般是ttySx,具体是哪个就看自己的板子了,可以一个个测试,PC上一般是ttyUSB0(如果是虚拟机的话,确保串口是在虚拟机中,而不是主机中);
unit-test-server.c
if (use_backend == TCP) { ctx = modbus_new_tcp("192.168.169.209", 1502); query = malloc(MODBUS_TCP_MAX_ADU_LENGTH); } else if (use_backend == TCP_PI) { ctx = modbus_new_tcp_pi("::0", "1502"); query = malloc(MODBUS_TCP_MAX_ADU_LENGTH); } else { ctx = modbus_new_rtu("/dev/ttyS1", 115200, ‘N‘, 8, 1); modbus_set_slave(ctx, SERVER_ID); query = malloc(MODBUS_RTU_MAX_ADU_LENGTH); }
if (use_backend == TCP) { ctx = modbus_new_tcp("192.168.169.209", 1502); } else if (use_backend == TCP_PI) { ctx = modbus_new_tcp_pi("::1", "1502"); } else { ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, ‘N‘, 8, 1); }
第三,在test目录下的类似unit-test-server这个不是可执行文件,而是一个脚本,他会调用test目录下的.lib/下的unit-test-server可执行文件。在PC中需要执行对应的脚本文件,而在嵌入式平台上却是执行可执行文件;下面是rtu的测试结果:
嵌入式平台:
PC上面:
原文:http://blog.csdn.net/fulinus/article/details/37659661