Документация по SCADA системе Simp Light
Скачать документацию Скачать программу
Видеокурс Форум и база знаний FAQ

Содержание:


Arduino

Существует несколько способов взаимодействия 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