TIA Problem mit Funktionsbausteinen in TIA Portal

Paule79

Level-1
Beiträge
62
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich habe folgendes Problem:
Ich habe einen Funktionsbaustein erstellt um auf ein Device zugreifen und das steuern zu können. Dazu verwende ich hauptsächlich "RDREC" und "WRREC".
Damit greife ich über die HW-Kennung und den Index-Parameter auf die entsprechenden Werte zu.
Er soll kompatibel für die S7-1200 und S7-1500 sein.

Mit einem Device funktioniert dieser perfekt ohne Probleme. Nur wenn ich zwei Devices verwende, dann funktioniert immer nur der Erst verwendete. Beim zweiten erhält man dann den Status Error bei den Anweisungen für die Dezentrale Peripherie.

Jemand eine Idee woran das liegen kann? Werden mehr Informationen benötigt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für deine Antwort. Habe ich versucht. Jedoch immer einer in "Error" Stellung.

InkedError_LI.jpg

ID ist eben die HW-Kennung vom Gerät. Ich musste den Index Parameter... sowie den Schreibparameter unkenntlich machen.

Ich komm einfach nicht auf den Fehler... :(
 
Warum musst Du Parameter unkenntlich machen? Damit wir Deinen Fehler nicht sehen?

Wenn man einen Baustein mehrmals bzw. für verschiedene Geräte aufrufen will, dann muß man alle je Aufruf/Instanz unterschiedlichen Parameter (als Aufrufparameter) übergeben und im Baustein nicht fest sondern mit den übergebenen Parametern beschalten.

Harald
 
Hallo Harald,
danke für deine Antwort. Nein, es sind Daten die ich nicht nach außen geben soll/darf. Bin Student und aktuell in der Praxisphase in einer Firma.

Ich bin hingegangen und habe die EN (enable) Eingänge der Bausteine immer so beschaltet, damit ich den richtigen aktiviert habe. Aber es funktioniert nicht wie gedacht.
Verstehe ich deinen Text richtig, dass ich die unterschiedlichen Parameter von außen eingeben? Jedoch unterscheiden die Geräte sich nur in der HW-Kennung. Die Zugriffsparameter (Index) sind identisch.

Paul
 
Hallo Harald,
danke für deine Antwort. Nein, es sind Daten die ich nicht nach außen geben soll/darf. Bin Student und aktuell in der Praxisphase in einer Firma.

Ich bin hingegangen und habe die EN (enable) Eingänge der Bausteine immer so beschaltet, damit ich den richtigen aktiviert habe. Aber es funktioniert nicht wie gedacht.
Verstehe ich deinen Text richtig, dass ich die unterschiedlichen Parameter von außen eingeben? Jedoch unterscheiden die Geräte sich nur in der HW-Kennung. Die Zugriffsparameter (Index) sind identisch.

Paul

Dein Problem ist das Du den Baustein etwa 100 mal oder häufiger aufrufst.

EN zu deaktivieren/aktivieren ist der falsche Weg. Damit nimmt man Bausteine komplett raus. Wenn aber nun eine Verbindung angestossen wurde, diese nicht beendet, enable aber wegfällt, dann gibts keinen Abschluss. Timeout dauert.

Weiters hast Du REQ=1 - Heisst, mit jedem Zyklus aktivierst Du eine Aufgabe, daher die zu häufigen Aufrufe.
Die CPU wird damit nicht klarkommen und alle Ressourcen belegen, wodurch sie binnen kürzester Zeit auf Error geht, je nach Dauer des Aufrufs sogar bevor der erste Aufruf beendet wurde.
Wenn man read dann write programmiert, dann würde der read den write dauerhaft blockieren, in jedem Zyklus.

Besser ist z.B.:
Merker nutzen:
1, wenn RDREC done meldet
0 wenn WRREC done meldet

Aufruf:
RDREC wenn Merker=0 und RDREC_Busy false und WRREC Busy false
S Merker P_Trig RDREC_DONE
WRREC wenn Merker=1 und RDREC_Busy=false und WRREC Busy=false and RDREC_error=false
R Merker P_Trig WRREC_DONE

Dann würden immer abwechselnd diese beiden Bausteine den gleichen Bereich lesen, dann schreiben, letzteres aber nur wenn Read keinen Fehler verursacht hat. Dann würde man das Schreiben in der Regel weglassen und eine Fehlerbehandlung durchführen.
Ein Aufruf geht über mehrere Zyklen, halt so lang wie es dauert.

Da Du einen FB nutzen willst (mache ich auch immer), einfach im statischen Teil "Aufrufmerker":bool

Der obere Aufruf ist kurz gehalten, kann natürlich größer werden je nachdem was Du brauchst.
Wenn Du mehrere FBs nutzen willst kann ab einer bestimmten Anzahl auch ein Ressourcenproblem aufkommen. Das unterbindest Du indem Du die Anzahl vorhandener Ressource ausschöpfst und nur soviele FBs starten lässt wie auch vorhandene Ressourcen benötigt werden.
Also bei 500 Aufrufen zum Beispiel 50 Aufrufe mit je 10 Ressourcenanbindungen gleichzeitig. Heisst - 50 Durchläufe. Wie lang das dauert und ob es sinnvoll ist, ist eine andere Frage.

Warum nochmal ist eine Geheimhaltung des Index nötig? Da sieht glaube ich keiner einen Sinn drin.


EDIT: Ich sehe, das alle Ä Ö Ü unleserlich sind. Kommt bei mir häufiger vor. Kann mir jemand den Workaround geben? Nutze Win10/Chrome. Sorry das ich die Fehler da grad nicht rausnehme.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo escride1,

vielen Dank für deine Nachricht, auch wenn das danke ziemlich spät kommt!
Ich war wieder in der Theoriephase und habe deshalb nicht weiter an diesem Projekt gearbeitet.
Jetzt geht es eben weiter.
Danke ich werde mir das anschauen und mich ggfs. bei fragen helfen!
 
Zurück
Oben