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

[BugWrong] Не удается получить по Modbus значение типа UInt32 (R_u4)


Author Message
Written on: 30. 03. 2017 [00:41]
kantv
Антон Калюк
Topic creator
registered since: 29.11.2016
Posts: 17
Добрый день.

Установил систему OpenScada 0.8.17 на CentOS7x64 из репозитория http://oscada.org/oscadaArch/0.8.0/CentOs/7/

Имеется счетчик расхода жидкости, который позволяет получить текущие показания по протоколу Modbus RTU в формате UInt32 (два регистра Modbus). Для сбора данных с этого счетчика в разделе DAQ.Modbus создал соответствующий контроллер с параметром и единственным атрибутом:
R_u4:248:r:vCounter:Показания счетчика расхода
При включении данного контроллера получаю на вкладке Attributes вместо показаний счетчика значение <EVAL>. А в разделе Transport Protocols имею следующие данные в запросе и ответе modbus:
REQ -> 01 03 00 F8 00 02 45 FA
RESP -> 01 03 04 00 01 E2 40 E2 A3

Пробовал изменить тип атрибута с u4 на i4, то есть сделать его
R_i4:248:r:vCounter:Показания счетчика расхода
в этом случае при запуске контроллера получаю на вкладке Attributes значение -499122175, при этом в разделе Transport Protocols вижу абсолютно такие же запросы и ответы по протоколу modbus, как и в случае использования типа "u4", то есть
REQ -> 01 03 00 F8 00 02 45 FA
RESP -> 01 03 04 00 01 E2 40 E2 A3

Подскажите, почему удается получить значение атрибута для типа i4 и не удается для типа u4? Это ошибка обработки данных в системе OpenSCADA (перевода значения к типу UInt32) или я что-то не так делаю?

На всякий случай прикладываю несколько скриншотов, надеюсь они помогут пояснить приведенное выше описание возникшей проблемы.
Attachment

1.png (File type: image/png, Size: 120.21 kilobytes) — 1492 downloads
2.png (File type: image/png, Size: 133.01 kilobytes) — 1534 downloads
3.png (File type: image/png, Size: 116.95 kilobytes) — 1505 downloads
Written on: 30. 03. 2017 [08:00]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"kantv" wrote:

Подскажите, почему удается получить значение атрибута для типа i4 и не удается для типа u4? Это ошибка обработки данных в системе OpenSCADA (перевода значения к типу UInt32) или я что-то не так делаю?

Про "Подскажите почему" это не в "Отслеживание ошибок" и это не ошибка!

Нет в 0.8LTS расширенного типа "u4" как минимум по причине того, что в стабильной версии внутреннее целое это 32-разрядное знаковое!

Learn, learn and learn better than work, work and work.
Written on: 30. 03. 2017 [09:28]
kantv
Антон Калюк
Topic creator
registered since: 29.11.2016
Posts: 17
Поиском через Google я находил на сайте oscada.org упоминания о типе "u4":
На странице wiki.oscada.org/HomePageEn/Doc/ModBus говорится:
"R" and "RI" can be expanded by suffixes: "i2"—Int16, "i4"—Int32, "i8"—Int64, "u2"—UInt16, "u4"—UInt32, "f"—Float, "d"—Double, "b5"—Bit5, "s"—String (size by default is 10 and up to 100 registers);

также есть файл (находися гуглом) oscada.org/svn/trunk/OpenSCADA/ChangeLog в котором зафиксировано
2014-05-16 Roman
- FIX: TFunction: Expand to int64_t fix.
- SYS: Added new global simple function s2ll() into OSCADA namespace.
- !!:ModBus: Complex types expand by "i8" - int64, "u2" - uint16, "u4" - uint32, "d" - Double.
To protocol part classic form for registers added and complex types expand by "i8" - Int64, "d" - Double.

Из Вашего ответа "Нет в 0.8LTS расширенного типа "u4"" можно заключить, что возможно есть версия OpenSCADA, например 0.9, в которой реализована поддержка типа u4 в модуле Modbus. Уточните пожалуйста, если ли какой-нибудь версии OpenSCADA поддержка такого типа данных и если есть, то в какой именно.

И сразу задам второй вопрос в продолжение темы:
Теоретически я могу получить из счетчика расхода значение его показаний (которое является UInt32) как два отдельных регистра UInt16 в одном из которых будет младшее слово, а в другом старшее слово. Можно ли в при дальнейшей обработке в системе OpenSCADA на каком либо этапе (например используя функцию JavaLiceCalk в Логическом контроллере) получить тип UInt32 на основе двух значений UInt16? То есть другими словами - поддерживает ли система OpenSCADA при дальнейшей обработке тип UInt32 (имеются в виду уровни обработки Логического контроллера и визуализации)?
Заранее Спасибо за ответ.
Written on: 30. 03. 2017 [09:51]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"kantv" wrote:

Поиском через Google я находил на сайте oscada.org упоминания о типе "u4":
На странице wiki.oscada.org/HomePageEn/Doc/ModBus говорится:
"R" and "RI" can be expanded by suffixes: "i2"—Int16, "i4"—Int32, "i8"—Int64, "u2"—UInt16, "u4"—UInt32, "f"—Float, "d"—Double, "b5"—Bit5, "s"—String (size by default is 10 and up to 100 registers);

