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

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


Author Message
Written on: 20. 04. 2013 [21:45]
almaz
Almaz Karimov
Contributor
Topic creator
registered since: 25.09.2008
Posts: 516
"punk" wrote:
Все-таки удалось провести некоторое сравнение DCON/ModBUS. Они немного различаются по скорострельности, в пользу DCON. И DCON и ModBUS позволяют уверенно сгенерировать меандр 250Гц (период опроса 0.002), но при генерации 500Гц у DCON появляются пропуски реже 1 в секунду, а у ModBus пропусков сильно больше.

Для таких высоких частот обмена нужно использовать другие блоки ввода-вывода. Например, совместимые с модулем Comedi OpenSCADA. Эти блоки и похожие применяются для 10 обменов в секунду и меньше. Некоторые блоки работают нормально до 100.

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 21. 04. 2013 [09:04]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"almaz" wrote:

"punk" wrote:
Все-таки удалось провести некоторое сравнение DCON/ModBUS. Они немного различаются по скорострельности, в пользу DCON. И DCON и ModBUS позволяют уверенно сгенерировать меандр 250Гц (период опроса 0.002), но при генерации 500Гц у DCON появляются пропуски реже 1 в секунду, а у ModBus пропусков сильно больше.

Для таких высоких частот обмена нужно использовать другие блоки ввода-вывода. Например, совместимые с модулем Comedi OpenSCADA. Эти блоки и похожие применяются для 10 обменов в секунду и меньше. Некоторые блоки работают нормально до 100.

Собственно лимит большинства модулей параллельных шин и USB определяется периодичностью прямого опроса, обеспеченной RT ядром, в 100us, т.е 10 КГц. Для большего уже нужно наличие и работа с FIFO, как DAQ.SoundCard и DAQ.DiamondBoards (скоро обновлю), где у меня работало на 100кГц. Работу с FIFO можно добавить и в DAQ.Comedi, как только у меня на руках будет такое оборудование, точнее оно есть в лице DMM32, которая работает через DAQ.DiamondBoards и DAQ.Comedi, добраться только нужно.

Learn, learn and learn better than work, work and work.
Written on: 01. 10. 2014 [12:56]
Godzilla
Арсен Закоян
Contributor
registered since: 12.02.2013
Posts: 123
Давно уже не брался за протокол DCON, вот тут пришлось.Я не понял если честно как работает увеличение числа попыток запроса в DCON-клиенте.Ставишь что 1,что 10 все равно посылает запрос 1 раз, вне зависимости от того принял данные или нет.Я так понимаю при неудачной попытке запроса параметра с ошибкой, должен попытаться еще раз пока не примет данные с контроллера. OpenSCADA v0.8.0.10.

[This article was edited 1 times, at last 01.10.2014 at 12:57.]
Written on: 01. 10. 2014 [14:10]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Godzilla" wrote:

Я так понимаю при неудачной попытке запроса параметра с ошибкой, должен попытаться еще раз пока не примет данные с контроллера. OpenSCADA v0.8.0.10.

Да, пока не истечёт количество попыток или не будет получен корретный ответ.
Давно уже 0.8.11 вышел!

Learn, learn and learn better than work, work and work.
Written on: 02. 10. 2014 [07:46]
Godzilla
Арсен Закоян
Contributor
registered since: 12.02.2013
Posts: 123
Поставил 0.8.11 . Все тоже самое принял ли ответ с ошибкой или без, запрашивает параметр контроллера 1 раз, хотя попыток запроса 10 выставил.
Written on: 02. 10. 2014 [07:58]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Godzilla" wrote:

Поставил 0.8.11 . Все тоже самое принял ли ответ с ошибкой или без, запрашивает параметр контроллера 1 раз, хотя попыток запроса 10 выставил.

Открываем исходник, функция DCONReq() и смотрим при каких ошибках имеет смысл и он повторяет!

