Код:
static UINT tm1, tm2, tm3, tm4, tm5, tm6, tm7, tm8;
static int State1, State2, State3, State4, State5, State6, State7, State8;
static int CurTemp1, CurTemp2, CurTemp3, CurTemp4, CurTemp5, CurTemp6, CurTemp7, CurTemp8;
static int SleepMinute1, SleepMinute2, SleepMinute3, SleepMinute4, SleepMinute5, SleepMinute6, SleepMinute7, SleepMinute8;
static int MaxTemp1, MaxTemp2, MaxTemp3, MaxTemp4, MaxTemp5, MaxTemp6, MaxTemp7, MaxTemp8;
//--------- Canal 1 -----------------
if (!GetPSBStatus(256) && State1 > 0) {
State1 = 99;
}
switch (State1) {
case 0:
if (GetPSBStatus(256)) {
State1 = 1;
}
else break;
case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 256, 0, TYPE_WORD, &SleepMinute1);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 258, 0, TYPE_WORD, &MaxTemp1);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0X01, 0, TYPE_WORD, &CurTemp1);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp1);
tm1 = *(DWORD*)(PSW + 38);
State1 = 2;
case 2:
if (*(DWORD*)(PSW + 38) >= tm1 + 1800) {
tm1 = *(DWORD*)(PSW + 38);
CurTemp1 = CurTemp1 + 10;
if (CurTemp1 <= MaxTemp1) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0X11, 0, TYPE_WORD, CurTemp1);
break;
}
else {
State1 = 3;
}
}
case 3:
if ((*(DWORD*)(PSW + 38) >= tm1 + SleepMinute1 * 600)) {
ResetPSB(256);
State1 = 99;
}
else break;
case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x11, 0, TYPE_WORD, 10 );
State1 = 0;
}
//--------- Canal 2 -----------------
if (!GetPSBStatus(257) && State2 > 0) {
State2 = 99;
}
switch (State2) {
case 0:
if (GetPSBStatus(257)) {
State2 = 1;
}
else break;
case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 260, 0, TYPE_WORD, &SleepMinute2);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 262, 0, TYPE_WORD, &MaxTemp2);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x06, 0, TYPE_WORD, &CurTemp2);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x15, 0, TYPE_WORD, CurTemp2);
tm2 = *(DWORD*)(PSW + 38);
State2 = 2;
case 2:
if (*(DWORD*)(PSW + 38) >= tm2 + 1800) {
tm2 = *(DWORD*)(PSW + 38);
CurTemp2 = CurTemp2 + 10;
if (CurTemp2 <= MaxTemp2) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x15, 0, TYPE_WORD, CurTemp2);
break;
}
else {
State2 = 3;
}
}
case 3:
if ((*(DWORD*)(PSW + 38) >= tm2 + SleepMinute2 * 600)) {
ResetPSB(257);
State2 = 99;
}
else break;
case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x15, 0, TYPE_WORD, 10 );
State2 = 0;
}
//--------- Canal 3 -----------------
if (!GetPSBStatus(258) && State3 > 0) {
State3 = 99;
}
switch (State3) {
case 0:
if (GetPSBStatus(258)) {
State3 = 1;
}
else break;
case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 264, 0, TYPE_WORD, &SleepMinute3);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 266, 0, TYPE_WORD, &MaxTemp3);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x0B, 0, TYPE_WORD, &CurTemp3);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x19, 0, TYPE_WORD, CurTemp3);
tm3 = *(DWORD*)(PSW + 38);
State3 = 2;
case 2:
if (*(DWORD*)(PSW + 38) >= tm3 + 1800) {
tm3 = *(DWORD*)(PSW + 38);
CurTemp3 = CurTemp3 + 10;
if (CurTemp3 <= MaxTemp3) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x19, 0, TYPE_WORD, CurTemp3);
break;
}
else {
State3 = 3;
}
}
case 3:
if ((*(DWORD*)(PSW + 38) >= tm3 + SleepMinute3 * 600)) {
ResetPSB(258);
State3 = 99;
}
else break;
case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x19, 0, TYPE_WORD, 10 );
State3 = 0;
}
//--------- Canal 4 -----------------
if (!GetPSBStatus(259) && State4 > 0) {
State4 = 99;
}
switch (State4) {
case 0:
if (GetPSBStatus(259)) {
State4 = 1;
}
else break;
case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 268, 0, TYPE_WORD, &SleepMinute4);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 270, 0, TYPE_WORD, &MaxTemp4);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x10, 0, TYPE_WORD, &CurTemp4);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x1D, 0, TYPE_WORD, CurTemp4);
tm4 = *(DWORD*)(PSW + 38);
State4 = 2;
case 2:
if (*(DWORD*)(PSW + 38) >= tm4 + 1800) {
tm4 = *(DWORD*)(PSW + 38);
CurTemp4 = CurTemp4 + 10;
if (CurTemp4 <= MaxTemp4) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x1D, 0, TYPE_WORD, CurTemp4);
break;
}
else {
State4 = 3;
}
}
case 3:
if ((*(DWORD*)(PSW + 38) >= tm4 + SleepMinute4 * 600)) {
ResetPSB(259);
State4 = 99;
}
else break;
case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x1D, 0, TYPE_WORD, 10 );
State4 = 0;
}
//--------- Canal 5 -----------------
if (!GetPSBStatus(260) && State5 > 0) {
State5 = 99;
}
switch (State5) {
case 0:
if (GetPSBStatus(260)) {
State5 = 1;
}
else break;
case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 272, 0, TYPE_WORD, &SleepMinute5);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 274, 0, TYPE_WORD, &MaxTemp5);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x15, 0, TYPE_WORD, &CurTemp5);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x21, 0, TYPE_WORD, CurTemp5);
tm5 = *(DWORD*)(PSW + 38);
State5 = 2;
case 2:
if (*(DWORD*)(PSW + 38) >= tm5 + 1800) {
tm5 = *(DWORD*)(PSW + 38);
CurTemp5 = CurTemp5 + 10;
if (CurTemp5 <= MaxTemp5) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x21, 0, TYPE_WORD, CurTemp5);
break;
}
else {
State5 = 3;
}
}
case 3:
if ((*(DWORD*)(PSW + 38) >= tm5 + SleepMinute5 * 600)) {
ResetPSB(260);
State5 = 99;
}
else break;
case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x21, 0, TYPE_WORD, 10 );
State5 = 0;
}
//--------- Canal 6 -----------------
if (!GetPSBStatus(261) && State6 > 0) {
State6 = 99;
}
switch (State6) {
case 0:
if (GetPSBStatus(261)) {
State6 = 1;
}
else break;
case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 276, 0, TYPE_WORD, &SleepMinute6);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 278, 0, TYPE_WORD, &MaxTemp6);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x1A, 0, TYPE_WORD, &CurTemp6);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x25, 0, TYPE_WORD, CurTemp6);
tm6 = *(DWORD*)(PSW + 38);
State6 = 2;
case 2:
if (*(DWORD*)(PSW + 38) >= tm6 + 1800) {
tm6 = *(DWORD*)(PSW + 38);
CurTemp6 = CurTemp6 + 10;
if (CurTemp6 <= MaxTemp6) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x25, 0, TYPE_WORD, CurTemp6);
break;
}
else {
State6 = 3;
}
}
case 3:
if ((*(DWORD*)(PSW + 38) >= tm6 + SleepMinute6 * 600)) {
ResetPSB(261);
State6 = 99;
}
else break;
case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x25, 0, TYPE_WORD, 10 );
State6 = 0;
}
//--------- Canal 7 -----------------
if (!GetPSBStatus(262) && State7 > 0) {
State7 = 99;
}
switch (State7) {
case 0:
if (GetPSBStatus(262)) {
State7 = 1;
}
else break;
case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 280, 0, TYPE_WORD, &SleepMinute7);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 282, 0, TYPE_WORD, &MaxTemp7);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x1F, 0, TYPE_WORD, &CurTemp7);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x29, 0, TYPE_WORD, CurTemp7);
tm7 = *(DWORD*)(PSW + 38);
State7 = 2;
case 2:
if (*(DWORD*)(PSW + 38) >= tm7 + 1800) {
tm7 = *(DWORD*)(PSW + 38);
CurTemp7 = CurTemp7 + 10;
if (CurTemp7 <= MaxTemp7) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x29, 0, TYPE_WORD, CurTemp7);
break;
}
else {
State7 = 3;
}
}
case 3:
if ((*(DWORD*)(PSW + 38) >= tm7 + SleepMinute7 * 600)) {
ResetPSB(262);
State7 = 99;
}
else break;
case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x29, 0, TYPE_WORD, 10 );
State7 = 0;
}
//--------- Canal 8 -----------------
if (!GetPSBStatus(263) && State8 > 0) {
State8 = 99;
}
switch (State8) {
case 0:
if (GetPSBStatus(263)) {
State8 = 1;
}
else break;
case 1:
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 284, 0, TYPE_WORD, &SleepMinute8);
Read(HMI_LOCAL_MCH, 0, TYPE_PFW, 286, 0, TYPE_WORD, &MaxTemp8);
Read(PLC, 16, MODBUS_RTU_REG_3X, 0x24, 0, TYPE_WORD, &CurTemp8);
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x2D, 0, TYPE_WORD, CurTemp8);
tm8 = *(DWORD*)(PSW + 38);
State8 = 2;
case 2:
if (*(DWORD*)(PSW + 38) >= tm8 + 1800) {
tm8 = *(DWORD*)(PSW + 38);
CurTemp8 = CurTemp8 + 10;
if (CurTemp8 <= MaxTemp8) {
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x2D, 0, TYPE_WORD, CurTemp8);
break;
}
else {
State8 = 3;
}
}
case 3:
if ((*(DWORD*)(PSW + 38) >= tm8 + SleepMinute8 * 600)) {
ResetPSB(263);
State8 = 99;
}
else break;
case 99:
Write(PLC, 16, MODBUS_RTU_REG_4X, 0x2D, 0, TYPE_WORD, 10 );
State8 = 0;
}