HamRadio

in R3E


МЕНЮ
              
Форма входа

Поиск
Друзья сайта
Статистика
ПОЛЕЗНЫЕ САЙТЫ
R-Quad - 

радиолюбительские антенны Сервер радиолюбителей России - схемы, документация,
 соревнования, дипломы, программы, форумы и многое другое! Сервер Кубанскик радиолюбителей QSO Tournament Studio. Contest control software. Российский УКВ портал
ПРОХОЖДЕНИЕ НА ДИАПАЗОНАХ
ПОСЕЩЕНИЕ САЙТА
Map
ПОГОДА
Разделы новостей
Обмен опытом [9]
Путевые заметки [6]
История HAM в R3E [4]
Пятница, 29.03.2024, 07:42
Главная » Статьи » Обмен опытом

Новая песня о старом…FT-1000MP
Э.Агаев /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г.
Категория: Обмен опытом | Добавил: rz3em (16.05.2008) | Автор: Эдуард UA3ERD
Просмотров: 6020 | Рейтинг: 5.0/4 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Copyright MyCorp © 2024Сайт управляется системой uCoz