Страница 1 из 6 123456 ПоследняяПоследняя
Показано с 1 по 15 из 82

Тема: ANT Язык описания антенн

  1. #1
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0

    ANT Язык описания антенн

    ОБОСНОВАНИЕ

    Язык описания антенн ANT призван закрыть соответствующую нишу при моделировании проволочных антенн. Конечно, в большинстве случаев можно вполне обойтись существующими способами представления, такими как *.MAA, *.NEC и др. Но при моделировании сложных антенн состоящих из множества однотипных элементов давно просится язык позволяющий описывать антенны и манипулировать их геометрией. Конечно, можно сгенерировать антенну любой сложности на традиционном языке программирования, таком как C, C++, C# .. Есть масса графических средств на эту же тему. ANT это некоторая альтернатива между графикой, низкоуровневым кодированием (*.MAA, *.NEC) или прямым программированием на традиционных языках (С, С++, ..). Его преимущества: 1) Читаемость-наглядность; 2) Отсутствие тавтологий. 3) Свободный стиль изложения. 4) Комбинируемость элементов.

    СКАЧАТЬ >>> ANT2.ZIP <<< СКАЧАТЬ


  2. #2
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    ЗАПУСК КОМПИЛЯТОРА
    Код:
         ant.exe --help
    Usage:
         ant.exe fname.ant [parms] [options]
    fname.ant:
         имя вх.файла
    parms:
         параметры для главной функции ant (p0, p1, ...)
    options:
         -b	--BOM добавить в начало вых.файла Byte Order Mark;
         -c	--com= уровень передачи комментариев: {0-без комментариев, 1-однострочный, 2-многострочный};
         -d	--dec= кодовая страница для вх.файла 65001(UTF-8) - по умолчанию;
         -e	--enc= кодовая страница для вых.файла 65001 - по умолчанию;
         -f	--fmt= формат выходного файла {maa/nec};
         -h	--help данный хэлп;
         -o	--out= имя вых.файла (или по умолчанию будет "имя вх.файла" + ".nec/.maa").

  3. #3
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    HELLO ANT!


    Создаем файл с именем hello.ant так:
    Код:
    ant()
    {
    	<[1,2,3][4,5,6][7,8,9]>
    }
    или так:
    Код:
    ant()
    {
    	<	[1,2,3]
    		[4,5,6]
    		[7,8,9]		>
    }
    Запускаем компиляцию и смотрим результат:
    Код:
    ant.exe hello.ant --fmt=nec
    
    	'	#	S	X0	Y0	Z0	X1	Y1	Z1	R
    	GW	1	53	1	2	3	4	5	6	0.001
    	GW	2	53	4	5	6	7	8	9	0.001
    
    ant.exe hello.ant --fmt=maa
    
    	*** X1	Y1	Z1	X2	Y2	Z2	R	S
    	1,	2,	3,	4,	5,	6,	0.001,	53
    	4,	5,	6,	7,	8,	9,	0.001,	53
    ANT оперирует такой категорией как ТОЧКА, которая обозначается квадратными скобками так: [x,y,z]. Другая категория языка - ПРОВОД состоящий из последовательности точек заключенных в < скобки >. В приведенном выше примере hello.ant провод задан 3-мя точками. Остальные значения такие как радиус провода и сегментация определяются по умолчанию. Но при необходимости могут быть переопределены в любой момент:
    Код:
    ANT ()
    {
    	RADIUS = 0.001; SEGMENT = 0.2; ...
    }
    Разделять операторы точками с запятой ( ; ) совершенно не обязательно. Они используются исключительно для повышения читаемости кода. Особенно это может быть полезно когда операторы расположены в одну строчку.

  4. #4
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    КОММЕНТАРИИ

    В любое место (между лексемами) могут быть вставлены комментарии:

    # Однострочный комментарий начинается с символа #-диез и продолжается до конца строки "\r\n".

    /*
    МНОГО-
    СТРОЧНЫЙ КОММЕНТАРИЙ
    обозначается так
    */

  5. #5
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    ПЕРЕМЕННЫЕ/ТОЧКИ

    В ANT любая переменная или константа это вектор [x,y,z]. Даже если она выглядит как скаляр (например: A = 1) это все равно вектор (предполагает: A = [1,1,1]). Она определяется с момента его первого вхождения в левой части оператора присваивания (как в Бейсике). Любая переменная это есть точка с 3-мя координатами. Значение переменной/точке присваивается векторным или скалярным выражением:
    Код:
    T1 = [1,2,3]		# вектор
    T2 = 1			# скаляр (эквивалентно T2 = [1,1,1])
    ALFA = [1+2,3,4]	# итого: ALFA = [3,3,4]
    BETA = [1,2,3] + 4 * 5	# эквивалентно BETA = [1,2,3] + [4,4,4] * [5,5,5] = [1+4*5,2+4*5,3+4*5] = [21,22,23]
    Максимальная длина имени не ограничена. При назначении имен переменным возможно использование символов национального алфавита:
    Код:
    	ДЛИНА_ПРОВОДА = 15
    Верхний и нижний регистры не различаются:
    Код:
    	Длина_Провода = 15	# эквивалентно: ДЛИНА_ПРОВОДА = 15
    А теперь рассмотрим более практический пример:
    Код:
    # Вертикальный крест с приподнятыми концами на ножке
    ANT()
    {
    	H = 10 # высота
    	D = 1 # отступ
    	GND = [0,0,0] # земля
    	CROSS = [0,0,H] # верхняя точка пересечения
    
    	< GND CROSS > # ножка
    	<[-D,0,H+1] CROSS [+D,0,H+1]> # вдоль
    	<[0,-D,H+1] CROSS [0,+D,H+1]> # и поперек
    }
    Получаем:
    Код:
    '	#	S	X0	Y0	Z0	X1	Y1	Z1	R
    GW	1	101	0	0	0	0	0	10	0.001	' ножка
    GW	2	15	-1	0	11	0	0	10	0.001	' вдоль
    GW	3	15	0	0	10	1	0	11	0.001
    GW	4	15	0	-1	11	0	0	10	0.001	' поперек
    GW	5	15	0	0	10	0	1	11	0.001
    Название: zontik.png
