УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

[DAQ.Modbus] можно ли прочитать с устройства int48 только лишь черед DAQ.Modbus?


Автор Сообщение
Сообщение создано: 19. 05. 2017 [16:36]
s60ru
Антон Петров
Создатель темы
Зарегистрирован(а) с: 10.05.2012
Сообщения: 141
Счетчик электроэнергии ALPHA A1800 посчитанную электроэнергию по modbus отдает нестандартным типом int48 (т.е. три регистра modbus + 47 бит знака).
Можно ли его корректно прочитать используя только лишь конфигурацию контроллера модуля DAQ.Modbus ? Эта информация исключительно для отображения, совсем не хочется городить прослойки для пересчета четырех регистров ....

P.S. "Только лишь" это как-то так:
Примеры:
"R:0x300:rw:var:Variable" — доступ к регистру;
"C:100:rw:var1:Variable 1" — доступ к биту;
"R_f:200:r:float:Float" — получить вещественное из регистров 200 и 201;
"R_i4:400,300:r:int32:Int32" — получить int32 из регистров 400 и 300;
"R_b10:25:r:rBit:Reg bit" — получить бит 10 из регистра 25;
"R_s:15,20:r:str:Reg blk" — получить строку, блок регистров, из регистра 15 и размером 20.
Сообщение создано: 19. 05. 2017 [21:34]
arcsin
Аркадий Кисель
Contributor
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
"R_i8:0x10:w" — получить и установить int64 в регистры [0x10-0x13];
в int знак это самый старший бит. а в регистре на каком месте стоит знак?
нужен ли вообще знак в данном случе? может вместо в самый старший регистр записать заведомо нулевой регистр?
укажите более точно карту регистров.
Сообщение создано: 20. 05. 2017 [00:06]
s60ru
Антон Петров
Создатель темы
Зарегистрирован(а) с: 10.05.2012
Сообщения: 141
https://habrastorage.org/web/acf/29b/b45/acf29bb458c046779ba02c54b4176fc4.png
.
https://habrastorage.org/web/f65/834/a96/f65834a963a242f9a534ff2c78bce846.png

Register ----------- Description ----------- Scale (1 Count)
-------------------------------------------------------------------
40042 - 40044 --- Watt-hours, delivered --- 1 WattHr
40045 - 40047 --- Watt-hours, received --- 1 WattHr
40048 - 40050 --- VAR-hours, delivered --- 1 VARHr
40051 - 40053 --- VAR-hours, received --- 1 VARHr
40054 - 40056 --- VA-hours, delivered --- 1 VAHr
40057 - 40059 --- VA-hours, received --- 1 VAHr

[Сообщение редактировалось 1 раз(а), в последний раз 20.05.2017 в 00:07.]
Вложенный файл

int48_1.png (Тип файла: image/png, Размер: 20.05 килобайт) — 1474 загрузок
int48_2.png (Тип файла: image/png, Размер: 32.54 килобайт) — 1448 загрузок
Сообщение создано: 20. 05. 2017 [00:08]
s60ru
Антон Петров
Создатель темы
Зарегистрирован(а) с: 10.05.2012
Сообщения: 141
нужен ли знак - голову ломать не хочется - задача максимум: прочитать и показать все как есть.....

[Сообщение редактировалось 1 раз(а), в последний раз 20.05.2017 в 00:10.]
Вложенный файл

ALPHA_A1800_Modbus.pdf (Тип файла: application/pdf, Размер: 612.23 килобайт) — 5853 загрузок
Сообщение создано: 20. 05. 2017 [00:14]
s60ru
Антон Петров
Создатель темы
Зарегистрирован(а) с: 10.05.2012
Сообщения: 141
https://habrastorage.org/web/939/b19/223/939b1922386f4bc7950977c53afffdb5.png
Вложенный файл

int48_3.png (Тип файла: image/png, Размер: 31.36 килобайт) — 1458 загрузок
Сообщение создано: 20. 05. 2017 [00:17]
s60ru
Антон Петров
Создатель темы
Зарегистрирован(а) с: 10.05.2012
Сообщения: 141
счетчик то распространенный, найдем лаконичное решение - многим пригодится........ в интеренет то есть уже тема про int48 в панели Weintek....
Сообщение создано: 20. 05. 2017 [08:32]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
"s60ru" wrote:

счетчик то распространенный, найдем лаконичное решение - многим пригодится........ в интеренет то есть уже тема про int48 в панели Weintek....

А проблема то в чём?
Добавляйте реализацию экзотического суффикса "_i6", "_u6" и высылайте патч, на то он и open source!

Learn, learn and learn better than work, work and work.
Сообщение создано: 20. 05. 2017 [10:32]
arcsin
Аркадий Кисель
Contributor
Зарегистрирован(а) с: 17.02.2017
Сообщения: 77
самое правильное решение сказал Роман. оно действительно будет полезно для людей в будущем.

чуть более костыльное - через прослойку: прочитать в R_i8 нужное(40042-40044), с захватом лишнего (40045), а при обработке целочисленно разделить это число на 2^16 = 65536. знак должен остаться, а лишние данные удалиться.
"R_i8:40042:r"


и самое костыльное: подойдет для времянки. поискать регистр модбаса который всегда нулевой. (возможно где-то в строках, или версиях)
"R_i8:0x10,40042:r" где 0x10 нулевой регистр.
при положительном значении параметр будет показывать верно. при отрицательном - лажа. при "уплывании 0" в "нулевом" регистре тоже будет лажа!



3433