Автор |
Сообщение |
Сообщение создано: 05. 11. 2017 [10:12]
|
arcsin
Аркадий Кисель
Contributor
Создатель темы
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
|
добрый день, форумчане! Реализовал опрос датчика давления температуры влажности BME280 на базе BMP180. может кому пригодится. Роман, к вам пару вопросов:
1) в bmp180 49ая строка наверно pressure, a не temperature
2) сделал простейший скрипт чтения ID(приложено так же):
tr = SYS.Transport.Serial["out_"+transport];
t_err = "0";
if(!tr) t_err = "1:"+tr("Output transport '%1' error.").replace("%1",transport);
else if(addr < 0 || addr > 119) t_err = "2:"+tr("Device address '%1' out of range [0...119].").replace("%1",addr);
else {
resp = Special.FLibSYS.IO("", "", "b");
//read data from register 0xD0
resp.string = tr.messIO(SYS.strFromCharCode(addr,0xD0), 0, 1);
length = resp.string.length;
if(resp.string.length != 1) t_err = "3:"+tr("Wrong or empty respond to the calibration request.");
else {
data = resp.read("int8",1);
}
}
указываю нормальный transport: читает 96(0x60) - верно. указываю любой другой читает(!) 48. т.е. мало того что ошибка транспорта не отслеживается, так и читает откуда-то мусор.
Вложенный файл
meteo1.db (Тип файла: application/octet-stream, Размер: 43 килобайт) — 2861 загрузок
|
Сообщение создано: 05. 11. 2017 [20:50]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"arcsin" wrote:
добрый день, форумчане! Реализовал опрос датчика давления температуры влажности BME280 на базе BMP180. может кому пригодится.
OK, попробую на своём, до которого сам ещё не добрался.
"arcsin" wrote:
Роман, к вам пару вопросов:
1) в bmp180 49ая строка наверно pressure, a не temperature
Да.
"arcsin" wrote:
2) сделал простейший скрипт чтения ID(приложено так же):
tr = SYS.Transport.Serial["out_"+transport];
t_err = "0";
if(!tr) t_err = "1:"+tr("Output transport '%1' error.").replace("%1",transport);
else if(addr < 0 || addr > 119) t_err = "2:"+tr("Device address '%1' out of range [0...119].").replace("%1",addr);
else {
resp = Special.FLibSYS.IO("", "", "b");
//read data from register 0xD0
resp.string = tr.messIO(SYS.strFromCharCode(addr,0xD0), 0, 1);
length = resp.string.length;
if(resp.string.length != 1) t_err = "3:"+tr("Wrong or empty respond to the calibration request.");
else {
data = resp.read("int8",1);
}
}
указываю нормальный transport: читает 96(0x60) - верно. указываю любой другой читает(!) 48. т.е. мало того что ошибка транспорта не отслеживается, так и читает откуда-то мусор.
Ну да, массивный-объектный доступ при отсутствии элемента возвращает EVAL, что не false и что по объективным причинам было сделано позже.
Собственно в них всех нужно или проверять на isEVal() или подключать транспорт так (как сейчас принято):
tr = SYS.Transport.Serial.nodeAt("out_"+transport);
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 06. 11. 2017 [19:46]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
Проверил — работает.
Почистил, добавил oversampling и включил в библиотеку.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 06. 11. 2017 [21:42]
|
arcsin
Аркадий Кисель
Contributor
Создатель темы
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
|
спасибо, Роман!
[Сообщение редактировалось 1 раз(а), в последний раз 06.11.2017 в 21:43.]
|
Сообщение создано: 10. 11. 2017 [19:18]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"arcsin" wrote:
спасибо, Роман!
Пожалуйста, выгрузил.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 11. 11. 2017 [22:51]
|
arcsin
Аркадий Кисель
Contributor
Создатель темы
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
|
Как правильно обновляться? ОС: Raspberian 8.
делаю
sudo apt-get update
sudo apt-get upgrade
в проектах опенскады номер версии после этого свежайший, но папка LibsDB не обновляется. удалял все через sudo apt-get remove --purge, LibsDB остается. когда её уже явно переименовал тогда при установке скачались свежие библиотеки. надеюсь есть более культурный способ, подскажите.
вопрос по модулю: в строке№13
tr = SYS.Transport.Serial.nodeAt("out_"+transport);
наверно точка пропущена, хотя компилися и так
и последний вопрос какой пароль у root в проекте KramMill.
op:op
user:user
ITW:ITW
root:?
интересно посмотреть на связывание нескольких проектов
[Сообщение редактировалось 1 раз(а), в последний раз 11.11.2017 в 22:56.]
|
Сообщение создано: 12. 11. 2017 [08:22]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"arcsin" wrote:
Как правильно обновляться? ОС: Raspberian 8.
делаю
sudo apt-get update
sudo apt-get upgrade
в проектах опенскады номер версии после этого свежайший, но папка LibsDB не обновляется. удалял все через sudo apt-get remove --purge, LibsDB остается. когда её уже явно переименовал тогда при установке скачались свежие библиотеки. надеюсь есть более культурный способ, подскажите.
Правильно, если-бы это был демон, то он увидел-бы сразу новую, в /usr/share/openscada/LibsDB
АРМовые запускаются от непривилегированного пользователя и имеют туда доступ только на чтение, соответственно и копируют LibsDB себе локально в ~/.openscada/LibsDB. И соответственно не копируют, если оно там есть, и не проверяют актуальности.
"arcsin" wrote:
вопрос по модулю: в строке№13
tr = SYS.Transport.SerialnodeAt("out_"+transport);
наверно точка пропущена, хотя компилися и так
Да, пропустил. Динамический доступ и не будет выдавать ошибок компиляции.
"arcsin" wrote:
и последний вопрос какой пароль у root в проекте KramMill.
op:op
user:user
ITW:ITW
root:?
интересно посмотреть на связывание нескольких проектов
Этот проект не для широкого круга и что там такого про связывание нескольких проектов? Если речь про ПЛК, то там их конфигурации и нет.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 15. 11. 2017 [21:22]
|
arcsin
Аркадий Кисель
Contributor
Создатель темы
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
|
несколько дней начало выдавать ноль по влажности. думал накрылась микросхема. но проверив под питоном увидел что все норм. начал ковырять и сравнивать.
нашел следующие ошибки
39:dig_H3 = resp.read("uint8", 1); //а не unt8
69:adc_T = resp.read("uint32", 1) >> 12;
84:adc_P = resp.read("uint32", 1) >> 12;
109:adc_H = resp.read("uint16", 1);
в общем смысл такой. пока adc_h был < 32768 было все норм. а когда влажность подросла перевалилло. и значение АЦП стало отрицательное. а из-за "насыщения" показывало вместо -300% 0%.
в приложении питоновская библиотека по которой сверялся.
[Сообщение редактировалось 1 раз(а), в последний раз 15.11.2017 в 21:25.]
Вложенный файл
weather.py (Тип файла: text/x-python, Размер: 239 байт) — 2823 загрузок
BME280.py (Тип файла: text/x-python, Размер: 6.81 килобайт) — 2848 загрузок
|
Сообщение создано: 16. 11. 2017 [09:37]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"arcsin" wrote:
несколько дней начало выдавать ноль по влажности. думал накрылась микросхема. но проверив под питоном увидел что все норм. начал ковырять и сравнивать.
нашел следующие ошибки
39:dig_H3 = resp.read("uint8", 1); //а не unt8
69:adc_T = resp.read("uint32", 1) >> 12;
84:adc_P = resp.read("uint32", 1) >> 12;
109:adc_H = resp.read("uint16", 1);
в общем смысл такой. пока adc_h был < 32768 было все норм. а когда влажность подросла перевалилло. и значение АЦП стало отрицательное. а из-за "насыщения" показывало вместо -300% 0%.
OK, внёс изменения в библиотеку.
Learn, learn and learn better than work, work and work.
|