Просмотров: 711

Размер: 8.2 Кб

  6. #6
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    ОБЛАСТЬ ВИДИМОСТИ ПЕРЕМЕННЫХ

    Область видимости обозначается { фигурными скобками } и определяет видимость переменных. Переменная определенная во внутренней области невидима во внешней.
    Код:
    ANT()
    {
    	A = 1
    	{
    		B = 2
    		C = A + B
    	}
    	D = A * B	# Ошибка! Переменная B невидима на этом уровне!
    }

  7. #7
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    ЛОКАЛЬНЫЕ ПЕРЕМЕННЫЕ

    В ANT имеется механизм ЛОКАЛЬНЫХ ПЕРЕМЕННЫХ, синтаксис которого следующий:
    Код:
    ANT()
    {
    	A = 1
    	< A 0 >		# получим <[1,1,1][0,0,0]>
    	{
    		$ A = 2	# символ $ определяет локальную переменную, а старую загоняет в стек.
    		< A 0 >	# получим <[2,2,2][0,0,0]>
    	}
    	{
    		< A 0 >	# получим <[1,1,1][0,0,0]>
    	}
    	< A 0 >		# получим <[1,1,1][0,0,0]>
    }
    Такой механизм принят, в основном для локального переопределения радиуса провода и сегментации.
    Код:
    ANT()
    {
    	RADIUS = 0.001
    	< 0 1 >	# здесь радиус провода 0.001
    	{
    		$ RADIUS = 0.002
    		< 2 3 >	# здесь радиус провода 0.002
    	}
    	< 4 5 >	# здесь снова радиус провода 0.001
    }

  8. #8
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    ОПРЕДЕЛЕНИЕ ИСТОЧНИКОВ И НАГРУЗОК

    Источники задаются оператором SOURCE (позиция, амплитуда, фаза) примерно так:
    Код:
    <[1,2,3] SOURCE (0.5,1,0) [4,5,6] .. >
    Здесь источник включен в отрезок определяемый точкой [1,2,3] и точкой [4,5,6] в позиции = 0.5 (ровно по-середине), амплитуда = 1V, фаза = 0° Если надо задать позицию источника ближе к началу отрезка указываем значение ближе к 0.0, к концу отрезка - ближе к 1.0

    Нагрузки задаются оператором LOAD (позиция, R, jX) следующим образом:
    Код:
    <[1,2,3] LOAD (0.25,1,2) [4,5,6] .. >
    При желании в любой межточечный промежуток можно поместить сколько угодно источников и нагрузок:
    Код:
    <[1,2,3] LOAD (0.25,1,2) SOURCE (0.5,1,0) LOAD (0.75,1,2) .. [4,5,6] .. >

  9. #9
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    ОПЕРАТОР ПОВТОРА

    Синтаксис:
    Код:
    	
    REPEAT (exp) # Где exp - выражение определяющее сколько раз повторить цикл
    {
    		...
    }
    Пример:
    Код:
    ANT ()
    {	
    	I = 0
    	REPEAT (1+1)
    	{
    		J = 10
    		REPEAT (3)
    		{
    			< I J >
    			J = J + 1
    		}
    		I = I + 1
    	}
    }
    Получим:
    Код:
    	#	S	X0	Y0	Z0	X1	Y1	Z1	R
    GW	1	173	0	0	0	10	10	10	0.001
    GW	2	191	0	0	0	11	11	11	0.001
    GW	3	209	0	0	0	12	12	12	0.001
    GW	4	157	1	1	1	10	10	10	0.001
    GW	5	173	1	1	1	11	11	11	0.001
    GW	6	191	1	1	1	12	12	12	0.001

  10. #10
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    ОПЕРАТОР УСЛОВИЯ

    Синтаксис:
    Код:
    IF условие THEN then-ветка [ELSE else-ветка] FI
    Здесь такая особенность. В then-ветке и else-ветке видимость переменных не изменяется. Это сделано для того чтобы операторы преобразования координат внутри веток могли оперировать внешним окружением. При необходимости создать локальную область видимости внутри THEN/ELSE используйте {}-скобки.

    Пример:
    Код:
    ANT()
    {
    	IF 1 << 2 THEN <999 1> ELSE <999 (-1)> FI
    	IF 1 >> 2 THEN <999 2> ELSE <999 (-2)> FI
    	IF true   THEN <999 5> <999 6> FI
    }
    Получим:
    Код:
    '	#	S	X0	Y0	Z0	X1	Y1	Z1	R
    GW	1	17287	999	999	999	1	1	1	0.001
    GW	2	15415	999	999	999	-2	-2	-2	0.001
    GW	3	17217	999	999	999	5	5	5	0.001
    GW	4	17217	999	999	999	6	6	6	0.001
    В конструкции IF допустимы следующие операторы сравнения:

    • == Равно
    • <> Не равно
    • << Больше (сделаны двойными чтобы не путать с <..> скобками)
    • >> Меньше
    • <= Больше или равно
    • >= Меньше или равно

    и операторы исчисления логики:

    • NOT инверсия
    • AND конъюнкция
    • OR дизъюнкция
    • XOR исключающее или

    Приоритетность операторов традиционная: 1) Сначала скобки; 2) Затем унарный (+,-); 3) Далее арифметические; 4) Инверсия; 5) Конъюнкция; 6) и наконец Дизъюнкция-Исключающее ИЛИ.

    Да. Арифметика псевдо-векторная, типа: [1,2,3] + [4,5,6] = [1+4, 2+5, 3+6]. Почему псевдо? Потому что умножение и деление выполняются по тому же принципу: [1,2,3] * [4,5,6] = [1*4, 2*5, 3*6].

  11. #11
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    ОПЕРАТОРЫ ГРУППОВОГО ПРЕОБРАЗОВАНИЯ КООРДИНАТ

    В ANT встроены следующие операторы группового преобразования координат:

    • MOVE (dx, dy, dz) - смещение на указанную величину: [x, y, z] + [dx, dy, dz] = [x + dx, y + dy, z + dz]
    • SCALE (mx, my, mz) - умножение на указанную величину: [x, y, z] * [mx, my, mz] = [x * mx, y * my, z * mz]
    • ROTATE (ax, by, cz) - поворот вокруг оси OX на угол ax, потом поворот вокруг оси OY на угол by, потом поворот вокруг оси OZ на угол cz (крен, тангаж, рысканье).
    • ROTATE ([vx, vy, vz], a) - поворот вокруг заданного вектора [vx, vy, vz] на угол a (Квантернион).


    Операторы SCALE и ROTATE по умолчанию выполняются относительно начала координат. Однако, возможно переопределить системную переменную CENTER = [x,y,z]. После чего указанные преобразования будут выполняться относительно указанной точки.

    Область действия оператора определяется текущей областью видимости. При этом оператор воздействует на все определенные точки от начала указанной области до самого оператора.

    Например:

    Код:
    ANT()
    {
    	< t1 t2 .. > 
    	{			### начало локальной области видимости
    		< t3 t4 .. >
    		< t5 t6 .. >
    		MOVE (dx,dy,dz) # действует на < t3 t4 .. > и < t5 t6 .. >
    		< t7 t8 .. > 
    	}			### конец локальной области видимости
    	SCALE (1,1,-1) # действует на всех кроме < t9 t10 .. >
    	< t9 t10 .. >
    }
    Здесь оператор MOVE (dx,dy,dz) воздействует на провода < t3 t4 .. > и < t5 t6 .. > Провод < t1 t2 .. > и < t9 t10 .. > находятся вне области видимости. Провод < t7 t8 .. > тоже, т.к. к моменту исполнения оператора еще не определен. Оператор SCALE (1,1,-1) воздействует на все провода кроме < t9 t10 .. >.

  12. #12
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    ВСТРОЕННЫЕ ФУНКЦИИ

    • Функции одного аргумента: ABS, ACOS, ASIN, ATAN, CEIL, COS, EXP, FLOOR, LOG, LOG10, ROUND, SIN, SQR, TAN.
    • Функции 2-х аргументов: POW, MOD.
    • Функции с переменным числом аргументов: MAX, MIN.

  13. #13
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    ПРЕДОПРЕДЕЛЕННЫЕ ПЕРЕМЕННЫЕ

    Во всех режимах действуют:

    • CENTER = [0, 0, 0] Центр относительно которого выполняются операции ROTATE и SCALE.
    • FREQUENCY = [1, 0, 0] Частота, Шаг частоты, Число шагов для NEC [MHz].
    • GROUND = [0, 0, 0] Тип земли, Диэлектрическая проницаемость, Проводимость.
    • SEGMENT = [0.1, 0.1, 0.1] Длина сегмента [в метрах].
    • RADIUS = [0.001, 0.001, 0.001] Радиус провода [в метрах].
    • PI = [3.14.., 3.14.., 3.14..] Математическая константа.


    В режиме --fmt=MAA также действуют:

    • MAA_DM1DM2SC = [800,80,2] DM1 - if (Seg == -1) Lw / DM2 .. Lw / DM1 от середины к краям //Seg == -2 только с начала //Seg == -3 только с конца; DM2 - if (Seg == 0) Lseg = Lw / DM2; SC - множитель уплотнения (1..64)
    • MAA_ECHM = [2, 0, 0] EC - с какого расстояния от края провода начнется уплотнение 1.001-сразу с середины .. 3.0-без уплотнения; H - Высота [в метрах]; M = {0 .. 6} Материал [Пункт меню в MMANA].
    • MAA_RjX = [0, 0, 0] Сопротивление нагрузки R, jX
    • MAA_AzEl = [0, 0, 0] Азимут, Элевация


    Все эти переменные могут быть в любой момент переопределены. Даже PI.

  14. #14
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    ПЕРЕДАЧА ВНЕШНИХ ПАРАМЕТРОВ

    В ANT-е реализован следующий механизм передачи параметров компилятору:

    Запускаем компилятор где после исходного fname.ant через пробел перечисляем параметры для передачи:

    Код:
    ant.exe fname.ant 1 2 3 ...
    В самом fname.ant в функции ant() делаем заголовок cо списком параметров:
    Код:
    ANT (P1, P2, P3)
    {
    	< [P1, 2 + P2, 3 * P3] [4,5,6] .. > # и далее используем полученные значения
    }
    Также, возможно определение значений по умолчанию.
    Код:
    ANT (F = 15, D = 1)
    {
    	LW = 300 / F # длина волны
    	D ... # - плечо вибратора
    	...
    }
    В этом случае если в списке параметров отсутствуют соответствующие значения, они принимаются по умолчанию. Если значение по умолчанию не задано, оно принимается равным нулю.

    • ant.exe fname.ant 111 222 # F=111; D=222
    • ant.exe fname.ant 333 # F=333; D=1
    • ant.exe fname.ant # F=15; D=1

  15. #15
    QRP Аватар для Redoutable
    Регистрация
    14.08.2019
    Сообщений
    35
    Поблагодарили
    20
    Поблагодарил
    0
    ЧИТАТЬ С НИЗУ-ВВЕРХ

