代码拉取完成,页面将自动刷新
打开一个终端,依次执行下面命令
mkdir -p ~/catkin_ws/src
cd catkin_ws
catkin_make
catkin_make
随后->连接好USB转485
roscore
ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 Aug 3 21:46 /dev/ttyUSB0
如果这里不是/dev/ttyUSB0,更改ROS功能包中ros_modbus.cpp文件中的的串口设备名字
sudo chmod 777 /dev/ttyUSB0 #根据自己的设备名自行改变
#source
cd catkin_ws_test
source devel/setup.bash
rosrun modbus_test publish_node
小车底盘 0001 | 0010断电 01 06 00 01 00 10 D9 C6 0001上电 01 06 00 01 00 01 19 CA |
---|---|
路由器 0002 | 0002 0010断电 01 06 00 02 00 10 29 C6 0001上电01 06 00 02 00 01 E9 CA |
激光雷达1 0003 | 01 06 00 03 00 10 78 06 01 06 00 03 00 01 B8 0A |
激光雷达2 0004 | 01 06 00 04 00 10 C9 C7 01 06 00 04 00 01 09 CB |
16线激光雷达 0005 | 01 06 00 05 00 10 98 07 01 06 00 05 00 01 58 0B |
鱼眼相机 0006 | 01 06 00 06 00 10 68 07 01 06 00 06 00 01 A8 0B |
预留接口 0007 | 01 06 00 07 00 10 39 C7 01 06 00 07 00 01 F9 CB |
机械臂 0008 |
本协议是一种用于电源管理模块与工控机之间通信的自定义通信协议,采用RTU格式进行通讯,波特率为115200,以16进制格式传输。工控机向电源管理模块发送请求。
间隔两秒进行发送,上电0001与断电0010指令
实现代码如下:
while(ros::ok())
{
ros::spinOnce();
writeModbus_in(0x01,0x0001,0x0010);
loop_rate.sleep();
ros::Duration(2).sleep();
writeModbus_in(0x01,0x0001,0x0001);
loop_rate.sleep();
ros::Duration(2).sleep();
}
测试功能的代码如下:
在ros_modebus.cpp中:addr: 从机地址 reg:寄存器 value:传输值
void writeModbus_in(unsigned char addr,unsigned int reg,unsigned int value)
{
unsigned char cont = 0;
unsigned int crc;
modbus.Sendbuf[cont++] = addr;
modbus.Sendbuf[cont++] = 0x06; //功能码
modbus.Sendbuf[cont++] = reg /256; //寄存器
modbus.Sendbuf[cont++] = reg%256;
modbus.Sendbuf[cont++] = value /256; //数据区
modbus.Sendbuf[cont++] = value%256;
crc = crc16(modbus.Sendbuf,cont); //CRC校验
modbus.Sendbuf[cont++] = crc/256;
modbus.Sendbuf[cont++] = crc%256;
boost::asio::write(sp, boost::asio::buffer(modbus.Sendbuf));
ROS_INFO("OK!!!"); //传输成功提示
}
小车底盘 | 0001 | 0010 |
---|---|---|
0001 |
通过键盘按下按键,在终端上可看到相应的提示,并可知道消息是否发送成功。
将会发送modbus通讯数据: {0x01,0x06,0x00,0x01,0x00,0x10,0xD9,0xC6}; //写小车底盘断电,01从机地址,06写,00 01寄存器地址,00 01寄存器数量,校验码 实现发送数据至电源板,实现控制小车底盘对应的继电器断电
将会发送modbus通讯数据: {0x01,0x06,0x00,0x01,0x00,0x01,0xD9,0xC6}; //写小车底盘上电,01从机地址,06写,00 01寄存器地址,00 01寄存器数量,校验码 实现发送数据至电源板,实现控制小车底盘对应的继电器上电
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。