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

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

Thema: Zum Thema Pointer

  1. #1
    Registriert seit
    04.01.2006
    Beiträge
    133
    Danke
    16
    Erhielt 2 Danke für 2 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Machen gerade im SPS Kurs die indirekte Adressierung und somit verbunden auch die ganzen Pointer Arten. Wie das ganze funktioniert ist mir jetzt so ungefähr zu 90 Prozent klar. Aber für was brauch ich das.
    Beispiel:
    L 30
    SLD 3
    LAR1
    L MW [AR1,P#0.0]

    Somit würde er das MW 30 laden, warum muß ich es so kompliziert schreiben, ich kann doch gleich schreiben - L MW30, oder geht es da rein um Speicher in der CPU zu sparen.
    Zitieren Zitieren Zum Thema Pointer  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Du bist gut

    Nimm an, du hast als Fehlermeldungen Bitmeldungen, die in einem DB "Störmeldungen" eingetragen werden (So wird as bei ProTool und WinCCFlex gemacht).

    Nun willst du einen FC oder FB schreiben, der abfragt, ob Fehlermeldungen anliegen.

    Du könntest alle Bits abfragen (Bei 496 Störmelfungen nicht schön).
    Du könntest nun lauter Wortvergleicher auf Null schreiben, verodern und schon hättest du das Ergebnis. (Macht auch noch Arbeit, bei 32 Worten.)

    Oder eine Schleife Programmieren:

    Code:
          AUF   "STOERMELDUNGEN DB"
    
          L     P#0.0
          T     #pointer_1
    
          L     0
          T     #ergebnis
    
          L     32                          //Anzahl Störmeldungen (Wortweise)
    SC02: T     #zaehler
    
          L     DBW [#pointer_1]            // Lade Datenwort
          L     0                           // Lade 0
          ==I                               // keine Störmeldung !!!
          SPB   NUL2                        // Ergebnis nicht hochzählen
          L     #ergebnis                   // bei Erg <> 0 Ergebnis hochzählen
          L     1                           // um 1 erhöhen
          +I    
          T     #ergebnis
    
    NUL2: NOP   0                           // Zeiger erhöhen aud nächstest DW
          L     #pointer_1
          L     P#2.0
          +D    
          T     #pointer_1
          L     #zaehler
          LOOP  SC02                        // Schleife solange, bis #zaehler auf 0
    
          L     #ergebnis                   // bei Ergebnis <> 0 liegt Fehler vor
          L     0
          <>I   
          =     "M1.0 Sammelfehler"
    Ist hier nur etwas anders geschrieben:

    L 0
    SLD 3
    LAR1
    L MW [AR1,P#0.0]

    man kann auch gleich einen Pointer laden und damit arbeiten, wie oben beschrieben, aber das Prinzip ist das Selbe.

    L P0.0
    T #Pointer_1 //das ist ein DWORD
    L MW [#Pointer_1]
    Geändert von Ralle (26.03.2007 um 16:54 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  3. #3
    Registriert seit
    19.06.2003
    Beiträge
    2.200
    Danke
    85
    Erhielt 259 Danke für 175 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Du bist gut

    Du könntest nun lauter Wortvergleicher auf Null schreiben, verodern und schon hättest du das Ergebnis. (Macht auch noch Arbeit, bei 32 Worten.)
    Warum denn Wort- und nicht DWort-Vergleicher?
    Warum erst vergleichen und dann verodern?
    A DBxx
    L DBD 0
    L DBD 4
    OD
    L DBD 8
    OD
    L DBD 12
    OD
    L DBD 16
    L 0
    ><D
    ...
    ist kaum mehr zu Schreiben (ok, ich habe es nur für bis zu 160 Meldungen hingeschrieben), weniger fehlerträchtig und schneller.


    Nun etwas, wozu Pointer wirklich gut sind:
    Du hast einen runden liegenden Tank mit Füllstandsmessung. Die gibt dir die Höhe und du willst die Liter wissen. Rechnen ist schlecht, weil schon in der Fläche des Kreissegments lauter sin, arcsin, und sqrt vorkommen und wenn der Tank dann noch gewölbte Seitenteile hat...
    Deshalb gibt es vom Hersteller eine Peiltabelle, Liter bei x cm. Die tippst du in einen DB ab, z.B. für jeden ganzen Zentimeter einen Wert. Nun "errechnest" du aus der Höhe, in welchem Datenwort deine Liter stehen. Und auf das errechnete Datenwort kannst du nur mit einem Pointer zugreifen, weil ja beim Programmieren nicht feststeht, wie hoch das Zeug im Tank steht.

  4. #4
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.811
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    30 muss ja keine konstante sein, sinn macht das ganze wenn es ebenfalls eine variable ist und du abhähning von dem was da drin steht auf verschiedene adressen zugreifen kannst...

    ohne das funktioniert in einem anständigen sps programm garnix mehr...

    nur ein hinweis, nicht falsch verstehen - kein ansticheln zum glaubenskrieg - nur ein hinweis:

    in kop und fup geht das nicht nur in awl und scl...


    //edit
    naja ich bin einfach zu langsam für dieses forum...
    "Es ist weit besser, große Dinge zu wagen, ruhmreiche Triumphe zu erringen, auch wenn es manchmal bedeutet, Niederlagen einzustecken, als sich zu den Krämerseelen zu gesellen, die weder große Freude noch großen Schmerz empfinden, weil sie im grauen Zwielicht leben, das weder Sieg noch Niederlage kennt." Theodore Roosevelt - President of the United States (1901-1909)

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.697 Danke für 1.949 Beiträge

    Standard

    Zitat Zitat von Zottel Beitrag anzeigen
    Warum denn Wort- und nicht DWort-Vergleicher?
    Warum erst vergleichen und dann verodern?
    Weil es 1. ein Beispiel ist und es 2. auch Anlagen mit 1500 Fehlermeldungen gibt.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. #6
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.811
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Weil es 1. ein Beispiel ist und es 2. auch Anlagen mit 1500 Fehlermeldungen gibt.
    welcher kunde kauft eine anlage mit so vielen störungen?
    *duckundweg*


    @schilcher

    schau mal in der faq oder fütter die sucher hier im forum, das thema wird immer wieder sehr ausführlich diskutiert - darüber findest du ne menge...
    "Es ist weit besser, große Dinge zu wagen, ruhmreiche Triumphe zu erringen, auch wenn es manchmal bedeutet, Niederlagen einzustecken, als sich zu den Krämerseelen zu gesellen, die weder große Freude noch großen Schmerz empfinden, weil sie im grauen Zwielicht leben, das weder Sieg noch Niederlage kennt." Theodore Roosevelt - President of the United States (1901-1909)

  7. #7
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard

    nur ein hinweis, nicht falsch verstehen - kein ansticheln zum glaubenskrieg - nur ein hinweis:

    in kop und fup geht das nicht nur in awl und scl...
    Das mag für Siemens und Codesys und sonstige Pseudo-Kop Software gelten, mit "richtiger" Kop Software geht das natürlich. Vielleicht solltet Ihr mal über Euren Siemens Tellerrand rausschauen, dann bemerkt Ihr vielleicht endlich mal was Euch entgeht und wie so manches anderswo einfacher geht.

  8. #8
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.811
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    du redest jetzt von ab?
    das stimmt - wobei da früher eben nur kop ging...
    "Es ist weit besser, große Dinge zu wagen, ruhmreiche Triumphe zu erringen, auch wenn es manchmal bedeutet, Niederlagen einzustecken, als sich zu den Krämerseelen zu gesellen, die weder große Freude noch großen Schmerz empfinden, weil sie im grauen Zwielicht leben, das weder Sieg noch Niederlage kennt." Theodore Roosevelt - President of the United States (1901-1909)

  9. #9
    Registriert seit
    11.05.2005
    Ort
    Baden-Württemberg
    Beiträge
    669
    Danke
    113
    Erhielt 153 Danke für 124 Beiträge

    Standard

    Hallo zusammen,

    muss auch mal meinen Senf zu der Sammelstörungsgeschichte dazugeben.

    Ich würde auch die Version von Ralle verwenden, da sie -einmal angelegt- sehr einfach auf einen veränderten Meldebereich angepasst werden kann.

    Ausserdem ist mit der LOOP-Variante, gerade bei großen Meldebereichen, Zeitersparnis für die SPS drin.

    Wenn man nämlich nur die Sammelstörung auswerten will sollte das Prog. die Schleife beim ersten gefundenen Fehler verlassen:

    .
    .
    .
    L DBW [#pointer_1] // Lade Datenwort
    L 0 // Lade 0
    <>I // Störmeldung !!!
    SPB ERR
    L #pointer_1
    L P#2.0
    +D
    T #pointer_1
    L #zaehler
    LOOP SC02
    CLR
    ERR: = "M1.0 Sammelfehler"

    Damit erspart man sich weitere Vergleiche wenn das Ergebnis eh schon feststeht.

    Schöne Grüße

    Micha

  10. #10
    Registriert seit
    14.10.2004
    Beiträge
    104
    Danke
    24
    Erhielt 7 Danke für 7 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Zottel Beitrag anzeigen
    Warum denn Wort- und nicht DWort-Vergleicher?
    Warum erst vergleichen und dann verodern?
    A DBxx
    L DBD 0
    L DBD 4
    OD
    L DBD 8
    OD
    L DBD 12
    OD
    L DBD 16
    L 0
    ><D
    ...
    ist kaum mehr zu Schreiben (ok, ich habe es nur für bis zu 160 Meldungen hingeschrieben), weniger fehlerträchtig und schneller.


    Nun etwas, wozu Pointer wirklich gut sind:
    Du hast einen runden liegenden Tank mit Füllstandsmessung. Die gibt dir die Höhe und du willst die Liter wissen. Rechnen ist schlecht, weil schon in der Fläche des Kreissegments lauter sin, arcsin, und sqrt vorkommen und wenn der Tank dann noch gewölbte Seitenteile hat...
    Deshalb gibt es vom Hersteller eine Peiltabelle, Liter bei x cm. Die tippst du in einen DB ab, z.B. für jeden ganzen Zentimeter einen Wert. Nun "errechnest" du aus der Höhe, in welchem Datenwort deine Liter stehen. Und auf das errechnete Datenwort kannst du nur mit einem Pointer zugreifen, weil ja beim Programmieren nicht feststeht, wie hoch das Zeug im Tank steht.
    @Zottel: Das kann man auch sehr elegant mit dem S7 Standardbaustein ...(fällt mir gerade nicht ein) "korrelierte Datentabellen" lösen.
    Man übergibt dem Funktionsbaustein einen X-Wert und er ermittelt den dazu gehörenden Y-Wert.
    Die X- und Y-Wertepaare muß man vorher in einem Datenbaustein hinterlegen. Ist ein feiner Funktionsbaustein der mir schon manches mal
    sehr geholfen hat...

    Gruß

Ähnliche Themen

  1. Thema Rundtakt.....
    Von Jethro2006 im Forum Simatic
    Antworten: 23
    Letzter Beitrag: 22.03.2011, 07:57
  2. Energieeffizienz ein Thema?
    Von b0zzen im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 25.01.2011, 09:21
  3. Streichelzoo Thema
    Von rostiger Nagel im Forum Stammtisch
    Antworten: 13
    Letzter Beitrag: 22.09.2009, 14:38
  4. Thema Any Pointer
    Von 1schilcher im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 04.04.2007, 20:05
  5. Thema für Diplomarbeit
    Von Anonymous im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 10.05.2004, 07:09

Lesezeichen

Berechtigungen

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