Simple-Scada forum

Simple-Scada 1.3.3 и ниже => Ваши вопросы => Тема начата: Андрей от 09 Октября 2015, 04:01:29

Название: Simple-Scada и Arduino
Отправлено: Андрей от 09 Октября 2015, 04:01:29
Всем привет!
Хотелось бы подружить Simple-scada и Arduino например uno для презентации одного проекта. Для начала подключил к uno ds18b20 12 порт, скачал библиотеку OPC, код ниже. uno подключено по usb-serial COM5.  При посылке T в консоль, получаю температуру. Настраиваю scada: в свойствах обьекта тэк прописал T, в настройках OPC-сервер Компьютер: localhost, OPC-сервер что прописать? Если прописать COM5 не работает... побывал найти OPC с помощью ItemProperty Есть у кого то примеры? Или я что то не то делаю?

Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>
OPCSerial aOPCSerial;

int DS = 12;
OneWire oneWire(DS);
DallasTemperature sensors(&oneWire);
int item_bool(const char *itemID, const opcOperation opcOP, const int value){
             sensors.requestTemperatures();
     return  sensors.getTempCByIndex(0);
}

void setup() {
  Serial.begin(9600);
  aOPCSerial.setup();
  aOPCSerial.addItem("T",opc_read, opc_bool, item_bool);
}

void loop() {
  aOPCSerial.processOPCCommands();
}
Название: Re: Simple-scada и Arduino
Отправлено: Andrey1883 от 09 Октября 2015, 10:56:21
Хм..интересный вариант :) у самого ардуино валяется, планировал изучить и замутить проект умный дом ...так руки и не дошли :D ...порылся в инете и вот (http://habrahabr.ru/post/249043/), что нашел ...или можно тут (http://cyber-place.ru/showthread.php?t=623) глянуть...народ использует Modbus (даже библиотеки готовые есть для ардуино) ну и ОРС, который работает с Modbus, насколько я понимаю :)
Название: Re: Simple-scada и Arduino
Отправлено: Simple-Scada от 09 Октября 2015, 12:35:37
Здравствуйте!

Мы успешно работали с Arduino Uno через Simple-Scada. Все делается достаточно просто. Можно легко сделать какую-то домашнюю автоматизацию и пр. Опишем все по шагам.


Код: (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;
}


// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Далее описаны процедуры которые описывают работу с Цифровыми ШИМ (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){
  return analogRead(AI0);
}

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

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

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

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

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


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

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

  //регистрируем цифровые ШИМ (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();
}
Название: Re: Simple-Scada и Arduino
Отправлено: Андрей от 12 Октября 2015, 09:11:27
Спасибо за подробнейший ответ. Скада работает, не сразу увидел что register.bat создается и его нужно запустить, а еще да на русском не стоит создавать проект. Прога ItemProperty отказывалась подключатся к OPC серверу, пока не установил opc-core-components и MatrikonOPC Explorer. Не понял какая из них помогла. Появилась другая проблема, ds18b20 не отдает данные по OPC, в лог пишет Not frame received, если кто знает решение напишите плиз.
Название: Re: Simple-Scada и Arduino
Отправлено: janga от 31 Октября 2015, 09:12:52
помогла описикор.
не отдает и у меня,пришлось похерить проект.хотя на эмуляции все работает.
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 25 Декабря 2015, 09:11:26
С ds18b20 у кого-то получилось? У меня та-же печалька.
Название: Re: Simple-Scada и Arduino
Отправлено: Андрей от 30 Декабря 2015, 07:44:54
Нет. У меня так и не заработало с даласом, библиотеки не совместимы, допиливать нужно. Писал сюда http://www.st4makers.com/support-forum-arduino-opc-server/146-ds18b20-opc разработчик тоже молчит.
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 30 Декабря 2015, 15:47:01
Досадно, придется по модбасу прикручивать. А идея с ардуиновским сервером была чертовски хороша.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 30 Декабря 2015, 16:17:13
Андрей, а почему в Вашем коде команда "sensors.requestTemperatures();" стоит в функции "int item_bool"? Это и есть запрос на чтение температуры, а значит температура будет считана в скаду лишь единожды - во время запуска, ведь событие OnDataChange для температуры больше не выполнится. Поэтому эта строка должна быть в цикле loop.

дополнено: моя ошибка, все же не обязательно ставить requestTemperatures в цикл, ведь в Вашем случае команда будет выполняться при каждом опросе тега со скады и это в целом нормально. Но все-таки правильнее было бы поместить его в loop  

Цитировать
У меня так и не заработало с даласом, библиотеки не совместимы, допиливать нужно.
Почему Вы говорите о несовместимости библиотек? Как мы поняли температура все таки передается в скаду. Но проблема в том, что передается только один раз. Если это так, значит дело может быть не в скаде или датчике, а в коде, который используется для чтения температуры.

Также непонятно почему Вы добавляете тег на OPC как "opc_bool", температура это ведь не 0 или 1, а аналоговое значение. Затем при чтении вы используете int (целочисленный тип), хотя лучше бы это был float (вещественный тип), ведь getTempCByIndex возвращает именно float.

В результате должно получиться вот что:

Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>
OPCSerial aOPCSerial;

int DS = 12;
OneWire oneWire(DS);
DallasTemperature sensors(&oneWire);
float item_temperature(const char *itemID, const opcOperation opcOP, const float value){
     return  sensors.getTempCByIndex(0);
}

void setup() {
  Serial.begin(9600);
  aOPCSerial.setup();
  aOPCSerial.addItem("T", opc_read, opc_float, item_temperature);
}

void loop() {
  sensors.requestTemperatures();
  aOPCSerial.processOPCCommands();
}
Возможно это не решит Вашу проблему, но этот код правильнее. И скажите, передается ли температура в скаду хотя бы один раз?
Название: Re: Simple-Scada и Arduino
Отправлено: janga от 03 Января 2016, 15:51:10
Поставил OPC-Arduino, зарегил, SCADA увидела и добавила в список выбора новый OPC,но потом дичь вылазить-запускаю item property и подключаюсь к ардуиносерверу - в итоге выскакивает неостанавливаемый список дебагов винды, который не остановить даже диспечтером.Что это может быть? Винда 7 32-bit.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 03 Января 2016, 16:00:34
Это просто ошибка OPC-сервера Arduino. Item Property запрашивает у OPC-Arduino список тегов и соответственно OPC-сервер пытается сформировать этот список, но не может, так как тегов нет, или нет подключения к устройству. Если мы не ошибаемся, проблему можно решить если подключить Arduino к компьютеру, скомпилировать проект с одним или более тегов и загрузить его на устройство. После этого Arduino OPC-сервер должен нормально работать с Item-Property.
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 06 Января 2016, 18:30:23
Пробую передачу температуры и влажности с DHT21. Не идет. Код простой как лом.
Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include "DHT.h"

#define DHTPIN 2
#define DHTTYPE DHT21

DHT dht(DHTPIN, DHTTYPE);

OPCSerial aOPCSerial;

float callbackh(const char *itemID, const opcOperation opcOP, const float value){
  return dht.readHumidity();
}

float callbackt(const char *itemID, const opcOperation opcOP, const float value){
  return dht.readTemperature();
}

void setup() {
  Serial.begin(9600);
  dht.begin();

  aOPCSerial.setup();
 
  aOPCSerial.addItem("h",opc_read, opc_int, callbackh);
  aOPCSerial.addItem("t",opc_read, opc_int, callbackt);
}

void loop() {
  //delay (2000); //для экспериментов, если раскомментить идут нули

  aOPCSerial.processOPCCommands();
}
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 06 Января 2016, 19:52:36
Странно это, у нас все работает с датчиком температуры/влажности DHT11, используя такой код:

Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include "DHT.h"

OPCSerial aOPCSerial;

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

float TCallback(const char *itemID, const opcOperation opcOP, const float value){
    return dht.readTemperature();
}

float HCallback(const char *itemID, const opcOperation opcOP, const float value){
    return dht.readHumidity();
}

void setup()
{
  Serial.begin(9600);
  dht.begin();

  aOPCSerial.setup();
  aOPCSerial.addItem("t", opc_read, opc_float, TCallback);
  aOPCSerial.addItem("h", opc_read, opc_float, HCallback);
}

