PDA

Просмотр полной версии : Установка бита с помощью макроса



ОлегГор
05.08.2025, 12:19
Здравствуйте. Мне нужно вызвать окно с помощью бита из макроса. Используя "помощь" написал простейшую программку.85184 Успешно её откомпилировал. Запараметрировал окно под бит.85185 Вызвал макрос в "функциональной области".85186 Залил всё в СПшку. Но окно не открылось. Подскажите, что недоделал?

EFrol
05.08.2025, 12:27
Попробуйте добавить ResetPSB(300) перед SetPSB и MacroSet() c кавычками уберите (только код оставьте)
А лучше использовать команду "Присвоить значение"!!!
А ещё лучше команду "Открыть окно", у вас ID окна будет в дереве, например 61001.

ОлегГор
05.08.2025, 13:26
А лучше использовать команду "Присвоить значение"!!!


Мне нужно освоить макрос, т.к. есть необходимость обрабатывать биты по определенным условиям. А такое ощущение, что макрос вообще не работает

kondor3000
05.08.2025, 14:17
Мне нужно освоить макрос, т.к. есть необходимость обрабатывать биты по определенным условиям. А такое ощущение, что макрос вообще не работает

Ничего что регистры и биты панели начинаются с 256?
у вас же адрес PSW255 в ФО.
да по 2 регистра с накладками на системные регистры и друг на друга.

EFrol
05.08.2025, 18:35
Мне нужно освоить макрос, т.к. есть необходимость обрабатывать биты по определенным условиям. А такое ощущение, что макрос вообще не работает

1. Не видно условие вызова ФО в закладке "Режим". Не ясно как вызывается ФО.
2. Окно тревог будет вызываться только при фронте бита 300 (при переходе из 0 в 1). Для повторного вызова окна его надо будет сначала сбросить.
3. Имя макроса задается при его создании и в теле макроса его определять не надо.

ОлегГор
07.08.2025, 14:02
Да, верно, ошибка моя

ОлегГор
07.08.2025, 14:37
Я не силён в С. Подскажите, мне нужно по состоянию битов из регистра PSW открывать окна по условию. Я пробую реализовать так


ResetPSB(401); //PSB(401) -бит который выставляю на открытие окна
if (PSW[270] & 0x01) //читаю состояние 0 бита состояния

{
if (GetPSBStatus(300)) // если PSB(300) в 1
{
ResetPSB(401); // PSB(401)- не выставляется
}
else // иначе
{
SetPSB(401); // PSB(401)- выставляется
}}

ОлегГор
07.08.2025, 14:44
Но когда таким образом считываю последующие биты у меня открываются по несколько окон, четные или не четные. Т.е. я На открытие 3-х окон определил 3 бита PSB(401),PSB(402),PSB(403).

ОлегГор
07.08.2025, 15:59
Сам спросил, сам отвечу. (PSW[270] & 0x01)- такую форму записи чтения бита я взял из помощи КонфигураторСП300. Записал битовую маску так (PSW[257] >> 1) & 1 и всё заработало как мне нужно.