Похожие темы

  1. Ant G5RV
    от RK6CM в разделе Антенномания
    Ответов: 8
    Последнее сообщение: 18.02.2014, 14:54
  2. Ищу описание антенны
    от RA3POY в разделе Антенны КВ
    Ответов: 7
    Последнее сообщение: 12.08.2011, 16:55
  3. Подскажите ссылку или описание антенны
    от UR4IMT в разделе Антенны КВ
    Ответов: 0
    Последнее сообщение: 24.06.2011, 14:47
  4. Описание антенны "морковка"
    от UA1ZGS в разделе Антенны КВ
    Ответов: 4
    Последнее сообщение: 15.12.2004, 15:03
  5. где найти описание траповой антенны на 20, 15, 10м
    от 4Z5LZ / RA9APZ в разделе Антенны КВ
    Ответов: 0
    Последнее сообщение: 18.01.2004, 00:02

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Похоже, что вы используете блокировщик рекламы :(
Форум QRZ.RU существует только за счет рекламы, поэтому мы были бы Вам благодарны если Вы внесете сайт в список исключений!
как отключить
×
Рейтинг@Mail.ru
eXTReMe Tracker


Похоже, что вы используете блокировщик рекламы :(
Форум QRZ.RU существует только за счет рекламы, поэтому мы были бы Вам благодарны если Вы внесете сайт в список исключений!
как отключить
×