[BugWrong]
Помилка динамічного переходу між вікнами та злітання локальних змінних
Автор |
Повідомлення |
Повідомлення створено: 05. 04. 2025 [17:06]
|
Dmytro_NF
Дмитро Ващенко
Автор теми
Зареєстрован(а) с: 29.05.2024
Повідомлення: 13
|
Добрий день.
1) Проблема переходу між екранами
Встановив на нову віртуальну машину версію Debian 11 OpenSCADA v1+r3016.
Після завантаження проекту який розроблювався ще в версії 2966 (На старій версії через upgrade openscada, оновився з 2966 до версії 3009, там такої проблеми не спостерігається), почали некоректно відпрацьовувати переходи між екранами за допомогою коду в скрипті:
if(ev_wrk == "key_mousePresLeft:/But")
{
vcaAttrSet("/"+path.parsePath(0)+"/pg_MainFunc/pg_BaseScr/pg_Schemes/pg_GenMess/ім`я сторінки",true);
}
Відкриваються зовсім інші вікна, а потім і зовсім скада зависає.
Переніс логіку в Events processing через ws_FocusIn*:open - почало працювати корректно.
2) Злітання локальних змінних.
Знов ж таки проблема на версії 3016, у мене реалізована логіка, при перемиканні на кнопки - в локальні змінні записується номер необхідного об`єкту і динамічно промальовуються сторінки відповідно до номеру. Наразі при переході на екран, та при натисканні на стандартний елемент FormEl (при детальній перевірці - при натисканні на будь який елемент) - у мене злітають локальні змінні - <EVAL> і відповідно починаються проблеми з відображенням.
На версії 3009 такого не було помічено.
Дані проблеми в версії 3016 спостерігаються також на Debian 12.
Чи є можливість повернутись до версії 3009?
[Повідомлення редагувалось 2 раз(ів), останній раз 05.04.2025 в 18:26.]
|
Повідомлення створено: 05. 04. 2025 [18:49]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3769
|
"Dmytro_NF" wrote:
Після завантаження проекту який розроблювався ще в версії 2966 (На старій версії через upgrade openscada, оновився з 2966 до версії 3009, там такої проблеми не спостерігається), почали некоректно відпрацьовувати переходи між екранами за допомогою коду в скрипті:
if(ev_wrk == "key_mousePresLeft:/But")
{
vcaAttrSet("/"+path.parsePath(0)+"/pg_MainFunc/pg_BaseScr/pg_Schemes/pg_GenMess/ім`я сторінки",true);
}
Чого це воно за таким кодом взагалі щось відкривати має?
"Dmytro_NF" wrote:
Відкриваються зовсім інші вікна, а потім і зовсім скада зависає.
А щодо цього формуйте дамп-знімок щодо з'ясування чого і де зависає
openscada-proj snapshot {PrijNm}
І загалом не застосовуйте кирилицю у ID!
"Dmytro_NF" wrote:
2) Злітання локальних змінних.
Почитайте про особливість застосування оператору "var", який якщо у функціях застосовується, то ця змінна визначається у її області видимості, тобто це буде не та, яка у загальній області видимості!
Та і у мене на купі коду це аж ніяк не вплинуло, бо у локальних функціях змінні завжди і визначалися у власній області видимості, тобто до глобальних доступу не була, і таке я нарешті реалізував щоб отримати цей доступ не кладучи змінних у атрибути функцій.
"Dmytro_NF" wrote:
Чи є можливість повернутись до версії 3009?
Нащо?
Щодо першого нічого специфічного і не вносилося, хоча може це "Moving to AutoHD<SessWdg> in the argument "src" of the function Session::uiCmd()", але тоді сформуйте знімок!
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 05. 04. 2025 [19:38]
|
Dmytro_NF
Дмитро Ващенко
Автор теми
Зареєстрован(а) с: 29.05.2024
Повідомлення: 13
|
Це потрібно через термінал ввести: openscada-proj snapshot {PrijNm}?
vcaAttrSet("/"+path.parsePath(0)+"/pg_MainFunc/pg_BaseScr/pg_Schemes/pg_GenMess/ім`я сторінки",true); - ім`я сторінки, це я для прикладу, насправді - назва сторінки там pg_Main.
|
Повідомлення створено: 05. 04. 2025 [20:22]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3769
|
"Dmytro_NF" wrote:
Це потрібно через термінал ввести: openscada-proj snapshot {PrijNm}?
Звісно, і {PrijNm}, це ім'я вашого проєкту.
"Dmytro_NF" wrote:
vcaAttrSet("/"+path.parsePath(0)+"/pg_MainFunc/pg_BaseScr/pg_Schemes/pg_GenMess/ім`я сторінки",true); - ім`я сторінки, це я для прикладу, насправді - назва сторінки там pg_Main.
Та і pg_Main у кінці це не про атрибути, а відтак і не відкриття!
Стосовно цього таки прибрав блокування сторінки відкриття і може завтра запущу на складання.
Стосовно збереження значення змінних, то воно у VCAEngine ніколи і не зберігалося, бо код сторінок компілюється при запуску її опрацювання, що типово при відкритті. Відтак або та зміна була у атрибутах, або встановлено опрацювання закритою!
Але це для 3009 я зараз перевірю, бо на 3016 у процедурах, які не перекомпілюються, все зберігається, тобто оператор "var" нічого там не ламав!
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 05. 04. 2025 [20:36]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3769
|
"roman" wrote:
Але це для 3009 я зараз перевірю, бо на 3016 у процедурах, які не перекомпілюються, все зберігається, тобто оператор "var" нічого там не ламав!
Саме так, нічого там не зберігається, і що видно по коду на тестовому кадрі:
var test123;
if(test123 == null) test123 = 0;
else test123++;
this.messInfo("TEST 00: "+test123);
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 06. 04. 2025 [20:22]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3769
|
"roman" wrote:
"Dmytro_NF" wrote:
vcaAttrSet("/"+path.parsePath(0)+"/pg_MainFunc/pg_BaseScr/pg_Schemes/pg_GenMess/ім`я сторінки",true); - ім`я сторінки, це я для прикладу, насправді - назва сторінки там pg_Main.
Та і pg_Main у кінці це не про атрибути, а відтак і не відкриття!
Тут теж немає проблем для коду у ДемоБД:
vcaAttrSet("/ses_AGLKS/pg_so/pg_1/pg_mn/pg_1/a_pgOpen",true);
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 07. 04. 2025 [11:51]
|
Dmytro_NF
Дмитро Ващенко
Автор теми
Зареєстрован(а) с: 29.05.2024
Повідомлення: 13
|
Добрий день.
При детальній перевірці проекту, проблема знаходиться в іншому.
Проект складається з основної сторінки, та віджетів, які відображаються через відкриття вікон.
При Натисканні на кнопки об’єктів, повинно записуватись значення в змінну номеру об’єкту, з якої потім це значення витягується для елементів відображення через сторінку, яка читає через Configuration template <page>|PlcObj (номер).
Але на відміну від версії 3009, на версії 3016 при натисканні на будь який активний елемент сторінки, моя змінна перетворюється на <EVAL> і все злітає.
Наразі вивчаю цей аспект, як з’явиться більше інформації - відпишу.
|
Повідомлення створено: 07. 04. 2025 [15:39]
|
Dmytro_NF
Дмитро Ващенко
Автор теми
Зареєстрован(а) с: 29.05.2024
Повідомлення: 13
|
Перевірив знову проект.
Виявив наступні проблеми:
У мене є кнопки, які вважаються елементами меню, при натискані спрацьовує events processing.
Для прикладу перехід на форму температури:
ws_FocusIn:*:open:/pg_MainFunc/pg_BaseScr/pg_Schemes/pg_TempMN
Але, коли я натискаю курсором на будь який з елементів на формі (активного), у меня виникає:
1) помилка в дігностиці, в якій вказується, що моєї сессії не існує (Картинка ErrorSess), ця помилка відноситься до самої кнопки;
2) В атрибутах елементаwdg_Text цієї кнопки , зберігаются події (events) які відбуваються на формі pg_TempMN (знаходиться в інших координтаха від кнопки), яку відкриває ця кнопка, і які не повинні відноситись до даної кнопки.
При чому вимкнений віджет, який вказаний на фото, якщо його повернути в роботу (вручну увімкнути Processing), то він працює без помилок, до наступного натискання на будь який елемент з форми.
[Повідомлення редагувалось 10 раз(ів), останній раз 07.04.2025 в 17:05.]
Вкладений файл
ErrorSess.png (Тип файлу: image/png, Розмір: 78.23 кілобайтів) — 30 завантажень
Events.png (Тип файлу: image/png, Розмір: 39.89 кілобайтів) — 32 завантажень
|
Повідомлення створено: 07. 04. 2025 [17:31]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3769
|
"Dmytro_NF" wrote:
При детальній перевірці проекту, проблема знаходиться в іншому.
Проект складається з основної сторінки, та віджетів, які відображаються через відкриття вікон.
При Натисканні на кнопки об’єктів, повинно записуватись значення в змінну номеру об’єкту, з якої потім це значення витягується для елементів відображення через сторінку, яка читає через Configuration template <page>|PlcObj (номер).
Зв'язування відсутнє, щодо чого вивчайте контекст сеансу.
Learn, learn and learn better than work, work and work.
|
Повідомлення створено: 07. 04. 2025 [17:36]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зареєстрован(а) с: 12.12.2007
Повідомлення: 3769
|
"Dmytro_NF" wrote:
Але, коли я натискаю курсором на будь який з елементів на формі (активного), у меня виникає:
1) помилка в дігностиці, в якій вказується, що моєї сессії не існує (Картинка ErrorSess), ця помилка відноситься до самої кнопки;
Оновіть до r3018, там у опрацюванні подій вже відсутнє підключення до джерела!
Learn, learn and learn better than work, work and work.
|
|
|