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

Seite 6 von 9 ErsteErste ... 45678 ... LetzteLetzte
Ergebnis 51 bis 60 von 90

Thema: SCL -Arrays mit einander vergleichen

  1. #51
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier übrigens das Beispiel :
    Code:
    FUNCTION FC399 : VOID
    Title   = 'UP Any-Pointer zerlegen'  // UP Any-Pointer zerlegen
     
    //     Bausteinparameter
     
    VAR_INPUT
       // Eingangsparameter
       DatenQuelle : ANY ;
    END_VAR
     
    VAR_OUTPUT
       // Ausgangsparameter
       Daten_Mem : STRING [4] ;
       Daten_Typ : STRING [4] ;
       Daten_DB  : WORD ;
       Daten_Ptr : DWORD ;
       Daten_1W  : INT ;
       Daten_Len : INT ; 
    //   Inhalt : INT ;
    END_VAR
     
    VAR_TEMP
       // temporäre Variablen
       hDatenQuelle : ANY ;
       xDatenQuelle AT hDatenQuelle : STRUCT
                  ID_Code   : BYTE ;  // 10h für S7
                  DataTyp   : BYTE ;
                  Anzahl    : WORD ;
                  DB_Nr     : WORD ;
                  SpeicherPtr : DWORD ;
                  END_STRUCT ;
       yDatenQuelle AT hDatenQuelle : STRUCT
                  ID_Code   : BYTE ;  // 10h für S7
                  DataTyp   : BYTE ;
                  Anzahl    : WORD ;
                  DB_Nr     : WORD ;
                  Speicherbereich : ARRAY [0..3] OF BYTE ;
                  END_STRUCT ;
    END_VAR
     
     
    //     Anweisungsteil 
     
    BEGIN
       hDatenQuelle := DatenQuelle ;
     
       IF    xDatenQuelle.DataTyp = w#16#00 THEN Daten_Typ := 'Nil' ;   // Nil
       ELSIF xDatenQuelle.DataTyp = w#16#01 THEN Daten_Typ := 'X' ;     // Bool
       ELSIF xDatenQuelle.DataTyp = w#16#02 THEN Daten_Typ := 'B' ;     // Byte
       ELSIF xDatenQuelle.DataTyp = w#16#03 THEN Daten_Typ := 'Char' ;  // Char
       ELSIF xDatenQuelle.DataTyp = w#16#04 THEN Daten_Typ := 'W' ;     // Word
       ELSIF xDatenQuelle.DataTyp = w#16#05 THEN Daten_Typ := 'Int' ;   // Integer
       ELSIF xDatenQuelle.DataTyp = w#16#06 THEN Daten_Typ := 'DW' ;    // Double-Word
       ELSIF xDatenQuelle.DataTyp = w#16#07 THEN Daten_Typ := 'DInt' ;  // Double-Integer
       ELSIF xDatenQuelle.DataTyp = w#16#08 THEN Daten_Typ := 'Real' ;  // Real
       ELSIF xDatenQuelle.DataTyp = w#16#09 THEN Daten_Typ := 'Date' ;  // Date
       ELSIF xDatenQuelle.DataTyp = w#16#0A THEN Daten_Typ := 'TOD' ;   // Time-of-Day
       ELSIF xDatenQuelle.DataTyp = w#16#0B THEN Daten_Typ := 'Time' ;  // Time
       ELSIF xDatenQuelle.DataTyp = w#16#0C THEN Daten_Typ := 'S5T' ;   // S5Time
       ELSIF xDatenQuelle.DataTyp = w#16#0E THEN Daten_Typ := 'DT' ;    // Date-and-Time
       ELSIF xDatenQuelle.DataTyp = w#16#13 THEN Daten_Typ := 'Str' ;   // String
       END_IF ;
       IF    yDatenQuelle.Speicherbereich[0] = w#16#81 THEN Daten_Mem := 'E' ;   //Eingänge
       ELSIF yDatenQuelle.Speicherbereich[0] = w#16#82 THEN Daten_Mem := 'A' ;   // Ausgänge
       ELSIF yDatenQuelle.Speicherbereich[0] = w#16#83 THEN Daten_Mem := 'M' ;   // Merker
       ELSIF yDatenQuelle.Speicherbereich[0] = w#16#84 THEN Daten_Mem := 'DB' ;  // DB
       ELSIF yDatenQuelle.Speicherbereich[0] = w#16#85 THEN Daten_Mem := 'DI' ;  // Instanz-DB
       ELSIF yDatenQuelle.Speicherbereich[0] = w#16#86 THEN Daten_Mem := 'L' ;   // Lokaldaten
       ELSIF yDatenQuelle.Speicherbereich[0] = w#16#87 THEN Daten_Mem := 'LV' ;  // vorherige Lokaldaten
       END_IF ;
       Daten_DB  := xDatenQuelle.DB_Nr ;  
       Daten_Len := WORD_TO_INT (xDatenQuelle.Anzahl) ;
       Daten_Ptr := xDatenQuelle.SpeicherPtr AND dw#16#00FF_FFFF ;
       Daten_1W  := DWORD_TO_INT(SHR (IN:=Daten_Ptr , n:=3)) ;
     
    END_FUNCTION
    Das Ding ist nur als Beispiel gedacht ... ich nehme es aber gern hin und wieder für Erklärungen heran.
    Weiteres zum ANY-Pointer gibt es in der Rubrik FAQ.

    Gruß
    LL

  2. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    MatthiasH24 (04.09.2008)

  3. #52
    MatthiasH24 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2008
    Beiträge
    132
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Ja das sehe ich ein. dann bist du herzlich eingeldane mir dabei zu helfen
    !

    Wie sieht es mit meinem Programm oben aus habe ich damit nur ein parameter oder einen pointer? das würde mir zuerst schon mal helfen

  4. #53
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Du hättest 2 Eingangsparameter vom Typ ANY (Quell-Array 1 und 2). Des weiteren dann deine Ausgangsparameter, die den Status des Vergleichs ausgeben und ggf. was dir sonst noch so dazu einfällt ...

    Die IN's könnten dann so aussehen :
    Code:
    Quelle_1 : p#DB1.DBX0.0 REAL 32
    Quelle_2 : p#DB2.DBX0.0 REAL 32

  5. #54
    MatthiasH24 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2008
    Beiträge
    132
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Redest du jetzt von deinem beispiel oder von meinem?

    Die Abfrage auf welchen datentyp finde ich gut das könnte ich nämlich sehr gut bei mir einbinden.

    Aber wie du schon richtig gesagt hast würde ich das schon gerne selber schreiben mit dem pointer dann kann aihc es auch brauche nur noch den richtigen Anstoss.

  6. #55
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Das Beispiel mit den Quellen (1 und 2) war für dich gedacht ...
    Ich bin mal gespannt, was du so baust ...

  7. #56
    MatthiasH24 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2008
    Beiträge
    132
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Ja jetzt abue ich nichts mehr mache jetzt feierabend aber morgen früh geht es weiter.

    danke schon mal und grüßle

  8. #57
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von MatthiasH24 Beitrag anzeigen
    Ja jetzt abue ich nichts mehr mache jetzt feierabend aber morgen früh geht es weiter.
    ja Larry, ich schüttle auch den Kopf ... aber laß die Jugend mal machen ...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  9. #58
    MatthiasH24 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2008
    Beiträge
    132
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard

    Was heißt denn hier kopfschütteln? habe in meiner Wohnung kein Internet und auch nicht die software!

    Jetzt bin ich aber wieder dran und stehe immer noch mit den Pointer auf Kriegsfuss...

    Kann mir vllt irgendjemand nur ein kleines beispiel schicken das ich mal sehe wie das genau aufgebaut ist die Funktion? Wäre nett.

    Und @larry das mit den Quellen so als VAR_Input def geht nicht auch net mit Strichpunkt.
    Geändert von MatthiasH24 (05.09.2008 um 07:43 Uhr)

  10. #59
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard

    Moin,

    ich hab den FC jetzt nicht getestet, aber es könnte sein, dass Byte 0 und 1 der Strings noch die maximal-Länge und die tatsächliche Länge zugewiesen werden muss. Strings sind in S7 etwas umständlich zu händeln

    hth
    "Das Leben ist viel zu kurz, um schlecht zu essen !"
    (Johann Lafer zur SWR3 Grillparty)
    Zitieren Zitieren Hinweis "String"  

  11. #60
    MatthiasH24 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2008
    Beiträge
    132
    Danke
    38
    Erhielt 6 Danke für 6 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ich verstehe zwar grad net was mir damit sagen willst aber ok

    So ich habe jetzt mal etwas rumprobiert und aus nem anderem beispiel was eingefügt aber es geht nicht so wirklich.
    hier mal der Code

    Code:
    FUNCTION FC10:INT
    VAR_INPUT
        
        pVariablename: ANY;
    END_VAR
    VAR_TEMP
       pZeiger: ANY;
       MyZeiger AT pzeiger:STRUCT
       ID: BYTE;
       TYP: BYTE;
       NUM: WORD;
       DBN: WORD;
       PTR: DWORD;
    END_STRUCT;
    dwOffset:DWORD;
    END_VAR
    BEGIN
    pZeiger:= pVariablename;
    dwOffset := MyZeiger.PTR;
    
    (*zeiger.ANY_Wert := 16#10;
    zeiger.quelle_Typ := 16#02;
    zeiger.quelle_Laenge :=16#04;
    zeiger.quelle_DB_NR := 16#06;
    zeiger.quelle_byte_zeiger :=16#84;*)
    FC10 := WORD_TO_INT(DWORD_TO_WORD(dwOffset));   
        
    END_FUNCTION
    FUNCTION_BLOCK Fb50
    VAR
        Wert : ARRAY [1..32] OF INT;
        isizeofWert: INT;
        ibyteOffset: INT;
    END_VAR
    VAR_TEMP
        ibyteoffsetFromStratOfDB:INT;
    END_VAR
    BEGIN
    isizeofWert:= FC10(pArrayName:=Wert);
    ibyteOffset:= FC11(pArrayName:= Wert ,pArrayElement:= Wert[13]);
    ibyteoffsetFromStratOfDB:= FC12(pVariablename:= DB10.idata13);
    END_FUNCTION_block
    So mein problem ist jetzt das er beim FB rum motzt wegen den pArray Variablen und ich nicht weiß ob ich vorher schon was in den DB schreiben muss das er es erkennt.

    mein Ob sieht bis jetzt so aus

    Code:
     CALL  FC    10
           pVariablename:=DB10.DBW2
           RET_VAL      :=MW100
          CALL  FC    11
          CALL  FC    12
    
          BE
    Geändert von MatthiasH24 (05.09.2008 um 08:42 Uhr)

Ähnliche Themen

  1. DBs nach einander lesen
    Von sb9674 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 07.12.2009, 20:28
  2. 2 Arrays aus 2 DBs vergleichen
    Von Günni1977 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 03.12.2008, 17:14
  3. dynamische Arrays?
    Von merlin im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 30.05.2008, 16:06
  4. Pointer und Arrays
    Von SolSna im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 26.02.2008, 20:16
  5. arrays mit udt...
    Von Jochen Kühner im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 01.12.2005, 14:27

Lesezeichen

Berechtigungen

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