&ACCESS RVO &REL 4 &COMMENT Mastering Reference Main Task &PARAM EDITMASK = * &PARAM DISKPATH = KRC:\R1\System DEF MasRef_Main() ;******************************************* ;* main module for safety relevant feature * ;* 'Master Reference' * ;******************************************* ;FOLD Start conditions for mastering reference MsgState(MASREF_StateMsgHandle,"MasterReferenceCheckStartConditions",MASREF_Modulname[],,, 103) IF Varstate("$pro_ip.si01.name[]") <> #DECLARED THEN ;APP//MasRef_Main() wurde von einem uebergeordneten Programm aufgerufen IF NOT $MasteringTest_Req_Ext AND NOT $MasteringTest_Req_Int THEN ;APP//weder interne noch externe Anforderung ist freigegeben WAIT FOR Clear_KrlMsg(MASREF_StateMsgHandle) RETURN ENDIF ENDIF ;APPBLOCK/* ;Signale Referenzgruppe in Position und ;Justagereferenzierung aktiv zuruecksetzen ;APPBLOCK*/ $MasteringTest_Group = 0 $MasteringTest_Active = FALSE ;APPBLOCK/* ;Schalter Hardware pruefen und ;Schalter darf nicht bedaempft sein ;APPBLOCK*/ REPEAT IF NOT $MasteringTest_Switch_OK THEN ;APP//wartet auf Quittierung MsgQuit("MasterReferenceSwitchFailure", MASREF_Modulname[], , , 100, MASREF_MsgOptWithLogging) ENDIF ;APP//aktiviert Safety-Modul $MasteringTest_Active = TRUE WAIT SEC 0.2 ;APP//lesend: Safety-Modul hat Variable wieder deaktiviert IF NOT $MasteringTest_Active THEN ;APP//wartet auf Quittierung MsgQuit("MasterReferenceNotActivated", MASREF_Modulname[], , , 101, MASREF_MsgOptWithLogging) ENDIF UNTIL $MasteringTest_Active AND $MasteringTest_Switch_OK WAIT FOR Clear_KrlMsg(MASREF_StateMsgHandle) ;ENDFOLD (Start conditions for mastering reference) ;FOLD Reference group testing FOR MASREF_GroupSequenceIdx = 1 TO MASREF_GroupSequenceSize MASREF_GroupNumber = MASREFg_GroupSequence[MASREF_GroupSequenceIdx] IF MASREF_GroupNumber > 0 THEN MsgState(MASREF_StateMsgHandle,"MasterReferenceGroup",MASREF_Modulname[], MASREF_GroupNumber, , 104, MASREF_MsgOptWithLogging) RunTest_Group(MASREF_GroupNumber) WAIT FOR Clear_KrlMsg(MASREF_StateMsgHandle) ENDIF ENDFOR ;ENDFOLD (Reference group testing) ;FOLD Finalize mastering reference MsgState(MASREF_StateMsgHandle,"MasterReferenceFinalize",MASREF_Modulname[],,, 106) ;APP//Positionspruefung in Sicherheitssteuerung beendet $MasteringTest_Active = FALSE MASREF_nLapsedTime = 0 REPEAT WAIT SEC MASREF_TimeoutOneCycle MASREF_nLapsedTime = MASREF_nLapsedTime + 1 ;APPBLOCK/* ;lesend: warte bis Safety-Modul Variable auf FALSE setzt ;oder Timeout abgelaufen ;APPBLOCK*/ UNTIL (NOT $MasteringTest_Active AND NOT $MasteringTest_Req_Int) or (MASREF_nLapsedTime > MASREF_nLapsedTimeout) IF $MasteringTest_Active THEN ;APP//wartet auf Quittierung MsgQuit("MasterReferenceFailed", MASREF_Modulname[], , , 102, MASREF_MsgOptWithLogging) ENDIF WAIT FOR Clear_KrlMsg(MASREF_StateMsgHandle) ;ENDFOLD (Finalize mastering reference) END DEF RunTest_Group(nGrpNr:IN) ;FOLD Declaration INT nGrpNr ;ENDFOLD (Declaration) ;FOLD Implementation IF (nGrpNr <= 0) OR (nGrpNr > 3) THEN MsgQuit("MasterReferenceUnknownGroup", MASREF_Modulname[], nGrpNr, , 105, MASREF_MsgOptWithLogging) RETURN ENDIF SWITCH nGrpNr CASE 1 ;APP//Pruefposition Gruppe 1 anfahren MasRefStartG1() CASE 2 ;APP//Pruefposition Gruppe 2 anfahren MasRefStartG2() CASE 3 ;APP//Pruefposition Gruppe 3 anfahren MasRefStartG3() DEFAULT ENDSWITCH ;APP//warte bis Pruefposition sicher erreicht WAIT SEC 0.5 ;APP//aktiviert Signal Referenzgruppe x in Position $MasteringTest_Group = nGrpNr ;APP//warte bis Pruefung abgeschlossen WAIT SEC 0.5 SWITCH nGrpNr CASE 1 ;APP//zurueck von Pruefposition Gruppe 1 MasRefBackG1() CASE 2 ;APP//zurueck von Pruefposition Gruppe 2 MasRefBackG2() CASE 3 ;APP// zurueck von Pruefposition Gruppe 3 MasRefBackG3() DEFAULT ENDSWITCH WAIT SEC 0.2 ;APP//deaktiviert Signal Referenzgruppe x in Position $MasteringTest_Group = 0 WAIT SEC 0.2 ;ENDFOLD (Implementation) END