Українська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.



14590