Сообщение от
paul-th
О. Это здорово. То что надо.
Предлагаю вариант макроса для одного канала
Код:
WORD MaxTemp=PSW[260];
WORD CurTemp;
WORD SleepMinute=PSW[258];
UINT tm;
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x01, 0, TYPE_WORD, &CurTemp);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp);
tm = *(DWORD*)(PSW + 38);
do {
if (*(DWORD*)(PSW + 38) >= tm + 3000) // 3000 это 5 х 60 х 10
{ CurTemp = CurTemp + 10;
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp);
tm = *(DWORD*)(PSW + 38);
}
Delay(10);
} while ((CurTemp < MaxTemp) && GetPSBStatus(256));
// --- ожидание выдержки ---
tm = *(DWORD*)(PSW + 38);
while ((*(DWORD*)(PSW + 38) < tm + SleepMinute * 600) && GetPSBStatus(256))
{
Delay(10);
}
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x11, 0, TYPE_WORD, 10 );
ResetPSB(256);
Он нужен только один!
И запускать его нужно в ф.области от бита PSB256, как и было сделано Вами в первоначальном варианте - бит PSB256 устанавливается и сбрасывается от переключателя с действием "Инверсия"
Захват-1.png
Дополнительных макросов не нужно
Условие досрочного выкл. бита PSB256 проверяется в самом макросе. И в этом случае макрос завершит работу.