Существуют ли ограничения для последовательного порта с более чем 6 подключенными устройствами?

#delphi #serial-port #hardware

#delphi #последовательный порт #аппаратное обеспечение

Вопрос:

У меня есть проект, который использует порты Rocketport Infinity 16 для приема данных от 6 различных анемометров (устройств измерения скорости ветра) (RS422, 50 Гц, 38,4 кбод, 47 байт на запись). Когда я использую частоту 32 Гц и скорость передачи 9600 бод, все в порядке, однако, когда я переключаюсь на 50 Гц, некоторые данные не принимаются. Я безуспешно пытался использовать USB вместо Rocketport Infinity.

Итак, помимо сбоя анемометра, я подозреваю следующие объяснения потери данных:

  1. Для Rocketport Infinity я открыл все 16 портов, но подключил только 6 из них, я подозреваю, что максимальная пропускная способность данных слишком высока при переключении на 50 Гц.
  2. Скорость переключения IRQ слишком высока для правильной работы com-порта.

Есть ли какая-либо другая возможная причина? Пожалуйста, поправьте меня, если я ошибаюсь.

Среда разработки приемника: Delphi 6 в 32-разрядной версии Windows XP Professional с CPort 3.1

Комментарии:

1. Этот вопрос не привлек особого внимания отчасти потому, что он не был хорошим английским и, следовательно, трудным для понимания. Я пытался сделать это более понятным, но сам не совсем понял, поэтому, пожалуйста, убедитесь, что ваш смысл не был потерян. Удачи.

2. Операционная система, Linux? Windows?

Ответ №1:

Скорость IRQ не так высока, и у современных машин не должно возникнуть проблем с ее поддержанием. Я подозреваю, что реальная проблема заключается в том, что ваше приложение недостаточно быстро обрабатывает полученные байты. Особенно, когда ваш код также обновляет пользовательский интерфейс в том же потоке, который получает данные.

Сложно дать конкретные рекомендации по устранению неполадок, поскольку вы не указываете ни язык, ни операционную систему. Но убедитесь, что ваша обработка ошибок правильная. Различают переполнение буфера (приложение недостаточно быстро читает) и переполнение символьного буфера (драйвер недостаточно быстро читает). В Windows это CE_RXOVER и CE_OVERRUN.

Комментарии:

1. На самом деле, есть приемник, который представляет собой плагины, разработанные delphi с CPort 3.1 ( sourceforge.net/projects/comport/files/comport/3.1 ), я посмотрю на источник, спасибо за ваше предложение.

2. Согласен, где-то буфер, вероятно, переполнен.

3. Windows, я думаю, тогда, поскольку вы сказали Delphi.

Ответ №2:

Существуют ли ограничения для последовательного порта с более чем 6 подключенными устройствами?

Да, ограничения есть. Я предполагаю, что у вас есть дифференциальные выходы и приемник ввода-вывода с дифференциальными входами. Пожалуйста, смотрите раздел Сбалансированные дифференциальные сигналы. Возможно, что максимальные значения напряжения цепей приемника превышены.

Скорость каждого порта должна соответствовать скорости соответствующего устройства. Пожалуйста, ознакомьтесь с другими критериями, которые должны быть сопоставлены.

Скорость переключения IRQ слишком высока для правильной работы com-порта.

Почему вы предполагаете, что это может быть проблемой со скоростью переключения IRQ? — Я бы сказал, что у вас мало ресурсов IRQ.

Комментарии:

1. Благодаря Masi, все устройства подключаются напрямую, но не используют общий провод, пока он не достигнет порта ракеты. Я попрошу своих коллег проверить линию с помощью осциллографа.