Синхронизация устройств по COM-порту
Имеется система, в которой установлены два равноправных контроллера ICP-DAS I-7188XAD( прошивка пишется на Turbo C++), которые по запросу с ПК опрашивают некоторое количество модулей ввода/вывода, собирают из этого пакет 20 байт и отсылают на ПК. Система работает только по одному каналу( когда один из ПК не запрашивает данные). Как только включаются оба, данные отображаются некорректно на обоих ПК, т.е. имеется каша из данных в COM-порте.
Компьютеры не соединены между собой и нет возможности соединить. Возможен обмен данными между контроллерами по свободному порту COM3.
Месяц ломаю голову над синхронизацией этого безобразия. Пришла идея синхронизации по времени (чет/нечет секунда), сейчас реализовываю это, но мне не кажется, что это правильный путь. Буду рад любым идеям.
Заранее спасибо!
Схема:
Есть возможность проверить девайс для каждого ПК в отдельности, если девайс работает с каждым ПК по отдельности, если да тогда :
как вариант
Делаем синхронизацию во времени для каждово ПК, но и главное время нужно брать с одного сервера, и при этом не выключять ПК1 и ПК2 - для проверки. Здесь может есть повлиять помеха power network если нет хороший фильтр or UPS.
если нет
По ходу у Вас в программе есть не дочёт
По ходу и сам девайс тово типа error.
P/S
1000 причин для не конформной жизни.
Каждый контроллер работает только со своим компом, но если нужно, контроллеры могут посылать друг другу что-нибудь. Я сейчас пробую пересылать время (в контроллере свои часы, так что синхронизировать компы не нужно). Кроме того, компы полностью автономны и ни о каком сервере с временем речи быть не может.
Баг может быть в софтине на компе. Переделывать софтину нельзя - заказчик её уже принял.
Девайсов 72 штуки. Терзают сомнения на этот счет:) С одним ПК работает уже 2 года без сбоев.
вообще сомпорм не используют как шину . только как соединение точка-точка .
вообще сомпорт не используют как шину . только как соединение точка-точка .
Я бы и рад это сказать проектировщикам, но я тогда еще не работал в компании.
Контроллеры должны работать независимо. Две линии (комп-контроллер-модули в/в) сделаны на случай глюка или смерти одного из 7188.
Сейчас сделал так: один работает по четным секундам и шлет сигналы второму, когда шина свободна. Второй работает по сигналам от первого, либо после таймаута.
Пока что комп, который работает со slave, получает процентов 80 битых пакетов, благо CRC еще никто не отменял, но причина непонятна.