from anechoic_utils.scanner.TRIM import TRIMScanner
scanner = TRIMScanner(ip="172.16.22.244", port=9000)
# подключение к сканеру
scanner.connect()
Существует эмулятор сканера, на котором можно проводить тесты. Его необходимо запустить, а затем подключиться к нему, как к реальному сканеру
from anechoic_utils.scanner.TRIM import TRIMScanner, TRIM_emulator
# запуск эмулятора
TRIM_emulator.run(blocking=False, ip="127.0.0.1", port=9000, motion_time=5)
scanner = TRIMScanner(ip="127.0.0.1", port=9000)
# подключение к сканеру
scanner.connect()
Касательно TRIM:
Доступные настройки сканера: позиция, скорость движения, ускорение, замедление, статус двигателей (вкл. или выкл.), тип движения, специальный тип движения. Все настройки применяются для каждой оси отдельно.
Чтобы применить настройки по умолчанию, необходимо написать
from anechoic_utils.scanner.TRIM import DEFAULT_SETTINGS
scanner.set_settings(**DEFAULT_SETTINGS)
Помимо DEFAULT_SETTINGS
есть PTP_MODE_SETTINGS
и JOG_MODE_SETTINGS
.
Первые настройки отвечают за движение от точки к точке, то есть за обычное движение.
Вторые - за бесконечное движение, направление которого соответствует знаку скорости оси.
Касательно всех сканеров:
Есть два способа выставить определенные настройки.
Первый способ заключается в создании экземпляра класса BaseAxes
и использовании его для настроек.
Пример:
from anechoic_utils.scanner import BaseAxes
# скорость вдоль оси x 100 мм/с,
# скорость вдоль оси z 120 мм/с
velocity = BaseAxes(x=100, z=120)
# применить эти настройки.
scanner.set_settings(velocity=velocity)
Скорости вдоль осей y и w остались прежними.
Для наглядности можно использовать классы Position
, Velocity
, Acceleration
, Deceleration
, которые являются по сути тем же классом BaseAxes
.
Второй способ настройки заключается в выставлении настроек по осям отдельно.
from anechoic_utils.scanner import BaseAxes
# скорость вдоль оси x 100 мм/с,
velocity_x = 100
# скорость вдоль оси z 120 мм/с
velocity_y = 120
# применить эти настройки.
scanner.set_settings(velocity_x=velocity_x, velocity_z=velocity_z)
Сканер может вернуть его текущую позицию, скорость, ускорение и замедление.
position = scanner.position()
velocity = scanner.velocity()
acceleration = scanner.acceleration()
deceleration = scanner.deceleration()
Команды, не требующие аргументов:
stop
останавливает сканер с замедлениемabort
останавливает сканер без замедленияhome
направляет сканер на парковку
Пример:
scanner.home()
Команда, требующая аргумент: goto
.
Эта команда принимает BaseAxes
или Position
и отправляет в эту точку сканер.
from anechoic_utils.scanner import Position
# новая позиция с координатами 1200 мм по x и 500 мм по y
new_position = Position(x=1200, y=500)
# отправить сканер в новую позицию
scanner.goto(new_position)
Позиции можно складывать
from anechoic_utils.scanner import Position
# текущая позиция сканера
position = scanner.position()
# новая позиция, сдвинутая относительно текущей на 100 мм по x и 200 мм по y
new_position = position + Position(x=100, y=200)
scanner.goto(new_position)
Для начала работы с анализатором изначально нужно создать эксземпляр соответствующего класса и установить соединение с анализатором.
from anechoic_utils.analyzator.socket_analyzer import SocketAnalyzer
analyzer = SocketAnalyzer(ip="192.168.137.119", port=1024)
analyzer.connect()
Далее можно задать настройки анализатора, такие как
sweep_type
- scale возвращаемых значенийfreq_start
- начальная частота в Гцfreq_finish
- конечная частота в Гцfreq_num
- количество точек по частотеbandwidth=3000
- полоса в Гцaver_fact
,smooth_aper
,power
- остальные параметры, соответствующие параметрам анализатора
analyzer.set_settings(
sweep_type='LIN',
freq_start=1_000_000_000, freq_stop=3_000_000_000, freq_num=200,
bandwidth=3000, aver_fact=5, smooth_aper=20, power=5
)
После того, как заданы настройки анализатора можно снять данные с анализатора и использовать их в дальнейшем коде
results = analyzer.get_scattering_parameters(
['S22', 'S12', 'S12', 'S12', 'S12', 'S12', 'S12', 'S12', 'S12', 'S12']
)
print(results['f'], results['S22'])