PDA

Просмотр полной версии : САТ команды



Донанат
29.09.2008, 04:28
Как и где набираются САТ команды для управления трансивером?
Подскажите чайнику.

UN7ZL
29.09.2008, 05:00
В мануале на каждый трансивер, на последних страницах есть их полный список. Там же и описано как и что. Стандартно они посылаются автоматом, при управлении аппаратом, если только что то не стандартное.

Донанат
29.09.2008, 09:57
Список команд есть, но где их вводить-ни слова. Сказано, что ЕССУ
программ для этого не разрабатывает т.к. есть много у других производителей 73!

aleksandr130
29.09.2008, 10:22
можно запустить терминалку и посылать команды набирая на клавиатуре .
Но есть другой путь - использование упровляющих програм для трансивера
например http://www.ham-radio-deluxe.com

Serg
29.09.2008, 13:11
Yaesu использует CAT команды в каком-то "хитромудром" виде, который напрямую нечитабелен для рядового пользователя. Да и не нужно. Это удел программистов.

САТ команды обрабатывают программы LOG-a, программы-менеджеры управления трансиверами и т.п., выдавая результат в понятном виде на экран.

Попробуйте, например, программу HamRadioDelux, которую вам уже посоветовали выше...

RU3GA
29.09.2008, 13:21
Yaesu использует CAT команды в каком-то "хитромудром" виде, который напрямую нечитабелен для рядового пользователя.

Да ничего там премудрого нет --- обычные 5 байтов HEX у каждой команды.
Послать команду в трансивер и принять ответ можно с помощью любой программы , работающей с СОМ --- например, я пользуюсь "COM Port Toolkit"
Но в принципе --- действительно лучше пользоваться специально разработанными программами для данной модели --- там ничего не нужно будет вводить --- только на нужные кнопки жать и все...

Serg
29.09.2008, 14:47
RU3GA

Если в том "тулките" можно выводить символы в порт с задержкой, может и получится. Кажется, протокол у Yaesu такой, что там не просто выводится в порт целая строка команды, например, как у "охаянного" вами протокола Кенвуд... ;)


Да ничего там премудрого нет --- обычные 5 байтов HEX у каждой команды.

Популярно объяснить можете, как установить частоту 14.150?

В мануале написано, так просто:
01 41 50 00 01 (01 справа - команда установить частоту)

Как мне слать в порт эти цифры, в каком порядке, может закодировать их как-то? :roll:

Конечно, проще использовать OmniRig, который я почти без труда внедрил, но хочется и своё...

ES1BA
29.09.2008, 15:17
RU3GA

Конечно, проще использовать OmniRig, который я почти без труда внедрил, но хочется и своё...

Так Вы и ответили на свой вопрос... Посмотрите ини файл для своего трансивера (в OmniRig)... и составьте любую другую команду (по аналогии), которую поддерживает трансивер (см. мануал).
Вячеслав

RU3GA
29.09.2008, 15:20
RU3GA
Если в том "тулките" можно выводить символы в порт с задержкой, может и получится. Кажется, протокол у Yaesu такой, что там не просто выводится в порт целая строка команды, например, как у "охаянного" вами протокола Кенвуд... ;)

Популярно объяснить можете, как установить частоту 14.150?

В мануале написано, так просто:
01 41 50 00 01 (01 справа - команда установить частоту)

Как мне слать в порт эти цифры, в каком порядке, может закодировать их как-то? :roll:



Там вводятся нужные байты с пробелами.

Конкретно что нужно сделать:

1. Запускаете COM Port Toolkit.
2 Меню вверху --- >Сообщение ---> Отправить...
3. Нажимаете в открывшемся окошке кнопку "Дополнительно" и ставите фишку "Тип данных --- HEX" (это для ICOM и Yaesu , а для Кенвуда это будет "Строка")
4 Набиваете в любой из трех пустых строчек вверху этого окошка нужную команду --- например для Вашего примера установки частоты ---
01 41 50 00 01
5. Нажимаете Send напротив этой строчки
Вот и все --- команда в HEX "улетела в трансивер" и он ее будет выполнять :)
Если команда подразумевает ответ от трансивера --- то Вы его увидите на правой панели программы

