На "IF" не возвращает значение" могу сказать, что я использую в таких ситуациях unit "Структура" Захват-11.png
Она возвращает значение по индексу
Скрытый текст:
Захват-17.png
Исправленный проект во вложении
На "IF" не возвращает значение" могу сказать, что я использую в таких ситуациях unit "Структура" Захват-11.png
Она возвращает значение по индексу
Скрытый текст:
Захват-17.png
Исправленный проект во вложении
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Прямое управление цветом конечно работает, но только непосредственно в панели, в эмуляторе это не работает.
Можно было сделать трехцветный дисплей и по другому - для каждого состояния (норма, внимание и авария) использовать отдельные юниты "текст" с соответствующим цветом и переключаться между ними в зависимости от состояния битов АV, АN, PV или PN.
Захват-11.png
Исходные данные:
Берем три "разноцветных" текста
Скрытый текст:
Делаем "переключатель" для норма/внимание, т.е. цвет текста будет переключаться между зеленым и желтым
Скрытый текст:
Добавляем еще один, внешний, переключатель для красного цвета
Скрытый текст:
Трехцветный текст готов, можно "поиграться"
Скрытый текст:
Осталось сделать из этой заготовки полноценный дисплей для вывода значения из любого регистра,например PSW256
Скрытый текст:
Осталось добавить возможность в настройках задавать цвет текста для разных состояний
Скрытый текст:
Если нужно изменить шрифт для готового дисплея - воспользуйтесь кнопкой "F" на панели иструментов
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Петр как всегда на высоте!
Вот пытаюсь реализовать на вашем примере, изменение цвета текста в зависимости от значения PSW256.
Понимаю, что нужно функцию сравнения, но ни как не могу разобраться, как это реализовать.
Вот к примеру, интервал от 0 до 100, значение регистра до 50 текст зеленый, от 51 до 70 желтый ну и от 71 до 100 красный.
Получается пока так, на контроллере создал блок сравнения и передаю значения в панельку, на отдельные регистры в зависимости отзначения и тогда цвет меняется. Но ведь можно сделать функцию сравнения в самой пенели, но пока не могу разобраться, как.
На примере дисплея из трех цветных текстов https://owen.ru/forum/showthread.php...l=1#post473102
Можно просто отредактировать существующий дисплей под новую задачу
И так, в ранее созданном есть два элемента IF
Первый IF внутренний, который позволяет переключаться между текстами с зеленым(норма) и с желтым(внимание) цветами.
Скрытый текст:
Переключение происходит в зависимости от текущего значения для условия IF - если текущее значение "0", то отображается нижний элемент из списка вложенных текстов, т.е. "Зеленый текст", если текущее значение "1", то отображается верхний элемент из списка вложенных текстов, т.е. "Желтый текст". Сейчас текущее значение формируется по ИЛИ(OR) от двух бит PSP271 и PSB272.
Второй IF внешний, который позволяет переключаться между текстом с красным(авария) цветом и тем текстом, который выдаст внутренний IF
Скрытый текст:
В зависимости от текущего значения для условия внешнего IF - если текущее значение "0", то отображается нижний элемент из списка состояние внутреннего IF, т.е. "Зеленый" или "Желтый" текст, если текущее значение "1", то отображается верхний элемент из списка, т.е. "Красный текст". Сейчас текущее значение формируется по ИЛИ(OR) от двух бит PSP270 и PSB273.
Для решения текущей задачи нужно заменить два существующих ИЛИ(OR) на два юнита сравнения ">".
1. Удаляем существующие ИЛИ(OR)
Скрытый текст:
2. Сделаем нужные функции сравнения на больше, у юнита сравнения два операнда - слева и справа от знака сравнения. В качестве операнда слева в конечном итоге будет использоваться значение регистра PSW256(DWORD), а в качестве операнда справа константы 50 и 70. Константы можно записать прямо в поле операнда.
Скрытый текст:
3. Используем созданные функции сравнения в качестве текущих значений для внутреннего и внешнего IF
Скрытый текст:
4. Вспоминаем, что для левых операндов функций сравнения должен использоваться регистр PSW256, который у нас уже задействован внутри дисплея в качестве "содержания" для тестов. Можно конечно добавить юниты чтение PSW256 прямо в функции сравнения в качестве операндов слева. Но тогда, если нужно будет изменить в настройках дисплея источник данных, придется менять его адрес в трех местах. К счастью язык ГМ позволяет использовать результат чтения регистра в разных местах макроса. Для этого используем действие "Property Float". Это действие позволяет "вынести наружу" и сделать доступным свойства(property) юнитов, находящихся внутри группы или внутри других юнитов. Я его уже использовал при создании дисплея для свойств "содержание" трех текстов и теперь значение "Value" в группе Float Property внешнего IF используют все три текста. Добавим такую возможность и для двух функций сравнения
Скрытый текст:
Последний раз редактировалось petera; 10.10.2025 в 11:43.
Мой канал на ютубе
https://www.youtube.com/c/ПетрАртюков
Мой канал на РУТУБЕ
https://rutube.ru/channel/23641433/
Библиотека ГМ для СП300
https://disk.yandex.com/d/gHLMhLi8x1_HBg
Спасибо огромное. Буду дальше разбираться.
Доброго времени суток!
Планирую делать проект на СП310 в связке с ПР102. Столкнулся с вопросом, на который не могу найти ответ.
Для объекта требуется довольно "точечное" управление, из-за чего буду использовать ПР102, с её большим количеством входов.
Однако, из-за большого количества кнопок, было принято ещё вдобавок заменить их сенсорной панелью оператора. Итак, вопрос:
Сколько с помощью панели я смогу сделать виртуальных кнопок? Есть ли какое-то ограничение?
У панели ограничений нет, а вот у ПР102, есть ограничения, всего 64 сетевых регистра. https://owen.ru/product/pr102/specifications
64 регистра * 16 бит = 1024 кнопки всего. При условии, что больше ничего передавать не надо.
Только боюсь ПР102 умрёт быстрее, пока передаст все 1024 бита.
Последний раз редактировалось kondor3000; 12.10.2025 в 15:40.