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

Ergebnis 1 bis 6 von 6

Thema: Beckhoff "indirekte Adressierung"

  1. #1
    Registriert seit
    16.03.2004
    Beiträge
    173
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo

    Ich habe einige globale Arrays wie zB
    S010_MP_KALIB_001 :ARRAY[1..35] OF REAL;
    S010_MP_KALIB_002 :ARRAY[1..35] OF REAL;
    S010_MP_KALIB_003 :ARRAY[1..35] OF REAL;

    Gibt es eine Möglichkeit, die Arrays in einer Schleife durchzuarbeiten?
    Ich müsste das 001 bis 099 in der Variable durch einen Schleifenzähler verändern. Gibts da was?

    Danke
    Tom
    greetings from upper austria

    ... merlin ...
    Zitieren Zitieren Beckhoff "indirekte Adressierung"  

  2. #2
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Code:
    VAR
       S010_MP_KALIB_001    :ARRAY[iStartArr ..iEndArr] OF REAL; 
       idx : INT; 
    END_VAR
    VAR CONSTANT
       iStartArr : INT := 1;
       iEndArr: INT := 35;
    END_VAR
    --------------------------
    FOR idx := iStartArr TO iEndArr DO
       S010_MP_KALIB_001[idx] := (* do something *)
    END_FOR

  3. #3
    Registriert seit
    15.10.2008
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    das 001 bis 099 kannst du nicht ändern da es teil deines Variablennamens ist. Was du aber machen kannst ist ein zweidimensionales Array wobei die erste Dimmension deiner 001-099 entspricht. Diese kannst du dann in einer Schleife durchlaufen lassen.

    Also anstatt Var_001: ARRAY[1..35] of Real
    einfach Varname: ARRAY[1..99,1..35] of Real

    Aufrufen tust du die Variable dann einfach mit Varname[x,y], wobei du x und y variabel gestalten kannst.

    Hoffe dir geholfen zu haben.

  4. #4
    Registriert seit
    19.10.2009
    Beiträge
    194
    Danke
    8
    Erhielt 50 Danke für 44 Beiträge

    Standard

    Das geht mit POINTER und ^ (Inhaltsoperator)
    Code:
    VAR_GLOBAL
        S010_MP_KALIB_001 :ARRAY[1..35] OF REAL;
        S010_MP_KALIB_002 :ARRAY[1..35] OF REAL;
        S010_MP_KALIB_003 :ARRAY[1..35] OF REAL;
    
    END_VAR
    VAR
        pArrKalib: ARRAY[1..99] OF POINTER TO ARRAY[1..35] OF REAL;
        step: INT;
        i, j: INT;
    END_VAR
    CASE step OF
    0: (* init *)
        pArrKalib[1]:= ADR(S010_MP_KALIB_001);
        pArrKalib[2]:= ADR(S010_MP_KALIB_002);
        pArrKalib[3]:= ADR(S010_MP_KALIB_003);
        step:= step + 1;
    
    1:
        FOR i:= 1 TO 99 DO
            IF (pArrKalib[i] <> 0) THEN
                FOR j:= 1 TO 35 DO
                     pArrKalib[i]^[j]:= i * j; (*do something*)
                END_FOR
            END_IF
        END_FOR
    
    END_CASE
    Gruß,
    witkatz

  5. #5
    Registriert seit
    27.07.2007
    Ort
    Leipzig
    Beiträge
    239
    Danke
    25
    Erhielt 47 Danke für 43 Beiträge

    Standard

    Hallo,

    noch ne Variante

    ich gehe mal von einer Beckhoff Steuerung aus:

    über die Bausteine PLC_ReadSymInfoByName und ADSREAD bekommst du informationen zu einer Variablen deren Namen du kennst.

    Das ganze ist dann allerdings nicht zyklisch, da die Bausteine 2 Zyklen brauchen fürs einlesen und ausgeben.

  6. #6
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 63 Danke für 62 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von merlin Beitrag anzeigen
    S010_MP_KALIB_001 :ARRAY[1..35] OF REAL;
    S010_MP_KALIB_002 :ARRAY[1..35] OF REAL;
    S010_MP_KALIB_003 :ARRAY[1..35] OF REAL;
    Code:
    VAR
        S010_MP_KALIB : ARRAY[1..99, 1..35] OF REAL;
        i: USINT;
        j: USINT;
    END_VAR
    
    FOR i := 1 TO 99 DO
    
        FOR j := 1 TO 35 DO
    
            S010_MP_KALIB[i, j] := i * j;
    
        END_FOR
    
    END_FOR

Ähnliche Themen

  1. "Index Pulse", "Home Switch" und "Position Limit Switch"
    Von senmeis im Forum Antriebstechnik
    Antworten: 3
    Letzter Beitrag: 07.03.2011, 11:21
  2. "Real_to_String" unter Beckhoff/Codesys
    Von Flo im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 26.01.2010, 18:28
  3. frage zu symbolen und "direkter" adressierung
    Von linuxluder im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 22.12.2007, 20:54
  4. Antworten: 2
    Letzter Beitrag: 14.12.2007, 15:09
  5. Indirekte Adressierung bei AB, Bosch, Beckhoff... IEC61131
    Von ANo im Forum Sonstige Steuerungen
    Antworten: 3
    Letzter Beitrag: 20.07.2005, 22:28

Lesezeichen

Berechtigungen

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