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

Ergebnis 1 bis 9 von 9

Thema: Y/X Tabelle ohne Schleife auslesen

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten morgen in die Expertenrunde,

    ich stehe vor der Aufgabe aus Y und Y Werte einer Tabelle die richtigen Wert zu laden.

    Viel rumprobiert aber eine passende Lösung nicht gefunden...

    Eine Sache die erschwerend hinzukommt:

    Der Kunde verbietet eine Schleifenprogrammierung!

    Hier als Beispiel die Tabelle:

    .X.|....|....|
    40|z3|z13|
    30|z2|z12|

    20|z1|z11|
    10|z0|z10|.......

    |10|20|30|40|.Y.

    Jemand eine Idee?

    Für Vorschläge bin ich Dankbar!

    Viele Grüße
    Zitieren Zitieren Y/X Tabelle ohne Schleife auslesen  

  2. #2
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo,

    warum auch eine Schleife? Wenn das in einem 2dimensionalen Array abgelegt wird kannst du indiziert drauf zugreifen. In KOP/FUP/AWL kann der Index keine Variable sein, in SCL schon. Wenn SCL nicht genutzt werden kann -> Berechnung über Adressregister.

    André
    www.raeppel.de
    mit innovativen SPS-Tools schneller ans Ziel ....

  3. #3
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Nehmen wir mal an, Du hast 10 x Werte und 10 y Werte, die in einem DB so liegen:

    X1,Y1 - X1,Y2 - X1,Y3 usw bis X1,Y10; X2,Y1 - X2,Y2 - X2,Y3 usw bis X2,Y10; bis eben X10,Y10
    Dann brauchst Du doch nur den X*10+Y Wert auslesen.

    Ich vermute Dein Problem liegt daran, dass Du nicht weisst welcher der X-te und Y-te Wert ist.
    Nun, dann liegt auf der Hand, dass Du das zu Fuss mit Vergleicher in einer Wurscht runterprogrammieren musst.
    Ich würde einen FB machen wo Du aussen eben z Werte eingeben kannst und den aktuellen x/y- Wert.
    Der Ausgang des FB's gibt Dir dann die Nummer an. Je einem für X und Y aufrufen und schon hast Du die exakte Position in der Tabelle.

    Das geht natürlich nur dann vernünftig wenn die Tabelle nicht dynamisch ist und nicht sehr sehr groß.

  4. #4
    westerwald ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.01.2016
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Moin,

    also in etwa so:

    AWL:
    L Variable[X,Y]

    SCL:
    Variable_1 := Variable[X,Y]

    Grüße

  5. #5
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.629
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Du hast es ja fast fertig in dein SCL Beispiel.

    Nur Variable muss als Zweidimensionales Array deklariert werden.
    Beispiel:
    Code:
    VAR
      i , j : INT ;
      MyArrayVar : ARRAY[1..10, 1..10] OF REAL ;
      MyVar :REAL ;
    END VAR
    
    ....
    
    i:=2 ;
    j:=3 ;
    
    MyVar := MyArrayVar[i,j] ;
    Jesper M. Pedersen

  6. #6
    westerwald ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.01.2016
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke an alle für die Denkanstöße bzw. Tipps!

    TOP!

  7. #7
    westerwald ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.01.2016
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    so habe das mal getestet:

    hier der SCL Quellcode

    FUNCTION FC2 : VOID
    // WERT AUS DER TABELLE LESEN

    VAR
    X,Y,Z : INT;
    END_VAR

    BEGIN
    Z:= "DATA_MAP10x01.1".DATA[X,Y];
    END_FUNCTION

    Wunderbar und fehlerfrei übersetzt in SCL/AWL

    und die AWL Datei

    SET
    SAVE
    = L 6.1
    L #X
    ITD
    L L#11
    *D
    L #Y
    ITD
    +D
    L L#16
    *D
    LAR1
    AUF "DATA_MAP10x01.1"
    L DBW [AR1,P#0.0]
    T #Z
    SAVE
    BE

    Der DB10

    DATA ARRAY[0..10,0..10]
    INT

    Bloss ich bekomme einen Bereichslängenfehler... (SPS geht in Stop)

    Frage woran könnte es liegen?

    Besten Dank für die Tipps!
    Geändert von westerwald (21.01.2016 um 21:44 Uhr)

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.204
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard

    Du solltest X und Y auch einen Wert zuweisen (im Bereich 0..10) oder noch besser X und Y als VAR_INPUT und Z als VAR_OUTPUT (oder Typ der Function) deklarieren.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    westerwald ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.01.2016
    Beiträge
    11
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    PERFEKT!

    Fehler ist weg...

    ---------------

    FUNCTION FC2 : VOID
    // WERT AUS DER TABELLE LESEN

    VAR_INPUT
    X,Y: INT;
    END_VAR

    VAR_OUTPUT
    Z : INT;
    END_VAR

    BEGIN
    Z:= "DATA_MAP10x01.1".DATA[X,Y];
    END_FUNCTION

    --------------------------


    SET
    SAVE
    = L 0.1
    L #X
    ITD
    L L#11
    *D
    L #Y
    ITD
    +D
    L L#16
    *D
    LAR1
    AUF "DATA_MAP10x01.1"
    L DBW [AR1,P#0.0]
    T #Z
    SAVE
    BE


    DANKE!

Ähnliche Themen

  1. TIA Daten in Excel-Tabelle schreiben OHNE Online-anbindung
    Von lordunschuldig im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 17.05.2014, 06:26
  2. Step 7 Tabelle auslesen
    Von Wolfhunter im Forum Simatic
    Antworten: 26
    Letzter Beitrag: 10.05.2013, 08:17
  3. Mit Schleife DB-Werte rückwärts auslesen?
    Von Rauchegger im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 28.10.2011, 10:46
  4. Antworten: 5
    Letzter Beitrag: 11.06.2008, 16:08
  5. Antworten: 6
    Letzter Beitrag: 01.02.2005, 11:22

Lesezeichen

Berechtigungen

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