-> Hier kostenlos registrieren
Hallo an Alle
Bei meinem Projekt habe ich als Aufgabe eine State Maschine für ein AX2000 er zu programieren.
Habe eine VorProgramierte aber leider Funktioniert es nicht. Ich habe mir auch Quelltext angeguckt, ich glaube bei der Hex Umformung gibt es Fehler.
Ich hoffe dass ihr mir weiter helfen könnt.
Ich weiss leider nicht, wo genau der Fehler sein kann, bei IF Anweisungen habe ich bei hex zahlen Probleme entdeckt, ich bin mir aber nicht sicher
Als Anhang füge ich auch die State maschine von AX2000 er
Danke
lg
Mein Quelltext
(*++++FPGA_Drive_State control+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
IF ((wAx_Status AND 16#000F) <> 16#0008) THEN
sys_cycle_cnt := sys_cycle_cnt +1;
IF (sys_cycle_cnt > Lim_2s) THEN
sys_cycle_cnt := 0;
IF En_Drive = TRUE THEN
IF ((wAx_Status AND 16#00FF) = 16#0060) THEN
wAx_Control := 16#0006; (*Init*)
ELSIF ((wAx_Status AND 16#00FF) = 16#0040) THEN
wAx_Control := 16#0006; (*PreCharge*)
ELSIF ((wAx_Status AND 16#00FF) = 16#0021) THEN
wAx_Control := 16#0907; (*PreRun, change to Opmode 9 => v/f - control*)
ELSIF ((wAx_Status AND 16#00FF) = 16#0023) THEN
wAx_Control := 16#090F; (*RuN*)
ELSIF ((wAx_Status AND 16#00FF) = 16#0027) THEN
U_cmd := U_cmd_percent;
speed_cmd := speed_cmd_rpm;
END_IF
ELSE
wAx_Control := 16#0000;
U_cmd := 0;
speed_cmd := 0;
END_IF;
END_IF;
ELSE (*Drive_Error*)
sys_cycle_cnt := 0;
En_Drive := FALSE; (* Disable on Error *)
U_cmd := 0;
speed_cmd := 0;
END_IF;
IF ( Clr_Fault = TRUE ) THEN
IF ((wAx_Status AND 16#000F) = 16#0008) THEN
wAx_Control := 16#0080; (*reset Error*)
END_IF
Clr_Fault := FALSE ;
END_IF
SysTime(timeLoDW => NewSysTime);
CycTime := (NewSysTime - OldSysTime)/10; (* cycle time in [µs]*)
IF (CycTime = 0) THEN
CycTime := 1000;
END_IF
OldSysTime := NewSysTime;
Lim_2s := 2000000 / CycTime;
(*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
Bei meinem Projekt habe ich als Aufgabe eine State Maschine für ein AX2000 er zu programieren.
Habe eine VorProgramierte aber leider Funktioniert es nicht. Ich habe mir auch Quelltext angeguckt, ich glaube bei der Hex Umformung gibt es Fehler.
Ich hoffe dass ihr mir weiter helfen könnt.
Ich weiss leider nicht, wo genau der Fehler sein kann, bei IF Anweisungen habe ich bei hex zahlen Probleme entdeckt, ich bin mir aber nicht sicher
Als Anhang füge ich auch die State maschine von AX2000 er
Danke
lg
Mein Quelltext
(*++++FPGA_Drive_State control+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
IF ((wAx_Status AND 16#000F) <> 16#0008) THEN
sys_cycle_cnt := sys_cycle_cnt +1;
IF (sys_cycle_cnt > Lim_2s) THEN
sys_cycle_cnt := 0;
IF En_Drive = TRUE THEN
IF ((wAx_Status AND 16#00FF) = 16#0060) THEN
wAx_Control := 16#0006; (*Init*)
ELSIF ((wAx_Status AND 16#00FF) = 16#0040) THEN
wAx_Control := 16#0006; (*PreCharge*)
ELSIF ((wAx_Status AND 16#00FF) = 16#0021) THEN
wAx_Control := 16#0907; (*PreRun, change to Opmode 9 => v/f - control*)
ELSIF ((wAx_Status AND 16#00FF) = 16#0023) THEN
wAx_Control := 16#090F; (*RuN*)
ELSIF ((wAx_Status AND 16#00FF) = 16#0027) THEN
U_cmd := U_cmd_percent;
speed_cmd := speed_cmd_rpm;
END_IF
ELSE
wAx_Control := 16#0000;
U_cmd := 0;
speed_cmd := 0;
END_IF;
END_IF;
ELSE (*Drive_Error*)
sys_cycle_cnt := 0;
En_Drive := FALSE; (* Disable on Error *)
U_cmd := 0;
speed_cmd := 0;
END_IF;
IF ( Clr_Fault = TRUE ) THEN
IF ((wAx_Status AND 16#000F) = 16#0008) THEN
wAx_Control := 16#0080; (*reset Error*)
END_IF
Clr_Fault := FALSE ;
END_IF
SysTime(timeLoDW => NewSysTime);
CycTime := (NewSysTime - OldSysTime)/10; (* cycle time in [µs]*)
IF (CycTime = 0) THEN
CycTime := 1000;
END_IF
OldSysTime := NewSysTime;
Lim_2s := 2000000 / CycTime;
(*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)