Step 7 Y/X Tabelle ohne Schleife auslesen

westerwald

Level-1
Beiträge
11
Reaktionspunkte
0
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
 
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é
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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ß.
 
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] ;
 
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!
 
Zuletzt bearbeitet:
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
 
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!
 
Zurück
Oben