Array

Alles zur Software WinSPS-S7 bzw. WinPLC7

Moderatoren: Matthias, Weiss_MHJ

Antworten
Benutzeravatar
MAC
SPSTreff-Profi User
Beiträge: 267
Registriert: 13 Jul 2010, 09:48
Wohnort: Niederkassel

Array

Beitrag von MAC »

Hallo,
sitze an einer neuen Lösung für ITS Sortierung, würde gerne ein Array für die anzahl der Kisten auf dem Band Programmieren.
Finde aber keinen richtigen Anfang :(
Wer kann mir weiter Helfen?


Gruß
mac

Benutzeravatar
Weiss_MHJ
Site Admin
Beiträge: 674
Registriert: 13 Apr 2010, 16:34
Kontaktdaten:

Beitrag von Weiss_MHJ »

Hallo,

ein Array für die Anzahl der Kisten?
Das verstehe ich nicht. Die Anzahl der Kisten ist doch eine Zahl z.B. 13, wozu benötigt man da ein Array?

Oder meinen Sie, dass jede Kiste einem Feld im Array entspricht und der Wert des Feldes die Art der Kiste wiedergibt?

Bitte genauer beschreiben was gemeint ist.

Gruss

Benutzeravatar
MAC
SPSTreff-Profi User
Beiträge: 267
Registriert: 13 Jul 2010, 09:48
Wohnort: Niederkassel

Array

Beitrag von MAC »

Hallo,
ja und fest zu stellen welche Kiste sich gerade an Sensor 3 befindet.
Und dem nach zu Wissen in welche Richtung entladen werden muss.


Gruß
mac

Benutzeravatar
MAC
SPSTreff-Profi User
Beiträge: 267
Registriert: 13 Jul 2010, 09:48
Wohnort: Niederkassel

Array

Beitrag von MAC »

können sie mir ein Bespiel geben?


Mfg
Mac

Benutzeravatar
Weiss_MHJ
Site Admin
Beiträge: 674
Registriert: 13 Apr 2010, 16:34
Kontaktdaten:

Beitrag von Weiss_MHJ »

Hallo,

vom Prinzip her sollte das Ganze so ablaufen.

- Ein Array mit z.B. 100 Feldern soll die Art (Höhenangabe) der Kisten aufnehmen.
- Ein Feld mit dem Inhalt 1 steht für eine niedrige Kiste, der Inhalt 2 steht für eine hohe Kiste.
- Wird eine neue Kiste am Höhensensor erfasst, so ist die Art der Kiste in das hinterste noch nicht belegte Feld des Arrays einzutragen.
- Wird eine Kiste einsortiert dann befindet sich deren Höhenangabe immer im ersten Index des Arrays.
Somit müssen die dahinterliegenden jeweils um eins nach vorne kopiert werden, also Index2 -> Index1, Index3 -> Index 2 usw.

Am Besten man schreibt sich zwei Funktionen.
1. Funktion zum Einfügen einer neuen Kiste in den letzten noch nicht belegten Index.
2. Funktion kopiert die Felder des Arrays um einen Index nach vorne.

Gruss

Benutzeravatar
MAC
SPSTreff-Profi User
Beiträge: 267
Registriert: 13 Jul 2010, 09:48
Wohnort: Niederkassel

Array

Beitrag von MAC »

Hallo,
ich komme nicht weiter, weiß wie es gemeint ist kann es aber nicht umsetzen.Habe noch nie mit einem Array gearbeitet.
Für Hilfe wäre ich sehr Dankbar.

Gruß
mac

BildBild

Benutzeravatar
Weiss_MHJ
Site Admin
Beiträge: 674
Registriert: 13 Apr 2010, 16:34
Kontaktdaten:

Beitrag von Weiss_MHJ »

Hallo,

wenn man das Ganze über ein Array löst, dann muss dies mit den Mitteln der indirekten Adressierung gelöst werden.

Dazu gibt es ein Beispiel im S7-Crashkurs im Kapitel 29 "Indirekte Adressierung". Das Beispiel befindet sich auf der Seite 349 im Kapitel 29.11 (Auflage 7 des S7-Crashkurs).
In diesem Beispiel wird über Funktionen ein Array beschrieben und ausgelesen. Das Kapitel und dieses Beispiel sollten Sie durcharbeiten.

Gruss

Benutzeravatar
MAC
SPSTreff-Profi User
Beiträge: 267
Registriert: 13 Jul 2010, 09:48
Wohnort: Niederkassel

Array

Beitrag von MAC »

Hallo,
ja das habe ich mir schon Angsehen, aber ich brauche ein Anfang der Programmierung damit es für mich verständlich wird.So weiß ich nicht wie ich es für meine Zwecke umsetzen kann.


Gruß
mac

Benutzeravatar
Weiss_MHJ
Site Admin
Beiträge: 674
Registriert: 13 Apr 2010, 16:34
Kontaktdaten:

Beitrag von Weiss_MHJ »

Hallo,

in dem Beispiel wird eine FC gezeigt die Werte in ein Array ablegt.
Des Weiteren wird eine FC gezeigt, die Werte aus einem Array liest.

Das ist eigentlich genau dass was Sie benötigen.

Versuchen Sie dieses Beispiel zu verstehen, dann können Sie es für Ihre Zwecke nutzen.
In dem Beispiel wird der Zugriff über das Adressregister AR1 realisiert. Weiterhin werden Pointer gebildet um auf das Array zu zugreifen. Diese Dinge müssen bekannt sein, sonst kann ein Zugriff nicht ausprogrammiert werden. Sollte dies nicht bekannt sein, dann bitte das Kapitel "Indirekte Adressierung" durcharbeiten um die Voraussetzungen zu schaffen.

Der indizierte also indirekte Zugriff auf ein Array ist leider nicht einfacher zu realisieren.

Gruss

Benutzeravatar
MAC
SPSTreff-Profi User
Beiträge: 267
Registriert: 13 Jul 2010, 09:48
Wohnort: Niederkassel

Array

Beitrag von MAC »

Hallo,
kann man das Programm vom Buch Step 7 Crashkurs S.349 für diese zwecke Umschreiben?


Gruß
mac

Benutzeravatar
MAC
SPSTreff-Profi User
Beiträge: 267
Registriert: 13 Jul 2010, 09:48
Wohnort: Niederkassel

Array

Beitrag von MAC »

Hallo,
ist die Programmierung so richtig?

wert Schreiben:
U "MFlacheKiste"
FP "Vars".FlankeWrite
SPB WRIT
BEA

könnte man bei Wert Schreiben auch eine oder Verknüpfung schreiben?
O MFlachKiste
O MHoheKiste
FP "Vars".FlankeWrite
SPB WRIT
BEA


wert Auslesen:
U "Sensor3"
FP "Vars".FlankeRead
SPB READ
BEA

Gruß
mac

Benutzeravatar
MAC
SPSTreff-Profi User
Beiträge: 267
Registriert: 13 Jul 2010, 09:48
Wohnort: Niederkassel

Array

Beitrag von MAC »

Hallo,
ich komme nicht weiter, kann mal einer die Lösung durch ein Array Posten?


Gruß
mac

Benutzeravatar
MAC
SPSTreff-Profi User
Beiträge: 267
Registriert: 13 Jul 2010, 09:48
Wohnort: Niederkassel

Array

Beitrag von MAC »

Hallo,
ist diese Programmierung richtig?


U "MerkerFlacheKiste"
L "Vars ".Position
SLD 1
SLD 3
LAR1
L DBW [AR1,P#0.0]
T #Result

L "Vars ".Position
L 1
+I
T "Vars ".Position
BEA


Gruß
mac

Benutzeravatar
Matthias
SPSTreff-Profi User
Beiträge: 288
Registriert: 19 Jun 2010, 11:16
Wohnort: Bretten
Kontaktdaten:

Beitrag von Matthias »

Nein das kann so nicht funktionieren.
Die Zeilen werden bei jedem SPS Zyklus bearbeitet.
D.h. es wird ständig nach links geschoben.
Und die Position-Variable wird bei jedem Zyklus um 1 erhöht.

Aber wenn Sie das simulieren, dann müßten Sie doch sehen, dass hier etwas nicht stimmt.

Benutzeravatar
MAC
SPSTreff-Profi User
Beiträge: 267
Registriert: 13 Jul 2010, 09:48
Wohnort: Niederkassel

Array

Beitrag von MAC »

Hallo,
wenn wenigstens den Anfang hätte, das würde mir schon sehr weiter Helfen.

Gruß
mac

Antworten