Длина идентификатора и имени объекта в 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 килобайт) — 2544 загрузок
|
Сообщение создано: 17. 12. 2013 [22:01]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"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
Сообщения: 3750
|
"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
Сообщения: 3750
|
"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.
Спасибо большое за эти изменения !
|
|
|