Advertisement
Guest User

Untitled

a guest
Jul 27th, 2014
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. IF WORD_TO_DINT(MbCmd) <> NOP THEN
  2. MbLastCmd := MbCmd;
  3. (* Unit selector for Open(), Close(), etc. *)
  4. CASE WORD_TO_DINT(MbArg1) OF
  5. iNL1: pUnit := ADR(NL1);
  6. iNZ1: pUnit := ADR(NZ1);
  7. iNL2: pUnit := ADR(NL2);
  8. iND1: pUnit := ADR(ND1);
  9. iCAP: pUnit := ADR(CAP);
  10. iVE5: pUnit := ADR(VE5);
  11. iVE6: pUnit := ADR(VE6);
  12. iVT1: pUnit := ADR(VT1);
  13. iVE3: pUnit := ADR(VE3);
  14. iVP1: pUnit := ADR(VP1);
  15. iVP2: pUnit := ADR(VP2);
  16. iVP3: pUnit := ADR(VP3);
  17. ELSE pUnit := ADR(DummyUnit);
  18. END_CASE
  19. (* All modes *)
  20. CASE WORD_TO_INT(MbCmd) OF
  21. CmdAlarmAck:
  22. (* 64 bits mask *)
  23. FOR i := 0 TO 31 DO
  24. Alarms.AlarmAck[i] := EXTRACT(SHL(WORD_TO_DWORD(MbArg1), 16) OR WORD_TO_DWORD(MbArg2), INT_TO_BYTE(i));
  25. END_FOR
  26. FOR i := 32 TO 63 DO
  27. Alarms.AlarmAck[i] := EXTRACT(SHL(WORD_TO_DWORD(MbArg3), 16) OR WORD_TO_DWORD(MbArg4), INT_TO_BYTE(i - 32));
  28. END_FOR
  29. Alarms.Mute();
  30. CmdUnAck:
  31. Alarms.UnAckAll();
  32. CmdMute:
  33. Alarms.Mute();
  34. CmdSetManual:
  35. PLC_PRG.SetManual();
  36. CmdStartAuto:
  37. PLC_PRG.SetAutomatic();
  38. CmdSetSessionID:
  39. MbSessionID := WORD_TO_DWORD(MbArg1) OR SHL(WORD_TO_DWORD(MbArg2), 16);
  40. CmdBeep:
  41. IF MbArg1 = 0 THEN AlertBuzz.ENABLE := MbArg2 <> 0;
  42. ELSIF MbArg1 = 1 THEN AlarmBuzz.ENABLE := MbArg2 <> 0; END_IF
  43. CmdToggleLoopMode:
  44. loopSwitch := NOT loopSwitch;
  45. CmdPressStartBtn:
  46. startBtn := TRUE;
  47. END_CASE
  48. (* Manual mode *)
  49. IF PLC_PRG.controlMode = ManualMode THEN
  50. CASE WORD_TO_INT(MbCmd) OF
  51. CmdToggleUnit:
  52. pUnit^.Toggle();
  53. CmdOpenValve:
  54. pUnit^.Open();
  55. CmdCloseValve:
  56. pUnit^.Close();
  57. CmdStartPump:
  58. pUnit^.Open();
  59. CmdStopPump:
  60. pUnit^.Close();
  61. CmdStopValve:
  62. pUnit^.Abort();
  63. CmdSetHT:
  64. (* Getting REAL out of two INTs *)
  65. SysMemCpy(ADR(TempControl.Power), ADR(MbArg1), SIZEOF(MbArg1));
  66. SysMemCpy(ADR(TempControl.Power) + 2, ADR(MbArg2), SIZEOF(MbArg2));
  67. TempControl.Power := TempControl.Power / 10.0; (* % -> V *)
  68. CmdSetTMP:
  69. TempControl.Temp := MbArg1;
  70. CmdSetHTMode:
  71. IF WORD_TO_BOOL(MbArg1) THEN
  72. TempControl.SetTmpMode();
  73. ELSE
  74. TempControl.SetPowerMode();
  75. END_IF
  76. CmdInit:
  77. InitializeUnits();
  78. END_CASE
  79. (* Automatic mode *)
  80. ELSIF PLC_PRG.controlMode = AutomaticMode THEN
  81. CASE WORD_TO_INT(MbCmd) OF
  82. CmdOpenValve:
  83. IF WORD_TO_DINT(MbArg1) = iCAP AND NOT Automatic.isCapLocked THEN
  84. pUnit^.Open();
  85. END_IF
  86. IF WORD_TO_DINT(MbArg1) = iVE3 AND NOT Automatic.isVE3Locked THEN
  87. pUnit^.Open();
  88. END_IF
  89. CmdStopValve:
  90. IF WORD_TO_DINT(MbArg1) = iCAP THEN
  91. pUnit^.Abort();
  92. END_IF
  93. CmdCloseValve: (* For the door *)
  94. IF WORD_TO_DINT(MbArg1) = iCAP THEN
  95. pUnit^.Close();
  96. END_IF
  97. CmdTipAuto:
  98. Automatic.SFCTip := TRUE;
  99. END_CASE
  100. END_IF
  101. MbCmd := NOP;
  102. END_IF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement