Как выяснилось, ответ заключался в реализации предложения Аллена.
Конкретной проблемой было взаимодействие между двумя устройствами, участвующими в управлении машиной. Устройство, которое выполняло управление движением, действует как сервер, в то время как ПК, предоставляющий данные движения, был клиентом.
Сеть Ethernet использовалась вместо проприетарного интерфейса шины или последовательного интерфейса RS-232/422. Многие из соображений, связанных с обслуживанием данных через широко распространенный Интернет, не были фактором. Сеть состояла из известных устройств с постоянными IP-адресами, которые прослушивали определенные порты.
После разговора с людьми, которые делают другое управление движением. Логика для клиента оказалась на удивление простой.
- Отправка данных
- Подождите в цикле, чтобы ответ вспыхнул, если он займет слишком много времени.
- Обработка любых ошибок в соединении.
На стороне сервера нам повезло, что мы контролировали программное обеспечение, запущенное на контроллере движения. Таким образом, коммуникационная петля была разработана так, чтобы быть максимально быстрой. Одним из ключевых моментов было держать все данные ниже 512 байт, чтобы они все содержались в одном пакете. Они также уделяли большое внимание установлению приоритета обработчику связи и структуре данных, чтобы он мог отправлять ответ за десятки микросекунд.
Другой момент заключался в том, что в этом приложении выделенных клиентов и серверов UDP предпочтительнее, чем TCP, поскольку операционные системы, особенно Windows, имели привычку неожиданно завершать бездействующие соединения TCP.
Поскольку клиентское программное обеспечение постепенно переходит на .NET Framework, это был еще один фактор для реализации идеи Аллена. Библиотека, обсуждаемая @wqw, тоже работает.