Современные программные
средства связи
микроконтроллера с компьютером по интерфейсу RS-232
Алексей КУЗЬМИНОВ, к. т. н.
Настоящая статья продолжает серию публикаций, посвященных современным аппаратным средствам интерфейса RS-232, и предлагает вниманию читателей знакомство с поддерживающим эти аппаратные средства программным обеспечением.
1. Предварительные замечания
Программные средства для интерфейса RS-232, по которому компьютер и микроконтроллер обмениваются информацией между собой, условно можно разделить на две части. К первой части отнесем программы, написанные для компьютера, ко второй — программы для микроконтроллера.
В свою очередь, программы для компьютера тоже условно можно разделить на две части. К первой отнесем программы, написанные для операционной системы (ОС) DOS, ко второй — для Windows.
Если ОС DOS, последняя версия которой — седьмая (MS DOS 7.G), больше не модифицируется, то системы Windows постоянно обновляются. Существует несколько версий системы Windows. Из них мы будем рассматривать только две — последнюю версию Windows 98 второй редакции (Windows 98 SE) и последнюю версию Windows XP для профессионалов со вторым сервисным пакетом — Windows XP Professional, Service Pack 2 (Windows XP SP2). Все промежуточные системы Windows, как предшественницы Windows 98 SE2 (Windows 3.1, Windows 95), так и предшественницы Windows XP SP2 (Windows NT, Windows 2GGG, Windows Me и др.), рассматриваться не будут по причинам, сформулированным ниже.
Вначале несколько слов о версии Windows 98 8Е2 и ее предшественницах. Windows 98 — псевдо-многозадачная операционная система, которая зарекомендовала себя как исключительно надежная (поэтому и используется до сих пор) и в которой допускается полноправное применение DOS. Программы для DOS работают в Windows 98 как в режиме «эмуляции», так и непосредственно (используется MS DOS 7.0). Псевдо-многозадачность Windows 98 проявляется в том, что несколько запущенных программ могут работать «одновременно», но в действительности в каждый момент времени работает только одна программа, которая может «захватить» все ресурсы компьютера, а остальные программы ждут своей очереди. Именно этим свойством Windows 98 похожа на MS DOS, в которой в любой момент времени может работать только одна программа (именно та, которая запущена). В Windows 98 программисту доступны все ресурсы компьютера, в том числе прямой ввод-вывод через порты. Благодаря этой особенности программирование интерфейса RS-232 в Windows 98 практически мало чем отличается от его программирования в DOS. Существуют, конечно, некоторые нюансы, о которых мы расскажем позже.
Windows 3.1 — система, которая была написана как программа DOS, поэтому
большого распространения не получила. В Windows 95 было допущено много ошибок, которые постепенно были выявлены и исправлены. После устранения ошибок, а также благодаря некоторым дополнительным нововведениям, появилась система Windows 98, а затем и Windows 98 SE.
Windows ХР — действительно многозадачная операционная система, в которой каждой из нескольких запущенных и работающих программ отводится определенный «квант» времени. В Windows ХР уже практически нет никакой связи с DOS. Программисту доступны далеко не все ресурсы компьютера; прямой ввод-вывод через порты запрещен. И хотя и существуют некоторые «обходные» пути, позволяющие преодолеть это запрещение (в частности, есть известная программа UserPort, после запуска которой в Windows ХР можно обращаться напрямую к портам ввода-вывода), основная идеология этой ОС — не разрешать программам «захватывать» все ресурсы компьютера, в том числе — запрет на прямой ввод-вывод через порты. В настоящее время ОС Windows ХР является самой распространенной.
Однако система Windows 98 SE до сих пор применяется, так как она тесным образом связана с DOS, которая является исключительно надежной системой благодаря своей простоте, хорошей изученности и предсказуемости работы.
В связи с вышеизложенным, все программы для Windows будут ориентированы на применение в Windows ХР. В Windows 98 они также работают, хотя некоторые из них — значительно медленнее, чем в DOS и Windows ХР.
Примеры программ для DOS будут приведены по двум причинам.
Во-первых, система DOS до сих пор используется благодаря своей надежности, во-вторых, на примере программ, написанных для DOS, будет показано, что программиро-
вание обмена компьютера с микроконтроллером по интерфейсу RS-232 в Windows XP мало чем отличается от программирования в DOS (если использовать «запрещенные» в Windows XP прямые процессорные команды ввода-вывода в порт: in и out).
В Windows XP (кстати сказать, и в Windows 98) обращение к RS-232 возможно через специальный программный интерфейс, разработанный компанией Microsoft специально для работы приложений (Application Program Interface — API). Функции API «славятся» своими ошибками, поскольку этот интерфейс бесплатный. Таким образом, если программист попытается использовать для программирования RS-232 описанные в MSDN [16] или в других справочниках и руководствах функции API, он рискует получить неожиданные побочные эффекты. В статье для полноты изложения показано, как достаточно просто можно запрограммировать обмен по RS-232 в Windows с помощью API-функций. Кроме того, было выявлено, что использование API, особенно в Windows 98, резко «тормозит» обмен по RS-232, в связи с чем (а также в связи с упомянутыми ошибками) автор не рекомендует пользоваться API-функциями, предназначенными для программирования интерфейса RS-232.
Теперь относительно языка программирования. Продолжая традицию использования языка Кларион, который применялся для программирования обмена между микроконтроллером и компьютером по интерфейсу RS-232 в системе DOS (Clarion v. 3.101) [2, 3], в настоящей статье все программы для компьютера, написанные для Windows XP, автор также приводит на языке Кларион (версия для Windows). В настоящее время последняя версия этого языка — 6.0.
Необходимо отметить, что язык программирования Кларион — одна из двух наиболее известных так называемых RAD-систем (вторая — Дельфи). RAD — аббревиатура английских слов Rapid Application Development, что в переводе означает: «быстрая разработка приложений (прикладных программ)». Основное преимущество RAD-системы перед обычным языком программирования в том, что в ней уже написано большое количество готовых «шаблонов». Программисту остается выбрать наиболее подходящий «шаблон» для своей подзадачи, дописать свой код, а затем так называемый генератор приложений автоматически сгенерирует код на языке высокого уровня Кларион (если используется RAD-система Кларион) или Си/Паскаль (если используется Дельфи). Сравнивать же между собой Кларион и Дельфи — дело неблагодарное. Некоторое преимущество Кларио-на перед Дельфи (но только на взгляд автора) заключается в том, что конечным результатом трансляции на Кларионе является программа исполняемого формата (*.exe), в которую уже включены все ис-
пользуемые библиотеки. Для установки такой программы на компьютер ее следует просто скопировать на жесткий диск. Для работы программы, написанной в Дель-фи, на компьютер следует устанавливать еще и библиотеки (*.dll), которые используются в этой программе. Кроме того, в Кла-рионе несколько проще программировать управление базами данных. Наконец, язык Кларион (опять же на взгляд автора) — более компактен в написании и проще в понимании, чем, например, Паскаль или Си, поскольку использует «старомодный стиль Фортрана и Бейсика», как пишет его создатель Брюс Б. Баррингтон [1]. Статью о сравнении этих двух RAD-систем читатель может прочитать сам [8]. Необходимо также отметить, что программирование на том или ином языке, вообще говоря, — дело вкуса.
В связи с вышеизложенным, программы для DOS будут приведены на языке Кларион для DOS (Clarion v. 3.101) с использованием пакета подпрограмм для графического интерфейса пользователя (Graphic User Interface) — GUI-3. Программы для Windows будут приведены на языке Кларион для Windows (Clarion v. 6.0).
Программы для микроконтроллера в основном будут приведены на языке Си (C51-Keil v. 6.14), хотя некоторые простые программы для микроконтроллера будут приведены и на ассемблере.
Но прежде чем заниматься изложением материала по программированию интерфейса RS-232 (и для микроконтроллера, и для компьютера), автор хотел бы уделить некоторое внимание двум аспектам, которые часто вызывают затруднения у многих программистов (иногда даже достаточно высокого класса).
Первая проблема — как при написании программ (в DOS и Windows) обеспечить достаточно короткую аппаратно независимую (или, другими словами, машинно-независимую) временную задержку (в несколько микросекунд). При написании программ для микроконтроллера такая проблема не возникает, так как программисту всегда известен тип микроконтроллера и частота его тактового генератора. Поэтому эта проблема касается только программ для компьютера.
Вторая проблема — грамотное и повсеместное использование совмещений. Напомню, что совмещением называется такая структура данных, в которой две или более переменных разного формата разделяют между собой одну и ту же область памяти.
Например, двухбайтовая переменная (USHORT в Кларионе или unsigned short в Си) и две однобайтные переменные (BYTE в Кларионе и unsigned char в Си) могут располагаться в одной и той же области памяти. При обмене информации по 8-разрядному интерфейсу (например, RS-232) удобнее
использовать однобайтные переменные, а при расчетах, либо для других целей, когда переменная уже находится в процессоре (или в микроконтроллере), удобнее работать с двухбайтной переменной. Но поскольку обе переменные располагаются в одной и той же области памяти, нет необходимости преобразования двух однобайтных переменных в одну двухбайтную (и обратно). А такое преобразование часто «тянет» за собой использование, например, библиотек для обработки данных с плавающей запятой, что резко увеличивает время преобразования и объем программ. При использовании совмещений проблема преобразования исчезает, так как каждый тип переменной определен, и переменную любого типа можно использовать в программе «напрямую». В текстах программ будут приведены достаточно подробные комментарии, по которым читатель, в частности, может определить эти два момента (формирование временных задержек и совмещения).
Еще будет рассмотрен вопрос об использовании нового алгоритма обмена по интерфейсу RS-232, разработанного автором [2, 3]. В связи с увеличением быстродействия как современных компьютеров, так и современных микроконтроллеров использование этого алгоритма приобретает еще большее значение (особенно это касается надежности и скорости обмена). Будут приведены некоторые уточнения и «обновления» алгоритма, а также временная диаграмма сигналов передатчика и приемника, участвующих в обмене информацией. Кроме того, будут даны рекомендации по использованию такого алгоритма как в программах для микроконтроллера, так и в программах для компьютера.
Итак, наше изложение будет иметь следующую последовательность.
Вначале будет рассмотрен вопрос об использовании нового алгоритма обмена по RS-232 (для компьютера и микроконтроллера).
Затем будут рассмотрены функции API для программирования интерфейса RS-232 в Windows. Будет показано, как их использовать совместно с новым алгоритмом обмена, разработанного автором.
Следующий вопрос, который будет рассмотрен, — как использовать прямые команды процессора ввода-вывода в порт (in и out) в Windows XP. Будут приведены тестовые программы обмена по RS-232 и сравнение быстродействия систем DOS, Windows 98 и Windows XP.
И, наконец, для того чтобы читатель смог убедиться, что аппаратные средства, о которых шла речь в предыдущих публикациях (см. «КиТ» № 3-5 за этот год), и программные средства, приведенные в настоящей статье, — не просто научные изыскания, в заключительной части статьи будет продемонстрировано практическое применение изложенного материала. Это — системы сбора информации,
работающие на реальных объектах. Будут приведены некоторые снимки экранов, а также фотографии систем сбора, которые работают в составе установок по поверке и градуировке счетчиков объема газа, предназначенных для его коммерческого учета. ■
В следующей части статьи будет рассказано об использовании нового алгоритма обмена информацией по RS-232 между компьютером и микроконтроллером
Продолжение следует. Литература
1. Баррингтон Брюс Б. Как создавался Кларион. // Мир ПК. 1993. № 2
2. Кузьминов А. Ю. Интерфейс ЯБ-232. Связь между компьютером и микроконтроллером. От Б08 к Windows98/XP — М.: ДМК-ПРЕСС, 2006 (в печати).
3. Кузьминов А. Ю. Интерфейс ЯБ-232. Связь между компьютером и микроконтроллером. — М.: Радио и связь, 2004.
4. Кузьминов А. Ю. Однокристальные микроЭВМ — основа удаленных систем сбора и обработки сигналов, поступающих с датчиков. // Электроника и компоненты. 1998. № 2.
5. Кузьминов А. Ю. Новые МСБ51 — совместимые микроконтроллеры и их применение в системах сбора информации с датчиков. // Контрольно — измерительные приборы и системы. 1997. № 6. 1998. № 7.
6. Кузьминов А. Ю. Удаленные системы сбора информации с датчиков на базе однокристальных
микроЭВМ. // Автоматизация и производство. 1996. № 3.
7. Кузьминов А. Ю. Универсальная система сбора и обработки данных АСИР-3. // Мир ПК. 1996.
№6.
8. Орлов А. Два звучных слова — Сіагіоп и БеІрЬі. // Мир ПК. 1996. № 6.
9. Фролов А. В., Фролов Г. В. Программирование модемов. М.: ДИАЛОГ-МИФИ, 1993.
10. w ww.analog.c om
11. w ww.atmel.c om
12. w ww.maxim-ic.c om
13. w ww.semiconductor-philips.c om
14. ww w.silabs.c om
15. w ww.ti.c om
16. ww w.msdn.micr osoft.c om/library
17. w ww.gapdev.c om
18. w ww.sysintemal.c om