Подключение ARDUINO к Симп Лайт через MODBUS RTU

Существует несколько способов взаимодействия Arduino со СКАДА Симп Лайт, одним из которых является управление через Modbus RTU.

Этот способ не требует установки и использования какого либо OPC-сервера, взаимодействие СКАДА и Ардуино ведется НАПРЯМУЮ.


Arduino — это электронный конструктор и удобная платформа быстрой разработки электронных устройств. Программируется через USB без использования программаторов.

Modbus — открытый коммуникационный протокол, основанный на архитектуре ведущий-ведомый (master-slave).


В этом методе приложение SCADA выступает в роли Modbus Master, а Arduino выполняет функцию Modbus Slave.


Для начала работы, необходимо скачать и установить приложение Arduino IDE - https://www.arduino.cc/en/main/software

Затем нужно загрузить библиотеку, которая необходима для работы с Modbus - https://github.com/smarmengol/Modbus-Master-Slave-for-Arduino


Далее необходимо выбрать модель Arduino, с которой вы работаете. В нашем случае это модель Arduino UNO.



Затем необходимо настроить порт, по которому происходить передача данных. Если вы не знаете к какому порту подключена плата, сделайте следующее:




После того как узнали к какому номеру порта подключена Arduino UNO, необходимо указать его в программе Arduino IDE.




Загрузите библиотеку Modbus в Arduino IDE и добавьте ее в проект.




Среда разработки готова к реализации проектов с использованием протокола MODBUS RTU/


Далее будет представлен код 4-х демонстрационных проектов:


1) Подключение датчика температуры DHT22 и получение данных с него в СКАДА Симп Лайт

2) Подключение модуля реле (4 реле) и управление ими из  СКАДА Симп Лайт

3) Подключение кнопки (сухого контаката) и отображение её статуса в СКАДА Симп Лайт

4) Подключение светодиода и управление им из  СКАДА Симп Лайт


В конце статьи есть ссылки на архивы, которые включают код для Ардуино и проект для СКАДЫ Симп Лайт.


1. Подключение датчика температуры DHT22


#include <iarduino_DHT.h>
#include <ModbusRtu.h>
#include <SoftwareSerial.h>
#include <DHT.h>
#define ID 1 // адрес ведомого
#define DHTPIN 12 // номер входа, подключенный к датчику температуры
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
iarduino_DHT sensor1(3);
Modbus slave(ID, 0, 0);
int _gtv1;
int _gtv2;
uint16_t au16data[11];
unsigned long _dht1Tti = 0UL;
void setup() {
  // настраиваем последовательный порт ведомого
  slave.begin(9600);
  dht.begin();
}
void loop() {
  float _dht1t = dht.readHumidity(); // Считывание влажности
  float _dht1h = dht.readTemperature(); // Считывание температуры
 
  sensor1.read();
  slave.poll(au16data, 11);
  _gtv1 = _dht1t;
  _gtv2 = _dht1h;
  au16data[1] = _gtv1;      // DHT - pin3
  au16data[2] = _gtv2;
}


2. Подключение модуля реле (4 реле).

#include <ModbusRtu.h>
  
#define ID   1      // адрес ведомого
#define Relay  2   // номер входа, подключенный к реле №1
#define Relay2 4 // номер входа, подключенный к реле №2
#define Relay3 7 // номер входа, подключенный к реле №3
#define Relay4 8 // номер входа, подключенный к реле №4
#define stlPin  13  // номер выхода индикатора работы расположен на плате Arduino
//Задаём ведомому адрес, последовательный порт, выход управления TX
Modbus slave(ID, 0, 0);
int8_t state = 0;
// массив данных modbus
uint16_t au16data[11];
void setup() {
  // настраиваем входы и выходы
  io_setup();
  // настраиваем последовательный порт ведомого
  slave.begin( 9600 );
}
void io_setup() { 
  pinMode(Relay, OUTPUT);
  pinMode(Relay2, OUTPUT);
  pinMode(Relay3, OUTPUT);
  pinMode(Relay4, OUTPUT);
  digitalWrite(Relay, HIGH);
  digitalWrite(Relay2, HIGH);
  digitalWrite(Relay3, HIGH);
  digitalWrite(Relay4, HIGH); 
}
void loop() {
  // обработка сообщений
  state = slave.poll( au16data, 11); 
  if ( state > 4){
    digitalWrite(Relay, LOW);
    digitalWrite(Relay2, LOW);
    digitalWrite(Relay3, LOW);
    digitalWrite(Relay4, LOW);
  }
  io_poll();
}
void io_poll() {
  //Копируем Coil[1] в Discrete[0]
  au16data[0] = au16data[1];
  //Выводим значение регистра 1.3 на светодиод
  //Сохраняем состояние кнопки в регистр 0.3
  digitalWrite(Relay2, bitRead( au16data[1], 0 ));
  digitalWrite(Relay3, bitRead( au16data[1], 1 ));
  digitalWrite(Relay4, bitRead( au16data[1], 2 ));
  digitalWrite(Relay, bitRead( au16data[1], 3 ));
}