Удачи!
RU3GA

Serg
07.10.2008, 16:45
es1ba

К сожалению, для меня в файлах омнирига по части Yaesu ничего не понятно...

RU3GA

С вашей помощью немного разобрался. Значит трансиверу нужны как бы в HEX-формате значение частоты и команда "установить частоту"...

На самом деле, эти данные не нужно переводить DEC->HEX (в чем я совсем сомневался), а просто "порубить" по 2 цифры и передать в порт в режиме HEX.

Но, если мой компонент не умеет отправлять в HEX, мне нужно перевести каждые из пяти пар этой "HEX" строки в ASCII эквиваленты и уже передать их в порт...

Остался вопрос, нужна ли задержка между символами, в разных источниках пишут разное, где 50-200мсек, где вообще не нужно... Может быть кто-то писал САТ для Yeasu и скажет точно?

RX4HX
07.10.2008, 17:44
Остался вопрос, нужна ли задержка между символами, в разных источниках пишут разное, где 50-200мсек, где вообще не нужно... Может быть кто-то писал САТ для Yeasu и скажет точно?

Задержка нужна не между символами, а между коммандами - комманды в Yeasu имеют 5-байтовый вид, с задержкой между коммандами не менее 50 мс.

Serg
07.10.2008, 20:27
Алексей, спасибо! На днях испытаю.

Serg
07.10.2008, 23:18
А мануал говорит нужно... Извините за качество, такой и был в отсканированном виде.

RU3GA
08.10.2008, 08:36
А мануал говорит нужно... Извините за качество, такой и был в отсканированном виде.


Разумные задержки получатся сами при использовании компонента.
Хотя если писать обмен полностью "руками" , то лучше наверное сделать все как по мануалу.
Просто последите с помощью того же ComportToolKit (в режиме "захват порта") как это делают другие программы , например HRD --- и как отвечает трансивер. Там же увидите время выполнения запросов-ответов. И все сразу встанет на свои места.

Удачи!
RU3GA

RZ3AGI
08.10.2008, 09:11
Yaesu использует CAT команды в каком-то "хитромудром" виде, который напрямую нечитабелен для рядового пользователя.

В FT450/950/2000 они используют протокол Kenwood

Serg
08.10.2008, 12:54
Заработало и без задержек, видимо, они уже есть в процедурах вывода.

ComportToolKit в режиме "захват порта" - так и не понял как заставить работать, говорит порт занят... Нашел другую программу PORTMON - все нормально.


В FT450/950/2000 они используют протокол Kenwood

Я вкурсе и жму им лапу , :пиво: , но задача стояла сделать для предыдущих моделей...

Всем спасибо.

RU3GA
08.10.2008, 16:36
Заработало и без задержек, видимо, они уже есть в процедурах вывода.

ComportToolKit в режиме "захват порта" - так и не понял как заставить работать, говорит порт занят...



Просто сначала запустите ComportToolKit в режиме захвата , а уже потом запускаете прогу , за которой надо следить --- все будет работать. Единственное --- отключать надо в обратном порядке --- сначала прогу за которой следили, а потом ComportToolKit --- иначе винда подвиснет --- об этом есть в описании ComportToolKit.

Удачи!
RU3GA

Serg
08.10.2008, 17:01
Нет, в таком случае моя программа не могла открыть порт. Возможно тому вина Win98.

Но с Portmon все ОК: http://www.softforfree.com/files/soft/portmon_nt.zip

lode
22.04.2011, 05:37
Доброе время, коллеги!

