TIA PLC Datentypen als InOut eines FB.... aber beim Aufruf "fehler"

Tmbiz

Level-2
Beiträge
562
Reaktionspunkte
15
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen, ich eine Problem mit einem Aufruf TIA 14

Ich habe eine FB der eine Säule steuern soll. Der FB hat den Namen Säule1 in dem FB habe ich im Bereiche InOut eine PLC Datentyp aufgerufen "Struct" hier liegen diverse Variablen in Bool.

call.PNG

FB case.jpg


Ich habe eine PLC Datentypen angelegt. "Kommando_Säule" und "Status_Säule" wenn ich denn Struct Kommando_Säule in Baustein unter "IN" einrichte, geht es ohne Probleme. Genau so wenn ich ihn unter Out einrichte. Keine Fehler und die Aufrufe im Programm funktionieren ohne Probleme.

Aber wenn ich ihn unter InOut einrichte, bekomme ich den Fehler wie in Bild 1 zu sehen.

Code:
U     "SchalterE80.0"
      =     "Säule1_DB".Kommandos.senken
      U     "SchalterE80.1"
      =     "Säule1_DB".Kommandos.heben_bis_oben
      U     "SchalterE80.2"
      =     "Säule1_DB".Kommandos.heben_bis_mitte

Sobald ich den PLC Datentyp im FB unter InOut aufrufe werden auch die ""Säule1_DB".Kommandos.senken" usw rot und es wird gesagt ungültiger Zugriff.

Ich habe es schon mit aktualisieren und übersetzen versucht. Aber es hat nichts geholfen. Warum ist es laut TIA nicht zulässig, den PLC Datentyp in einem FB im Bereich InOut aufzurufen?
 
Hallo Tmbiz,


Welche cpu Hast du?
Bei den Classic CPUs also 300/400 kann ich es dir mit Sicherheit sagen was fehlt. In so einen fall wenn an einen InOut Ein PLC Datentyp übergeben wird nur ein Pointer (Verweis auf die Adresse) übergeben. Die Daten werden nicht im IDB gespeichert also Call by Referenz.
du könntest einfacher weise einmal deinen PLC Daten Typ nochmal im Static Bereich des aufrufenden Fb ablegen und an die In Out Schnittstelle legen und dann mit diesen neuen Variablen im Programm weiterarbeiten.

ein direkter Zugriff auf die Variablen im IDB find ich eh immer ziemlich Pfui! Besonders wenn an 100 Stellen in Verschiedenen Fc geschrieben wird. Aber das ist wie immer Geschmacks Sache und den Programmierer überlassen.


Gruß Tia
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tmbiz,


Welche cpu Hast du?
Bei den Classic CPUs also 300/400 kann ich es dir mit Sicherheit sagen was fehlt. In so einen fall wenn an einen InOut Ein PLC Datentyp übergeben wird nur ein Pointer (Verweis auf die Adresse) übergeben. Die Daten werden nicht im IDB gespeichert also Call by Referenz.
du könntest einfacher weise einmal deinen PLC Daten Typ nochmal im Static Bereich des aufrufenden Fb ablegen und an die In Out Schnittstelle legen und dann mit diesen neuen Variablen im Programm weiterarbeiten.

ein direkter Zugriff auf die Variablen im IDB find ich eh immer ziemlich Pfui! Besonders wenn an 100 Stellen in Verschiedenen Fc geschrieben wird. Aber das ist wie immer Geschmacks Sache und den Programmierer überlassen.


Gruß Tia

Ich nutze hier eine 1512 SPS. Mein Kollege hat es gerade in Simatic Manager getestet und da gibt es so wie ich es hier in TIA aufgebaut habe.
 
Hallo Tmbiz,

habt ihr das Programm mal im PLC Sim laufen lassen?
Normalerweise sollte da Schluss sein.

Magst du es mal versuchen wie ich beschrieben habe?


Gruß Tia
 
Ich kann das Programm nicht auf die Steuerung laden. Wenn ich den PLC Datentyp in InOut einfüge. Kannst du mir bitte noch mal erklären, wie du das genau meinst? Ich verstehe nicht so richtig, was ich machen soll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tmbiz,

kein Problem du sollt deinen PLC Datentyp den du im InOut Bereich des Bausteins angegeben hast im Auferufenden Baustein nochmal Declarieren z.b in der Tabele oben im Stat Bereich. Und dann an die In Out Schnitstelle hängen. Dann kannnst du auf die neuen Variablen zugreifen.


Gruß Tia
 
Ich habe ich doch gemacht. oder bin ich gerade total auf den Holzweg?

In dem Baustein, in dem ich meine Logik schriebe, habe ich oben unter Input/Output InOutput alles eingefügt. In dem Baustein kann ich auch auf die Var zugreifen. Aber der Aufruf des Bausteins macht Probleme und auch wenn ich auf denn DB zugriefen möchte. Wenn ich denn PLC Datentyp unter Input aufrufe ist es keine Problem. Auch unter Output alles gut aber nicht unter InOut.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tmbiz,

ja es ist eine Art Umleitung. Du reservierst so einen Speicherbereiche für die Variablen im PLC Datentyp. Durch das kannst du dann auf die Variablen zugreifen! Im DB wo du auf in und Out zugreifen kannst ist für Variablen am In Out in gewissen Fällen kein Speicher vorhanden diesen Fall hast du gerade.

Gruß Tia
 
Hallo Tmbiz,

kennst St. du den Programmstyle Guide von Siemens? Auf Seite 55 wäre da dein Thema beschrieben.

wie gesagt leg deinen PLC Datentyp nochmal bei deinen Aufruf Baustein ( wo dein Problem ist) oben in der Static Tabelle an und schreibe diese neue Variable beim Kommandos an deine Baustein.

Gruß Tia
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tmbiz,

kennst St. du den Programmstyle Guide von Siemens? Auf Seite 55 wäre da dein Thema beschrieben.

wie gesagt leg deinen PLC Datentyp nochmal bei deinen Aufruf Baustein ( wo dein Problem ist) oben in der Static Tabelle an und schreibe diese neue Variable beim Kommandos an deine Baustein.

Gruß Tia
 
Jetzt habe ich das verstanden. Dadurch, dass man den PLC Datentyp unter Statische Variablen aufruft, kann man dann dem Aufruf eine Interface zuweisen wie man das will. Ich habe es nun so, dass ich die IO Variablen über eine Interface von Baustein zu Baustein gehe und die Ein und Ausgänge direkt auf den Baustein habe. Also am Aufruf, habe ich ein IQ für die gesamte Kommunikation und dann noch Endschalter usw und Ausgänge.

Danke für den Tipp
 
Zurück
Oben