3. Подключение кнопки.

#include <ModbusRtu.h>
  
#define ID   1      // адрес ведомого
#define btnPin  2   // номер входа, подключенный к кнопке
#define stlPin  13  // номер выхода индикатора работы расположен на плате Arduino
//Задаём ведомому адрес, последовательный порт, выход управления TX
Modbus slave(ID, 0, 0);
int8_t state = 0;
unsigned long tempus;
// массив данных modbus
uint16_t au16data[11];
void setup() {
  // настраиваем входы и выходы
  io_setup();
  // настраиваем последовательный порт ведомого
  slave.begin( 9600 );
}
void io_setup() { 
  pinMode(btnPin, INPUT); 
}
void loop() {
  // обработка сообщений
  state = slave.poll( au16data, 11); 
  io_poll();
}
void io_poll() {
  //Копируем Coil[1] в Discrete[0]
  au16data[0] = au16data[1];
  //Выводим значение регистра 1.3 на светодиод
  //Сохраняем состояние кнопки в регистр 0.3
  bitWrite( au16data[0], 3, digitalRead( btnPin ));
}


4. Подключение светодиода.

#include <ModbusRtu.h>
  
#define ID   1      // адрес ведомого
#define stlPin  13  // номер выхода индикатора работы расположен на плате Arduino
 #define ledPin  2  // номер входа, подключенный к светодиоду
Modbus slave(ID, 0, 0);
int8_t state = 0;
uint16_t au16data[11];
void setup() {
  // настраиваем входы и выходы
  io_setup();
  // настраиваем последовательный порт ведомого
  slave.begin( 9600 );
  pinMode(ledPin, OUTPUT);   // устанавливаем номер входа (Pin 2) как выход
}
void io_setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);
}
void loop() {
  state = slave.poll(au16data, 11);
  if ( state > 4){
    digitalWrite(ledPin, LOW);
  } 
  io_poll();
}
void io_poll() {
  // Копируем Coil[1] в Discrete[0]
  au16data[0] = au16data[1];
  //Выводим значение регистра 1.3 на светодиод
  //Сохраняем состояние кнопки в регистр 0.3
  digitalWrite( ledPin, bitRead( au16data[1], 3 ));
}



После того как код записан в Arduino IDE его необходимо загрузить на саму плату Arduino UNO:




Когда код записан в программе Arduino IDE и загружен на Адруино, можно создать проект в СКАДА Симп Лайт.

Последовательность шагов описана ниже.


Открываем SIMP Project manager и создаём новый проект. 

После создания проекта открываем проект (запускаем Редактор каналов) , если появляется дополнительное окно, в котором предлагается выбрать OPC Сервера, то убираем все галочки, если такие есть, так как в данном проекте не понадобятся сторонние OPC Сервера. 


 Далее заходим в настройку Modbus драйвера и создаем узел (COM) и настраиваем его параметры: 





Далее в узле создается новое устройство, в нем также необходима настройка параметров:




Затем в устройстве необходимо создать тег, в котором будут отображаться данные с Arduino:




Когда настроили все параметры нажимаем ОК и тестируем: 




Проект DHT22 просто показывает, как SCADA Simp Light получает данные и отображает их.


Теперь создадим в этом же проекте другое устройство, чтобы показать, что в SCADA Simp Light можно управлять устройством, которое подключено к Arduino.




Когда создали устройство "Реле" и все его теги и настроили их, нажимаем ОК и можно протестировать:



Везде вывелось "False" потому, что ни один реле не был включен. 


Теперь зайдем в редактор мнемосхем, где создадим мнемосхему и добавим элементы, благодаря которым можно будет управлять реле.




Сейчас мы создадим новую мнемосхему и добавим на нее необходимые элементы:




После того как добавили элементы на мнемосхему, нужно настроить каждый элемент. Далее будет показана настройка двух элементов, это "панель" и "кнопка (тип "тумблер")", для остальных идентичных элементов настройка такая же, кроме пункта "Привязка к каналу", он будет разный.




Теперь необходимо сохранить мнемосхему и запустить ее в Мониторе:




Мы специально оставили включенными первое и третье реле, чтобы показать в "Тесте каналов" как изменились значения каналов.




Архивы с проектами:

1) Проект "DHT 22" - DHT22.rar

2) Проект "Кнопка" - Button.rar

3) Проект "Реле" - Relais.rar

4) Проект "Светодиод" - Led.rar


Более подробную документацию по СКАДА Симп Лайт можно получить по ссылке: https://simplight.ru/manual/


Что дальше?

 Задать вопрос

Скачать бесплатную версию на 32 тега

 Заказать счёт

 Посмотреть цены

Эта статья была полезна для 13 людей. Эта статья помогла Вам?

Сервис поддержки клиентов работает на платформе UserEcho