Как эффективно работать с устройствами по последовательному соединению?

Вы хотите Решето Atkin, описанного здесь: http://en.wikipedia.org/wiki/Sieve_of_Atkin

6
задан Max Schmeling 8 December 2009 в 20:27
поделиться

4 ответа

Вам может потребоваться несколько потоков и / или асинхронных операций. Раньше при последовательной связи (не в .NET) мы ставили в очередь чтение порта (ов). Когда чтение завершится, сработает функция обратного вызова (делегат), будет выполнена обработка чтения, потенциально изменив состояние управления - нашим типичным примером было считывание штрих-кода при одновременном считывании с клавиатуры и таймера. Одно из событий завершится, что вызовет действие (потенциально оставив другие операции чтения в очереди на месте или отменив их, в зависимости от того, в какое состояние переходило состояние).

Возможно, вы захотите изучить использование конечного автомата (ов) . В этом случае конечный автомат знает, какие операции выполняются, какие переходы разрешены и как переходить между ними, и какие действия вызывают переходы.

1
ответ дан 17 December 2019 в 02:29
поделиться

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

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

2
ответ дан 17 December 2019 в 02:29
поделиться

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

  1. Порт - этот уровень связан с протоколом связи. Он предоставляет методы для отправки сообщения и преобразует параметры сообщения в поток байтов. Он также прослушивает входящую линию, преобразует поток байтов в структуру сообщения и вызывает событие, когда получено полное сообщение.
  2. Устройство - этот уровень знает, как отправлять сообщения на определенное устройство в цепочке последовательного подключения. и как отфильтровать ответы от других устройств в гирляндной цепи.
1
ответ дан 17 December 2019 в 02:29
поделиться

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

Я считаю, что мне нужно определить параметры связи устройства. Есть производители, у которых характеристики связи двух устройств одной модели различаются. Характеристика - дело довольно утомительное. Определение характеристик включает в себя обнаружение различных комбинаций ситуаций и затем обдумывание возможностей.

  1. наименьшее пороговое количество байтов, считываемых / записываемых непрерывно перед вставкой задержки. Возможен один символ за раз.
  2. самая безопасная наименьшая задержка перед возобновлением чтения / записи.
  3. изменение минимальной задержки, требуемой от инициализации связи до установившегося состояния связи.
  4. изменение порогового количества байтов, доступных для записи на указанной скорости перед вставкой задержки.

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

Что, конечно, привело бы к созданию уровня чтения / записи, отделяющего подпрограммы, требующие связи, от прямого взаимодействия с портом.

1286] В качестве альтернативы мы все знаем, что быстрый и ленивый, но неэффективный способ - вставлять 10 мсек после каждого байта.

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

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

1286] В качестве альтернативы мы все знаем, что быстрый и ленивый, но неэффективный способ - вставлять 10 мсек после каждого байта.

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

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

1286] В качестве альтернативы мы все знаем, что быстрый и ленивый, но неэффективный способ - вставлять 10 мсек после каждого байта.

1
ответ дан 17 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: