EnglishУкраїнськаmRussian
Login/New
Topic with no new replies

BME280


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. т.е. мало того что ошибка транспорта не отслеживается, так и читает откуда-то мусор.
Attachment

meteo1.db (File type: application/octet-stream, Size: 43 kilobytes) — 2864 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(приложено так же):
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: 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
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: 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
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.]
Attachment

weather.py (File type: text/x-python, Size: 239 bytes) — 2825 downloads
BME280.py (File type: text/x-python, Size: 6.81 kilobytes) — 2851 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.



1151