工作项目中,机器人要完成一个电源管理的功能,自带可充电触点接触充电的电池,具体参数不表,代码要完成通过无线网络与西门子的PLC通信,从而控制充电房的开门与关门,以及控制充电处的继电器的开启与关闭,协议是modbus-tcp
。因此在网上找来好用的开源库——libmodbus
。记录下简单使用过程。
下载地址:
download 选择v3.0.6长期稳定版
本文分为以下部分:
- 源码安装
- 测试与使用
源码安装
下载完压缩包放至/home
目录下,解压:
tar -zxvf libmodbus-3.0.6.tar.gz
进入libmodbus-3.0.6
目录:
cd libmodbus-3.0.6
配置:
./configure
编译与安装:
make && make install
测试与使用
测试
demo:
modbus_t *mb;
uint16_t tab_reg[32];
mb = modbus_new_tcp("127.0.0.1", 1502);
modbus_connect(mb);
/* Read 5 registers from the address 0 */
modbus_read_registers(mb, 0, 5, tab_reg);
modbus_close(mb);
modbus_free(mb);
测试modbus-tcp协议通信,代码里使用本地回环地址,端口1502:
进入tests目录打开一个终端,启动server程序:
./unit-test-server tcp
在目录打开另一个终端,启动client程序:
./unit-test-client tcp
启动会打印出很多信息。
使用
而自己使用也需要精简例子代码,并按实际需要更改ip和端口:
在libmodbus-3.0.6
目录下新建一个mytest目录。
mkdir mytest
将所需头文件拷入,头文件均位于目录src
中:
cp modbus.h modbus-rtu.h modbus-tcp.h ../mytest
进入该目录:
cd mytest
创建自己代码main.c
如下:
#include <stdio.h>
#include <unistd.h>
#