TIA Migration von Funktionsbausteinen (STEP 7 V5.5 >> STEP 7 V13 Professional)

Kai Schulz

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

kurze Frage:

Ist es im TIA Portal generell nicht mehr möglich, OUT-Parameter eines FBs, innerhalb des FBs einzulesen oder kann man da irgendwo etwas einstellen (Syntaxprüfung o. ä.?)?

Wenn es nicht mehr geht, warum? - Der alte Wert des OUT-Parameters (aus der letzten Bearbeitung des FBs im vorherigen Zyklus) sollte doch, mit erneuter Übergabe des Instanzdatenbausteins, aktuell wieder zur Verfügung stehen oder hat sich an der generellen Arbeitsweise von FBs etwas geändert?

Oder ist es einfach so, das BigS uns ärgern will?


Gruß Kai
 
Möglich ist das schon aber TIA gibt dafür eine Warnung raus beim übersetzen.
Da man aber am liebsten 0 Fehler / 0 Warnungen haben möchte muß Du hier deine Bausteine etwas modifizieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der alte Wert des OUT-Parameters (aus der letzten Bearbeitung des FBs im vorherigen Zyklus) sollte doch, mit erneuter Übergabe des Instanzdatenbausteins, aktuell wieder zur Verfügung stehen oder hat sich an der generellen Arbeitsweise von FBs etwas geändert?
Da ist leider nicht sicher. Der OUT-Parameter ist eine öffentliche Variable und kann außerhalb des FB verändert worden sein.


Oder ist es einfach so, das BigS uns ärgern will?
BigS passt die Warnungen ans Niveau der Programmierer an ;)

Harald
 
Hallo Harald,

Du schriebst:

"Da ist leider nicht sicher. Der OUT-Parameter ist eine öffentliche Variable und kann außerhalb des FB verändert worden sein."

Ja, der OUT-Parameter wird auf eine "öffentliche" Variable geschrieben. Aber eben nur geschrieben(!), er wird nicht im FB eingelesen! - Daher ist es vollkommen wurscht, ob er außerhalb des FBs verändert wird. Auf die Instanzdaten selber greife ich außerhalb der FBs nicht zu. Eventuell meinst Du "IN-/OUT-Parameter" (>> die werden auch eingelesen) oder "FCs" (>> da werden nur Zeiger auf die jeweiligen Adressen gebildet)?

"BigS passt die Warnungen ans Niveau der Programmierer an :wink:"

Ja, man sieht, dass das auch nötig ist :cool: !!!


Gruß Kai
 
Die OUT-Parameter werden nicht in den FB eingelesen - soweit scheint noch alles in Ordnung.
Doch nun willst Du im FB den OUT lesen und gehst davon aus, daß der noch den Wert vom letzten Durchlauf hat - was aber nicht sicher ist. Deshalb warnt TIA. Das war auch schon in Step7 classic falsch.

Der OUT-Parameter selber ist die öffentliche Variable und kann gelesen und auch beschrieben werden. Der Parameter muß noch nichtmal beschaltet sein. Siehe dieses Beispiel:
Code:
CALL "MyFB", "IDB"
 Out1 := M12.3

U "irgendwas"
= M12.3          //das hat keinen Einfluß auf die Instanz
[COLOR="#FF0000"]= "IDB".Out1     //das verändert den Out1 der Instanz![/COLOR]

(Das auch die STAT-Variablen von außerhalb verändert werden können steht hier nicht zur Debatte.)

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

Du schriebst:

"Der OUT-Parameter selber ist die öffentliche Variable und kann gelesen und auch beschrieben werden."

Das weiß ich, tue es aber (bewusst) niemals! - Ich hatte das allerdings auch schon geschrieben:

"...Auf die Instanzdaten selber greife ich außerhalb der FBs nicht zu. ..."

Ich halte das "externe" Ändern von Instanzdaten für logisch unschlüssig!


Gruß Kai
 
ich glaube Ihr redet aneinander vorbei ;) Poste doch mal den genauen Wortlaut der TIA-Warnung.

Ich denke TIA warnt davor, dass, wenn woanders der M12.3 nochmal verändert wurde, MyFB das intern nicht mitbekommt, da der Wert im IDB nicht geändert wird...

Gruß.
 
Das weiß ich, tue es aber (bewusst) niemals!
TIA weiß aber nicht, daß Du einer von den Guten bist und warnt nun eben generell.