void loop()
{
  aOPCSerial.processOPCCommands();
}
А не через скаду, т.е. средствами Arduino температура/влажность успешно считываются?
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 06 Января 2016, 21:46:10
Не работает. Ваш скетч  то-же самое. Ну заменил в параметрах итема  opc_int на opc_float - ничего. Прошил вашим скетчем - ничего. Чудеса! В стандартном примере в сериал все отдает.
Че делать-то. Свихнусь ведь скоро! На LM35 переходить?
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 06 Января 2016, 22:20:59
Видимо есть ещё какие-то причины такого поведения. Датчик ведь рабочий, значит мы что-то упускаем. Должен же быть какой-то источник у этой проблемы. Вот только идей по его обнаружению пока не возникает.
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 06 Января 2016, 22:28:08
Какая у Вас версия Arduino IDE? Есть разработки по Arduino Mega Server, так у них разные версии IDE по разному работают.  И еще сбросьте пожалуйста библиотеку DHT, которая у Вас, их сейчас много вариантов. Больше ничего в голову не приходит.
PS Еще вспомнил- я на Меге катаюсь.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 07 Января 2016, 09:46:49
Мы используем версию 1.6.5, но если бы дело было в этом, или в библиотеке DHT.h, то в стандартном примере тоже ничего не работало бы. И ещё мы тестируем все на Arduino Uno, а не Mega. Для теста интересно было бы узнать какой результат даст этот код:

Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include "DHT.h"

OPCSerial aOPCSerial;

#define DHTPIN 2
#define DHTTYPE DHT21

DHT dht(DHTPIN, DHTTYPE);

float D2_t = -1;
float D2_h = -1;

float D2_TItem(const char *itemID, const opcOperation opcOP, const float value){
  float t = dht.readTemperature();
  if (isnan(t)) {
    return D2_t;
  } else
    {
      D2_t = t;
      return t;
    }
}

float D2_HItem(const char *itemID, const opcOperation opcOP, const float value){
  float h = dht.readHumidity();
  if (isnan(h)) {
    return D2_h;
  } else
    {
      D2_h = h;
      return h;
    }
}

void setup()
{
  Serial.begin(9600);
  dht.begin();

  aOPCSerial.setup();

  aOPCSerial.addItem("D2_t", opc_read, opc_float, D2_TItem);
  aOPCSerial.addItem("D2_h", opc_read, opc_float, D2_HItem);
}

void loop()
{
  aOPCSerial.processOPCCommands();
}

Что в этом случае отображается в скаде? Значения равные -1?
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 07 Января 2016, 10:18:27
Значений нет. Вот лог с OPC сервер
Код
07.01.2016 10:12:46 > Running OPC Server from C:\ArduinoOPCServer_1_6\ArduinoOPCServer.exe
07.01.2016 10:12:46 > Waiting for OPC clients to connect....
07.01.2016 10:12:46 > Connected client
07.01.2016 10:12:46 > Trying to open COM3 port
07.01.2016 10:12:46 > COM3 port open
07.01.2016 10:12:46 > Asking for available OPCItems from ArduinoSerial0
07.01.2016 10:12:46 > Frame: <0,D2_t,0,3,D2_h,0,3>
2
07.01.2016 10:12:46 > Returned OPC Items ms:16
07.01.2016 10:12:57 > Client asks for: D2_h
07.01.2016 10:12:57 > Not frame received for D2_h
07.01.2016 10:13:38 > Client asks for: D2_h
07.01.2016 10:13:38 > Not frame received for D2_h
07.01.2016 10:13:40 > Client asks for: D2_t
07.01.2016 10:13:40 > Not frame received for D2_t
07.01.2016 10:14:31 > Connected client
07.01.2016 10:14:31 > Asking for available OPCItems from ArduinoSerial0
07.01.2016 10:14:31 > Frame: <0,D2_t,0,3,D2_h,0,3>
2
07.01.2016 10:14:31 > Returned OPC Items ms:31
07.01.2016 10:14:31 > Client asks for: D2_h
07.01.2016 10:14:31 > Not frame received for D2_h
07.01.2016 10:14:31 > Client asks for: D2_h
07.01.2016 10:14:31 > Not frame received for D2_h
07.01.2016 10:14:31 > Client asks for: D2_t
07.01.2016 10:14:31 > Received D2_t value OK. Returned frame:20.00 length:5 Frame: 32302E3030
07.01.2016 10:14:31 > Client asks for: D2_t
07.01.2016 10:14:31 > Not frame received for D2_t
07.01.2016 10:14:35 > Client asks for: D2_h
07.01.2016 10:14:35 > Not frame received for D2_h
07.01.2016 10:14:35 > Client asks for: D2_t
07.01.2016 10:14:35 > Not frame received for D2_t
07.01.2016 10:14:37 > Client asks for: D2_h
07.01.2016 10:14:37 > Not frame received for D2_h
07.01.2016 10:14:37 > Client asks for: D2_t
07.01.2016 10:14:37 > Not frame received for D2_t
07.01.2016 10:14:39 > Client asks for: D2_h
07.01.2016 10:14:39 > Not frame received for D2_h
07.01.2016 10:14:39 > Client asks for: D2_t
07.01.2016 10:14:39 > Not frame received for D2_t
07.01.2016 10:14:41 > Client asks for: D2_h
07.01.2016 10:14:41 > Not frame received for D2_h
07.01.2016 10:14:41 > Client asks for: D2_t
07.01.2016 10:14:41 > Not frame received for D2_t
07.01.2016 10:14:43 > Client asks for: D2_h
07.01.2016 10:14:43 > Not frame received for D2_h
07.01.2016 10:14:43 > Client asks for: D2_t
07.01.2016 10:14:43 > Not frame received for D2_t
07.01.2016 10:14:45 > Client asks for: D2_h
07.01.2016 10:14:45 > Not frame received for D2_h
07.01.2016 10:14:45 > Client asks for: D2_t
07.01.2016 10:14:45 > Not frame received for D2_t
07.01.2016 10:14:47 > Client asks for: D2_h
07.01.2016 10:14:47 > Not frame received for D2_h
07.01.2016 10:14:47 > Client asks for: D2_t
07.01.2016 10:14:47 > Not frame received for D2_t
07.01.2016 10:14:49 > Client asks for: D2_h
07.01.2016 10:14:49 > Not frame received for D2_h
07.01.2016 10:14:49 > Client asks for: D2_t
07.01.2016 10:14:49 > Not frame received for D2_t
07.01.2016 10:14:51 > Client asks for: D2_h
07.01.2016 10:14:51 > Not frame received for D2_h
07.01.2016 10:14:51 > Client asks for: D2_t
07.01.2016 10:14:51 > Not frame received for D2_t
07.01.2016 10:14:53 > Client asks for: D2_h
07.01.2016 10:14:53 > Not frame received for D2_h
07.01.2016 10:14:53 > Client asks for: D2_t
07.01.2016 10:14:53 > Not frame received for D2_t
07.01.2016 10:14:55 > Client asks for: D2_h
07.01.2016 10:14:55 > Not frame received for D2_h
07.01.2016 10:14:55 > Client asks for: D2_t
07.01.2016 10:14:55 > Not frame received for D2_t
07.01.2016 10:14:57 > Client asks for: D2_h
07.01.2016 10:14:57 > Not frame received for D2_h
07.01.2016 10:14:57 > Client asks for: D2_t
07.01.2016 10:14:57 > Not frame received for D2_t
07.01.2016 10:14:59 > Client asks for: D2_h
07.01.2016 10:14:59 > Not frame received for D2_h
07.01.2016 10:14:59 > Client asks for: D2_t
07.01.2016 10:14:59 > Not frame received for D2_t
07.01.2016 10:15:01 > Client asks for: D2_h
07.01.2016 10:15:01 > Not frame received for D2_h
07.01.2016 10:15:01 > Client asks for: D2_t
07.01.2016 10:15:01 > Not frame received for D2_t
07.01.2016 10:15:03 > Client asks for: D2_h
07.01.2016 10:15:03 > Not frame received for D2_h
07.01.2016 10:15:03 > Client asks for: D2_t
07.01.2016 10:15:03 > Not frame received for D2_t
07.01.2016 10:15:05 > Client asks for: D2_h
07.01.2016 10:15:05 > Not frame received for D2_h
07.01.2016 10:15:05 > Client asks for: D2_t
07.01.2016 10:15:05 > Not frame received for D2_t
07.01.2016 10:15:07 > Client asks for: D2_h
07.01.2016 10:15:07 > Not frame received for D2_h
07.01.2016 10:15:07 > Client asks for: D2_t
07.01.2016 10:15:07 > Not frame received for D2_t
07.01.2016 10:15:07 > Disconnected client Simple-Scada OPC client
Судя по логу, один раз температура ушла.
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 07 Января 2016, 12:43:38
Решение пришло неожиданно. Меня заинтересовало, что в цикле loop внесение задержки delay от 150 и выше вызывало нулевые показания на выходе и(или) прекращение отдачи данных , при delay ниже 150 показания не отдавались вообще или отдавались однократно. Как мне подумалось тут что-то нечисто с прерываниями, по моему они как-то затрагивают таймер, работающий с delay, а именно он, как я где-то читал, часто используется в библиотеке DHT. В общем я на время получения данных решил запретить прерывания, а потом разрешить. ВУАЛЯ- ЗАРАБОТАЛО!
Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include "DHT.h"

