PDA

Просмотр полной версии : Утилита модификации экспорта json в OwenCloud - переименование параметров



FPavel
08.06.2025, 15:09
Доброго дня

При экспорте сетевых Slave переменных в файл json для импорта в облаке OwenCloud экспорт несколько странный - в описании параметра стоит символьное имя переменной, а в обозначении параметра маловразумительная комбинация буквы "P" и Modbus-адреса.

В то же время при экспорте сетевых переменных в cvs файл доступны как настоящее описание переменной (комментарии), так и символьное имя переменной.

По хорошему, когда переменные описываются в облаке руками - заполнение ограничивается комментарием и символьным именем.

Может быть кто-нибудь тоже не в восторге от штатного импорта в облако и он сделал утилиту модификации json с заполнением всего двух полей из файла экспорта cvs?
Поделитесь, пожалуйста.

FPavel
09.06.2025, 20:15
Не может быть, чтобы всех устраивает такое положение дел...

Покажу примеры

вот результат экспорта из OwenLogic с последующим импортом в OwenCloud
84232

а это результат набора переменных в OwenCloud руками
84233

И в дальнейшем - при обработке в облаке программой, событиями - удобнее сверяться с символами, уже знакомыми из собственной программы в ПР, чем странными безликими, без возможности редактирования этих полей названиями P16365, P16445 и прочим

Неужели я одинок в странных желаниях?

melky
09.06.2025, 20:24
А типа варианта сделать импорт из csv в облаке нет?
з.ы. ну нет у меня облака, вернее есть, но так и не прикрутил ничего.
Я так понимаю, экспорт в json из Овен Лоджик это через какое-то расширение сделан для тех ПР, которые с сетевым портом, или для любых?
Просто для ПР200 у себя вижу только в csv

melky
09.06.2025, 20:25
И переименовать в ваши имена в облаке нет возможности?

FPavel
09.06.2025, 20:33
Да, json формируется расширением, импорт в облако только из json.
cvs - для чего-то другого (я скриптом переставляю поля, меняю кодировку и получаю импорт для панели Weintek - 200-300 тегов описываю в Weintek за 30 секунд).

Я бы принял и такой импорт, если бы оставалась возможность редактирования в облаке - быстро импортировать, продемонстрировать работоспособность и постепенно переработать теги в спокойной обстановке. Но нет такой возможности - менять можно только описание, а этого мало. Вот только что перепроверил.

melky
09.06.2025, 20:38
а выложите в архиве json и csv от одного и того же прибора.
Видимо писали все это разные люди, особенно любители json в Овене :)

FPavel
09.06.2025, 20:38
Скрипт я сделаю - там несложно - замена подстроки в строке по таблице замен с предварительным выделением диапазона строк, относящихся к одному тегу.
Но, вдруг у кого-то уже есть готовый на распространённом языке (bat с sed/awk/gred, или python, или ps1).

Вероятно, сделаю на FreePascal.

melky
09.06.2025, 20:42
Ну раз никто не ответил, видимо придется самим.

FPavel
09.06.2025, 20:47
а выложите в архиве json и csv от одного и того же прибора.
Видимо писали все это разные люди, особенно любители json в Овене :)

Прикладываю.

melky
09.06.2025, 20:59
json там вполне сериализуется. Кроме поля code что-то требуется менять? code точно можно менять, насколько помню, только проверка нужна, чтобы оно не повторялось.

FPavel
09.06.2025, 21:07
Предполагаю менять два поля - "code" и "name".

А json можно открыть в Exel или LibOo? Я бы открыл и json и cvs и скопировал столбцами, потом сохранил json.

melky
09.06.2025, 21:10
json это просто текстовый файл по сути, с определенным синтаксисом. тут либо действительно скриптами но надо же из двух файлов делать. так как в json нет того, что есть в csv/

я бы загружал json файл через сереализацию, потом csv для замены нужных полей и сохранял бы новый json файл.
на C# это не трудно сделать в принципе. Учитывая, что Owen Logic написан на NET6 то доставлять ничего не требуется, оно там и так все стоит.

melky
10.06.2025, 09:19
"code": "rVar1",
"read_function": "3",
"write_function": "16",
"address": "4000",
"device_format": "float",
"register_least_byte_first": false,
"least_register_first": true,
"measure": "none",
"precision": 0,
"multiplier": "1.0000000",
"bitmask_enabled": false,
"bitmask_value": null,
"name": {
"ru-RU": "Давление в трубе",
"en-US": "rVar1"
},
"in_operative": true,
"in_configuration": false,
"in_manageable": false,
"in_parameters": true,
"in_tables": false,
"in_graphs": false,
"in_events": false,
"category": "7b6a7ee2-a4ab-40d9-a343-7aafae3ac237"

Я правильно понимаю, что этого достаточно? потому что я там и другое увидел, например в csv на переменной nVar1 указано что она BitMask, а в json у нее "bitmask_enabled": false, "bitmask_value": null,
ну и как всегда, мусора по самые уши, если кто покажет, как в json не писать переменные с false и чтобы при этом не падала сериализация, плюс в карму... :)

AlexCrane
10.06.2025, 09:36
Делаю сейчас такую утилиту, но пока сделал как у овен - в code пишу P и номер регистра. Добавлю чтобы можно было добавлять имя переменной, смотрится конечно лучше.

melky
10.06.2025, 09:40
AlexCrane о, на чем пишите ?

