TIA Tia v15 Ausgang mehrfach setzen

SeviT

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag

Wollte mich gerade ein bisschen im SCL Programmmieren versuchen,

Habe eine Grundlegende Frage, da ich gerade ein hänger in einem Programm habe.

Kann man einen Ausgang zBsp. Q2.6 von verschiedenen Orten high bzw low setzen gibt das kein Konflikt?

Danke für Antworten
 
Kann man einen Ausgang zBsp. Q2.6 von verschiedenen Orten high bzw low setzen gibt das kein Konflikt?

Können kann man dies prinzipiell schon, aber ob es Sinn macht ist eine andere Frage.

Beispiel:
In deinem FC1 wird der Ausgang gesetzt, da die Bedingungen dafür alle gegeben sind.
In deinem FC2, welcher nach FC1 bearbeitet wird, sind die Bedingungen nicht alle gegeben und der Ausgang wird wieder rückgesetzt.

Nun ist der Ausgang FALSE, obwohl er nach der Logik im FC1 TRUE sein müsste.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die schnelle Antwort
habe zuerst einen merker gemacht, welcher den Ausgang ansteuert. Doch dieser schaltet irgendwie nicht, obwohl die Anweisung true ist. Die Ausgänge habe ich in einem FC mit merker hinterlegt und im ob aufgerufen. Somit versuche ich es mal auf diese weise

gruss
 
Du kannst ja mal ein paar Screenshots einstellen. Wenn der Merker TRUE wird, obwohl er es sein sollte, wäre z.B. eine Überschneidung möglich
MW20
MB20
usw...
 
Jetzt setzt er nich einmal die Ausgänge wenn ich sie direkt high setze

REGION HBot X+
// HBot in X+ Richtung ansteuern mit Hand Controller
IF "Mx_AchseX+" THEN
"Qx_HBot_A1_cw" := 1;
"Qx_HBot_A2_ccw" := 1;
END_IF
;

IF NOT "Mx_AchseX+" THEN
"Qx_HBot_A1_cw" := 0;
"Qx_HBot_A2_ccw" := 0;
END_IF
;
END_REGION

kann das so überhaupt funktionieren ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
steure die Merker über das touch panel als info

danke für die Antworten

komischerweise funktioniert die Y richtung aber die x nicht



REGION HBot X+
// HBot in X+ Richtung ansteuern mit Hand Controller
IF "Mx_AchseX+" THEN
"Qx_HBot_A1_cw" := 1;
"Qx_HBot_A2_ccw" := 1;
END_IF
;

IF NOT "Mx_AchseX+" THEN
"Qx_HBot_A1_cw" := 0;
"Qx_HBot_A2_ccw" := 0;
END_IF
;
END_REGION

REGION HBot X-
// HBot in X- Richtung ansteuern mit Hand Controller
IF NOT "Ix_Sicherheitskreis_Bereit" AND "Mx_AchseX-" THEN
"Qx_HBot_A1_ccw" := 1;
"Qx_HBot_A2_cw" := 1;
END_IF
;

IF NOT "Ix_Sicherheitskreis_Bereit" AND NOT "Mx_AchseX-" THEN
"Mx_Motor1_X_Achse" := 0;
"Mx_Motor2_X_Achse" := 0;
END_IF
;
END_REGION

REGION HBot Y+
// HBot in Y+ Richtung ansteuern mit Hand Controller
IF NOT "Ix_Sicherheitskreis_Bereit" AND "Mx_AchseY+" THEN
"Qx_HBot_A1_ccw" := 1;
"Qx_HBot_A2_ccw" := 1;
END_IF
;

IF NOT "Ix_Sicherheitskreis_Bereit" AND NOT "Mx_AchseY+" THEN
"Qx_HBot_A1_ccw" := 0;
"Qx_HBot_A2_ccw" := 0;
END_IF
;
END_REGION

