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

Ergebnis 1 bis 9 von 9

Thema: Any Pointer verweis auf Bool ko!pieren

  1. #1
    Registriert seit
    28.03.2008
    Beiträge
    142
    Danke
    19
    Erhielt 25 Danke für 25 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Vorne weg ich habe die Suchfunktion bemüht und die Hilfe auch, leider habe ich mit beidem keinen Erfolg gehabt.

    Ich habe einen FC mit einem Any Pointer als Eingang. Nun würde ich gerne den Inhalt der variable wo der Any Pointer hinzeigt kopieren.
    Mit byte, word, dword usw. klappt es auch aber bei Bool steigt der SFC 20 aus. Die Erklärung warum der SFC20 zickt steht in der Hilfe "Anzahl der Bits muss durch 8 teilbar sein".

    Kann mir bitte jemand einen Tipp geben.

    Danke!
    Komm und wecke den Teufel unter meiner Schädeldecke. Das Chaos hat die Macht!
    Zitieren Zitieren Any Pointer verweis auf Bool ko!pieren  

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

    Standard

    Schau Dir mal die AWL-Hilfe zu speicherindirekter Adressierung und registerindirekter Adressierung an. (anstatt SFC20)

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren indirekte Adressierung  

  3. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    BoxHead (17.01.2013)

  4. #3
    Avatar von BoxHead
    BoxHead ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.03.2008
    Beiträge
    142
    Danke
    19
    Erhielt 25 Danke für 25 Beiträge

    Standard

    Leider komm ich damit nicht so richtig weiter. Liegt vielleicht aber auch an der Uhrzeit.

    Die Quelle kann ja eigentlich alles sein und bei den Beispielen in der AWL Hilfe habe ich den Eindruck man müsste dies vorher wissen ob es sich um einen Eingang oder ein Bit in einem Db geht usw.
    Komm und wecke den Teufel unter meiner Schädeldecke. Das Chaos hat die Macht!

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

    Standard

    Oooch, das ist gar nicht so schwer. Leider habe ich grad' kein Step7 zur Verfügung für die Details, doch es funktioniert etwa so:

    Zum Lesen von der Adresse auf die der ANY zeigt, ist zunächst der ANY zu prüfen, ob er eine Adresse enthält (Syntax ID), dann der Datentyp und Länge zu prüfen, ob er auf ein einzelnes BOOL zeigt, dann die DB-Nummer vom ANY in eine Zwischenvariable zu kopieren, dann der 32-Bit Pointer (enthält eine Bereichskennung) in ein Adressregister oder L/M-Dword zu laden, dann der DB zu öffnen. Dann kann per bereichsübergreifender indirekter Adressierung (Operation ohne explizite Angabe eines Speicherbereichs) das adressierte Bit ins VKE geladen werden ( U [...] ).

    Wenn der ANY auf was anderes als DB zeigt, dann ist die DB-Nummer 0, ein Öffnen eines DB[i] mit i=0 bewirkt nichts / schadet nicht.

    Das Lesen bzw. Auswerten des ANY macht man in AWL am besten mit registerindirekter Adressierung mit AR1.

    Harald
    Geändert von PN/DP (17.01.2013 um 20:44 Uhr)
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    BoxHead (17.01.2013)

  7. #5
    Avatar von BoxHead
    BoxHead ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.03.2008
    Beiträge
    142
    Danke
    19
    Erhielt 25 Danke für 25 Beiträge

    Standard

    Soweit bin ich bereits (dank Heiner Hilfe mit der "Hilfe"), E,A,M und Db gehen aber bei Z und T kracht es leider. Der Any kann diese Typen verwalten aber der "normale" 32Bit Pointer kotzt an der Stelle.
    Komm und wecke den Teufel unter meiner Schädeldecke. Das Chaos hat die Macht!

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

    Standard

    Ach ja, T und Z erfordern eine Sonderbehandlung. An die kommt man glaube ich nur mit speicherindirekter Adressierung heran, weil der erforderliche Pointer im Wortformat sein muß.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    BoxHead (17.01.2013)

  10. #7
    Avatar von BoxHead
    BoxHead ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.03.2008
    Beiträge
    142
    Danke
    19
    Erhielt 25 Danke für 25 Beiträge

    Standard

    Ich denke das vertage ich dann auf morgen. Vielen Dank für deine Hilfe. Wenn Dir zu dem Thema T und Z noch was einfällt, werde ich es sicher nicht ignorieren

    EDIT: Nun gehen auch T und Z mit hilfe von zwei Sprüngen und einer WORD Variable.
    Geändert von BoxHead (17.01.2013 um 21:01 Uhr)
    Komm und wecke den Teufel unter meiner Schädeldecke. Das Chaos hat die Macht!

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

    Standard

    Hier mal mein Lösungsbeispiel des FC.
    Es werden allerdings nicht alle Parameterfehler abgefangen:
    - die angegebene Adresse existiert nicht / ist zu groß
    - Aufrufe mit DBXx.y ohne Angabe einer DBnr und kein DB ist geöffnet wird nicht geprüft
    - Aufrufe mit DIXx.y müssten noch nach DBXx.y umgewandelt werden

    Code:
    // IN      aIn_SrcBit    : Any
    // IN_OUT  xInout_DstBit : Bool
    // TEMP    iTmp_DB_No    : Int (oder Word)
    // TEMP    iTmp_TZ_No    : Int (oder Word)
    
    // IN-Parameter (ANY) prüfen
          L     P##aIn_SrcBit               //Adresse des IN-Parameters
          LAR1  
    
          L     D [AR1,P#6.0]               //ANY: bereichsübergreifende Adresse P#bx.y
          T     #iTmp_TZ_No                 //untere 16 Bit vielleicht T- oder Z-Nummer
    
    //ANY+0 Byte: ANY-ID muß B#16#10 sein
    //ANY+1 Byte: Typ muß BOOL (B#16#01), Counter (B#16#1C) oder Timer (B#16#1D) sein
    //ANY+2 Word: Wiederholfaktor muß 1 sein
    
    // zeigt der ANY auf ein einzelnes BOOL (E A M L DB)?
          L     D [AR1,P#0.0]               //ANY-Header: ANY-ID + Typ + Wiederholfaktor
          L     DW#16#10010001              //ANY+1: Typ B#16#01 = BOOL
          ==D   
          SPB   AR1
    
    // zeigt der ANY auf einen Counter (Z)?
          POP                               //ANY-Header zurück in AKKU1   
          L     DW#16#101C0001              //ANY+1: Typ B#16#1C = Counter
          ==D   
          SPB   SIZ
    
    // zeigt der ANY auf einen Timer (T)?
          POP                               //ANY-Header zurück in AKKU1   
          L     DW#16#101D0001              //ANY+1: Typ B#16#1D = Timer
          ==D   
          SPB   SIT
    
    // Fehler: unzulässiger ANY-Parameter
          SPA   ERR
    
    //-----------------------------------------------------------------------------------
    
    // Adresse E A M L DB (DI)
    // !!! Adresse DIXx.y müsste nach DBXx.y gewandelt werden
    // !!! Aufruf mit DBXx.y ohne DBnr und kein DB offen wird nicht geprüft
    
    AR1:  L     W [AR1,P#4.0]               //eventuell DB-Nr
          T     #iTmp_DB_No                 //merken für speicherindirekt öffnen
    
          L     D [AR1,P#6.0]               //ANY: bereichsübergreifende Adresse P#bx.y
          LAR1                              //in AR1 für registerindirekt Lesen
    
    // Lesen E A M L DB
          AUF   DB [#iTmp_DB_No]            //(ist Adresse nicht in DB bewirkt es nichts)
          U      [AR1,P#0.0]                //SrcBit --> VKE
          SPA   OUTB
    
    // Lesen Counter Z
    SIZ:  U     Z [#iTmp_TZ_No]             //SrcBit --> VKE
          SPA   OUTB
    
    // Lesen Timer T
    SIT:  U     T [#iTmp_TZ_No]             //SrcBit --> VKE
    
    // gelesenes SrcBit an DstBit ausgeben
    OUTB: =     #xInout_DstBit              //VKE --> DstBit
    
    //-----------------------------------------------------------------------------------
    
    // OK/Fehleranzeige an ENO/BIE
    OK:   CLR                               //kein Fehler --> ENO/BIE=1
    ERR:  NOT                               //(bei Fehler Sprung hierher mit VKE=1)
          SAVE                              //VKE in ENO/BIE speichern
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet
    Zitieren Zitieren Bit indirekt kopieren  

  12. Folgende 2 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    BoxHead (18.01.2013),winnman (18.01.2013)

  13. #9
    Avatar von BoxHead
    BoxHead ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    28.03.2008
    Beiträge
    142
    Danke
    19
    Erhielt 25 Danke für 25 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich hatte eine ähnliche wenn auch etwas umfangreichere Lösung, werde mich nun aber mehr an Deinem Beispiel orientieren.

    Danke!
    Geändert von BoxHead (18.01.2013 um 23:53 Uhr)
    Komm und wecke den Teufel unter meiner Schädeldecke. Das Chaos hat die Macht!

Ähnliche Themen

  1. Abfrage Bool und Integer via FC mit Pointer
    Von Waelder im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 24.03.2011, 16:28
  2. S7 LAR P##... --- pointer auf pointer
    Von milmu im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 22.11.2010, 17:39
  3. Array of Bool auf 0 vergleichen
    Von Nordischerjung im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 02.07.2010, 09:25
  4. IEC-61131 Pointer mit Index auf BOOL Variable
    Von Stussi im Forum CODESYS und IEC61131
    Antworten: 21
    Letzter Beitrag: 14.12.2007, 09:11
  5. BOOL-Zugriff auf ein BIT im DB
    Von noeppkes im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 02.10.2007, 11:51

Lesezeichen

Berechtigungen

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