AlexCrane
10.06.2025, 09:42
AlexCrane о, на чем пишите ?
На древнем Delphi 6.

Тут понадобилось 400 регистров в облако загнать и что то мне взгрустнулось. Решил что быстрее утилиту напишу.

melky
10.06.2025, 09:43
упс, тут не подскажу. Если там есть сериализация json то принцип идеи могу пояснить.

ну вроде есть - https://nweb42.com/books/delphi/rabota-s-json-dannymi/

суть. шаг 1 - загружаем наш json, который выдало расширение.
шаг 2, загружаем наш csv и идем по нему циклом, забирая имена и коды, которые нам нужны и меняем в загруженном json (опять же для простоты пользуем Linq запросы, если они есть в Delphi)
шаг 3 - выгружаем новый json сериализацией.

типа всё :) в случае с C# надо правильно создать классы и указать список классов для сериализации и обратно. В Delphi так понимаю создать объект и список этих объектов.

AlexCrane
10.06.2025, 09:53
Использую экспортированные сетевые переменные в csv, и конвертирую в json

melky
10.06.2025, 09:54
а tag id берете откуда?, остальное там вроде стандартно
"category": "7b6a7ee2-a4ab-40d9-a343-7aafae3ac237" - вот этот вот id присваивает расширение. Или оно тоже для OL типа стандартное значение имеет ?

AlexCrane
10.06.2025, 09:56
а tag id берете откуда?, остальное там вроде стандартно
"category": "7b6a7ee2-a4ab-40d9-a343-7aafae3ac237" - вот этот вот id присваивает расширение. Или оно тоже для OL типа стандартное значение имеет ?

И с пустой категорией вроде нормально импортировалось, проверю еще раз конечно, а то поздно ночью писал прогу.

melky
10.06.2025, 09:58
ну если с пустой работает, то и json загружать не надо, просто подготовить классы(объекты) и после чтения csv создавать список классов и сериализовать в json.

AlexCrane
10.06.2025, 22:54
Тестовая версия утилиты конвертации CSV файла в JSON OwenCloud. Вроде все режимы проверил.
Крупные Json у меня OwenCloud не смог переварить, только частями.

melky
10.06.2025, 22:59
Что надо поправить в королевстве для русского языка ?

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

AlexCrane
11.06.2025, 08:17
Что надо поправить в королевстве для русского языка ?

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

Open Regional and Language Options in Control Panel.
On the Advanced tab, under Language for non-Unicode programs, click the language version of non-Unicode programs that will be used.

melky
11.06.2025, 08:55
Win10 Pro с ноутом, настройки все по умолчанию, как-то с другими программами проблем никогда не было, но я понял про какие настройки вы говорите, поищу их.

Русский появился в следующих версиях в приложении, но в самом поле только после изменения настроек.. в Win10 там стоял у меня Русский, но надо было еще галочку включить. Для отображения в текстовом поле на русском.
Но конвертации в json не происходит. Пример из поста 9. никакой самодеятельности, только тот, что выложен :)

AlexCrane
11.06.2025, 10:40
Для поста №9 нужно установить начальную строку 2 (нестандартный csv)
На скрине настройки
И результат прикрепил

melky
11.06.2025, 11:36
ок, по всем этим окошечкам и настройкам кратенькое описание добавить.
Ну и пусть у кого облако есть потренируются :)
у меня не сработало, поставив 2 как на скрине, похоже у вас перенеслось то, что в Тесте забито. На автомате не сработало. И что значит нестандартный csv? я так понял это из ОЛ сохранен csv

блин, типа сперва надо выбрать и тестом пройтись, только потом конвертировать. А типа сразу никак? :) вот чтобы не думать...

AlexCrane
11.06.2025, 12:26
ок, по всем этим окошечкам и настройкам кратенькое описание добавить.
Ну и пусть у кого облако есть потренируются :)
у меня не сработало, поставив 2 как на скрине, похоже у вас перенеслось то, что в Тесте забито. На автомате не сработало. И что значит нестандартный csv? я так понял это из ОЛ сохранен csv

блин, типа сперва надо выбрать и тестом пройтись, только потом конвертировать. А типа сразу никак? :) вот чтобы не думать...

Да, делал универсальную, что бы можно было из любого CSV, поэтому выбирать ручками, тест нужен лишь чтобы проверить правильность (вот тут нужно указать начальную строку для теста).

Перезалил программу в посту 22https://owen.ru/forum/showthread.php?t=41462&page=3&p=465851&viewfull=1#post465851. Добавил описание немного.

melky
11.06.2025, 12:36
Главное, чтобы FPavel был в восторге :)

FPavel
11.06.2025, 18:26
Спасибо!!!

В облаке ещё не проверял, а так генерацию проверил - всё очень здОрово - можно для всех ПР использовать (cvs для сетевых переменных очень разный для разных ПР и по составу полей и по их порядку).
И на перспективу тоже актуальность не потеряется - в каждой версии OwenLogic формат cvs меняется.

Как понимаю, если поле комментария в cvs пустое (а оно может таковым оказаться) - формируется уникальная строка описания с использованием номера регистра Modbus.

Спасибо!

AlexCrane
20.06.2025, 12:54
Убрал ошибки и перекомпилировал в современной ide чтобы не было проблем с кодировками, плюсом добавил генерацию dev для Owen OPC Server