OPCSerial aOPCSerial;

#define DHTPIN 2
#define DHTTYPE DHT21

DHT dht(DHTPIN, DHTTYPE);

float D2_t = -1;
float D2_h = -1;

float D2_TItem(const char *itemID, const opcOperation opcOP, const float value){
  noInterrupts();
  float t = dht.readTemperature();
  interrupts();
  if (isnan(t)) {
    return D2_t;
  } else
    {
      D2_t = t;
      return t;
    }
}

float D2_HItem(const char *itemID, const opcOperation opcOP, const float value){
  noInterrupts();
  float h = dht.readHumidity();
  interrupts();
  if (isnan(h)) {
    return D2_h;
  } else
    {
      D2_h = h;
      return h;
    }
}

void setup()
{
  Serial.begin(9600);
  dht.begin();

  aOPCSerial.setup();

  aOPCSerial.addItem("D2_t", opc_read, opc_float, D2_TItem);
  aOPCSerial.addItem("D2_h", opc_read, opc_float, D2_HItem);
}

void loop()
{

  aOPCSerial.processOPCCommands();
}


Есть у меня подноздрения, что подобный костыль в скетче с далласовскими датчиками решит проблему, т.к. в их библиотеке delay-ев, наверное, как на собаке блох.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 07 Января 2016, 14:17:25
Интересное решение!
Название: Re: Simple-Scada и Arduino
Отправлено: albatros от 19 Января 2016, 11:40:39
 Добрый день.
 В программировании полный ноль, так что не судите строго.
Решил подцепить вашу Scada к своему проекту. Перед этим загрузил ваш скетч, все работает. По образцу вашего кода ввел для эксперимента в свой проект код для двух переменных. Так как проект большой, то выкладываю только код для этих двух переменных _gtv1 и _gtv2.

Код: (c++)
int _gtv1 = 15;
int _gtv2 = 75;

int _gtv1_Item(const char *itemID, const opcOperation opcOP, const int value){
  return analogRead(_gtv1);
}

int _gtv2_Item(const char *itemID, const opcOperation opcOP, const int value){
  return analogRead(_gtv2);
}

  aOPCSerial.addItem("_gtv1", opc_read, opc_int, _gtv1_Item);
  aOPCSerial.addItem("_gtv2", opc_read, opc_int, _gtv2_Item);

Реальные параметры для _gtv1 и _gtv2: 26 и 28 соответственно, что у меня отображается на LCD дисплее.
При подключении Scada вижу такую картину:

