flammmable 0 1 апреля, 2021 Опубликовано 1 апреля, 2021 · Жалоба Есть проектируемое устройство, которое предполагается соединить с ПК при помощи RS-232. С одной стороны было бы неплохо, чтобы устройство отвечало на *IDN? ,набитого в терминале. С другой стороны при необходимости передачи изохронного (равномерного по времени) потока данных (значения напряжений для ЦАПов данного устройства) было бы нелепо передавать его в текстовом виде - канал потеряет скорость в разы просто так. Как есть идеологические варианты организовать переключение между этими режимами? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrBearManul 0 1 апреля, 2021 Опубликовано 1 апреля, 2021 · Жалоба 11 минут назад, flammmable сказал: Как есть идеологические варианты организовать переключение между этими режимами? А если на текстовую команду, например запрос данных с АЦП, просто тупо отвечать двоичными данными? З.Ы. Ой, у вас ЦАП. Ну и ладно, шлём текстовую команду, а заней пакет двоичных данных. Потом снова ждём текстовых команд. Примерно как делают терминалы с X/Ymodem-протоколами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
flammmable 0 1 апреля, 2021 Опубликовано 1 апреля, 2021 · Жалоба 1 minute ago, MrBearManul said: А если на текстовую команду, например запрос данных с АЦП, просто тупо отвечать двоичными данными? Спасибо за столь быстрый ответ! Я как раз об этом подумал, когда перечитывал свой вопрос. Но что, если нужно передавать на устройство и текст и поток данных? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 1 апреля, 2021 Опубликовано 1 апреля, 2021 · Жалоба 10 minutes ago, flammmable said: нужно передавать на устройство и текст и поток данных? если не городить какой-нибудь стандартный протокол как те же Х/Умодем можно либо передавать длину следующих бинарных данных в команде, либо с байт-стаффингом сделать символ окончания передачи данных по принятии которого будет переход обратно в приём ascii. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 1 апреля, 2021 Опубликовано 1 апреля, 2021 · Жалоба 28 минут назад, flammmable сказал: было бы нелепо передавать его в текстовом виде - канал потеряет скорость в разы просто так. Как есть идеологические варианты организовать переключение между этими режимами? Можно передавать бинарные данные кодированные в base64 или в UUE или любом другом подобном формате. Потеря в пропускной способности канала будет минимальная. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rkit 1 1 апреля, 2021 Опубликовано 1 апреля, 2021 · Жалоба Устройство по умолчанию работает в текстовом режиме. Специальная текстовая команда означает начало двоичного пакета заранее определенной длины. 10 minutes ago, jcxz said: Можно передавать бинарные данные кодированные в base64 или в UUE или любом другом подобном формате. Потеря в пропускной способности канала будет минимальная. Фига себе, 33% = минимальная потеря. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 1 апреля, 2021 Опубликовано 1 апреля, 2021 · Жалоба 48 minutes ago, flammmable said: Как есть идеологические варианты организовать переключение между этими режимами? Такое делается интеграцией в дивайс коммуникационного протокола с разделением на логические каналы. Таких есть куча готовых с легко портируемыми сорсами, причем с клиентскими частями под PC. Режимы там переключать не надо, логические каналы работают параллельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 1 апреля, 2021 Опубликовано 1 апреля, 2021 · Жалоба 1 час назад, rkit сказал: Специальная текстовая команда означает начало двоичного пакета заранее определенной длины. Такое можно делать только если линк 100% надёжный и ошибки в канале принципиально невозможны. Иначе - весь обмен повиснет при первой же помехе или при элементарном перетыкании кабеля или даже закрытии COM-порта одной программой (передающей двоичные данные) и открытием другой (терминалом). Элементарно не сойдётся число байт "заранее переданной длине". И надо ещё будет обучить пользователя успевать выдернуть кабель из двоичной программы и воткнуть терминал точно между пакетами. 1 час назад, rkit сказал: Фига себе, 33% = минимальная потеря. Когда будете городить костыли, чтобы вашим вариантом можно было более-менее терпимо пользоваться, потеряете намного больше 33%. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 1 апреля, 2021 Опубликовано 1 апреля, 2021 · Жалоба 7 часов назад, flammmable сказал: Как есть идеологические варианты организовать переключение между этими режимами? Можно не делать никакого переключения режимов, а просто поддерживать на приемной стороне прибора парсинг и текстового и бинарного протоколов. Только бинарный протокол должен иметь совместимость с текстовым, чтобы их можно было различать. И текстовые команды должны быть пакетными, без бесконечных пауз между символами, как при ручном наборе в терминале. Например, все команды разделяются паузами и первый байт бинарной команды (SoF) должен быть не ascii. У меня так реализован парсинг ответов блютус-модуля. Его ответы текстовые, а при наличии соединения с прозрачным режимом, через него могут приходить пакеты двух разных бинарных протоколов. Нормально работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mdmitry 0 1 апреля, 2021 Опубликовано 1 апреля, 2021 · Жалоба Можно использовать протокол Wake: там есть байт команды, взять две команды, одна означает текстовые данные, другая - бинарные, да, конечно, парсер придется немного доработать по сравнению с оригиналом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 2 апреля, 2021 Опубликовано 2 апреля, 2021 · Жалоба В одной своей старой железке я сдуру рабочий протокол сделал бинарным. Ну, а т.к. отлаживать бинарным протоколом неудобно, добавил еще и текстовый вариант. Чтобы переключиться из бинарного в текстовый и обратно была специальная команда. Т.е. открываем терминал, даем команду перевода в текстовый формат и работаем себе. А после перезапуска или другой команды включается бинарный... Но бинарный протокол на самом деле оправдан лишь в том случае, если вам нужно гнать бешеные потоки данных (например, от цифрового осциллографа). В остальных случаях надо сразу писать текстовый. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться