Управляем Yaesu FT-891 через CAT-интерфейс

25 мая 2020

Такие программы, как Fldigi и WXJT-X, умеют управлять трансивером, в том числе менять рабочую частоту, читать показания S-метра, и так далее. Это возможно благодаря CAT-интерфейсу, где CAT расшифровывается как Computer Aided Transceiver. Мы знаем, что для использования данного интерфейса трансивер нужно подключить к компьютеру по USB, а в программе выбрать виртуальный COM-порт и его baud rate. Это наводит на мысли, что на самом деле управление осуществляется через прекрасно знакомый нам UART. Если все действительно так, то автоматизация управлением трансивером — плевое дело.

Примечание: Если вы пропустили обзор трансивера, то вот он — Трансивер Yaesu FT-891 и основы его использования. Также кое-какие тонкости его работы описаны в статьях про Си-Би и телеграф.

В ходе беглого интернет-поиска был найден документ FT-891 CAT Operation Reference Book [PDF], который содержит подробное описание всех доступных команд. Прежде, чем бросаться их использовать, необходимо найти в трансивере настройки «05-06 CAT RATE», «05-07 CAT TOT» и «05-08 CAT RTS». Настройки описаны в отдельном документе, FT-891 Advance Manual [PDF]. Первая настройка задает baud rate, я выставил 9600 bps. Вторая — это таймаут, в течение которого должна быть отправлена каждая команда. По умолчанию таймаут очень маленький, я увеличил до 3000 msec. Про CAT RTS документация говорит «Monitors the computer using the RTS signal». По-видимому, речь идет о какой-то проверке, что программа не зависла, оставив трансивер работать на передачу. Но я не проверял, как именно это работает. Настройку я поставил в DISABLE.

Ранее уже отмечалось, что в FT-891 используется USB-UART чип CP2102. Он без проблем определяется в Linux, но в MacOS необходимо установить соответствующий драйвер. На той же странице можно скачать драйверы для Windows.

Далее необходимо убедиться, что пользователь в системе имеет доступ к виртуальному COM-порту:

# в Ubuntu:
sudo usermod -a -G dialout eax
# в MacOS:
sudo dseditgroup -o edit -a eax -t user wheel

В обоих командах eax нужно заменить на имя вашего пользователя. Если вы используете иную *nix систему или дистрибутив Linux, то нужно проверить, с какой группой создаются устройства /dev/tty*, и добавить пользователя в эту группу с помощью средств, предоставляемых системой. Как происходит настройка в Windows, боюсь, я не подскажу, так как давно им не пользовался.

Утилиты screen и cu (описана в посте про tmux), которые я обычно использую для хождения по UART, в данном случае оказались не очень удобны. Дело в том, что в качестве разделителя команд используется точка с запятой, а не перевод строки. Кроме того, трансивер не делает echo передаваемых символов, в связи с чем вводить команды приходится вслепую. Поскольку за пять минут чтения манов мне не удалось настроить приемлемым образом ни первую, ни вторую утилиту, было решено воспользоваться picocom:

brew install picocom
picocom --baud 9600 --echo /dev/tty.SLAB_USBtoUART

Пример сессии:

FA;FA007020000;

Здесь FA; — это введенная команда, запрос текущей частоты на VFO-A. Идущая дальше последовательность символов представляет собой ответ трансивера. Он сообщает, что мы стоим на частоте 7.020 МГц.

Работать через picocom уже почти удобно. Но все же, хотелось бы, чтобы запросы и ответы шли не одной сплошной строкой. Поэтому было решено написать небольшую программу-клиент на языке Python. Скрипт основан на пакете serial, который уже знаком нам по заметке Строим графики КСВ с помощью Mini60S и Python:

#!/usr/bin/env python3 -u
# vim: set ai et ts=4 sw=4:

import serial
import argparse
import sys

parser = argparse.ArgumentParser(
    description='Simple Yaesu FT-891 CAT client'
    )
