indirekte Adressierung

Christian84

Level-1
Beiträge
16
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
Könnt ihr mir weiterhelfen, wenn ich 2 Werte speichern möchte. Zum Beispiel ein Regal mit 16 Fächern und Pakete, die ich zuweisen muss.
Kann ich das mit Strukturen und Arrays machen? Kann jemand vielleicht ein Beispiel schicken, oder einen Link zur Hilfestellung. In dem Handbuch habe ich nichts passendes gefunden!

Vielen Dank im vorraus!:)
 
...
Kann jemand vielleicht ein Beispiel schicken, oder einen Link zur Hilfestellung. In dem Handbuch habe ich nichts passendes gefunden!
...

Array ist doch schon mal spitze. Für ein Regal bietet sich meistens ein zweidimensionales Array an.

z.B.
Code:
VAR
  Regal : Array [0..3, 0..3] OF INT;
END_VAR
Jetzt hat man ein Array mit 4x4 Feldern. Das man so ansprechen kann:

Code:
(* schreibend *)
Regal[x,y] := 100;

(* oder lesend *)
IF Regal[x,y] = 100 THEN
  ; (* mach was *)
ELSE
  ; (* mach was anderes *)
END_IF
Wobei x und y entweder feste Zahlen sein können oder eben Integervariablen.

----

Nächstes Stichwort das Du gebracht hast: Strukturen. Auch sehr schön ;o)

Nun kann es nun mal sein das ein Paket mehr Informationen hat als in einen Standard Dateityp (wie z.B. Integer passt).

Also baut man sich seinen Eigenen Dateitypen Paket:

Code:
TYPE Paket_Type :
STRUCT
    Nummer :INT;
    Kunde  :STRING;
    Wert   :INT;
    Datum  :DATE_AND_TIME;
END_STRUCT
END_TYPE
Wenn man dann das Regal mit Paketen befüllt:


Code:
VAR
  Regal : Array [0..3, 0..3] OF Paket_Type;
END_VAR
Kann man das schön strukturiert abfragen:

Code:
FOR x := 0 TO 3 DO
    FOR y := 0 TO 3 DO
        IF Regal[x, y].Kunde = 'Toni' THEN
      Regal[x, y].Wert := 110;
        ELSE
      Regal[x, y].Wert := 100;
        END_IF
    END_FOR
END_FOR
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Hilfe, aber ich hab noch ne Frage! Die Struktur trage ich im Datentyp ein und wo trage ich den Array ein? Erstelle ich einen FB? Hab mich in der Hinsicht noch nicht mit TwinCat weiter beschäftigt.
 
Wo Du das Array anlegst hängt davon ab wie Du darauf Zugreifen möchtest, global oder lokal? Müssen die Daten Remanent sein oder nicht? Gibt es das Regal einmal oder hast Du mehrere gleicher oder ähnlicher Regale?

Wenn Du aus mehreren PRGs (Programmen) darauf zugreifen musst, würde es Sinn machen das Array einfach unter den Globalenvariablen zu deklarieren. Wenn Du ein Verwaltungsprogramm schreibst reicht es Lokal im Kopf des PRGs das Array zu definieren.

Wenn es mehrere Regale gibt kann es sinn machen dann einen FB zu bauen. Dann kommt aber die Frage wo Deklariert man die Instanzen des FBs Lokal in einem Programm oder global.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Heut wollte ich das Beispiel von zotos mal ausprobieren, aber leider hatte ich keinen Erfolg. Zum Beispiel wollte das Prog immer einen Operanden und ich weiß nicht so recht, was das prog von mir will? Fehler 4022!
Ich arbeite mit meinen Notebook und greife auf eine CX1010 zu. Ich hatte ein Beispielsprogramm von S7 (Fächer mit Pakete), womit die Daten mit Datenbaustein gespeichert werden. Nun soll ich in einem Projekt mit der Beckhoff-SPS im Rahmen meiner schulischen Weiterbildung arbeiten.
Mein Problem in meinem Projekt ist, dass ich anhand der einzugebenden Peronalnr. eine eingestellte Arbeitshoehe zugewiesen werden muss. Diese soll über einen Taster gespeichert werden. Beim erneuten Aufruf des Benutzers sollte die Arbeitshoehe in Position fahren.
Kann mir jemand einen Ansatz dazu geben, wie ich das weiter programmieren soll? Ich wollte das mit Arrays und Strukturen machen, hab aber noch keinen Erfolg gehabt:-(.

Gruß Christian
 
Ich hab Dir mal eine kleine Hilfestellung programmiert.

Bin aber zufaul das in ein Beckhoff Projekt zu wandeln also musst Du die EXP Datei im Anhang selbst in ein Beckhoff Projekt importieren.

Besteht aus einem PRG Lift, einer Visu PLC_VISU und einem Datentyp DATABASE_TYPE.

Das Programm LIFT musst Du dann noch in MAIN aufrufen.
 

Anhänge

  • LIFT.zip
    1,8 KB · Aufrufe: 23
@zotos
vielen Dank, das Prog ist genial. Jetzt seh ich auch meinen Fehler. Ich musste ihm eine Schleife packen und das wusste ich nicht. Danke nochmals für deine Mühe.:p
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genial ist anders.

Mir ist da noch ein Bug aufgefallen (mal davon abgesehen das man damit auch in den Keller und übers Dach hinaus fahren kann).

Beim Suchen nach einem Freien Speicherplatz muss die Forschleife mit einem Exit abgebrochen werden sonst überschreibt man alle freien Plätze.

Code:
...
STATUS := 'Postion saved';
[B]EXIT;[/B]
...
 
Mit der Positionierung der Arbeitshoehe habe ich eine analoge Eingangsbaugruppe und den FB entwickelt. Funktioniert auch soweit.
Den FB musst du nur noch in Main aufrufen und los gehts.
Habe auch einen Arbeitsbereich eingestellt.
 

Anhänge

  • Position.rar
    616 Bytes · Aufrufe: 8
Zurück
Oben