У меня есть программа в labview, которая отправляет пакеты UDP и с помощью программы php я получаю эти пакеты. Так что программа labview — отправитель, а программа php — получатель.
В программе labview массив типа float приводится к строке с использованием функционального блока приведения типа и отправляется в виде пакетов UDP. При получении этих пакетов с использованием php, я получаю некоторые данные, которые не в читаемом формате.
Я попытался преобразовать строковый массив в массив float, используя array_map (‘floatval’, $ array). Но все же значения не приходят в читаемом формате.
Пожалуйста, помогите мне решить эту проблему.
Помощь LabVIEW для Тип ролях указывает на документ сведенные данные который упоминает, что представление является старшим байтом (самый старший байт сначала). Запись на Как LabVIEW хранит данные в памяти показывает фактическое представление числа с плавающей запятой одинарной точности (SGL
):
Теперь, когда вы знаете, что посылает LabVIEW, ваш вопрос заключается в том, как декодировать это в PHP — если вы не можете решить это самостоятельно, я предлагаю задать новый вопрос.
Если вы можете изменить код LabVIEW, вы можете изменить формат, в котором отправляются данные, чтобы облегчить декодирование на другом конце. Возможные варианты могут включать:
DBL
— используя преобразование ‘bullet’ из числовой палитры — перед сглаживанием в строку, а затем переупорядочиваем байты строки в порядке с прямым порядком байтов в конце LabVIEW. Из комментария Тон Пломп, это может быть правильным для вашего текущего кода PHP.U32
или же I32
) до сплющивания; опять же, это может быть проще для декодирования на другом конце.Обратите внимание, что, хотя формат данных, который вы получаете от Type Cast и / или Flatten к String, задокументирован и исторически был стабильным, я не думаю, что абсолютно гарантировано не переключаться между версиями LabVIEW.
Также нечитаемый раздел данных может быть информацией заголовка, добавленной функцией UDP. Вы можете проанализировать эти данные и выбросить.
Еще одна вещь, которую стоит попробовать — это прочитать данные UDP Rx в Labview и сравнить с данными Tx, чтобы попытаться определить, что происходит.