parser.add_argument(
    '-d', '--device', metavar='D', type=str, required=True,
    help='Serial port device name (e.g. /dev/tty.SLAB_USBtoUART)')
parser.add_argument(
    '-r', '--baudrate', metavar='N', type=int, default=9600,
    help='Baud rate (default 9600)')
args = parser.parse_args()

with serial.Serial(args.device, args.baudrate) as conn:
    print("CAT> ", end = "")
    for cmd in sys.stdin:
        cmd = cmd.strip().upper()
        if cmd == 'H' or cmd == '?' or cmd == 'HELP':
            print("""
?/h/help    - show this help
q/quit/exit - exit program
r/read      - read response
            """
)
        elif cmd == 'Q' or cmd == 'QUIT' or cmd == 'EXIT':
            break
        elif cmd == 'R' or cmd == 'READ':
            res = conn.read_until(b';').decode('ascii')
            print(res)
        else:
            conn.write((cmd+";").encode('ascii'))
        print("CAT> ", end = "")

Скрипт запускается как-то так:

chmod u+x ./ft891-cat.py
./ft891-cat.py -d /dev/tty.SLAB_USBtoUART

А вот пример сессии:

CAT> ?

?/h/help    - show this help
q/quit/exit - exit program
r/read      - read response

Здесь у нас небольшая подсказка по доступным командам.

CAT> md0
CAT> r
MD03;

Узнаем используемую модуляцию. Программа сама переводит команды в верхний регистр, поэтому теперь их можно вводить в нижнем. Цифра 3 в ответе говорит нам о том, что используется CW. Чтение ответа от трансивера производится отдельной командой r. Дело в том, что скрипт не умеет отличать команды на чтение от команд на запись, а какой-либо ответ имеют только первые.

CAT> md04

Меняем модуляцию на FM.

CAT> pc
CAT> r
PC100

Мощность сейчас установлена в 100 Вт.

CAT> pc005
CAT> pc
CAT> r
PC005;

Снижаем мощность до 5 Вт.

CAT> fa
CAT> r
FA007028000;

Текущая частота — 7.028 МГц;

CAT> fa007001000
CAT> fa
CAT> r
FA007001000;

Перешли на 7.001 МГц.

CAT> tx1
CAT> rm6
CAT> r
RM6013;
CAT> tx0

Первой командой мы переходим на передачу. Далее читаем индикатор под номером 6, которому соответствует КСВ. Последней командой снова переходим на примем. Значение КСВ может меняться от 000 до 255, при этом значение 050 соответствует КСВ 1.5, 100 соответствует КСВ 2, а 130 — КСВ 3.

CAT> md03
CAT> fa007028000
CAT> pc100

Возвращаемся в телеграф на 7.028 МГц, мощность 100 Вт.

CAT> q

Выходим из клиента.

Итак, мы убедились, что управлять трансивером через CAT-интерфейс и вправду просто. Доступные команды не ограничены использованными в этой статье. Упомянутый выше документ описывает 89 команд. Притом, большинство из них могут быть использованы как минимум двумя способами, на чтение, и на запись.

Для чего может быть использован CAT-интерфейс? Например, вы можете достаточно просто сделать автотюнер, управляемый с компьютера. Через CAT трансивер переводится в режим FM с мощностью 5 Вт, включается передача. Далее щелкаем релюшками в автотюнере по минимуму КСВ. Наконец, возвращаемся на прием и выставляем ту модуляцию и ту мощность, что были раньше. Нужна только куча катушек индуктивности, конденсаторов и реле, а также микроконтроллер, принимающий команды от компьютера.

Использование CAT совместно с аудио-интерфейсом открывает еще больше возможностей для творчества. Например, можно написать робота, который за вас слушает эфир в поисках интересных корреспондентов. Или же можно написать умный маяк, который ненадолго выходит в эфир в разных диапазонах и оценивает прохождение по RBN. В целом, здесь все ограничено только вашей фантазией.

Метки: , , .


Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.