Решил создать союз между arduino и Master Scada.
Почему именно 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. Выбираем номер порта и скорость опроса:
![](https://habrastorage.org/files/5fa/f71/42c/5faf7142cf2647c2bc042c268ad44385.PNG)
Создаем устройство выставляем время ответа и период опроса:
![](https://habrastorage.org/files/bd8/5fe/0a0/bd85fe0a06104f59a8293a19709d67fb.PNG)
Добавляем Тэги, для каждого параметра свой тэг. Вводим в графе адрес значение соответствующее holdingRegs[ ]:
![](https://habrastorage.org/files/278/d6a/316/278d6a316705417cbedd5e0f1685ee39.PNG)
И запускаем:
![](https://habrastorage.org/files/709/2a4/c2c/7092a4c2c11b4f96a29503ba56641c7b.PNG)
Теперь переходим к настройке MasterScada.
Соединяем OPC сервер со скадой рисуем мнемосхему для визуализации:
![](https://habrastorage.org/files/fbb/f8d/36b/fbbf8d36bd1f4b4d906f554c059f3749.PNG)
И запускаем:
![](https://habrastorage.org/files/52c/446/cc7/52c446cc7897446db0afa3e3bdf50aa6.PNG)
Сбоев в работе обнаружено не было, в перспективе подключение датчиков с токовым выходом 4-20 мА и использование платформы arduino как модуль сбора данных и индикации на небольших объектах.
Если кому интересно могу описать обмен arduino + Delphi
Почему именно 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