FC wird nicht gelesen ?

Du rufst den FC zwar auf, aber Du übergibst beim Aufruf doch nur Werte und nutzt beim Aufruf weder den Rückgabewert des FC noch irgendwelche Output-Variablen. Was soll der FC denn dann machen
ich will es unten beim AP1 merker benutzen
6.png
hier
, oder setzt du intern irgendwelche globalen Variablen?
ich weiß es nicht ob diesen Aufruf Sinn macht, aber ich dachte wenn ich die Ausgänge und Eingänge zuweise dann habe ich Ruhe, aber ich denke so funktioniert FC nicht
8.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Fragezeichen sind auch normal. Im Gegensatz zu einem FB, wird einem FC bei jedem Aufruf für die lokalen Variablen ein neuer Speicherbereich zugewiesen. Aus diesem Grund müssen Outputvariablen auch direkt beim Aufruf eines FCs verarbeitet werden. Ein Konstrukt wie bWert01 := fbTest01.Wert01; funktioniert bei einem FC nicht. Da die Variablen nach der Ausführung nichts Sinnvolles mehr enthalten zeigt Codesys ??? an. Möchtest Du die Werte sehen, müsstest Du einen Breakpoint setzen.
Du versuchst in einem FC eine Schrittkette und Timer zu nutzen, was im Normalfall nicht funktioniert, da, soweit die Variable für die Schritte im FC deklariert wurden, diese beim nächsten Aufruf des FC undefinierte Werte oder ihren Initialwert haben, das Selbe gilt auch für Timer-FBs, diese fangen bei jedem Start bei 0 wieder an.
Außerdem rufst Du, soweit dies nicht durch eine Bedingung verhindert wird, den FC in Deinem Programm mehrfach auf. Hätten die Variablen tatsächlich Ihre Werte behalten, würde der zweite Aufruf da weitermachen, wo der erste aufgehört hat.
Ein FC existiert nur einmal, möchtest Du mehrere Instanzen nutzen musst Du einen FB nutzen.
Alles in allem glaube ich, Du musst Dich nochmals mit den Unterschieden von FCs und FBs auseinandersetzen.
 
Oh Mann, die Sache mit den FCs und wie man ihn nutzt hast Du echt noch nicht begriffen.
Erstmal das = TRUE kannst Du Dir schenken, dann solltest Du auf die Fehlermeldung achten, die sagt Dir genau was Sache ist oder besser was fehlt. Du rufst in der IF-Abfrage den FC ohne Parameter auf, das funktioniert nicht. Hat der FC Input-Variablen, müssen diese beim Aufruf mit angegeben werden.
 
Die Fragezeichen sind auch normal. Im Gegensatz zu einem FB, wird einem FC bei jedem Aufruf für die lokalen Variablen ein neuer Speicherbereich zugewiesen. Aus diesem Grund müssen Outputvariablen auch direkt beim Aufruf eines FCs verarbeitet werden. Ein Konstrukt wie bWert01 := fbTest01.Wert01; funktioniert bei einem FC nicht. Da die Variablen nach der Ausführung nichts Sinnvolles mehr enthalten zeigt Codesys ??? an. Möchtest Du die Werte sehen, müsstest Du einen Breakpoint setzen.
Du versuchst in einem FC eine Schrittkette und Timer zu nutzen, was im Normalfall nicht funktioniert, da, soweit die Variable für die Schritte im FC deklariert wurden, diese beim nächsten Aufruf des FC undefinierte Werte oder ihren Initialwert haben, das Selbe gilt auch für Timer-FBs, diese fangen bei jedem Start bei 0 wieder an.
Außerdem rufst Du, soweit dies nicht durch eine Bedingung verhindert wird, den FC in Deinem Programm mehrfach auf. Hätten die Variablen tatsächlich Ihre Werte behalten, würde der zweite Aufruf da weitermachen, wo der erste aufgehört hat.
Ein FC existiert nur einmal, möchtest Du mehrere Instanzen nutzen musst Du einen FB nutzen.
Alles in allem glaube ich, Du musst Dich nochmals mit den Unterschieden von FCs und FBs auseinandersetzen.
Danke für die Erklärung, sie hat mir sehr geholfen, FC besser zu verstehen!

Das heißt für mich eigentlich, dass FC für den Zweck, den ich brauche, fehl am Platz ist...
Oh Mann, die Sache mit den FCs und wie man ihn nutzt hast Du echt noch nicht begriffen.
Erstmal das = TRUE kannst Du Dir schenken, dann solltest Du auf die Fehlermeldung achten, die sagt Dir genau was Sache ist oder besser was fehlt. Du rufst in der IF-Abfrage den FC ohne Parameter auf, das funktioniert nicht. Hat der FC Input-Variablen, müssen diese beim Aufruf mit angegeben werden.
Ich habe es schnell gemacht, um dir zu zeigen, was ich meine :(

Aber ich brauche die Werte, deswegen werde ich einfach den FC in ein normales PRG ändern, da ich seine Werte gespeichert haben möchte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber ich brauche die Werte, deswegen werde ich einfach den FC in ein normales PRG ändern, da ich seine Werte gespeichert haben möchte.
Die Frage ist, ob ein PRG die richtige Wahl ist.
Ich muss leider gestehen, dass ich Dein Programmkonstrukt nicht so ganz verstehe und im Moment leider auch keine Zeit habe, mich damit auseinanderzusetzen, da ich beim Kunden sitze.
Was mir aber aufgefallen ist, ist, dass Du den FC mehrmals aufgerufen hattest in Deinem übergeordneten Baustein (PRG oder FB). Soweit beide Aufrufe unabhängig voneinander laufen sollen, wäre ein PRG auch ungeeignet. Ein PRG besitzt zwar im Gegensatz zu einem FC für lokale Variablen einen Speicher, der auch nach dem Aufruf erhalten bleibt, existiert aber, wie ein FC, nur einmal. Du rufst also bei jedem Aufruf des PRGs das selbe PRG auf und nicht eine zweite Instanz.
 
Die Frage ist, ob ein PRG die richtige Wahl ist.
Ich muss leider gestehen, dass ich Dein Programmkonstrukt nicht so ganz verstehe und im Moment leider auch keine Zeit habe, mich damit auseinanderzusetzen, da ich beim Kunden sitze.
Was mir aber aufgefallen ist, ist, dass Du den FC mehrmals aufgerufen hattest in Deinem übergeordneten Baustein (PRG oder FB). Soweit beide Aufrufe unabhängig voneinander laufen sollen, wäre ein PRG auch ungeeignet. Ein PRG besitzt zwar im Gegensatz zu einem FC für lokale Variablen einen Speicher, der auch nach dem Aufruf erhalten bleibt, existiert aber, wie ein FC, nur einmal. Du rufst also bei jedem Aufruf des PRGs das selbe PRG auf und nicht eine zweite Instanz.
Dann bleibt mir nichts anderes übrig, als im AP1-Programm eine Aktion zu erstellen und diese bedingt aufzurufen.
 
Zurück
Oben