-> Hier kostenlos registrieren
Hi,
Hab ein problem mit der Zeigeraritmetik von S7.
Habe ein 4x20Zeichen großes Display, auf welches ich meldungen Anzeigen lassen will. Die Meldungen sind in einem Datenbaustein (DB6) vordefiniert und belegen jeweils 22Bytes im Speicher (Datentyp String [20] + 2Bytes Kopf)
Das Display wird über Canopen angesteuert und mit SDO´s übertragen (Sende-Baustein). Leider muss ich hierfür jedes Byte(Zeichen) einzeln senden.
Idee:
Zeiger auf Anfangsaddresse der gewünschten Meldung( 0.0 , 22.0, 44.0 usw) und erstes Zeichen senden dann über eine Schleife den pointer um eins erhöhen und wieder senden.
Frage:
Wie schaut diese Schleife programmtechnisch aus?? Bekomme nur das erste Zeichen aber im nächsten durchlauf findet keine erhöhung des Zeigers statt
AUF "Meldungen" // DB5
L 0 // fehlerwort (z.B. 0...10)
L 11
*I
L 2 // Offset wegen Kopf
+I
T #temp_x // Anfangsadresse
T #temp_y // Speicherung für ende der Zeichenkette
SLW 3
LAR1
n30: L DBB [AR1,P#0.0]
T #Zeichen // Das gewünschte Zeichen zum Übertragen (1Byte)
CALL "SDO Transfer" // Übertragung an Display mit Sende-Baustein
Buchstabe:=#Zeichen
Freigabe :="eins" // Anstoß zum senden
L P#1.0 //erhöhen des pointers
+AR1
L #temp_x // Abfrage auf Zeichenende
L 1
+I
T #temp_x
L #temp_y
L 20
+I
L #temp_x
==I
sbbn n30
Hoffe ihr könnt mir helfen
Hab ein problem mit der Zeigeraritmetik von S7.
Habe ein 4x20Zeichen großes Display, auf welches ich meldungen Anzeigen lassen will. Die Meldungen sind in einem Datenbaustein (DB6) vordefiniert und belegen jeweils 22Bytes im Speicher (Datentyp String [20] + 2Bytes Kopf)
Das Display wird über Canopen angesteuert und mit SDO´s übertragen (Sende-Baustein). Leider muss ich hierfür jedes Byte(Zeichen) einzeln senden.
Idee:
Zeiger auf Anfangsaddresse der gewünschten Meldung( 0.0 , 22.0, 44.0 usw) und erstes Zeichen senden dann über eine Schleife den pointer um eins erhöhen und wieder senden.
Frage:
Wie schaut diese Schleife programmtechnisch aus?? Bekomme nur das erste Zeichen aber im nächsten durchlauf findet keine erhöhung des Zeigers statt

AUF "Meldungen" // DB5
L 0 // fehlerwort (z.B. 0...10)
L 11
*I
L 2 // Offset wegen Kopf
+I
T #temp_x // Anfangsadresse
T #temp_y // Speicherung für ende der Zeichenkette
SLW 3
LAR1
n30: L DBB [AR1,P#0.0]
T #Zeichen // Das gewünschte Zeichen zum Übertragen (1Byte)
CALL "SDO Transfer" // Übertragung an Display mit Sende-Baustein
Buchstabe:=#Zeichen
Freigabe :="eins" // Anstoß zum senden
L P#1.0 //erhöhen des pointers
+AR1
L #temp_x // Abfrage auf Zeichenende
L 1
+I
T #temp_x
L #temp_y
L 20
+I
L #temp_x
==I
sbbn n30
Hoffe ihr könnt mir helfen