Всем привет!

Имеется такая задача, есть некий прибор, который что-то меряет и чем то управляет. У него есть RS232 на борту, и появилось желание помочь этому прибору работать через компьютер. На компьютер возлагается диагностика и настройка. Прибор нашей разработки, так что доступ к софту и всему есть, но менять ничего без особой нужды не хочется.

самый главный вопрос.
1. Есть ли какой то хорошенький 2 направленный стандартный интерфейс? Хотелось бы его реализовать, дабы не изобретать велосипед. В планах RS232 заменить, но скорее всего будет заменен на RS422, в случае RS485 я бы реализовал обычный ModBus, но так как есть полный дуплекс хотелось бы воспользоваться этой возможностью.


2. Поскольку ответа на 1 вопрос я с ходу не придумал, решил сделать свой велосипед. Сделал на сегодняшний момент 3 хреновых "велика", последний хотел бы обсудить, если не найдется ответа на 1 вопрос.

Что я придумал:
протокол обычный
1 - стартовый символ
2 - команда
3 - под команда
4 - данные
5 - контрольная сумма.
для простоты все в аск2 кодах, стартовый символ уникален, конец сообщения по длине пакета, которая фиксирована.

Принцип работы прост
а) Есть команда записать/считать/сообщить параметр,
б) подкоманда говорит какой параметр
в) данные - что записать.

На каждую посылку следует ответ, та же посылка если все получилось,
Или та же посылка с 1 в старшем бите команды, как признак ошибки, и в подкоманде код ошибки

Устройство так сделано, что протокол для него вторичен, и оно спокойно может застрять в какой то процедуре и долго не реагировать на входящие сообщения.

Из-за этого может получится следующее, послали команду, не дождались ответа, послали следующую, а тут устройство проснулось и начало отвечать на 1 команду. Или устройство пропустило пару входящих байт и сидит ждет окончания сообщения. Компьютер отчаялся дождаться ответа, и начал слать следующее сообщение, оно добавляется к первому, первое становится полным, и мы теряем оба сообщения, так как не сходится контрольная сумма, а у второго сообщения отрезан конец.

я ввел 2 таймаута, если в течение Т0 со стартового символа не собралось полное сообщение, оно сбрасывается. И если в течение Т1 со стартового символа не было обработано сообщение оно также сбрасывается.

на это все наложилось вторичность интерфейса и то что я не могу по долгу висеть в процедуре сбора символов и обработки, получается как то очень сложно, может сменить идеологию, или что-то подправить? Вообщем я жажду любых комментариев, потому что реально надо с кем то поговорить, обсудить.

У кого какие идеи, комментарии, вопросы?
Заранее спасибо!