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

Openscada и протокол "ОВЕН"


Автор Сообщение
Сообщение создано: 01. 08. 2014 [08:00]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"IrmIngeneer" wrote:

Внимание! Приведенная в кач-ве примера библиотека работает некорректно в версии 0.8.11 (возвращает неверные значения) и корректно в версии 0.8.0.9.

Вероятно это связанно с функцией strDec4Bin(), системное отражение которой расширено указанием в качестве разделителя (по умолчанию сейчас отсутствует) не только пробела. В процессе адаптации к этому изменению пропустил использования в заголовках, т.е. в этой функции. Сейчас добавил туда третий аргумент разделителя со значением по умолчанию " ". Однако попадёт это в LTS со следующим обновлением.

Как вариант сейчас можно использовать универсальный объектный декодер SYS.strDecode().

Learn, learn and learn better than work, work and work.
Сообщение создано: 01. 08. 2014 [08:35]
IrmIngeneer
Константин \m/
Contributor
Sponsor
Зарегистрирован(а) с: 16.09.2010
Сообщения: 185
"roman" wrote:


Вероятно это связанно с функцией strDec4Bin(), системное отражение которой расширено указанием в качестве разделителя (по умолчанию сейчас отсутствует) не только пробела. В процессе адаптации к этому изменению пропустил использования в заголовках, т.е. в этой функции. Сейчас добавил туда третий аргумент разделителя со значением по умолчанию " ". Однако попадёт это в LTS со следующим обновлением.

Как вариант сейчас можно использовать универсальный объектный декодер SYS.strDecode().


После обновления для общения с OWEN снова начал использовать свою ф-ию ConvIEEE_F.

Роман, большое спасибо за пояснение, сэкономил много времени.

[Сообщение редактировалось 1 раз(а), в последний раз 01.08.2014 в 08:37.]
Сообщение создано: 07. 03. 2015 [17:22]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"IrmIngeneer" wrote:

OWEN.db

Рефакторил и влил в библиотеку пользовательских протоколов: http://wiki.oscada.org/HomePageEn/Using/APIFunctionLibs/LibUserPrtDevs
Проверять не на чем да и часть данных этого протокола там имеет только зачаточное состояние.

В любом случае протокольную часть унифицировал и внёс CRC и перекодировщики прямо туда, поскольку им там и место. И соответственно библиотека внешних функций не нужна.

Learn, learn and learn better than work, work and work.
Сообщение создано: 07. 03. 2015 [19:52]
IrmIngeneer
Константин \m/
Contributor
Sponsor
Зарегистрирован(а) с: 16.09.2010
Сообщения: 185
"roman" wrote:

"IrmIngeneer" wrote:

OWEN.db

Рефакторил и влил в библиотеку пользовательских протоколов: http://wiki.oscada.org/HomePageEn/Using/APIFunctionLibs/LibUserPrtDevs
Проверять не на чем да и часть данных этого протокола там имеет только зачаточное состояние.

В любом случае протокольную часть унифицировал и внёс CRC и перекодировщики прямо туда, поскольку им там и место. И соответственно библиотека внешних функций не нужна.


Спасибо, на днях потестирую, отпишусь.
Сообщение создано: 30. 11. 2015 [11:37]
andrelek
Андрей Полевой
Зарегистрирован(а) с: 13.12.2008
Сообщения: 210
Здравствуйте! Скачал вышеуказанную библиотеку http://wiki.oscada.org/Using/APIFunctionLibs/files?get=oscadalibs.db.gz, и проверил работу с прибором ТРМ138.

Все работает правильно, текст правильный за исключением опечатки в тексте:
----------------------------------------------------------------------------------------------------------------------------------
//Send the request and get respond
resp = tr.messIO(request);
while(resp[resp.length-1] != "\r" && (respTail=tr.messIO("")).length) resp += request;
----------------------------------------------------------------------------------------------------------------------------------
нужно заменить последнюю переменную на
----------------------------------------------------------------------------------------------------------------------------------
//Send the request and get respond
resp = tr.messIO(request);
while(resp[resp.length-1] != "\r" && (respTail=tr.messIO("")).length) resp += respTail; //request;
----------------------------------------------------------------------------------------------------------------------------------
Сообщение создано: 30. 11. 2015 [12:38]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"andrelek" wrote:

Все работает правильно, текст правильный за исключением опечатки в тексте:
...
while(resp[resp.length-1] != "\r" && (respTail=tr.messIO("")).length) resp += respTail; //request;
----------------------------------------------------------------------------------------------------------------------------------

Да, или вообще в одну строку:
for(resp = tr.messIO(request); resp[resp.length-1] != "\r" && (respTail=tr.messIO("")).length; ) resp += respTail;

Learn, learn and learn better than work, work and work.
Сообщение создано: 30. 11. 2015 [14:56]
andrelek
Андрей Полевой
Зарегистрирован(а) с: 13.12.2008
Сообщения: 210
Так даже изящней выходит, проверил.
Сообщение создано: 29. 02. 2016 [08:16]
alecs
Александр Курачанский
Зарегистрирован(а) с: 05.03.2013
Сообщения: 28
Есть проблема, опрашиваю двух канальный трм. При опросе одного регистра все в порядке, а два одновременно плучаем кашу. Прошу откликнуться кто проверял пользовательский протокол овен на группе приборов.
Сообщение создано: 29. 02. 2016 [10:48]
andrelek
Андрей Полевой
Зарегистрирован(а) с: 13.12.2008
Сообщения: 210

alecs wrote:

При опросе одного регистра все в порядке.....

Имееется ввиду одного из каналов одного и того же прибора, так?

Тестил протокол на ТРМ138 (8-ми канальный) на всех восьми каналах, работало корректно.

[Сообщение редактировалось 1 раз(а), в последний раз 29.02.2016 в 10:52.]
Сообщение создано: 29. 02. 2016 [11:02]
alecs
Александр Курачанский
Зарегистрирован(а) с: 05.03.2013
Сообщения: 28
Таки да. Прибор двух канальный. Один из каналов читается, два читаю, сыпятся ошибки. Если осталась наработка, поделитесь.



4354