RFC7049

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
olib35
beginner
beginner
Сообщения: 17
Зарегистрирован: 07 май 2013, 23:27
Версия LabVIEW: 2015
Откуда: Bielefeld
Контактная информация:

RFC7049

Сообщение olib35 »

Всем добрый день (вечер, утро)! Кто-нибудь уже пытался реализовать в LV кодирование-декодирование по протоколу RFC 7049 (CBOR)? Очень интересная шука. В него можно упаковать практически любой тип данных. А вот в LV я имею с его достоинствами одни проблемы. Например в массиве могут содержатся как текстовые так и цифровые значения (с плавающей точкой и без). Все получается как-то очень громоздко.
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: RFC7049

Сообщение Kosist »

olib35 писал(а): А вот в LV я имею с его достоинствами одни проблемы. Например в массиве могут содержатся как текстовые так и цифровые значения (с плавающей точкой и без). Все получается как-то очень громоздко.
А вот это непонятно - что Вы имеете в виду? В :labview: как раз в массиве нельзя иметь строки и цифровые значения...
А по поводу имплементации - может можно создать dll из С-шного кода? На С алгоритм реализован, http://cbor.io/impls.html, теоретически можно сделать обертку для :labview: .
Мы делили апельсин - много наших полегло...
olib35
beginner
beginner
Сообщения: 17
Зарегистрирован: 07 май 2013, 23:27
Версия LabVIEW: 2015
Откуда: Bielefeld
Контактная информация:

Re: RFC7049

Сообщение olib35 »

В том-то и дело, что нельзя! А в CBOR это допустимо. В LV надо все типы приводить к одному. Я пока выбрал "variant", но я думаю надо перевести в текст, для лучшего отображения. Есть уже готовая dll на C#, но у меня начинала крыша дымить потихоньку, пока я разбирался с функциями
Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1236
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Версия LabVIEW: 2013-2020
Благодарил (а): 23 раза
Поблагодарили: 30 раз
Контактная информация:

Re: RFC7049

Сообщение Kosist »

olib35 писал(а):В том-то и дело, что нельзя! А в CBOR это допустимо. В LV надо все типы приводить к одному. Я пока выбрал "variant", но я думаю надо перевести в текст, для лучшего отображения. Есть уже готовая dll на C#, но у меня начинала крыша дымить потихоньку, пока я разбирался с функциями
"Мухи отдельно, котлеты отдельно" - Вы путаете две категории. :labview: - язык программирования, CBOR - формат данных. В большинстве (а может и во всех) языках программирования массив - группа данных одного типа. Другое дело - это структуры, кластеры, хеш-массивы. Но здесь это не тот случай...
Мы делили апельсин - много наших полегло...
olib35
beginner
beginner
Сообщения: 17
Зарегистрирован: 07 май 2013, 23:27
Версия LabVIEW: 2015
Откуда: Bielefeld
Контактная информация:

Re: RFC7049

Сообщение olib35 »

Уважаемый Kosist, спасибо за Ваш интерес к теме. Я прошу прощения, что не внятно изъясняюсь, хотелось написать не много и уместить в написанном больше. По отношению к массивам хочу сказать, что у меня возникают трудности создание компактного кода при обработке массива кодированного в CBOR и переводе его под LV во что-то удобоваримое. Получается монстр. Вот dll на C#, может ткнете носом, последовательность функций для декодирования массива, а то я уже оставил все надежды на использование этой dll? dll взята с sourceforge, источники на Github от PeterO. https://github.com/peteroupc/CBOR
Вложения

[Расширение dll было запрещено, вложение больше недоступно.]

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: RFC7049

Сообщение dadreamer »

olib35, с чем конкретно у вас проблемы? По ссылке, что вы привели, есть примеры:
Creating a map and converting that map to CBOR bytes and a JSON string:

Код: Выделить всё

