Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Simple-Scada и Arduino  (Прочитано 281326 раз)

garry

  • Пользователь
  • **
  • Сообщений: 72
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #105 : 28 Апреля 2016, 07:41:40 »
Читайте тему сначала, я мучался с подключением DHT21 - суть то-же самое. Там все описано.

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 285
    • Просмотр профиля
    • Simple-Scada
Re: Simple-Scada и Arduino
« Ответ #106 : 28 Апреля 2016, 08:52:55 »
Решение можем подсказать только через Simple-Scada 2.0  которая как раз недавно вышла.
Ниже пример с датчиком DHT11, но думаем с остальными датчиками можно сделать как в этом примере.
http://simple-scada.com/download - Скачиваем "Демо версия Simple-Scada 2.0 на 64 тега"

https://yadi.sk/d/aFHpfvmhrMBJB - Скачиваем архив с примером.
temperatyra_dth11.ino - Заливаем в ардуино.
temperatyra - копируем в Simple-Scada 2 (demo)\Projects

https://yadi.sk/d/_VAlz117rMBEf - DHT библиотека для arduino ide

Суть в том, что объект Shape1 получает данные переменной с Arduino OPC каждые 50мс, а DHT11 возвращает значение с не постоянной частотой, из-за этого возникает "моргание" значения. Чтобы избавится от этого добавляем внутреннюю переменную Temp, а для объекта Shape1 пишем скрипт в OnDataChange:   

begin
if TM_Object(sender).ValueAsFloat > 1 then
 Temp.Value := TM_Object(Sender).ValueAsFloat;
end.

А объекту "поле" присваиваем переменную Temp.
« Изменён: 25 Марта 2022, 12:30:41 от Simple_Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Simple-Scada и Arduino
« Ответ #107 : 28 Апреля 2016, 13:21:40 »
ariel, este problema se produce debido al principio de funcionamiento del sensor. Pero hasta ahora no hay una buena solución.

bars

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #108 : 29 Апреля 2016, 05:20:49 »
Цитировать
Читайте тему сначала, я мучался с подключением DHT21 - суть то-же самое. Там все описано.

Я тоже пробовал по этим примерам, тоже мучался!!! Правдв только под версией 1.3.3. Получилось, что контроллер передавал в ОРС сервер паказания от датчика ДНТ-11 только один раз в начале опроса и всё, на этом ступор... В Scada вообще ничего не прилетало. С аналоговыми датчиками без проблем...
В любом случае СПАСИБО!

bars

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #109 : 29 Апреля 2016, 05:23:46 »
Цитировать
В общем, решение могу подсказать только через Simple-Scada 2.0  которая как раз недавно вышла)
Мой пример с датчиком DHT11, но я думаю с остальными датчиками можно сделать как в этом примере.
http://simple-scada.com/download - Скачиваем "Демо версия Simple-Scada 2.0 на 64 тега"

Я скачал демо версию, но подключение ДНТ-11 пока не пробовал. Пока разбирался с функционалом... Жаль времени маловато... Но Вам спасибо за подсказку и примеры, буду пробовать....

ariel

  • Гость
Re: Simple-Scada и Arduino
« Ответ #110 : 04 Мая 2016, 23:31:23 »
SOLUCIÓN AL PROBLEMA CON EL SENSOR DS18B20, Y LA LIBRERÍA DALLASTEMPERATURE.H .

COLOCAR ESTA SENTENCIA