Очень нужна помощь_подсказка по CAT протоколу для ICOM. Возникла задумка сделать контроллер для управления популярными бытовыми радиоприемниками из радиолюбительских программ. Сказано-сделано... Контроллер на ATMega есть, прошивка написана... Однако возникла проблема, сражение с которой затягивается... При написании прошивки пользовался информацией http://www.plicht.de/ekki/civ/civ-p0a.html . Контроллер заработал, но не со всеми программами... CIVCommander и R75Prog сразу увидели "рукодельный" ICOM R75, а HamRadio Deluxe и OmniRig упорствовать стали. Анализ логов portmon'а навел на мысль - что-то не нравится программам в ответе контроллера. И начались "пляски с бубном"...
CIVCommander устраивает такой вариант: запрос - ответ...
HRD (установлено опытным путем): запрос - [OK]+ответ...
OmniRig (из анализа INI файлов): запрос - ответ+[OK]...
Может я что-то недопонимаю? Подскажите,куда копать? Настоящего ICOM'a под руками нет,так что сравнить не с чем... Если бы посмотреть обмен между HRD и ICOM в PortMon'e - половина вопросов уйдет сама-собой... Помогите! :smile:
Заранее благодарен!
73!
Алексей AKA Lode

lode
22.04.2011, 15:33
Доброе время,коллеги!

Вопрос снимаю - проблема устранена... Причина в задержках между командами... Было же сказано: быстро - хорошо не бывает :smile:

73!

С уважением

Алексей AKA lode

lode
10.05.2011, 10:57
Доброе время, коллеги!

