Step 7 Schleife

HarryH

Level-1
Beiträge
142
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe folgende Schleife. Im DB302 von Byte 202 beginnend für 160 Byte
suche ich byteweise Hex00 und ersetze es durch Hex20.
(Es geht hier um Druckdaten für einen Markem Drucker. Der akzeptiert keine
Hex00 Zeichen. Diese müssen durch Leerzeichen Hex20 ausgetauscht werden.)

Es funktioniert nur leider nicht. Was ich geprüft habe ist das die Schleife 160x
durchlaufen wird. Das geht. Aber das Vergleichen und Beschreiben
der Bytes funktioniert nicht. Die Hex00 werden nicht "ausgetauscht".

Hat irgendjemand einen Tipp?


Code:
// Datenbereich von DB302. DBB202 -> Länge 160Byte

      AUF   DB   302
      LAR1  P#202.0                     

      L     160
NEX1: T     #Zahler


      L     DBB [AR1,P#0.0]
      L     B#16#0
      ==I   
      SPBN  M001
      L     B#16#20                     // Leerzeichen Hex20
      T     DBB [AR1,P#0.0]
M001: NOP   0


      +AR1  P#1.0
      L     #Zahler
      LOOP  NEX1

abc:  NOP   0
 
Hallo,
folgende Fragen dazu :
- wie kommen die Daten in den DB302 ? Mit einem bestimmten Ereignis ?
- wann und wie wird deine Routine aufgerufen ?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Daten werden über das Panel (MP377) eingegeben. Ich habe 10 Eingabefelder mit je 16 Zeichen (CHAR). Die Variable je Eingabefeld ist vom Datentyp "StringChar" mit einer Feldlänge von 16.

Die Routine wird zyklisch aufgerufen.


Hintergrund:
Wenn der Bediener z.B. nur 10 Zeichen in ein Eingabefeld eingibt (das ist ein normaler Anwendungsfall), werden die restlichen 6 Zeichen nicht beschrieben, bzw. mit Hex00 beschrieben. Diese Hex00 Zeichen müssen mit Leerzeichen ausgetauscht werden.

Gruß
HarryH
 
und das Panel überschreibt zyklisch die geänderten Leerzeichen ... es dürfte flackern.

Eingabe in einen anderen DB kopieren und dabei die Leerzeichen setzen.
 
@vierlagig

Nein das Panel überschreibt nicht zyklisch. Das sind Ein-/Ausgabefelder (ich hab mich wohl ungenau ausgedrückt). Der Bediener gibt z.B. 10Zeichen ein und betätigt Enter. Dann sieht man, das sofort die letzten Zeichen mit Leerzeichen aufgefüllt werden. (der Fokus ist noch auf dem Ein-/Ausgabefeld und die Eingefügten Leerzeichen werden dann blau angezeigt.)
--> Ich weiß das, weil ich diesen Tausch der Zeichen absolut ausprogrammiert habe. Also für 160 Byte laden, vergleichen, tauschen. Das ist natürlich sehr unschön und viel zu lang vom Programmcode. Aber um erstmal weiter zu kommen.

Aber es muss auch mit einer Schleife funktionieren. Oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Aber das Vergleichen und Beschreiben
der Bytes funktioniert nicht. Die Hex00 werden nicht "ausgetauscht".
Woher weißt Du das? Wie beobachtest Du die 160 Zeichen in der SPS?
Nimm mal eine Variablentabelle direkt auf DB302.DBD202, DB302.DBD206, DB302.DBD210, ...
Für mich sieht Dein Code völlig in Ordnung aus.

Oder überschreibt noch was anderes die Zeichen?
Wie sind die Variablen in WinCCflex deklariert - ist da vielleicht ein Array im Spiel, wo dauernd draufgeschrieben wird? Funktioniert es, wenn Du die Verbindung des MP377 trennst?

Harald
 
Zurück
Oben