Function Call in Step 7

motorguru

Member
Beiträge
23
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo zusammen,
ich bin anfaenger in SPS Programmierung. Ich habe ein kleine Funktion programiert und getestet. Das programm ist in Anhang. Kann jemand mir erklaeren, warum wenn ich presse I0.0 oder I1.0 oder I0.3 alle Ausgaenge Q0.0, Q1.0, Q5.0=1
Ich moechte eigentlich wie foglt
press I0.0 dann Ausgang Q0.0=1
press I1.0 damm Q1.0=0
Press I0.3 dann Q5.0=0

Wie kann ich korrigieren?

Danke
 

Anhänge

  • EX.rar
    287,2 KB · Aufrufe: 11
  • Fkt_On_Off_V1.rar
    290,6 KB · Aufrufe: 6
Zuletzt bearbeitet:

M-Ott

Well-known member
Beiträge
1.768
Punkte Reaktionen
365
Guten Morgen (zumindestens hier in Deutschland ist es gerade früh am Morgen).

Du hat einen klassischen Fehler im Umgang mit den temporären Variablen gemacht.
Temporäre Variable (TEMP) können ihren Zustand nicht von einem Bausteinaufruf bis zum nächsten Speichern, dass heißt, sobald man eine TEMP verwendet, muss man sie erst zuweisen, bevor man sie zuverlässig verwenden kann. Wenn man sie verwendet, bevor man sie zugewiesen hat, haben sie einen zufälligen Zustand.
Das kommt daher, dass TEMP nur für die Verwendung innerhalb eines Bausteins gedacht sind. Nach dem Bausteinaufruf wird der jeweilige Speicherbereich wieder freigegeben und der nächste Baustein verwendet ihn für seine TEMP. Aus diesem Grund sind TEMP ungeeignet für Variablen, deren Zustand im nächsten Aufruf vor einer Zuweisung wieder benötigt werden und aus dem gleichen Grund sind sie auch für SR-Glieder nicht verwendbar.

Die Varible "OUTPUT" in Deinem FC2 ist von außen im FC1 mit einer TEMP beschaltet, diese TEMP kann ihren Zustand nicht in den nächsten Aufruf mitnehmen, was dazu führt, dass der Zustand zufällig ist. Das ist ziemlich sicher der Grund für Dein Problem. Hier musst Du einen anderen Variablentyp verwenden. Entweder weichst Du auf einen Merker oder ein Datenbausteinbit aus oder Du machst aus dem FC1 einen FB und verwendest eine STAT-Variable.

Noch etwas Off-Topic: Angesichts der Kommentare in Deine Bausteinen würde mich interessieren, woher Du kommst. Ich tippe auf Südostasien.
 
OP
M

motorguru

Member
Beiträge
23
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Danke M-Ott fuer deine schnelle Antwort. Ich arbeite gerade mit SPS seit 4 Tage. Ich kenne nur mit KOP, wenn es geht und du Zeit haette, can du mir eine korrekte version korrigieren?
Danke

@ du hast recht ich komme aus Vietnam
 

M-Ott

Well-known member
Beiträge
1.768
Punkte Reaktionen
365
Zuviel Werbung?
->Hier kostenlos registrieren
Ich habe mir das Programm gerade nochmal genauer angeschaut.
Es ist doch mehr Arbeit, als ich dachte, und ich glaube nicht, dass ich in nächster Zeit dazu komme. Sorry.
Es sind noch mehr Fehler in Zusammenhang mit den TEMP-Variablen.

Für die SR-Glieder und die Flankenauswertungen können auch keine TEMP verwendet werden. Es wird am besten sein, wenn Du FB daraus machst und die entsprechenden Variablen in den STAT-Bereich legst.
Aus einer FC einen FB zu machen geht am einfachsten, indem Du einen neuen FB erstellst, dann den entsprechenden FC und den neuen FB öffnest und dann zuerst den Variablendeklarationsteil und dann Netzwerk für Netzwerk von der FC in den FB kopierst.

Wenn Du Probleme oder Fragen hast, bekommst Du hier natürlich Hilfe.
 
OP
M

motorguru

Member
Beiträge
23
Punkte Reaktionen
0
ich habe das programm einfacher gemacht, kannst du mir in FB umschreiben (siehe Anhang in Fkt_On_Off_V1.Rar) , ich weisse nicht wie ich FB mit formal Para aufrufe, es braucht irgendwie noch DB Block??
 

M-Ott

Well-known member
Beiträge
1.768
Punkte Reaktionen
365
Der DB, den Du beim Aufruf eines FB angeben musst, ist der Instanz-DB. Wenn Du einen FB-Aufruf programmierst (CALL FBxx, DBxx), muss der Baustein noch nicht vorhanden sein. Du wirst dann darauf hingewiesen, dass der Datenbauistein nicht existiert und gefragt, ob er erzeugt werden soll. Hier musst Du mit "Ja" antwrtoen. Der Instanz-DB wird dann automatisch erzeugt. Du musst für jeden FB-Aufruf eine andere DB-Nummer angeben.
 
OP
M

motorguru

Member
Beiträge
23
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
hi ich habe die Funktion in Funktion Block umgewandelt, wie du gesagt hast, es lauefe aber leider auch nicht richtig. Siehe Anhang
 

Anhänge

  • FB_On_Off_V1.rar
    293,8 KB · Aufrufe: 1
Zuletzt bearbeitet:

M-Ott

Well-known member
Beiträge
1.768
Punkte Reaktionen
365
Du musst noch verschiedene Variable vom TEMP-Bereich in den STAT Bereich verschieben: Alle, von den SR-Gliedern und den und den Flankenauswertungen "-(N)-" und "-(P)-" müssen vom TEMP in den STAT Bereich. Anschließend musst Du noch die Instanz-DBs neu erzeugen. Du erkennst die nicht aktuellen DBs daran, dass die DB-Nummer (-Name) auf dem FB in rot geschrieben ist. Du musst kurz dorthin klicken. Anschließend erklärt Dir das Programm, dass der DB nicht aktuell sei und ob er neu erzeugt werden soll. Hier musst Du mit "Ja" antworten.
 
OP
M

motorguru

Member
Beiträge
23
Punkte Reaktionen
0
Hier noch mal einer version in dem ich verwende FB, und keine R,S oder (P) benutze. Es lauefe aber auch net:rolleyes:
 

Anhänge

  • FB_On_Off_V2.rar
    296 KB · Aufrufe: 3
Oben