Array
Moderatoren: Matthias, Weiss_MHJ
Hallo,
wenn Sie folgendes programmieren:
U "Sensor1"
FP M 0.1
= M 0.2 //Hat Status 1 wenn pos. Flanke
U M 0.2
SPB End1 //Sprung wird ausgeführt wenn M0.2 den Status 1 hat
..
call FB....
..
End1: Nop 1
dann wird beim Belegen des Sensors und davon ausgehender pos. Flanke der M0.2 auf 1 gelegt. In diesem Fall wird der Sprung danach ausgeführt, d.h. der Aufruf des FBs !nicht! ausgeführt.
Im nächsten Zyklus hat der M0.2 den Status 0, da ja keine pos. Flanke mehr ansteht, somit wird der Aufruf des FBs ab da immer bearbeitet. Es wird also in jedem Zyklus etwas eingefügt.
Ist dies so beabsichtigt?
Wenn die Rahmenbedingungen stimmen dann funktioniert das Ganze. Aber dies ist nicht der Fall.
Nochmals:
Wie die FBs aufzurufen sind, können Sie dem Beispiel entnehmen.
Gruss
wenn Sie folgendes programmieren:
U "Sensor1"
FP M 0.1
= M 0.2 //Hat Status 1 wenn pos. Flanke
U M 0.2
SPB End1 //Sprung wird ausgeführt wenn M0.2 den Status 1 hat
..
call FB....
..
End1: Nop 1
dann wird beim Belegen des Sensors und davon ausgehender pos. Flanke der M0.2 auf 1 gelegt. In diesem Fall wird der Sprung danach ausgeführt, d.h. der Aufruf des FBs !nicht! ausgeführt.
Im nächsten Zyklus hat der M0.2 den Status 0, da ja keine pos. Flanke mehr ansteht, somit wird der Aufruf des FBs ab da immer bearbeitet. Es wird also in jedem Zyklus etwas eingefügt.
Ist dies so beabsichtigt?
Wenn die Rahmenbedingungen stimmen dann funktioniert das Ganze. Aber dies ist nicht der Fall.
Nochmals:
Wie die FBs aufzurufen sind, können Sie dem Beispiel entnehmen.
Gruss
Hallo,
der Parameter "EinfuegeIndex" bestimmt, an welcher Stelle im Array der Wert der am Parameter "Wert" ansteht, eingefügt wird.
Wenn also z.B. als Einfügeindex die Zahl 5 angegeben wird, dann wird der Zahlenwert des Parameters Wert so eingetragen
ArrayName[5]=Wert
Der Parameter "Wert" wird also nicht beschrieben, er ist die Vorgabe!
Der FB wird dazu verwendet einen Wert in das Array einzufügen und nicht zu lesen (das macht der FB11).
Des Weiteren sollte ein Eingangswort nicht verwendet werden um einen Wert darin abzulegen. Eingänge werden aus den Eingangsbaugruppen gelesen und zwar nach jedem Zyklus. Der Wert wird also in jedem Zyklus überschrieben.
Dann verwenden Sie das MW2 um den Errorcode abzulegen, gleichzeitig wird das MB2 für die Wervorgabe verwendet.
MW2 besteht aus MB2 und MB3. Also wieder eine Übeschneidung.
Ich denke Sie sollten an dieser Stelle abbrechen und diese Aufgabe einige Zeit ruhen lassen.
Gruss
der Parameter "EinfuegeIndex" bestimmt, an welcher Stelle im Array der Wert der am Parameter "Wert" ansteht, eingefügt wird.
Wenn also z.B. als Einfügeindex die Zahl 5 angegeben wird, dann wird der Zahlenwert des Parameters Wert so eingetragen
ArrayName[5]=Wert
Der Parameter "Wert" wird also nicht beschrieben, er ist die Vorgabe!
Der FB wird dazu verwendet einen Wert in das Array einzufügen und nicht zu lesen (das macht der FB11).
Des Weiteren sollte ein Eingangswort nicht verwendet werden um einen Wert darin abzulegen. Eingänge werden aus den Eingangsbaugruppen gelesen und zwar nach jedem Zyklus. Der Wert wird also in jedem Zyklus überschrieben.
Dann verwenden Sie das MW2 um den Errorcode abzulegen, gleichzeitig wird das MB2 für die Wervorgabe verwendet.
MW2 besteht aus MB2 und MB3. Also wieder eine Übeschneidung.
Ich denke Sie sollten an dieser Stelle abbrechen und diese Aufgabe einige Zeit ruhen lassen.
Gruss
Array
Hallo,
wenn ich den Wert 5 in das MB2 schreibe, dann wird dieser in
MYArray [5] stelle ein getragen?
Wert=33, EinfuegeIndex=10 wieso 10 ?
ArrayName[10]=33
aber der Wert 5 wird nicht in den einfügeIndex (MW30) geschrieben?
einfügeIndex= MW30 hier sollte der wert 5 stehen
wert= MB2 hier wird der wert 5 eingefügt
error= MW60
Gruss
mac
wenn ich den Wert 5 in das MB2 schreibe, dann wird dieser in
MYArray [5] stelle ein getragen?
Wert=33, EinfuegeIndex=10 wieso 10 ?
ArrayName[10]=33
aber der Wert 5 wird nicht in den einfügeIndex (MW30) geschrieben?
einfügeIndex= MW30 hier sollte der wert 5 stehen
wert= MB2 hier wird der wert 5 eingefügt
error= MW60
Gruss
mac
Array
Hallo Herr Weiss, Herr Habermann
FB10:
U(
U "Sensor1"
BLD 100
FP M 0.1
)
NOT
SPBNB _003
CALL FB 10,DB10
AnyPointerArray:=P#DB1.DBX 0.0 BYTE 3
DBNummer:=W#16#0001
EinfuegeIndex:=MW30
Wert:=MB2
Error:=MW60
_003: NOP 0
EinfügeIndex= MW30 hier gebe ich in das MW30 die stelle an, wo der Wert der vor gegeben ist eingefügt wird. Z.B EinfügeIndex 1
Wert= MB2 hier wird der wert eingefügt der z.B bei Sensor 1 in das MB2 eingefügt wird.
Das wäre für die flache Kiste z.B 1 index 1 wert 1
Und für die hohe Kiste z.B 2 index 1 wert 2
FB11:
U(
U "Sensor6"
BLD 100
FP M 0.2
)
NOT
SPBNB _006
CALL FB 11,DB11
AnyPointerArray:=P#DB1.DBX 0.0 BYTE 11
DBNummer:=W#16#0001
ReadIndex:=MW40
Error:=MW70
Wert:=MB6
_006 :NOP 0
MW40= hier gebe ich die Stelle an wo ausgelesen werden soll (aber wo?)
MB6= hier wird an gezeigt welcher wert an der stelle aus gelesen wurde.
Habe ich das so richtig verstanden?
Ich weiß nicht an welcher selle ich einfügen soll und wo ich auslesen soll?
Für Hilfe wäre ich sehr Dankbar.
Gruss
mac
FB10:
U(
U "Sensor1"
BLD 100
FP M 0.1
)
NOT
SPBNB _003
CALL FB 10,DB10
AnyPointerArray:=P#DB1.DBX 0.0 BYTE 3
DBNummer:=W#16#0001
EinfuegeIndex:=MW30
Wert:=MB2
Error:=MW60
_003: NOP 0
EinfügeIndex= MW30 hier gebe ich in das MW30 die stelle an, wo der Wert der vor gegeben ist eingefügt wird. Z.B EinfügeIndex 1
Wert= MB2 hier wird der wert eingefügt der z.B bei Sensor 1 in das MB2 eingefügt wird.
Das wäre für die flache Kiste z.B 1 index 1 wert 1
Und für die hohe Kiste z.B 2 index 1 wert 2
FB11:
U(
U "Sensor6"
BLD 100
FP M 0.2
)
NOT
SPBNB _006
CALL FB 11,DB11
AnyPointerArray:=P#DB1.DBX 0.0 BYTE 11
DBNummer:=W#16#0001
ReadIndex:=MW40
Error:=MW70
Wert:=MB6
_006 :NOP 0
MW40= hier gebe ich die Stelle an wo ausgelesen werden soll (aber wo?)
MB6= hier wird an gezeigt welcher wert an der stelle aus gelesen wurde.
Habe ich das so richtig verstanden?
Ich weiß nicht an welcher selle ich einfügen soll und wo ich auslesen soll?
Für Hilfe wäre ich sehr Dankbar.
Gruss
mac
Array
Hallo,
ich weiß noch nicht an welcher stelle ich einfüge,und wo ich auslesen soll.
U E 0.1
FP M 0.0
= M 0.1
UN E 0.1
SPB End1
CALL FB 10,DB10
AnyPointerArray:=P#DB1.DBX 0.0 BYTE 11
DBNummer:=W#16#0001
EinfuegIndex:=W#16#0004
Wert:=MB10
Error:=MW30
End1: NOP 1
U E 0.6
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
DBNummer:=W#16#0001
ReadIndex:=W#16#0006
Error:=MW40
Wert:=MB12
End1: NOP 1
L B#16#33
T MB 11 und hier?
U E 0.7
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
DBNummer:=W#16#0001
WriteIndex:=W#16#0008
Wert:=MB14
Error:=MW50
End3: NOP 1
Gruß
mac
ich weiß noch nicht an welcher stelle ich einfüge,und wo ich auslesen soll.
U E 0.1
FP M 0.0
= M 0.1
UN E 0.1
SPB End1
CALL FB 10,DB10
AnyPointerArray:=P#DB1.DBX 0.0 BYTE 11
DBNummer:=W#16#0001
EinfuegIndex:=W#16#0004
Wert:=MB10
Error:=MW30
End1: NOP 1
U E 0.6
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
DBNummer:=W#16#0001
ReadIndex:=W#16#0006
Error:=MW40
Wert:=MB12
End1: NOP 1
L B#16#33
T MB 11 und hier?
U E 0.7
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
DBNummer:=W#16#0001
WriteIndex:=W#16#0008
Wert:=MB14
Error:=MW50
End3: NOP 1
Gruß
mac
Zuletzt geändert von MAC am 18 Okt 2011, 20:47, insgesamt 1-mal geändert.
Array
Hallo,
ich bekomme eine Fehlermeldung, AG schaltet auf Stop wenn Sensor 6 auf 1 wechselt.
Fehlermeldung: Fehler beim Zugriff auf Datenbaustein über das DB-Register.
FB11,108 Stop durch Programmier fehler.
Ich habe am FB11 nichts geändert, eine Zeit lang ging der Aufruf des FB.
Hier die Fehlerzeile: Baustein FB11
/Aufschlagen DB
AUF DB [DIW10]
//Pointer bilden
L #ReadIndex
SLD 3 //Um Bitstellen nach links
T #OffsetPointer
//AR1 mit Anfangspointer belegen
L #AnfangsPointer
LAR1
//Offsetpointer hinzu
L #OffsetPointer
+AR1 //zum AR1 dazu addieren
//DB-Datum laden
L DBB [AR1,P#0.0] in dem Befehl soll der Fehler sein
T #Wert
Hier der Aufruf des FB11:
U E 0.6
FP M 0.3
= M 0.4
UN M 0.4
SPB End2
CALL FB 11,DB11
AnyPointerArray:=P#DB1.DBX 0.0 BYTE 11
DBNummer:=W#16#0001
ReadIndex:=W#16#0007
Error:=MW200
Wert:=MB20
End2: NOP 1
Der Fehler ist Behoben, es war ein Tippfehler bei der Angabe des DBs.
Gruß
mac
ich bekomme eine Fehlermeldung, AG schaltet auf Stop wenn Sensor 6 auf 1 wechselt.
Fehlermeldung: Fehler beim Zugriff auf Datenbaustein über das DB-Register.
FB11,108 Stop durch Programmier fehler.
Ich habe am FB11 nichts geändert, eine Zeit lang ging der Aufruf des FB.
Hier die Fehlerzeile: Baustein FB11
/Aufschlagen DB
AUF DB [DIW10]
//Pointer bilden
L #ReadIndex
SLD 3 //Um Bitstellen nach links
T #OffsetPointer
//AR1 mit Anfangspointer belegen
L #AnfangsPointer
LAR1
//Offsetpointer hinzu
L #OffsetPointer
+AR1 //zum AR1 dazu addieren
//DB-Datum laden
L DBB [AR1,P#0.0] in dem Befehl soll der Fehler sein
T #Wert
Hier der Aufruf des FB11:
U E 0.6
FP M 0.3
= M 0.4
UN M 0.4
SPB End2
CALL FB 11,DB11
AnyPointerArray:=P#DB1.DBX 0.0 BYTE 11
DBNummer:=W#16#0001
ReadIndex:=W#16#0007
Error:=MW200
Wert:=MB20
End2: NOP 1
Der Fehler ist Behoben, es war ein Tippfehler bei der Angabe des DBs.
Gruß
mac
Hallo,
zur Ergänzung:
Man fügt bei diesem Beispiel immer im nullten Index des Arrays ein.
Wenn man z.B. drei Kisten erfasst hat, dann befindet sich in den Indeces 0, 1, 2 jeweils die Information einer Kiste.
An der Verladeposition ist dann der Index 2 auszulesen. Man muss sich immer merken wieviele Kisteninformationen im Array vorhanden sind. D.h. beim Einfügen einer neuen Kiste erhöht man die Anzahl, beim Auslesen verringert man diese.
Die Anzahl merkt man sich z.B. in einem Merkerwort (oder DB-Wort usw.).
Gruss
zur Ergänzung:
Man fügt bei diesem Beispiel immer im nullten Index des Arrays ein.
Wenn man z.B. drei Kisten erfasst hat, dann befindet sich in den Indeces 0, 1, 2 jeweils die Information einer Kiste.
An der Verladeposition ist dann der Index 2 auszulesen. Man muss sich immer merken wieviele Kisteninformationen im Array vorhanden sind. D.h. beim Einfügen einer neuen Kiste erhöht man die Anzahl, beim Auslesen verringert man diese.
Die Anzahl merkt man sich z.B. in einem Merkerwort (oder DB-Wort usw.).
Gruss