Step 7 Schreibzugriff auf IN Formalparameter eines FC's

voni_1

Level-2
Beiträge
68
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Wertes Forum!

Ich bin wieder mal auf ein Thema gestoßen, welches ich gerne im Forum diskutieren möchte...

Ab und an kam es bei einer Anlage zu vorerst unerklärlichen Effekten...
Und heute habe ich möglicherweise die Ursache dafür gefunden...

Der Ersteller des Programmes hat SCHREIBEND auf einen IN Formalparameter eines FC's zugegriffen.
Dass dies nicht "erlaubt" ist, ist mir ja bekannt. - Neu war mir aber, dass es überhaupt "funktioniert" und Schreibzugriffe auf IN Parameter tatsächlich rausgeführt werden. ... :confused:
-> aber manchmal eben auch nicht :-?


Warum werden eigentlich überhaupt IN Parameter mit Schreibzugriffen nach Außen geführt???
Welche Szenarien können nun entstehen, dass dies eben nicht funktioniert?

lg,
voni
 
Zuletzt bearbeitet:
Habe noch etwas gesucht und folgendes gefunden....

Habe schon vermutet, dass es sich um den L-Stack handelt - verwirren tut mich jedoch , dass es sich in meinem konkreten Fall um einen Merker handelt.
Und hier anscheinend der Zugriff über einen Pointer erfolgt... (was soll da schiefgehen? , warum funktionierts schreibend auf einen IN?)