Die Warnung ist schon richtig so. Das Zugreifen und auch Schreiben der öffentlichen und der nichtöffentlichen Instanzdaten von außerhalb kann schnell versehentlich passieren oder ist sogar das Konzept von HMI (wie z.B. PCS7 und viele selbstgestrickte "geniale" Sachen). Als Programmierer kann man nicht wissen, was der Anwender später mit der SPS noch tut - also solche Unsauberkeiten besser generell vermeiden.

Und: "ich greife niemals zu" - hast Du noch nie IEC-Timer ala #Timer1.Q abgefragt oder die E/A-Parameter von Regelbausteinen außerhalb des Bausteinaufrufs manipuliert? Viele "clevere" SPS-Programmierer verzichten völlig auf das lästige Beschalten von FB-Übergabeparametern und greifen nur direkt drauf zu (besonders in textuellen Programmiersprachen wie SCL) ... lustig wird das dann, wenn der FB und der Zugreifer in verschiedenen Tasks (OB-Ebenen) liegen. Man könnte endlos diskutieren...

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich glaube Ihr redet aneinander vorbei ;) Poste doch mal den genauen Wortlaut der TIA-Warnung.
TIA warnt, wenn im FB ein OUT-Parameter gelesen wird. Legt man den Parameter in STAT und gibt eine Kopie an einen OUT dann ist TIA zufrieden.

Harald
 
Ich halte das "externe" Ändern von Instanzdaten für logisch unschlüssig!
Gruß Kai

Kann man So oder so sehen ;) Wenn ich's mache (z.B. durch WinCC) dann versuche ich es zumindest auf IN-Signale zu beschränken ;)

AS/OS übersetzen basiert darauf, die IDBs in WinCC anzulegen und dann natürlich auch von WinCC aus zu beschreiben. Aber das hat was mit dem generellen Programmierstil zu tun.
Das Lesen von OUT Werten im FB, erst recht wenn sie vorher im FB noch nicht beschrieben wurden, halte ich auch für nicht ganz sauber. Ich verwende dort immer STAT und mache am Bausteinende die Zuweisung aller OUT...

Aber alles Ansichtssache :)

Gruß.
 
Hallo Harald,

Du schriebst:

"Und: "ich greife niemals zu" - hast Du noch nie IEC-Timer ala #Timer1.Q abgefragt..."

Nö, ich baue alle meine Timer und Zähler selber!

"...oder die E/A-Parameter von Regelbausteinen außerhalb des Bausteinaufrufs manipuliert? Viele "clevere" SPS-Programmierer verzichten völlig auf das lästige Beschalten von FB-Übergabeparametern und greifen nur direkt drauf zu (besonders in textuellen Programmiersprachen wie SCL) ... lustig wird das dann, wenn der FB und der Zugreifer in verschiedenen Tasks (OB-Ebenen) liegen."

Und genau deshalb mache ich das nicht; ich finde das so richtig scheiße! - Habe ca. 10 Jahre meines Berufslebens ausschließlich S5-/S7-Programme anderer Programmierer geändert und kenne somit alle "Spielarten" und leider auch alle "quick and dirty"-Lösungen...

"Man könnte endlos diskutieren..."

Da bin ich vollkommen bei Dir :D !


Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke das der Warnung ist nur ein Hinweis, das der Programmierer vielleicht etwas misverstanden hat.
Es heisst ja "OUT", und obwohl es geht es zu lesen, dan sieht es nicht richtig aus.
Und vielleicht will der Programmierer tatsächlich den beschaltete OUT Variabel abfragen, was aber nicht funktioniert weil innerhalb von den FB, wird den interne IDB Variabel abgefragt.
Und was wenn den abgefragte Variabel ist Teil von ein kompleksen Datenstruktur, z.B defiert über ein UDT. Dann passiert den abfrage über Pointer, und man bekommt den Status von den beschaltete Variabel. Ist dies den Programmierer bekannt ?
mMn. macht es Sinn mit eine Warnung.
 
Hallo ducati,

Du schriebst:

"Das Lesen von OUT Werten im FB, erst recht wenn sie vorher im FB noch nicht beschrieben wurden, halte ich auch für nicht ganz sauber."

