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

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

Thema: Variable Adressierung (Eingangsadresse im Anwenderprogramm errechnen und auswerten)

  1. #1
    Registriert seit
    10.11.2013
    Beiträge
    81
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich stoß immer wieder auf das Problem das ich Bausteine für Busteilnehmer schreibe und alle Prozessdaten einzeln in der Variablentabelle anlege, ist bei mehreren Prozessdatenwörtern Steuer/Status/Sollwert/etc. Word etwas müßig.

    Es gibt von SEW einen Baustein für die Ansteuerung des MovietrackB über Profibus. An diesen Baustein wird nur die erste IO Adresse geschrieben und er macht alles weitere Intern. Soetwas würde ich gern für andere Anwendungen realisieren.

    Beispielsweise die Auswertung einer Zählerkarten.

    ID300 = Zählwert
    IW303 = Status
    ID305 = Vergleichswert.

    Jetzt schreib ich (da oft verwendet wird) einen Baustein der alle werte Verarbeitet und muss alle 3 Adressen am Input definieren damit er weis woher die Daten kommen.

    Kann mir jemand sagen wie ich es am besten mache das ich nur einmal I300 als Startadresse angebe und später alle Werte im Baustein von der E/A Ebene abrufe.

    Man kann ja 300 + 3 rechnen und dann den Programmteil der das Statuswort bearbeitet die Adresse IW303 vorgeben. <- Das ist das eigentliche Problem, denn im nächsten Baustein ist die Adresse für diesen Programmteil eben 400+3 ... Ich hoffe ihr wisst was ich meine.


    Danke schonmal TIATESTER
    Zitieren Zitieren Variable Adressierung (Eingangsadresse im Anwenderprogramm errechnen und auswerten)  

  2. #2
    Registriert seit
    10.11.2013
    Beiträge
    81
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Habe selbst gesucht, man braucht meist nur das richtige Suchwort

    Ich brauche Indirekte Adressierung oder???

    Für das oben genannte beispiel wäre das hier denkbar.

    Code:
       
    VAR
    Input: 
    I/O_Adresse    Word    ...    16#0    True    False    
    
    Static:
    Adresse_Steuerwort    Word    ...    16#0    True    False    
    Zählwert Zähler 1    DWord    ...    16#0    True    False    
    Statuswort Zähler 1    Word    ...    16#0    True    False    
    Vergleichswert    DWord    ...    16#0    True    False    
    VAR_END
    
    NW1: 
    
    L     #"I/O_Adresse"
    T     #Adresse_Steuerwort
    LAR1  P##Adresse_Steuerwort
    L ID [ AR1 , P#0.0 ]
    T     #"Zählwert Zähler 1"
    L IW [ AR1 , P#3.0 ]
    T     #"Statuswort Zähler 1"
    L ID [ AR1 , P#5.0 ]
    T     #Vergleichswert
    Somit hätte ich die Werte die ich von der Zählerkarte haben will in meinen Statischen Variablen im FB, oder ist das nicht so klug/funktioniert nicht so wie gedacht?

    Danke Gruß T

    Also das funktioniert nicht weis jemand Rat? ich glaub ich bin mit sämtlichen Datenformaten falsch?
    Geändert von TIA_TESTER (25.06.2014 um 22:00 Uhr)

  3. #3
    Registriert seit
    10.11.2013
    Beiträge
    81
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Habe die Sache mal vereinfacht um es auszuprobieren.

    Folgendes funktioniert:

    Code:
          
    L     #"I/O_Adresse"       //Lädt I/O Adresse
    T     #Adresse             //Transferiert in Statische Variable
    LAR1  P#256.0              //Lädt I/O Adresse in Adressregister 1
    L ID [ AR1 , P#0.0 ]       //Lädt Eingangsdoppelword mit I/O Adresse aus AR1
    T     #"Zählwert Zähler 0" //Transferiert Zählwert 0 in Static-Variable
    Folgendes nicht mehr obwohl in #Adresse auch 256.0 drin steht wird ins Adressregister DI8.0 geladen??:

    Code:
          
    
    
    
    L     #"I/O_Adresse"       //Lädt I/O Adresse
    T     #Adresse             //Transferiert in Statische Variable
    LAR1  P##Adresse           //Lädt I/O Adresse in Adressregister 1
    L ID [ AR1 , P#0.0 ]       //Lädt Eingangsdoppelword mit I/O Adresse aus AR1
    T     #"Zählwert Zähler 0" //Transferiert Zählwert 0 in Static-Variable

    Zum Sew Baustein, diese machen das ganze mittels 2 SFC´s für DP Slaves, somit ganz andere vorhergehensweise. Funktioniert was ich vorhabe? Oder soll ichs klassisch machen?
    Geändert von TIA_TESTER (25.06.2014 um 22:16 Uhr)

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.189
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    "LAR1 P##Adresse" ist ganz falsch - das lädt nicht den Inhalt der Variablen #Adresse in AR1 sondern deren Adresse. (es müßte heißen "LAR1 #Adresse")
    Das nachfolgende "L ID [ AR1 , P#0.0 ]" lädt dadurch den Wert aus der Variablen #Adresse und nicht aus der gewollten I/O-Adresse.


    Das Stichwort "Indirekte Adressierung" ist richtig. Schaue Dir dazu mal die AWL-Hilfe an.
    Da wirst Du finden, daß bei der indirekten Adressierung als Pointer eine Bitadresse angegeben werden muß, z.B. P#256.0
    Um von der Byteadresse 256 zur Bitadresse P#256.0 zu kommen, muß die Byteadresse mit 8 multipliziert werden, was man üblicherweise mit "SLD 3" macht:
    Code:
    L     #"I/O_Adresse"       //Lädt I/O Adresse aus dem IN-Parameter
    T     #Adresse             //Transferiert in Statische Variable (--- ist überflüssig)
    SLD   3                    //Byteadresse --> P#Byte.0
    LAR1
    L ID [ AR1 , P#0.0 ]       //Lädt Eingangsdoppelword aus I/O Adresse von AR1
    T     #"Zählwert Zähler 0" //Transferiert Zählwert 0 in Static-Variable
    Beim Beobachten des AWL-Programms kannst Du Dir die Spalten mit dem Inhalt des AR1-Registers anzeigen lassen (*), da wirst Du sehen, daß bei Deinen nicht funktionierenden Programmvarianten nicht P#256.0 im AR1 stand.
    (*) zumindest in Step7 classic: Rechtsklick auf eine Spalte (VKE/STA/AKKU) > Einblenden...


    Achtung:
    "L ID [..." funktioniert nur, wenn die angegebene E-Adresse im Prozessabbild PAE liegt. Liegt die Adresse außerhalb, dann muß auf die Peripherieadresse PID... zugegriffen werden (das wird in TIA vermutlich anders geschrieben --> befrage die Hilfe).
    Bei Zugriffen auf Peripherieadressen muß außerdem die projektierte Konsistenzgröße beachtet werden und ggf. mit SFC14/SFC15 gearbeitet werden.

    Die indirekten Zugriffe auf die E-Adressen erscheinen nicht in den Referenzdaten, sind also nur sehr schwer in einem (unbekannten) Programm zu finden!

    PS: Auch wenn TIA das neuerdings idiotischerweise zuläßt, sollte man in Variablennamen keine Leerzeichen und Sonderzeichen (wie Operatoren) verwenden.

    Harald
    Geändert von PN/DP (26.06.2014 um 14:06 Uhr) Grund: "SLD 3" im Code korrigiert...
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Registriert seit
    10.11.2013
    Beiträge
    81
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo und danke für die Erklärung, die AWL Anweisungen habe ich mir angeschaut. komme aber absolut nicht klar. Es funktioniert schon nicht wenn ich den Pointer 256.0 vorgeben und nicht variabel gestalte. Siehe Anhang:Unbenannt.JPG

  6. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.189
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Der IN-Parameter #"I/O_Adresse" muß INT oder WORD sein. (die Static-Variable #Adresse ebenfalls)
    Beim Bausteinaufruf schreibst Du dann die EA-Adresse als Ganzzahl (z.B. 256) an den Baustein-Eingang "I/O_Adresse".

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #7
    Registriert seit
    10.11.2013
    Beiträge
    81
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Es funktioniert auf allen erdenklichen weisen nicht,... ich hab jetzt die 256 ins AR1 bekommen, folgendermaßen:

    Unbenannt.JPG
    Allerdings lädt er nicht ID256,... So langsam glaub ich das ich etwas komplett falsch habe irgendwie?

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.189
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Mein Code aus dem Beitrag #4 funktioniert auch nicht???

    Nachtrag:
    Ich habe mal das SLD im Code korrigiert: hatte "SLD 3" zwar richtig erklärt, jedoch wegen einem Schwächeanfall im Code "SLD 8" geschrieben

    Harald
    Geändert von PN/DP (26.06.2014 um 14:09 Uhr)
    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
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    ... es fehlt noch die Umrechnung in den Bit-Pointer.
    Mach es mal so :
    Code:
    L #EA_Adresse
    SLD 3
    ...
    Gruß
    Larry

  10. #10
    Registriert seit
    10.11.2013
    Beiträge
    81
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    Mein Code aus dem Beitrag #4 funktioniert auch nicht???

    Nachtrag:
    Ich habe mal das SLD im Code korrigiert: hatte "SLD 3" zwar richtig erklärt, jedoch wegen einem Schwächeanfall im Code "SLD 8" geschrieben

    Harald
    Hey, ja das war auch eine undankbare Zeit zu der du das geschrieben hast, habe es selbst schon mit SLD 3 probiert, dann geht es vielen Dank, ich habe noch ein anderes Problem aber ist mir gerade entfallen, VIELEN DANK für EURE HILFE!! ECHT Klasse, Gruß T

Ähnliche Themen

  1. Step 7 Diagnose und Informationen zur CPU im Anwenderprogramm (SFC51, 78 und 87)
    Von Niemandhatmichgesehn im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 13.03.2014, 13:59
  2. Antworten: 14
    Letzter Beitrag: 29.10.2008, 09:22
  3. Eingangsadresse stimmen nicht
    Von NeuerSIMATICNutzer im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 28.04.2008, 22:23
  4. Antworten: 11
    Letzter Beitrag: 06.10.2007, 16:28
  5. Variable Adressierung
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 16.10.2003, 18:59

Lesezeichen

Berechtigungen

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