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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 28 von 28

Thema: Schleife AWL

  1. #21
    MC_DARKSTONE ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.01.2015
    Beiträge
    25
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    auf wunsch des Support habe ich das komplette Programm zugesendet ( 20 Seiten )
    Die CPU ist gerade besetzt sobald sie Frei wird teste ich das ganze mal.

    Wie meinst du 2 CPUs?
    Wegen dem "H" dachte nur die Sicherheits CPUs sind doppelt ausgeführt.
    Wenn nicht muss ich mal nachschauen welche Firmware Versionen installiert sind
    Gruß
    Erick

  2. #22
    MC_DARKSTONE ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.01.2015
    Beiträge
    25
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    auf wunsch des Support habe ich das komplette Programm zugesendet ( 20 Seiten )
    Die CPU ist gerade besetzt sobald sie Frei wird teste ich das ganze mal.

    Wie meinst du 2 CPUs?
    Wegen dem "H" dachte nur die Sicherheits CPUs sind doppelt ausgeführt.
    Wenn nicht muss ich mal nachschauen welche Firmware Versionen installiert sind
    Gruß
    Erick

  3. #23
    MC_DARKSTONE ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.01.2015
    Beiträge
    25
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hi,
    ich habe die verschiedenen Varianten versucht aber leider hat es nicht funktioniert
    Zudem hat Variante 1 direkt nach der 1. Runde den Vorgang beendet.

    Ich hatte es auch mit dem VKE CLR bzw. Set versucht aber auch kein Erfolg.

    Ich Versuche morgen mal die Schleife zu halbieren in dem ich den Programmcode entsprechend erweitere / verdoppel
    Evtl hat es was mit der Anzahl und Geschwindigkeit an durchläufen zu tun

    Gruß
    Erick

  4. #24
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Zitat Zitat von MC_DARKSTONE Beitrag anzeigen
    Zudem hat Variante 1 direkt nach der 1. Runde den Vorgang beendet.
    Ooo... die Varianten sollten gleich funktionieren.

    Also diese beiden Varianten müssen exakt gleich funktionieren (außer: Status-Flags sind danach anders):
    Meine Variante 1
    Code:
    CLR
    L     W#16#0D0A
    L     DBW [AR1,P#2.0]
    <>I
    SPBN  opei
    Deine Variante
    Code:
    CLR
    L     W#16#0D0A
    L     DBW [AR1,P#2.0]
    ==I
    SPB   opei

    PS: Ich dachte, H-CPU sind immer doppelt?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #25
    Registriert seit
    06.10.2003
    Beiträge
    3.411
    Danke
    451
    Erhielt 504 Danke für 407 Beiträge

    Standard

    Hallo Erick,

    ich kann zwar den Fehler auch nicht finden. Aber es gibt ein paar Dinge, die mir nicht so recht gefallen. Vielleicht hilft es ja.

    Zitat Zitat von MC_DARKSTONE Beitrag anzeigen
    .. dann wird aus der Schleife raus gesprungen (SPBN Groe) und eine Berechnung durchgeführt, danach wird zurück in Schleife gesprungen ( ASC1: T ...)
    Den Code hast du noch nicht gepostet? Ich glaube, in diesem Fall müsste man das gesamte Programm untersuchen, um einen möglichen Fehler zu finden (falls es einen gibt).


    Zitat Zitat von MC_DARKSTONE Beitrag anzeigen
    L DBB [AR1,P#0.0] // Lade 1.Byte
    L B#16#40
    <I // DBB X kleiner "40" dann SP nicht..
    Wenn man HEX-Werte mit Integer-Operationen auf größer oder kleiner vergleicht, kann einem das Vorzeichenbit schnell mal einen Streich spielen. Bei deinen Werten kommt dies m.E. jedoch nicht vor.


    Oder vielleicht doch?
    Zitat Zitat von MC_DARKSTONE Beitrag anzeigen
    L DBB [AR1,P#1.0]// Wenn DBB X+1 kleiner 40 dann Subtr "30" damit nur 1 dezstelle über bleibt
    L B#16#30
    -I

    So richtig glücklich wäre ich mit diesem Code nicht.

    Schreibweisen wie L '1' anstatt L 16#0031 sind übrigens in Step7 auch möglich.

    Eventuell wäre für so eine Auswertung SCL besser geeignet gewesen?


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  6. #26
    MC_DARKSTONE ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    15.01.2015
    Beiträge
    25
    Danke
    2
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Der Sprung nach Groe wird lediglich ein Vergleich durchgeführt
    Code:
    Groe: L     DBB [AR1,P#0.0]
          L     B#16#41
          ==I   
          SPBN  Nex1
          L     B#16#A0
          SPA   ASC1
    Nex1: L     DBB [AR1,P#0.0]
          L     B#16#42
    ....
    Mit den anderen Codes möchte ich jeweils nur das high und low word von dem ASCII code auslesen
    ASCII telegramm: 0x30354146 (4Byte)
    Dies entspricht : 0x 0 5 A F (2Byte)

    Mit dem Code wird quasi erfragt ob der Wert kleiner 40 ist
    Ja: Minus 30 (30-30=0, 35-30=5)
    Nein: Vergleiche (41==41 ->A; 46==41 , 46==42, ..., 46==46 ->F )

    Die Werte liegen alle zwischen 30 und 46 daher gibt es keine negativen Werte
    Abgesehen von 0D0A, weshalb auch der Vergleich auf 0D0A.

    Gruß
    Erick
    Geändert von MC_DARKSTONE (11.06.2015 um 08:20 Uhr)

  7. #27
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    Wenn man HEX-Werte mit Integer-Operationen auf größer oder kleiner vergleicht, kann einem das Vorzeichenbit schnell mal einen Streich spielen. Bei deinen Werten kommt dies m.E. jedoch nicht vor.


    Oder vielleicht doch?
    Wenn man wie hier Byte-Werte mit 16-Bit-Operationen vergleicht, dann ist das Vorzeichen (~ High-Byte) immer positiv.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  8. #28
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von MC_DARKSTONE Beitrag anzeigen
    ASCII telegramm: 0x30354146 (4Byte)
    Dies entspricht : 0x 0 5 A F (2Byte)
    Das ist also eine Wandlung einer ASCII-Zeichenkette mit Hex-Zeichen zu einem 16-Bit Wert.
    Die gibt es eigentlich schon fertig als FC94 ATH (Standard Library > TI-S7 Converting Blocks).

    Man kann die einfache Wandlung aber auch selber programmieren.

    Umwandlung eines ASCII-Zeichens in einen Hex-Wert:
    - '0' ... '9' ? --> '0' abziehen --> 0 ... 9
    - 'A' ... 'F' ? --> '7' abziehen --> 10 ... 15 (16#0A ... 16#0F)
    - alle anderen ASCII-Zeichen sind unzulässig, kann man z.B. mit 0 ersetzen

    Man kann das auch ein wenig optimieren:
    - >'F' --> unzulässiges Zeichen
    - >='A' --> '7' abziehen --> fertig
    - >'9' --> unzulässiges Zeichen
    - '0' abziehen, Ergebnis negativ? --> unzulässiges Zeichen

    In Microprozessoren nimmt man gerne auch Lookup-Tables.

    Man kann die Wandlung in AWL auch einfach mit einer Sprungleiste realisieren:
    Code:
          L   #myChar  // das ASCII-Zeichen (z.B. von DBB [AR1,P#0.0])
          L   '0'      // ASCII-Wert des kleinsten zulässigen Zeichens
          -I           // Normierung zu 0...x zur Verkürzung der SPL
          SPL MUNZ
          SPA MZIF     // '0'
          SPA MZIF     // '1'
          SPA MZIF     // '2'
          SPA MZIF     // '3'
          SPA MZIF     // '4'
          SPA MZIF     // '5'
          SPA MZIF     // '6'
          SPA MZIF     // '7'
          SPA MZIF     // '8'
          SPA MZIF     // '9'
          SPA MUNZ     // B#16#3A
          SPA MUNZ     // B#16#3B
          SPA MUNZ     // B#16#3C
          SPA MUNZ     // B#16#3D
          SPA MUNZ     // B#16#3E
          SPA MUNZ     // B#16#3F
          SPA MUNZ     // B#16#40
          SPA MTET     // 'A'
          SPA MTET     // 'B'
          SPA MTET     // 'C'
          SPA MTET     // 'D'
          SPA MTET     // 'E'
          SPA MTET     // 'F'
    MUNZ: L   7        // unzulässiges Zeichen! --> soll als 0 interpretiert werden
    MTET: +   -7       // bei Tetraden A...F 7 abziehen
    MZIF: T   #myByte  // der umgewandelte Wert 0...15 (B#16#00 ... B#16#0F)
    PS: ASCII-Schreibweise '0' ... '9' = B#16#30 ... B#16#39 / 'A' ... 'F' = B#16#41 ... B#16#46

    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 Bitmusterüberprüfung mittels Schleife in AWL
    Von Rune17 im Forum Simatic
    Antworten: 37
    Letzter Beitrag: 29.04.2015, 15:32
  2. Step 7 AWL - Schleife mit Array
    Von bo1986 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 19.06.2013, 12:57
  3. awl schleife und pointer
    Von Iserlohner im Forum Simatic
    Antworten: 28
    Letzter Beitrag: 18.02.2011, 09:12
  4. IF oder FOR Schleife in AWL?
    Von motamas im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 21.07.2010, 14:19
  5. AWL Schleife
    Von Anonymous im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 31.07.2003, 07:05

Stichworte

Lesezeichen

Berechtigungen

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