libmodbus-xenomai:基于Xenomai的Modbus协议通信库项目

modified libmodbus for xenomai.

分支1Tags0

libmodbus-xenomai

介绍

libmodbus-xenomai是一个免费的软件库,用于通过遵循Modbus协议的设备发送和接收数据。

软件架构

软件架构说明: 基于kunpeng920,使用unit-test-server和unit-test-client测试通过;

安装教程

  1. Xenomai安装

    ./configure --with-pic --with-core=cobalt --enable-smp --disable-tls --enable-dlopen-libs --disable-clock-monotonic-raw
    
    make -j`nproc`
    
    sudo make install
    
    echo '
    ### Xenomai
    export XENOMAI_ROOT_DIR=/usr/xenomai
    export XENOMAI_PATH=/usr/xenomai
    export PATH=$PATH:$XENOMAI_PATH/bin:$XENOMAI_PATH/sbin
    export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$XENOMAI_PATH/lib/pkgconfig
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$XENOMAI_PATH/lib
    export OROCOS_TARGET=xenomai
    ' >> ~/.xenomai_rc
    echo 'source ~/.xenomai_rc' >> ~/.bashrc
    source ~/.bashrc
    
  2. Xenomai配置

    在Xenomai安装目录添加lo文件,默认目录:/usr/xenomai/lib/xenomai/bootstrap.lo,文件内容如下:

    # libbootstrap_pic_la-bootstrap.lo - a libtool object file
    # Generated by libtool (GNU libtool) 2.4.6
    #
    # Please DO NOT delete this file!
    # It is necessary for linking the library.
    
    # Name of the PIC object.
    pic_object='bootstrap-pic.o'
    
    # Name of the non-PIC object
    non_pic_object='bootstrap.o'
    
  3. libmodbus编译

    apt install autoconf automake libtool
    ./autogen.sh
    ./configure --with-gnu-ld --enable-static=yes ac_cv_have_decl_TIOCM_RTS=no
    make && make install
    
  4. 测试与结果

    使用串口连接kunpeng920机器和测试机器(使用虚拟机),然后在测试机及被测机上交替运行unit-test-server和unit-test-client。unit-test-server和unit-test-client是完整的单元测试套件。

    测试机 kunpeng920
    硬件架构 x86 WMware 虚拟机 kunpeng920 arm物理主机
    系统 OpenEuler Centos8
    内核版本 4.19.90 4.19.206
    测试软件 libmodbus 源码单元测试工具(unit-test-server、unit-test-client) libmodbus 源码单元测试工具(unit-test-server、unit-test-client)
    client端测试 运行unit-test-server 运行unit-test-client,结果全部PASS
    server端测试 运行unit-test-client,结果全部PASS 运行unit-test-server
    client端测试

    在测试机运行unit-test-server,kunpeng920运行unit-test-client,测试结果如下:

    unit-test-server

    root@localhost:~/libmodbus-3.1.6/tests/.libs# ./unit-test-server rtu
    Opening /dev/ttyUSB0 at 115200 bauds (N, 8, 1)
    Waiting for an indication...
    <11><05><01><30><FF><00><8F><59>
    [11][05][01][30][FF][00][8F][59]
    Waiting for an indication...
    <11><01><01><30><00><01><FE><A9>
    [11][01][01][01][94][88]
    Waiting for an indication...
    <11><0F><01><30><00><25><05><CD><6B><B2><0E><1B><CC><C1>
    [11][0F][01][30][00][25][97][73]
    Waiting for an indication...
    <11><01><01><30><00><25><FE><B2>
    [11][01][05][CD][6B][B2][0E][1B][45][E6]
    
    ...
    
    [11][8F][03][05][F4]
    Waiting for an indication...
    <11><42><00><00>
    ERROR CRC received 0x0 != CRC calculated 0x8DD1
    Unknown Modbus function code: 0x42
    Bytes flushed (0)
    [11][C2][01][B1][65]
    Waiting for an indication...
    

    unit-test-client

    root@localhost:~/libmodbus-3.1.6/tests/.libs# ./unit-test-client rtu
    Opening /dev/rtdm/rtser0 at 115200 bauds (N, 8, 1)
    ** UNIT TESTING **
    1/1 No response timeout modification on connect: OK
    
    TEST WRITE/READ:
    [11][05][01][30][FF][00][8F][59]
    Waiting for a confirmation...
    <11><05><01><30><FF><00><8F><59>
    ###### check_confirmation .... finish
    1/2 modbus_write_bit: OK
    [11][01][01][30][00][01][FE][A9]
    Waiting for a confirmation...
    <11><01><01><01><94><88>
    ###### check_confirmation .... finish
    2/2 modbus_read_bits: OK
    
    ...
    
    OK
    [11][42][00][00][00][00][7B][55]
    Waiting for a confirmation...
    <11><C2><01><B1><65>
    Return an exception on unknown function code: OK
    
    TEST INVALID INITIALIZATION:
    The device string is empty
    OK
    The baud rate value must not be zero
    OK
    The service string is empty
    OK
    
    ALL TESTS PASS WITH SUCCESS.
    
server端测试

在测试机运行unit-test-client,kunpeng920运行unit-test-server,测试结果如下:

unit-test-server

root@localhost:~/libmodbus-3.1.6/tests/.libs# ./unit-test-server rtu
Opening /dev/rtdm/rtser0 at 115200 bauds (N, 8, 1)
loop test start ...
Waiting for an indication...
<11><05><01><30><FF><00><8F><59>
[11][05][01][30][FF][00][8F][59]
Waiting for an indication...
<11><01><01><30><00><01><FE><A9>
[11][01][01][01][94][88]
Waiting for an indication...
<11><0F><01><30><00><25><05><CD><6B><B2><0E><1B><CC><C1>
[11][0F][01][30][00][25][97][73]
Waiting for an indication...
<11><01><01><30><00><25><FE><B2>
[11][01][05][CD][6B][B2][0E][1B][45][E6]
Waiting for an indication...
<11><02><01><C4><00><16><BB><55>
[11][02][03][AC][DB][35][20][18]
Waiting for an indication...
<11><06><01><60><12><34><87><CF>
[11][06][01][60][12][34][87][CF]

...

Bytes flushed (0)
[11][8F][03][05][F4]
Waiting for an indication...
<11><42><00><00>
ERROR CRC received 0x0 != CRC calculated 0x8DD1
Unknown Modbus function code: 0x42
Bytes flushed (0)
[11][C2][01][B1][65]
Waiting for an indication...

单元测试客户端

root@localhost:~/libmodbus-3.1.6/tests/.libs# ./unit-test-client rtu
Opening /dev/ttyUSB0 at 115200 bauds (N, 8, 1)
** UNIT TESTING **
1/1 No response timeout modification on connect: OK

TEST WRITE/READ:
[11][05][01][30][FF][00][8F][59]
Waiting for a confirmation...
<11><05><01><30><FF><00><8F><59>
1/2 modbus_write_bit: OK
[11][01][01][30][00][01][FE][A9]
Waiting for a confirmation...
<11><01><01><01><94><88>
2/2 modbus_read_bits: OK

...

OK
[11][42][00][00][00][00][7B][55]
Waiting for a confirmation...
<11><C2><01><B1><65>
Return an exception on unknown function code: OK

TEST INVALID INITIALIZATION:
The device string is empty
OK
The baud rate value must not be zero
OK
The service string is empty
OK

ALL TESTS PASS WITH SUCCESS.

使用说明

基于Xenomai编译的libmodbus要与Xenomai RTDM驱动一起使用!!!

项目介绍

modified libmodbus for xenomai.

定制我的领域