代码拉取完成,页面将自动刷新
libmodbus-xenomai是一个自由的软件库,它使用一个遵循Modbus协议的设备来发送和接收数据。
软件架构说明: 使用 unit-test-server和unit-test-client 基于kunpeng920测试通过;
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
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'
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
测试与结果
使用串口连接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 |
在测试机运行 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.
在测试机运行 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...
unit-test-client
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驱动一起使用!!!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型