Ich habe nicht gesagt, das ich die OUT-Parameter nur lese; zuvor beschreibe ich sie selbstverständlich auch! - Sie müssen ja mindestens einmal initialisiert worden sein. Die Aussage bzgl. der richtigen Werte im IDB beim Aufruf des FBs kam ja nur daher, weil Harald bemerkte, dass die ja auch "manipuliert" sein könnten; sind sie bei mir aber eben nicht!

Das Zugreifen vom HMI auf IDBs hatte ich mir vor einigen Jahren abgewöhnt, habe es aber früher öfters gemacht. Gerade bei Änderungen, wo einem bestehenden Programm etwas hinzugefügt wurde, hat man auf diese Weise, alles schön "kompakt" beieinander; finde es aber trotzdem "unschön" und nutze "normale" DBs dafür!

"Ich verwende dort immer STAT und mache am Bausteinende die Zuweisung aller OUT..."

Das wird auch das Mittel meiner Wahl für das TIA Portal sein. Denn wie Harald schon sehr richtig bemerkte:

"Da man aber am liebsten 0 Fehler / 0 Warnungen haben möchte muß Du hier deine Bausteine etwas modifizieren."


Gruß Kai
 
"Ich verwende dort immer STAT und mache am Bausteinende die Zuweisung aller OUT..."

100 Punkte .... genau diese Änderungen muß man bei fast allen alten Step7 Bausteinen auch bei Org. Siemens Bausteinen machen.


Denn wie Harald schon sehr richtig bemerkte:

"Da man aber am liebsten 0 Fehler / 0 Warnungen haben möchte muß Du hier deine Bausteine etwas modifizieren."

0 Fehler / 0 Warnungen ..... Das bin ich..... und wie gerne würde ich mit einigen von euch ein Projekt machen...... komme auch ein paar Tage kostenlos zur Schlachtbank ;-)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sorry,

Denn wie UniMog schon sehr richtig bemerkte:

"Da man aber am liebsten 0 Fehler / 0 Warnungen haben möchte muß Du hier deine Bausteine etwas modifizieren."

Hatte da etwas verwechselt... Gruß Kai
 
Bei einigen von unseren Kunden die selber über Programmierer verfügen sind viele die sich über so etwas leider keine Gedanken machen.
Nach dem Motto .... Egal wenn es "nur" Warnungen sind..... Funktioniert ja alles....

Gruß

Schönes WE
 
Ist halt alles immer nur die Frage, wie lange man seinen eigenen guten Programmierstil durchhalten kann...

10 Projekte mit "morgen muss es laufen, komme was wolle" und man hat keine Lust mehr...

Und bei Maschinenstillständen mit x€ Ausfallkosten pro Stunde interessiert sicherlich die wenigsten der gute Programmierstil.

Also nicht immer ist der Programmierer Schuld ;) Aber manchmal schon.

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

auch ich habe bisher in FBs die Ausgänge wieder lesend bearbeitet. Beim TIA kommt ja bekanntlich eine Warnung.

Jetzt schreibt ihr, im Programm statische Variablen zu nutzen und erst am Ende des Bausteins auf den OUT schreiben, wäre sauberer. Aber ich kann doch von außerhalb genauso auf den statischen Bereich eines IDB zugreifen, wie auf den OUT Bereich. Also wieso ist das eine bessere (oder sicherere) Variante :confused: Man kann zwar so die Compiler-Warnung verhindern, ist aber doch das selbe in grün...


Gruß
Rudelz
 
Zuletzt bearbeitet:
Aber ich kann doch von außerhalb genauso auf den statischen Bereich eines IDB zugreifen, wie auf den OUT Bereich. Also wieso ist das eine bessere (oder sicherere) Variante :confused: Man kann zwar so die Compiler-Warnung verhindern, ist aber doch das selbe in grün...

Wer behauptet denn, dass zugriffe von aussen auf den Statischen Bereich eines FBs eine gute oder gar sichere Variante wäre? Das ist doch genau DIE Igitt Variante.

mfG René
 
Wer behauptet denn, dass zugriffe von aussen auf den Statischen Bereich eines FBs eine gute oder gar sichere Variante wäre? Das ist doch genau DIE Igitt Variante.

mfG René
Natürlich ist es KEINE gute Variante. Genauso wenig wie der Zugriff von außen auf die OUT Variablen. Aber beide Varianten sind MÖGLICH und jetzt muss ich meine Bausteine umprogrammieren, nur um die Siemens Warnung zu vermeiden, obwohl es dann immer noch nicht "sicher" ist :? Also warum der Aufwand?
 
Zurück
Oben