Почему именно Master Scada? Отвечу: Master Scada работает через собственный OPC сервер имеющий множество настроек, что позволяет хорошо рассмотреть процесс опроса каналов, ну и он бесплатный на 32 канала).
Для теста воспользовался двумя ультразвуковыми дальномерами HC-04 и платой arduino uno.
Передачу осуществил по протоколу modbus.
Чтобы воспользоваться в arduino библиотекой SimpleModbusSlaveV9, нужно её сперва установить.
Скетч залитый в arduino:
//подключаем библиотеку
#include <SimpleModbusSlave.h>
//объявляем переменные
#define echoPin 2
#define trigPin 3
#define echoPin1 4
#define trigPin1 5
enum
{
ADC_VAL,
PWM_VAL,
HOLDING_REGS_SIZE=4 //вводим количество каналов
};
unsigned int holdingRegs[HOLDING_REGS_SIZE];
void setup()
{
modbus_configure(&Serial, 115200, SERIAL_8N2, 1, 2, HOLDING_REGS_SIZE, holdingRegs); //вводим скорость опроса
modbus_update_comms(115200, SERIAL_8N2, 1);
// для УЗ датчиков
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
}
void loop()
{
int duration, cm;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
cm = duration / 58;
int duration1, cm1;
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
cm1 = duration1 / 58;
delay(100);
// Полученные значения передаем в OPC
modbus_update();
holdingRegs[1] =cm1; //адрес 1
holdingRegs[2] = cm; //адрес 2
holdingRegs[3] = cm; //адрес 2
}
Далее настраиваем OPC. Выбираем номер порта и скорость опроса:
Создаем устройство выставляем время ответа и период опроса:
Добавляем Тэги, для каждого параметра свой тэг. Вводим в графе адрес значение соответствующее holdingRegs[ ]:
И запускаем:
Теперь переходим к настройке MasterScada.
Соединяем OPC сервер со скадой рисуем мнемосхему для визуализации:
И запускаем:
Сбоев в работе обнаружено не было, в перспективе подключение датчиков с токовым выходом 4-20 мА и использование платформы arduino как модуль сбора данных и индикации на небольших объектах.
Если кому интересно могу описать обмен arduino + Delphi
Комментарии (13)
Goska
01.03.2016 16:01+1канал 0 обязателен без него передача работать не будет.
OPC сервер можно настроить по разному. с UART не работал, но попробовать можно, думаю получится
http://www.insat.ru/prices/info.php?pid=6944 ссылка на OPC сервер Modbus Universal MasterOPC Server 32. Версия 3.1.14
kail
01.03.2016 22:41+1MasterSCADA не имеет собственного OPC-сервера, она просто работает по протоколу OPC.
Собственно, кроме OPC она умеет только с ограниченным количеством ПЛК общаться. Другие системы зачастую сами могут общаться с оборудованием напрямую.
Да, у разработчика этой скады есть modbus OPC сервер с бесплатной версией на 32 тега. Также есть у них и другие OPC-сервера, наиболее функциональный и перспективный — Multi-Protocol MasterOPC, состоящий из основы и плагинов, которые они потихоньку пилят. Демо-версия может работать с 1 устройством.
Но вместо Modbus MasterOPC к MasterSCADA вполне могут купить Lectus, потому что он дешевле.
Для объекта 32 тега маловато, конечно. Bool-значения можно упаковывать в слова (до 32 бит), в мастерскаде есть готовые блоки для упаковки-распаковки. Но это может показаться несколько неудобным.gorbln
02.03.2016 10:13Спасибо за информацию.
У меня задача небольшая — отображение в красивом виде параметров лабораторного стенда. Думаю, 32 каналов мне хватит. Навскидку, что-то около 8-10 каналов получается. Но хотелось бы получать и отображать отладочную информацию с испытуемого прибора, а он общается по UART.Goska
02.03.2016 12:12А что за прибор если не секрет?
gorbln
02.03.2016 13:53Электропневматический позиционер. Шайтан-машина, питающаяся от токового входа 4...20 мА, при этом содержащая регулятор положения, и управляющая пневматическим выходом с расходом под 100 л/мин. Из внешних интерфейсов может HART и UART.
kail
02.03.2016 12:24+1С красивым отображением у мастерскады дела так себе, но рабоче-крестьянскую мнемосхему и небольшой проектик можно накидать очень быстро.
Если под UART понимается обычный TTL 5В, то преобразователь ttl-usb за 1-1,5$ вам поможет. Modbus OPC сервер требует com-порт или TCP адрес-порт.gorbln
02.03.2016 13:55UART 3-вольтовый, но да, именно адаптер за 3 доллара на палёном FTDI я и использую =)
Про опц сервер понял, посмотрю, что там и как
sim31r
08.03.2016 17:04+1Решал примерно такую же задачу, но выбрал не COM порт, а Ethernet Shield на W5100:
https://www.arduino.cc/en/Main/ArduinoEthernetShield
очень удобно, поверх него так же можно гонять Modbus TCP (обычно SCADA с ним без OPC работает, напрямую), автоматически решается проблема с гальванической развязкой, удаленностью, масштабируемостью. Проверял на "перегрузки" в локальной офисной сети, где постоянный сетевой шум от 2000 компьютеров, изредка пропадали пинги, но никаких зависаний за несколько суток работы (не все ПЛК с этим справляются кстати, ICP просто зависали). В выделенной сети вообще всё хорошо работает.gorbln
09.03.2016 11:02Интересно!
А как формировали пакет? Есть какое-то описание?sim31r
09.03.2016 20:08+1Если речь о пакете modbus TCP, я его формирование "перенес" на верхний уровень, для обеспечения большей гибкости.
Например программа Lectus OPC может работать не только в режиме Modbus TCP, а в режиме Modbus over TCP. Сразу идет запрос в том виде, как он будет передан по RS232, RS485 (с контрольной суммой). Ранее запросы у меня принимала Moxa Nport server, а тут я то же самое сделал на Arduino + 2 шилда, копеечный RS485 и Ethernet Shield. Еще раньше работал с Moxa Nport server как с виртуальными портами, у них есть драйвер специальный, но удобнее оказалось работать с ними как с TCP сервером, никаких СОМ портов в системе, как-то стабильнее и логичнее. Далее запросы перенаправляются на модули ввода-вывода с интерфейсом modbus rtu.
gorbln
Спасибо за статью.
Вы передаёте три параметра, но используете четыре канала. Каков физический смысл канала 0? Это обязательный канал, или он добавлен "про запас"?
P.S. Ещё бы описание, как в мастерскаде работать с UART-ом. То есть, приходит пакет, мы его парсим и отдаём скаде. Я так понимаю, этим OPC сервер как раз занимается. Не поделитесь толковой ссылкой?