REGION HBot Y-
// HBot in Y- Richtung ansteuern mit Hand Controller
IF NOT "Ix_Sicherheitskreis_Bereit" AND "Mx_AchseY-" THEN
"Qx_HBot_A1_cw" := 1;
"Qx_HBot_A2_cw" := 1;
END_IF
;

IF NOT "Ix_Sicherheitskreis_Bereit" AND NOT "Mx_AchseY-" THEN
"Qx_HBot_A1_cw" := 0;
"Qx_HBot_A2_cw" := 0;
END_IF
;
END_REGION
 
Das kannst du vereinfachen:

aus
Code:
REGION HBot X+
    // HBot in X+ Richtung ansteuern mit Hand Controller
    IF "Mx_AchseX+" THEN
        "Qx_HBot_A1_cw" := 1;
        "Qx_HBot_A2_ccw" := 1;
    END_IF
    ;
    
    IF NOT "Mx_AchseX+" THEN
        "Qx_HBot_A1_cw" := 0;
        "Qx_HBot_A2_ccw" := 0;
    END_IF
    ;
END_REGION

machst du:
Code:
"Qx_HBot_A1_cw" := "Mx_AchseX+";
"Qx_HBot_A2_ccw" := "Mx_AchseX+";

Dies kannst du mit vielen deiner Stellen machen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
IF NOT "Ix_Sicherheitskreis_Bereit" AND "Mx_AchseX-" THEN
"Qx_HBot_A1_ccw" := 1;
"Qx_HBot_A2_cw" := 1;
END_IF

würde das so auch funktionieren ?
"Qx_HBot_A1_ccw" := NOT "Ix_Sicherheitskreis_Bereit" AND "Mx_AchseX-"
"Qx_HBot_A2_cw" := NOT "Ix_Sicherheitskreis_Bereit" AND "Mx_AchseX-"
 
würde das so auch funktionieren ?
"Qx_HBot_A1_ccw" := NOT "Ix_Sicherheitskreis_Bereit" AND "Mx_AchseX-"
"Qx_HBot_A2_cw" := NOT "Ix_Sicherheitskreis_Bereit" AND "Mx_AchseX-"

Ja, funktioniert.

Wenn du ein BOOL true oder false setzt, schreib besser = TRUE oder = FALSE statt := 1:
"Qx_HBot_A2_cw" := 1;

:= 1 und := 0 funktioniert zwar auch, aber wenn man TRUE oder FALSE schreibt, sieht man direkt dass es ein BOOL-TYP
ist. Bei := 1 oder := 0 könnte man denken, dass es ein INT o.ä. ist
 
Also wenn du den Ausgang in deinem Baustein auf TRUE setzt, und ihn in keinem anderen Baustein wieder zurücksetzt, kannst du einen eizigen Ausgang schon mehrfach ansprechen

Code:
If XXX and YYY and ZZZ then
Q2.6 := TRUE;
ELSIF XXX and YYY and not ZZZ then
Q2.6 := FALSE;
END_IF;
Dieser Code könnte vereinfacht als
Code:
Q2.6 := ZZZ;
geschrieben werden. Das würde aber auch bedeuten, dass jeder Baustein der diese Zuweisung enthält sie wieder zurücksetzen könnte.
Wenn du das in eine IF- Abfrage packst, wird die Bedingung nur ausgeführt, wenn die IF- Abfrage wahr ist, andernfalls wird sie übersprungen.
Wenn jetzt in keinem anderen Baustein der abgearbeitet wird die Bedingung XXX oder YYY TRUE ist, entscheidet nur dieser eine Baustein über das Wohl und wehen des Ausgangs.
Falls du z.B. deine Anlage ortsveränderlich ist, und nur wenn sie an einer bestimmten Stelle steht, darf sie die Düse oder ein Ventil ansteuern.

Ist meiner Ansicht nach ein Not- Nagel, den man benutzen kann. Man sollte aber sehr vorsichtig sein, denn damit kann man Sachen anstellen, die findet man bei der Fehlersuche niemals wieder.
 
Zuletzt bearbeitet:
Zurück
Oben