(http://ekonomgroup.com/images/2016-01-19 10-01-04 Скриншот экрана.png)

В dOPC Explorer вид такой:
(http://ekonomgroup.com/images/2016-01-19 10-02-39 Скриншот экрана.png)

Причем эти показания не статичные, а меняются для первой переменной примерно с 580 до 590, для второй 798-799.
В dOPC Explorer цифры немного другие.
А должно быть 26 и 28.
Можете-ли вы мне подсказать что я делаю не так.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 19 Января 2016, 11:51:31
Здравствуйте!

То что Вы видите в Simple-Scada - это аналоговые значения на пинах номер 15 и номер 75 соответственно, которые возвращает функция analogRead. При помощи этой функции Arduino просто преобразовывает входной сигнал от 0 до 5 вольт в свою вирутальную шкалу от 0 до 1023. Т.е. шкала [0..5V] соответствует шкале [0..1023 ед.]. А Вы уже должны преобразовывать шкалу для своих нужд. В Simple-Scada для этого у некоторых компонентов есть свойства визуальной шкалы (виз.минимум, виз.максимум). Например у компонента "Поле" или "Уровень". И Вы можете использовать эти свойства, чтобы преобразовать полученные числа к нужным значениям.

В итоге, Вы можете поставить компонент поле и указать в нём минимум = 0, максимум = 1023, виз.минимум = 0, виз. максимум = максимальному значению с датчика. Т.е. если у Вас датчик температуры от 0 до 80, то и виз. максимум должен быть 80.
Название: Re: Simple-Scada и Arduino
Отправлено: albatros от 19 Января 2016, 12:02:17
Вот не ожидал такого быстрого отклика, спасибо!
А как мне получить значение переменной _gtv1?, а не входа номер 15. Дело в том что программу я писал в FDB, СИ я просто не знаю. 15 и 75 это предустановленные значения переменных _gtv1 и _gtv2, которые потом меняются с клавиатуры, сейчас эти параметры у меня выставлены 26 и 28, как мне их увидеть в Scada?
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 19 Января 2016, 12:03:35
Очень просто, для этого вы должны писать так, не используя analogRead:

Код: (c++)
int _gtv1_Item(const char *itemID, const opcOperation opcOP, const int value){
  return _gtv1;
}
Название: Re: Simple-Scada и Arduino
Отправлено: albatros от 19 Января 2016, 12:08:54
Спасибо огромное, буду пробовать.
Как с обидой говорит один мой знакомый когда у него в очередной раз ничего не получается: - Ну да, когда знаешь, тогда легко. :D
Название: Re: Simple-Scada и Arduino
Отправлено: albatros от 19 Января 2016, 15:12:34
Спасибо, с чтением все получилось, а как поменять значение этой переменной в контроллере из Scada. В редакторе в колонке Доступ стоит чтение и запись, меняю значение в Scada, но значение не меняется.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 19 Января 2016, 15:27:30
Для записи нужно изменить функцию вот так:

Код: (c++)
int _gtv1_Item(const char *itemID, const opcOperation opcOP, const int value){
  // Если Simple-Scada пытается записать новое значение в _gtv1
  if (opcOP == opc_opwrite) {
    _gtv1 = value;
  }

  return _gtv1;
}
Название: Re: Simple-Scada и Arduino
Отправлено: albatros от 19 Января 2016, 16:42:52
 Много разных платных продуктов использовал, но такой поддержки нигде не встречал. Вы лучшие!
 Спасибо, все получилось. Закончу проект, выложу скрины в соответствующей ветке.
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 26 Января 2016, 16:35:35
Добрый день, 2ой день мучаюсь ничего не получается, делаю все в точности как в вашей инструкции, заливаю ваш код. Сервер регистрируется, НО, в ItemProperty выбираю ArduinoOOPSServer.1 жму коннект выскакивает "interface not supported" вот лог из ArduinoOPCServer
Код
26.01.2016 20:29:55 > Running OPC Server from G:\opc\ArduinoOPCServer.exe
26.01.2016 20:29:55 > Waiting for OPC clients to connect....
26.01.2016 20:30:10 > Connected client
26.01.2016 20:30:10 > Trying to open COM3 port
26.01.2016 20:30:10 > COM3 port open
26.01.2016 20:30:10 > Asking for available OPCItems from ArduinoSerial0
26.01.2016 20:30:10 > Frame: <0,MyVirtualItem,2,1,D3,2,2,D5,2,2,D6,2,2,D9,2,2,D10,2,2,D11,2,2,AI0,0,2,AI1,0,2,AI2,0,2,AI3,0,2,AI4,0,2,AI5,0,2>
13
26.01.2016 20:30:10 > Returned OPC Items ms:140
Соответственно в simple-scade вставляю объект поле привязываю адрес ArduinoSerial0.AI0, в настройках скады опс сервер вижу, запускаю проект и поле с крестом.... Подскажите , что делать, куда копать.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 26 Января 2016, 16:37:03
Здравствуйте!

А Вы установили OPC Core Components (http://simple-scada.com/%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8)?
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 26 Января 2016, 17:04:33
Опс, упустил этот момент, НО сейчас попробовал эта штука не устанавливается...
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 26 Января 2016, 17:05:31
А какая возникает ошибка? Если Вы работаете под Windows 7 и выше, выполняйте запуск от имени администратора.
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 26 Января 2016, 17:19:40
ругается на Windows Installer, у меня почему-то нету этой службы, сейчас буду разбираться, попозже отпишусь о результатах.
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 26 Января 2016, 18:38:41
Огромное спасибо, действительно дело оказалось в OPC companent.
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 27 Января 2016, 14:44:32
Появился один не большой вопрос, можно ли как то убрать следующую ситуацию :
Запускаю проект скада считывает значение температуры т=21 и тут же пишет 0. и так каждую секунду 21 0 21 0 и т.д
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 27 Января 2016, 15:03:53
Эту проблему можно решить очень просто. Создайте буферную переменную в которую никогда не записывайте 0. Храните в ней только реальные значения и используйте её в скаде.

Вот пример. Здесь в скаду возвращается либо текущая температура, если её удалось считать. Либо успешно считанная в последний раз температура:

Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include "DHT.h"

OPCSerial aOPCSerial;

#define DHTPIN 2
#define DHTTYPE DHT21

DHT dht(DHTPIN, DHTTYPE);

float TempBuffer = -1;

float TempItem(const char *itemID, const opcOperation opcOP, const float value){
  float t = dht.readTemperature();

  // Если температуру считать не удалось
  if ((isnan(t)) || (t < 1)) {
    return TempBuffer;
  } else
    // Если температура была успешно считана
    {
      TempBuffer = t;
      return t;
    }
}

void setup()
{
  Serial.begin(9600);
  dht.begin();

  aOPCSerial.setup();
  aOPCSerial.addItem("Temperature", opc_read, opc_float, TempItem);
}

void loop()
{
  aOPCSerial.processOPCCommands();
}
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 27 Января 2016, 15:21:46
К сожалению ничего не изменилось
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 27 Января 2016, 15:23:21
Вы используете именно тот код, который представлен выше? Или с какими-то изменениями? Если есть изменения, то покажите Ваш код.
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 27 Января 2016, 15:28:30
Использую именно ваш код (скада так же меняет значение очень быстро с нуля на реальные показания)
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 27 Января 2016, 15:35:32
А если перенести чтение в loop-цикл, вот так:
Ещё можно попробовать раскомментировать строчку с delay.
Также в этой теме выше об одном решении писал garry. Возможно поможет отключение прерываний на момент считывания температуры.

Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include "DHT.h"

OPCSerial aOPCSerial;

#define DHTPIN 2
#define DHTTYPE DHT21

DHT dht(DHTPIN, DHTTYPE);

float TempBuffer = -1;

float TempItem(const char *itemID, const opcOperation opcOP, const float value){
    return TempBuffer;
}

void setup()
{
  Serial.begin(9600);
  dht.begin();

  aOPCSerial.setup();
  aOPCSerial.addItem("Temperature", opc_read, opc_float, TempItem);
}

void loop()
{
  float t = dht.readTemperature();
 
  // Если температуру считать не удалось
  if ((isnan(t)) || (t < 1)) {
   
  } else
    // Если температура была успешно считана
    {
      TempBuffer = t;
    }

  // Здесь ещё можно сделать тесты с delay
  // delay (2000);

  aOPCSerial.processOPCCommands();
}
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 27 Января 2016, 15:46:52
Ваш код не компилируется(
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 27 Января 2016, 16:02:16
Ваш код не компилируется(
А подробнее, какие ошибки?
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 27 Января 2016, 16:04:20
ругается на
if ((isnan(t)) || (t < 1)) {
    return TempBuffer;
  } else
    // Если температура была успешно считана
    {
      TempBuffer = t;
      return t;
    }
пробовал вынести в отдельную функцию, не помогло не могу понять, что ему надо...
sketch_jan27b.ino:35:12: error: return-statement with a value, in function returning 'void' [-fpermissive]
sketch_jan27b.ino:40:14: error: return-statement with a value, in function returning 'void' [-fpermissive]
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 27 Января 2016, 16:07:16
Исправил код в сообщении выше.
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 27 Января 2016, 16:19:30
Без изменений, с делеем все понятно, если ставить задержку в  скетче то получается нулевое значение как раз на время задержки.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 27 Января 2016, 16:20:45
а с "noInterrupts();" тоже не получается?
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 27 Января 2016, 16:23:25
Без изменений, с делеем все понятно, если ставить задержку в  скетче то получается нулевое значение как раз на время задержки.
Среда разработки 1.6.7 ?
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 27 Января 2016, 16:34:58
среда 1.7.7 , но думаю роли это не играет, сдвинулось с места, сейчас при запуске не моргает температура меняется в зависимости от нагрева/остывания, но периодически опять начинает меняться и через некоторое время температура снова опускается/поднимается и так по кругу.
С noInterrupts(); отказывается вообще считывать показания.
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 27 Января 2016, 18:03:00
среда 1.7.7 , но думаю роли это не играет, сдвинулось с места, сейчас при запуске не моргает температура меняется в зависимости от нагрева/остывания, но периодически опять начинает меняться и через некоторое время температура снова опускается/поднимается и так по кругу.
С noInterrupts(); отказывается вообще считывать показания.
Попробуйте мой скетч с 18-го поста в этой теме.  Сначала noInterrupts();
  потом считываем показания, затем  interrupts();
 Версия имеет значение, в 1.6.5 правильно компилируются скетчи от разработчика Simple Scada, в версии 1.6.7 уже не катят, нужно запрещать, а потом разрешать прерывания. Подобная несовместимость версий компилятора обсуждалась  на форуме arduino mega server, там все разработки правильно компилируются только в среде 1.6.5. В более высоких версиях, по другому оптимизируется код, что вызывает сбои в работе таймеров delay, используемых библиотекой DHT, при использовании прерываний библиотекой ArudinoOPCserver.
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 27 Января 2016, 18:13:07
Ваш код пробовал неоднократно, значения вообще не читает, скомпилировал в 1.6.5. вот лог с опс
e: 2D312E3030
27.01.2016 22:11:12 > Client asks for: D2_t
27.01.2016 22:11:12 > Received D2_t value OK. Returned frame:-1.00 length:5 Frame: 2D312E3030
27.01.2016 22:11:12 > Client asks for: D2_h
27.01.2016 22:11:12 > Received D2_h value OK. Returned frame:-1.00 length:5 Frame: 2D312E3030
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 27 Января 2016, 18:20:58
Ваш код пробовал неоднократно, значения вообще не читает, скомпилировал в 1.6.5. вот лог с опс
e: 2D312E3030
27.01.2016 22:11:12 > Client asks for: D2_t
27.01.2016 22:11:12 > Received D2_t value OK. Returned frame:-1.00 length:5 Frame: 2D312E3030
27.01.2016 22:11:12 > Client asks for: D2_h
27.01.2016 22:11:12 > Received D2_h value OK. Returned frame:-1.00 length:5 Frame: 2D312E3030
Весьма странно, попробуйте мой код, в среде 1.6.7 как у меня. Не подумайте ничего плохого, а в меняете в моем скетче строки
#define DHTPIN 2
#define DHTTYPE DHT21
в соответствии с вашей схемой?
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 27 Января 2016, 18:25:37
да тут и нечего думать плохо, по запаре можно и ошибиться в простом:) , но к сожалению это не тот случай, единственная разница у меня дтх11, а подключен так же к 2 пину. уже не знаю что и делать......
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 27 Января 2016, 18:34:42
да тут и нечего думать плохо, по запаре можно и ошибиться в простом:) , но к сожалению это не тот случай, единственная разница у меня дтх11, а подключен так же к 2 пину. уже не знаю что и делать......
моя библиотека DHT
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 27 Января 2016, 18:38:09
Попробуйте в 1.6.7, если не пойдет, то выложите мой код в том виде в котором вы его компилируете
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 27 Января 2016, 19:22:34
ничего не получается.... я так понимаю у вас с вашим кодом все прекрасно работает?
Вот именно этот код я заливаю: (единственное изменение это тип датчика...)
Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include "DHT.h"

OPCSerial aOPCSerial;

#define DHTPIN 2
#define DHTTYPE DHT11

DHT dht(DHTPIN, DHTTYPE);

float D2_t = -1;
float D2_h = -1;

float D2_TItem(const char *itemID, const opcOperation opcOP, const float value){
  noInterrupts();
  float t = dht.readTemperature();
  interrupts();
  if (isnan(t)) {
    return D2_t;
  } else
    {
      D2_t = t;
      return t;
    }
}

float D2_HItem(const char *itemID, const opcOperation opcOP, const float value){
  noInterrupts();
  float h = dht.readHumidity();
  interrupts();
  if (isnan(h)) {
    return D2_h;
  } else
    {
      D2_h = h;
      return h;
    }
}

void setup()
{
  Serial.begin(9600);
  dht.begin();

  aOPCSerial.setup();

  aOPCSerial.addItem("D2_t", opc_read, opc_float, D2_TItem);
  aOPCSerial.addItem("D2_h", opc_read, opc_float, D2_HItem);
}

void loop()
{

  aOPCSerial.processOPCCommands();
}
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 27 Января 2016, 19:37:37
Пока мыслей нет, подумаю до завтра. А сигнальную ногу датчика через резистор к питанию подтянули?
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 27 Января 2016, 19:48:07
Да, 10 кОм, такое ощущение , что ответ где то близко, последний скетч, который выложил администратор дал некоторые результаты, но до конца победить не удаётся. ...
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 27 Января 2016, 19:52:23
После float t = dht.readTemperature();
воткнуть delay (2000); попробуй
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 28 Января 2016, 13:42:55
попробовал, безрезультатно.
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 28 Января 2016, 16:57:47
Вроде победил, потещу отпишусь, НО решение нашлось только для дтх11, сначала пробовал считывать температуру без библиотеки, но получились полные костыли, нашел самую простенькую библиотеку именно для ДТХ11, самому мне не по силам разобраться с библиотекой DHT (проблема в задержках), мб найдутся люди которые смогут поправить косяк.
Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include <dht11.h>
dht11 DHT;               // Объявление переменной класса dht11
#define DHT11_PIN 2
OPCSerial aOPCSerial;


float TempItem(const char *itemID, const opcOperation opcOP, const float value){
  DHT.read(DHT11_PIN);
   return(DHT.temperature);
}
float HumItem(const char *itemID, const opcOperation opcOP, const float value){
  DHT.read(DHT11_PIN);
   return(DHT.humidity);
}

void setup()
{
  Serial.begin(9600);
 

  aOPCSerial.setup();
  aOPCSerial.addItem("Temperature", opc_read, opc_float, TempItem);
  aOPCSerial.addItem("Humidity", opc_read, opc_float, HumItem);
}

void loop()
{

  aOPCSerial.processOPCCommands();
}
Вот мой код, мб кому то пригодится, если нужно скину библиотеку.
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 28 Января 2016, 18:11:58
Молодец! А ардуинка какая?
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 29 Января 2016, 08:52:29
Тестрировал все на Уно,  не думаю , что с другими будет проблемы. Попутно извиняюсь за свою назойливость , но не подскажите как работать с цифровым портом, не шим. Пробовал как в примерах вышел светодиод только гаснет , пробовал передавать led !led т.е менять состояние , но что-то отказывается работать ....
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 31 Января 2016, 12:53:24
Неужели никто не подскажет? В примере админа регистрируются цифровые пины, но примера работы с ними нет(((
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 31 Января 2016, 14:13:59
Что-то мы пропустили Ваш вопрос. С аналоговыми все как и с цифровыми ШИМ, только нужно использовать AnologRead вместо DigitalRead. А что Вы хотите сделать с светодиодом? Регулировать его яркость? Если да, то ШИМ для этого как раз и нужен. В этом его суть, он задает частоту дискретных импульсов, что и позволяет ему работать как подобие аналогового выхода.

Кстати, в Arduino Uno есть только аналоговые входы, поэтому использовать Вы их можете только для "чтения" сигналов в каких-нибудь датчиков, но не для управления.
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 31 Января 2016, 15:10:48
Я хочу просто включать, выключать светодиод, на цифровом порту, НЕ ШИМ. В вашем примере вы регистрируете пины
Код: (c++)
// Цифровые
int D0 = 0;
int D1 = 1;
int D2 = 2;
int D4 = 4;
int D7 = 7;
int D8 = 8;
int D12 = 12;
Дальше по коду вы описываете, как управлять ШИМ портом и читать данные с Аналоговых портов. Но про пины 0,1,2,...12. дальше по коду ничего нету.
Т.Е фактически надо давать со скады одну команду, а в ардуино инвертировать значение пина  LED = !LED.
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 01 Февраля 2016, 11:06:45
Не надо ничего инвертировать, вы в цифорвой пин пишете 0 или 1, они идут со скады. В комплекте с библиотекой есть готовый пример как раз для светодиода.
Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>

/* Declaring the OPC object */
OPCSerial aOPCSerial;

/* set led status from OPC Client */
int ledPin = 13;

/* create a callback function for the OPCItem */
bool callback(const char *itemID, const opcOperation opcOP, const bool value){
  static bool ledValue = false;
 
  /* if operation is a write command from OPC Client */
  if (opcOP == opc_opwrite) {
    ledValue = value;
   
    if (ledValue) 
      digitalWrite(ledPin, HIGH);
    else
      digitalWrite(ledPin, LOW);
  }
  else
    /* read the led status  */
    return ledValue; 
}

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
 
  /* OPC Object initialization */
  aOPCSerial.setup(); 
 
  /* led OPCItem declaration */
  aOPCSerial.addItem("led",opc_readwrite, opc_bool, callback);
}

void loop() {
  /* OPC process commands */
  aOPCSerial.processOPCCommands();
}
Название: Re: Simple-Scada и Arduino
Отправлено: Borisso от 06 Февраля 2016, 17:52:05
ЭЛЕМЕНТАРНОЕ!!  Не могу вывести показания температуры или простого потенциометра в Scada. Простой мониторинг порта без проблем, вывод в Scada и тишина.....!!! Arduino OPC-сервер 1.6 работает замечательно. В Simple_Scada выставлен ArduinoOPCServer.1.  Адрес, для ЕДИНСТВЕННОГО аналог.выхода ArduinoSerial0.AI0.  А в Simple-Scada ни одного значения!!!!!   Помогите пожалуйста скетчем, советом, примером!!!
Название: Re: Simple-Scada и Arduino
Отправлено: albatros от 07 Февраля 2016, 10:59:55
Почитайте эту тему с 20 поста вниз, у меня все получилось. Единственно мне надо было читать переменные, но основной пример у разработчика в начале схемы как раз на чтение портов.
Название: Re: Simple-Scada и Arduino
Отправлено: Borisso от 09 Февраля 2016, 16:28:38
Датчик температуры LM35 и обычный потенциометр. Сидят на аналоговых A0 и A1. В SimpleScada два поле под эти значения. Все показывает, НО когда потенциометр проходит отметку в 180, показания температуры начинают прыгать от 11 до 37. Ставишь потенциометр  0, температура возвращается в норму 22-23. ПОДСКАЖИТЕ как исправить это!!!!
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 27 Февраля 2016, 11:28:38
Я победил подлый OPC сервер для ардуинки!!!! Теперь можно работать с датчиками DS18B20!
Родную библиотеку  Dallastemperature - долой! Читаем напрямки, скетч под 2 датчика ниже:
Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include <OneWire.h>

OPCSerial aOPCSerial;

OneWire ds (4);
byte data[12];
byte addr1[8] = {0x28, 0xFF, 0xE0, 0x5A, 0x71, 0x15, 0x01, 0x58}; // ID индивидуально для каждого датчика
byte addr2[8] = {0x28, 0xFF, 0x83, 0x4E, 0x71, 0x15, 0x02, 0xD3};
unsigned int raw;
float temp1, temp2;

//OneWire oneWire(DS);
//DallasTemperature sensors(&oneWire);
float item_temperature1(const char *itemID, const opcOperation opcOP, const float value){
     temp1 = DS18B20(addr1);
     return  temp1;
}     
float item_temperature2(const char *itemID, const opcOperation opcOP, const float value){
     temp2 = DS18B20(addr2);
     return  temp2;
}

void setup() {
 
  Serial.begin(9600);
  aOPCSerial.setup();
  aOPCSerial.addItem("T1", opc_read, opc_float, item_temperature1);
  aOPCSerial.addItem("T2", opc_read, opc_float, item_temperature2);
}

void loop() {
  //sensors.requestTemperatures();
  aOPCSerial.processOPCCommands();
}
float DS18B20(byte *adres)
{
  ds.reset();
  ds.select(adres);
  ds.write(0x44, 1); // start conversion, with parasite power on at the end
  ds.reset();
  ds.select(adres);
  ds.write(0xBE); // Read Scratchpad

  for (byte i = 0; i < 9; i++) // можно увеличить точность измерения до 0.0625 *С (от 9 до 12 бит)
  { // we need 9 bytes
    data[i] = ds.read ();
  }
  raw =  (data[1] << 8) | data[0];//=======Пересчитываем в температуру
  float celsius =  (float)raw / 16.0;
  return celsius;
}
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 27 Февраля 2016, 11:30:25
Достойно!  : ;)
Название: Re: Simple-Scada и Arduino
Отправлено: HAyMOB от 05 Марта 2016, 23:12:48
Неужели никто не подскажет? В примере админа регистрируются цифровые пины, но примера работы с ними нет(((
Пример (переписал местный для теста) для цифровых выходов (НЕ ШИМ) + проект для СКАДы, может потом кому понадобится...

Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>

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

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

// Цифровые ШИМ (или 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;
}


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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

  //регистрируем цифровые для Simple-Scada, и даем им имена D2, D4... и так далее
  // эти имена нужно указывать в Simple-Scada в качестве Адреса
  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);
  aOPCSerial.addItem("D13", opc_readwrite, opc_int, D13_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(D2, OUTPUT);
  pinMode(D4, OUTPUT);
  pinMode(D7, OUTPUT);
  pinMode(D8, OUTPUT);
  pinMode(D12, OUTPUT);
  pinMode(D13, OUTPUT);
}

void loop()
{
  // ОБЯЗАТЕЛЬНО! Выполняем OPC-команды в цикле
  aOPCSerial.processOPCCommands();
}
Название: Re: Simple-Scada и Arduino
Отправлено: Al_Kuz от 09 Марта 2016, 22:44:50
Garry и НАуМОВ спасибо за примеры, все получилось, пробовал  с китайской ноной. Вопрос к Garry, выводятся ли у Вас в Scade отрицательные значения температуры? У меня ни в какую. То ли в скетче что не так, то ли в скаде...

Код: (c++)
#include <OPC.h>
#include <OneWire.h>

OPCSerial aOPCSerial;

OneWire ds (7);
byte data[2];
unsigned int raw;

float item_temperature1(const char *itemID, const opcOperation opcOP, const float value){
         return  Read_Temp();
}     

void setup() {
 
  Serial.begin(9600);
  aOPCSerial.setup();
  aOPCSerial.addItem("T1", opc_read, opc_float, item_temperature1);
  }

void loop() {
   aOPCSerial.processOPCCommands();
}
float Read_Temp (void)
{
  ds.reset();
  ds.write(0xCC);
  ds.write(0x44); // start conversion, with parasite power on at the end
 
  ds.reset();
  ds.write(0xCC);
  ds.write(0xBE); // Read Scratchpad

  data[0] = ds.read ();
  data[1] = ds.read ();

  raw =  (data[1] << 8) | data[0];//=======Пересчитываем в температуру
  return (float)raw / 16.0;
}
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 09 Марта 2016, 23:03:08
Al_Kuz, в скаде на этот счет можете не сомневаться  ;). У Вас ведь в коде переменная raw объявлена:
Код: (c++)
unsigned int raw;
как беззнаковое целое число.
Название: Re: Simple-Scada и Arduino
Отправлено: Al_Kuz от 09 Марта 2016, 23:57:22
Точно, так и есть. Поставил int и стало показывать минус. Спасибо, ребята! А я понадеялся на приведение типов
Код
return (float)raw / 16.0;
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 10 Марта 2016, 07:43:31
У меня такой задачи не возникало: датчики на отопление стоять будут, но теперь приму к сведению, я тоже упустил этот момент. Спасибо!
Название: Re: Simple-Scada и Arduino
Отправлено: Simple Scada от 20 Марта 2016, 11:22:21
Сделали три небольших видео с Simple-Scada 2 и Arduino. Сам проект можно скачать здесь (http://simple-scada.com/downloads/ArduinoProject.rar).



Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 20 Марта 2016, 17:40:33
Получилось у меня запустить через Езернет, но есть одно НО... мб кто-то подскажет, получаю вот такую штуку в opc server
Цитировать
20.03.2016 21:34:25 > Asking for available OPCItems from ArduinoEthernet0
20.03.2016 21:34:26 > Frame: [{"ItemId":"Temperature","AccessRight":"0","ItemType":"3"},{"ItemId":"Humidity","AccessRight":"0","ItemType":"3"},{"ItemId":"RELE01","AccessRight":"2","ItemType":"0"},{"ItemId":"RELE02","AccessRight":"2","ItemType":"0"},{"ItemId":"RELE03","AccessRight":"2","ItemType":"0"},{"ItemId":"RELE04","AccessRight":"2","ItemType":"0"},{"ItemId":"RELE05","AccessRight":"2","ItemType":"0"},
Хотя если делать тоже самое но с ArduinoSerial все нормально получается тип данных определяется коректно и графические шкалы работают, через езернет любой канал определяется стрингом и графические шкалы не работают, код в ардуинке не меняется... мб нужно как то в ручную указывать тип данных в случае с aOPCEthernet ?
Название: Re: Simple-Scada и Arduino
Отправлено: SLR от 21 Марта 2016, 06:24:06
Опять 25, удалось победить температуру, прописав в скетче int вместо float, но теперь проблема с реле, сначала думал, что, что-то у меня в коде не так, хотя с ArduinoSerial все работает как надо, но потом попробовал залить стандартный пример из библиотеки,
вот часть кода :
Код: (c++)
bool callback(const char *itemID, const opcOperation opcOP, const bool value){
  static bool ledValue = false;
 
  /* if operation is a write command from OPC Client */
  if (opcOP == opc_opwrite) {
    ledValue = value;
   
    if (ledValue) 
      digitalWrite(ledPin, HIGH);
    else
      digitalWrite(ledPin, LOW);
  }
  else
    /* read the led status */
    return ledValue; 
}
Но при заливке светодиод всегда горит, хоть и чуть тусклее, при нажатие кнопки в скаде светодиод моргает. Видимо что-то не так в самой библиотеке, с ethernet'ом... Победить пока не удается...(
Название: Re: Simple-Scada и Arduino
Отправлено: matroskin55 от 26 Марта 2016, 15:23:04
А когда Simple-Scada 2 будет доступен для скачивания ?
И будет ли когда клиентская часть под Андроид планшеты... ?
Название: Re: Simple-Scada и Arduino
Отправлено: Simple_Scada от 27 Марта 2016, 10:52:22
Цитировать
А когда Simple-Scada 2 будет доступен для скачивания ?
Точно сказать очень трудно - постараемся закончить к концу апреля. Тестовую версию отправили Вам на почту.

Цитировать
И будет ли когда клиентская часть под Андроид планшеты... ?
Да, такое в планах есть, но будет это не скоро.
Название: Re: Simple-Scada и Arduino
Отправлено: ariel от 28 Марта 2016, 20:33:52
Disculpen , solo hablo español, soy de argentina.

He usado este bosquejo:
Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>

// Declaring the OPC object
OPCSerial aOPCSerial;

// set led status from OPC Client
int ledPin = 13;

// create a callback function for the OPCItem
bool callback(const char *itemID, const opcOperation opcOP, const bool value){
  static bool ledValue = false;
 
  // if operation is a write command from OPC Client
  if (opcOP == opc_opwrite) {
    ledValue = value;
   
    if (ledValue) 
      digitalWrite(ledPin, HIGH);
    else
      digitalWrite(ledPin, LOW);
  }
  else
    // read the led status
    return ledValue; 
}

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
 
  // OPC Object initialization
  aOPCSerial.setup(); 
 
   // led OPCItem declaration
  aOPCSerial.addItem("led",opc_readwrite, opc_bool, callback);
}

void loop() {
  // OPC process commands
  aOPCSerial.processOPCCommands();
}
Y el servidor opc, responde bien. ya que con otros sofwares lo he usado.
pero realmente me quiero mudar a simple scada. pero no puedo leer el estado de la varible "led" .

he creado un botón y en la dirección le puse" ArduinoSerial0.led" . pero no se comunica.
En configuracion me aparece "ArduinoOPCserver.1" y lo selecciono.
computer: localhost
OPC_server: ArduinoOPCserver.1

Por favor, alguna recomendacion.
Desde ya muchas gracias
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 28 Марта 2016, 20:44:59
Utilice ItemProperty (http://www.simple-scada.com/downloads/ItemProperty.rar) en la página de descargas, para averiguar la dirección de la etiqueta y la utilice para el botón. El estado de los botones y reflejará el estado del LED
Название: Re: Simple-Scada и Arduino
Отправлено: ariel от 28 Марта 2016, 20:50:49
OPC property info
Item Id :ArduinoSerial0.led
Note_
DataType 11
Readable     ok
Writable       ok



Según lo que veo , esta todo bien.

Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 28 Марта 2016, 20:55:28
ariel, prueba este código:

Код: (c++)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>

// Declaring the OPC object
OPCSerial aOPCSerial;

// set led status from OPC Client
int ledPin = 13;

// create a callback function for the OPCItem
int callback(const char *itemID, const opcOperation opcOP, const int value){
  static int ledValue = 0;
 
  // if operation is a write command from OPC Client
  if (opcOP == opc_opwrite) {
    ledValue = value;
   
    if (ledValue == 1) 
      digitalWrite(ledPin, HIGH);
    else
      digitalWrite(ledPin, LOW);
  }
  else
    // read the led status
    return ledValue; 
}

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
 
  // OPC Object initialization
  aOPCSerial.setup(); 
 
   // led OPCItem declaration
  aOPCSerial.addItem("led", opc_readwrite, opc_int, callback);
}

void loop() {
  // OPC process commands
  aOPCSerial.processOPCCommands();
}
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 28 Марта 2016, 21:03:40
У него стандартный код из примера и он рабочий! Я с него начинал. В написали в принципе то-же самое.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 28 Марта 2016, 21:04:58
garry, верно, он работает. Здесь проблема в чем-то другом.
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 28 Марта 2016, 21:10:08
У него чего-то напутано с именами серверов. Может 2 сразу запускает? Он сообщение поменял. У него изначально было написано что указывается нулевой сервер.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 28 Марта 2016, 21:11:03
Кто знает, возможно. Или как-то некорректно вводит адрес кнопки.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 28 Марта 2016, 21:11:54
ariel, nos acaba de comprobar el código. Funciona. Quizás esté haciendo algo mal. Abra el proyecto en el editor. A continuación, haga clic en el botón y cambiar la propiedad de "Address". Introduzca el valor "ArduinoSerial0.led".
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 28 Марта 2016, 21:13:47
Asegúrese de que usted ejecuta un solo servidor.
Название: Re: Simple-Scada и Arduino
Отправлено: ariel от 28 Марта 2016, 21:17:37
con ese codigo tampoco me funciona , pero el debug del opc server me alerta
Код
Read file function failed
sYstem error code 6
controlador no valido
Read file function failed
System erro code 996
El ebento superpuesto de entrada/salida no es un estado señalado
Clearcommerror function failed
system error code 6
controlodar no valido
port not open
pasa el mensaje sin parar
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 28 Марта 2016, 21:25:32
En la configuración de OPC del servidor, compruebe que tiene utilizar un puerto COM. Si no es así, quite la configuración y crear todo de nuevo.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 28 Марта 2016, 21:27:03
Prueba el "Arduino" con privilegios de administrador, y luego ejecutar el "SCADA". Esto no resuelve el problema?
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 28 Марта 2016, 21:48:54
Пропал! Наверное что-то помогло. ;D
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 28 Марта 2016, 21:58:57
Это затишье перед бурей, наверно.
Название: Re: Simple-Scada и Arduino
Отправлено: ariel от 28 Марта 2016, 21:59:49
gracias a todos su ayuda. pero la solucion fue correr el scada como administrado. muchas gracias y nos mantenemos en contacto.
un saludo
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 29 Марта 2016, 22:36:20
Чего-то я не понял чего он написал? Что именно помогло?. Я так понял что с проблемой он справился.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 29 Марта 2016, 22:51:07
Просто запуск скады от имени администратора помог. Судя по всему у него, как это бывает - отображались крестики из-за опции контроля связи, которая не могла корректно работать из-за недостаточных прав.
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 29 Марта 2016, 22:58:08
Странно. Я даже не задумывался о запуске скады с правами администратора. Они мне понадобились только для регистрации сервера. Может у мучачос виндовсы другие?
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 30 Марта 2016, 14:18:03
Ещё один ролик от нашего пользователя. На этот раз в нем демонстрируется управление домашней техникой.

Название: Re: Simple-Scada и Arduino
Отправлено: bars от 21 Апреля 2016, 07:21:08
Здравствуйте!!! Подключил Simple-Scada к Ардуино уно через Ардуино ОРС сервер, для прошивки Ардуино использовал примеры представленные на этом форуме, но Ардуино IDE постаянно ругался на ошибки в коде, то нет библиотеки ОРС, хотя она подключена, то не та библиотека Bridge.h, то просто не хотел компилеть. Порывшись в папках скачанных совместно с ОРС сервером нашёл примеры и для UNO в том числе. Откомпилировал пример без проблем и Ардуинка радостно без всяких проблем заработала с Scada.
Название: Re: Simple-Scada и Arduino
Отправлено: ariel от 21 Апреля 2016, 15:04:49
disculpen el tiempo que no estuve presente, pero estuve ocupado, y lo que he descubierto es que hay algún problema con la libreria dallastemperatura.h. y opc.h . y el tema pasa por los tiempos de conversión de datos necesarios por el sensor ds18b20.
Si alguien puede ayudar al respecto, estaría agradecido.
Por favor seguir este link
 http://www.cupidcontrols.com/2014/10/moteino-arduino-and-1wire-optimize-your-read-for-speed/

desde ya muchas gracias
Название: Re: Simple-Scada и Arduino
Отправлено: Evgen4ik от 27 Апреля 2016, 12:40:29
Добрый день уважаемые форумчане! Прошу помощи! Arduino начал осваивать совсем недавно,поэтому очень много загвозок, в данный момент не получается отобразить в SimpleScada показания датчика LM35DZ, точнее вообще не видит его ItemPropeprty (пример из библиотеки для работы с аналоговыми датчиками работает успешно), вероятней всего ошибка в скетче, может кто-нить поделится рабочим скетчем ,буду очень благодарен.
Название: Re: Simple-Scada и Arduino
Отправлено: bars от 28 Апреля 2016, 06:10:47
Кто нибудь разобрался как подключить к Scada датчик DHT-11. сколько ни пробовал, не получается... Помогите......
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 28 Апреля 2016, 07:41:40
Читайте тему сначала, я мучался с подключением DHT21 - суть то-же самое. Там все описано.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple Scada от 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.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 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.
Название: Re: Simple-Scada и Arduino
Отправлено: bars от 29 Апреля 2016, 05:20:49
Цитировать
Читайте тему сначала, я мучался с подключением DHT21 - суть то-же самое. Там все описано.

Я тоже пробовал по этим примерам, тоже мучался!!! Правдв только под версией 1.3.3. Получилось, что контроллер передавал в ОРС сервер паказания от датчика ДНТ-11 только один раз в начале опроса и всё, на этом ступор... В Scada вообще ничего не прилетало. С аналоговыми датчиками без проблем...
В любом случае СПАСИБО!
Название: Re: Simple-Scada и Arduino
Отправлено: bars от 29 Апреля 2016, 05:23:46
Цитировать
В общем, решение могу подсказать только через Simple-Scada 2.0  которая как раз недавно вышла)
Мой пример с датчиком DHT11, но я думаю с остальными датчиками можно сделать как в этом примере.
http://simple-scada.com/download - Скачиваем "Демо версия Simple-Scada 2.0 на 64 тега"

Я скачал демо версию, но подключение ДНТ-11 пока не пробовал. Пока разбирался с функционалом... Жаль времени маловато... Но Вам спасибо за подсказку и примеры, буду пробовать....
Название: Re: Simple-Scada и Arduino
Отправлено: ariel от 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
Название: Re: Simple-Scada и Arduino
Отправлено: janga от 30 Мая 2016, 12:43:59
в Ардуино уно названия библиотек в коде подсвечены желтым, а OPC библитека нет.Так и должно быть?
Название: Re: Simple-Scada и Arduino
Отправлено: Simple Scada от 30 Мая 2016, 13:22:25
в Ардуино уно названия библиотек в коде подсвечены желтым, а OPC библитека нет.Так и должно быть?
Да, всё нормально.
Название: Re: Simple-Scada и Arduino
Отправлено: Darfin от 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
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 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".
Название: Re: Simple-Scada и Arduino
Отправлено: bars от 07 Июля 2016, 06:41:18
Недавно вышло новое обновление программы FLprog на одноимённом сайте! FLprog это среда разработки ПО для Ардуино для не программистов в графическом виде. В предыдущих версиях протокол МодБас работал не очень корректно, но в последнем обновлении его полностью переписали и теперь подключение Ардуино к Simple Scada по протоколу МодБас вообще не проблема. Датчики ДНТ-11 подключаются без проблем, работают чотко без глюков. Вообще практически любой датчик и набор логики. Это касается и SS версии 2.0 и SS версии 1.3.3. Я в ВОСТОРГЕ.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 07 Июля 2016, 11:06:06
bars, спасибо, интересная информация. Это поможет упростить работу Simple-Scada с Ардуино.
Название: Re: Simple-Scada и Arduino
Отправлено: emoxristov от 29 Декабря 2016, 18:21:47
Можете ли вы сделать видео, как Scada работа с Arduino.Kak сделать настройки работы?
Название: Re: Simple-Scada и Arduino
Отправлено: emoxristov от 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;
Название: Re: Simple-Scada и Arduino
Отправлено: Teodor от 20 Января 2017, 13:55:07
http://simple-scada.com/video

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

Либо поднять на Дуне полноценный ModbusTCP и передавать их на взрослый ОРС. Что есть нетривиальной задачей для неподготовленного пользователя.
Название: Re: Simple-Scada и Arduino
Отправлено: garry от 07 Февраля 2017, 09:04:23
Нет ли один помочь ?
Советую Вам бросить ArduinoOPCserver, это сыроватая и нестабильная штука, тем более что ардуина с ней будет лишь устройством ввода-вывода, а это слишком жирное решение. При попытке внедрить код для каких-то действий кроме работы OPC-сервера начинают лезть всякие глюки. Перейдите на модбас и будет Вам счастье. Есть среда разработки FLProg - замечательный инструмент для визуального программирования. Все требуемые Вам решения реализуются за несколько кликов.
Название: Re: Simple-Scada и Arduino
Отправлено: emoxristov от 07 Февраля 2017, 20:24:40
Скажите кода Arduino.
очень трудно ?
Почему разработчик не желает, чтобы помочь ?
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 07 Февраля 2017, 21:01:05
Цитировать
Скажите кода Arduino. очень трудно? Почему разработчик не желает, чтобы помочь ?
Ние не можем да разберем точно същността на въпроса. Кодът, който сте записали трябва да работи. Най-малко той работи за Arduino UNO.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 12 Февраля 2017, 08:14:02
Използвайте digitalread вместо analogread, ако на входа не е PWM. https://www.arduino.cc/en/Reference/digitalRead
Название: Re: Simple-Scada и Arduino
Отправлено: emoxristov от 10 Июня 2017, 14:41:15
У меня есть кнопка Button1 при нажатии я хочу активировать еще несколько кнопок, как Button2,Button3,Button4.
Какой скрипт должен написать Button1 ?
Администратор, пожалуйста, помогите.
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 10 Июня 2017, 16:35:21
Для этого можно использовать следующий код на событие Button1.OnClick:
Код
begin
  Button2.OnClickEvent;
  Button3.OnClickEvent;
  Button4.OnClickEvent;
end.
Название: Re: Simple-Scada и Arduino
Отправлено: emoxristov от 10 Июня 2017, 17:31:49
Для этого можно использовать следующий код на событие Button1.OnClick:
Код
begin
  Button2.OnClickEvent;
  Button3.OnClickEvent;
  Button4.OnClickEvent;
end.


Этот скрипт не работает....
Администратор, пожалуйста, помогите.
Название: Re: Simple-Scada и Arduino
Отправлено: emoxristov от 10 Июня 2017, 19:04:31
Когда я нажал на кнопку АВТО также включают кнопки : СТОП,СТОП,СТОП.
Какой скрипт должен написать кнопку : АВТО ?
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 10 Июня 2017, 19:57:58
При нажатии на кнопку происходит изменение той переменной, с которой эта кнопка связана. Вы можете просто менять значения этих переменных, как это делают кнопки. Например:
Код
begin
  my_variable1.Value := 1;
  my_variable2.Value := 1;
  my_variable3.Value := 1;
end.
Название: Re: Simple-Scada и Arduino
Отправлено: Teodor от 12 Июня 2017, 10:17:50
Поставьте флажок "Фиксируемая" на кнопку "Авто".
Код: (delphi)
begin
  if VarAuto = TRUE then
  begin
    my_variable1.Value := 1;
    my_variable2.Value := 1;
    my_variable3.Value := 1;
  end else
    begin
      my_variable1.Value := 0;
      my_variable2.Value := 0;
      my_variable3.Value := 0;
    end;
end.

НО! лучше сделайте 2 кнопки "Авто ВКЛЮЧИТЬ" и "Авто ВЫКЛЮЧИТЬ". Иначе если вы вы нажмете "АВТО" и все включится, потом вы 2 кнопки выключите, а вам надо опять все включить, то прийдется "Авто" нажимать 2 раза.
Название: Re: Simple-Scada и Arduino
Отправлено: emoxristov от 16 Июня 2017, 18:48:05
Simple-Scada у меня есть к вам вопрос.
Можете ли вы работать два соединенных доски Arduino связанных с TX - RX ?
Что следует добавить к коду из двух досок, чтобы работать как один ?
Название: Re: Simple-Scada и Arduino
Отправлено: Teodor от 19 Июня 2017, 09:06:55
Simple-Scada у меня есть к вам вопрос.
Можете ли вы работать два соединенных доски Arduino связанных с TX - RX ?
Что следует добавить к коду из двух досок, чтобы работать как один ?
А как ты хочешь соединить 2 Arduino по UART если  USB уже его использует? Или у тебя Mega2560 c 4 UART?

Если у тебя связь только для этого, то тебе будет проще использовать USB Hub и несколько шнурков. Тогда за связь будет отвечать скада, а не ты.
Название: Re: Simple-Scada и Arduino
Отправлено: emoxristov от 21 Июня 2017, 18:26:03
Я хочу подключить два Mega2560 в Scada, как подключиться будет иметь проблемы с ArduinoOPCServer ?
Должен ли я добавить Master - Slave ? Одна плата будет относиться к USB.
Как соединить их, чтобы увидеть их Scada как входы и выходы ?
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 22 Июня 2017, 09:38:53
Мы не тестировали Arduino OPCServer с Mega2560, поэтому точно сказать не можем. Нужно подключить платы и изменить программу в Arduino OPCServer, добавив в неё новые входы/выходы.
Название: Re: Simple-Scada и Arduino
Отправлено: emoxristov от 22 Июня 2017, 18:47:37
Я попытался соединить два, но есть проблема с OPC сервером.
Как настроить сервер для совместной работы ?
Сервер работает только тогда, когда это ArduinoSerial0.-COM1
Он не хочет работать, когда он был ArduinoSerial1.-COM4
Я использую два различных входа USB для каждой платы.
Это ошибка, которая возникает при попытке подключения к Arduino ArduinoSerial1.-COM4
Где может быть проблема ?
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 23 Июня 2017, 09:17:23
Трудно сказать почему возникает эта ошибка. Этот вопрос связан c Arduino OPC Server.
Название: Re: Simple-Scada и Arduino
Отправлено: cuperxs от 16 Октября 2018, 10:19:26
Поскольку разработчик убрал все ссылки из свободного доступа и требует проходить невнятный опрос с отправкой письма в ваш спам, выкладываю ссылку на 2.0 версию сервера:
http://st4makers.com/old/phocadownload/arduinoopcserver_2_0.zip
и копия на GDrive https://drive.google.com/file/d/179IYuK2Nm54PltdX2lxX-SrHqvCkFBDa
Название: Re: Simple-Scada и Arduino
Отправлено: steam_engineer от 09 Марта 2019, 19:50:04
Всем доброго времени суток!

Подключил датчик температуры DS18B20 к Ардуино, проверил как он работает через монитор порта - всё отлично, показания верные. Поставил задачу подружить с верхним уровнем. Вот скачал Simple-Scada 2 (2.3.4.0 | 19.02.2019), скачал и установил  Arduino OPC-сервер 2.0 из Ответа #140 этой темы (не забыв про "register.bat"),  ОРС Core Components (x64), и даже Arduino IDE 1.6.5, как писали в данной теме.
Код взял из Ответа #69:
Код: (c#)
#include <OPC.h>
#include <Bridge.h>
#include <Ethernet.h>
#include <SPI.h>
#include <OneWire.h>
 
OPCSerial aOPCSerial;
 
OneWire ds (4);
byte data[12];
byte addr1[8] = {0x28, 0xFF, 0x4F, 0x81, 0xA6, 0x16, 0x3, 0x1B}; // ID индивидуально для каждого датчика

unsigned int raw;
float temp1;
 
//OneWire oneWire(DS);
//DallasTemperature sensors(&oneWire);
float item_temperature1(const char *itemID, const opcOperation opcOP, const float value){
     temp1 = DS18B20(addr1);
     return  temp1;
}
 
void setup() {
 
  Serial.begin(9600);
  aOPCSerial.setup();
  aOPCSerial.addItem("T1", opc_read, opc_float, item_temperature1);
 }
 
void loop() {
  //sensors.requestTemperatures();
  aOPCSerial.processOPCCommands();
}
float DS18B20(byte *adres)
{
  ds.reset();
  ds.select(adres);
  ds.write(0x44, 1); // start conversion, with parasite power on at the end
  ds.reset();
  ds.select(adres);
  ds.write(0xBE); // Read Scratchpad
 
  for (byte i = 0; i < 9; i++) // можно увеличить точность измерения до 0.0625 *С (от 9 до 12 бит)
  { // we need 9 bytes
    data[i] = ds.read ();
  }
  raw =  (data[1] << 8) | data[0];//=======Пересчитываем в температуру
  float celsius =  (float)raw / 16.0;
  return celsius;
}

... и чуда не произошло.

Во-первых, смущает то что в Simole Scada и в ItemProperty у сервера номер 2 в конце, а ни как у всех 1: "ArduinoOPCServer.2".

(https://b.radikal.ru/b09/1903/aa/dd0f640fcab5.png)

(https://b.radikal.ru/b16/1903/41/e6593c3ef8f3.png)

Во-вторых, ItemProperty не видит адреса тегов, ровно как и Simple Scada:

(https://c.radikal.ru/c14/1903/25/c15a29afdaf3.png)

У меня установлена Windows 10 Pro x64. Всё запускаю от имени администратора. пробовал код из Ответа #2 данной темы - всё то же самое.

Прошу у Вас помощи в решении данной ситуации. Может я что-то упустил?
Название: Re: Simple-Scada и Arduino
Отправлено: Simple-Scada от 11 Марта 2019, 11:26:11
Здравствуйте.

Нужно устанавливать компоненты ОРС Core Components (x86), т.к. используемый Вами OPC-сервер является 32-битным. Перед установкой удалите 64-битную версию компонентов.

Цитировать
Во-первых, смущает то что в Simole Scada и в ItemProperty у сервера номер 2 в конце, а ни как у всех 1: "ArduinoOPCServer.2".
2 это номер версии OPC-сервера. Раньше все устанавливали первую версию.

Цитировать
Во-вторых, ItemProperty не видит адреса тегов, ровно как и Simple Scada:
Здесь всё зависит от OPC-сервера. Тег точно регистрируется в программе через "aOPCSerial.addItem("T1", opc_read, opc_float, item_temperature1);", но OPC-сервер по каким-то причинам не отдаёт его OPC-клиентам (скаде и ItemProperty).