Извлечение пользовательского формата данных в полезную нагрузку TCP с использованием golang - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть промышленный датчик, который подключен к Интерфейсному модулю , который предоставляет информацию конечному пользователю через telnet.

Конфигурация Telnet

Порт: 10001

Формат данных: Little-Endian

Данные Полезная нагрузка

Preamble - 32 bit
Article number - 32 bit
Serial number - 32 bit
Channels - 64 bit
Status - 32 bit
Frame number M / - 16 bit/ 16 bit
bytes per frame
Measuring value counter - 32 bit
Measuring value frame 1 - N * 32 bit
..
..

Это должно быть доступно после заголовков TCP (если я правильно понимаю), т.е.Полезная нагрузка.

Я пытаюсь изучить golang на более практичных примерах и думаю о следующем направлении:

  1. Создание сервера TCP для прослушивания IP-адреса и порта интерфейсного модуля датчика.число
  2. Извлеките полезную нагрузку и просто распечатайте ее в виде отдельных параметров, таких как preamble, article number и т. д. в качестве задания для начинающих

Я просмотрел несколько постов в блоге оСоздания TCP-сервера / клиента, но они только адресуют string в своей полезной нагрузке.Как я могу извлечь такую ​​ байтовую ориентированную пользовательскую полезную нагрузку, как упомянуто выше?

PS

Я могу понять, что это может быть достигнуто в python, вероятно, через struct.pack и struct.unpack следовательно, следует понимать некоторую корреляцию как понимание

1 Ответ

0 голосов
/ 22 ноября 2018

В разделе 6.2 вашего связанного pdf-документа выше есть таблица, в которой перечислены данные, которые вы, похоже, перечислили в вопросе

Я бы преобразовал эту таблицу в структуру, а затем прочитал в нее с помощью кодировки / двоичного кода.модуль.См. https://golang.org/pkg/encoding/binary/#example_Read для соответствующего примера

"Все измеренные значения передаются как Int32, Uint32 или Float в зависимости от подключенного датчика", вероятно, проще всего получить их как uint32, а затем преобразовать их позже

...