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

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

Thema: ANY Pointer aus Variablen und dann weiter mit dem SFC 20

  1. #1
    Registriert seit
    16.01.2013
    Beiträge
    41
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo !

    Bisher habe ich den SFC 20 aufgerufen mit
    SRCBLK:= P#EX.Y Byte 64
    DSTBLK := #Variable_wo_das_zeug_reinpasst
    (den RET_VAL schenke ich mir mal)

    Siemens Hilfe hab ich schon rauf und runter durch aber irgendwie krieg ich es nicht auf die Reihe....
    jetzt will ich das Ganze multiinstanzfaehig gestalten
    ich habe eine Boolsche IN variable nennen wir sie mal IN_BOOL und eine INT IN nenen wir die mal IN_INT (variable mit dem Wert 64)
    ich will also quasi aus dem was ueber IN_BOOL und IN_INT reinkommt die Variable zusammenstellen...

    Ich steh da komplett auf dem Schlauch


    gruss gerd
    Geändert von gerdh (16.01.2013 um 14:22 Uhr)
    Zitieren Zitieren ANY Pointer aus Variablen und dann weiter mit dem SFC 20  

  2. #2
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Hast Du Dir schon mal

    http://www.sps-forum.de/showthread.p...iger-FIFO-LIFO

    und

    http://www.sps-forum.de/showthread.p...für-Datentypen

    durchgelesen?

    Den Pointer wirst Du zusammensetzen müssen,
    Das Grauen lauert in der Zwischenablage !!

  3. #3
    gerdh ist offline Benutzer
    Themenstarter
    Registriert seit
    16.01.2013
    Beiträge
    41
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi !

    Ja klar habe ich.... das mit dem zusammenbauen mal aussen vor zu lassen.. angenommen der any Pointer steht nun im AR1 wie rufe ich damit dem SFC20 auf ?
    Wo kann ich AR1 hinkopieren damit ich es verwende kann....

    Gruss gerd

  4. #4
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    ich mache das so:

    Code:
       LAR1  P##ANY_PTR_Q                // Adresse des 1. lokalen Any- Zeigers
          L     W#16#1002                   // Kennung für Any - Zeiger
          T     LW [AR1,P#0.0]              // Syntax -ID und Typkennung eintragen
          L     #Laenge_in_Byte             // Länge in Bytes
          T     LW [AR1,P#2.0]              // Länge eintragen
          L     #Quelle_Anfang              // Anfangsadresse als Bytenummer
          SLD   3                           // in Byte - Adresse umwandeln
          OD    DW#16#84000000              // Bereichszeiger auf DB-Operanden bilden
          T     LD [AR1,P#6.0]              // und eintragen  
          L     #Quell_DB                   // DB - Nummer        
          T     LW [AR1,P#4.0]              // auch in ANY - Zeiger eintragen
          LAR1  P##ANY_PTR_Z                // Adresse des 2. lokalen Any- Zeigers
          L     W#16#1002                   // Kennung für Any - Zeiger
          T     LW [AR1,P#0.0]              // Syntax -ID und Typkennung eintragen
          L     #Laenge_in_Byte             // Länge in Bytes
          T     LW [AR1,P#2.0]              // Länge eintragen
          L     #Ziel_Anfang                // Anfangsadresse als Bytenummer
          SLD   3                           // in Byte - Adresse umwandeln
          OD    DW#16#84000000              // Bereichszeiger auf DB-Operanden bilden
          T     LD [AR1,P#6.0]              // und eintragen              
          L     #Ziel_DB                    // Ziel - DB Nummer
          T     LW [AR1,P#4.0]              // auch in ANY - Zeiger eintragen
          CALL  "BLKMOV"
           SRCBLK :=#ANY_PTR_Q
           RET_VAL:=#ERROR
           DSTBLK :=#ANY_PTR_Z
    wobei hier Länge, Startrange und DB-Nummer als IN-Parameter hereingeführt werden. Die Pointer ist als TEMP angelegt.
    Das Grauen lauert in der Zwischenablage !!

  5. #5
    gerdh ist offline Benutzer
    Themenstarter
    Registriert seit
    16.01.2013
    Beiträge
    41
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi !

    Soweit bin ich ja auch fast schon.... aber im Prinzip (wenn ich jetzt auf das Beispiel mit dem Eingang zureuckgreife => wie kriege ich die In Variable (bzw. was von aussen da drin steht) z.B. E256.0 in einen Any Pointer (der temporaer deklariert ist...
    dann muesste ich nur noch die Anzahl der Bytes aendern und Voila => er passt

    aber egal.... hier mal das bisherige
    Adresse und Anzahl_Bytes sind in Variablen im Integer format
    Code:
         L     P##Adresse_EKS
          L     B#16#02              //Typ BYTE
          T     %LB1
          L     #Anz_Bytes           //Anzahl (Wiederholungsfaktor)
          T     %LW2
          L     #Adresse             //Anfangsadresse
    //Pointer bauen
          T     %LD6
          L     B#16#81              //Speicherbereich (Eingaenge)
          T     %LB6
    
          CALL  BLKMOV
             SRCBLK  :=#Adresse_EKS
             RET_VAL :=#RET_VAL_SFC20_1
             DSTBLK  :=#EKS_Daten
    Gruss Gerd
    Geändert von gerdh (16.01.2013 um 16:03 Uhr)

  6. #6
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Na ja, der SFC 20 kann soweit ich weis nur BYTES übertragen.

    Damit wäre Dein IN_BOOL hinfällig und IN_INT die Startadresse. Länge 1.
    Oder IN_INT ist die Länge, dann brauchst Du noch die Startadresse.

    War so was ähnliches nicht die Woche schon mal im Forum?
    Das Grauen lauert in der Zwischenablage !!

  7. #7
    gerdh ist offline Benutzer
    Themenstarter
    Registriert seit
    16.01.2013
    Beiträge
    41
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also wenn ich beim SCF 20 Angebe als SRCBLK P#E256.0 Byte 64 gehts

  8. #8
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Was übersetzt heist: Mache einen Pointer auf Eingänge,ab dem Bit 256.0, 64 Bytes lang.

    Noch mal auf Anfang:

    WAS soll von WO kopiert werden?
    Das Grauen lauert in der Zwischenablage !!

  9. #9
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard

    Zitat Zitat von gerdh Beitrag anzeigen
    Hi !

    Soweit bin ich ja auch fast schon.... aber im Prinzip (wenn ich jetzt auf das Beispiel mit dem Eingang zureuckgreife => wie kriege ich die In Variable (bzw. was von aussen da drin steht) z.B. E256.0 in einen Any Pointer (der temporaer deklariert ist...
    dann muesste ich nur noch die Anzahl der Bytes aendern und Voila => er passt

    aber egal.... hier mal das bisherige
    Adresse und Anzahl_Bytes sind in Variablen im Integer format
    Code:
         L     P##Adresse_EKS
          L     B#16#02              //Typ BYTE
          T     %LB1
          L     #Anz_Bytes           //Anzahl (Wiederholungsfaktor)
          T     %LW2
          L     #Adresse             //Anfangsadresse
    //Pointer bauen
          T     %LD6
          L     B#16#81              //Speicherbereich (Eingaenge)
          T     %LB6
    
          CALL  BLKMOV
             SRCBLK  :=#Adresse_EKS
             RET_VAL :=#RET_VAL_SFC20_1
             DSTBLK  :=#EKS_Daten
    Gruss Gerd
    Was steht denn in Adresse?
    256
    oder richtiger Weise
    2048 (Pointerformat nach SLD 3)

    Schau dir mal den Code von dtsclipper an, der ist besser.
    Deine Zugriffe auf LB, LW, LD sind nicht zu empfehlen, das L P##Adresse_EKS ist dadurch bei dir auch ohne Wirkung. Mach das so wie im Beispiel, dann wird das vielleicht was. Deine Code funktioniert nur, wenn Adresse_EKS als Any an erster Stelle im Temp-Bereich steht, also bei LW 0 beginnt.
    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

  10. #10
    gerdh ist offline Benutzer
    Themenstarter
    Registriert seit
    16.01.2013
    Beiträge
    41
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    also so funktionierts (denb SFC 20 hab ich ins naexhste NW ausgelagert
    Code:
    M001: L     P##Adresse_EKS
          L     W#16#1002            // Kennung für Any - Zeiger
          T LW [ AR1 , P#0.0 ]
          L     #Anz_Bytes           //Anzahl (Wiederholungsfaktor)
          T     %LW2
          L     #Adresse             //Anfangsadresse
          SLD   3                    //Pointer bauen
          T     %LD6
          L     B#16#81              //Speicherbereich (Eingaenge)
          T     %LB6
    Durch was sollte ich LW und LD "ersetzen" ?

    so ?
    Code:
    M001: L     P##Adresse_EKS
          L     W#16#1002            // Kennung für Any - Zeiger
          T LW [ AR1 , P#0.0 ]
          L     #Anz_Bytes           //Anzahl (Wiederholungsfaktor)
          T  LW [ AR1 , P#2.0]
          L     #Adresse             //Anfangsadresse
          SLD   3                    //Pointer bauen
          T     LD [AR1, P#6.0 ]
          L     B#16#81              //Speicherbereich (Eingaenge)
          T LB [ AR1 , P#6.0 ]
    Gruss Gerd
    Geändert von gerdh (17.01.2013 um 10:01 Uhr)

Ähnliche Themen

  1. Step 7: Any Pointer aus dem FB führen
    Von KNEFI im Forum PC- und Netzwerktechnik
    Antworten: 21
    Letzter Beitrag: 25.01.2010, 15:03
  2. Antworten: 3
    Letzter Beitrag: 01.09.2006, 12:09
  3. Antworten: 2
    Letzter Beitrag: 16.08.2005, 17:23
  4. Pointer Adressoffset mit Variablen
    Von tatz im Forum Stammtisch
    Antworten: 2
    Letzter Beitrag: 21.11.2004, 22:18
  5. Pointer Adressoffset mit Variablen
    Von Anonymous im Forum Sonstige Steuerungen
    Antworten: 0
    Letzter Beitrag: 15.11.2004, 15:29

Lesezeichen

Berechtigungen

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