Каким образом работает в СП307 глобальный макрос?
Стоит задача - из преобразователя частоты читаю код аварии, и использую результат в таблице событий реального времени.
Для этого в глобальном макросе читаю регистр по адресу чтения кода аварии, и устанавливаю биты в памяти панели, которые потом используются в таблице
событий реального времени для формирования сообщений.
Создан и откомпилирован глобальный макрос (немного сократил число устанавливаемых битов ):
Код:
void main (void)
{
WORD AlarmCode = 0;
// read alarm code from ESQ
Read(PLC, 1, MODBUS_RTU_REG_4X, 7683, 0, TYPE_WORD, &AlarmCode);
if(AlarmCode == 0) SetPSB(300);
else ResetPSB(300);
if(AlarmCode == 1) SetPSB(301);
else ResetPSB(301);
if(AlarmCode == 2) SetPSB(302);
else ResetPSB(302);
if(AlarmCode == 3) SetPSB(303);
else ResetPSB(303);
if(AlarmCode == 4) SetPSB(304);
else ResetPSB(304);
}
Результат не увидел. Выполняется ли глобальный макрос "раз в цикл" общей программы СП, или же надо сделать внутри
глобального макроса бесконечный цикл чтения, например вот такой:
Код:
void main (void)
{
WORD AlarmCode = 0;
while(1)
{
// read alarm code from ESQ
Read(PLC, 1, MODBUS_RTU_REG_4X, 7683, 0, TYPE_WORD, &AlarmCode);
if(AlarmCode == 0) SetPSB(300);
else ResetPSB(300);
if(AlarmCode == 1) SetPSB(301);
else ResetPSB(301);
if(AlarmCode == 2) SetPSB(302);
else ResetPSB(302);
if(AlarmCode == 3) SetPSB(303);
else ResetPSB(303);
if(AlarmCode == 4) SetPSB(304);
else ResetPSB(304);
}
}
Если нужен бесконечный цикл, то не станет ли чтение в нем регистра по интерфейсу причиной
ухудшения динамики обновления данных на экранах панели, читаемых привязаными к экранам средствами
визуализации типа индикаторы/дисплеи и т.п? Если да, то как правильнее сделать запросы на чтение из глобального макроса более редкими по времени?