void setup() {
 Serial.begin(9600);  //Iniciamos la comunicación serie a 9600 baudios
// indicamos que espera la coversion de la temperatura para evitar problemas de comunicación
sensores.setWaitForConversion(false);

Y LISTO. SE VAN LOS PROBLEMAS

PRUEBEN Y AVISEN SI FUNCIONO, A MI SI

janga

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #111 : 30 Мая 2016, 12:43:59 »
в Ардуино уно названия библиотек в коде подсвечены желтым, а OPC библитека нет.Так и должно быть?

Simple Scada

  • Глобальный модератор
  • *****
  • Сообщений: 285
    • Просмотр профиля
    • Simple-Scada
Re: Simple-Scada и Arduino
« Ответ #112 : 30 Мая 2016, 13:22:25 »
в Ардуино уно названия библиотек в коде подсвечены желтым, а OPC библитека нет.Так и должно быть?
Да, всё нормально.

Darfin

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #113 : 16 Июня 2016, 21:10:12 »
Добрый день! Помогите найти ошибку в коде. Вроде бы все копирую с примера, добавил чтение и запись цифровых входов, запись аналоговых.
Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>

// это переменная для работы с OPC
OPCSerial aOPCSerial;

// сигнальный диод
int diod = 13;

// Цифровые
int D0 = 0;
int D1 = 1;
int D2 = 2;
int D4 = 4;
int D7 = 7;
int D8 = 8;
int D12 = 12;

// Цифровые ШИМ (или PWM)
int D3 = 3;
int D5 = 5;
int D6 = 6;
int D9 = 9;
int D10 = 10;
int D11 = 11;

// Аналоговые входа
int AI0 = 0;
int AI1 = 1;
int AI2 = 2;
int AI3 = 3;
int AI4 = 4;
int AI5 = 5;

// Это пример объявления виртуальной переменной, которая будет видна в
// Simple-Scada и её значение будет равно 99
byte MyVirtualItem(const char *itemID, const opcOperation opcOP, const byte value){
  return 99;
}


bool D0_item(const char *ItemID, const opcOperation opcOP, const bool value){
  if (opcOP == opc_opwrite){
    digitalWrite(D0, value);
  }
    return digitalRead(D0);
}


bool D1_item(const char *ItemID, const opcOperation opcOP, const bool value){
  if (opcOP == opc_opwrite){
    digitalWrite(D1, value);
  }
    return digitalRead(D1);
}

bool D2_item(const char *ItemID, const opcOperation opcOP, const bool value){
  if (opcOP == opc_opwrite){
    digitalWrite(D2, value);
  }
    return digitalRead(D2);
}


bool D4_item(const char *ItemID, const opcOperation opcOP, const bool value){
  if (opcOP == opc_opwrite){
    digitalWrite(D4, value);
  }
    return digitalRead(D4);
}

bool D7_item(const char *ItemID, const opcOperation opcOP, const bool value){
  if (opcOP == opc_opwrite){
    digitalWrite(D7, value);
  }
    return digitalRead(D7);
}

bool D8_item(const char *ItemID, const opcOperation opcOP, const bool value){
  if (opcOP == opc_opwrite){
    digitalWrite(D8, value);
  }
    return digitalRead(D8);
}

bool D12_item(const char *ItemID, const opcOperation opcOP, const bool value){
  if (opcOP == opc_opwrite){
    digitalWrite(D12, value);
  }
    return digitalRead(D12);
}

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Далее описаны процедуры которые описывают работу с Цифровыми ШИМ (PWM) входами

int D3_Item(const char *itemID, const opcOperation opcOP, const int value){
  // если Simple-Scada хочет записать новое значение
  if (opcOP == opc_opwrite) {
    analogWrite(D3, value);
  }
   
  return analogRead(D3);
}

int D5_Item(const char *itemID, const opcOperation opcOP, const int value){
  // если Simple-Scada хочет записать новое значение
  if (opcOP == opc_opwrite) {
    analogWrite(D5, value);
  }
   
  return analogRead(D5);
}

int D6_Item(const char *itemID, const opcOperation opcOP, const int value){
  // если Simple-Scada хочет записать новое значение
  if (opcOP == opc_opwrite) {
    analogWrite(D6, value);
  }
   
  return analogRead(D6);
}

int D9_Item(const char *itemID, const opcOperation opcOP, const int value){
  // если Simple-Scada хочет записать новое значение
  if (opcOP == opc_opwrite) {
    analogWrite(D9, value);
  }
   
  return analogRead(D9);
}

int D10_Item(const char *itemID, const opcOperation opcOP, const int value){
  // если Simple-Scada хочет записать новое значение
  if (opcOP == opc_opwrite) {
    analogWrite(D10, value);
  }
   
  return analogRead(D10);
}

int D11_Item(const char *itemID, const opcOperation opcOP, const int value){
  // если Simple-Scada хочет записать новое значение
  if (opcOP == opc_opwrite) {
    analogWrite(D11, value);
  }
   
  return analogRead(D11);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Далее описываются процедуры для чтения значений Аналоговых входов

int AI0_Item(const char *itemID, const opcOperation opcOP, const int value){
  if (opcOP == opc_opwrite) {
    analogWrite(AI0, value);
  }
  return analogRead(AI0);
}

int AI1_Item(const char *itemID, const opcOperation opcOP, const int value){
  if (opcOP == opc_opwrite) {
    analogWrite(AI1, value);
  }
  return analogRead(AI1);
}

int AI2_Item(const char *itemID, const opcOperation opcOP, const int value){
  if (opcOP == opc_opwrite) {
    analogWrite(AI2, value);
  }
  return analogRead(AI2);
}

int AI3_Item(const char *itemID, const opcOperation opcOP, const int value){
  if (opcOP == opc_opwrite) {
    analogWrite(AI3, value);
  }
  return analogRead(AI3);
}

int AI4_Item(const char *itemID, const opcOperation opcOP, const int value){
  if (opcOP == opc_opwrite) {
    analogWrite(AI4, value);
  }
  return analogRead(AI4);
}

int AI5_Item(const char *itemID, const opcOperation opcOP, const int value){
  if (opcOP == opc_opwrite) {
    analogWrite(AI5, value);
  }
  return analogRead(AI5);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -


void setup()
{
  Serial.begin(9600);
 
  // ОБЯЗАТЕЛЬНО!
  aOPCSerial.setup();

  // для примера объявляем виртуальный тег, который всегда = 99
  aOPCSerial.addItem("MyVirtualItem", opc_readwrite, opc_byte, MyVirtualItem);

  aOPCSerial.addItem("D0", opc_readwrite, opc_int, D0_Item);
  aOPCSerial.addItem("D1", opc_readwrite, opc_int, D1_Item);
  aOPCSerial.addItem("D2", opc_readwrite, opc_int, D2_Item);
  aOPCSerial.addItem("D4", opc_readwrite, opc_int, D4_Item);
  aOPCSerial.addItem("D7", opc_readwrite, opc_int, D7_Item);
  aOPCSerial.addItem("D8", opc_readwrite, opc_int, D8_Item);
  aOPCSerial.addItem("D12", opc_readwrite, opc_int, D12_Item);

 
  //регистрируем цифровые ШИМ (PWM) для Simple-Scada, и даем им имена D3, D5... и так далее
  // эти имена нужно указывать в Simple-Scada в качестве Адреса
  aOPCSerial.addItem("D3", opc_readwrite, opc_int, D3_Item);
  aOPCSerial.addItem("D5", opc_readwrite, opc_int, D5_Item);
  aOPCSerial.addItem("D6", opc_readwrite, opc_int, D6_Item);
  aOPCSerial.addItem("D9", opc_readwrite, opc_int, D9_Item);
  aOPCSerial.addItem("D10", opc_readwrite, opc_int, D10_Item);
  aOPCSerial.addItem("D11", opc_readwrite, opc_int, D11_Item);

  // регистрируем аналоговые входа для Simple-Scada, называя их AI0, AI1... и так далее
  //  эти имена нужно указывать в Simple-Scada в качестве Адреса
  aOPCSerial.addItem("AI0", opc_read, opc_int, AI0_Item);
  aOPCSerial.addItem("AI1", opc_read, opc_int, AI1_Item);
  aOPCSerial.addItem("AI2", opc_read, opc_int, AI2_Item);
  aOPCSerial.addItem("AI3", opc_read, opc_int, AI3_Item);
  aOPCSerial.addItem("AI4", opc_read, opc_int, AI4_Item);
  aOPCSerial.addItem("AI5", opc_read, opc_int, AI5_Item);
 
  pinMode(diod, OUTPUT);
}

void loop()
{
  // ОБЯЗАТЕЛЬНО! Выполняем OPC-команды в цикле
  aOPCSerial.processOPCCommands();
}

Ошибка:
Код
OPC:213: error: 'D0_Item' was not declared in this scope
OPC:214: error: 'D1_Item' was not declared in this scope
OPC:215: error: 'D2_Item' was not declared in this scope
OPC:216: error: 'D4_Item' was not declared in this scope
OPC:217: error: 'D7_Item' was not declared in this scope
OPC:218: error: 'D8_Item' was not declared in this scope
OPC:219: error: 'D12_Item' was not declared in this scope
exit status 1
'D0_Item' was not declared in this scope
« Изменён: 26 Мая 2018, 11:23:31 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Simple-Scada и Arduino
« Ответ #114 : 16 Июня 2016, 21:23:15 »
Здравствуйте!

Это потому что Arduino IDE использует стандартный C++, который является регистрозависимым. Поэтому имена "Hello" и "hello" считаются разными. Вот в Вашем примере как раз такая ошибка. Например объявляется функция:

Код: (c++)
bool D0_item(const char *ItemID, const opcOperation opcOP, const bool value){
  if (opcOP == opc_opwrite){
    digitalWrite(D0, value);
  }
    return digitalRead(D0);
}

а регистрируется так:
Код: (c++)
aOPCSerial.addItem("D0", opc_readwrite, opc_int, D0_Item);

, т.е. "D0_item" и "D0_Item".
« Изменён: 26 Мая 2018, 11:23:50 от Simple-Scada »

bars

  • Новичок
  • *
  • Сообщений: 13
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #115 : 07 Июля 2016, 06:41:18 »
Недавно вышло новое обновление программы FLprog на одноимённом сайте! FLprog это среда разработки ПО для Ардуино для не программистов в графическом виде. В предыдущих версиях протокол МодБас работал не очень корректно, но в последнем обновлении его полностью переписали и теперь подключение Ардуино к Simple Scada по протоколу МодБас вообще не проблема. Датчики ДНТ-11 подключаются без проблем, работают чотко без глюков. Вообще практически любой датчик и набор логики. Это касается и SS версии 2.0 и SS версии 1.3.3. Я в ВОСТОРГЕ.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Simple-Scada и Arduino
« Ответ #116 : 07 Июля 2016, 11:06:06 »
bars, спасибо, интересная информация. Это поможет упростить работу Simple-Scada с Ардуино.

emoxristov

  • Пользователь
  • **
  • Сообщений: 53
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #117 : 29 Декабря 2016, 18:21:47 »
Можете ли вы сделать видео, как Scada работа с Arduino.Kak сделать настройки работы?

emoxristov

  • Пользователь
  • **
  • Сообщений: 53
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #118 : 18 Января 2017, 22:31:55 »
Где я могу найти скрипт для использования выходов Arduino для кнопок.
// Цифровые
int D0 = 0;
int D1 = 1;
int D2 = 2;
int D4 = 4;
int D7 = 7;
int D8 = 8;
int D12 = 12;

Teodor

  • Старожил
  • ****
  • Сообщений: 256
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #119 : 20 Января 2017, 13:55:07 »
http://simple-scada.com/video

с 5 и дальше...

Либо поднять на Дуне полноценный ModbusTCP и передавать их на взрослый ОРС. Что есть нетривиальной задачей для неподготовленного пользователя.
« Изменён: 20 Января 2017, 13:57:49 от Teodor »