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(приложено так же): JAVASCRIPT 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. т.е. мало того что ошибка транспорта не отслеживается, так и читает откуда-то мусор. |
Written on: 05. 11. 2017 [20:50]
|
|
roman
Roman Savochenko
![]() Moderator Contributor Developer
![]() registered since: 12.12.2007
Posts: 3788
|
"arcsin" wrote: добрый день, форумчане! Реализовал опрос датчика давления температуры влажности BME280 на базе BMP180. может кому пригодится. OK, попробую на своём, до которого сам ещё не добрался. "arcsin" wrote: Роман, к вам пару вопросов: 1) в bmp180 49ая строка наверно pressure, a не temperature Да. "arcsin" wrote: 2) сделал простейший скрипт чтения ID(приложено так же): JAVASCRIPT 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() или подключать транспорт так (как сейчас принято): JAVASCRIPT 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: 3788
|
Проверил — работает. Почистил, добавил 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: 3788
|
"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 JAVASCRIPT 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: 3788
|
"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 JAVASCRIPT 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.] |
Written on: 16. 11. 2017 [09:37]
|
|
roman
Roman Savochenko
![]() Moderator Contributor Developer
![]() registered since: 12.12.2007
Posts: 3788
|
"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.
|