Вариант
Захват-1.png
Для такого распределения регистров, макрос может быть таким
Захват-2.png
Код:
#define SleepMin PSW[258]
#define MaxTemp *(float*)(PSW + 260)
#define StartTemp *(float*)(PSW + 256)
float CurTemp;
unsigned int CurMinute;
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x03, 0, TYPE_DWORD, &CurTemp);
StartTemp = CurTemp;
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, (int)(StartTemp + 1));
do {
CurMinute = (PSW[34] / 16) * 10 + PSW[34] % 16;
if (CurMinute % 5 == 0) {
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x03, 0, TYPE_DWORD, &CurTemp);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, (int)(CurTemp + 1));
}
Delay(10);
} while ( CurTemp < MaxTemp );
Delay(SleepMin * 60000U);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x03, 0, TYPE_DWORD, &CurTemp);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x11, 0, TYPE_WORD, (int)CurTemp);
ResetPSB(256);
ЗЫ,
Внимание, нашел и исправил "очепятку"
Было
do {
CurMinute = (PSW[34] / 16) * 10 + PSW[34] % 16;
if (CurMinute % 5 == 0) {
Read(PLC, 16, MODBUS_RTU_REG_3X, 0, 0х03, TYPE_DWORD, &CurTemp);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, (int)(CurTemp + 1));
}
Должно быть
do {
CurMinute = (PSW[34] / 16) * 10 + PSW[34] % 16;
if (CurMinute % 5 == 0) {
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x03, 0, TYPE_DWORD, &CurTemp);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, (int)(CurTemp + 1));
}