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

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

Thema: E/A Adressen zur Laufzeit bestimmen

  1. #1
    Registriert seit
    06.08.2010
    Ort
    Köln
    Beiträge
    187
    Danke
    13
    Erhielt 30 Danke für 24 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo erstmal,
    Gibt es eine Möglichkeit zur Laufzeit die Ein/Ausgangsadressen zu bestimmen ?

    In der Art :

    L P#Sensor_1
    ...

    Sollte möglicht für 300/400 1200 u. 1500 funktionieren.
    Zitieren Zitieren E/A Adressen zur Laufzeit bestimmen  

  2. #2
    Registriert seit
    06.10.2009
    Ort
    Hessen
    Beiträge
    560
    Danke
    24
    Erhielt 43 Danke für 40 Beiträge

    Standard

    Das, was man weiß, hat doppelten Wert, wenn man zugleich das, was man nicht weiß, nicht zu wissen eingesteht.

  3. #3
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard

    Gesendet mit Tapatalk

  4. #4
    Registriert seit
    06.10.2009
    Ort
    Hessen
    Beiträge
    560
    Danke
    24
    Erhielt 43 Danke für 40 Beiträge

    Standard

    Zitat Zitat von marlob Beitrag anzeigen
    @c.wehn
    Wie passt die Antwort zur Fragestellung?

    @TE

    Was willst du denn genau machen? Also beschreibe mal deine Aufgabenstellung.
    Gesendet mit Tapatalk


    Ich dachte dort wird die Peripherieadressierung erklärt... Also auf Eingänge direkt zuzugreifen und nicht auf das Prozessabbild.
    Geändert von c.wehn (06.10.2013 um 20:18 Uhr)
    Das, was man weiß, hat doppelten Wert, wenn man zugleich das, was man nicht weiß, nicht zu wissen eingesteht.
    Zitieren Zitieren E/A Adressen zur Laufzeit bestimmen  

  5. #5
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Hi NBerger

    erstens wozu und zweitens von welchen Adressen sprichst du? Wenn du ein Tag hast, dann hast du doch schon die Adresse. Da gibt es nichts mehr zu bestimmen.

    Wenn es um Parameter von FC und FB geht, dann muss man zwischen einfachsten Typen (wie INT und REAL) und komplizierteren (wie UDT) unterscheiden. Daumenregel (mit hundert Ausnahmen) die einfachen per Wert, die komplizierteren per Referenz.
    FB-Parameter werden über die Instanz übergeben. Beim Zugriff auf den Parameter bekommst du den Wert aus der Kopie im DB. Wenn du die Adresses eines FB-Parameter erfragst, dann ist dessen Adresse in der Instanz des FB. Was nutzt die? Das ist bestimmt nicht die E/A Adresse von dem was du angelegt hast.

    Spannender sind FC-Parameter. Bei 300/400 werden Werte per Referenz übergeben, beim Zugriff wird durch MC7 dereferenziert. Das hat total krumme Effekte. Du legst am Input ein EB10 an. Nun programmierst du innen ein T #para:P. Damit schreibst du dann auf PAB10 und nicht wie du vielleicht erhofft hast auf PEB10. (Hey, wer mach so einen Blödsinn) Gut das das bei der 1500 nicht mehr geht. Aber um zu deiner ursprünglichen Frage zurück zu kommen. Wenn du nach der Adresse von P##para fragst, dann hast du tasächlich im Akku die Adresse E10.0. So kodiert wie das auch im Adressregister liegen würde. Wenn der Aufruf aber nicht mit E, A oder M versorgt wird, dann wird es schon wieder seltsam. Zumeist findest du einen Verweis auf den L-Stack des Aufrufers. Scheinbar wird vorher rein und nacher raus kopiert, ganz so wie beim FB. Solltest du mit mehreren Ablaufeben arbeiten und der FC wird durch einen anderen OB unterbrochen, ergeben sich ganz komische Effekte. Wird im aufgerufenen FC auf den Paramter geschieben, dann wirkt das bei E,A und M sofort. Die unterbrechende Ebene sieht sofort was geschrieben wurde. Bei Versorgung mit DB oder L, arbeitest du im FC mit einer Kopie. Der geschriebene Wert wird erst sichtbar wenn der FC wieder verlassen ist. Für das Lesen gilt das Gleiche, die Auswirkungen sind halt anders. Der Unterbrecher kann dir deine mit EAM versorgten Parameter kaputt machen, bei DB und L gewinnt der FC.

    Bei der 1200/1500 werden die Parameter aber wie beim FB übergeben. Die einfachen per Wert, die komplizierteren per Referenz. Ich weiß nur nicht wo. Eine Instanz gibt es nicht und im L-Stack sind sie auch nicht. Trotzdem sind sie da und das ist auch gut so. Es gibt keine Unterschiede/Probleme wenn verschiedene Ablaufebenen unterwegs sind -- das ist sogar noch besser . Aber zurück zu deiner Frage: Adressen ... es gibt keine Adressen. Die sind total unwichtig .

    Wozu willst du die Adressen haben, wenn du doch nur auf Kopien arbeitest.

    schönen Tag auch
    HB

    wer wird denn gleich in die Luft gehen

  6. #6
    Registriert seit
    06.10.2009
    Ort
    Hessen
    Beiträge
    560
    Danke
    24
    Erhielt 43 Danke für 40 Beiträge

    Standard

    Zitat Zitat von HelleBarde Beitrag anzeigen
    Hi NBerger

    erstens wozu und zweitens von welchen Adressen sprichst du? Wenn du ein Tag hast, dann hast du doch schon die Adresse. Da gibt es nichts mehr zu bestimmen.

    Wenn es um Parameter von FC und FB geht, dann muss man zwischen einfachsten Typen (wie INT und REAL) und komplizierteren (wie UDT) unterscheiden. Daumenregel (mit hundert Ausnahmen) die einfachen per Wert, die komplizierteren per Referenz.
    FB-Parameter werden über die Instanz übergeben. Beim Zugriff auf den Parameter bekommst du den Wert aus der Kopie im DB. Wenn du die Adresses eines FB-Parameter erfragst, dann ist dessen Adresse in der Instanz des FB. Was nutzt die? Das ist bestimmt nicht die E/A Adresse von dem was du angelegt hast.

    Spannender sind FC-Parameter. Bei 300/400 werden Werte per Referenz übergeben, beim Zugriff wird durch MC7 dereferenziert. Das hat total krumme Effekte. Du legst am Input ein EB10 an. Nun programmierst du innen ein T #para:P. Damit schreibst du dann auf PAB10 und nicht wie du vielleicht erhofft hast auf PEB10. (Hey, wer mach so einen Blödsinn) Gut das das bei der 1500 nicht mehr geht. Aber um zu deiner ursprünglichen Frage zurück zu kommen. Wenn du nach der Adresse von P##para fragst, dann hast du tasächlich im Akku die Adresse E10.0. So kodiert wie das auch im Adressregister liegen würde. Wenn der Aufruf aber nicht mit E, A oder M versorgt wird, dann wird es schon wieder seltsam. Zumeist findest du einen Verweis auf den L-Stack des Aufrufers. Scheinbar wird vorher rein und nacher raus kopiert, ganz so wie beim FB. Solltest du mit mehreren Ablaufeben arbeiten und der FC wird durch einen anderen OB unterbrochen, ergeben sich ganz komische Effekte. Wird im aufgerufenen FC auf den Paramter geschieben, dann wirkt das bei E,A und M sofort. Die unterbrechende Ebene sieht sofort was geschrieben wurde. Bei Versorgung mit DB oder L, arbeitest du im FC mit einer Kopie. Der geschriebene Wert wird erst sichtbar wenn der FC wieder verlassen ist. Für das Lesen gilt das Gleiche, die Auswirkungen sind halt anders. Der Unterbrecher kann dir deine mit EAM versorgten Parameter kaputt machen, bei DB und L gewinnt der FC.

    Bei der 1200/1500 werden die Parameter aber wie beim FB übergeben. Die einfachen per Wert, die komplizierteren per Referenz. Ich weiß nur nicht wo. Eine Instanz gibt es nicht und im L-Stack sind sie auch nicht. Trotzdem sind sie da und das ist auch gut so. Es gibt keine Unterschiede/Probleme wenn verschiedene Ablaufebenen unterwegs sind -- das ist sogar noch besser . Aber zurück zu deiner Frage: Adressen ... es gibt keine Adressen. Die sind total unwichtig .

    Wozu willst du die Adressen haben, wenn du doch nur auf Kopien arbeitest.

    schönen Tag auch
    HB

    wer wird denn gleich in die Luft gehen
    Hä?
    Ich hab die Frage anders interpretiert...
    Du willst die Symbol Adressierung der Absoluten Zuordnung während der Laufzeit bestimmen?!

    Bin mal gespannt was hier wirklich gewusst werden will
    Das, was man weiß, hat doppelten Wert, wenn man zugleich das, was man nicht weiß, nicht zu wissen eingesteht.

  7. #7
    Registriert seit
    24.04.2013
    Beiträge
    309
    Danke
    23
    Erhielt 160 Danke für 88 Beiträge

    Standard

    Zitat Zitat von c.wehn Beitrag anzeigen
    Hä?
    Ich hab die Frage anders interpretiert...
    Du willst die Symbol Adressierung der Absoluten Zuordnung während der Laufzeit bestimmen?!

    Bin mal gespannt was hier wirklich gewusst werden will
    symbol_of( %e1.0 ) soll dann wohl einen STRING liefern.
    Wir sind doch nicht bei .Net -- obwohl da geht das auch nicht.

    Und ein STRING kann es auch nicht sein, denn TIA kann chinesische Variablennamen ---

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    Zitat Zitat von HelleBarde Beitrag anzeigen
    Bei der 1200/1500 werden die Parameter aber wie beim FB übergeben. Die einfachen per Wert, die komplizierteren per Referenz.
    Das beschreibt der Programmierleitfaden für S7-1200/S7-1500 (Stand V1.1 Oktober 2013) ab Kapitel 3.3 aber anders.
    Die bunten Bilder zeigen: die Aussagen gelten ausdrücklich für FB und FC.

    * IN-Parameter: Übergabe per Wert (Call-by-value), der FB/FC erhält eine Kopie des Aktualparameters
    Abbildung 3-15 zeigt ausdrücklich einen STRING, der in den IN-Parameter kopiert wird

    *INOUT-Parameter: Übergabe per Referenz (Call-by-reference), jeder Zugriff im FB/FC arbeitet auf den referenzierten Original-Aktualparameter

    Zitat Zitat von 3.3.2 Übergabe per Referenz (Call-by-reference) mit InOut-Schnittstellentyp
    Empfehlung
    • Nutzen Sie bei strukturierten Variablen (z.B. vom Typ ARRAY, STRUCT, STRING, …) generell den InOut-Schnittstellentyp, um den benötigten Datenspeicher nicht unnötig zu vergrößern.
    ... und damit der Compiler ein versehentliches Schreiben auf Parameter mit eigentlich IN-Funktion garantiert nicht anmeckert. (An INOUT kann man auch keine Konstanten anlegen - doch das ging bei Variablen höheren Typs an IN eh' noch nie.)

    * OUT-Parameter: ??? (wird nicht erklärt)

    Zitat Zitat von 3.2.3 Funktionsbausteine (FB)
    Eigenschaften
    • FBs sind Bausteine mit zyklischem Datenspeicher.
    • Temporäre- und Out-Variablen gehen nach Bearbeitung der Funktion verloren.
    Sie sind beim Aufruf der Funktion in nicht optimierten Bausteinen mit einem undefiniertem Wert, und bei optimierten Bausteinen mit „0“ vorbelegt (S7-1500 und S7-1200 Firmware V4).


    Naja, man muß ja nicht alles glauben. Auch bei Siemens braucht man mittlerweile mindestens 3 unterschiedliche Quellen um zu entscheiden, welche Informationen wahrscheinlich ziemlich korrekt sind.

    Es ist ja schön, daß Siemens einen solchen Programmierleitfaden erstellt hat, doch ist es bei Siemens nicht mehr möglich, daß da nochmal jemand drüberliest ob der Inhalt halbwegs korrekt ist? Kann man nun auch Dokumentationen erst ab V5.0 trauen?

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    Registriert seit
    09.08.2006
    Beiträge
    3.627
    Danke
    912
    Erhielt 656 Danke für 542 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    * OUT-Parameter: ??? (wird nicht erklärt)
    Eigenschaften
    • FBs sind Bausteine mit zyklischem Datenspeicher.
    • Temporäre- und Out-Variablen gehen nach Bearbeitung der Funktion verloren.
    Sie sind beim Aufruf der Funktion in nicht optimierten Bausteinen mit einem undefiniertem Wert, und bei optimierten Bausteinen mit „0“ vorbelegt (S7-1500 und S7-1200 Firmware V4).
    Naja, nicht das sie irgendwann die Firmware der Doku anpassen... Aber das ist schon krank bei so existenziellen Dingen...

    Hmm, Atomkraftwerke sollte man mit TIA wohl lieber nicht bauen...

  10. #10
    Avatar von NBerger
    NBerger ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.08.2010
    Ort
    Köln
    Beiträge
    187
    Danke
    13
    Erhielt 30 Danke für 24 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen...
    Das ganze soll ein "Ventilsteuerbaustein" werden.

    Im Anlauf sollen dann die ADRESSEN der E/A's mit allen anderen Parametern zum Ventil in einem DB abgelegt werden.

    Im normalen Zyklus wird dann nur noch über den DB gearbeitet.

    Auf dem HMI soll es für den Servicefall eine E/A -Suche geben die den DB nach der Adresse durchsucht und dann den Gesamtstatus der Pneumatikachse ausgibt (EA-Status; Timer;Fehler ...)

    Also: Im Anlauf Symbolisch den E/A angeben und die Adresse in DB ablegen.

Ähnliche Themen

  1. Laufzeit bestimmen auch wenn Steuerung abgeschaltet ist
    Von themenstarter234 im Forum Simatic
    Antworten: 29
    Letzter Beitrag: 28.03.2013, 15:03
  2. Benutzerrechte zur Laufzeit ändern (MP377)
    Von andree2812 im Forum HMI
    Antworten: 1
    Letzter Beitrag: 22.09.2009, 16:45
  3. IP-Adresse zur Laufzeit ändern ??
    Von corrado im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 13.02.2007, 12:18
  4. Antworten: 1
    Letzter Beitrag: 29.07.2005, 16:53
  5. WinCC Variablen zur Laufzeit erzeugen
    Von Anonymous im Forum HMI
    Antworten: 2
    Letzter Beitrag: 16.06.2005, 19:03

Lesezeichen

Berechtigungen

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