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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 29 von 29

Thema: SCL - Auf Ziel eines ANY-Pointers zugreifen

  1. #21
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hast Du PLCSIM? Da könntest du Deinen Code gefahrlos ausgiebig testen.

    Ich kommentiere einfach mal von oben nach unten durch:
    • Ich vermute mal, Dein Code soll in einem FC sein. (falls Du den Code in einen FB einbaust, dann darfst Du den FB nicht als Multiinstanz deklarieren (bzw. mußt den Instanz-Offset in AR2 berücksichtigen))
    • Du mußt aus dem Speicherbereich lesen, auf den AR1 zeigt (V ...), Du liest aber aus dem eigenen TEMP (LW ..). Es muß heißen: L W [AR1,P#0.0]
    • Du darfst nicht nur einfach den Wiederholfaktor nehmen, sondern mußt auch prüfen, auf welchen Typ der ANY zeigt. Bei Struct und Array wird in der Regel die Anzahl Bytes übergeben (notfalls auf eine gerade Anzahl Bytes aufgerundet!)
      Bei einem "ARRAY[1..24] OF BOOL" macht der AWL-Editor trotz symbolischer Angabe "P#... BYTE 4" draus!
    • da Du Bits adressieren und zählen wolltest, darfst Du AR1 nur um Bitadressen weiterstellen, durch Dein "SLW 3" erhöhst Du die Byteadresse. (zum Erhöhen der Byteadresse müßte außerdem "SLD 3" verwendet werden)
    • Du darfst AR1 in jedem Schleifendurchgang immer nur um 1 Element weiterstellen, Du addierst aber in jedem Durchgang den immer größer werdenden Schleifenzähler
    • der ANY-Wiederholfaktor ist ein vorzeichenloser Wert, Du mußt anstatt >I mit >D vergleichen
    • Bits (Bool) liest man nicht mit L sondern mit U
    • es sieht sauberer aus, wenn man eine Oder-Verknüpfung auch mit O anfängt. Bei S7 braucht man kein "Angst"-U (das hilft im Fall der Fälle auch nicht)
    • statt SPB + SPA kann man kürzer schreiben: SPBN


    Zitat Zitat von michael77 Beitrag anzeigen
    Code:
      L     P##Struct_Any               //Eingang
          LAR1  
    
    // Aufbau des ANY-Zeigers
          L     LW [AR1,P#2.0]
          T     #Anzahl_Bytes
    
          L     LW [AR1,P#4.0]
          T     #DB_Nr
    
          L     LD [AR1,P#6.0]              //Bereichszeiger
          LAR1  
    
          AUF   DB [#DB_Nr]
          L     0
          T     #Loop_Zaehler
    
    next: NOP   0
          L     #Loop_Zaehler
          SLW   3
          +AR1
          L     B [AR1,P#0.0]
          L     0
          >I    
          =     #Bit_True
    
          L     #Loop_Zaehler
          +     1
          U(    
          T     #Loop_Zaehler
          L     #Anzahl_Bytes
          >I    
          )     
          O     #Bit_True
          SPB   exit
          SPA   next
    exit: NOP   0
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  2. #22
    Registriert seit
    25.03.2012
    Beiträge
    314
    Danke
    60
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Ich verstehe aber deine Intension - ich hatte auch schon mal über etwas in der Art nachgedacht - es aber dann verworfen weil man an der Schnittstelle eines Bausteins schon durchaus den erwarteten Typ festlegen kann - das machen die meißten Hochsprachen ja auch nicht anders. Wenn man eine Überlagerung erzeugen könnte ...

    Aber naja ... es ist halt wie es ist ...
    Nurfürs Verständnis: Was meinst du hier genau?

  3. #23
    Registriert seit
    25.03.2012
    Beiträge
    314
    Danke
    60
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Zitat Zitat von Löwensenft Beitrag anzeigen
    Falls doch noch eine Info aufkommen sollte, wie man auf referenzierte Lokaldaten zugreifen kann, freue ich mich darüber.
    Ist das nicht ganz böses S5-tum, das dem Speichermangel geschuldet war

  4. #24
    Registriert seit
    25.03.2012
    Beiträge
    314
    Danke
    60
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Wenn der FC sowieso verschiedene Dinge tun soll - warum mußt Du das alles in nur 1 FC quetschen?
    Mache doch 4 FC mit jeweils verschiedenen Eingangsparametern.
    Oder "wrappe" 4 FC um einen Kern-FC.

    Allerdings könnte es passieren, daß solch ein Konstrukt womöglich jeder versteht...

    Harald
    Man kann ganz einfach den Datentyp auswerten und fertig.
    Die Alternativ-Konstrukte von Harald erhöhen mMn nur den Projektierungsaufwand wenn man hinterher die "Masse" macht..
    Geändert von Flux (08.02.2015 um 12:31 Uhr)

  5. #25
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Zitat Zitat von Flux Beitrag anzeigen
    Die Alternativ-Konstrukte von Harald erhöhen mMn nur den Projektierungsaufwand wenn man hinterher die "Masse" macht..
    Die Alternativ-Konstrukte funktionieren allerdings mit jeder PLC und jeder Programmiersprache und auch voll-symbolisch

    Das macht Siemens übrigens ebenso bei Bausteinen, wo es ...zig Versionen für ...zig IO-Datentypen gibt, daß man am Baustein den Datentyp extra projektieren muß, sozusagen ein Wrapper-Makro.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #26
    Registriert seit
    25.03.2012
    Beiträge
    314
    Danke
    60
    Erhielt 9 Danke für 8 Beiträge

    Standard

    Ich pflege trotzdem lieber 1 statt x bauateintypen.

  7. #27
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    @Flux:
    zu Beitrag #22 : was meinst du bzw. was wolltest du wissen ?
    Ansonsten halte ich deine Anmerkungen nicht unbedingt für konstruktiv ...

    Gruß
    Larry

  8. #28
    Registriert seit
    25.03.2012
    Beiträge
    314
    Danke
    60
    Erhielt 9 Danke für 8 Beiträge

    Standard

    ich hatte den Inhalt der Aussage nicht verstanden:
    "ich hatte auch schon mal über etwas in der Art nachgedacht"

  9. #29
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das besagt genau das, was ich da geschrieben habe : ich habe darüber nachgedacht (für meine Anwendungen) es aber nicht mehr weiter verfolgt weil mir der Aufwand (hier vor Allem der die Rechenzeit beeinflussende) zu unverhältnismäßig (bei Verwendung von SCL) erschien ...

Ähnliche Themen

  1. Antworten: 23
    Letzter Beitrag: 17.07.2014, 21:58
  2. SCL: Auf Bits eines Word zugreifen.
    Von Aksels im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 28.10.2011, 17:10
  3. Antworten: 1
    Letzter Beitrag: 11.03.2008, 09:39
  4. deklarierung eines any pointers
    Von viech im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 29.01.2008, 13:39
  5. Verwendung eines Any-Pointers im FB
    Von merlin im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 17.04.2007, 21:33

Lesezeichen

Berechtigungen

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