2.2.2. Сервис pico-tcp
Vinokurov Viacheslav Vinokurov upravil tuto stránku před 3 dny

Сервис pico-tcp

Данный сервис является альтернативной утилитой для цифрового осциллографа PS400A, осуществляющей сбор данных. Данный сервис использует TCP-протокол для связи с пользовательским клиентом. Папка с кодом: тык

Принцип работы

Сервис работает в фоновом режиме и принимает клиентские соедениния с локальной машины с сетевого порта 5003. Протокол управления осциллографа подразумевает сообщения вида:

1.1. Магическое слово (1-й байт сообщения): 0xAA

Смысл 2-го байта зависит от ситуации:

2.1. Команда (2-й байт сообщения): 0x00 - 0x0E

2.2. Ответ сервера: 0xC0 - 0xCE (в ответ на успешное завершение сответствующей команды)

2.3. Флаг ошибки: 0xFF (если возникла ошибка на сервере)

В случае ошибки 3-й байт указывает на место, где та произошла, и четыре следующих байта содержат код ошибки. Коды ошибок содержатся в файле PicoStatus.h. В иных случаях, начиная с 3-го байта идут параметры команды (сообщение от клиента) или запрашиваемые значения величин (сообщение от сервера).

Список команд

  1. 0x01 - pico_open(): открыть устройство для работы
  2. 0x02 - pico_xml_config(uint32_t size, char filename[size]): считать параметры из файла XML
  3. 0x03 - pico_close(): закрыть устройство
  4. 0x04 - pico_get_current_params(): возвращает клиенту текушие значения количества точек, моментов измерений, частоты дискретизации и числа каналов
  5. 0x05 - pico_probe(): пробное сообщение на сервер
  6. 0x06 - pico_set_points(uint32_t size, uint32_t points[size]): установить значения количества точек
  7. 0x07 - pico_set_sample_rate(uint32_t sample_rate): установить значение частоты дискретизации
  8. 0x08 - pico_set_times(uint32_t size, uint32_t times[size]): установить значения моментов измерения
  9. 0x09 - pico_configure_channels(uint32_t channels, uint8_t trig_channel, int32_t direction, uint16_t threshold, int16_t auto_ms): конфигурация каналов осциллографа (число каналов, триггер, направление триггера, пороговое напряжение, время автотриггера в мс)
  10. 0x0A - pico_begin_measurement(): начать измерение
  11. 0x0C - pico_set_params(uint32_t size, uint32_t points[size], uint32_t times[size], uint32_t sample_rate, uint32_t number_channels): установить параметры (кол-во точек и моменты отсчета, частоту дискретизации и число каналов)
  12. 0x0D - pico_exit(): закрыть устройство и закончить сетевой сеанс
  13. 0x0E - pico_stop(): остановить измерение

Пример взаимодействия через пользовательский клиент

Допустим пользователь хочет открыть устройство для работы:

cmd$ open

Сервер открывает устройство и при успехе клиент выводит:

Pico device openned

Если же на сервере возникла ошибка, клиент парсит ее из тела ответа и выводит:

Error at ADC: 0xFF
Error code: PICO_NOT_FOUND

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

set_points 2 [2000, 24000]

Дальнейшее общение сервера и клиента аналогично предыдущим примерам