Learn, learn and learn better than work, work and work.
Written on: 02. 10. 2014 [09:01]
Godzilla
Арсен Закоян
Contributor
registered since: 12.02.2013
Posts: 123
Вижу эту строку
string TMdContr::DCONReq( string &pdu, bool CRC, unsigned acqLen, char resOK )
но я в С++ не силен.
Ведь он должен запрашивать пока не истечёт количество попыток или не будет получен корретный ответ.Но этого не происходит,истекает время транспорта,DCON клиент не получает ответа и опрашивает следующий параметр.Несколько попыток он не осуществляет. в Атрибутах пишет Ошибка 10:Ошибка транспорта.Время исчерпано!
Written on: 02. 10. 2014 [17:59]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Godzilla" wrote:

Вижу эту строку
string TMdContr::DCONReq( string &pdu, bool CRC, unsigned acqLen, char resOK )
но я в С++ не силен.
Ведь он должен запрашивать пока не истечёт количество попыток или не будет получен корретный ответ.Но этого не происходит,истекает время транспорта,DCON клиент не получает ответа и опрашивает следующий параметр.

Вот как раз истечение таймаута транспорта это и не повод повторять. Ещё раз повторяю — "Исходник смотрим" и не вещаем комментариев, что он там что-то должен!
Повторы для ошибок типа CRC и не полный ответ, т.е. когда связь вроде и есть, но плохая, что-бы перезапросить.

Learn, learn and learn better than work, work and work.
Written on: 05. 10. 2014 [00:31]
Godzilla
Арсен Закоян
Contributor
registered since: 12.02.2013
Posts: 123
А было бы неплохо если бы добавили возможность повторять после истечения таймаута транспорта. Что же придется написать свою реализацию протокола DCON с блекджеком и девочками.:)
Written on: 07. 10. 2014 [02:02]
GluckMaker
Иван Михайлов
registered since: 06.10.2014
Posts: 2
Здравствуйте!

Хочу подружить с Опенскадой 0,9 из вчерашнего SVN модуль ICP CON i-7016D. Wiki для этого модуля рекомендует настройки 2AI(#AA), 2AI(#AAN), 1DI(@AADI), 4DO(@AADO). В реальности же происходит следующее: согласно документации ( http://ftp.icpdas.com/pub/cd/8000cd/napdos/7000/manual/7016.pdf ) и экспериментам в терминалке, на #AA он отвечает одним значением для канала, выбранного командой $AA3N. Команды #AAN он не знает. При беглом просмотре кода поддержки метода опроса с предварительным выбором канала не увидел. Это я что-то не так делаю, или этот модуль не поддерживается?

Далее, проверил цифровые выходы (@AADO) - по документации на 4 выхода даются 2 команды, в которых:
00 - DO0 выкл, DO1 выкл;
01 - DO0 вкл, DO1 выкл;
02 - DO0 выкл, DO1 вкл;
03 - DO0 вкл, DO1 вкл;
Аналогично 10 - DO2 выкл, DO3 выкл и так далее. В логе вижу, что при включении одной галки DO0 передаётся @01DO01 и @01DO11 (для краткости 01/11 - соответствует включению DO0 и DO2), DO1 - 02/12 (DO1 и DO3), DO2 - 00/11 (правильно), DO3 - 00/12 (правильно), DO0 и DO2 - 01/12 (DO0 и DO3). Есть_мнение (проверю завтра), что в 594 строку DCON_client.cpp стоит дописать "code=0".

Для опроса цифрового входа по документации надо сказать @AADI, на что модуль ответит !AASOOII, где S - алармы, OO - состояние выходов, II - состояние входа. Например, у меня он говорит !0100901 (аларма нет, включены DO0 и DO3, на входе высокий уровень). Код ожидает увидеть в ответе 7 символов и обижается на то, что их 8 - "20:Ошибка в длине пакета модуля". Это ошибка или 7016 такой особенный?

До кучи - аналоговый вывод у него управляется командой $AA7.

Реализацию недостающих методов могу дописать самостоятельно, проблема с цифровым выводом похожа на программную ошибку, а вот со вводом - это баг или фича?



14696