Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Сегодняшний проект Рида Кимбли (Reed Kimble) настолько относится к старой школе, что теперь это уже новая школа. Опыт использования последовательного порта был утрачен (вспомните свой последний компьютер, у которого был последовательный порт?) пока снова не возродился в связи с подъемом микроконтроллеров.
И, фактически, он сделал это на VB, моей первой любви в разработке, что стало сахарной на глазурью на пирожном ...
Как обмениваться информацией с микроконтроллером или другим последовательным устройством в VB . Net
Введение
С современной дешевой электроникой и технологиями производства небольших партий обычный любитель электроники имеет доступ к изобилию мощных компактных микроконтроллеров (MCU) вместе с огромным ассортиментом периферийных устройств, и почти все они требуют наличия последовательного интерфейса RS-232 для связи с ПК. Доступность и простота использования системы VB.Net сделали ее популярной платформой для разработки небольших целевых приложений, предназначенных для настройки или обмена информацией с микроконтроллерами или устройствами на их основе. Однако очевидно, что выбор компонента SerialPort означает, что есть некоторые ловушки в использовании последовательного порта, и, хотя эти ловушки объяснены в документации, правильная реализация этого компонента по-прежнему может не даваться некоторым разработчикам. В этой статье предпринята попытка объяснить общее использование компонента SerialPort и предложить в качестве примера класс «SerialDevice», инкапсулирующий экземпляр компонента SerialPort вместе с данными и логикой, связанными с его использованием.
Содержание
· Введение
· Ловушки последовательного порта
· Использование компонента SerialPort
· Резюме
Микроконтроллеры ( MCU )
Существует несколько самых популярных микроконтроллерных платформ для хобби и прототипирования, среди которых Arduino, BasicStamp и, из последнего, mBed. Также есть множество других. Обычно платформа содержит процессор с разрядностью от 8 до 32, некоторое количество флеш-памяти, используемой как хранилище, оперативную память, а также ряд периферийных устройств, таких как цифровые и аналоговые системы ввода-вывода, UART, шины I2C/SPI и т. п. Большинство из них не слишком дороги (< 100 долл. США) и вокруг них собираются обширные онлайновые сообщества, а также имеются общедоступные библиотеки кода. Эти устройства популярны как среди конструкторов электроники, так и энтузиастов, и, если вы прошли через введение и установку, то с ними довольно просто работать.
Поскольку эти устройства популярны среди конструкторов электроники и энтузиастов и так как Visual Basic.Net является бесплатным, его легко использовать, и он обеспечивается поддержкой, естественно, что они будут пытаться писать VB-приложения для настройки и связи с микроконтроллерами, имея вначале небольшой или вовсе не имея опыта программирования. Обычно для таких приложений есть ряд ограничений – с микроконтроллером приходится связываться через последовательный порт (иногда через виртуальный последовательный USB-порт), а затем посылать и принимать немного байтов, представляющих команду с параметрами и результат ее выполнения. Иногда ответ представляет собой длинную последовательность байтов данных, требующих дальнейшей обработки, прежде чем сравнить простой результат, но в большинстве случаев результатом будет немного байтов, которые декодируются в статус или в требуемое значение. Благодаря сущности компонента SerialPort и его многопоточных событий, процесс отправления команды, чтения результата и его обработки не так интуитивны, как могут показаться сначала методы объекта SerialPort.
...
Подводные камни последовательного порта
...
Использование объекта SerialPort
...
Пример кода « SerialDevice »
В следующем примере кода определяется класс SerialDevice, включающий объект SerialPort и исполнитель Task? Вместе с функциональностью, обрисованной выше. Этот класс предназначен для обеспечения гибкости использования и может помочь в решении широкого класса задач – от улучшения производительности, до редизайна с целью реализации специфических возможностей. Сначала давайте бегло взглянем на код, а затем перейдем к его детальному разбору.
Описание кода
Класс начинается с объявления объекта SerialPort, потокобезопасной очереди байт для использования в качестве первичного рабочего буфера данных, и наконец, объекта Task вместе со связанными CancellationTokenSource и ManualResetEvent, необходимыми для управления выполнением вторичных потоков…
...
Пример использования
Общий сценарий при работе с MCU состоит в посылке команды для конфигурирования или опроса устройства. Многое встроенное ПО микроконтроллеров использует простой текстовый протокол с данными, передающимися в виде ASCII-текста и управляющими кодами, использующими символы форматирования ASCII. Обычно пользователю достаточно отслеживать появление одиночного символа, такого как Carriage Return (CR) или Line Feed (LF) или Zero (0), обозначающего конец ответа. С этой целью мы создадим простую программу, позволяющую собирать сообщения из символов, полученных от MCU.
Следующий пример демонстрирует использование экземпляра SerialDevice в приложении Windows Forms. В примере используется RichTextBox в качестве консольного экрана, позволяющего пользователю печатать символы, которые будут передаваться MCU, подсоединенному к COM3 (символы не отображаются в RichTextBox по мере печати). Затем MCU просто отправляет эхом любой полученный символ назад в ПК. Делегат CheckMessageComplete ищет символ CR (13) для определения, когда сообщение закончено и делегат ProcessMessage отображает полное сообщение в RichTextBox. Таким образом программа накапливает символы в буфере пока не будет нажата клавиша Enter, и затем целая строка будет напечатана в RichTextBox. Не забывайте, что каждый байт проходит через MCU, прежде чем он попадет в буфер SerialDevice для отображения в RichTextBox.
Резюме
В этой конструкции класс SerialDevice предлагает универсальную платформу для коммуникаций с MCU или другим последовательным устройством независимо от применяемого протокола передачи данных. Аналогичный дизайн можно использовать и в других более узких целях для эффективного анализа и обработки получаемых данных, основанных на особенностях протокола приложения. Таким образом, этот класс должен быть также пригоден для многих быстрого и простого конфигурирования MCU и утилит опроса.
Также пример демонстрирует, как реализовать компонент SerialPort и как напрямую использовать основные процедуры обработки событий без инкапсуляции в класс «SerialDevice». Этот класс можно разобрать на составляющие компоненты, чтобы применить каждую концепцию в других проектах.
Если вы зайдете сюда и прочитаете всю статью, то поймете уникальность SerialPort.