PDA

Просмотр полной версии : Макросы в проекте для СП307Б ОВЕН



Aleksandr81
21.02.2025, 12:23
Всем добрый день!

Суть вопроса вот в чем - необходимо вызывать окна тревоги по значению числа сетевой переменной (переменная целочисленная, значения меняются от 0 до 21 в зависимости от события. Организовать это по значению первого бита для каждой переменной отдельно не проблема, но количество сетевых переменных ограничено, а аварийных событий 21. То есть в распоряжении есть только одна целочисленная переменная.

В этой связи у меня следующая идея: 1. Запись значения сетевой переменной в локальную, например PSW256 (с помощью функциональной области) а потом присваивать значения локальным регистрам в зависимости от значения PSW256. Реализовать это решение можно через макрос, я почитал справку и мне кажется должен сработать макрос SWITCH (пример ниже), будет ли это работать? Или есть какое то более простое решения, подскажите...

Заранее спасибо,

пример:

switch (PSW[256])
{
case 1: PSW[400]=1;
break;
case 2: PSW[401]=1;
break;
case 3: PSW[402]=1;
break;
case 4: PSW[403]=1;
break;
case 5: PSW[404]=1;
break;
case 6: PSW[405]=1;
break;
case 7: PSW[406]=1;
break;
case 8: PSW[407]=1;
break;
case 9: PSW[408]=1;
break;
case 10: PSW[409]=1;
break;


default: PSW[400]=0
default: PSW[401]=0
default: PSW[402]=0
default: PSW[403]=0
default: PSW[404]=0
default: PSW[405]=0
default: PSW[406]=0
default: PSW[407]=0
default: PSW[408]=0
default: PSW[409]=0
default: PSW[410]=0

break;
}

ит.д...

Спасибо всем кто откликнется..

SmSerg
21.02.2025, 15:23
Думаю будет работать.

У товарища с форма petera в подписи есть ссылка на элементы. Там много чего есть, посмотри.

EFrol
21.02.2025, 17:35
Думаю, что можно добавить глобальную ФО (функциональная область, которую сделать глобальной).
Режим запуска "Непрерывно".
В список действий добавить "Вызов макроса", в который вставить:


switch(PSW[256]){
case 1: OpenWindow(61001, 200, 200); break;
case 2: OpenWindow(61002, 200, 200); break;
case 3: OpenWindow(61003, 200, 200); break;
// и т.д.
}
где 61001 = это ID созданного окна, а 200, 200 - координаты его размещения

Еще вариант:


WORD wins[4] = {0, 61001, 61002, 61003};
OpenWindow(wins[PSW[256]], 200, 200);

Валенок
21.02.2025, 20:22
пример:

switch (PSW[256])
{
case 1: PSW[400]=1;
break;
case 2: PSW[401]=1;
break;
case 3: PSW[402]=1;
break;
case 4: PSW[403]=1;
break;
case 5: PSW[404]=1;
break;
case 6: PSW[405]=1;
break;
case 7: PSW[406]=1;
break;
case 8: PSW[407]=1;
break;
case 9: PSW[408]=1;
break;
case 10: PSW[409]=1;
break;


default: PSW[400]=0
default: PSW[401]=0
default: PSW[402]=0
default: PSW[403]=0
default: PSW[404]=0
default: PSW[405]=0
default: PSW[406]=0
default: PSW[407]=0
default: PSW[408]=0
default: PSW[409]=0
default: PSW[410]=0

break;
}
.
могу ошибатся но типа того

for(i=400;i<411;i++)PSW[i]=PSW[256]==(i-399)?1:0;