Do you have a question? Post it now! No Registration Necessary
Subject
- Posted on
Сеть сбора данных
- 02-18-2004
- Gena Gutnicky
February 18, 2004, 9:01 am

Привет, всезнающий All !
На закате своей кар'еры в небольшой, но малоизвестной :-)
фирме сподобился я изваять небольшую гамму приборов,
имеющих интерфейс и выпускаемых до сих пор с общим
тиражом уже в тысячах штук. Опыта интерфейсного было
немного, мне положили плохонький перевод описания
Modbus фирмы Шнайдер Электрик :"Вот тебе букварь, по
нему и дуй". Шаг влево, шаг вправо - сами понимаете.
Выбор был небольшой : Modbus ASCII mode и он же RTU mode.
Опасаясь, что от Винды необходимой для второго варианта
непрерывности пакета я не дождусь ( а там пауза в 2 байта
воспринимается как конец сообщения) , я выбрал первый.
Физический и-фейс RS485. Скорости вполне хватало для
опроса в разумных временных пределах 2-3 десятков точек.
Сделали, разложили по цеху с десяток дивайсов даже не
на витой паре, а на самокрутках - работает. С тем я и
отбыл восвояси по независящим причинам.
Потом выясняется - не идут сети на об'ектах. Приз-
ванный на спасение софтописатель верхнего уровня
( 5-й по счету, первым дело начинал на FoxPro юноша, до
этого автоматизировавший на Клиппере под ДОСом
исполкомы, морги и загсы) - изрек вердикт : протокол
ни в дугу.
И хоть теперь мне это до фонаря, обидно стало
( не за себя даже, за старика Шнайдера - его ведь
протокол :-) . Из того, что я узнал, выяснялись
любопытные вещи : идет, допустим, на 9600, а на 1200
через пень-колоду, короткие сообщения еще так-сяк, а
длинные затыкали систему. Единственно разумное об'я -
снение я вижу такое : ребята тупо нарезают времянку
по таймеру, и не дождавшись не то что отклика, а даже
конца своей посылки, догоняют ей в хвост новой. Дивайсы,
ес-сно, молчат - они ничего понять не могут.
Вопрос такой у меня : есть ли у кого успешный опыт
практического внедрения сабжа с примененем обычной
винды на верхнем уровне (не реал-тайм ОС) и бинарной
передачей данных (не ASCII ) ? Конечно, это не панацея,
переход на RTU даст ускорение максимум процентов на 45
только чистого времени передачи, но даже в ASCII это
надо умудриться : связь с 2 десятками дивайсов на уровне
запросов "КТО ТАМ?" устанавливать минут 18 Ж-(
WBR Eugene
На закате своей кар'еры в небольшой, но малоизвестной :-)
фирме сподобился я изваять небольшую гамму приборов,
имеющих интерфейс и выпускаемых до сих пор с общим
тиражом уже в тысячах штук. Опыта интерфейсного было
немного, мне положили плохонький перевод описания
Modbus фирмы Шнайдер Электрик :"Вот тебе букварь, по
нему и дуй". Шаг влево, шаг вправо - сами понимаете.
Выбор был небольшой : Modbus ASCII mode и он же RTU mode.
Опасаясь, что от Винды необходимой для второго варианта
непрерывности пакета я не дождусь ( а там пауза в 2 байта
воспринимается как конец сообщения) , я выбрал первый.
Физический и-фейс RS485. Скорости вполне хватало для
опроса в разумных временных пределах 2-3 десятков точек.
Сделали, разложили по цеху с десяток дивайсов даже не
на витой паре, а на самокрутках - работает. С тем я и
отбыл восвояси по независящим причинам.
Потом выясняется - не идут сети на об'ектах. Приз-
ванный на спасение софтописатель верхнего уровня
( 5-й по счету, первым дело начинал на FoxPro юноша, до
этого автоматизировавший на Клиппере под ДОСом
исполкомы, морги и загсы) - изрек вердикт : протокол
ни в дугу.
И хоть теперь мне это до фонаря, обидно стало
( не за себя даже, за старика Шнайдера - его ведь
протокол :-) . Из того, что я узнал, выяснялись
любопытные вещи : идет, допустим, на 9600, а на 1200
через пень-колоду, короткие сообщения еще так-сяк, а
длинные затыкали систему. Единственно разумное об'я -
снение я вижу такое : ребята тупо нарезают времянку
по таймеру, и не дождавшись не то что отклика, а даже
конца своей посылки, догоняют ей в хвост новой. Дивайсы,
ес-сно, молчат - они ничего понять не могут.
Вопрос такой у меня : есть ли у кого успешный опыт
практического внедрения сабжа с примененем обычной
винды на верхнем уровне (не реал-тайм ОС) и бинарной
передачей данных (не ASCII ) ? Конечно, это не панацея,
переход на RTU даст ускорение максимум процентов на 45
только чистого времени передачи, но даже в ASCII это
надо умудриться : связь с 2 десятками дивайсов на уровне
запросов "КТО ТАМ?" устанавливать минут 18 Ж-(
WBR Eugene
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Re: Сеть сбора данных
Hello Gena,
GG> На закате своей кар'еры в небольшой, но малоизвестной :-)
GG> фирме сподобился я изваять небольшую гамму приборов,
GG> Вопрос такой у меня : есть ли у кого успешный опыт
GG> практического внедрения сабжа с примененем обычной
GG> винды на верхнем уровне (не реал-тайм ОС) и бинарной
GG> передачей данных (не ASCII ) ? Конечно, это не панацея,
GG> переход на RTU даст ускорение максимум процентов на 45
GG> только чистого времени передачи, но даже в ASCII это
GG> надо умудриться : связь с 2 десятками дивайсов на уровне
GG> запросов "КТО ТАМ?" устанавливать минут 18 Ж-(
Слухи о не "релтаймовости" винды 9X сильно преувеличены
(имею основания так заявить - как-то написал мерялку interrupt
latency). W2K/XP немного помедленнее (в смысле среднее
latency у них побольше, но зато и абсолютное максимальное
- небольшое), но тоже ничего.
В свое время мы разрабатывали протокол на RS-485 для
сети ЭККА (до 30-ти на сегмент) - (как я сейчас понимаю -
почти копия протокола USB :-) - в этом протоколе перерыв в 3
байта тоже считается за окончание пакета. Так вот - много
чего было перепробовано из опасений "глючный Windows не даст
каналу нормально жить - и драйверы свои писались, и железо
(ISA/PCI485 платы) делалось. В итоге все это заменено простой DLL,
использующей Win32 API - CreateFile/WriteFile/ReadFile. (Ну, правда
только для нескоростных решений - все-таки тайминги точно выдержать
нельзя - они сделаны из Win32 с "большим запасом" - 1 мс вместо
100 мкс, например).
Родные виндовые порт-драйверы под классический 550-ый UART написаны
довольно хорошо, умеют использовать FIFO (как для NT так и 9X), так что
перерывов в потоке байтов почти не бывает, так что можно спокойно
использовать Win32 API.
ЗЫ: а протокол должен быть "дуракоустойчивым" - допускающим потери
пакетов, с нумерацией пакетов, с автоповторами и автосинхронизацией
начала/конца пакета, тогда редкие проявления нереалтаймовости ОС
не будут играть никакой роли.
GG> На закате своей кар'еры в небольшой, но малоизвестной :-)
GG> фирме сподобился я изваять небольшую гамму приборов,
GG> Вопрос такой у меня : есть ли у кого успешный опыт
GG> практического внедрения сабжа с примененем обычной
GG> винды на верхнем уровне (не реал-тайм ОС) и бинарной
GG> передачей данных (не ASCII ) ? Конечно, это не панацея,
GG> переход на RTU даст ускорение максимум процентов на 45
GG> только чистого времени передачи, но даже в ASCII это
GG> надо умудриться : связь с 2 десятками дивайсов на уровне
GG> запросов "КТО ТАМ?" устанавливать минут 18 Ж-(
Слухи о не "релтаймовости" винды 9X сильно преувеличены
(имею основания так заявить - как-то написал мерялку interrupt
latency). W2K/XP немного помедленнее (в смысле среднее
latency у них побольше, но зато и абсолютное максимальное
- небольшое), но тоже ничего.
В свое время мы разрабатывали протокол на RS-485 для
сети ЭККА (до 30-ти на сегмент) - (как я сейчас понимаю -
почти копия протокола USB :-) - в этом протоколе перерыв в 3
байта тоже считается за окончание пакета. Так вот - много
чего было перепробовано из опасений "глючный Windows не даст
каналу нормально жить - и драйверы свои писались, и железо
(ISA/PCI485 платы) делалось. В итоге все это заменено простой DLL,
использующей Win32 API - CreateFile/WriteFile/ReadFile. (Ну, правда
только для нескоростных решений - все-таки тайминги точно выдержать
нельзя - они сделаны из Win32 с "большим запасом" - 1 мс вместо
100 мкс, например).
Родные виндовые порт-драйверы под классический 550-ый UART написаны
довольно хорошо, умеют использовать FIFO (как для NT так и 9X), так что
перерывов в потоке байтов почти не бывает, так что можно спокойно
использовать Win32 API.
ЗЫ: а протокол должен быть "дуракоустойчивым" - допускающим потери
пакетов, с нумерацией пакетов, с автоповторами и автосинхронизацией
начала/конца пакета, тогда редкие проявления нереалтаймовости ОС
не будут играть никакой роли.
--
Best regards,
Vyacheslav mailto: snipped-for-privacy@helpco.kiev.ua
Best regards,
Vyacheslav mailto: snipped-for-privacy@helpco.kiev.ua

Re: Сеть сбора данных
Hello,Vyacheslav !
VO> Слухи о не "релтаймовости" винды 9X сильно преувеличены
VO> (имею основания так заявить - как-то написал мерялку interrupt
VO> latency). W2K/XP немного помедленнее (в смысле среднее
VO> latency у них побольше, но зато и абсолютное максимальное
VO> - небольшое), но тоже ничего.
<skip>
Да, похоже, перестраховался я. Но теперь на верхнем уровне уже не 9Х,
а ХР.
VO> ЗЫ: а протокол должен быть "дуракоустойчивым" - допускающим потери
VO> пакетов, с нумерацией пакетов, с автоповторами и
автосинхронизацией
VO> начала/конца пакета,
Ну, автосинхронизация,imho, - это и есть пауза в 2-3 байта, а если
использовать для синхронизации какую-нибудь зарезервированную
последовательность, то она не должна встречаться в передаваемых
данных - и опять плавно перетекаем в текстовый режим, где один символ
отвечает только за начало, другой - за конец, а третья группа
товарищей - за передаваемые данные. Хотя, конечно, если отслеживать
и тайминги, и эту последовательность, то ее в непрерывном потоке
не воспринимать как синхропосылку - можно. Только сейчас,на ходу
сообразил. Эх, рано они меня выперли ! :-))
А автоповтор - этим и должна заниматься прога верхнего уровня, за это
ей и деньги плачены. Хотя идеальным решением был бы, imho, связной
контроллер вместо Фаствела-Адама, когда наверх он гнал бы инфу
дуплексом на 115200, а вниз - сообразно протоколу, совмещая во
времени запрос с ответом (для разных дивайсов, само собой).
Я не поклонник самопала, но если он обеспечивает лучшее качество -
почему бы и нет ?
И мне не кажется крамолой, если бы с дальними дивайсами он беседовал
на 2400, с ближними - на 19200. В текстовом режиме, разумеется.
Тогда на другой скорости дивайсы не уловили бы стартовый символ ':',
его поняли бы только дивайсы , настроенные на эту скорость. Хотя,
кажется, это уже из области бреда - нет гарантии, что какая-нибудь
комбинация бит не прозвучит на другой скорости как стартовая
0x3A (':') .
Идея бредовая - патентовать не буду, дарю всем на халяву :-)
VO> тогда редкие проявления нереалтаймовости ОС <skip>
VO> не будут играть никакой роли.
Конечно. Тем боле что система МАСТЕР - остальные СЛЕЙВЫ,
если не ответил вызванный - повтори. Задача в общем-то не из
суперсложных, дивайсы с "зачатками интеллекта", сами ведут журналы
аварийных отключений и осциллограммы предаварийных событий, так что
реалтайм в чистом виде и на фиг не нужен, эти сведения дивайс отдаст
когда хошь, не обязательно сию секунду. Надо было бы бинарную
передачу - и пакеты короче, и код с иправлнением ошибок влимонить
проще - но это было бы отступление от букваря - шаг влево ...
Но посыпаю бошку этим самым только процентов на 15 - что на НОНЕШНЕМ
протоколе невозможно сделать устойчивую сеть... "Не верю" !
(К.С.Станиславский)
WBR Eugene
VO> Слухи о не "релтаймовости" винды 9X сильно преувеличены
VO> (имею основания так заявить - как-то написал мерялку interrupt
VO> latency). W2K/XP немного помедленнее (в смысле среднее
VO> latency у них побольше, но зато и абсолютное максимальное
VO> - небольшое), но тоже ничего.
<skip>
Да, похоже, перестраховался я. Но теперь на верхнем уровне уже не 9Х,
а ХР.
VO> ЗЫ: а протокол должен быть "дуракоустойчивым" - допускающим потери
VO> пакетов, с нумерацией пакетов, с автоповторами и
автосинхронизацией
VO> начала/конца пакета,
Ну, автосинхронизация,imho, - это и есть пауза в 2-3 байта, а если
использовать для синхронизации какую-нибудь зарезервированную
последовательность, то она не должна встречаться в передаваемых
данных - и опять плавно перетекаем в текстовый режим, где один символ
отвечает только за начало, другой - за конец, а третья группа
товарищей - за передаваемые данные. Хотя, конечно, если отслеживать
и тайминги, и эту последовательность, то ее в непрерывном потоке
не воспринимать как синхропосылку - можно. Только сейчас,на ходу
сообразил. Эх, рано они меня выперли ! :-))
А автоповтор - этим и должна заниматься прога верхнего уровня, за это
ей и деньги плачены. Хотя идеальным решением был бы, imho, связной
контроллер вместо Фаствела-Адама, когда наверх он гнал бы инфу
дуплексом на 115200, а вниз - сообразно протоколу, совмещая во
времени запрос с ответом (для разных дивайсов, само собой).
Я не поклонник самопала, но если он обеспечивает лучшее качество -
почему бы и нет ?
И мне не кажется крамолой, если бы с дальними дивайсами он беседовал
на 2400, с ближними - на 19200. В текстовом режиме, разумеется.
Тогда на другой скорости дивайсы не уловили бы стартовый символ ':',
его поняли бы только дивайсы , настроенные на эту скорость. Хотя,
кажется, это уже из области бреда - нет гарантии, что какая-нибудь
комбинация бит не прозвучит на другой скорости как стартовая
0x3A (':') .
Идея бредовая - патентовать не буду, дарю всем на халяву :-)
VO> тогда редкие проявления нереалтаймовости ОС <skip>
VO> не будут играть никакой роли.
Конечно. Тем боле что система МАСТЕР - остальные СЛЕЙВЫ,
если не ответил вызванный - повтори. Задача в общем-то не из
суперсложных, дивайсы с "зачатками интеллекта", сами ведут журналы
аварийных отключений и осциллограммы предаварийных событий, так что
реалтайм в чистом виде и на фиг не нужен, эти сведения дивайс отдаст
когда хошь, не обязательно сию секунду. Надо было бы бинарную
передачу - и пакеты короче, и код с иправлнением ошибок влимонить
проще - но это было бы отступление от букваря - шаг влево ...
Но посыпаю бошку этим самым только процентов на 15 - что на НОНЕШНЕМ
протоколе невозможно сделать устойчивую сеть... "Не верю" !
(К.С.Станиславский)
WBR Eugene
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Re: Сеть сбора данных
Привет, 18 февраля 2004 г., 12:01:00, ты писал(а):
GG> Конечно, это не панацея,
GG> переход на RTU даст ускорение максимум процентов на 45
GG> только чистого времени передачи, но даже в ASCII это
GG> надо умудриться : связь с 2 десятками дивайсов на уровне
GG> запросов "КТО ТАМ?" устанавливать минут 18 Ж-(
По-моему, не все в порядке в "королевстве датском" и следует сменить
программиста.
Всего хорошего.
GG> Конечно, это не панацея,
GG> переход на RTU даст ускорение максимум процентов на 45
GG> только чистого времени передачи, но даже в ASCII это
GG> надо умудриться : связь с 2 десятками дивайсов на уровне
GG> запросов "КТО ТАМ?" устанавливать минут 18 Ж-(
По-моему, не все в порядке в "королевстве датском" и следует сменить
программиста.
Всего хорошего.
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru

Re: Сеть сбора данных
Hello Gena.
18 Feb 04 19:20, you wrote to Vyacheslav Ovsiyenko:
GG> если
GG> использовать для синхронизации какую-нибудь зарезервированную
GG> последовательность, то она не должна встречаться в передаваемых
GG> данных
Это элементарно - посмотри, как сделано в протоколе SLIP или PPP.
Alexey
18 Feb 04 19:20, you wrote to Vyacheslav Ovsiyenko:
GG> если
GG> использовать для синхронизации какую-нибудь зарезервированную
GG> последовательность, то она не должна встречаться в передаваемых
GG> данных
Это элементарно - посмотри, как сделано в протоколе SLIP или PPP.
Alexey

Сеть сбора данных
Hi Gena !
Совсем недавно 18 Feb 04 12:01, Gena Gutnicky писал к All:
GG> Вопрос такой у меня : есть ли у кого успешный опыт
GG> практического внедрения сабжа с примененем обычной
GG> винды на верхнем уровне (не реал-тайм ОС) и бинарной
GG> передачей данных (не ASCII ) ?
Да, есть.
Hу, раньше свой протокол применяли. Там чужая каналообразующая аппаратура,
каналы 100 бод, много помех. Все работало.
Сейчас Modbus-RTU применяем. 4800-19200. RS-485.
Да нет никаких проблем.
Что с юниксами, что с виндами.
В-общем, любой бинарный протокол много где работает без проблем. Просто нужно
нормально продумать логику выхода из нештатных ситуаций (таймауты, контроль
корректности принимаемого пакета...)
GG> переход на RTU даст ускорение максимум процентов на 45
GG> только чистого времени передачи, но даже в ASCII это
GG> надо умудриться : связь с 2 десятками дивайсов на уровне
GG> запросов "КТО ТАМ?" устанавливать минут 18 Ж-(
Hу, тут вообще неясно. Скорость какая?
WBRgrds
Ruslan
Совсем недавно 18 Feb 04 12:01, Gena Gutnicky писал к All:
GG> Вопрос такой у меня : есть ли у кого успешный опыт
GG> практического внедрения сабжа с примененем обычной
GG> винды на верхнем уровне (не реал-тайм ОС) и бинарной
GG> передачей данных (не ASCII ) ?
Да, есть.
Hу, раньше свой протокол применяли. Там чужая каналообразующая аппаратура,
каналы 100 бод, много помех. Все работало.
Сейчас Modbus-RTU применяем. 4800-19200. RS-485.
Да нет никаких проблем.
Что с юниксами, что с виндами.
В-общем, любой бинарный протокол много где работает без проблем. Просто нужно
нормально продумать логику выхода из нештатных ситуаций (таймауты, контроль
корректности принимаемого пакета...)
GG> переход на RTU даст ускорение максимум процентов на 45
GG> только чистого времени передачи, но даже в ASCII это
GG> надо умудриться : связь с 2 десятками дивайсов на уровне
GG> запросов "КТО ТАМ?" устанавливать минут 18 Ж-(
Hу, тут вообще неясно. Скорость какая?
WBRgrds
Ruslan

Re: Сеть сбора данных
Hello, Ruslan !
RM> Сейчас Modbus-RTU применяем. 4800-19200. RS-485.
RM> Да нет никаких проблем.
RM> Что с юниксами, что с виндами.
Понял, сенкс.
RM> В-общем, любой бинарный протокол много где работает без проблем.
Просто нужно
RM> нормально продумать логику выхода из нештатных ситуаций (таймауты,
контроль
RM> корректности принимаемого пакета...)
Корректность - это штатно по RTU - CRC16.
RM> Hу, тут вообще неясно. Скорость какая?
Да бис его знает - это уже после моего отбытия. Шеф плевался и
топал ногами - и я его понимаю. Но анализа никакого нет.
Я предлагал сварганить мониторчик сети - выделить нотебуку,
прицепить ее к сети, и чтоб только принимал весь трафик,
фиксируя время поступления - и сразу было бы видно ,
кто "задумчивый" - комп или дивайсы, битый пакет ушел или
дивайс его плохо принял и т.д. А так - черный ящик. 1 бит
информации - "НЕ РАБОТАЕТ" .
WBR Eugene Gavruk ( ex G.G. :-)
RM> Сейчас Modbus-RTU применяем. 4800-19200. RS-485.
RM> Да нет никаких проблем.
RM> Что с юниксами, что с виндами.
Понял, сенкс.
RM> В-общем, любой бинарный протокол много где работает без проблем.
Просто нужно
RM> нормально продумать логику выхода из нештатных ситуаций (таймауты,
контроль
RM> корректности принимаемого пакета...)
Корректность - это штатно по RTU - CRC16.
RM> Hу, тут вообще неясно. Скорость какая?
Да бис его знает - это уже после моего отбытия. Шеф плевался и
топал ногами - и я его понимаю. Но анализа никакого нет.
Я предлагал сварганить мониторчик сети - выделить нотебуку,
прицепить ее к сети, и чтоб только принимал весь трафик,
фиксируя время поступления - и сразу было бы видно ,
кто "задумчивый" - комп или дивайсы, битый пакет ушел или
дивайс его плохо принял и т.д. А так - черный ящик. 1 бит
информации - "НЕ РАБОТАЕТ" .
WBR Eugene Gavruk ( ex G.G. :-)
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Site Timeline
- » Keil C: function pointers array
- — Next thread in » Microcontrollers (Russian)
-
- » static & volatile
- — Previous thread in » Microcontrollers (Russian)
-
- » По моему это гениально
- — Newest thread in » Microcontrollers (Russian)
-
- » (PDF) Essentials of Anatomy & Physiology 2nd Ed by Kenneth Saladin
- — The site's Newest Thread. Posted in » Electronics (Polish)
-