Автор |
Повідомлення |
Повідомлення створено: 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
[Повідомлення редагувалось 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.
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 с этим справится . А DCON лучше MobBus только в скорости сбора данных (для последовательного интерфейса, пакеты намного меньше). Оставлю пока как есть, если, конечно, не переубедите
[Повідомлення редагувалось 1 раз(ів), останній раз 17.07.2009 в 10:15.]
21 век - век повсеместной автоматизации. Главное - во благо всем людям.
|