Откройте терминал и выполните следующие команды:
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_modbus.cpp в пакете ROS.
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 бод. Данные передаются в шестнадцатеричном формате. Контроллер отправляет запросы модулю управления питанием.
Интервал отправки составляет две секунды. Отправляются команды включения питания 0001 и отключения питания 01 06.
Код реализации:
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 количество регистров, контрольная сумма Реализовать отправку данных на плату питания, реализовать управление реле включения питания шасси малого автомобиля
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )