Цитата:
|
А вот сделать так, чтобы соединение между модемами было устойчивым, вот это проблема.
|
Да, сделать обмен устойчивым не так просто!
Модем передаёт информацию блоками и ждёт обратно информацию о правильности доставки блока (естественно зависит от его внутреннего протокола обмена), если блок не дошёл, то его передача повторяется несколько раз (в зависимости от протокола). На приёмном конце блоки выстраиваются в очередь по порядку их передачи, по номерам (каждый блок имеет свой номер, формируемый передающим концом). Если же блок всё же не дошёл, то просто выбрасывается из очереди.
Теперь о протоколе обмена пользователя. Многие используют стандартные протоколы обмена типа TCP и думают, что он гарантирует доставку, но это не так!
Для систем реального времени лучше пользоваться собственными протоколами обмена при работе по физической линии (естественно, если в этом разбираешься), это даёт оптимизацию трафика и может снизить потери сообщений.
Я делал так. Система формирует сообщения различного размера, т.е. так как это удобно, но для обмена с модемом надо сделать ещё один протокол, нижнего уровня. Все сообщения складываются в кольцевой буфер, для протокола нижнего уровня - это поток байт. Протокол нижнего уровня забирает из кольцевого буфера и формирует блоки для передачи, где размер блока определяется качеством обмена по линии, которое определяется в программе по алгоритму (ну, тут кто как придумает), основное размер блока обратно пропорционален качеству обмена и по возможности должен быть примерно равен размеру блока обмена модема (определить размер блока модема - практически не возможно, но ...).
При таком подходе можно добиться хорошего качества обмена даже на очень плохих линиях!