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

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

Thema: Vom Symbolnamen einer E/A Adresse auf die Adresse als DWORD schließen?

  1. #1
    Registriert seit
    22.06.2010
    Beiträge
    51
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Tag!
    Ich möchte die WRREC funktion nutzen, für deren Aufrug man ja bei der ID die unterste E/A Adresse der Baugruppe angeben muss.
    Nun wäre es sehr sinnvoll das ganze auch in Abhängigkeit der Symboltabelle machen zu können.
    Dort sind sowieso die Ein- und Ausgabeadressen der entsprechenden Baugruppe angegeben. Also z.B. Symbol "Eingangsword0" verweißt auf die Adresse "PEW 260" was ja für die ID angabe heißen müsste "DW#0260".
    Gibt es jetzt eine Möglichkeit von dem "Eingangsword0" auf das "DW#0260" zu schließen?

    Hoffe ihr habt da wieder ne hervorragende Idee

    Grüße
    Muphin
    Zitieren Zitieren Vom Symbolnamen einer E/A Adresse auf die Adresse als DWORD schließen?  

  2. #2
    Registriert seit
    19.06.2005
    Ort
    in Bayern ganz oben
    Beiträge
    1.360
    Danke
    188
    Erhielt 372 Danke für 290 Beiträge

    Standard

    Hi,

    das geht nur wenn der Baustein in einem FC oder FB aufgerufen wird.
    Das PEW übergibst Du mittels Pointer, so kann man es symbolisch Adressieren.

    Code:
          L     P##IN
          LAR1  
    
          L     B [AR1,P#2.0]
          T     #Speicherbereich            // Speicherbereich h80 bei PEW
    
          L     D [AR1,P#2.0]
          L     DW#16#FFFFFF                // Speicherbereich ausblenden
          UD    
          SRD   3                           // Bitadresse entfernen
          T     #Adresse
    IN wäre der POINTER an dem z.B. PEW256 steht.

    Gruss Daniel
    Erfahrung ist eine nützliche Sache. Leider macht man sie immer erst kurz nachdem man sie brauchte...

    OSCAT.lib Step 7

    Open Source Community for Automation Technolgy

    SPS-Forum Chat (Mibbit) | SPS-Forum Chat (MIRC)

  3. Folgender Benutzer sagt Danke zu dalbi für den nützlichen Beitrag:

    Muphin (15.12.2010)

  4. #3
    Muphin ist offline Benutzer
    Themenstarter
    Registriert seit
    22.06.2010
    Beiträge
    51
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallö!
    Der Aufruf erfolgt über einen FB, das ganze sollte also machbar sein.
    Allerdings ist der komplette Ablauf in SCL geschrieben und ich komm bei der Umsetzung des Codes als SCL Programm nicht wirklich voran.
    Hast du auch eine Idee dazu wie das ganze in SCL aussehen muss?

    Grüße
    Muphin

  5. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Hallo,
    du müßtest dir eine AT-Sicht auf den IN-Parameter machen, die ihn entsprechend abbildet. Bei einem FB sollte das gehen - etwa so :
    Code:
    myInput : pointer ;
    at_Sicht AT myInput : struct
       DB_Nr : byte ;
       Adresse : DWORD ;
    end_struct ;
    Mit der Variablen "at_Sicht.Adresse" dann weiter verfahren wie von Dalbi schon geschildert ...

    Gruß
    Larry

  6. #5
    Muphin ist offline Benutzer
    Themenstarter
    Registriert seit
    22.06.2010
    Beiträge
    51
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo!
    So ich hab mal ein Beispiel dazu programmiert, leider will das ganze noch nich so richtig funktionieren, ich durchschau die Funktionsweiße wohl nich so 100%.

    Aufruf im OB1 (in AWL); "ReglerEW0" ist das Symbol für "PEW260"
    Code:
    CALL  "Steuerung" , "Steuerungsdaten"
           ReglerEAAdressePoint:="ReglerEW0"
    Funktionsblock zur Steuerung (in SCL)
    Code:
    FUNCTION_BLOCK Steuerung
    ...
    VAR_INPUT
        ReglerEAAdressePoint  : POINTER;
        ReglerEAAdresseStruct AT ReglerEAAdressePoint : STRUCT
            ReglerEAByte      : BYTE;
            ReglerEAAdresse   : DWORD;
        END_STRUCT;
    END_VAR
    ...
    WRREC...
            ,ID := ReglerEAAdresseStruct .ReglerEAAdresse
    Kannst du mir sagen wo es da hängt?
    Geändert von Muphin (14.12.2010 um 15:32 Uhr)

  7. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    ... das müßte dann so aussehen :
    Code:
    myPerepherieAdresse := DINT_to_INT(DWORD_to_DINT (ReglerEAAdresseStruct.ReglerEAAdresse and dw#16#FFFFFF) / 8) ;
    ... ist aber ungetestet ...

    Gruß
    Larry

  8. #7
    Muphin ist offline Benutzer
    Themenstarter
    Registriert seit
    22.06.2010
    Beiträge
    51
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Weiß auch jemand von euch wieso das mit diesem seltsamen struct so an die Adresse des Slave herankommen kann?
    Liegt das am internen Aufbau von Simatic und da steht hinter dem Eingangsbyte im Speicher dann immer die Adresse?
    Also praktisch so, dass man über den Pointer, der ja eigentlich auf das Eingangsbyte zeigt, und das dahinterliegende struct, an die Daten die im Speicher nach den Eingangsbytewerten liegen, dran kommt?

    Aber wofür ist dann noch das ...AND dw#16#FFFFFF / 8?

    Also nach meinem Test scheint da wirklich dann die Adresse als dezimalwert raus zu kommen, super! Danke!

    Allerdings muss für WRREC dem ID Wert ein DW zuweisen.
    Das sieht im Moment so bei mir aus:
    Code:
    WRREC...
       ,ID := SHR( IN := (ReglerEAAdresseStruct.ReglerEAAdresse AND dw#16#FFFFFF), N := 3);
    Das "/8" hab ich durch den SHR Befehl ersetzt, da eine Division nur mit INT funktioniert, nicht mit einem DW!
    Jetzt wird in meinem Fall der ID allerdings 16#0104 zugewiesen, das entspricht in Dez dem Wert 260 was ja die Adresse wäre, ich brauch die allerdings als DW, also DW#16#0260!
    Kennt jetzt noch jemand eine Möglichkeit von den dezimalen 260 auf ein DW#16#0260 zu kommen? Meine Überlegungen bringen da bisher kein Ergebnis :-/

    Grüße
    Geändert von Muphin (15.12.2010 um 10:00 Uhr)

  9. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Hallo,
    den Aufbau des Pointers kannst du in der Step7-Hilfe nachlesen - den möchte ich hier jetzt nicht unbedingt posten - das wird dort aber gut beschrieben. Durch das (Aus-)Maskieren bildest du dir den Bit-Pointer der Adresse. Durch den Schiebebefehl machst du daraus einen (Byte-)Adresspointer. Dadurch kommst du an die Adresse.

    Jetzt zu deiner Frage - was ist der Hintergrund, weshalb du von dem Adresswert, den du nun ja absolut hast, einen BCD-Wert erzeugen willst ? Ich habe den Sinn dessen leider nicht verstanden und kann dir aus dem Grund auch keine Antwort geben - also ... was soll daraus dann werden ?

    Gruß
    Larry

  10. #9
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.746
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard

    Zitat Zitat von Muphin Beitrag anzeigen
    Kennt jetzt noch jemand eine Möglichkeit von den dezimalen 260 auf ein DW#16#0260 zu kommen? Meine Überlegungen bringen da bisher kein Ergebnis :-
    Grüße
    Denn Sinn darin Verstehe Ich auch nicht, aber wandeln kannst du das schon.
    In AWL geht das mit dem ITB Befehl.

    Für SCL siehe hier:
    http://support.automation.siemens.co...ad=treecontent
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten

  11. #10
    Muphin ist offline Benutzer
    Themenstarter
    Registriert seit
    22.06.2010
    Beiträge
    51
    Danke
    5
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also jetzt bin ich doch etwas überrascht wieso das nich so ganz klar zu sein scheint. Das rührt ja von meinem ursprünglichen Problem her.
    Ich möchte auf eine bestimmte Peripherieadresse mit WRREC zugreifen, die unterste Eingabeadresse des Slaves ist die 260 und die muss man dem WRREC als Input in Form eines DW mitgeben, das würde normalerweiße dann so aussehen:
    Code:
    WRREC...
            ,ID := DW#260;...
    Deshalb brauch ich auch die 260 als DW#260 und nicht als dezimalzahl!

    Da ich ja für die Eingabeadresse ein Symbol angelegt habe, das "ReglerEW0" mit "PEW 260", ist es ja absolut Sinnvoll auch den Zugriff des WRREC über dieses Symbol zu gestalten, z.B. falls sich an der Adresse einmal etwas ändern sollte.

    @Larry
    Ich habe mich nun auch durch die Step7 Hilfe und auch die Hilfe zu SCL durchgeklickt und ebenfalls nach Pointer, Adresse und Adressierung gesucht, konnte allerdings keine relevanten Hilfeeinträge finden.
    Kannst du mir sagen unter was für einem Eintrag oder über was für ein Stichwort das ganze auffindbar sein sollte?

    Grüße

Ähnliche Themen

  1. Wie finde ich die IP Adresse einer Möller XC Cpu 201 heraus
    Von berti74 im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 02.10.2010, 22:16
  2. Wert einer errechneten Adresse laden
    Von matziane im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 13.05.2009, 08:33
  3. Byte-, & Bit-Adresse aus einer Ganzzahl errechnen
    Von LittleJack86 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 21.04.2008, 20:18
  4. PEW Adresse aus DB
    Von skyracer im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 09.05.2007, 18:53
  5. Antworten: 10
    Letzter Beitrag: 29.08.2006, 20:42

Lesezeichen

Berechtigungen

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