PDA

Просмотр полной версии : Парсинг JSON средствами ST в Codesys 3.5



Pavel_Makarov
16.01.2019, 00:54
Всем привет!
Подскажите пожалуйста, может есть у кого библиотека или код для парсинга JSON формата в Codesys 3.5?
Знаю, что на официальном сайте codesys продается за 50 евро... но весь семейный бюджет уходит на ремонт и такие траты супруга не позволит :)

Пытаюсь организовать обмен с web сервером с помощью библиотеки CAA_net_base (по-моему так называется), пример которой приводится на сайте owen.ru, но надо как-то данные структурировать

Евгений Кислов
16.01.2019, 06:40
На форуме 3S один из пользователей выкладывал свою разработку:
https://forge.codesys.com/lib/pro-json/home/Home/
(для скачивания - справа кнопка Download package)

Pavel_Makarov
17.01.2019, 00:45
Евгений, огромное спасибо!!!

aRRma99
19.09.2019, 15:29
Так она вроде даже не устанавливается..... Есть ли еще варианты?

Евгений Кислов
19.09.2019, 16:39
А как вы ее пытаетесь установить?
Там по ссылке package - так что надо Инструменты - Менеджер пакетов.

Павел1
04.02.2021, 15:34
Всем привет! Есть пример работы с библиотекой IIOT LIBRARIES SL 1.1.0.0? А именно с Json. Я ее скачал с официального сайта. Нужна ли лицензия? В кодесис установилась ни чего вроде не просит. А библиотека которая по ссылке просит лицензию.

capzap
04.02.2021, 15:40
Всем привет! Есть пример работы с библиотекой IIOT LIBRARIES SL 1.1.0.0? А именно с Json. Я ее скачал с официального сайта. Нужна ли лицензия? В кодесис установилась ни чего вроде не просит. А библиотека которая по ссылке просит лицензию.

https://owen.ru/forum/showthread.php?t=33976&p=343228&viewfull=1#post343228 11 пункт, парсинг json идет с прошивкой

IgorKIV
04.12.2022, 23:13
а можно описать как создать http get запрос и разобрать ответ
аналогично с post.
а то ничего не понятно

Евгений Кислов
05.12.2022, 06:20
а можно описать как создать http get запрос и разобрать ответ
аналогично с post.
а то ничего не понятно

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

IgorKIV
05.12.2022, 11:13
plk 210 03
задача с моего сайта в сети интернет получить данные по запросу.
нужно отправить запрос http get и разобрать ответ
отправить запрос пост. делать это раз в 10 секунд.

Евгений Кислов
05.12.2022, 12:17
plk 210 03
задача с моего сайта в сети интернет получить данные по запросу.
нужно отправить запрос http get и разобрать ответ
отправить запрос пост. делать это раз в 10 секунд.

Посмотрите видео - пример из него близок к вашему вопросу:
https://youtu.be/xFvN0BryJFk

В интернете есть много примеров, как с помощью curl отправить HTTP-запрос.

IgorKIV
06.12.2022, 18:31
спасибо за направление :)

IgorKIV
07.12.2022, 23:28
с запросом справился, даже данные получил, но быстродействие работы curl через SysExec трудно назвать разумным.
при выполнении основной задачи простейший запрос выполняется около 30 секунд. это долго.

скачал и освоился с HTTP Client, работает быстро но не работает по https или я не понял что надо сделать.
IIoT пока не могу разобраться как сделать POST запрос с разбором ответа.
вдруг есть такие же видео по упомянутым библиотекам и Вы о них знаете?

Евгений Кислов
08.12.2022, 06:22
скачал и освоился с HTTP Client, работает быстро но не работает по https или я не понял что надо сделать.

Эта библиотека не поддерживает HTTPS.


IIoT пока не могу разобраться как сделать POST запрос с разбором ответа.

Эта библиотека не будет работать на наших контроллерах, так как она требует приобретение и активацию лицензии.
Наши контроллеры не поддерживают активацию лицензий.


при выполнении основной задачи простейший запрос выполняется около 30 секунд. это долго.

Команда, вызываемая через CmpSysExec, выполняется не в потоке реального времени, чтобы не блокировать приложение CODESYS, но 30 секунд звучит не очень реалистично.
Например, здесь видно, что выполнение POST запроса занимает около 3 секунд:
https://youtu.be/T6XfuDQIOk4?t=426

Возможно, наблюдаемые вами задержки связаны с особенностями вашего проекта или сервера.
Сделайте простой проект, в котором будет только вызов блока из CmpSysExec, и посмотрите, сколько времени зайтем выполнение запроса в этом случае.

