Simple-Scada 1.3.3 и ниже > Ваши вопросы
Simple-Scada и Arduino
garry:
С ds18b20 у кого-то получилось? У меня та-же печалька.
Андрей:
Нет. У меня так и не заработало с даласом, библиотеки не совместимы, допиливать нужно. Писал сюда http://www.st4makers.com/support-forum-arduino-opc-server/146-ds18b20-opc разработчик тоже молчит.
garry:
Досадно, придется по модбасу прикручивать. А идея с ардуиновским сервером была чертовски хороша.
Simple-Scada:
Андрей, а почему в Вашем коде команда "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();
}Возможно это не решит Вашу проблему, но этот код правильнее. И скажите, передается ли температура в скаду хотя бы один раз?
janga:
Поставил OPC-Arduino, зарегил, SCADA увидела и добавила в список выбора новый OPC,но потом дичь вылазить-запускаю item property и подключаюсь к ардуиносерверу - в итоге выскакивает неостанавливаемый список дебагов винды, который не остановить даже диспечтером.Что это может быть? Винда 7 32-bit.
Навигация
Перейти к полной версии