ожидание на COM порте
От: vvv848165@ya.ru  
Дата: 05.10.20 12:36
Оценка:
такая ситуация — нужно долго ждать и изредко отсылать в порт данные,
аналог NOOP тоже можно отсылать,
COM порт виртуальный через USB.
Что лучше сделать?
1) переоткрывать порт каждый раз
2) держать открытым (а NOOP нужен?)
или что-то другое?
Если кто-то таким занимался то пожалуйста расскажите каких сюрпризов стоит ожидать.
Re: ожидание на COM порте
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.10.20 13:20
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>1) переоткрывать порт каждый раз


Если линия используется исключительно для общения с одним устройством (устройства на линии не меняются) то какой смысл переоткрывать порт? Открывание порта — это создание сеанса связи между двумя точками. Пока у любой из сторон может возникнуть надобность послать сообщение — сеанс не должен прекращаться.

Технически, если удаленное устройство подключено только по RX/TX, и не использует сигналов управления потоком, можно и закрывать порт, только в этом нет никакого смысла. А если устройство использует DTR/CTS, то они будут неактивными, пока порт не открыт.

VYR>2) держать открытым


Конечно. Чем Вас это смущает?

VYR>(а NOOP нужен?)


Что такое "NOOP" в отношении обмена через RS-232?
Re[2]: ожидание на COM порте
От: vvv848165@ya.ru  
Дата: 05.10.20 13:35
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

VYR>>2) держать открытым


ЕМ>Конечно. Чем Вас это смущает?


а из-за какого нибудь энергосбережения не будет типо — записывается в буфер, а реально отправляется когда захочет.
когда держишь долго какие-нибудь соединения то вечно получаешь какие-небудь неожиданности (после пару дней работы) (даже с базами данных такое вовсю — с MySQL точно такое есть)
как я понял COM порты сами по себе не отваливаются — и пустые команды по таймеру (NOOP) отсылать не надо?
Re[3]: ожидание на COM порте
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.10.20 13:52
Оценка:
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>а из-за какого нибудь энергосбережения не будет типо — записывается в буфер, а реально отправляется когда захочет.


Если энергосбережение сделано правильно, то оно будет прозрачным. Если же криво, то в каждом случае может потребоваться свой бубен.

VYR>как я понял COM порты сами по себе не отваливаются — и пустые команды по таймеру (NOOP) отсылать не надо?


Сами по себе (по документации) — не должны, но в каждой реализации что-то может быть криво. Если обнаружится кривизна — сперва имеет смысл запретить энергосбережение портам и драйверу, а потом уже применять программные пляски.

Если данные отсылаются только в одну сторону, и состояния DTR/CTS в паузах удаленному устройству не интересны, можно и открывать-посылать-закрывать, если уж так хочется себя обезопасить.
Re: ожидание на COM порте
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.10.20 14:08
Оценка: 3 (1) +1
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>Что лучше сделать?

VYR>1) переоткрывать порт каждый раз
VYR>2) держать открытым (а NOOP нужен?)

Я не знаю, что такое NOOP в контексте COM-порта, но открытие/закрытие COM-порта может привести к незапланированным тобой "шевелениям" на линии DTR, которые устройство может воспринять, как сигнал сброса (оно не обязано так делать, но вполне может). И это может быть не то, что ты хотел.

VYR>или что-то другое?

VYR>Если кто-то таким занимался то пожалуйста расскажите каких сюрпризов стоит ожидать.

Тут вопрос не в том, как читать, а как прервать ожидание, когда оно больше не нужно (например, при завершении программы).

У тебя ведь Windows? Используй Overlapped I/O, это стандартная технология для венды.
Re[4]: ожидание на COM порте
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.10.20 14:10
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Если данные отсылаются только в одну сторону, и состояния DTR/CTS в паузах удаленному устройству не интересны, можно и открывать-посылать-закрывать, если уж так хочется себя обезопасить.


Зависит от устройства. Модемы, например, сбрасываются, если "мигнуть" DTR'ом.
Re[5]: ожидание на COM порте
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.10.20 14:16
Оценка:
Здравствуйте, Pzz, Вы писали:

ЕМ>>и состояния DTR/CTS в паузах удаленному устройству не интересны


Pzz>Зависит от устройства. Модемы, например, сбрасываются, если "мигнуть" DTR'ом.


Ну я это специально и оговорил.
Re: ожидание на COM порте
От: indee  
Дата: 30.04.21 06:39
Оценка: 6 (2)
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>такая ситуация — нужно долго ждать и изредко отсылать в порт данные,

VYR>аналог NOOP тоже можно отсылать,
VYR>COM порт виртуальный через USB.
VYR>Что лучше сделать?
VYR>1) переоткрывать порт каждый раз
VYR>2) держать открытым (а NOOP нужен?)
VYR>или что-то другое?
VYR>Если кто-то таким занимался то пожалуйста расскажите каких сюрпризов стоит ожидать.

Держать открытым, если нужно ждать т.к. "догожданные" данные в закрытом порту будут потеряны.
Если чтение+ожидание реализовано по протоколу, типа "спросил-получил ответ", то можно и закрывать, а открывать по мере надобности, для опроса.

Я ипользовал несколько десятков разных USBtoSerial converters по поводу "нужно долго ждать и изредко отсылать в порт данные", многие устройста просто "падают" по разным причинам через пару дней-недель, теперь использую только PCItoSerial.
Re[3]: ожидание на COM порте
От: удусекшл  
Дата: 30.04.21 07:59
Оценка: 2 (1)
Здравствуйте, vvv848165@ya.ru, Вы писали:

VYR>как я понял COM порты сами по себе не отваливаются — и пустые команды по таймеру (NOOP) отсылать не надо?


Сами по себе — не отваливаются, но кто-то может вынуть USB-свисток, и тогда ой
Re[4]: ожидание на COM порте
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 30.04.21 09:34
Оценка:
Здравствуйте, удусекшл, Вы писали:

У>Сами по себе — не отваливаются, но кто-то может вынуть USB-свисток, и тогда ой


А еще бывает плохой контакт в разъемах USB...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.