In meinem Beispiel wurde ein Merker mit S und R Befehlen aus einer Schrittkette heraus über einen IN Parameter geschrieben.
siemens schrieb:
  1. Der elementare Formalparameter wird mit einem Merker, einem Ein- oder Ausgang aus dem Prozessabbild oder aus dem Lokaldatenstack (L-Stack) des aufrufenden Bausteines versorgt.
    In diesem Fall arbeitet der Code der Funktion mit einem bereichsübergreifenden Zeiger direkt(!) auf diesen elementaren Aktualparametern (z.B. P#E0.0, P#M0.0).
  2. Der elementare Formalparameter wird mit einer Konstanten oder einem Datenbausteinelement versorgt.
    In diesem Fall wird der Wert des Aktualparameters vor dem Aufruf der Funktion in den L-Stack des aufrufenden Bausteines kopiert. Der Code der Funktion arbeitet dann mit einem bereichsübergreifenden Zeiger auf diesen Lokaldatenbereich des aufrufenden Bausteines.
    Beachten Sie bitte, dass bei Ausgangsparametern keine Initialisierung erfolgt und die Eingangsparameter nicht gelöscht werden. Deshalb ist in diesem Fall darauf zu achten, dass Eingänge nur gelesen und Ausgänge in jedem Zyklus geschrieben werden. Bei Befehlen wie "S" oder "R" wird das Signal nur abhängig vom VKE geschrieben. Deshalb sollten Sie diese Befehle durch die Zuweisung "=" ersetzen oder die Werte vor der Abfrage initialisieren.
    Wenn Sie das Beschreiben der Werte nicht in jedem Zyklus sicherstellen können, sollten Sie einen IN/OUT- Parameter verwenden.


Gut, in diesem Beispiel gehts aber auch um OUT Parameter - bei mir wars ein IN....
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe ich dich richtig verstanden?
Ein Eingang ist ein Merker, der innerhalb des FC beschrieben wird?
Warum soll das nicht immer und richtig funktionieren?
Oder verstehe ich es jetzt nicht richtig? :confused:

bike
 
Habe ich dich richtig verstanden?
Ein Eingang ist ein Merker, der innerhalb des FC beschrieben wird?

Ein Merker wird über einen IN Formalparameter in einen FC geführt.
In diesem FC wird er gesetzt/rückgesetzt.

In der Literatur steht, dass man IN Parameter tunlichst nur lesen sollte...
deshalb meinte ich, dass es vielleicht zu Problemen führt. Da in diesem Beispiel eben auf einen IN-Parameter geschrieben wird...

lg,
 
Habe noch etwas gesucht und folgendes gefunden....
siemens schrieb:
  1. Der elementare Formalparameter wird mit einem Merker, einem Ein- oder Ausgang aus dem Prozessabbild oder aus dem Lokaldatenstack (L-Stack) des aufrufenden Bausteines versorgt.
    In diesem Fall arbeitet der Code der Funktion mit einem bereichsübergreifenden Zeiger direkt(!) auf diesen elementaren Aktualparametern (z.B. P#E0.0, P#M0.0).
  2. Der elementare Formalparameter wird mit einer Konstanten oder einem Datenbausteinelement versorgt.
    In diesem Fall wird der Wert des Aktualparameters vor dem Aufruf der Funktion in den L-Stack des aufrufenden Bausteines kopiert. Der Code der Funktion arbeitet dann mit einem bereichsübergreifenden Zeiger auf diesen Lokaldatenbereich des aufrufenden Bausteines.
    Beachten Sie bitte, dass bei Ausgangsparametern keine Initialisierung erfolgt und die Eingangsparameter nicht gelöscht werden. Deshalb ist in diesem Fall darauf zu achten, dass Eingänge nur gelesen und Ausgänge in jedem Zyklus geschrieben werden. Bei Befehlen wie "S" oder "R" wird das Signal nur abhängig vom VKE geschrieben. Deshalb sollten Sie diese Befehle durch die Zuweisung "=" ersetzen oder die Werte vor der Abfrage initialisieren.
    Wenn Sie das Beschreiben der Werte nicht in jedem Zyklus sicherstellen können, sollten Sie einen IN/OUT- Parameter verwenden.
Wo genau hast Du das gefunden?
Über welches Step7 schreibst Du? Welche Steuerung?

Harald
 
Zuletzt bearbeitet:
Ein Merker wird über einen IN Formalparameter in einen FC geführt.
In diesem FC wird er gesetzt/rückgesetzt.

In der Literatur steht, dass man IN Parameter tunlichst nur lesen sollte...
deshalb meinte ich, dass es vielleicht zu Problemen führt. Da in diesem Beispiel eben auf einen IN-Parameter geschrieben wird...

lg,

Das ist so wie beim Schreiben auf Eingänge.
Man macht es nicht bzw soll es nicht machen, aber es funktioniert dennoch.

Vielleicht kannst du genauer beschreiben, wo dein Problem ist.


bike
 
Vielleicht kannst du genauer beschreiben, wo dein Problem ist.

Der besagte Merker M3.3 wird per Button über ein TP27 mit "Bit setzten" gesetzt.

M3.3 geht als IN Parameter #Programm_START in einen FC
Code:
      U     #Programm_START
      SPBN  M001
      L     1
      T     MW    40
      R     #"Programm_START"

M001: NOP   0


So, nun ist es so, dass mir manchmal der Merker nicht zurückgesetzt wird....
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Der besagte Merker M3.3 wird per Button über ein TP270 gesetzt.

M3.3 geht als IN Parameter #Programm_START in einen FC
U #Programm_START
SPBN M001
L 1
T MW 40
R #"Programm_START"

M001: NOP 0


So, nun ist es so, dass mir manchmal der Merker nicht zurückgesetzt wird....

Also das muss, so denke ich, nicht unbedingt ein Problem vom FC sein, sondern kann auch von der Kommunikation zwischen PLC und HMI kommen.
Innerhalb des FC werden die Variablen nur symbolisch angesprochen?
Wurde in AWL oder grafisch programmiert?
Eine Doppelzuweisung ist auch ausgeschlossen?


bike
 
Also das muss, so denke ich, nicht unbedingt ein Problem vom FC sein, sondern kann auch von der Kommunikation zwischen PLC und HMI kommen.

Wenns echt so ist, dass es einfach nur net schön ist auf IN Parameter zu schreiben, dann wärs naheliegend...

Innerhalb des FC werden die Variablen nur symbolisch angesprochen?
Wurde in AWL oder grafisch programmiert?

Das Code-Snippet oben ist der echte Code!

Eine Doppelzuweisung ist auch ausgeschlossen?
Ja
 
Sollte logisch daraus , nicht folgen ?:


Der besagte Merker M3.3 wird per Button über ein TP27 mit "Bit setzten" gesetzt.

M3.3 geht als IN Parameter #Programm_START in einen FC
Code:
      U     [B]#Programm_START[/B]
      SPBN  M001
      L     1
      T     MW    40
      R    [B] #"Programm_START"[/B]

M001: NOP   0
So, nun ist es so, dass mir manchmal der Merker nicht zurückgesetzt wird....
Der elementare Formalparameter wird mit einem Merker, einem Ein- oder Ausgang aus dem Prozessabbild oder aus dem Lokaldatenstack (L-Stack) des aufrufenden Bausteines versorgt.
In diesem Fall arbeitet der Code der Funktion mit einem bereichsübergreifenden Zeiger direkt(!) auf diesen elementaren Aktualparametern (z.B. P#E0.0, P#M0.0).


Falls dein Formalparameter: #Programm_START mit einem Merker als Aktualparameter versorgt wird dann :"... arbeitet der Code der Funktion mit einem bereichsübergreifenden Zeiger direkt(!) auf diesen elementaren Aktualparametern"

Code:
     [COLOR=#0000cd] U     [B]M3.3[/B]
      SPBN  M001
      L     1
      T     MW    40
      R     [B]M3.3[/B][/COLOR]

M3.3 ist nie TRUE nach einem FC aufruf !
(vielleicht muss du deine HMI Programmierung überdenken ...)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Formalparameter sind nur Platzhalter für die Aktualparameter !

In FB bleiben sie gespeichert ( = müssen nur beim ersten FB aufruf im Programm initialisiert werden ).
In FC flüchtig ( = müssen vor jedem FC aufruf im Programm initialisiert werden ).

M.M.n einziger Unterschied zwischen FB und FC ist der Formalparameter-speicher , Bei FC ist er flüchtig weil er im TEMP Bereich ist (= wird falls nötig von andere FB,FC-s auch überschrieben/gelesen). Prinzipiell aber machen FB , FC das gleiche (deswegen könnte man immer einen FB durch einen FC der seine Formalparameter zwischenspeichert ersetzen)
 
Ich fasse mal zusammen, dass es nicht am Schreibzugriff auf den IN Parameter liegt.

Ich sehe mir mal das Display näher an...
 
Zitat von siemens

  1. Der elementare Formalparameter wird mit einem Merker, einem Ein- oder Ausgang aus dem Prozessabbild oder aus dem Lokaldatenstack (L-Stack) des aufrufenden Bausteines versorgt.In diesem Fall arbeitet der Code der Funktion mit einem bereichsübergreifenden Zeiger direkt(!) auf diesen elementaren Aktualparametern (z.B. P#E0.0, P#M0.0)
  2. Der elementare Formalparameter wird mit einer Konstanten oder einem Datenbausteinelement versorgt. In diesem Fall wird der Wert des Aktualparameters vor dem Aufruf der Funktion in den L-Stack des aufrufenden Bausteines kopiert. Der Code der Funktion arbeitet dann mit einem bereichsübergreifenden Zeiger auf diesen Lokaldatenbereich des aufrufenden Bausteines.
    Beachten Sie bitte, dass bei Ausgangsparametern keine Initialisierung erfolgt und die Eingangsparameter nicht gelöscht werden. Deshalb ist in diesem Fall darauf zu achten, dass Eingänge nur gelesen und Ausgänge in jedem Zyklus geschrieben werden. Bei Befehlen wie "S" oder "R" wird das Signal nur abhängig vom VKE geschrieben. Deshalb sollten Sie diese Befehle durch die Zuweisung "=" ersetzen oder die Werte vor der Abfrage initialisieren.
    Wenn Sie das Beschreiben der Werte nicht in jedem Zyklus sicherstellen können, sollten Sie einen IN/OUT- Parameter verwenden.
Nicht schreiben auf IN-Parametern gilt nur im 2-ten Fall ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
M3.3 ist nie TRUE nach einem FC aufruf !

So ein Schmarn.
In diesem Fall ist es so, doch es kann auch anders sein.
Das ist abhängig was und wie programmiert wird.
Alex wann endlich hörst du auf, hier den Oberlehrer zu spielen?
Solch einen Mist den du ablässt kann man ohne genug Glühwein nicht lesen.
Und hör bitte auf mit den sch.. Farben.

@voni_1: Das Problem kann von der HMI kommen. Solche Dinge würde ich mit Flanken in der PLC oder mit "setze solange Taste gedrückt" in HMI lösen.


bike
 
Nicht schon wieder ...falsch verstehen !
Bezogen auf seinem in diesem besondern Falle FC ( nicht auf irgendeinem FC) ... lies zurück !
Sobald sein FC gerufen wird , wird M 3.3 falls TRUE , FALSE ! Falls FALSE , bleibt es so ...

Falls ich was dummes gesagt habe bitte mich zu korrigieren ... ich bin nur in (LERN)DIALOG mit den anderen hier , und nicht um meine Dummheit zu verbreitern ...

(Beim Korrigieren bitte punktuell mit einem Beispiel den man selbst durchführen kann... pauschal Antworten sind nicht für ...;)... jeden)
 
@Sioan,
das ist meine letzte Verwarnung, wenn du wie als 00alex anfängst,
weiter Themen zu zerschlagen wirst du gesperrt. Wenn du etwas lernen
möchtest, erstelle ein eigenes Thema und stelle eine Frage und dann
so das Sie auch als Frage erkannt wird und nicht als Verbreitung von
Binsenweisheiten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo voni_1

Kann es sein das Weckalarme (30er OB's) dir die Verarbeitung stören ?

Wir benutzen im Step7 auch das Príncipe von setze Merker und dann im Programm rücksetzen und haben auch OB's mit Weckalarme.
Aber benutzen keine Lokaldaten im FC wo wir das durch den Panel gesetzte Bit verarbeiten (wir benutzen Bit im Datenbaustein). Funktioniert immer.

Im erste Netzwerk eines FC's wir das Bit zum Verarbeitung benutzt (Datenbaustein Bit)

Im zweites Netzwerk wird das Bit Wenn Wahr zurückgesetzt.


Bei TIA machen wir mittlerweile Setze Bit und Rücksetze Bit im Panel.

Bram van Berkel
 
Zurück
Oben