Э.Агаев /UA3ERD/,ex UV3RD, МС СССР, А.Агаев /UA3ETI/
В начале 2007 г. в моем шэке на столе появился FT-1000MP . Одновременно с его появлением в голове начали бродить разные мысли о том, как можно получить максимальную пользу и удобство от работы с этим заслуженно уважаемым HAM -ами аппаратом. После приобретения и установки узких SSB и CW фильтров , а также Roofing -фильтра наступил следующий этап - этап технических задумок в области РА- строения, тем более, что в руках после длительного перерыва уже ощущался при виде паяльника заметный зуд. Позади были конструкции на ГУ-13 и ГУ-50 в разных вариантах, на ГИ-7Б, ГУ-33Б и ГУ-74Б, 2*ГУ-74Б и ГС-31Б. Но хотелось что-то достойное "тысячника" по техническим возможностям , и , естественно , с соответствующим дизайном.
Итак, "За сбычу мечт"!
Практически весь 2007 г. ушел на разработку и отладку функциональных узлов РА. В итоге родился аппарат на ГС-31Б с управлением от FT-1000MP . С разъема трансивера "BAND DATA" снимается двоичный код , дешифруется в РА и используется для цифровой индикации выбранного диапазона, коммутации входных фильтров, отводов П-контура, выбора соответствующей этому диапазону антенны (это программируется и может быть изменено как оперативно, "в ручную", так и программно), и автоматической перестройки П-контура в CW или SSB участке соответствующего диапазона. Для этого есть 36 "Банков памяти" - по 4 на каждый диапазон, 2 из них -для С-TUNE и 2 для C-LOAD. В РА предусмотрен контроль температуры внешних частей подогревателя лампы, контроля исправности вентиляторов (их два) , формирование напряжения ALC,различные виды защит (в том числе от выcокого SWR) и т.д.
После 3-месячного прогона и ленивого нажимания на кнопки FT-1000MP появилось ощущение незаконченности работы. Дело в том, что этот трансивер не дает возможности напрямую снимать информацию о виде (MODE) работы. В моем РА предусмотрена клавиша "CW-SSB". При ее включении меняется смещение лампы, сдвигая рабочую точку и запрашивается соответствующий банк памяти для перестройки П-контура на соответствующий CW или SSB участок. Но включать-то эту клавишу надо своим пальчиком , и притом каждый раз, когда меняешь режим работы…Не царское это дело… Получается не "Full automatic"… Нельзя ли отобрать эту информацию у "тысячника" корректно и не залезая в него?
Это то, что получилось…
Теперь перехожу к тому, для чего и пишу эту статью, т.к. в написанном выше ничего нового нет. Как известно, FT-1000MP имеет систему САТ (Computer Aided Transceiver), позволяющую управлять некоторыми функциями со стороны компьютера. Обмен данными с компьютером проходит через последовательный порт со скоростью 4800бит\сек. Применяемый мною для работы в эфире Logger32 каждые 500 mS формирует запрос оперативных данных FT-1000MP и в получаемых от трансивера блоках данных содержатся биты, несущие информацию об активированном в настоящий момент виде работы. Задача сформулировалась сама собой: надо "отфильтровать" эти нужные биты , преобразовать информацию в бинарный код и выложить на подходящий разъем.
За решение этой задачи взялся Александр -UA3ETI. В процессе изучения проблемы перехвата управляющих кодов оказалось, что имеющееся в свободном доступе программное обеспечение по логированию последовательного порта с целью его анализа и получения исходных данных для управления внешними устройствами не подходит, блокируя обмен с трансивером. Надо создавать что-то свое, и, это "ЧТО-ТО" было создано. При решении задачи необходимо учитывать, что Logger32 так же, как и любая другая программа занимая порт блокирует активный доступ к нему со стороны других программ, которыми нам хотелось бы поучаствовать в обмене данными между трансивером и программой. Также при решении пришлось учитывать, что из доступных настроек в Logger32 были только настройки последовательного порта, по которому, собственно, и идет обмен данными с трансивером. Т.о. для решения этой задачи нам необходимо получить программно-аппаратную прослойку, вписывающуюся в нашу концепцию обмена данными.
Как разделить программу и трансивер, если они работают напрямую на уровне последовательного порта? Появилось следующее решение: в компьютер устанавливаем дополнительную мультипортовую плату ( в нашем случае PCI 2RS232& 1 parallel port). и на основе 2-х дополнительных портов (обозначенных нами далее COM5 и COM6) строим программный анализирующий ретранслятор кода. Итак: К COM1 подключен трансивер, на COM6 настроен Logger32 а между COM6 и COM5 устанавливаем обычный нуль-модемный кабель. В результате мы выполнили ранее обозначенное условие - получили свободные порты COM1 и COM5 для нашей анализирующей программы.
Т.е. было: Logger32 <-> COM1 <-> FT1000MP,
стало: Logger32 <-> COM6 <-> COM5 <-> Наша программа <-> COM1 <-> FT1000MP. Наша программа передает запрос от Logger32 на трансивер и получает ответ - все это происходит через порт СОМ1, к которому подключен FT-1000MP, далее анализируется (согласно протокола обмена YAESU) ответ трансивера - вычленяется 7-ой байт блока данных, отвечающий за индикацию вида работы и выводится в управляющий бит параллельного порта - далее на PA, одновременно передавая ответ трансивера без изменения на СОМ5, соединенный нуль-модемным кабелем с СОМ6, прописанным в Logger32.
Получив последовательный код от трансивера, проанализировав его на наличие битов, несущих информацию о режиме CW (по таблице YAESU в двоичном коде - 0ХХХХ010) и преобразовав его в параллельный, наша программа формирует на контакте 2 параллельного порта lpt1 (выход data0) "1" при CW и "0" в остальных модах.
Далее - дело техники, привешиваем на эту шину транзисторный ключ, дублирующий клавишу "CW/SSB" и… радуемся жизни. Остается добавить, что программа может работать с любым LOGом, в котором предусмотрена работа с FT-1000MP. НО!!! Программа РАБОТАЕТ И ПРИ ВЫКЛЮЧЕНОМ LOGGERe, САМОСТОЯТЕЛЬНО ОПРАШИВАЯ TRCVR И ВЫДАВАЯ СООТВЕТСТВУЮЩИЕ КОМАНДЫ, т.о.наличие какого - либо Loga вообще не обязательно.Этот вариант наиболее прост для реализации и не требует городушек с мультипортовой картой. Кстати, программа может работать в теневом режиме при использовании утилиты hide.exe ( http://disketa.info/?download=he.exe&id=129), стартуя одновременно с запуском Windows-а.
Программа написана на языке PERL под Windows с использованием библиотек Win32::SerialPort и Win32::API. Для запуска программы необходимо скачать (с сайта www.activeperl.com) и установить как сам Perl так и указанные библиотеки. Для установки библиотек после установки Perl необходимо запустить Диск:\Perl\bin\ppm3-bin.bat и набрать "install Win32-API<enter>", а для установки библиотеки Win32::SerialPort качаем : http://search.cpan.org/CPAN/authors/id/B/BB/BBIRTH/Win32-SerialPort-0.19.tar.gz - инструкция в архиве.
Программа предлагается для свободного некоммерческого использования.
#!C:/Perl/bin/perl.exe
use Win32::SerialPort qw( :STAT 0.19 ); use Win32::API;
my $GetPortVal = new Win32::API("inpout32", "Inp32", ['I'], 'I'); my $SetPortVal = new Win32::API("inpout32", "Out32", ['I', 'I'], 'I'); my $PortObj1 = new Win32::SerialPort ("COM1"); my $PortObj5 = new Win32::SerialPort ("COM5");
$PortObj1->baudrate(4800); $PortObj1->parity("mark"); $PortObj1->databits(8); $PortObj1->stopbits(1); $PortObj1->write_settings; $PortObj5->dtr_active(0); $PortObj5->rts_active(0); $PortObj5->baudrate(4800); $PortObj5->parity('mark'); $PortObj5->databits(8); $PortObj5->stopbits(1); $PortObj5->handshake('none'); $PortObj5->read_const_time(300); $PortObj5->read_char_time(15); $PortObj5->write_settings;
my $count;my $data;my $count1;my $data1; while (1) {($count,$data)=$PortObj5->read(5); if ($count > 3) {$mycode="";} else {$data=pack("ccccc",00,00,00,02,16);$mycode="yes";} $PortObj1->write($data); ($count,$data1)=$PortObj1->read(16); $cw1=substr ($data1,7,1); $al=0; while ($al < 255) { if (chr($al) eq $cw1) { if ($al eq 2) {$bit=1} else {$bit=0}; }; $al++; }; if (!$cw1) {$bit=0;}; if ($count > 10) {$SetPortVal->Call(0x378, $bit);}; $PortObj5->write($data1) if !$mycode; $PortObj1->write_settings; $PortObj5->write_settings; }
Всем успеха в благородном деле автоматизации рабочих мест и 73! Перепечатка разрешена с обязательной ссылкой на первоисточник.
г.Орел май 2008г. |