IgorKIV
08.12.2022, 11:16
Эта библиотека не поддерживает HTTPS.



Эта библиотека не будет работать на наших контроллерах, так как она требует приобретение и активацию лицензии.
Наши контроллеры не поддерживают активацию лицензий.



Команда, вызываемая через CmpSysExec, выполняется не в потоке реального времени, чтобы не блокировать приложение CODESYS, но 30 секунд звучит не очень реалистично.
Например, здесь видно, что выполнение POST запроса занимает около 3 секунд:
https://youtu.be/T6XfuDQIOk4?t=426

Возможно, наблюдаемые вами задержки связаны с особенностями вашего проекта или сервера.
Сделайте простой проект, в котором будет только вызов блока из CmpSysExec, и посмотрите, сколько времени зайтем выполнение запроса в этом случае.

останавливаю проект, захожу в конфигруатор - система - терминал пишу запрос https://polkomoda.ru/local/api/crm/?api=skycart&type=get&user=18359 - ответ через 1-2 секунды
запускаю проект - пишу то же самое в терминале - 23-30 секунд исполнение в терминале

как сделать лучше?
30 секунд совсем долго.

iiot брал от сюда пишет что для 210 02 тестировано
https://github.com/Allexd1992/iiot_tools/tree/main/example_codesys3
https://github.com/Allexd1992/iiot_tools
уже из совершенно странных источников пытаешься что то получить лишь бы заработало - задача то весьма обычная и простая. получить данные с веб страницы а не получается...
можете что то сказать про библиотеку iiot_tools и стоит ли пытаться в ней разобраться или искать дальше как

Евгений Кислов
08.12.2022, 11:35
запускаю проект

Что это за проект? Это пустой проект, с одним вызовом блока из CmpSysExec?
Если да - обеспечьте доступ по AeroAdmin, пожалуйста - посмотрим, что у вас происходит.


можете что то сказать про библиотеку iiot_tools

На мой взгляд - это библиотека, созданная на базе открытых библиотек других людей с присвоенным авторством, и сделанная закрытой.
Ее работоспособность я прокомментировать не могу.

ВладОвен
08.11.2023, 11:14
На форуме 3S один из пользователей выкладывал свою разработку:
https://forge.codesys.com/lib/pro-json/home/Home/
(для скачивания - справа кнопка Download package)

Здравствуйте.
А подскажите по этой библиотеке.
Я сохраняю три разных переменных в строке Json. Получается строка:


{"stJson":{"var1":25,"var2":1025,"var3":-3.14}}

Потом делаю обратное преобразование из строки, но получаю переменные другого типа. См. рисунок:

71432

Что я делаю не так? И как получить нужные типы данных (такие, какие были при формировании строки)?

Евгений Кислов
08.11.2023, 11:26
Добрый день.

Ответ содержится в примерах использования библиотеки (интегрированных в библиотеку).



bVar2 := TO_BYTE(stJson.var1.Integer);
wVar2 := TO_WORD(stJson.var2.Integer);
rVar2 := TO_REAL(stJson.var3.AsString);


Не забудьте объявить переменные (bVar2 и т.д.).

ВладОвен
08.11.2023, 14:35
В общем библиотека Json более-менее работоспособная. С открытым исходным кодом. Лицензия MIT ("она находится в Интернете, поэтому люди могут делать с ней все, что захотят").

Заворачивает в JSON все виды данных.
А вот обратно не разворачивает данные bool, array и array_of_struct. Ну или я просто чего-то не понимаю.
Важно: имена структуры для fbStruct_to_json (сериализация) и структуры для fbJson_to_struct (десериализация) должны быть одинаковыми.

ВладОвен
28.11.2023, 10:18
Здравствуйте.
Вопрос на засыпку:
Чем обмен через OPCua лучше обмена через TCP сокеты? Ведь можно похожим образом отправлять/получать переменные (заворачивая их в Json).
Возможно, тем, что меньше действий в программе надо делать и меньше разбираться в мелочах и деталях?
А как насчет шифрования?

МихаилГл
28.11.2023, 10:32
Здравствуйте.
Вопрос на засыпку:
Чем обмен через OPCua лучше обмена через TCP сокеты? Ведь можно похожим образом отправлять/получать переменные (заворачивая их в Json).
Возможно, тем, что меньше действий в программе надо делать и меньше разбираться в мелочах и деталях?
А как насчет шифрования?

Потому что в ОРС UA уже реализованы всё механизмы стандарта на основе подписок. Публикуете доступные переменные и забираете подписчиками. И шифрование там есть уже. Но я им не пользовался.
А для сокетов вам придётся всё писать с нуля...