Détection d'un blocage moteur
La lecture des warning et status permet de détecter les blocages moteur
Explication du code:
IbyState est le registre de status (voir doc)
La détection d'un warning ou d'une erreur génère un flan montant sur la variable bProblem.
Un timer de 100[ms] est déclenché à chaque flan montant, donc à chaque warning ou erreur et mis à zéro s'il n'y a pas d'alarme.
Ainsi si l'alarme est présente lors de la fin du timer, on stoppe le moteur
(* Detection of Warning or Error for more than X[ms] (see below) *) bProblem := (IbyState AND 2#01100000) <> 0; (* Test error or warning *) timerBlocked(IN:=bProblem, PT:=T#100ms); (* Start the timer for a error or warning *) IF (bProblem ) THEN IF (NOT timerBlocked.Q) THEN (* if a problem stay alive more than the timer duration the set point is set to 0 *) iVoltage := 0; (* voltage supply *) MbRunning := FALSE; (* Standby *) MiDiagnostic := -4; (* Set the status to indicate motor blocked *) END_IF ELSE (* if there is no problem, the timer is reseted *) timerBlocked(IN:=FALSE, PT:=T#0s); END_IF