RFC7049

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы

RFC7049

Postby olib35 on 03 Nov 2016, 22:22

Всем добрый день (вечер, утро)! Кто-нибудь уже пытался реализовать в LV кодирование-декодирование по протоколу RFC 7049 (CBOR)? Очень интересная шука. В него можно упаковать практически любой тип данных. А вот в LV я имею с его достоинствами одни проблемы. Например в массиве могут содержатся как текстовые так и цифровые значения (с плавающей точкой и без). Все получается как-то очень громоздко.
olib35
beginner
beginner
 
Posts: 17
Joined: 07 May 2013, 23:27
Location: Bielefeld
LabVIEW Version: 2015
Karma: 0

Re: RFC7049

Postby Kosist on 03 Nov 2016, 22:46

olib35 wrote: А вот в LV я имею с его достоинствами одни проблемы. Например в массиве могут содержатся как текстовые так и цифровые значения (с плавающей точкой и без). Все получается как-то очень громоздко.

А вот это непонятно - что Вы имеете в виду? В :labview: как раз в массиве нельзя иметь строки и цифровые значения...
А по поводу имплементации - может можно создать dll из С-шного кода? На С алгоритм реализован, http://cbor.io/impls.html, теоретически можно сделать обертку для :labview: .
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 857
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 245
CLAD I/O VIP students

Re: RFC7049

Postby olib35 on 03 Nov 2016, 23:00

В том-то и дело, что нельзя! А в CBOR это допустимо. В LV надо все типы приводить к одному. Я пока выбрал "variant", но я думаю надо перевести в текст, для лучшего отображения. Есть уже готовая dll на C#, но у меня начинала крыша дымить потихоньку, пока я разбирался с функциями
olib35
beginner
beginner
 
Posts: 17
Joined: 07 May 2013, 23:27
Location: Bielefeld
LabVIEW Version: 2015
Karma: 0

Re: RFC7049

Postby Kosist on 04 Nov 2016, 00:01

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

"Мухи отдельно, котлеты отдельно" - Вы путаете две категории. :labview: - язык программирования, CBOR - формат данных. В большинстве (а может и во всех) языках программирования массив - группа данных одного типа. Другое дело - это структуры, кластеры, хеш-массивы. Но здесь это не тот случай...
Мы делили апельсин - много наших полегло...
User avatar
Kosist
leader
leader
 
Posts: 857
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 245
CLAD I/O VIP students

Re: RFC7049

Postby olib35 on 04 Nov 2016, 09:27

Уважаемый Kosist, спасибо за Ваш интерес к теме. Я прошу прощения, что не внятно изъясняюсь, хотелось написать не много и уместить в написанном больше. По отношению к массивам хочу сказать, что у меня возникают трудности создание компактного кода при обработке массива кодированного в CBOR и переводе его под LV во что-то удобоваримое. Получается монстр. Вот dll на C#, может ткнете носом, последовательность функций для декодирования массива, а то я уже оставил все надежды на использование этой dll? dll взята с sourceforge, источники на Github от PeterO. https://github.com/peteroupc/CBOR
Attachments
CBOR.dll
(265.5 KiB) Downloaded 64 times
olib35
beginner
beginner
 
Posts: 17
Joined: 07 May 2013, 23:27
Location: Bielefeld
LabVIEW Version: 2015
Karma: 0

Re: RFC7049

Postby dadreamer on 04 Nov 2016, 10:31

olib35, с чем конкретно у вас проблемы? По ссылке, что вы привели, есть примеры:
Creating a map and converting that map to CBOR bytes and a JSON string:
Code: Select all
// 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:
Code: Select all
// 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/
Выложите свои наработки, если возможно.
User avatar
dadreamer
professor
professor
 
Posts: 3099
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 781
I/O VIP vision internet

Re: RFC7049

Postby olib35 on 04 Nov 2016, 13:25

Вот. Пока еще не все типы обработаны, сделал проброс в фреймах. Проблема у меня - если массив в массиве. Как можно это компактнее организовать. LabView 2014
Attachments
CBOR_temp.zip
(55.82 KiB) Downloaded 72 times
olib35
beginner
beginner
 
Posts: 17
Joined: 07 May 2013, 23:27
Location: Bielefeld
LabVIEW Version: 2015
Karma: 0

Re: RFC7049

Postby olib35 on 04 Nov 2016, 13:38

Вот ссылка для симуляции кода http://cbor.me/?
olib35
beginner
beginner
 
Posts: 17
Joined: 07 May 2013, 23:27
Location: Bielefeld
LabVIEW Version: 2015
Karma: 0

Re: RFC7049

Postby Blackman on 04 Nov 2016, 13:55

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

Что здесь такого?
Blackman
leader
leader
 
Posts: 759
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 212

Re: RFC7049

Postby dadreamer on 04 Nov 2016, 15:16

olib35 wrote:Вот. Пока еще не все типы обработаны, сделал проброс в фреймах. Проблема у меня - если массив в массиве. Как можно это компактнее организовать. LabView 2014

Я так понимаю, вы решили свои "велосипеды" реализовать. А библиотеку не будете пытаться подключить? По-моему, там ничего сложного. Вот первый пример (частично, мне просто лень все эти типы переводить, там всё по аналогии):
Untitled 1.vi
lv2012
(7.41 KiB) Downloaded 74 times

Для "превращения" типов :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?
User avatar
dadreamer
professor
professor
 
Posts: 3099
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 781
I/O VIP vision internet

Re: RFC7049

Postby olib35 on 04 Nov 2016, 15:28

Большое спасибо за помощь. У меня пробелы (провалы) в текстовых языках прогроммирования. :crazy:
olib35
beginner
beginner
 
Posts: 17
Joined: 07 May 2013, 23:27
Location: Bielefeld
LabVIEW Version: 2015
Karma: 0

Re: RFC7049

Postby dadreamer on 04 Nov 2016, 15:35

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

Ну, строки кода вы же можете прочитать. Если, конечно, с английским более-менее. :wink: Свойства и методы везде называются одинаково, это одно из важных свойств любых библиотек. Остаётся только перегонять в :labview: поблочно каждый оператор.
User avatar
dadreamer
professor
professor
 
Posts: 3099
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 781
I/O VIP vision internet


Return to Коммуникация с приборами

Who is online

Users browsing this forum: No registered users and 5 guests

cron