УкраїнськаEnglishРocсийский
Вход/Новый
В теме нет новых постов

Длина идентификатора и имени объекта в OpenScada


Автор Сообщение
Сообщение создано: 17. 12. 2013 [15:23]
aNdrOS
Андрей
Создатель темы
Зарегистрирован(а) с: 07.05.2010
Сообщения: 102
В данный момент выполняется разработка модуля для своего оборудования. В процессе выяснилось, что системное API позволяет добавлять объекты в TController c помощью метода add с длиной поля ID более 20 символов (см. скриншот).
При этом в базе и конфигураторе это поле сохраняется корректно и при обзоре тегов через OPCUA также отображается полностью.
Для проекта нам необходимо использование длинных идентификаторов (до 100 символов) и данный пример допускает такую возможность.
Хочется уточнить какие будут ограничения при работе с такими объектами из других модулей системы?
И не будет ли в дальнейшем жестко введено это ограничение на уровне API?

Аналогичная ситуация касается поля Name -- система не ограничивает создание имени более 50 символов (кроме валидатора на форме параметров в конфигураторе). http://goo.gl/XNKB26
Вложенный файл

screen1.png (Тип файла: image/png, Размер: 108.77 килобайт) — 1876 загрузок
Сообщение создано: 17. 12. 2013 [22:01]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3679
"aNdrOS" wrote:

Хочется уточнить какие будут ограничения при работе с такими объектами из других модулей системы?
И не будет ли в дальнейшем жестко введено это ограничение на уровне API?

Если объект не сохраняется в БД то лимита на ID нет, а лимит в 20 символов диктуется БД, которые обычно не допускают очень больших ключей, частью которого всегда выступает ID.

Т.е. если объект таки хранится в БД то при смене SQLite на MySQL сразу-же получите массу проблем!

"aNdrOS" wrote:

Аналогичная ситуация касается поля Name -- система не ограничивает создание имени более 50 символов (кроме валидатора на форме параметров в конфигураторе). http://goo.gl/XNKB26

Вот там и перечитайте ответ, а ситуация с Name не аналогична, поскольку он в ключе не участвует.

Learn, learn and learn better than work, work and work.
Сообщение создано: 18. 12. 2013 [13:50]
rxs5
Дмитрий Лыков
In tech support
Зарегистрирован(а) с: 06.11.2013
Сообщения: 205
"roman" wrote:

Если объект не сохраняется в БД то лимита на ID нет, а лимит в 20 символов диктуется БД, которые обычно не допускают очень больших ключей, частью которого всегда выступает ID.

Т.е. если объект таки хранится в БД то при смене SQLite на MySQL сразу-же получите массу проблем!

Можете указать, где явно прописаны ограничения на БД всех типов ?
Просмотрел "Подсистема "Базы данных" на wiki, но там явно не увидел.
Или ограничение в 20 символов появляется из-за того, что ID c длиной более 20 символов в составе другого ключа будет проблемой для базы данных ? (всех или определенных ?)
Сообщение создано: 18. 12. 2013 [17:42]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3679
"rxs5" wrote:

Можете указать, где явно прописаны ограничения на БД всех типов ?

В самих объектах или его родителях, например, для объекта контроллера:
fldAdd(new TFld("ID",_("ID"),TFld::String,TCfg::Key|TFld::NoWrite,"20"));
fldAdd(new TFld("NAME",_("Name"),TFld::String,TCfg::TransltText,"50"));
fldAdd(new TFld("DESCR",_("Description"),TFld::String,TFld::FullText|TCfg::TransltText,"1000"));
fldAdd(new TFld("ENABLE",_("To enable"),TFld::Boolean,0,"1","0"));
fldAdd(new TFld("START",_("To start"),TFld::Boolean,0,"1","0"));
fldAdd(new TFld("MESS_LEV",_("Messages level"),TFld::Integer,0,"1","3"));


