Сервис спектрометра.txt 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. Сервис спектрометра
  2. Сервис спектрометра service_spectrometer является стандартным приложением для сбора данных в МР-консоли. Данный сервис реализован через REST API, используя библиотеку Django. Сервис проводит последовательный запуск компонентов и выгрузку данных в соответствии с указанными в http-запросе параметрами. Запрос можно сформировать вручную через командную строку либо через браузер, пользуясь API VIEW по URL localhost:8000/api. Перед началом работы необходимо авторизироваться в админ-панели по URL localhost:8000/admin. Если работаете через curl в запросе надо передавать данные для авторизации.
  3. API предусматривает post/get-методы списка используемых устройств, post-метод запуска сбора с заданными параметрами, get-методы состояния сбора, параметров сбора и собранных данных.
  4. Вызов последних трех методов реализован двумя спусабами:
  5. Отдельные URLPATH в каталоге api (mstate, mparams, mdata)
  6. Вызов через URLPATH api/measurement/<id>/<state/info/data>
  7. Через URLPATH measurement также реализован post-запрос запуска консоли. Для начала сбора пользователь должен передать сервису следующие параметры:
  8. Параметры осциллографа (device model, sample rate, points=[...], channels, ranges=[...], ntriggers, averaging, trigger channel, threshold, direction, automeasure time, enabled)
  9. Значения ranges и direction указаны в ps4000aApi.h. Threshold и automeasure time ограничены 2 байтами.
  10. Параметры синхронизатора (device model, file, port)
  11. Параметры SDR (device model, sample rate, freq, ampl, gain, file)
  12. Параметры ГРУ (device model, ip, file, enabled)|
  13. Другие параметры (engine, infostr)
  14. Шаблон json-тела запроса приведен в директории сервиса.
  15. Сбор и анализ данных
  16. Сбор данных начинается после отправки get-запроса по URL api/measurement. Состояние измерения сохраняется в state-объекте. Получить доступ к состоянию можно по URL api/measurement/<id>/state. В состоянии описан статус и retcode для каждого компонента. Если все компоненты отработали правильно в состоянии выставляется флаг data_ready, после чего разрешается читать записанные данные.
  17. Данные запрашиваются get-запросом по URL api/measurement/<id>/data. По умолочанию присылаются все записи (все каналы по каждому триггеру и повторению для усреднения), закодированные в строку Base64. Можно запросить конкретную запись через inline-параметры запроса: data_num и averaging_num. К примеру: api/measurement/<id>/data/?data_num=1&averaging_num=5.
  18. Первичная обработка данных
  19. В директории сервиса приложен Python-скрипт с классом декодера данных из json-ответа от сервера. Пользователь должен выгрузить ответ сервера в файл после чего загрузить его в объект класса декодера. Класс декодера реализует следующие методы:
  20. Запрос сырых данных getRawData(channel_num, data_num, averaging_num)
  21. Запрос декодированных данных getDataDecoded(channel_num, data_num, averaging_num, points)
  22. Запрос отмасштабированных данных в соответсвии с максимальной амплитудой канала getDataScaled(channel_num, data_num, averaging_num, points, channel_range)
  23. Запрос спектра getDataSpectrum(channel_num, data_num, averaging_num, points, channel_range, zero_fill). Возвращает dictionary вида ():
  24. {
  25. "spectrum": np.array(float) # амплитуды y-ось
  26. "freqs": np.array(float) # частоты x-ось
  27. "phases": np.array(float) # фазы
  28. }
  29. Инструкция по запуску
  30. Запуск производится через bat-файлы приложенные к сервису:
  31. autorun_default_venv - создать виртуальное окружение Python, установить зависимости и запустить сервис
  32. autorun_default - установить зависимости и запустить сервис
  33. autorun_defult_simple - запустить сервер, без установки зависимостей
  34. Остановка сервиса выполняется через autokill.bat.