EnglishУкраїнськаmRussian
Login/New
Topic with no new replies

Доступ к атрибутам функции по имени


Author Message
Written on: 06. 02. 2014 [16:04]
adsum
Andrew S
Topic creator
registered since: 03.10.2013
Posts: 31
Подскажите пожалуйста, есть ли возможность обращаться к атрибутам функции, созданной в библиотеке вычислителя на java подобном языке, по имени, как это можно делать в виджетах? Типа:
JAVASCRIPT
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 подобном языке, по имени, как это можно делать в виджетах?

JAVASCRIPT
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.



7443