Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Input: 
thread : INT := 1;
power : BOOL := FALSE;
stop : BOOL := FALSE;
poweredOn : BOOL;

Output:

motorStartup : BOOL;
motorShutoff : BOOL;
idle : BOOL;
freeMove : BOOL;
continiousTarget : BOOL;
home : BOOL;



Beskrivelse:
  1. Bruke StateManager som ''hjernen'' i programmet. Start, stop, power og skifte av program skjer gjennom StateManager som er en CFC.
  2. Skifter til forskjellige program ut fra hvilken verdi State-inputen har. Ved oppstart vil programmet alltid starte i Idle, og være klar til å ta imot nye kommandoer.
  3. Om en for høy Torque nåes, vil programmet automatisk skifte til Idle og stoppe motorene når kabelroboten kjøres.
  4. MQTT utganger kobles til StateManager som input, som gjør at programmer også kan skiftes gjennom ekstern GUI, i tillegg til signal som start, stopp og Power on.


Info

Type: Function

Responsible: Kenneth


Code Block
languageactionscript3
titleCode Overview
linenumberstrue
FUNCTION_BLOCK state_manager
VAR_INPUT
	thread : INT := 1;
	power : BOOL := FALSE;
	stop : BOOL := FALSE;
	poweredOn : BOOL;
END_VAR
VAR_OUTPUT
	motorStartup : BOOL;
	motorShutoff : BOOL;
	idle : BOOL;
	freeMove : BOOL;
	continiousTarget : BOOL;
	home : BOOL;
END_VAR
VAR
	state : INT := 1;
END_VARstate := thread;

IF power THEN (* Power up *)
motorStartup := TRUE;
motorShutoff := FALSE;
idle := FALSE;
freeMove := FALSE;
continiousTarget := FALSE; 
home := FALSE;
END_IF;

IF NOT stop THEN 
IF poweredOn AND state = 1 THEN (* idle *)
motorShutoff := FALSE;
idle := TRUE;
freeMove := FALSE;
continiousTarget := FALSE; 
home := FALSE;
ELSIF state = 2 AND poweredOn THEN (* Free Move *)
motorShutoff := FALSE;
idle := FALSE;
freeMove := TRUE;
continiousTarget := FALSE; 
home := FALSE;
ELSIF state = 3 AND poweredOn THEN (* Move to target *)
motorShutoff := FALSE;
idle := FALSE;
freeMove := FALSE;
continiousTarget := TRUE; 
home := FALSE;
ELSIF state = 4 AND poweredOn THEN (* Homing *)
motorShutoff := FALSE;
idle := FALSE;
freeMove := FALSE;
continiousTarget := FALSE; 
home := TRUE;
END_IF
END_IF

IF stop THEN
motorShutoff := TRUE;
idle := TRUE;
freeMove := FALSE;
continiousTarget := FALSE; 
home := FALSE;
state := 1;
END_IF