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

[BugWrong] Размеры имени объекта OpenSCADA


Author Message
Written on: 17. 12. 2013 [14:56]
rxs5
Дмитрий Лыков
In tech support
Topic creator
registered since: 06.11.2013
Posts: 205
Добрый день.
По документации
Имена объектов OpenSCADA ограничены размером в 50 символов и могут вводиться любыми символами.

Однако по факту встретил непонятную ситуацию: при создании объекта OpenSCADA возможно указать имя объекта более 50 символов.
Данное имя принимается, сохраняется и в дальнейшем считывается.
Однако при просмотре этого объекта (вкладки параметр и атрибуты) видим, что поле Name ограничено 50 символов, хотя выше указано имя этого же объекта, но с полной длиной.

[This article was edited 1 times, at last 17.12.2013 at 14:57.]
Attachment

oscada_name_length.png (File type: image/png, Size: 178.83 kilobytes) — 1967 downloads
Written on: 17. 12. 2013 [21:52]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"rxs5" wrote:

Имена объектов OpenSCADA ограничены размером в 50 символов и могут вводиться любыми символами.

Однако по факту встретил непонятную ситуацию: при создании объекта OpenSCADA возможно указать имя объекта более 50 символов.

И что с того, ввод он не ограничивает поскольку для имени это не критично, в отличии от ID.

"rxs5" wrote:

Данное имя принимается, сохраняется и в дальнейшем считывается.
Однако при просмотре этого объекта (вкладки параметр и атрибуты) видим, что поле Name ограничено 50 символов, хотя выше указано имя этого же объекта, но с полной длиной.

Не ограничивается оно нигде!
А 50 символов это размер поля в БД под имя и те БД, где эти лимиты строго соблюдается БД их и обрежет.

В общем, это не ошибка, поскольку нет функции прямых ограничений по вводу имени!

Learn, learn and learn better than work, work and work.
Written on: 18. 12. 2013 [13:22]
rxs5
Дмитрий Лыков
In tech support
Topic creator
registered since: 06.11.2013
Posts: 205
"roman" wrote:

Не ограничивается оно нигде!
А 50 символов это размер поля в БД под имя и те БД, где эти лимиты строго соблюдается БД их и обрежет.

В общем, это не ошибка, поскольку нет функции прямых ограничений по вводу имени!

Посмотрите, пожалуйста, скриншот в 1-м сообщении.
Выделенный параметр q1234567891234567890q1234567891234567891q1234567891234567892q1234567891234567893q123456789123456789...

во вкладке Parametr и Attributes обрезается, как минимум в визуальном представлении в поле Name до
q1234567891234567890q1234567891234567891q123456789
Written on: 18. 12. 2013 [16:34]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"rxs5" wrote:

во вкладке Parametr и Attributes обрезается, как минимум в визуальном представлении в поле Name до
q1234567891234567890q1234567891234567891q123456789

А, ну да, это у объекта TCfg() для поля "Имя" установлен лимит 50 символов и этот лимит используется при записи в БД (создания ячейки такого размера) и для уведомления валидатора конфигуратора.

Но это ничего не менят.

Learn, learn and learn better than work, work and work.
Written on: 18. 12. 2013 [17:17]
rxs5
Дмитрий Лыков
In tech support
Topic creator
registered since: 06.11.2013
Posts: 205
"roman" wrote:

А, ну да, это у объекта TCfg() для поля "Имя" установлен лимит 50 символов и этот лимит используется при записи в БД (создания ячейки такого размера) и для уведомления валидатора конфигуратора.

Но это ничего не менят.

Валидатор при вводе имени объекта отсутствует. Значение имени с большим, чем 50 символов, в базе SQL Lite сохраняется, но в свойствах параметра в поле Name не увидим более 50 символов. Хотя все значение поля может быть прочитано из базы, и даже читается в заголовке страницы параметра.
Может у TCfg() снять лимит на 50 символов ? Иначе для правки имени с большим, чем 50 символов, нужно обращаться напрямую к базе и просматривать имя там или там редактировать ?

[This article was edited 1 times, at last 18.12.2013 at 17:37.]
Written on: 18. 12. 2013 [17:57]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"rxs5" wrote:

Валидатор при вводе имени объекта отсутствует.

Уточняйте, что в диалоге создания, где это будет слишком и Name не критичный, если его обрежет потом.

"rxs5" wrote:

Значение имени с большим, чем 50 символов, в базе SQL Lite сохраняется, но в свойствах параметра в поле Name не увидим более 50 символов.

Да, сохраняется, поскольку там нет лимитированного типа char(N) и используется обычный "TEXT", а в MySQL и всех остальных есть и там обрежет.

"rxs5" wrote:

Может у TCfg() снять лимит на 50 символов ?