Извините за надоедливость, но вопрос полностью не снят - не получается подружить рукодельную железяку с HamRadioDeluxe ...:cry: PortMon показывает, что программа "вылетает" по таймауту (это касается и RxPlus`а). Прошу помощи !!! "Догадаться" чего именно ждет и не может дождаться HRD не получается... Вся надежда на владельцев Icom'ов - выручите PortMon`овским логом работы трансивера_приемника и HRD...

Заранее благодарен!

73!

Алексей АКА lode

UA0LFK
10.05.2011, 12:15
Алексей я сам делал управление приемником по CAT-V интерфейсу.
Работали все программы кроме HRD.
Оказалось, что интерфейс должен быть выполнен так, чтобы
программа HRD не только принимала данные от приемника,
но и видела все, что она сама передает.
Тоесть все запросы на приемник должны возвращаться на вход RX COM порта.
Лучше всего это сделать аппаратно, чтобы не заморачиваться с
передачей принятых байт програмно.
После выполнения этого условия все проблемы с HRD исчезли.
Владимир.

lode
10.05.2011, 13:03
Владимир, огромное спасибо!

73!

Алексей АКА lode

Владимир_К
08.07.2017, 16:32
Добрый день коллеги! Вытащил из истории старую тему, прошу помощи. Есть синтезатор и есть желание заставить его работать по САТ. Написал тестовую программку, подключил плату через СОМ-порт к компьютеру.
С терминала посылаю команду, ну скажем ID; синтезатор отвечает ID019; (это я подсмотрел на сайте Тарасова, протокол Кенвуд, а ответ применительно к TS-2000).
На команду IF; синтез отвечает IF00012345678; Правильно это или нет, не знаю.
С программой от UR5EQF и Omnirig девайс не хочет работать. Несколько секунд выдает сообщение ON Line, затем появляется Rig not responding. Отсюда несколько вопросов:
- для того чтобы Omnirig опознал устройство, есть какая то команда и что должен ответить синтезатор?
- если есть, что за команда, или же на все запросы синтезатор должен давать адекватные ответы (имею ввиду команды, которые ждут ответа)?
- кроме RTX и DTX надо ли задействовать еще выводы СОМ-порта? Иногда встречал информацию, что низкий уровень на соответствующих выводах порта указывает что трансивер (или компьютер) не готовы к приему данных.
Или совет, где прочитать информацию..

UT0UM
08.07.2017, 16:54
Несколько секунд выдает сообщение ON Line, затем появляется Rig not responding.

а Вы посмотрите монитором порта что они там друг другу говорят



На команду IF; синтез отвечает IF00012345678; Правильно это или нет, не знаю.

нет не правильно, поэтому видимо и происходит Rig not responding.

вот формат ответа на IF
266142


- кроме RTX и DTX надо ли задействовать еще выводы СОМ-порта?

нет
раз он на ID отвечает, значит обмен есть


Или совет, где прочитать информацию..

почитайте формат команд в конце инструкции к TS-2000

Владимир_К
08.07.2017, 17:09
раз он на ID отвечает, значит обмен есть
Нет, видимо неточно обрисовал ситуацию - это терминал принимает ответ от синтезатора на команду полученную также от терминала. Это я лишь показал, что я правильно работаю с UART, принимаю и передаю символы, строки... Это я тупо включил в тестовую программу, что если получена команда ID;, то надо ответить ID019, если получена команда IF;, надо ответить IF00012345678;, где цифры 1....8 - это частота. Но я не уверен, что это так и пока не могу найти ответ. Мозги видимо уже усыхают:-(.
А программа Omnirig, в отличие от терминала может хочет что-то другое. Терминалу то до лампочки, что ему передали, то и принял и, на экран выдал..

нет не правильно, поэтому видимо и происходит Rig not responding.
Да вроде и так я тоже пробовал... Но сейчас уточню, возможно что упустил (вроде 38 байтов выдавал)... Да нет, так и отвечал.. Тоже "not responding".

UT0UM
08.07.2017, 17:15
Да нет, так и отвечал.. Тоже "not responding".

ну тогда смотрите монитором порта что там спрашивает Омнириг и что ему отвечает синтезатор
если не отвечает, то почему

там в омнириге есть файлы ини для каждого трансивера
там есть форматы команд, которые понимает омнириг

а вообще, для начала, я бы омнириг не юзал
я бы взял лог, который без омнириг работает
выставил бы там жестко тс-2000 и добился бы устойчивой работы синтезатора с эти логом
а потом бы уже через Омнириг запускал

Владимир_К
08.07.2017, 17:39
Вот код, может оно так понятней будет.. В общем пытался послать две команды ID; и IF (ответ на команду IF; я там "укоротил", первое время писал все 38 байт, потом урезал, так как в другом месте увидел пример другого ответа). Может в коде я что-то не то написал..


#include <avr/io.h> //Библиотека ввода/вывода
#include <avr/interrupt.h> //Библиотека прерываний
#include <stdlib.h> //Для atoi()


//#define bauddivider (103)
//#define F_CPU 16000000L


volatile char Str[]="FA00012345678;";
volatile char StrIF[]="IF00012345678;";
volatile char i, k;
volatile char b;
//unsigned Frequensy;
char Str2[]="FA";
volatile unsigned long Frequensy_1, Frequensy_2 ;
unsigned long Num=0;
//char Str3[]="FB";
//char Str4[]="FB";
//char Str5[]="ID";
//char Str6[]="IF";


int comparelimit=2;

/************** Прототипы подпрограмм ********/
void USART_Transmit(char) ;
void USART_Init( unsigned char);
void str_uart_send(char *);

/*********** Подпрограмма обработки прерывания ********/
ISR(USART_RX_vect)
{


b = UDR0;


/***** Выполняем обработку принятого байта ****************/


if (b==';')
{
k=1;
//i=0;
return;
}
else
{


Str[i]=b;
i++;
}
}
/**************** Инициализация модуля USART *******************/

void USART_Init( unsigned char ubrr) //Инициализация модуля USART
{

UBRR0H = (unsigned char)(ubrr>>8); //Устанавливаем скорость передачи
UBRR0L = (unsigned char)ubrr;


/* Разрешаем прием и передачу по USART */


UCSR0B=(1<<RXEN0)|( 1<<TXEN0); //Настраиваем регистр - разрешаем прием и передачу
UCSR0B |= (1<<RXCIE0); //Разрешаем прерывание при заполнении регистра приема.

UCSR0B=(1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
/* Устанавливаем формат данных 8 бит данных, 2 стоп бита */


//UCSR0C=0x86; // Инициализация именно для ATmega328p
UCSR0C = (1<<UCSZ01)|(1<<UCSZ00);


}
/************* Функция передачи символа *******************/
void USART_Transmit(char data) //Функция отправки данных
{
while ( !(UCSR0A & (1<<UDRE0)) ); //Ожидание опустошения буфера приема
UDR0 = data; //Начало передачи данных. Для передачи "кладем" символ в регистр данных UART.
}


/******************** ** Функция передачи строки по USART ******************** *******/
void str_uart_send(char *string)
{
while(*string != '\0')
{
USART_Transmit(*stri ng);
string++;
}
}


/************* Главная функция *******************/

int main(void)//главная программа
{


USART_Init (103); //Вызываем функцию настройки UART, где -103 параметр скорости передачи (9600). Пример расчета в даташит.


sei(); //разрешаем глобально прерывания

while(1) //вечный цикл
{
if (k==1)


{

int result_4=strncmp("IF", Str, comparelimit); //Проверяем первые два элемента строки Str, есть ли там "IF"
// если есть, значит это команда, соответствующая "IF".


if (result_4==0)
{

str_uart_send (StrIF);
k=0;
i=0;
}

int result=strncmp(Str, "ID", comparelimit); //Проверяем первые два элемента строки Str, есть ли там "ID"
// если есть, значит это команда, соответствующая "ID".
if (result==0)
{
str_uart_send ("ID019;"); // Отвечаем, "ID019;"
k=0;
i=0;
}
int result_1=strncmp(Str , "FA", comparelimit); //Проверяем первые два элемента строки Str, есть ли там "FA"
// если есть, значит это команда, соответствующая "FA".


if (result_1==0)

{Frequensy_1 = atol(Str+5); //Из строки выделяем число типа unsigned long (заданную пор САТ частоту)
//Присваиваем это значение переменной Frequensy_1
k=0;
i=0;
}
int result_2=strncmp(Str , "FB", comparelimit); //Проверяем первые два элемента строки Str, есть ли там "FB"
// если есть, значит это команда, соответствующая "FB".
if (result_2==0)
{
Frequensy_2 = atol(Str+5); //Из строки выделяем число типа unsigned long (заданную пор САТ частоту)
k=0;
i=0; //Присваиваем это значение переменной Frequensy_2
}
}
}
}

UT0UM
08.07.2017, 17:47
Вот код

да посмотрите Вы обмен
все сразу станет ясно

Genadi Zawidowski
08.07.2017, 18:01
Если что, вот документ где расписано, что должна IF возвращать. Я делал в своем проекте так - использовал кенвудовскую программу ARCP-590 (она работает без омнириг). Когда заработало без отваливаний с ней, все остальное работает как надо.
И кусок кода, где можете посмотреть как оно устроено.

Владимир_К
08.07.2017, 18:01
да посмотрите Вы обмен
Чем посмотреть, я ни терминал, ни СОМ-порт никогда еще толком не использовал... Как отследить обмен, понятия не имею..

Serg
08.07.2017, 18:07
Как отследить обмен, понятия не имею..

google: portmon.

UT0UM
08.07.2017, 18:11
Как отследить обмен, понятия не имею..

самій простой способ:

поставить VSPE, сделать сплиттер на вирт порт, указать его номер в логе
и смотреть обмен вон там где черное окно
266154


Я делал в своем проекте так - использовал кенвудовскую программу ARCP-590 (она работает без омнириг). Когда заработало без отваливаний с ней, все остальное работает как надо.

о
ну и я также советовал :пиво:

Genadi Zawidowski
08.07.2017, 18:11
Кстати, portmon но 64-битных системах не работает. Можно использовать http://www.sudt.com/en/ap/index.html

Владимир_К
08.07.2017, 18:14
Если что, вот документ где расписано, что должна IF возвращать.
Чтобы долго не глядеть на мою писанину, вот ответная строка, что я даю на команду IF:
StrIF[]="IF000123456780010100 00010000000000000;"
На терминале читаю следующее:
IF000123456780010100 00010000000000000;
Где 12345678 - частота в герцах, остальные параметры, где нули, где единицы, там с потолка, по своему разумению. Т.е. вроде то, что и должно быть.
За код спасибо. Но мне надо еще в нем разобраться...

Genadi Zawidowski
08.07.2017, 18:23
В нем не разбираться.. Выдрать формирование ответов на кат команды и возможно разбор, вставить в свой проект... Кстати, подсмотрев обмен скорее всего будет понятно, на какую команду не пришёл ответ.


Из работающего трансивера ответ на IF; (именно так, с пробелами):

IF00014019440 +000000 0003000000 ;


зы: судя по коду, 328-я атмега? В теме "новая прошивка для синтезатора 4Z5KY" есть бинарники, которые отвечают по CAT (скорость 57600 с кварцем 16 МГц) как Кенвуд 590. Можете оттуда взять, прошить.

Владимир_К
08.07.2017, 22:41
Закачал VSPE. Создал виртуальный порт СОМ-2, запустил Omnirig? в настройках Omnirig указал СОМ-2, настроил параметры порта. Включил синтезатор. Картинка на скрине. Как видно, Omnirig постоянно выдает команды IF; FA; FB; От синтеза ничего не поступает. Ну и, к сожалению, с VSPE тоже не все понятно. В черном окне то показывает команды, то вообще ничего нет, пусто. Хотя в окошке повыше, цифра отосланных байт все время меняется. Не пойму, отчего так..
Ну и не понятно вот тот лог, который Геннадий выше выложил, почему разрывы между данными в ответе от трансивера? В мануале трансивера об этом ничего не сказано. Также, что за пробел между признаком окончания строки ";" и последней цифрой. Это что? Случаем не 0, который имеем в памяти контроллера, которым оканчивается строка символов? Может надо выдать по UART строку, то есть с нулем в конце, а уже потом признак окончания ";"?
Ведь если я передаю например: "FA000123456......... ................00;" то здесь присутствует 0, после символа ";" ???.
То есть, может правильно было бы так: "FA.................. ...................0 0" то есть передали строку из контроллера, потом вслед символ ";" ?
В общем пошел коды смотреть...

UT0UM
08.07.2017, 22:47
Omnirig постоянно выдает команды IF; FA; FB; От синтеза ничего не поступает.

ответ трансивера на вкладке Входящие

Genadi Zawidowski
08.07.2017, 23:03
Пробелы в количестве пяти штук за частотой это как раз по документу... А что за а пробел у меня в конце перед semicolon, посмотрю... Раньше было все нормально.

Добавлено через 11 минут(ы):

В обмене только печатные символы, никаких нулей.

Владимир_К
08.07.2017, 23:49
ответ трансивера на вкладке Входящие
Не там ничего нет. Я кнопку видел и переключал. Да и здесь, как я уже выше писал, иногда тоже ничего не отражает.. Но надо еще с программой поиграться, может что упустил.

В обмене только печатные символы, никаких нулей.
То есть, Вы имеете ввиду вот тот 0, который NUL - самый первый в таблице ASCII?

Что касается передачи его в конце строки, то я его не передаю:
/******************** ** Функция передачи строки по USART ***********/
void str_uart_send(char *string)
{
while(*string != '\0') //Вот здесь передаем все символы пока не '\0', то есть вроде правильно?
{
USART_Transmit(*stri ng);
string++;
}
}


Пробелы в количестве пяти штук за частотой это как раз по документу
Да, точно, глянул сейчас TS-590, 5 пробелов... Раньше смотрел на TS-2000, там видимо проглядел (подумал, что какие-то еще параметры, я их заменил нулями...)
Да и тут подсмотрел ранее, тоже несколько другое..
http://forum.ut2fw.com/viewtopic.php?f=1&t=186&start=15 (пост от 10 октября 2010г). Этим тоже руководствовался..
Да еще смотрел на мануал, что скачал с QRZ на TS -2000, там после частоты 4 цифры - названы как значение шага перестройки (перевод на русский). Может криво перевели... А может для TS-2000 так и надо, а я его и отметил в Omnirig. Поищу оригинал мануала, что там.

Genadi Zawidowski
09.07.2017, 00:29
Посмотрел в инструкцию - да, последний символ нулем должен быть. В коде канала памяти то что больше 99 - цифра или пробел, остальные два цифры.

Владимир_К
09.07.2017, 00:49
Ноль, это какой? тот что 30 в НЕХ?

Genadi Zawidowski
09.07.2017, 01:01
ВОт вам правильные дампы...
Я про ascii символ с кодом 0x30 вместо 0x20 в ранее показанном мною дампе.
и все печатные, никаких с кодами меньше 0x20.


FA00007012000;
IF00007012000 +000000 00010000000;

Владимир_К
09.07.2017, 09:27
ВОт вам правильные дампы...
Да, это я вчера уже понял.... Мне пока непонятно следующее: допустим я не то отвечаю Omnirig, она это не понимает. Но почему VSPE не фиксирует то, что выдает синтезатор. Значит он ничего не выдает, и мне кажется, что причина в том, что формат команды, что я посылаю с терминала, например IF: и та же команда от Omnirig, это не одно и тоже. Допустим разница в конце команды. Но я ведь сравниваю первые два символа и тогда условие должно выполняться, независимо от того, что в конце команды.
Кстати регистр влияет или нет? В первых Ваших дампах коды 69 и 66, а это "i" и "f", то есть строчные. Но, в последнем дампе вижу заглавные.

Genadi Zawidowski
09.07.2017, 11:24
Вы видите, что OmniRig запрашивает символами в верхнем регистре, значит проблем не должно быть. С маленькими - это я с клавиатуры команды давал.
На третьей странице описания, что ранее выложил, есть фраза:

A command consists of 2 characters. You may use either lower or upper case characters.
Соответственно, разборщик команд это учитывает. Но не думаю, что у Вас проблема в этом.

Если VSPE не показывает то что точно должно быть видно, попробовали бы предложенную мной ранее утилитку, скриншоты с которой я приводил, чего гадать полдня?

Владимир_К
09.07.2017, 11:53
Да, намудрил я с кодом, точнее в секции обработки принятой команды.. Правильно сын говорит: "Один бестолковый юзер может наделать столько, что и 10 профессионалов не разберутся":-(. А то, что это именно я ему в его 10 лет спаял Радио-86РК, потом Синклер, затем купил Искру-1030М, первые шаги по ассемблеру ему выдал. и т.д. и, возможно этим и определил его судьбу, во внимание не принимает. Неблагодарные потомки...
В общем принимает Omnirig ответ и правильно его распознает. Вот скрин ответа и результат в окошке Omnirig и логгера.
Всем участникам спасибо! Без VSPE так бы и танцевал вокруг кода. Дальше уже наверное сам разберусь.
Ну а если еще посоветуете, буду рад. В общем задача пока такая. Принять команды, по коду разделить их. Тут немного напрягает, что команды например "FA": и "FA0001223........... ...." имеют два одинаковых первых символа, а я их и сравнивал. Вот поэтому я и не сбрасывал указатель, чтобы по указателю различить их. Может по длине строки?
У Геннадия конечно все это есть, но для меня это сложно.. Может и разберусь в его коде, но это будет наверное долго..


попробовали бы предложенную мной ранее утилитку
Вы имеете ввиду AccesPort?

R2RBN
09.07.2017, 12:00
Почитал и немного не пойму зачем вам вообще omnirig? напрямую с логом общайтесь,как всё будет норм тогда и подключайте его он тоже тогда нормально работать будет.Да и в личку я вам дал команды по которым в основном общается лог напишите на них ответы как по датащиту и всё. Вы зациклелись на IF не нужно оно вам по приёму эту команду надо отправлять в комп при запросе от лога так и напишите её переведите частоту,шаг, приём\передача итд в строковую переменную "соберите" её и отправляйте в комп. Ещё раз повторюсь сделайте ответ на команды которые я вам написал в личку и всё у вас заработает,по крайней мера от синтезатора,как заработает,делайте ответ IF чтобы при первом включении получить все данные о состоянии.Да и в IF есть пробелы,просто сделайте обработку всех 38 символов и всё будет в порядке.

Genadi Zawidowski
09.07.2017, 12:01
У меня разбор делается конечным автоматом с состояниями "ждем первый символ команды, второй, накапливаем строку параметра до точки с запятой и считаем символы". Когда приходит завершающий символ, просто проверяем - а сколько накопилось символов? Во всех случаях кроме команды KY символы не накапливаются а сразу преобразуются в целое число. Это не сложный способ, но зато трансивер работает С ЛЮБЫМ софтом.

Владимир_К
09.07.2017, 12:10
Да и в личку я вам дал команды по которым в основном общается лог напишите на них ответы как по датащиту и всё.
Добрый день, Александр. Я вчера прочитал Ваше сообщение, но знаете как бывает, упрешься в столб и не соображаешь, что проще его обойти.

R2RBN
09.07.2017, 12:13
Знаю:-P не раз упирался,пока не решишь задачу не поймёшь что можно проще и по другому.

Владимир_К
17.07.2017, 22:00
Решил вернуться к вопросу.. Итак синтезатор на Atmega328. Для САТ использую UR5EQF_Log3 в связке с Omnirig. В принципе все работает, но как-то оно заторможено.. Впрочем на синтезатор Omnirig реагирует почти нормально, точнее - мириться можно. А вот на команды от Omnirig реакция синтезатора замедленная, а иногда вообще не срабатывает, особенно на команды переключения диапазонов. Когда смотрю обмен между Omnirig и синтезатором в программе VSPE вижу следующее - Omnirig постоянно шлет команды IF; FA; FB. Нажимаю кнопку переключения диапазона - опять та же последовательность IF; FA; FB и уже потом (например для включения диапазона 14 мгц) FA000014346000; С момента нажатия кнопки до появления этой команды пауза весьма приличная. Если, например с Omnirig даю команду переключения вида модуляции, происходит следующее - нажимаю кнопку щелкнув мышкой, кнопка утопает, отпускаю кнопку мышки - кнопка на мониторе возвращается в не нажатое состояние, потом снова уже сама "нажимается". Похоже, что после того, как я прекращаю "наступать" мышкой на кнопку, Omnirig по запросу IF получает состояние синтезатора, соответствующее не нажатой кнопке, а затем уже синтезатор сообщает, что режим включен. В общем как-то оно, мне кажется, неправильно..
Вот у меня мысли такие - зачем Omnirig постоянно опрашивает синтезатор? Мне кажется было бы более правильно - совершил какие-то манипуляции в синтезаторе - он выдал информацию компьютеру, тот отразил ее на мониторе и, наоборот, каждую введенную команду, Omnirig послала ее синтезатору, а потом "замолчала"..
В общем вопрос такой - есть ли рациональное зерно в моем монологе и, если нет, куда копать?
Или может я не дочитал как следует мануалы программ?
Да, добавлю.. На команды от терминальной программы, которую использую вместо Omnirig, синтезатор реагирует, если сравнивать с Omnirig, можно сказать мгновенно...

UT0UM
17.07.2017, 22:31
Omnirig постоянно опрашивает синтезатор

чтобы частоту знать когда Вы валкодер крутите


постоянно шлет команды IF; FA;

поставьтев омнириг Poll int., ms побольше

Владимир_К
19.07.2017, 19:59
поставьте омнириг Poll int., ms побольше
Добрый день.. Небольшой перерыв, связанный с сельхозработами:smil e:. Нет, не помогает. Убрал одну команду (FB;) в файле настройки Омнириг. Вроде немного получше стало. Но, проблема осталась. И связана она, скорее всего с тем, что при переключении диапазонов Омнириг посылает подряд две команды MDn; и FA...........; Причем, когда переключаются диапазоны, где "мода" одинакова, MDn; не посылается. Вот при переключении между такими диапазонами система срабатывает четко. Когда же надо переключиться на диапазон, где мода другая, то иногда происходит следующее - переключается "мода", это видно и в "окошке" Омнигиг и на индикаторе синтезатора, а затем уже, при втором нажатии, и частота. В общем, причина вроде ясна, буду искать решение.

ra1qea
19.07.2017, 21:24
Как и где набираются САТ команды для управления трансивером? ...
Можно вводить команды управления трансивером непосредственно с клавиатуры используя терминальную программу Hyper Terminal, не используя разные omnirig-и. Но не во всех Windows-ах она есть. В ХР - есть. Команды набираются согласно приведённых в инструкции по эксплуатации.
Каждый уважающий себя разработчик программы "Аппаратный журнал" вставляет в программу блок управления трансивером. Пример тому DX4WIN разные версии. Кстати написать что 8-я версия DX4WIN позволяет управлять двумя трансиверами независимо друг от друга.