Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 18

Thema: Schreibzugriff auf IN Formalparameter eines FC's

  1. #1
    Registriert seit
    29.09.2008
    Beiträge
    68
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard


    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. ...
    -> 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
    Geändert von voni_1 (21.12.2013 um 14:56 Uhr)
    Zitieren Zitieren Schreibzugriff auf IN Formalparameter eines FC's  

  2. #2
    Registriert seit
    29.09.2008
    Beiträge
    68
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard

    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.
    Zitat 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.


    Gut, in diesem Beispiel gehts aber auch um OUT Parameter - bei mir wars ein IN....
    Geändert von voni_1 (21.12.2013 um 15:13 Uhr)

  3. #3
    Registriert seit
    03.04.2008
    Beiträge
    6.205
    Danke
    237
    Erhielt 817 Danke für 691 Beiträge

    Standard

    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?

    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  4. #4
    Registriert seit
    29.09.2008
    Beiträge
    68
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Zitat Zitat von bike Beitrag anzeigen
    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,

  5. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.311
    Danke
    932
    Erhielt 3.323 Danke für 2.685 Beiträge

    Standard

    Zitat Zitat von voni_1 Beitrag anzeigen
    Habe noch etwas gesucht und folgendes gefunden....
    Zitat 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.
    Wo genau hast Du das gefunden?
    Über welches Step7 schreibst Du? Welche Steuerung?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #6
    Registriert seit
    29.09.2008
    Beiträge
    68
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Wo genau hast Du das gefunden?

    http://support.automation.siemens.co...objId=22303713

    Zitat Zitat von PN/DP Beitrag anzeigen
    Über welches Step7 schreibst Du? Welche Steuerung?
    Step7 V5.5 - CPU 315-2DP
    Geändert von voni_1 (21.12.2013 um 16:22 Uhr)

  7. Folgender Benutzer sagt Danke zu voni_1 für den nützlichen Beitrag:

    PN/DP (21.12.2013)

  8. #7
    Registriert seit
    03.04.2008
    Beiträge
    6.205
    Danke
    237
    Erhielt 817 Danke für 691 Beiträge

    Standard

    Zitat Zitat von voni_1 Beitrag anzeigen
    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
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  9. #8
    Registriert seit
    29.09.2008
    Beiträge
    68
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard

    Zitat Zitat von bike Beitrag anzeigen
    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....
    Geändert von voni_1 (21.12.2013 um 17:03 Uhr)

  10. #9
    Registriert seit
    03.04.2008
    Beiträge
    6.205
    Danke
    237
    Erhielt 817 Danke für 691 Beiträge

    Standard

    Zitat Zitat von voni_1 Beitrag anzeigen
    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
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  11. #10
    Registriert seit
    29.09.2008
    Beiträge
    68
    Danke
    10
    Erhielt 5 Danke für 5 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von bike Beitrag anzeigen
    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...

    Zitat Zitat von bike Beitrag anzeigen
    Innerhalb des FC werden die Variablen nur symbolisch angesprochen?
    Wurde in AWL oder grafisch programmiert?
    Das Code-Snippet oben ist der echte Code!

    Zitat Zitat von bike Beitrag anzeigen
    Eine Doppelzuweisung ist auch ausgeschlossen?
    Ja

Ähnliche Themen

  1. Zugriff auf Prozessabbild eines BC9050 in C#
    Von kampi im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 27.01.2012, 10:02
  2. Antworten: 8
    Letzter Beitrag: 22.06.2011, 13:36
  3. Zugriff auf Temporäre Variablen eines FC
    Von Fluffi im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 13.05.2009, 07:52
  4. Inhalt eines Datenbaustein auf 0 vergleichen
    Von norman im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 07.03.2007, 21:24
  5. Sollen Gäste Schreibzugriff im Board haben ?
    Von volker im Forum Stammtisch
    Antworten: 15
    Letzter Beitrag: 23.09.2005, 15:58

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •