-> Hier kostenlos registrieren
Hallöchen !!
ich habe ein kleines problemchen ... (was auch sonst)....
Ich habe ein FIFO geschrieben mit einer "reset funktion" .... Wenn der Anlagenbediener den Reset-Button drückt soll der entsprechende Eintrag (der Eintrag der entsprechenden Linie) gefunden und gelöscht werden.
Funzt normalerweise supi ..... hier der entsprechende Code Teil ....:
Nun habe ich heute leider mit ansehen müssen das die Adressierung der BLKMOV's nicht ganz gepasst hat ... und somit mein AR1 Speicher mit in die Queue gemovt wurde ....
Falls also irgendwer einen Rechen bzw. Programmierfehler findet wäre ich sehr dankbar .....
Vielen Dank im Voraus
edit:
OK Sorry .... war ein Bisschen hingeklatscht vorhin, hatte wenig Zeit .. Also hier ein Paar Zusatzinfo's :
Die Länge der Queue ist 236 Byte ... Datentyp der Einträge ist DINT Ein Eintrag besteht aus 2 DINT TeilnehmerNr. und Incode. Nach der Queue im DB kommt ein Zwischenspeicher für AR1 und Index welche ich zur internen Adressierung im FB benutze.
Was passiert ist ...: der BLKMOV hat Zahlenwerte mit in den Bereich der Queue gezogen, diese können nur vom AR1 Speicher kommen. Ich habe versucht den Fehler zu reproduzieren .. ohne Erfolg.
CPU 417 ... S7 5.5
Also .... hoffe irgendwer hat eine Idee Gruß
ich habe ein kleines problemchen ... (was auch sonst)....
Ich habe ein FIFO geschrieben mit einer "reset funktion" .... Wenn der Anlagenbediener den Reset-Button drückt soll der entsprechende Eintrag (der Eintrag der entsprechenden Linie) gefunden und gelöscht werden.
Funzt normalerweise supi ..... hier der entsprechende Code Teil ....:
Code:
SPA End
rst: NOP 0
LAR1 #AR1Speicher
L L#0
T #Fertig
loop: NOP 0
AUF "Qeue2"
L #TeilnehmerNr
L DBD [AR1,P#0.0]
==D
SPB mov
L -4
SLD 3
+AR1
L #Fertig
L 1
+D
T #Fertig
U(
L #Fertig
L 60
>=D
)
SPB End
SPA loop
mov: NOP 0
//Zeiger für Quellbereich###############################
L B#16#10
T LB 6
L B#16#2 //Datentyp Byte
T LB 7
// L 8
// 234 Byte Qeue Laenge - Position für Austrag
L 234
TAR1
-D
//#########################################
T LW 8
L 2008
T LW 10
TAR1
SRD 3
L 8
+D
ITD
SLD 3
T LD 12
L B#16#84
T LB 12
//#############################################################
//Zeiger auf Zielbereich#######################################
L B#16#10
T LB 16
L B#16#2
T LB 17
// L 8
//236 Byte Qeue Laenge - Position für Austrag
L 234
TAR1
-D
//############################################################
T LW 18
L 2008
T LW 20
TAR1
ITD
T LD 22
L B#16#84
T LB 22
/////########################################################
CALL "S7_BLKMOV"
SRCBLK :=#Quelle
RET_VAL:=DB2008.DBW400
DSTBLK :=#Ziel
//######Queue ist nicht leer#################################
U(
L "Qeue2".Index
L L#2
>=D
)
//###############Reduziere Index um 2########################
SPBN End
L "Qeue2".Index
L L#2
-D
T "Qeue2".Index
//#############Reduzier AR1 Speicher um 2####################
LAR1 #AR1Speicher
L L#-8
SLD 3
+AR1
TAR1 #AR1Speicher
//###########################################################
SPA End
Nun habe ich heute leider mit ansehen müssen das die Adressierung der BLKMOV's nicht ganz gepasst hat ... und somit mein AR1 Speicher mit in die Queue gemovt wurde ....
Falls also irgendwer einen Rechen bzw. Programmierfehler findet wäre ich sehr dankbar .....
Vielen Dank im Voraus
edit:
OK Sorry .... war ein Bisschen hingeklatscht vorhin, hatte wenig Zeit .. Also hier ein Paar Zusatzinfo's :
Die Länge der Queue ist 236 Byte ... Datentyp der Einträge ist DINT Ein Eintrag besteht aus 2 DINT TeilnehmerNr. und Incode. Nach der Queue im DB kommt ein Zwischenspeicher für AR1 und Index welche ich zur internen Adressierung im FB benutze.
Was passiert ist ...: der BLKMOV hat Zahlenwerte mit in den Bereich der Queue gezogen, diese können nur vom AR1 Speicher kommen. Ich habe versucht den Fehler zu reproduzieren .. ohne Erfolg.
Code:
L B#16#10
T LB 16
L B#16#2
T LB 17
// L 8
//236 Byte Qeue Laenge - Position für Austrag
L 234 Hier habe ich meine Berechnungfür den Quellbereich schon um 2 Byte gekürzt ....
TAR1
-D
Also .... hoffe irgendwer hat eine Idee Gruß
Zuletzt bearbeitet: