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

Реализация протокола DCON модулей ввода-вывода I-7000 ICP DAS


Автор Сообщение
Сообщение создано: 16. 03. 2011 [23:46]
almaz
Almaz Karimov
Contributor
Создатель темы
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
Удобство такой библиотеки для работы с устройствами было бы, конечно, сверхкомфортно. Но овчинка выделки не стоит, потому что настройка блоков нужна редко (при монтаже системы, при замене неисправного блока, при смене типа сигнала датчика). Тем более, если учесть многообразие блоков, многообразие команд настройки блоков. Даже аналоги разных производителей могут имеют различные наборы команд и различные аппаратные модификации, которые расширяют набор команд. Драйвер скады, обеспечивающий только обмен с устройствами, достаточен.

Для модулей I-7000 есть утилита, которая постоянно обновляется производителем и позволяет выполнить любые настройки всех поддерживаемых блоков. Особую ценность в нём представляет сканер для определения блока с неизвестными настройками связи (сброса к заводским настройкам в блоках нет). Да и отправить пару-тройку команд с терминала по документации для настройки нового блока специалисту АСУТП не составит проблемы.

Роман, Ваше внимание нужно на других участках OpenSCADA. С модулем DCON разберусь, проверю работу всех блоков (отсутствующие по документации) и выложу доработку. Естественно, с учётом стиля исходного кода и применённых методов оптимизации. И svn уже 1307.

PS Ошибочные данные проходят в дальнейшую обработку как EVAL. Нужно будет организовывать дополнительный фильтр на ява для отсева недостоверных значений...

[Сообщение редактировалось 5 раз(а), в последний раз 17.03.2011 в 09:57.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 17. 03. 2011 [10:58]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"almaz" wrote:

Удобство такой библиотеки для работы с устройствами было бы, конечно, сверхкомфортно. Но овчинка выделки не стоит, потому что настройка блоков нужна редко (при монтаже системы, при замене неисправного блока, при смене типа сигнала датчика). Тем более, если учесть многообразие блоков, многообразие команд настройки блоков. Даже аналоги разных производителей могут имеют различные наборы команд и различные аппаратные модификации, которые расширяют набор команд. Драйвер скады,
обеспечивающий только обмен с устройствами, достаточен.

Согласен.

"almaz" wrote:

PS Ошибочные данные проходят в дальнейшую обработку как EVAL. Нужно будет организовывать дополнительный фильтр на ява для отсева недостоверных значений...

Не фильтр, а нормальную обработку ошибок. В типовых шаблонах параметров и элементах визуализации, БД библиотек OpenSCADA, это учитывается, обычно.

Learn, learn and learn better than work, work and work.
Сообщение создано: 17. 03. 2011 [11:19]
almaz
Almaz Karimov
Contributor
Создатель темы
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
Ну да - нужно вводить нормальную обработку ошибок.

Смысл занесения обработки ошибок в процедуру DCONReq состоит в корректной работе количества опросов устройства. Поэтому собираюсь завести обработку ВСЕХ ошибок всех методов обмена в DCONReq. Для этого добавлю пару-тройку передаваемых параметров в эту процедуру, среди которых будет указание каким способом обрабатывать первый символ, CRC, ожидаемы длины ответов. Попутно поправлю мелочи, если будут, в Task. Согласны?

[Сообщение редактировалось 1 раз(а), в последний раз 17.03.2011 в 11:26.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 17. 03. 2011 [13:45]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"almaz" wrote:

Смысл занесения обработки ошибок в процедуру DCONReq состоит в корректной работе количества опросов устройства. Поэтому собираюсь завести обработку ВСЕХ ошибок всех методов обмена в DCONReq. Для этого добавлю пару-тройку передаваемых параметров в эту процедуру, среди которых будет указание каким способом обрабатывать первый символ, CRC, ожидаемы длины ответов. Попутно поправлю мелочи, если будут, в Task. Согласны?

Для количества опросов там всё нужное уже сделано. А обработка признаков ошибок и длины ответа для количества не нужно, потому как при такой ошибке повторять нет смысла ибо результат всегда будет тот-же. Один только момент - случай с нетипичным расположением CRC, но это можно опустить, я думаю.

Learn, learn and learn better than work, work and work.
Сообщение создано: 17. 03. 2011 [14:10]
almaz
Almaz Karimov
Contributor
Создатель темы
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
Не только случай с нетипичным CRC. Такие ошибки как "20:Respond length error.", "22:Invalid module response.", которые сейчас обрабатываются в Task, могут не повториться при повторном опросе. 20-я понятно почему, а 22-я может возникнуть из-за ошибочного принятого устройством запроса (особенно при обмене без CRC).

[Сообщение редактировалось 1 раз(а), в последний раз 17.03.2011 в 14:16.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 17. 03. 2011 [16:17]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"almaz" wrote:

Не только случай с нетипичным CRC. Такие ошибки как "20:Respond length error.", "22:Invalid module response.", которые сейчас обрабатываются в Task, могут не повториться при повторном опросе. 20-я понятно почему, а 22-я может возникнуть из-за ошибочного принятого устройством запроса (особенно при обмене без CRC).

Как раз 20 и не понятно. Если есть символ '\r' то наверняка сообщение получено целиком и размер корректен, а значит повтор ничего не изменит. Разве что с модулем конкретные проблемы. С 22 согласен, можно и повторить.

P.S. Добавил к функции DCONReq() параметр символа корректного завершения и упростил все вызовы с символом корректного результата '!'.

Learn, learn and learn better than work, work and work.
Сообщение создано: 11. 04. 2011 [12:49]
almaz
Almaz Karimov
Contributor
Создатель темы
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
строка 402 файла DCON_client.cpp

if(di_txterr == "0") DI = strtoul(pdu.substr(1,4).c_str(),NULL,16); //???? substring length 4 for any request?

Для всех cntr.p_hd[i_p].at().di_method длина вырезаемой строки 4, кроме cntr.p_hd[i_p].at().di_method==201. Нужна строка длиной 2. Или, раз уж вырезано 4 символа, после этой строки можно сдвинуть результат на 8 битов вправо при 201 методе (до оптимизации модуля использовались другие маски битов при длине строки 4):

if(cntr.p_hd[i_p].at().di_method==201) DI=DI>>8;

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 11. 04. 2011 [15:47]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
"almaz" wrote:

if(cntr.p_hd[i_p].at().di_method==201) DI=DI>>8;


Добавил, сегодня сгружу.

Learn, learn and learn better than work, work and work.
Сообщение создано: 12. 04. 2011 [10:33]
almaz
Almaz Karimov
Contributor
Создатель темы
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
svn 1337. Больше неполадок не нахожу. Ориентируясь по документации, должны работать любые блоки. Практика покажет...

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 13. 04. 2011 [16:12]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
Хорошо

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



1809