Доступ к атрибутам функции по имени
Author |
Message |
Written on: 06. 02. 2014 [16:04]
|
adsum
Andrew S
Topic creator
registered since: 03.10.2013
Posts: 31
|
Подскажите пожалуйста, есть ли возможность обращаться к атрибутам функции, созданной в библиотеке вычислителя на java подобном языке, по имени, как это можно делать в виджетах? Типа:this.attr("attribut_name");
this.attrSet("attribut_name", value); В документации такой возможности не нашёл (или не понял как).
Вопрос встал при необходимости записать данные из файла с поименованными значениями (XML формат), Писать несколько десятков if ... else if ... не очень удобно, особенно с учётом, что имена тэгов в разных ветках повторяются. Гораздо удобнее было бы через цикл, с использованием имён тэгов как имён переменных. Править объекты атрибутов через get() и set() не считаю удобным, т.к. не все атрибуты планировал публиковать через параметры, соответственно не ко всем будет доступ.
|
Written on: 06. 02. 2014 [17:28]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"adsum" wrote:
Подскажите пожалуйста, есть ли возможность обращаться к атрибутам функции, созданной в библиотеке вычислителя на java подобном языке, по имени, как это можно делать в виджетах?
pVl = arguments["prmNm"];
http://wiki.oscada.org/Doc/JavaLikeCalc#h101-11
Learn, learn and learn better than work, work and work.
|
Written on: 12. 02. 2014 [14:06]
|
adsum
Andrew S
Topic creator
registered since: 03.10.2013
Posts: 31
|
Ещё возник вопрос по атрибутам.
Есть некая "универсальная" функция, которая используется в разных блочных контроллерах. Но для каждого контроллера часть атрибутов имеют свои постоянные значения. В моём случае это адреса внешних ресурсов. В описаниях не нашёл, можно ли присвоить определённые значения атрибутам на уровне контроллеров. Создавать функции для каждого контроллера не хочется. Единственное, что придумалось, это сделать отдельный контроллер, в котором собраны все значения для атрибутов остальных контроллеров, и на них организованы связи. Но может я просто не нашёл решение, типа как сделано в виджетах (val:Постоянная)?
|
Written on: 12. 02. 2014 [17:42]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"adsum" wrote:
Есть некая "универсальная" функция, которая используется в разных блочных контроллерах. Но для каждого контроллера часть атрибутов имеют свои постоянные значения. В моём случае это адреса внешних ресурсов. В описаниях не нашёл, можно ли присвоить определённые значения атрибутам на уровне контроллеров. Создавать функции для каждого контроллера не хочется. Единственное, что придумалось, это сделать отдельный контроллер, в котором собраны все значения для атрибутов остальных контроллеров, и на них организованы связи. Но может я просто не нашёл решение, типа как сделано в виджетах (val:Постоянная)?
В BlockCalc исходно все входы постоянные и им можно индивидуально присваивать то что нужно, в контексте конкретного блочного контроллера, где они и сохраняться. Непостоянными становится то, что связывается или изменяется в алгоритме.
Learn, learn and learn better than work, work and work.
|
Written on: 13. 02. 2014 [10:24]
|
adsum
Andrew S
Topic creator
registered since: 03.10.2013
Posts: 31
|
Вы имеете ввиду, закладку IO блока? Я пробовал там задавать значения атрибутов, но решил, что это не рабочий вариант. Но после Вашего письма провёл некоторое количество экспериментов и понял в чём дело.
Я сейчас использую MySQL для хранения проектов.
БД создана с параметрами
/*!40101 SET NAMES utf8 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `oscada` /*!40100 DEFAULT CHARACTER SET utf8 */;
Из OpenSCADA она подключена: localhost;oscada;oscada;oscada;;;utf8 с кодовой страницей UTF-8.
При сохранении значений атрибутов блочного вычислителя в поле VAL в таблице BlckCalcBlcks_ИМЯ_io сохраняется только 20 байт (10 символов для кириллицы). Соответственно функция не работала, т.к. я использовал более длинные ссылки, и до экспериментов думал, что это неверный путь. Возможно это относится не только к Блочному вычислителю, я только стал пробовать хранить конфигурацию в MySQL, При этом в SQLite ничего подобного не наблюдается.
С MySQL столкнулся ещё с одной проблемой. Она относится ко всем элементам конфигурации (функции, виджиты и т.д.). При создании объектов, содержащих кириллический текст, в БД сохраняются "кракозябры" вида "Прогноз", при этом, если я перебью текст в OpenSCADA и снова его сохраню, то в БД всё сохраняется корректно. Так же, если я конвертирую текст в БД CP1252 → UTF-8, то опять же получаю корректный текст (кроме 3-4 букв, которые исправляю отдельно) и в дальнейшем проблем пока не было.
Сначала думал, что проблема возникает при создании таблиц. Но когда, после исправления текста, создал ещё один Блочный вычислитель, то в нём кириллический текст сохранился корректно. Поэтому пока не могу точно указать момент возникновения проблем с кодировкой.
|
Written on: 13. 02. 2014 [10:45]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"adsum" wrote:
При сохранении значений атрибутов блочного вычислителя в поле VAL в таблице BlckCalcBlcks_ИМЯ_io сохраняется только 20 байт (10 символов для кириллицы).
Да, маловато совсем, особенно если учесть, что там всякие значения могут быть. Расширил до 10000, а ссылки до 100.
Кстати, если лимит по кириллице (символы UTF-8) получается меньше чем латиницей то явно проблема конфигурации БД на предмет кодировки!
"adsum" wrote:
С MySQL столкнулся ещё с одной проблемой. Она относится ко всем элементам конфигурации (функции, виджиты и т.д.). При создании объектов, содержащих кириллический текст, в БД сохраняются "кракозябры" вида "Прогноз", при этом, если я перебью текст в OpenSCADA и снова его сохраню, то в БД всё сохраняется корректно.
Как-же они туда такие попали если из OpenSCADA сохраняются корректно?
"adsum" wrote:
Так же, если я конвертирую текст в БД CP1252 → UTF-8, то опять же получаю корректный текст (кроме 3-4 букв, которые исправляю отдельно) и в дальнейшем проблем пока не было.
Откуда там вообще CP1252?
P.S. Настройка кодировки СУБД, БД и отдельных таблиц в MySQL достаточно мутное поэтому подобные проблемы там могут быть, но это не проблемы OpenSCADA и у меня их нет.
Learn, learn and learn better than work, work and work.
|
Written on: 13. 02. 2014 [13:10]
|
adsum
Andrew S
Topic creator
registered since: 03.10.2013
Posts: 31
|
"roman" wrote: "adsum" wrote: С MySQL столкнулся ещё с одной проблемой. Она относится ко всем элементам конфигурации (функции, виджиты и т.д.). При создании объектов, содержащих кириллический текст, в БД сохраняются "кракозябры" вида "Прогноз", при этом, если я перебью текст в OpenSCADA и снова его сохраню, то в БД всё сохраняется корректно. Как-же они туда такие попали если из OpenSCADA сохраняются корректно? В первый раз через OpenSCADA они сохраняются некорректно, А после закрытия, запуска программы, повторного набора текста и сохранения, в БД всё верно.
"roman" wrote: "adsum" wrote: Так же, если я конвертирую текст в БД CP1252 → UTF-8, то опять же получаю корректный текст (кроме 3-4 букв, которые исправляю отдельно) и в дальнейшем проблем пока не было. Откуда там вообще CP1252? Я тоже не мог понять, как перекодировать. Помог сайт http://www.artlebedev.ru/tools/decoder/, он определил кодировку. Сейчас перекодирую через iconv -f UTF-8 -t CP1252
"roman" wrote: P.S. Настройка кодировки СУБД, БД и отдельных таблиц в MySQL достаточно мутное поэтому подобные проблемы там могут быть, но это не проблемы OpenSCADA и у меня их нет. Общие настройки БД я написал ранее, для таблиц кодировка установлена /*!40101 SET character_set_client = utf8 */;.
Тоже сначала думал исключительно на настройки MySQL. Но с другими приложениями работает без проблем с кодировкой. Да и в OpenSCADA после пересохранения проблем пока не видел.
Постараюсь найти время, и поковыряться с модулем и базой. Может разберусь.
Если будет информация, обязательно напишу. :)
|
Written on: 14. 02. 2014 [09:26]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"adsum" wrote:
В первый раз через OpenSCADA они сохраняются некорректно, А после закрытия, запуска программы, повторного набора текста и сохранения, в БД всё верно.
Это как? Вот создал объект пользователя с киреллическим именем и сохранил в другую, новую БД на MySQL. Вышел/вошёл — всё нормально. И прямо в БД лежит нормально.
Разбирайтесь с настройками БД у себя!
"adsum" wrote:
"roman" wrote: "adsum" wrote: Так же, если я конвертирую текст в БД CP1252 → UTF-8, то опять же получаю корректный текст (кроме 3-4 букв, которые исправляю отдельно) и в дальнейшем проблем пока не было. Откуда там вообще CP1252? Я тоже не мог понять, как перекодировать. Помог сайт http://www.artlebedev.ru/tools/decoder/, он определил кодировку. Сейчас перекодирую через iconv -f UTF-8 -t CP1252
Нет в OpenSCADA исторических связей с кодировкой CP1252 в принципе, поэтому ей там взяться неоткуда, если сами не указали. А в MySQL есть и меньший размер поля для кириллицы фактически прямо на это указывает!
Откройте эту БД из какого нибудь менеджера СУБД MySQL и поглядите на её свойства.
"adsum" wrote:
"roman" wrote: P.S. Настройка кодировки СУБД, БД и отдельных таблиц в MySQL достаточно мутное поэтому подобные проблемы там могут быть, но это не проблемы OpenSCADA и у меня их нет. Общие настройки БД я написал ранее, для таблиц кодировка установлена /*!40101 SET character_set_client = utf8 */;.
Тоже сначала думал исключительно на настройки MySQL. Но с другими приложениями работает без проблем с кодировкой. Да и в OpenSCADA после пересохранения проблем пока не видел.
И продолжайте так думать. Кроме того БД не нужно создавать отдельно, OpenSCADA сама правильные БД создаёт, см. выше.
Learn, learn and learn better than work, work and work.
|
|
|