УкраїнськаEnglishmRussian
Вхід/Новий
У темі багато повідомлень

[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:

Відкриваються зовсім інші вікна, а потім і зовсім скада зависає.

А щодо цього формуйте дамп-знімок щодо з'ясування чого і де зависає
JAVASCRIPT
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" нічого там не ламав!


Саме так, нічого там не зберігається, і що видно по коду на тестовому кадрі:
JAVASCRIPT
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 у кінці це не про атрибути, а відтак і не відкриття!


Тут теж немає проблем для коду у ДемоБД:
JAVASCRIPT
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.



19667