Каккой-то лимит быть должен, особенно если это одна строка. Кроме того смысл имени больше 50 символов мне не понятен, не говоря уже о проблемах такое имя увидеть целиком в некоторых элементах отображения, да хоть-бы и в дереве.

Learn, learn and learn better than work, work and work.
Written on: 18. 12. 2013 [18:35]
rxs5
Дмитрий Лыков
In tech support
Topic creator
registered since: 06.11.2013
Posts: 205
"roman" wrote:

"rxs5" wrote:

Валидатор при вводе имени объекта отсутствует.

Уточняйте, что в диалоге создания, где это будет слишком и Name не критичный, если его обрежет потом.

Согласен с уточнением.

"roman" wrote:

"rxs5" wrote:

Значение имени с большим, чем 50 символов, в базе SQL Lite сохраняется, но в свойствах параметра в поле Name не увидим более 50 символов.

Да, сохраняется, поскольку там нет лимитированного типа char(N) и используется обычный "TEXT", а в MySQL и всех остальных есть и там обрежет.

Т.е. в SQL Lite исключительная ситуация, и ее можно использовать как недокументированное преимущество ?

"roman" wrote:

"rxs5" wrote:

Может у TCfg() снять лимит на 50 символов ?

Каккой-то лимит быть должен, особенно если это одна строка. Кроме того смысл имени больше 50 символов мне не понятен, не говоря уже о проблемах такое имя увидеть целиком в некоторых элементах отображения, да хоть-бы и в дереве.

По поступившим к нам требованиям имена получаются более 50 символов (60-70), соответственно ищем выход из ситуации. Вариант с ID отпадает. Остается увеличить емкость поля Name: или полностью официально, если это не приведет к сбоям других модулей, или используя особенность SQL Lite. Но тогда надо знать, с чем можем столкнуться в будущем.
Written on: 19. 12. 2013 [10:33]
rxs5
Дмитрий Лыков
In tech support
Topic creator
registered since: 06.11.2013
Posts: 205
"roman" wrote:

"rxs5" wrote:

Значение имени с большим, чем 50 символов, в базе SQL Lite сохраняется, но в свойствах параметра в поле Name не увидим более 50 символов.

Да, сохраняется, поскольку там нет лимитированного типа char(N) и используется обычный "TEXT", а в MySQL и всех остальных есть и там обрежет.

Проверили для MySQL базы.
Параметр с именем размером более 50 символов создается, сохраняется в базе MySQL, считывается клиентов OPC UA и после перезагрузки OpenSCADA доступен. (скриншоты в сообщении)
Все же непонятно: есть реальное ограничение на имя в 50 символов, и оно будет обрезаться при хранении в базах данных кроме SQL Lite или размер значения поля Name ограничен 120 символами ?

[This article was edited 1 times, at last 19.12.2013 at 10:35.]
Attachment

screen2.png (File type: image/png, Size: 135.18 kilobytes) — 1832 downloads
image_ua_name.png (File type: image/png, Size: 21.47 kilobytes) — 2043 downloads
screen3.png (File type: image/png, Size: 84.55 kilobytes) — 1859 downloads
screen4.png (File type: image/png, Size: 110.42 kilobytes) — 1986 downloads
Written on: 19. 12. 2013 [13:11]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"rxs5" wrote:

"roman" wrote:

"rxs5" wrote:

Значение имени с большим, чем 50 символов, в базе SQL Lite сохраняется, но в свойствах параметра в поле Name не увидим более 50 символов.

Да, сохраняется, поскольку там нет лимитированного типа char(N) и используется обычный "TEXT", а в MySQL и всех остальных есть и там обрежет.

Проверили для MySQL базы.
Параметр с именем размером более 50 символов создается, сохраняется в базе MySQL, считывается клиентов OPC UA и после перезагрузки OpenSCADA доступен. (скриншоты в сообщении)

Это потому, что скопировали из SQLite, где информации о размере этого поля нет и как следствие в MySQL оно попало расширенное.
Если-бы таблица создавалась с самого начала то там оказалось бы varchar(50), и как следствие обрезало:
f( u_cfg.fld().len() < 256 || u_cfg.fld().flg()&TCfg::Key )
f_tp = "varchar("+TSYS::int2str(vmax(1,vmin((u_cfg.fld().flg()&TCfg::Key)?(333/(2*keyCnt)):255,u_cfg.fld().len())))+")";


Learn, learn and learn better than work, work and work.
Written on: 19. 12. 2013 [14:34]
rxs5
Дмитрий Лыков
In tech support
Topic creator
registered since: 06.11.2013
Posts: 205
Спасибо за пояснения. Вопрос снят в виду изменения максимального размера имени до необходимого и введения валидации.

[This article was edited 1 times, at last 19.12.2013 at 14:34.]



4067