// The following creates a CBOR map and adds
// several kinds of objects to it
var cbor = CBORObject.NewMap()
   .Add("item", "any string")
   .Add("number", 42)
   .Add("map", CBORObject.NewMap().Add("number", 42))
   .Add("array", CBORObject.NewArray().Add(999f).Add("xyz"))
   .Add("bytes", new byte[] { 0, 1, 2 });
// The following converts the map to CBOR
byte[] bytes = cbor.EncodeToBytes();
// The following converts the map to JSON
string json = cbor.ToJSONString();
Console.WriteLine(json);
Writing multiple objects to a file, including arbitrary objects:

Код: Выделить всё

// C#
// This example writes different kinds of objects in CBOR
// format to the same file.
using (var stream = new FileStream("object.cbor", FileMode.Create)) {
   CBORObject.Write(true, stream);
   CBORObject.Write(422.5, stream);
   CBORObject.Write("some string", stream);
   CBORObject.Write(CBORObject.Undefined, stream);
   CBORObject.NewArray().Add(42).WriteTo(stream);
}
Там же и ссылка на доки по API: https://peteroupc.github.io/CBOR/docs/
Выложите свои наработки, если возможно.
olib35
beginner
beginner
Сообщения: 17
Зарегистрирован: 07 май 2013, 23:27
Версия LabVIEW: 2015
Откуда: Bielefeld
Контактная информация:

Re: RFC7049

Сообщение olib35 »

Вот. Пока еще не все типы обработаны, сделал проброс в фреймах. Проблема у меня - если массив в массиве. Как можно это компактнее организовать. LabView 2014
Вложения
CBOR_temp.zip
(55.82 КБ) 165 скачиваний
olib35
beginner
beginner
Сообщения: 17
Зарегистрирован: 07 май 2013, 23:27
Версия LabVIEW: 2015
Откуда: Bielefeld
Контактная информация:

Re: RFC7049

Сообщение olib35 »

Вот ссылка для симуляции кода http://cbor.me/?
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: RFC7049

Сообщение Blackman »

Notation [1, [2, 3]]
Bytes in hex: 82 01 82 02 03

82 - массив из 2 элементов
Элемент 1: 01 - целое положительное число U8
Элемент 2: 82 - массив из 2 элементов
Элемент 21: 02 - целое положительное число U8
Элемент 22: 03 - целое положительное число U8

Что здесь такого?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: RFC7049

Сообщение dadreamer »

olib35 писал(а):Вот. Пока еще не все типы обработаны, сделал проброс в фреймах. Проблема у меня - если массив в массиве. Как можно это компактнее организовать. LabView 2014
Я так понимаю, вы решили свои "велосипеды" реализовать. А библиотеку не будете пытаться подключить? По-моему, там ничего сложного. Вот первый пример (частично, мне просто лень все эти типы переводить, там всё по аналогии):
Untitled 1.vi
lv2012
(7.41 КБ) 177 скачиваний
Для "превращения" типов :labview: в типы System.Object использован :vi: , лежащий в C:\Program Files (x86)\National Instruments\LabVIEW 2016\vi.lib\Platform\dotnet.llb\To .NET Object.vi. Есть и другой вариант, см. How Can I Transform a LabVIEW Object Into a .NET Object in LabVIEW?
olib35
beginner
beginner
Сообщения: 17
Зарегистрирован: 07 май 2013, 23:27
Версия LabVIEW: 2015
Откуда: Bielefeld
Контактная информация:

Re: RFC7049

Сообщение olib35 »

Большое спасибо за помощь. У меня пробелы (провалы) в текстовых языках прогроммирования. :crazy:
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

Re: RFC7049

Сообщение dadreamer »

olib35 писал(а):Большое спасибо за помощь. У меня пробелы (провалы) в текстовых языках прогроммирования. :crazy:
Ну, строки кода вы же можете прочитать. Если, конечно, с английским более-менее. :wink: Свойства и методы везде называются одинаково, это одно из важных свойств любых библиотек. Остаётся только перегонять в :labview: поблочно каждый оператор.
Ответить

Вернуться в «Коммуникация с приборами»