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

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

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

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Re: Simple-Scada и Arduino
« Ответ #45 : 27 Января 2016, 16:20:45 »
а с "noInterrupts();" тоже не получается?

garry

  • Пользователь
  • **
  • Сообщений: 72
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #46 : 27 Января 2016, 16:23:25 »
Без изменений, с делеем все понятно, если ставить задержку в  скетче то получается нулевое значение как раз на время задержки.
Среда разработки 1.6.7 ?

SLR

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #47 : 27 Января 2016, 16:34:58 »
среда 1.7.7 , но думаю роли это не играет, сдвинулось с места, сейчас при запуске не моргает температура меняется в зависимости от нагрева/остывания, но периодически опять начинает меняться и через некоторое время температура снова опускается/поднимается и так по кругу.
С noInterrupts(); отказывается вообще считывать показания.
« Изменён: 27 Января 2016, 16:36:50 от SLR »

garry

  • Пользователь
  • **
  • Сообщений: 72
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #48 : 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.

SLR

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #49 : 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

garry

  • Пользователь
  • **
  • Сообщений: 72
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #50 : 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
в соответствии с вашей схемой?

SLR

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #51 : 27 Января 2016, 18:25:37 »
да тут и нечего думать плохо, по запаре можно и ошибиться в простом:) , но к сожалению это не тот случай, единственная разница у меня дтх11, а подключен так же к 2 пину. уже не знаю что и делать......

garry

  • Пользователь
  • **
  • Сообщений: 72
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #52 : 27 Января 2016, 18:34:42 »
да тут и нечего думать плохо, по запаре можно и ошибиться в простом:) , но к сожалению это не тот случай, единственная разница у меня дтх11, а подключен так же к 2 пину. уже не знаю что и делать......
моя библиотека DHT

garry

  • Пользователь
  • **
  • Сообщений: 72
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #53 : 27 Января 2016, 18:38:09 »
Попробуйте в 1.6.7, если не пойдет, то выложите мой код в том виде в котором вы его компилируете

SLR

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #54 : 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();
}
« Изменён: 26 Мая 2018, 11:16:16 от Simple-Scada »

garry

  • Пользователь
  • **
  • Сообщений: 72
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #55 : 27 Января 2016, 19:37:37 »
Пока мыслей нет, подумаю до завтра. А сигнальную ногу датчика через резистор к питанию подтянули?

SLR

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #56 : 27 Января 2016, 19:48:07 »
Да, 10 кОм, такое ощущение , что ответ где то близко, последний скетч, который выложил администратор дал некоторые результаты, но до конца победить не удаётся. ...

garry

  • Пользователь
  • **
  • Сообщений: 72
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #57 : 27 Января 2016, 19:52:23 »
После float t = dht.readTemperature();
воткнуть delay (2000); попробуй

SLR

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #58 : 28 Января 2016, 13:42:55 »
попробовал, безрезультатно.

SLR

  • Новичок
  • *
  • Сообщений: 22
    • Просмотр профиля
Re: Simple-Scada и Arduino
« Ответ #59 : 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();
}
Вот мой код, мб кому то пригодится, если нужно скину библиотеку.
« Изменён: 26 Мая 2018, 11:16:42 от Simple-Scada »