Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- IF WORD_TO_DINT(MbCmd) <> NOP THEN
- MbLastCmd := MbCmd;
- (* Unit selector for Open(), Close(), etc. *)
- CASE WORD_TO_DINT(MbArg1) OF
- iNL1: pUnit := ADR(NL1);
- iNZ1: pUnit := ADR(NZ1);
- iNL2: pUnit := ADR(NL2);
- iND1: pUnit := ADR(ND1);
- iCAP: pUnit := ADR(CAP);
- iVE5: pUnit := ADR(VE5);
- iVE6: pUnit := ADR(VE6);
- iVT1: pUnit := ADR(VT1);
- iVE3: pUnit := ADR(VE3);
- iVP1: pUnit := ADR(VP1);
- iVP2: pUnit := ADR(VP2);
- iVP3: pUnit := ADR(VP3);
- ELSE pUnit := ADR(DummyUnit);
- END_CASE
- (* All modes *)
- CASE WORD_TO_INT(MbCmd) OF
- CmdAlarmAck:
- (* 64 bits mask *)
- FOR i := 0 TO 31 DO
- Alarms.AlarmAck[i] := EXTRACT(SHL(WORD_TO_DWORD(MbArg1), 16) OR WORD_TO_DWORD(MbArg2), INT_TO_BYTE(i));
- END_FOR
- FOR i := 32 TO 63 DO
- Alarms.AlarmAck[i] := EXTRACT(SHL(WORD_TO_DWORD(MbArg3), 16) OR WORD_TO_DWORD(MbArg4), INT_TO_BYTE(i - 32));
- END_FOR
- Alarms.Mute();
- CmdUnAck:
- Alarms.UnAckAll();
- CmdMute:
- Alarms.Mute();
- CmdSetManual:
- PLC_PRG.SetManual();
- CmdStartAuto:
- PLC_PRG.SetAutomatic();
- CmdSetSessionID:
- MbSessionID := WORD_TO_DWORD(MbArg1) OR SHL(WORD_TO_DWORD(MbArg2), 16);
- CmdBeep:
- IF MbArg1 = 0 THEN AlertBuzz.ENABLE := MbArg2 <> 0;
- ELSIF MbArg1 = 1 THEN AlarmBuzz.ENABLE := MbArg2 <> 0; END_IF
- CmdToggleLoopMode:
- loopSwitch := NOT loopSwitch;
- CmdPressStartBtn:
- startBtn := TRUE;
- END_CASE
- (* Manual mode *)
- IF PLC_PRG.controlMode = ManualMode THEN
- CASE WORD_TO_INT(MbCmd) OF
- CmdToggleUnit:
- pUnit^.Toggle();
- CmdOpenValve:
- pUnit^.Open();
- CmdCloseValve:
- pUnit^.Close();
- CmdStartPump:
- pUnit^.Open();
- CmdStopPump:
- pUnit^.Close();
- CmdStopValve:
- pUnit^.Abort();
- CmdSetHT:
- (* Getting REAL out of two INTs *)
- SysMemCpy(ADR(TempControl.Power), ADR(MbArg1), SIZEOF(MbArg1));
- SysMemCpy(ADR(TempControl.Power) + 2, ADR(MbArg2), SIZEOF(MbArg2));
- TempControl.Power := TempControl.Power / 10.0; (* % -> V *)
- CmdSetTMP:
- TempControl.Temp := MbArg1;
- CmdSetHTMode:
- IF WORD_TO_BOOL(MbArg1) THEN
- TempControl.SetTmpMode();
- ELSE
- TempControl.SetPowerMode();
- END_IF
- CmdInit:
- InitializeUnits();
- END_CASE
- (* Automatic mode *)
- ELSIF PLC_PRG.controlMode = AutomaticMode THEN
- CASE WORD_TO_INT(MbCmd) OF
- CmdOpenValve:
- IF WORD_TO_DINT(MbArg1) = iCAP AND NOT Automatic.isCapLocked THEN
- pUnit^.Open();
- END_IF
- IF WORD_TO_DINT(MbArg1) = iVE3 AND NOT Automatic.isVE3Locked THEN
- pUnit^.Open();
- END_IF
- CmdStopValve:
- IF WORD_TO_DINT(MbArg1) = iCAP THEN
- pUnit^.Abort();
- END_IF
- CmdCloseValve: (* For the door *)
- IF WORD_TO_DINT(MbArg1) = iCAP THEN
- pUnit^.Close();
- END_IF
- CmdTipAuto:
- Automatic.SFCTip := TRUE;
- END_CASE
- END_IF
- MbCmd := NOP;
- END_IF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement