такая ситуация — нужно долго ждать и изредко отсылать в порт данные,
аналог NOOP тоже можно отсылать,
COM порт виртуальный через USB.
Что лучше сделать?
1) переоткрывать порт каждый раз
2) держать открытым (а NOOP нужен?)
или что-то другое?
Если кто-то таким занимался то пожалуйста расскажите каких сюрпризов стоит ожидать.
Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>1) переоткрывать порт каждый раз
Если линия используется исключительно для общения с одним устройством (устройства на линии не меняются) то какой смысл переоткрывать порт? Открывание порта — это создание сеанса связи между двумя точками. Пока у любой из сторон может возникнуть надобность послать сообщение — сеанс не должен прекращаться.
Технически, если удаленное устройство подключено только по RX/TX, и не использует сигналов управления потоком, можно и закрывать порт, только в этом нет никакого смысла. А если устройство использует DTR/CTS, то они будут неактивными, пока порт не открыт.
VYR>2) держать открытым
Здравствуйте, Евгений Музыченко, Вы писали:
VYR>>2) держать открытым
ЕМ>Конечно. Чем Вас это смущает?
а из-за какого нибудь энергосбережения не будет типо — записывается в буфер, а реально отправляется когда захочет.
когда держишь долго какие-нибудь соединения то вечно получаешь какие-небудь неожиданности (после пару дней работы) (даже с базами данных такое вовсю — с MySQL точно такое есть)
как я понял COM порты сами по себе не отваливаются — и пустые команды по таймеру (NOOP) отсылать не надо?
Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>а из-за какого нибудь энергосбережения не будет типо — записывается в буфер, а реально отправляется когда захочет.
Если энергосбережение сделано правильно, то оно будет прозрачным. Если же криво, то в каждом случае может потребоваться свой бубен.
VYR>как я понял COM порты сами по себе не отваливаются — и пустые команды по таймеру (NOOP) отсылать не надо?
Сами по себе (по документации) — не должны, но в каждой реализации что-то может быть криво. Если обнаружится кривизна — сперва имеет смысл запретить энергосбережение портам и драйверу, а потом уже применять программные пляски.
Если данные отсылаются только в одну сторону, и состояния DTR/CTS в паузах удаленному устройству не интересны, можно и открывать-посылать-закрывать, если уж так хочется себя обезопасить.
Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>Что лучше сделать? VYR>1) переоткрывать порт каждый раз VYR>2) держать открытым (а NOOP нужен?)
Я не знаю, что такое NOOP в контексте COM-порта, но открытие/закрытие COM-порта может привести к незапланированным тобой "шевелениям" на линии DTR, которые устройство может воспринять, как сигнал сброса (оно не обязано так делать, но вполне может). И это может быть не то, что ты хотел.
VYR>или что-то другое? VYR>Если кто-то таким занимался то пожалуйста расскажите каких сюрпризов стоит ожидать.
Тут вопрос не в том, как читать, а как прервать ожидание, когда оно больше не нужно (например, при завершении программы).
У тебя ведь Windows? Используй Overlapped I/O, это стандартная технология для венды.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Если данные отсылаются только в одну сторону, и состояния DTR/CTS в паузах удаленному устройству не интересны, можно и открывать-посылать-закрывать, если уж так хочется себя обезопасить.
Зависит от устройства. Модемы, например, сбрасываются, если "мигнуть" DTR'ом.
Здравствуйте, Pzz, Вы писали:
ЕМ>>и состояния DTR/CTS в паузах удаленному устройству не интересны
Pzz>Зависит от устройства. Модемы, например, сбрасываются, если "мигнуть" DTR'ом.
Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>такая ситуация — нужно долго ждать и изредко отсылать в порт данные, VYR>аналог NOOP тоже можно отсылать, VYR>COM порт виртуальный через USB. VYR>Что лучше сделать? VYR>1) переоткрывать порт каждый раз VYR>2) держать открытым (а NOOP нужен?) VYR>или что-то другое? VYR>Если кто-то таким занимался то пожалуйста расскажите каких сюрпризов стоит ожидать.
Держать открытым, если нужно ждать т.к. "догожданные" данные в закрытом порту будут потеряны.
Если чтение+ожидание реализовано по протоколу, типа "спросил-получил ответ", то можно и закрывать, а открывать по мере надобности, для опроса.
Я ипользовал несколько десятков разных USBtoSerial converters по поводу "нужно долго ждать и изредко отсылать в порт данные", многие устройста просто "падают" по разным причинам через пару дней-недель, теперь использую только PCItoSerial.
Здравствуйте, vvv848165@ya.ru, Вы писали:
VYR>как я понял COM порты сами по себе не отваливаются — и пустые команды по таймеру (NOOP) отсылать не надо?
Сами по себе — не отваливаются, но кто-то может вынуть USB-свисток, и тогда ой