Online документация имеет малое отношение к 0.8, как стабильной-замороженной версии, для неё актуальна только offline. В подсказке есть упоминание про "u4"?

"kantv" wrote:

2014-05-16 Roman
- FIX: TFunction: Expand to int64_t fix.
- SYS: Added new global simple function s2ll() into OSCADA namespace.
- !!:ModBus: Complex types expand by "i8" - int64, "u2" - uint16, "u4" - uint32, "d" - Double.
To protocol part classic form for registers added and complex types expand by "i8" - Int64, "d" - Double.

Ничего, что 0.8 вышла 2012 и эти изменения в неё не переносились, как стабильную!?

"kantv" wrote:

И сразу задам второй вопрос в продолжение темы:

Что Вам не понятно в моей фразе?
Про "Подскажите почему" это не в "Отслеживание ошибок" и это не ошибка!


Learn, learn and learn better than work, work and work.
Written on: 30. 03. 2017 [10:09]
kantv
Антон Калюк
Topic creator
registered since: 29.11.2016
Posts: 17
Я не претендую, на то, что отсутствие поддержки типа UInt32 в модуле Modbus системы OpenSCADA это ошибка. Если на Ваш взгляд я завел эту тему не в том разделе форума, то я также ничего против переноса этой темы в другой раздел не имею и здесь у Вас как у администратора форума "все карты на руках" - если хотите, то перенесите тему в другую ветку. Мне совершенно все равно в какой ветке я получу ответ на возникшие у меня вопросы.

А вопрос был "В какой версии OpenSCADA есть поддержка типа UInt32 в модуле Modbus?" и этот вопрос остался без ответа. Видимо придется просто поставить версию 0.9 и проверить если в ней поддержка типа UInt32.
Written on: 30. 03. 2017 [10:32]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"kantv" wrote:

Я не претендую, на то, что отсутствие поддержки типа UInt32 в модуле Modbus системы OpenSCADA это ошибка. Если на Ваш взгляд я завел эту тему не в том разделе форума, то я также ничего против переноса этой темы в другой раздел не имею и здесь у Вас как у администратора форума "все карты на руках" - если хотите, то перенесите тему в другую ветку. Мне совершенно все равно в какой ветке я получу ответ на возникшие у меня вопросы.

Я то перенесу, но на подобное там я вообще отвечать не буду, даже фразами, что это не ошибка! Читайте правила!

"kantv" wrote:

А вопрос был "В какой версии OpenSCADA есть поддержка типа UInt32 в модуле Modbus?" и этот вопрос остался без ответа. Видимо придется просто поставить версию 0.9 и проверить если в ней поддержка типа UInt32.

Для кого я это пишу прямо на главной странице!?
Обновление 0.8.17 (12.02.2017) к промышленному релизу продолжительного времени поддержки (LTS) предназначено для обновления существующих установок промышленной версии с целью исправления известных проблем и некоторых улучшений с предоставлением оперативных сервисных обновлений пользователям, подписанным на техническую поддержку. Обновление можно использовать для разворачивания новых установок однако лучше для этой цели использовать Рабочую версию (0.9) которая предоставляет много новых возможностей, модулей, библиотек компонентов и другое!


Learn, learn and learn better than work, work and work.
Written on: 30. 03. 2017 [10:57]
kantv
Антон Калюк
Topic creator
registered since: 29.11.2016
Posts: 17
Хотя Вы и не дали прямого ответа на вопрос, но теперь понятно, что в версии 0.9 поддержка UInt32 быть должна. Сейчас буду ставить и тестировать.

Кстати, на странице oscada.org/ru/glavnaja/zagruzit/ для версии 0.9 у операционной системы CentOS указана только версия 6 (прикладываю скриншот), хотя при переходе по ссылкам репозитория можно перейти в oscada.org/oscadaArch/Work/CentOs/7/, который судя по всему предназначен для CentOS7.

Вопрос - почему для OpenSCADA 0.9 в разделе загрузок не указана версия CentOS7? Потому что она не поддерживается или потому, это просто ОШИБКА на странице раздела загрузок?

Кстати, именно из-за того, что для версии 0.8 на сайте указана поддержка CentOS7, а для версии 0.9 - нет, я и установил версию 0.8, поскольку хотел установить ее именно на CentOS7.
Attachment

1.png (File type: image/png, Size: 116.48 kilobytes) — 1518 downloads
Written on: 30. 03. 2017 [11:55]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"kantv" wrote:

Вопрос - почему для OpenSCADA 0.9 в разделе загрузок не указана версия CentOS7? Потому что она не поддерживается или потому, это просто ОШИБКА на странице раздела загрузок?

Потому, что пакеты рабочей версии OpenSCADA собираются только для тех дистрибутивов, которые: я использую лично, которые используются в проектах где я участвую или для которых приобретён пакет технической поддержки.

И да, нужно про CentoOS там убрать вообще, поскольку для него сейчас пакеты не собираются вообще, а лежат там старые сборки.

Learn, learn and learn better than work, work and work.



12396