Подход к разработке альтернативного программного обеспечения для антенного анализатора AA-330
Эксплуатируя антенный анализатор AA-330 [1], я столкнулся с необходимостью проводить измерения с шагом 1 кГц в полосе частот от 1 до 30 МГц с возможностью масштабировать графики и сохранять полученные результаты в файл для последующей статистической обработки. К сожалению, программа, которой штатно комплектуется прибор [2, 3], не предназначена для подобных целей. Соответственно, пришлось написать свой вариант программы, который совершенно не претендует на законченный продукт и сколько-нибудь оптимальный код, но, тем не менее, позволяет решать обозначенные задачи. Опытом программирования для АА-330 я и хотел бы поделиться с коллегами по хобби.
Первым шагом стало установление метода соединения AA-330 по последовательному порту (т.к. кабель, которым комплектовался прибор, был благополучно потерян, то непонятно было - используется ли только пара сигналов TD, RD или еще задействованы и управляющие сигналы интерфейса). Простая разборка прибора показала, что реализован, первый вариант и управляющие сигналы (RTS, CTS, DTR, DSR) не используются. Т.о., распайка кабеля для соединения с компьютером выглядит следующим образом (кстати, подойдет и готовый ноль-модемный кабель):
Рис.1. Распайка кабеля для соединения AA-330 c COM-портом компьютера
Далее необходимо было установить логический протокол обмена AA-330 с компьютером. Самым простым решением показалось использовать второй COM-порт компьютера с терминальной программой на нем – это позволяет осуществлять мониторинг первого COM-порта, к которому подключен AA-330 и «родная» управляющая программа, например, «Antenna Analyst» [2]. В качестве же терминала я использовал соответствующий раздел в среде разработки CodeVision AVR [4]. Для этого шага схема соединений, приведенная на рис.1, преобразуется следующим образом:
Рис.2. Распайка кабеля для исследования протола обмена AA-330
Соединение точки B с точкой С (рис.2) позволяет установить, что передает компьютер прибору, в момент нажатия на кнопку «Старт» «родной» программы, чтобы тот начал выдавать результат. Затем точка С соединялась с точкой А и это, в свою очередь, позволяло установить, что передает прибор компьютеру в ответ на входное воздействие (т.е. на тот самый управляющий символ, который мы определили на предыдущем шаге).
С помощью этих манипуляций удалось установить следующее: сканирование запускается передачей на AA-330 одного байта, который определяет диапазон (табл.1), при этом шаг сканирования задается в самом приборе и управляющей программой не определяется.
Символ ASCII |
Hex |
Диапазон |
0 |
30 |
1-10 MHz |
1 |
31 |
10-20 MHz |
2 |
32 |
20-30 MHz |
3 |
33 |
Заданный* |
4 |
34 |
10 m |
5 |
35 |
12 m |
6 |
36 |
15 m |
7 |
37 |
17 m |
8 |
38 |
20 m |
9 |
39 |
30 m |
: |
3A |
40 m |
; |
3B |
80 m |
< |
3C |
160 m |
*Обозначает использование тех границ диапазона сканирования, которые заданы в пунктах меню прибора start freq и end freq
Табл.1. Управляющие символы, запускающие измерение на АА-330 и соответствующий им диапазон сканирования
Сразу после получения управляющего байта прибор начинает сканирование и передает на линию TD данные измерений в кодировке ASCII. Причем, в начале сообщения передается символ <S> (hex 0x53), данные о диапазоне и шаге сканирования, а завершается передача символом <E> (hex 0x45). Все строки оканчиваются символами <CR><LF> (hex 0x0D, 0x0A). Как было сказано, в сообщении AA-330 содержится и информация по шагу, с которым проводится измерение (строка 4 на рис.3а), причем шаг кодируется следующим образом: “01”-250кГц, “02”-100кГц, “03”-10 кГц, “04”-1 кГц.
Разберем выходное сообщение прибора на примере: установим диапазон сканирования от 2 до 3 МГц с шагом 100 кГц, причем, установим эти параметры именно в приборе (start freq,end freq, step size), передадим прибору по порту символ <3> (hex 0x33). В результате AA-330 выдаст последовательность строк, показанных на рис.3а (на рис.3б представлена та же самая информация, но в шестнадцатеричном виде, чтобы можно было видеть всю последовательность переданных байт вместе с неотображаемыми символами).
Каждому шагу измерения соответствует одна строка, где через запятую перечислены КСВ, действительная и мнимая часть импеданса (рис.4). Разумеется, количество строк соответствует диапазону, поделенному на шаг измерения.
К огромному сожалению, в протоколе не предусмотрена передача знака мнимой части импеданса, что значительно сужает область применения прибора при работе с компьютером, впрочем, это его достоинств, как надежного портативного устройства для измерений в сложных условиях, не умаляет - подключение к компьютеру уже из области опций.
Рис.3. Выходное сообщение АА-330
Рис.4. Порядок представления данных в строках передаваемых AA-330
Думаю, приведенного выше описания будет вполне достаточно для того, чтобы заинтересованные радиолюбители могли приступить к разработке программного обеспечения для AA-330 «под себя», не тратя времени на разбирательства с протоколом обмена, распайкой шнуров и т.д.
Предлагаемый вариант программы по интерфейсу схож с оригинальным (рис.5). Кнопка «Старт»(1) запускает сканирование, передавая на АА-330 управляющий байт, который определяется текущей строкой списка (4), после нажатия на «Старт», начинается прием данных с порта, отображающийся количеством принятых байт в текстовом поле (9). Когда значения в поле (9) перестают изменяться, можно просмотреть полученные результаты, нажав на кнопку «График»(2), причем данные, полученные в результате текущего сканирования, будут отображаться сплошными линиями, а данные предыдущего отобразятся штриховкой, для более удобных сравнительных оценок.
Рис.5 Основная форма программы
После отображения на графике, данные можно сохранить в текстовом файле, нажав на кнопку «В файл» (3), прошу обратить внимание, что сохранять в файл можно только после просмотра данных на графике. Данные будут сохраняться в файл с именем current_data.txt, который находится в той папке, откуда была запущена программа. Важный момент состоит в том, что данные в этом файле не добавляются, а каждый раз перезаписываются, т.е. при нажатии на кнопку «В файл»(3) программа удаляет файл current_data.txt и создает его заново, записав туда данные последнего сканирования. Структура строк файла следующая: 1) частота в кГц, 2) КСВ, 3) действительная часть, 4) мнимая часть импеданса. Поля в файле разделяются точкой с запятой, что позволяет легко импортировать его в MS Excel, Statistica и другие пакеты. Отображением данных на графике управляют элементы выбора (5), установка или снятие отметки с одного из них, делает активной кнопку «Перерисовать» (6), нажатие на нее приводит к обновлению графика, в соответствии с выбранными параметрами отображения. Номер порта, который программа будет использовать (к которому подключен прибор), можно задать в текстовом поле (7), нажав затем кнопку «Измен.»(8). Если порта с таким номером не существует или он уже открыт, при нажатии кнопки «Старт»(1), возникнет сообщение об ошибке. В этом случае нужно указать другой порт или закрыть приложение, которое может его использовать. Все настройки, сделанные при работе с программой сохраняются в файле config.ini, находящимся в той папке, откуда приложение запускалось, и будут воспроизведены в последующем.
Для масштабирования графика нужно навести указатель мыши на интересующий фрагмент, нажать левую кнопку и, удерживая ее, выделить фрагмент, ведя мышь вправо и вниз, при отпускании кнопки фрагмент развернется на все пространство окна диаграммы. Вернуться к начальному варианту можно таким же образом, но растягивая график влево и вверх.
Полагаю, что эти несколько сумбурные объяснения вполне смогут дать общее представление о работе с программой, а небольшой практический опыт эксплуатации полностью разрешит все вопросы.
Разумеется, в архиве приведены исходные коды программы, и ее можно свободно улучшать и настраивать под свои цели и задачи. Программа написана в среде Delphi 7, для работы с COM-портом используется бесплатный компонент «Async Professional ComPort» [5], который необходимо скачать и подключить к Delphi. По мере возможности я постарался комментировать исходный код, но, если по нему возникнут вопросы – постараюсь ответить (rv6lqx{собака}mail.ru).
Алексей Сазыкин (RV6LQX).
Список источников: