首页 > 代码库 > libmodbus的移植

libmodbus的移植

/**************************************************/

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);
    }

unit-test-client.c

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上面: