Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 9 von 9

Thema: Schleife

  1. #1
    Registriert seit
    09.03.2006
    Beiträge
    137
    Danke
    19
    Erhielt 4 Danke für 4 Beiträge

    Standard


    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
    Zitieren Zitieren Schleife  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.715
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

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

    Gruß
    Larry

  3. #3
    Avatar von HarryH
    HarryH ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.03.2006
    Beiträge
    137
    Danke
    19
    Erhielt 4 Danke für 4 Beiträge

    Standard

    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

  4. #4
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

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

    Eingabe in einen anderen DB kopieren und dabei die Leerzeichen setzen.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  5. #5
    Avatar von HarryH
    HarryH ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    09.03.2006
    Beiträge
    137
    Danke
    19
    Erhielt 4 Danke für 4 Beiträge

    Standard

    @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?

  6. #6
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Du denkst daran das der LOOP-Befehl den Zähler dekrementiert? Du durchsuchst also nicht AB Byte 202 sondern BIS Byte 202.
    Geändert von dtsclipper (14.07.2014 um 14:09 Uhr)
    Das Grauen lauert in der Zwischenablage !!

  7. #7
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von dtsclipper Beitrag anzeigen
    Du denkst daran das der LOOP-Befehl den Zähler dekrementiert? Du durchsuchst also nicht AB Byte 202 sondern BIS Byte 202.
    Blödsinn, er inkrementiert doch das Adressregister
    würde er auf Basis des Schleifenzählers die Adresse berechnen könnte Dein Einwand geltend gemacht werden
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  8. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    dtsclipper (14.07.2014)

  9. #8
    Registriert seit
    11.09.2007
    Ort
    Suedwestpfalz
    Beiträge
    917
    Danke
    81
    Erhielt 209 Danke für 192 Beiträge

    Standard

    Habs mittlerweile auch gemerkt...
    Das Grauen lauert in der Zwischenablage !!

  10. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.170
    Danke
    922
    Erhielt 3.287 Danke für 2.656 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von HarryH Beitrag anzeigen
    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
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Step 7 Unterschied zwischen IF- Schleife und While-Schleife
    Von Vokal12 im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 29.10.2013, 22:52
  2. Step 7 Schleife ?
    Von byfluffy im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 18.10.2013, 12:09
  3. for-Schleife
    Von fai004 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 26.04.2009, 19:14
  4. FOR Schleife
    Von dietere im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 19.01.2008, 02:36
  5. For Schleife in VB 6
    Von godi im Forum Hochsprachen - OPC
    Antworten: 8
    Letzter Beitrag: 14.06.2007, 10:03

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •