Содержание:


Arduino

Arduino — торговая марка аппаратно-программных средств для построения простых систем автоматики и робототехники, ориентированная на непрофессиональных пользователей.
Подробнее - смотрите в "Википедии".


     Существует несколько способов взаимодействия Arduino со scada-системой SIMP Light, одним из которых является управление через Modbus RTU. Этот способ не требует установки и использования какого либо OPC-сервера, взаимодействие SIMP Light и Arduino ведется НАПРЯМУЮ.

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

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

     При взаимодействии SIMP Light и Arduino: scada-система выступает в роли Modbus Master, а Arduino выполняет функцию Modbus Slave.

     Для начала работы необходимо:

     Затем необходимо настроить порт, по которому будет происходить передача данных. Если вы не знаете к какому порту подключена плата, обратитесь к "Диспетчеру устройств" в системе Windows, и откройте раздел "Порты (COM и LPT)" - там будет указан используемый COM-порт.

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

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

     Итак, среда разработки готова к реализации проектов с использованием протокола "MODBUS RTU". Далее будет представлен код 4-х демонстрационных проектов:

1) Подключение датчика температуры DHT22 и получение данных с него в систему SIMP Light.

2) Подключение модуля реле (4 реле) и управление ими из системы SIMP Light.

3) Подключение кнопки (сухого контакта) и отображение её статуса в системе SIMP Light.

4) Подключение светодиода и управление им из системы SIMP Light.

     В конце статьи есть ссылки на архивы, которые включают код для Arduino и проект для системы SIMP Light.

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" и загружен на Arduino, можно создавать проект в системе SIMP Light. Последовательность шагов описана ниже.

     Открываем модуль "Управление проектами" (SIMP Project manager) и создаём новый проект. 

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

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

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

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

     Когда настроены все параметры, необходимо нажать кнопку "ОК" и протестировать работоспособность: 

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

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

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

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

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

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

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

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

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

     И в конце, обещанные ссылки на архивы с проектами:

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