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,
ich habe vor den Merker Flache Kiste oder Merker hohe Liste in einem Array zu Schreiben.
Um ihn dann an einer gewissen Stelle wieder aus zu Lesen.
wer kann mir Helfen?
Ich bekomme das irgendwie nicht in den Kopf :evil:

Gruß
mac

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

Array

Beitrag von MAC »

Hallo, ich Bitte um Hilfe! aus dem Buch Step 7 Crashkurs werde ich nicht Schlau :oops:

U "Sensor3"
FP "Vars ".FlankeRead
SPB READ
BEA

READ: NOP 1
L "Vars ".Position
SLD 3
LAR1
L DBW [AR1,P#0.0]
T MW 10

Ich weiß auch nicht, wie der Wert flache Kiste oder hohe kiste Eingelesen wird und auch nicht wie er Ausgelesen wird.


Gruß
mac

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

Array

Beitrag von MAC »

Für eine Antwort wäre ich sehr Dankbar.


Gruß
mac

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

Beitrag von Weiss_MHJ »

Hallo,

ich habe ein Projekt gemacht in dem sich drei FBs befinden.

FB10:
Fügt in ein Array an einem anzugebenden Index einen Wert ein, wobei die dahinterliegenden Werte um eins nach hinten verschoben werden.

FB11:
Liest aus einem Array den Wert an einer anzugebenden Index-Position aus.

FB12
Überschreibt den Wert in einem Array an einer bestimmten Index-Position mit einem neuen Wert.

Diese FBs müsste genügen um entsprechende Dinge mit Arrays zu realisieren.

Anforderung an das Array:
- Die Arrays müssen in DBs liegen und Byte-Arrays sein. Die FBs können bei Bedarf geändert werden, damit auch Arrays mit anderen Datentypen (z.B. WORD) unterstützt werden.
- Die Arrays sollten der Übersicht wegen mit dem Index 0 beginnen also z.B. Array [0..20] of BYTE

Im OB1 werden die FBs beispielhaft aufgerufen. Das zu verändernde Byte-Array liegt im DB1.

Gruss
Sie haben keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

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

Array

Beitrag von MAC »

Hallo,

OK vielen Dank, ich werde mich sofort dran geben. :D
Auf sie ist Verlass.


Gruß
mac

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

Array

Beitrag von MAC »

Hallo,
habe ich das so richtig verstanden?

FB10: fügt z.B den Wert -Flache Kiste ein (am Sensor 1 u 2)

FB11: auslesen des Wertes -Flache Kiste

FB12: überschreiben des Wertes -Flache Kiste ( z.B am Sensor 6 )


Gruss
mac

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

Beitrag von Weiss_MHJ »

Hallo,

FB10:
Fügt einen Wert in ein Array an einer anzugebenden Stelle (Index) ein. Die dahinterliegenden Inhalte werden um eins nach oben verschoben. Der Inhalt des höchsten Index geht verloren.

FB11:
Liefert einen Wert aus dem Array durch Angabe des Index.

FB12:
Überschreibt den Wert in einem Array an einem anzugebenden Index.

Also ja, so könnten Sie die FBs verwenden.

Gruss

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

Array

Beitrag von MAC »

DBNummer ist im dem Fall doch DB1?

Und index? z.B E0.3 ?

Gruss
mac

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

Array

Beitrag von MAC »

Hallo,
ich habe mich irgendwie Festgefahren :cry:
was trage ich ein?

UN "MerkerFlacheKiste"
O
UN "MerkerHoheKiste"
CALL FB 10,DB10
AnyPointerArray:=P#M 33.0 BYTE 10
DBNummer:=W#16#0DB1
EinfuegeIndex:=EW0
Wert:=EB0
Error:=AW0

und die Merker? kann ich dies so einfügen?


Gruss
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 mit den Werten klar.

Einfüge index
Ein zu fügender Wert

UN "MerkerFlacheKiste"
O
UN "MerkerHoheKiste"
SPA End1
CALL FB 10,DB10
AnyPointerArray:=P#M 33.0 BYTE 10 ?
DBNummer:=W#16#0DB1 ?
EinfuegeIndex:=EW0 ?
Wert:=EB0 ?
Error:=AW0 ?
End1: NOP 1

oder z.B EW0 dann EW1 dann EW3 ?


Gruß
mac

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

Beitrag von Matthias »

In dem Projekt, welches in diesem Thread zum Download bereit steht, sind im OB1 Beispielaufrufe vorhanden.
Hier kann man sehr gut sehen, was man übergeben muss:

OB1:

Code: Alles auswählen

//Byte-Wert in ein Array einfügen wenn E0.0 von 0 nach 1 wechselt 
//Die vorhandenen Werte werden nach hinten verschoben, der Wert im obersten Index des Arrays wird überschrieben 
       U    E         0.0
       FP   M         0.0
       =    M         0.1

       UN   M         0.1
       SPB  End1
       CALL FB       10,DB10
         AnyPointerArray:=P#DB1.DBX 0.0 BYTE 11 //Angabe des Arrays als Any-Zeiger 
         DBNummer:=W#16#0001             //Nummer des DBs in welchem das Array liegt 
         EinfuegIndex:=W#16#0004         //Index in welchem ein Wert eingefügt werden soll 
         Wert:=B#16#BB                   //Einzufügender Wert  
         Error:=MW2
// 
End1:  NOP  1


//Byte-Wert aus Array auslesen wenn E0.1 von 0 nach 1 wechselt 
       U    E         0.1
       FP   M         0.2
       =    M         0.3

       UN   M         0.3
       SPB  End2
       CALL FB       11,DB11
         AnyPointerArray:=P#DB1.DBX 0.0 BYTE 11 //Angabe des Arrays als Any-Zeiger 
         DBNummer:=W#16#0001             //Nummer des DBs in welchem das Array liegt 
         ReadIndex:=EW2                  //Index der ausgelesen werden soll 
         Error:=MW4
         Wert:=MB10                      //Wert der Ausgelsen wurde 

End2:  NOP  1


// 
       L    B#16#33
       T    MB       11

//Byte-Wert in ein Array in einen Index schreiben  wenn E0.2 von 0 nach 1 wechselt 
//Der vorhandene Wert im Index wird überschrieben. 
       U    E         0.2
       FP   M         0.4
       =    M         0.5

       UN   M         0.5
       SPB  End3
       CALL FB       12,DB12
         AnyPointerArray:=P#DB1.DBX 0.0 BYTE 11 //Angabe des Arrays als Any-Zeiger  
         DBNummer:=W#16#0001             //Nummer des DBs in welchem das Array liegt   
         WriteIndex:=EW4                 //Index der überschrieben werden soll   
         Wert:=MB11                      //Neuer Wert des Index
         Error:=MW6
End3:  NOP  1

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

Array

Beitrag von MAC »

Hallo,
irgendwie sehe ich den Wald vor lauter Bäumen nicht :oops:
ich schnall das nicht :?:
Einfüge index? das ist doch eine feste Zahl


Gruß
mac

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

Array

Beitrag von MAC »

Hallo Herr Weiß,
ich habe die halbe Nacht noch an dem Array gearbeitet, und ich bekomme es einfach nicht hin.
ich weiß nicht was ich eintragen muss.


Gruss
mac

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

Beitrag von Weiss_MHJ »

Hallo,

ja, der Index ist eine Zahl. Diese Zahl kann eine Konstante sein wie im Beispiel beim Aufruf des FB10 (hier wurde W#16#0004 also der Index 4 vorgegeben).
Oder aber Variabel wie im Beispiel beim Aufruf des FB12, hier wurde das Eingangswort 2 EW2 übergeben, somit wird der Index verwendet, welcher im EW2 als Zahl enthalten ist.
Sie sollten versuchen das Beispiel zu verstehen.

Um den Inhalt in den FBs sollten Sie sich nicht kümmern sondern nur die FBs deren Bestimmung gemäß verwenden.

Gruss

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

Array

Beitrag von MAC »

Hallo,
und der AnyPointerArray? stimmt der Wert? P#DB1.DBX 0.0 Byte 11 für alle FBs? oder muss ich ihn noch verändern?


Gruß
mac

Antworten