Learn, learn and learn better than work, work and work.
Сообщение создано: 18. 12. 2013 [18:26]
rxs5
Дмитрий Лыков
In tech support
Зарегистрирован(а) с: 06.11.2013
Сообщения: 205
"roman" wrote:

"rxs5" wrote:

Можете указать, где явно прописаны ограничения на БД всех типов ?

В самих объектах или его родителях, например, для объекта контроллера:
fldAdd(new TFld("ID",_("ID"),TFld::String,TCfg::Key|TFld::NoWrite,"20"));
fldAdd(new TFld("NAME",_("Name"),TFld::String,TCfg::TransltText,"50"));
fldAdd(new TFld("DESCR",_("Description"),TFld::String,TFld::FullText|TCfg::TransltText,"1000"));
fldAdd(new TFld("ENABLE",_("To enable"),TFld::Boolean,0,"1","0"));
fldAdd(new TFld("START",_("To start"),TFld::Boolean,0,"1","0"));
fldAdd(new TFld("MESS_LEV",_("Messages level"),TFld::Integer,0,"1","3"));


Создал контроллер с именем
name_opcua1234567890name_opcua1234567890name_opcua....
длиной 100 символов.
Сохранил проект, подключился OPC UA клиентом - контроллер отображается.
При выходе из OpenSCADA в консоли сообщение
1|/sub_UI/ | Disconnect module 'Vision'!
System counters on exit: DAQParamCntr: -159
EValObjCntr: -2
ModulsCntr: -33
VarObjCntr: -70
OpenSCADA system is correctly exited by cause 10.
Program rezult: 10

Запускаю OpenSCADA - длинное имя отображается, в UAExpert этот контроллер доступен. База данных используется SQLLite.

Собственно что нам необходимо: чтобы Name объекта не ограничивалось 50 символами. А как минимум поднять границу до 100, либо до 255 символов. Плюс к этому браузинг по имени (не по ID как сейчас).
Пока что не вижу явных ограничений на использование имени объектов более 50 символов. Если это действительно так (нет ограничений), то может и для Tcfg() снять ограничение в 50 символов ?
Сообщение создано: 19. 12. 2013 [13:05]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3679
"rxs5" wrote:

При выходе из OpenSCADA в консоли сообщение
1|/sub_UI/ | Disconnect module 'Vision'!
System counters on exit: DAQParamCntr: -159
EValObjCntr: -2
ModulsCntr: -33
VarObjCntr: -70
OpenSCADA system is correctly exited by cause 10.
Program rezult: 10


И что? Демо режим включили в процессе работы!

"rxs5" wrote:

Собственно что нам необходимо: чтобы Name объекта не ограничивалось 50 символами. А как минимум поднять границу до 100, либо до 255 символов. Плюс к этому браузинг по имени (не по ID как сейчас).
Пока что не вижу явных ограничений на использование имени объектов более 50 символов. Если это действительно так (нет ограничений), то может и для Tcfg() снять ограничение в 50 символов ?

Вынес размер ID и имени в отдельное определение для всех объектов (вроде всех).
Установил значение определения имени в 100.
Добавил в диалог QTCfg валидацию на размер имени.

Learn, learn and learn better than work, work and work.
Сообщение создано: 19. 12. 2013 [14:31]
rxs5
Дмитрий Лыков
In tech support
Зарегистрирован(а) с: 06.11.2013
Сообщения: 205
"roman" wrote:

Вынес размер ID и имени в отдельное определение для всех объектов (вроде всех).
Установил значение определения имени в 100.
Добавил в диалог QTCfg валидацию на размер имени.

Да, уже видел в логах сборки
- !!:SYS: Global definitions OBJ_ID_SZ and OBJ_NM_SZ is added and used for all configuration's ID and NAME. OBJ_NM_SZ is rose from 50 to 100.
Field's NAME limit length pass to configurators by field "idm", through OpenSCADA control interface.

Спасибо большое за эти изменения !



11815