PDA

Просмотр полной версии : Элемент "Отображение линейки" в объектном окне ведёт себя некорректно



aaaSashaMGGU
08.07.2026, 14:40
Добрый
У меня 32 таких окошка:
89759

При поочерёдном их открытии значение уровня в столбике ВСЕГДА показывается как предыдущее (с прошлого окна). Если открыть то же окно второй раз - то отобразится правильно
Рядом находится это же значение, но уже в виде текста внутри прямоугольника - и там всё верно
Как бы мелочь - и конкретно в этом моём проекте некритично
Но что я делаю не так?
Спасибо

Евгений Кислов
08.07.2026, 15:08
Добрый день.
Выложите, пожалуйста, проект, в котором я смогу это воспроизвести.

aaaSashaMGGU
08.07.2026, 15:29
Добрый день.
Выложите, пожалуйста, проект, в котором я смогу это воспроизвести.

Проблема в том, что данные для этих столбиков приходят по сети
Я, конечно, попробую сэмулировать всё это в тестовом проекте, но пока вот проект целиком как есть:

89760
Облака все заблочены, приходится выкручиваться...
"ВЗОР Главный Контроллер.zip" переименовать в "ВЗОР Главный Контроллер.7z"
Пароль от архива выслал на e.kislov@owen.ru

aaaSashaMGGU
08.07.2026, 16:16
Убрал лишнее с проекта
На эмуляции проблема не воспроизводится
89761
Так же zip переименовать в 7z
Пароль тот же

P.S. в общем, на эмуляции такого эффекта нет. Только на реальном контроллере
Свободного контроллера нет, проверить простой проект не могу. А чистить этот мне не позволят, он в работе

Евгений Кислов
09.07.2026, 06:24
Убрал лишнее с проекта
На эмуляции проблема не воспроизводится
89761
Так же zip переименовать в 7z
Пароль тот же

P.S. в общем, на эмуляции такого эффекта нет. Только на реальном контроллере
Свободного контроллера нет, проверить простой проект не могу. А чистить этот мне не позволят, он в работе

Загрузил этот проект в свой контроллер.
В нем я не увидел проблемы - при открытии диалога в его линейке отображается такое же значение, что и на мнемосхеме.

В программе есть ошибка, связанная с записью в несуществующие элементы массива:



FOR i := 201 TO 238 DO

...

Massiv_Pirovano[i - 200] := (INT_TO_WORD(i) - 200) * 100;
// Massiv_Pirovano : ARRAY [200..300] OF WORD;

...

END_FOR


Если что-то подобное есть в основном проекте - то последствия могут быть разными (в том числе и с влиянием на линейку).

aaaSashaMGGU
09.07.2026, 08:05
Загрузил этот проект в свой контроллер.
В нем я не увидел проблемы - при открытии диалога в его линейке отображается такое же значение, что и на мнемосхеме.

В программе есть ошибка, связанная с записью в несуществующие элементы массива:



FOR i := 201 TO 238 DO

...

Massiv_Pirovano[i - 200] := (INT_TO_WORD(i) - 200) * 100;
// Massiv_Pirovano : ARRAY [200..300] OF WORD;

...

END_FOR


Если что-то подобное есть в основном проекте - то последствия могут быть разными (в том числе и с влиянием на линейку).

В основном проекте такого, конечно, нет. Это я для проверочного проекта недоглядел. Massiv_Pirovano - массив от 0 до 100, который из модбаса, да не суть
Про линейку. На моём реальном контроллере происходит запись в SQL, все данные прилетают по сети... Может, кто-то где-то не успевает

GPT говорит, что проблема в том, что не происходит обновление графики, а исправить это можно как-то так:
1) Способ 1: Сброс через системную переменную VisuElems.Visu_Globals.g_VisuEventManager.SetUpdat eNecessary();
2) Способ 2: Использование триггера видимости (Visibility)Обманите элемент, заставив его «исчезнуть» и «появиться» за один цикл контроллера. Вот это как раз должно сработать
3) Используйте передачу структуры во фрейм через VAR_IN_OUT. При смене индекса фрейм гарантированно переинициализирует внутренние ссылки, включая графические элементы.
4) Заменить линейку прямоугольником, меняя его размеры из кода. Тоже должно сработать

Ладно - это всё баловство, как я уже сказал, эти окошки нужны, чтобы вбить 3 уставки - и более их открывать не будут

aaaSashaMGGU
10.07.2026, 07:54
Заменил линейку на прямоугольник, у которого через код меняются размеры
Глюк пропал, теперь всё хорошо
Зато теперь могу динамически менять цвет графика по уровню, а у линейки так нельзя (точнее, можно, но только с явно заданными значениями, а не через код)