Стартовая страница › Форумы › Ошибки в работе › Ошибки Коммуникатора › Странности поведения линии связи
- В этой теме 20 ответов, 2 участника, последнее обновление 7 лет назад сделано
Mikhail.
-
АвторСообщения
-
07.06.2019 в 17:31 #12171
MikhailМодераторВ случае же получения байт ответа должен сбрасываться по истечении паузы «тишины» после принятия последнего байта ответа.
Изучение вопроса показало, что в .NET можно установить таймаут только на всю операцию чтения. Таймаут меджу приёмом соседних байт отсутствует, к сожалению. Для сравнения в Delphi такая возможность была. Но Delphi скорее мёртв, чем жив. Хотя есть как минимам одна российская скада, написанная на Delphi ))
07.06.2019 в 17:33 #12172
MikhailМодераторТаймаут меджу приёмом соседних байт можно реализовать программно.
07.06.2019 в 18:15 #12173
manjey73Участникда я не говорю о таймауте между соседними байтами, я говорю о возможности его сброса после начала приема и возникновения паузы больше какой-то длительности.
прибор отправляет пачку байт с учетом промежутка между ними, когда прибор все отправил возникает тишина, прибор ждет следующего запроса. а сейчас получается, что мы задали буфер 200 байт и даже если прибор ответил количеством 10 байт (ну не понравилось ему что-то в запросе) мы ждем пока придут все 200. и только тогда сбросится тайм аут…
Речь именно о наличии поступления байт и последующей тишине, сброс таймаута только в этом случае. Если мы ничего не получаем, то как положено ожидаем весь период таймаута.
Такой режим в Коммуникаторе можно реализовать в текущем исполнении или требуется доработка ?08.06.2019 в 12:01 #12174
MikhailМодераторТаймаут между байтами — это и есть прекращение приёма при наступлении тишины определённой длительности.
Такой режим в Коммуникаторе можно реализовать в текущем исполнении или требуется доработка ?
Требуется доработка канала связи Serial Port. Причём для каналов связи TCP и UDP эта функция вообще не будет работать, потому что там приходит сразу пакет.
Поэтому самый оптимальный вариант — определять длину, которую требуется принять. Либо, если протокол позволяет — прекращать приём по символу окончания пакета.08.06.2019 в 19:04 #12175
manjey73УчастникХм, что-то я не заметил прекращения таймаута по наступлению тишины, когда счетчик с M-Bus подключал. Очень медленное чтение. Теперь понимаю почему, ожидались все 250 байт. Подключение было USB — M-Bus, через COM порт.
А в режиме работы порта поверх TCP вообще работать не будет я так понимаю ?
10.06.2019 в 18:16 #12176
MikhailМодераторя не заметил прекращения таймаута по наступлению тишины
Его нет. Я писал о том, что можно реализовать, но лучше вычислять ожидаемую длину получаемых данных.
А в режиме работы порта поверх TCP вообще работать не будет я так понимаю ?
Верно, в TCP нет подобного таймаута, т.к. данные приходят пакетами, а не побайтно.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.