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

Ergebnis 1 bis 5 von 5

Thema: Schleifen mit indirekter Adressierung

  1. #1
    Registriert seit
    11.03.2014
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Liebe Programmierer vom SPS-Forum, ich schaue hier schon länger nach, doch heute muss ich mal eine direkte Frage stellen .

    Erstmal zum Hintergrund. Es geht darum, das der QR-Code eines Produktes ein bzw mehrere Leerzeichen enthält, was unser Hauptsystem, an das der Code gesendet wird, nicht richtig verarbeitet. Ich habe es ersteinmal direkt in die entsprechenden Projekte geschrieben, allerdings möchte ich einen FB dafür schreiben, der den BC prüft und eventuelle Leerzeichen automatisch herauslöscht. Um den FB in all unseren Projekten verwenden zu können, muss er natürlich mit indirekter Adressierung programmiert werden. Ich übergebe dem FB den DB sowie die Anfangsadresse des DB, in dem der Barcode steht, die definierte BC länge sowie DB und Anfangsbyte des überprüften und bearbeiteten Barcodes und natürlich ein Enable für den Baustein.

    Das Problem ist, dass mir die SPS immer in Stop geht

    Hier mal ein Auszug wie ich es geschrieben habe:

    UN #Enable // Wird Baustein verwendet?
    BEB // Bedingtes Bausteinende

    L 0
    T Loop
    T Loop2

    L #Eingangs_DB // Umtransferieren der Eingangsparameter in den TEMP-Bereich
    T #DB_Eing

    L #Eingangs_DBB
    T #DBB_Eing

    L #Ausgangs_DB
    T #DB_Ausg

    L #Ausgangs_DBB
    T #DBB_Ausg

    L #Loop // Prüfen ob alle Zeichen bearbeitet wurden
    L 1
    + I
    L #Barcodelänge
    <= I
    SPBN Ausg // Wurden alle Zeichen in den Puffer geschrieben, wird der Puffer ausgegeben

    Up: Auf DB[#DB_Eing] // öffnen des DB, indem der Barcode liegt

    L #DBB_Eing // Aufbereiten des nächsten BC-Bytes
    L #Loop2 // Wird hochgezählt, sodass automatisch alle Bytes eingelesen werden
    +I
    T #Byte_eing

    L 10 // Ab Lokaldatenbyte 10 ist ein Array mit chars, welcher BC puffert
    L Loop
    + I
    T #Pufferbereich // Aktuelles Byte für Pufferung

    L DBB[DBB_Eing] // Prüfen ob ein Leerzeichen im aktuellen Byte vorhanden ist
    L ' '
    ==I
    SPB Spc // Ist ein Leerzeichen vorhanden, wird weitergesprungen, wenn nicht wird der Wert in das aktuelle Pufferbyte geschrieben

    L DBB[#Byte_eing] //
    T LB[#Pufferbereich]

    L Loop // Schleife für das Schreiben in den Puffer wird hochgezählt ( nur wenn kein Leerzeichen vorhanden ist)
    L 1
    + I
    T Loop

    Spc: L Loop2 // Ist ein Leerzeichen vorhanden, wird nur die Leseschleife hochgezählt, damit im Puffer das Leerzeichen nicht eingetragen wird
    L 1
    +I
    T Loop2

    L #Loop // Prüfen ob alle Zeichen bearbeitet wurden
    L 1
    + I
    L #Barcodelänge
    <= I
    SPB Up // Ist noch nicht vollständig geprüft worden, wird hoch gesprungen

    Ausg: Auf DB[DB_Ausg]

    CALL SFC 20 // Schieben des Puffers in den neuen Datenbaustein
    SRCBLK := #Puffer
    RET_VAL:=
    DSTBLK := DBB[DBB_Ausg]



    Ich hoffe ihr könnt etwas damit anfangen und dass meine Kommentare etwas verständlich sind. Habe den Code von Arbeit nicht hier und von daher hier jetzt fix von Hand eingeschrieben. Es sollte zwar keinen Unterschied geben, aber zur Information, wir benutzen auf Arbeit nur noch Soft-SPSen.

    Beste Grüße

    Wintz
    Geändert von Wintz (19.05.2014 um 16:50 Uhr)
    Zitieren Zitieren Schleifen mit indirekter Adressierung  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.338
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard

    Vielleicht sollten wir doch lieber warten, bis wir Deinen echten Code sehen?
    Dein "Gedächtnisprotokoll" ist kaum nachzuvollziehen und enthält Syntaxfehler, z.B. beim SFC20 die Angabe "DSTBLK := DBB[DBB_Ausg]" kann so überhaupt nicht richtig sein.

    Vorab:

    Zitat Zitat von Wintz Beitrag anzeigen
    Das Problem ist, dass mir die SPS immer in Stop geht
    Das ist doch kein Problem - schau in den Diagnosepuffer, da verrät Dir die CPU warum sie in Stop geht.
    Ich tippe mal auf etwas in der Richtung "Ausrichtungsfehler"

    Schaue nochmal in die Step7-AWL-Hilfe zur speicherindirekten Adressierung.

    Wenn man auf ein Byte indirekt zugreifen will (L DBB[#Byte_eing]), dann muß man die Byteadresse vorher mit 8 multiplizieren (üblicherweise per "SLD 3"), weil die indirekte Adressierung eine Bitadresse benötigt.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    .
    Ohne deinen Code geprüft zu haben:
    Lade dir die Fehler-OB´s und schau´dann
    zur Laufzeit im Diagnosepuffer nach, was
    dort angemeckert wird.

    P.S. Für Programm-Code gibt es die Raute in der 2. Button-Zeile ganz rechts
    kind regards
    SoftMachine

  4. #4
    Registriert seit
    13.09.2010
    Beiträge
    2.292
    Danke
    178
    Erhielt 375 Danke für 355 Beiträge

    Standard

    .
    Habe deinen Code mal in PLC-Sim geschmissen,
    da tritt tatsächlich der Ausrichtungsfehler auf
    wie es PN/DP bereits vermutet hat.
    kind regards
    SoftMachine

  5. #5
    Wintz ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.03.2014
    Beiträge
    12
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Um gottes Willen, ja dass ich die Werte nach links schieben muss, um einen Pointer daraus zu machen, hab ich ja komplett vergessen. Danke dafür. Aber wie hast du es gesehen, bei mir hat der Diagnose Puffer nur den Durchlauf von OB121 angezeigt, also Programmfehler?

Ähnliche Themen

  1. Step 7 Problemchen mit indirekter Adressierung
    Von spirit im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 14.11.2013, 14:11
  2. Step 7 Schleife mit indirekter Adressierung
    Von Tschigi im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 28.10.2013, 10:41
  3. TIA MOVE mit indirekter adressierung ...?
    Von MaMoe2909 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 02.09.2013, 15:16
  4. IN_OUT mit Indirekter Adressierung
    Von SCM im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 14.10.2011, 12:07
  5. Problem mit indirekter Adressierung
    Von Astralavista im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 29.09.2010, 11:25

Lesezeichen

Berechtigungen

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