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

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


Автор Повідомлення
Повідомлення створено: 20. 12. 2008 [08:10]
almaz
Almaz Karimov
Contributor
Автор теми
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
В классе Serial модуля MODBUS используется функция read с параметрами VTIME=0 VMIN=1. То есть функция read полностью блокируется до приема хотя бы одного символа.
В случае, если нормально пришло полсимвола, а дальше пошли ошибки должно произойти полное зависание OpenSCADA (если в сети больше не появится хотя бы один символ). При отладке модуля DCON с оригинальным классом Serial так и произошло.

Гарантированный возврат управления функцией read независимо от любых ситуаций в сети RS-485 обеспечивается только параметрами VTIME=0 VMIN=0.

Вот пара источников с описанием:
http://wiki.linuxformat.ru/index.php/LXF90:Unix_API
http://www.unixwiz.net/techtips/termios-vmin-vtime.html

[Повідомлення редагувалось 1 раз(ів), останній раз 20.12.2008 в 08:13.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Повідомлення створено: 20. 12. 2008 [15:02]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
Да ну!
Здесь не зависнит потому как в буфере есть не менее 2 символов. По условию выше.
fcntl( fd, F_SETFL, 0 );
blen = read( fd, buf, sizeof(buf) );

Здесь не зависнит по причине того, что select вернётся или по наличию символов в буфере или по таймауту.
if( select(fd+1,&fdset,NULL,NULL,&tv) <= 0 )<-->break;
blen += read( fd, buf+blen, sizeof(buf)-blen );

Это проверенные механизмы используемые не только мною. Например в качестве источника этого кода является библиотека MOXA для работы с ModBus.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 22. 12. 2008 [08:15]
almaz
Almaz Karimov
Contributor
Автор теми
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
Понятно. Разобрался. Зависание вызывал код класса Serial модуля MODBUS версии OpenSCADA 0.6.1

А мы с Вами просто по-разному устранили ошибку.

Так как последовательная связь будет выделяться в отдельный транспортный протокол, то лучше код SSerial держать одинаковым. В данном случае достаточно в репозитории заменить целиком класс SSerial модуля DCON из модуля MODBUS (файлы DCON_client.h и DCON_client.cpp).

Кстати - хотелось бы получить доступ к репозиторию на запись...

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Повідомлення створено: 22. 12. 2008 [18:34]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
almaz wrote:

Так как последовательная связь будет выделяться в отдельный транспортный протокол, то лучше код SSerial держать одинаковым. В данном случае достаточно в репозитории заменить целиком класс SSerial модуля DCON из модуля MODBUS (файлы DCON_client.h и DCON_client.cpp).

Делайте патч.

almaz wrote:

Кстати - хотелось бы получить доступ к репозиторию на запись...

Тогда нужно официальный статус участника проекта получить. А для этого начните с патчей к уже имеющемуся в репозитории коду, тем самым показав свою компетентность и понимание этих технологий. А после выпуска 0.6.3 мы вернёмся к доступу на запись к репозиторию.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 14. 04. 2009 [22:18]
almaz
Almaz Karimov
Contributor
Автор теми
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
В репозитории появился новый транспорт Serial. Спасибо автору за адаптацию модуля DCON к новому транспорту.

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Повідомлення створено: 15. 04. 2009 [15:44]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
Пожалуйста.
Только Вы бы его проверили.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 30. 04. 2009 [07:05]
almaz
Almaz Karimov
Contributor
Автор теми
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
Vladimir_N-sk wrote:

almaz wrote:

Кому-нибудь удалось подключить модули по протоколу DCON через новый транспорт последовательных портов?
Да! В конечном итоге мне удалось настроить опрос дискретного модуля I-7051 icon_wink.gif


[Повідомлення редагувалось 1 раз(ів), останній раз 30.04.2009 в 07:06.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Повідомлення створено: 16. 07. 2009 [22:11]
almaz
Almaz Karimov
Contributor
Автор теми
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
Недавно приобрели блоки NL-8AI в rlda.ru, а в них, в отличии от I-7017, оказалось дополнительно 3 дискретных выхода. В остальном работают полностью как I-7017.
В связи с этим пришла мысль, в модуле DCON сделать один универсальный параметр, в котором задавать не модель блока, а кол-во DI, DO, AI, AO, точнее не кол-во, а диапазон с какого по какой канал считывать (к DI, DO это не относится, к ним скорее выбор 3, 4, 8, 16). Ну с этим определюсь, изучив побольше блоков.
Тогда модуль DCON охватит все блоки, выпускаемые различными производителями. Пользователю останется только подогнать поля параметра под нужную железку.
В ближайшее время собираюсь это сделать.

Клиент для доступа к SVN использую kdesvn, который выдает патчи в формате *.dif

Файл именно такого формата нужен для внесения изменений в репозиторий?

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Повідомлення створено: 17. 07. 2009 [08:37]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3750
almaz wrote:

В связи с этим пришла мысль, в модуле DCON сделать один универсальный параметр, в котором задавать не модель блока, а кол-во DI, DO, AI, AO, точнее не кол-во, а диапазон с какого по какой канал считывать (к DI, DO это не относится, к ним скорее выбор 3, 4, 8, 16). Ну с этим определюсь, изучив побольше блоков.
Тогда модуль DCON охватит все блоки, выпускаемые различными производителями. Пользователю останется только подогнать поля параметра под нужную железку.
В ближайшее время собираюсь это сделать.

Хорошо. А ещё это приблизит к возможности сделать работу OpenSCADA как сервер DCON, путём создания отдельного модуля подсистемы "Протокол" для DCON, так как сейчас с ModBus. icon_smile.gif

almaz wrote:

Клиент для доступа к SVN использую kdesvn, который выдает патчи в формате *.dif

Файл именно такого формата нужен для внесения изменений в репозиторий?

Да. Это тоже что делается консольной командой svn diff.

Learn, learn and learn better than work, work and work.
Повідомлення створено: 17. 07. 2009 [10:08]
almaz
Almaz Karimov
Contributor
Автор теми
Зареєстрован(а) с: 25.09.2008
Повідомлення: 516
Шутите. Чтоб использовать контроллер с OpenSCADA как блочок I-7000? Думаю этого делать не стоит. Протокол MobBus с этим справится icon_smile.gif . А DCON лучше MobBus только в скорости сбора данных (для последовательного интерфейса, пакеты намного меньше). Оставлю пока как есть, если, конечно, не переубедите icon_cool.gif

[Повідомлення редагувалось 1 раз(ів), останній раз 17.07.2009 в 10:15.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.



8987