m-Bus

Апрайсин
Апрайсин аватар
Offline
Зарегистрирован: 05.08.2013

Помогите пожалуйста. У меня есть счётчики с протоколом mBus и мне нужно считывать данные с них с помошью ардуино, но я не могу найти подходящих библиотек.
Нашёл библиотеку для С, но к сожалению не знаю, как её использовать на ардуино

Апрайсин
Апрайсин аватар
Offline
Зарегистрирован: 05.08.2013

я так понимаю, таковых библиотек на данном языке не водиться(

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

а сделать библиотеку для ардуино из библиотеки на С религия не позволяет? Там всего в переферии разница...

P.S. похоже автору хочется всего и сразу.

Апрайсин
Апрайсин аватар
Offline
Зарегистрирован: 05.08.2013

я атеист.
не умею=( покачто не умею...

Апрайсин
Апрайсин аватар
Offline
Зарегистрирован: 05.08.2013

Если кому интересно и столкнёться с этим.

Проблему решил Serial.Read -ом. Буфирезировал поток битов (их получилось 96). И вооружившись документацией - просто разгрёб весь буфер по датам.


68 5A 5A 68 – header      5А = 90  всего их 90+header+СS+StopBit

08 FE 72        - C field=08(RSP),  address=FE, CI field=72 (var.,  LSByte first) 
86 22 01 00  - id number     (10 номер бита)
09 07 04 04  - manufacture id=0709, generation=04, heat   (water???=04) 
22 00 00 00  -  Acc, версия счетчика, reserved      (18 номер бита)                  (TC=22h=34d, Status=00h, Signature=0000h)      (мне они мало что говорят)

04 6D – время и дата
1B 0B B1 16 – 27 11 177 22  (27/11 17:22 ???)

04 07 –тепловая энергия 0,01 MWh 
6F FD 06 00 – (числовое значение unsigned long)  1878853120

04 15 – масса 10кг
3A 69 39 00 - (числовое значение unsigned long)  979974400

 05 2E – тепловая мощность kW
 00 00 00 00 - (числовое значение float) 0

05 3E – расход воды 1 м^3/ч
 00 00 00 00 - (числовое значение float) 0

 02 59 – температура подача в 0.01С
0E 0A – (значение word) 14.10С ???

02 5D – температура обратки 0.01C
A4 09 – (word) 419.93

02 FD 17 – общие ошибки
 00 00 

82 40 FD 17 – ошибки расхода 
01 00 – числовое значение ошибки расхода 

82 80 40 FD 17 – ошибки температуры
09 00 – числовые значение кода ошибок температуры

04 20 – время работы при включеном питании в секундах
2E 75 41 01 – числовое значение времени работы при включеннлм питании  779436289секунд/12990604минут/216510часов/9021дней/30месяцев/25лет – какойто бред… или я чегото не пойму

04 24 – общее время работы в нормальном режиме в секундах
A2 0A FE 00 – числовое значение работы в нормальных условиях

84 40 24 - Время работы первой системы в нормальном режиме в секундах
2E 75 41 01 – числовое значение в секундах

14 контрольная сумма 
16 стоп бит

Правда, не могу доконца в значениях разобраться.
Попробовал в калькулятор в десятичные перегнать - фигня какаято (хотя для long хватает). Или так оно и есть?

Это только один конкретный счётчик.

ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

Апрайсин пишет:

Если кому интересно и столкнёться с этим.

Проблему решил Serial.Read -ом. Буфирезировал поток битов (их получилось 96). И вооружившись документацией - просто разгрёб весь буфер по датам.


68 5A 5A 68 – header      5А = 90  всего их 90+header+СS+StopBit

08 FE 72        - C field=08(RSP),  address=FE, CI field=72 (var.,  LSByte first) 
86 22 01 00  - id number     (10 номер бита)
09 07 04 04  - manufacture id=0709, generation=04, heat   (water???=04) 
22 00 00 00  -  Acc, версия счетчика, reserved      (18 номер бита)                  (TC=22h=34d, Status=00h, Signature=0000h)      (мне они мало что говорят)

04 6D – время и дата
1B 0B B1 16 – 27 11 177 22  (27/11 17:22 ???)

04 07 –тепловая энергия 0,01 MWh 
6F FD 06 00 – (числовое значение unsigned long)  1878853120

04 15 – масса 10кг
3A 69 39 00 - (числовое значение unsigned long)  979974400

 05 2E – тепловая мощность kW
 00 00 00 00 - (числовое значение float) 0

05 3E – расход воды 1 м^3/ч
 00 00 00 00 - (числовое значение float) 0

 02 59 – температура подача в 0.01С
0E 0A – (значение word) 14.10С ???

02 5D – температура обратки 0.01C
A4 09 – (word) 419.93

02 FD 17 – общие ошибки
 00 00 

82 40 FD 17 – ошибки расхода 
01 00 – числовое значение ошибки расхода 

82 80 40 FD 17 – ошибки температуры
09 00 – числовые значение кода ошибок температуры

04 20 – время работы при включеном питании в секундах
2E 75 41 01 – числовое значение времени работы при включеннлм питании  779436289секунд/12990604минут/216510часов/9021дней/30месяцев/25лет – какойто бред… или я чегото не пойму

04 24 – общее время работы в нормальном режиме в секундах
A2 0A FE 00 – числовое значение работы в нормальных условиях

84 40 24 - Время работы первой системы в нормальном режиме в секундах
2E 75 41 01 – числовое значение в секундах

14 контрольная сумма 
16 стоп бит

Правда, не могу доконца в значениях разобраться.
Попробовал в калькулятор в десятичные перегнать - фигня какаято (хотя для long хватает). Или так оно и есть?

Это только один конкретный счётчик.

 

Можно по развернутей, как вы ее решили Serial.Read -ом?

Апрайсин
Апрайсин аватар
Offline
Зарегистрирован: 05.08.2013
пользовался этой сылкой http://arduino.ru/Reference/Serial/Read
 
или тебя интересует именно вывод буфером?
ingener.solovyev
Offline
Зарегистрирован: 12.02.2013

Апрайсин пишет:

пользовался этой сылкой http://arduino.ru/Reference/Serial/Read
 
или тебя интересует именно вывод буфером?

т.е. полностью отказался от mudbus?

Апрайсин
Апрайсин аватар
Offline
Зарегистрирован: 05.08.2013

нет. Проблема была в том, что мне нужен был счётчик с mBus-овским протоколым перевести в mudbus.
С mudbus проблем почти не возникло - библиотеки на ардуино имеються, надо было только чучуть подправить, и использовать serial2. 
благо, на Мега аж 4 сериала.

(mBus у меня использует Serial1)
 

Суть темы в mBus: Ардуиновских библиотек либо редкость, либо вообще нету.

Да и mBus от MudBus сильно отличаються структурой.

Вот я и решил проблему с mBus -ом с помощью Serial.Read по той ссылке.

Принял код, загнал в буфер, теперь просто начал писать универсальный код разгребания того трафика. Универсальный - потомучто существует определённая последовательность - её просто нужно понять.

Малой кровью обойтись не удалось(