-> Hier kostenlos registrieren
Guten Tag Zusammen,
ich habe angefangen mich für eine Bachelorarbeit in TwinCAT und ST einzuarbeiten.
Nun habe ich einige Fragen und versuche diese strukturiert und möglichst verständlich zu erklären.
Folgende Deklaration und Funktion habe ich bis jetzt im PLC_PRG, dies ist mir jedoch zu unübersichtlich.
Gibt es eine Möglichkeit das alles in einen FB zu schreiben? Ich weiß nur nicht wie ich das dann mit den VAR_INPUT/OUTPUT machen soll.
Meine Struktur st_Sicherungsabgaenge, dazu habe ich noch eine Frage. Habe das by_Zustand:BYTE; irgendwo im Netz gefunden und frage mich nun wie das Byte z.b. Wartung oder so darstellen/ausgeben soll.
Meine Variablendeklaration bis jetzt im PLC_PRG
Und meine "Funktionsaufrufe" oder wie man es auch nennen möchte, ebenfalls im PLC_PRG.
Dazu eine Frage: Kann ich so etwas wie IF(arr_Sicherungen.x_Ausloesung...... THEN st_Ausloesung:='Sicherung ausgelöst'; schreiben, also alle Fälle auf einmal abarbeiten?
Hatte eventuell gedacht, die ganzen Deklarationen in ein STRUCT zuverpacken, weiß aber dann nicht wie ich das in einen FB einbinde, sodass es das selbe tut wie bis jetzt.
Dann habe ich noch einen FB, welcher zwar funktioniert, vielleicht jedoch noch optimiert werden kann.
MfG
Bone
ich habe angefangen mich für eine Bachelorarbeit in TwinCAT und ST einzuarbeiten.
Nun habe ich einige Fragen und versuche diese strukturiert und möglichst verständlich zu erklären.
Folgende Deklaration und Funktion habe ich bis jetzt im PLC_PRG, dies ist mir jedoch zu unübersichtlich.
Gibt es eine Möglichkeit das alles in einen FB zu schreiben? Ich weiß nur nicht wie ich das dann mit den VAR_INPUT/OUTPUT machen soll.
Meine Struktur st_Sicherungsabgaenge, dazu habe ich noch eine Frage. Habe das by_Zustand:BYTE; irgendwo im Netz gefunden und frage mich nun wie das Byte z.b. Wartung oder so darstellen/ausgeben soll.
Code:
TYPE st_Sicherungsabgaenge :
STRUCT
by_Zustand: BYTE; (*EIN,AUS,Wartung,Fehler...*)
i_Temperatur: INT;
x_Ausloesung: BOOL; (*Ja := TRUE, Nein := FALSE*)
END_STRUCT
END_TYPE
Meine Variablendeklaration bis jetzt im PLC_PRG
Code:
VAR
arr_Sicherungen: ARRAY[1..3] OF st_Sicherungsabgaenge;
i_PointerAufArray: INT:=1;
i_SpeicherTemperatur: INT;
x_Error: BOOL;
i_UntereGrenzePointer: INT:=1;
i_ObereGrenzePointer: INT:=3;
st_Ausloesung: ARRAY[1..3] OF STRING;
i,j,a,b: INT;
arr_Meldungen: ARRAY[1..10] OF STRING;
arr_Fehler: ARRAY[1..10] OF STRING;
arr_Ereignisse: ARRAY[1..10] OF STRING;
END_VAR
Und meine "Funktionsaufrufe" oder wie man es auch nennen möchte, ebenfalls im PLC_PRG.
Dazu eine Frage: Kann ich so etwas wie IF(arr_Sicherungen.x_Ausloesung...... THEN st_Ausloesung:='Sicherung ausgelöst'; schreiben, also alle Fälle auf einmal abarbeiten?
Code:
IF (arr_Sicherungen[1].x_Ausloesung = TRUE) THEN
st_Ausloesung[1]:='Sicherung ausgelöst!';
END_IF;
IF (arr_Sicherungen[2].x_Ausloesung = TRUE) THEN
st_Ausloesung[2]:='Sicherung ausgelöst!';
END_IF;
IF (arr_Sicherungen[3].x_Ausloesung = TRUE) THEN
st_Ausloesung[3]:='Sicherung ausgelöst!';
END_IF;
Hatte eventuell gedacht, die ganzen Deklarationen in ein STRUCT zuverpacken, weiß aber dann nicht wie ich das in einen FB einbinde, sodass es das selbe tut wie bis jetzt.
Dann habe ich noch einen FB, welcher zwar funktioniert, vielleicht jedoch noch optimiert werden kann.
Code:
FUNCTION_BLOCK FB_Leistungsfaktor
VAR_INPUT
rl_Wirkleistung: REAL;
rl_Scheinleistung: REAL;
END_VAR
VAR_OUTPUT
rl_Leistungsfaktor: REAL;
x_ERROR: BOOL;
END_VAR
VAR
END_VAR
------------------------------------------------
IF (rl_Scheinleistung <> 0) THEN (*Kontrolle ob durch 0 dividiert werden soll*)
rl_Leistungsfaktor:=(rl_Wirkleistung / rl_Scheinleistung); (*Wenn rl_Blindleistung ungleich 0 ist, wird die Division*)
x_ERROR:=FALSE; (*durch geführt, sonst wird zur ELSE-Anweisung gesprungen*)
ELSE
x_ERROR:=TRUE; (*Bei Division durch 0 wird x_ERROR auf FALSE gestellt*)
END_IF;
RETURN;
MfG
Bone