Author |
Message |
Written on: 05. 11. 2017 [10:12]
|
arcsin
Аркадий Кисель
Contributor
Topic creator
registered since: 17.02.2017
Posts: 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. т.е. мало того что ошибка транспорта не отслеживается, так и читает откуда-то мусор.
Attachment
meteo1.db (File type: application/octet-stream, Size: 43 kilobytes) — 2859 downloads
|
Written on: 05. 11. 2017 [20:50]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 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.
|
Written on: 06. 11. 2017 [19:46]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
Проверил — работает.
Почистил, добавил oversampling и включил в библиотеку.
Learn, learn and learn better than work, work and work.
|
Written on: 06. 11. 2017 [21:42]
|
arcsin
Аркадий Кисель
Contributor
Topic creator
registered since: 17.02.2017
Posts: 77
|
спасибо, Роман!
[This article was edited 1 times, at last 06.11.2017 at 21:43.]
|
Written on: 10. 11. 2017 [19:18]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"arcsin" wrote:
спасибо, Роман!
Пожалуйста, выгрузил.
Learn, learn and learn better than work, work and work.
|
Written on: 11. 11. 2017 [22:51]
|
arcsin
Аркадий Кисель
Contributor
Topic creator
registered since: 17.02.2017
Posts: 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:?
интересно посмотреть на связывание нескольких проектов
[This article was edited 1 times, at last 11.11.2017 at 22:56.]
|
Written on: 12. 11. 2017 [08:22]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 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.
|
Written on: 15. 11. 2017 [21:22]
|
arcsin
Аркадий Кисель
Contributor
Topic creator
registered since: 17.02.2017
Posts: 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%.
в приложении питоновская библиотека по которой сверялся.
[This article was edited 1 times, at last 15.11.2017 at 21:25.]
Attachment
weather.py (File type: text/x-python, Size: 239 bytes) — 2822 downloads
BME280.py (File type: text/x-python, Size: 6.81 kilobytes) — 2847 downloads
|
Written on: 16. 11. 2017 [09:37]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 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.
|