Problem mit 2 gleichen FC´s

smartie

Level-1
Beiträge
298
Reaktionspunkte
22
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich bin gerade am verzweifeln mit einem FC. Genauer gesagt mit zwei gleichen FC´s. Zu Beginn muss ich noch erwähnen das ich mich mit FC´s und FB´s noch nicht wirklich beschäftigt habe und gerade meine ersten Gehversuche in dieser Richtung mache. (Also bitte verzeiht mir meine Unwissenheit ;))

Zur Steuerung von zwei Servomotoren habe ich mir einen FC geschrieben und dann einmal kopiert.

Beide FC´s (FC100 und FC101) sollen permanent bearbeitet werden und auf ein Start-Signal hin eine bestimmte Aktion ausführen.

Mein Problem besteht jetzt leider darin das, sobald ich den einen FC starte (#Y_START), der andere (FC101) genau die gleiche Ausgabe hat (jedenfalls an den Ausgängen (#Y_OUT und #X_OUT).

Aber ich versteh einfach nicht warum!
Kann mir da jemand von euch weiterhelfen???

Im Anhang hab ich die Bausteine FC40 (Aufruf), FC100 und FC101 als AWL Quelle gepostet (einfach umbenennen).

Vielen Dank schon mal im vorraus.

P.S.: Mir ist gerade noch aufgefallen das bei beiden FC´s die Variablen gleich heißen. Das hatte ich Testweise schon mal geändert (s.Bild NW2.jpg) hatte aber auch keinen Erfolg.

Gruß smartie
 

Anhänge

  • Antriebe.txt
    20,3 KB · Aufrufe: 21
  • NW1.JPG
    NW1.JPG
    31,1 KB · Aufrufe: 32
  • NW2.JPG
    NW2.JPG
    30,8 KB · Aufrufe: 21
Zuletzt bearbeitet:
Hallo!

Ich habe das Programm nur kurz mal überflogen aber ich glaube dein Problem liegt in den Temp - Variablen.
Du hast für Temp - Variablen Setzen und Rücksetzen verwendet und das würde nur funktionieren wenn du die Variablen am Anfang von deinem Programm rücksetzt sonst kann es passieren das die Lokaldaten von deinem vorhergehenden FC schon gesetzt sind.

godi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
da die FC´s beide das gleiche machen, hätte einer gereicht ... einfach X und Y weglassen ... das klärt jtzt zwar noch nicht dein problem - welches ich noch NICHT wirklich verstehe - trägt aber vielleicht zum verständnis von funktionen bei ...

Du hast für Temp - Variablen Setzen und Rücksetzen verwendet und das würde nur funktionieren

setzen und rücksetzen funktioniert soweiso nur auf out und inout in FC's und zusätzlich STAT in FB's ... verrückte welt ... aber das mit der lokalen adressierung ála L 0.0 könnte eines der probleme sein!
 
Zuletzt bearbeitet:
Du darfst keine temporären Variablen setzen, und dann erwarten, daß diese Variablen im nächsten Zyklus noch den korrekten Wert haben.

Im gleichen Zusammenhang steht damit, daß eine, im Baustein FC100 gesetzte TempVar

S #Y_TTemp_OUT4;

im gleich darauf folgenden Baustein FC101 auch gesetzt ist, da dieser Baustein ja seine Variablen genauso auf den Lokaldatenstack packt. Die Bausteine sind identisch, kein anderer Baustein überschreibt zufällig dazwischenliegend die Lokaldaten, also liegen diese Lokaldaten in beiden Bausteinen praktisch auf den selben Adressen und damit auf den selben Bits.

Entweder du nimmst FB und packst die Variablen

Y_Temp_Pos_erreicht : BOOL ;
Y_TTemp_OUT1 : BOOL ;
Y_TTemp_OUT2 : BOOL ;
Y_TTemp_OUT3 : BOOL ;
Y_TTemp_OUT4 : BOOL ;

in den Stat-Bereich, oder du legst noch ein weiteres Wort als "Speicher" (INOUT) an den FC und nutzt die Bits dieses Wortes (Kannst natürlich auch 5 zusätzliche Bool anlegen, aber das sieht nicht so toll aus.)
 
Zuletzt bearbeitet:
da die FC´s beide das gleiche machen, hätte einer gereicht ... einfach X und Y weglassen

Das hatte ich am Anfang ja auch, und testweise habe ich dann zwei FC´s mit unterschiedlicher Beschriftung erstellt.

aber das mit der lokalen adressierung ála L 0.0 könnte eines der probleme sein!

Steh grad am Schlauch, aber den Satz versteh ich net! *Schäm"



Ralle schrieb:
Im gleichen Zusammenhang steht damit, daß eine, im Baustein FC100 gesetzte TempVar S #Y_TTemp_OUT4;

im gleich darauf folgenden Baustein FC101 auch gesetzt ist

Ja, aber da heisst sie jetzt #X_TTemp_OUT4, das dürfte doch dann nichts machen, oder?


Ralle schrieb:
Entweder du nimmst FB und packst die Variablen

Y_Temp_Pos_erreicht : BOOL ;
Y_TTemp_OUT1 : BOOL ;
Y_TTemp_OUT2 : BOOL ;
Y_TTemp_OUT3 : BOOL ;
Y_TTemp_OUT4 : BOOL ;

in den Stat-Bereich

Das bedeutet also, ich kann in FB´s alle Variablen im STAT Bereich setzen?
Benötige ich dann auch einen DB zu meinem FB? - Ich nehme an JA.
Wird der dann automatisch generiert?

Sorry für meine Unwissenheit, dachte ich trau mich da mal ran und steh jetzt am Schlauch.

Gruß smartie
 
Zuviel Werbung?
-> Hier kostenlos registrieren
aber das mit der lokalen adressierung ála L 0.0 könnte eines der probleme sein!

Steh grad am Schlauch, aber den Satz versteh ich net! *Schäm"

zum einen ist es unsauber lokale speicherbereiche direkt zu adressieren, zum anderen liegen die bereiche bei dir im temp-bereich und können nicht gesetzt und/oder rückgesetzt werden, da sie nur einen zyklus lang gültig sind!
Das bedeutet also, ich kann in FB´s alle Variablen im STAT Bereich setzen?
Benötige ich dann auch einen DB zu meinem FB? - Ich nehme an JA.
Wird der dann automatisch generiert?
die instanzen werden beim aufrauf und angabe des jeweiligen db`s automatisch generiert, eine andere möglichkeit stellt die multiinstanz dar ... suchfunktion dazu benutzen
 
Ja, aber da heisst sie jetzt #X_TTemp_OUT4, das dürfte doch dann nichts machen, oder?

Gruß smartie

Wie die heißt ist eigentlich egal, wichtig ist, daß sie vom LStack kommt und auf diesem auf einer bestimmten Stelle liegt. Den LStack beschmiert jeder FC/FB, ohne Rücksicht, deswegen heißt er ja Lokal.

Das bedeutet also, ich kann in FB´s alle Variablen im STAT Bereich setzen?
Benötige ich dann auch einen DB zu meinem FB? - Ich nehme an JA.
Wird der dann automatisch generiert?

Gruß smartie

Wenn du einen FB in dein Programm einfügst und einen IDB angibst, den es noch nicht gibt und der keine Symbolik besitzt, die nicht auf diesen FB lautet, wird der DB erzeugt. (Step7 fragt dich!)

Call FB100, DB100
 
Zuletzt bearbeitet:
So jetzt gehts,

ich habe mir einen FB angelegt den ich mir einmal kopiert habe und für
jeden der beiden Antriebe hernehme.

Ich habe alle TEMP Variablen aus dem FC in STAT Variablen am FB kopiert.

Ich nehme an die muss ich irgendwie, wenn der FB das erste mal aufgerufen wird zurück setzen? Wie würde ich das dann machen? Gibts da ne einfache Möglichkeit, oder brauch ich das gar nicht?

Ich schau mir das dann morgen mal an, für heute ist FEIERABEND ! :p

Vielen Dank euch allen für die schnelle Hilfe, Gute Nacht.

Gruß smartie
 
Zurück
Oben