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