Интерфейс RS-485 протокол MODBUS RTU.

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY
Тима
Сообщения: 131
Зарегистрирован: 16 ноя 2012, 21:03

Re: Интерфейс RS-485 протокол MODBUS RTU.

Сообщение Тима »

Ответил в личку...
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Интерфейс RS-485 протокол MODBUS RTU.

Сообщение Mr.Kubikus »

Хорошо.

У меня сейчас нет под рукой МВА8, но зато валяется ОВЕН ПЛК110-30 с интерфейсом MODBUS. Попробую на нем собрать макет для проверки.
С уважением, Григорий
GitHub FB ВК
Тима
Сообщения: 131
Зарегистрирован: 16 ноя 2012, 21:03

Re: Интерфейс RS-485 протокол MODBUS RTU.

Сообщение Тима »

Mr.Kubikus писал(а):Хорошо.

У меня сейчас нет под рукой МВА8, но зато валяется ОВЕН ПЛК110-30 с интерфейсом MODBUS. Попробую на нем собрать макет для проверки.
было бы хорошо... :)
Тима
Сообщения: 131
Зарегистрирован: 16 ноя 2012, 21:03

Re: Интерфейс RS-485 протокол MODBUS RTU.

Сообщение Тима »

Mr.Kubikus писал(а):можем попробовать почтой РФ.
Что нибудь решилось по этому вопросу?
Тима
Сообщения: 131
Зарегистрирован: 16 ноя 2012, 21:03

Re: Интерфейс RS-485 протокол MODBUS RTU.

Сообщение Тима »

Получил Ваш преобразователь. Спасибо! Причем вместе с ним приехала и китайская посылка.
Итак, в наличии: преобразователи(Ваш и китайский), ардуино нано, мега про-микро, модуль аналогового ввода МВА8, пара относительно ровных рук :) .
Что дальше?
Тима
Сообщения: 131
Зарегистрирован: 16 ноя 2012, 21:03

Re: Интерфейс RS-485 протокол MODBUS RTU.

Сообщение Тима »

Mr.Kubikus, нужна схема подключения ардуины к МВА8 через плату с драйвером RS485 из Вашего магазина.
Далее программная сторона.
Вот настройки порта МВА8:
Рисунок1.png
Рисунок1.png (162.17 КБ) 59837 просмотров
как с ним связаться через ардуину
Вот адреса ячеек:
Рисунок1.jpg
Рисунок1.jpg (149.77 КБ) 59837 просмотров
Как это все уместить в скетче?
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Интерфейс RS-485 протокол MODBUS RTU.

Сообщение Mr.Kubikus »

Привет! Сегодня есть немного свободного времени. Попробую собрать проект.
С уважением, Григорий
GitHub FB ВК
Тима
Сообщения: 131
Зарегистрирован: 16 ноя 2012, 21:03

Re: Интерфейс RS-485 протокол MODBUS RTU.

Сообщение Тима »

Ок. Жду. :P
Аватара пользователя
Mr.Kubikus
Сотрудник ПАКПАК
Сообщения: 1020
Зарегистрирован: 22 окт 2010, 23:57

Re: Интерфейс RS-485 протокол MODBUS RTU.

Сообщение Mr.Kubikus »

Привет!

Все получилось. Работает чтение данных из ПЛК c помощью функции 3-READ_HOLDING_REGISTERS.

Подключение Arduino к драйверу RS485 по следующей схеме:

TX1-> RX-I
RX1-> TX-O
D2-> RTS
+5V-> VCC
GND->GND
arduino-modbus-1.jpg
arduino-modbus-1.jpg (198.31 КБ) 59825 просмотров
Режим RTU. Настройки порта 9600 8N1.

Код: Выделить всё

/*
   PACPAC 2015
   
   Плата: Arduino Leonardo
   
   В этом примере демонстрируется обмен данными по протоколу Modbus RTU
   между контроллерами Arduino и ОВЕН ПЛК 110-24.30.Р-М с использованием
   библиотеки SimpleModbusMaster (https://code.google.com/p/simple-modbus/)

   Arduino выступает в роли ведущего (master) устройства, а ПЛК в роле подчиненного (slave). 

   Плата Arduino подключена к ПЛК через драйвер RS485 (http://pacpac.ru/product/bob-10124-rs-485-breakout/).
   Настройки последовательного интерфейса: RTU, 9600, 8N1.
   
   В этом примере объект packet[0] используется для чтения одного слова данных из регистра с адресом 0 
   c помощью функции MODBUS #3-READ_HOLDING_REGISTERS. Полученное значение затем используется
   для управления светодиодом на выходе Arduino 13
   
   В ПЛК загруженна программа, которая циклически увеличивает на 1 содержимое ячейки 
   памяти с адресом %MB0 в диапазоне 0-255 и затем переносит младший бит %MX0.0 в ячейку %QW6.1.0.
   Длительность паузы Tц=1 с
   
   Подробное описание библиотеки находится в файле SimpleModbusMasterManual.pdf
*/

#include <SimpleModbusMaster.h>

// Настройки интерфейса
#define baud 9600       // Скорость
#define timeout 1000    // Длительность ожидание ответа
#define polling 200     // Длительность паузы между запросами
#define retry_count 10  // Количество попыток обмена до отключения канала

// Выход контроллера для управления направлением драйвера
#define TxEnablePin 2

// Выход для управления светодиодом
#define LED 13

// Количество регистров на стороне ведущего устройства для хранения данных
#define TOTAL_NO_OF_REGISTERS 1

// Простой способ подсчета количтества создаваемых объектов packet.
// TOTAL_NO_OF_PACKETS обновляется автоматически.
enum
{
  PACKET1,
  TOTAL_NO_OF_PACKETS // Этот элемент должен быть последним
};

Packet packets[TOTAL_NO_OF_PACKETS];

unsigned int regs[TOTAL_NO_OF_REGISTERS];

void setup()
{
  // Инициализируем каждый обект packet
  modbus_construct(&packets[PACKET1], 1, READ_HOLDING_REGISTERS, 0, 1, 0);
  
  // Инициализируем конечный автомат протокола MODBUS
  modbus_configure(&Serial1, baud, SERIAL_8N1, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS, regs);
  
  // Инициализируем последовательный порт для отладочного вывода
  Serial.begin(115200);
  
  // Настраиваем порт для светодиода
  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);
}

void loop()
{
  modbus_update();
  
  Serial.println(regs[0]);
  
  if (regs[0] == 1) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }
  
}
Если чего не понятно - задавайте вопросы. Попробуем разобраться вместе.
С уважением, Григорий
GitHub FB ВК
Тима
Сообщения: 131
Зарегистрирован: 16 ноя 2012, 21:03

Re: Интерфейс RS-485 протокол MODBUS RTU.

Сообщение Тима »

с использованием библиотеки SimpleModbusMaster (https://code.google.com/p/simple-modbus/)
А как скачать библу оттуда?
___________________________________
Скачал через гугл-диск... :P
Ответить