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

Ergebnis 1 bis 9 von 9

Thema: Suche im DB nach bestimmte Barcode

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich muss gescannte Barcode mit dem Barcodes die sich in einer bestimmten DB befinden vergleichen. Barcodes in DB sind ca. 100 Stück.
    Wenn Barcode was ich gescannt habe auch im DB vorhanden ist wird Ausgang 1 gesetzt und ich muss irgendwie mit dem Zeitstempel in dem selben DB oder in ein anderes melden, dass dieses Barcode gescannt ist. DB wird dann von OPC-Server bearbeitet und in ein externes Datenbank geschrieben.

    Zuerst ist aber wichtig wie ich in einer DB nach Barcode suche. Wie soll ich vorgehen? Oder gibt es dazu Beispiele?
    Zitieren Zitieren Suche im DB nach bestimmte Barcode  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    du mußt dir eine Schleifen-Routine aufbauen, die den DB scannt. Dazu gibt es im Forum sicherlich auch Beispiele (Foren-Suche).
    Falls SCL eine Option für dich ist dann wäre das ein überschaubarer Code, der dafür nötig ist. Bei AWL ist das schon ein bißchen was anderes ...

    Gruß
    Larry

  3. #3
    Goeky ist offline Benutzer
    Themenstarter
    Registriert seit
    19.02.2013
    Beiträge
    43
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    SCL haben wir leider nicht und das macht die Arbeit für mich nicht leicht. AWL ist für mich leider neu.

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Dann hast du m.E. 2 Optionen :

    1.) ihr besorgt SCL und du kannst das Ganze als vernünftig durchschaubaren Code erzeugen
    2.) du beisst dich durch das AWL- und das Pointer- und das indirekte-Adressieren-Thema durch

    Ich würde zu 1.) tendieren - auch wenn 2.) vom Lernanspruch natürlich was hat ... - was hast du nu vor ?

    Gruß
    Larry

  5. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Wenn es nur mit AWL geht, kommst du um indirekte Adressierung nicht herum.
    Dazu liest du zuerst einmal in der FAQ des Forums nach, da ist ein guter Beitrag drin.

    Zum Programm:

    Liegt der Barcode als String vor?
    Wie ist der DB mit den 100 String angelegt?

    Dann mußt du jeweils den Barcode n aus dem Vergleichs-DB in einen internen String des FB kopieren (Blockmove, SFC20), diesen mit dem gescannten Wert vergleichen (FC 10 EQ_STRNG aus der Standard-Library).
    Wenn keine Gleichheit vorhanden ist, dann den nächsten String aus dem DB laden (Adresse entsprechend berechnen).
    Bei 100 Strangs kann es sein, dass du die Zykluszeit sehr hochtreibst, solltest du das in einem Schleifendurchgang machen. In diesem Fall mußt du die Suche u.U. noch auf mehrere SPS-Zyklen verteilen, das würde ich aber erst angehen, wenn die Suche als solche funktioniert.
    Wenn du Strangs umkopierst mußt du immer aufpassen, Siemens-Strings in der S7 haben 2 Byte Kopf. Byte 1 = max. Länge des String (Länge, mit der der String definiert wurde), Byte 1 = tatsächliche Länge des String. Also Aufpassen, bei der Adressberechnung.

    In SCL ginge das um Welten einfacher zu machen!!!
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    in etwa so (einfach) sähe das in SCL aus, wobei hier noch ein paar Bits ausgegeben werden, die ebenfalls in der Tabelle stehen.

    Code:
    FUNCTION FC252 : INT
    
    
    Title = 'L_Matrix'
    //
    // Zuordnung von Bits aus einer Tabelle an Hand eines Namens heraussuchen
    // die Bits der erste Fundstelle werden ausgegeben 
    //
    Version : '1.0'
    author  : rally
    name    : LMATRIX
    family  : SYSTEM
    
    
    VAR_INPUT
      // Eingangsparameter
      Part_NO: STRING[8];    //Part-No
    END_VAR
    
    
    VAR_OUTPUT // Ausgangsparameter
      Output_1: Bool;    //Farbmatrix Ausgang 1 von 4 
      Output_2: Bool;    //Farbmatrix Ausgang 2 von 4 
    END_VAR
    
    
    VAR_TEMP
        // temporäre Variablen
      I: INT;
      EQ: BOOL;
      Temp_String1: STRING[8];
      Temp_String2: STRING[8];
      Laengenmatrix: BYTE;
      atLaengenmatrix AT Laengenmatrix: ARRAY[1..8] of BOOL;
    END_VAR
    
    
    FC252 := 0;
    EQ := 0;
    Output_1 := False;
    Output_2 := False;
    
    
    // Anweisungsteil
    FOR I := 1 TO 50 DO
      
       Temp_String1 := "S52_Laengentabelle".Laengenmatrix[I].Part_No;
       Temp_String2 := Part_NO;
        
       EQ := EQ_STRNG(S1 := Temp_String1 // IN: STRING
                ,S2 := Temp_String2  // IN: STRING
                ); // BOOL
       IF EQ THEN
          Laengenmatrix := "S52_Laengentabelle".Laengenmatrix[I].Laengenmatrix;
          Output_1 := atLaengenmatrix[1];
          Output_2 := atLaengenmatrix[2];
          FC252 := I;
          EXIT;
       END_IF; 
    END_FOR;   
      
    END_FUNCTION
    Der DB ist dabei als Array of String definiert (bzw. bei mir als Array of Struct mit einem String und einer Bitmatrix)
    Mit einer halbwegs schnellen SPS geht das in meinem Fall ohne Aufteilung auf mehrere Zyklen.
    Geändert von Ralle (17.02.2014 um 10:02 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  7. #7
    Goeky ist offline Benutzer
    Themenstarter
    Registriert seit
    19.02.2013
    Beiträge
    43
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für die Antworten, ich muss erst mal mit AWL Schreiben müssen.
    Also ich hatte gerade ein Gespräch mit Kollegen. Wir benötigen eine DB Tabelle max. mit 20 Barcodes als String. Nur in der Tabelle wird gesucht.
    Ich verwende CPU 315F und es wird eigentlich keine weitere Aufgaben haben als gescannte Barcodes zu vergleichen. Ich denke ich brauche nicht auf die Zykluszeit zu achten.

  8. #8
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Wenn es schnell sein soll und die Barcodes mehr oder weniger statisch sind, würde ich die Barcodes im DB schon sortiert ablegen, und dann mittels binärer Suche prüfen ob der gesuchte Barcode vorhanden ist.
    Entweder du sortierst den DB schon im Offline-Projekt, oder schreibst eine Funktion die die Codes entweder einmalig initial oder auf Anforderung sortiert.

    Wenn die SPS aber wirklich sonst nichts zu tun hat, kannst du auch mit dem Holzhammer loslegen und von vorne bis hinten durchsuchen. Hängt auch davon ab wie weit sich die Barcodes voneinander unterscheiden.

  9. #9
    Registriert seit
    02.02.2012
    Ort
    Kaarst
    Beiträge
    126
    Danke
    10
    Erhielt 7 Danke für 7 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Goeky,
    ich habe mal vor 2 Jahren eine Suchfunktion für Datenbausteine in AWL geschrieben. Damit kann man innerhalb eines Datenbausteins nach allen Formaten (von Bit bis String) und auch nach UDT's suchen.
    Wenn du mir sagen kannst wie genau der Barcode abgelegt wird mit Zeitstempel, Zeichenlänge etc. pass ich dir das Programm an und kann dir den Baustein hier posten.

    MfG
    Martin

    Edit:
    Mal ein Programmauszug.
    Bisher läuft die SUFU so das er einen 32-Zeichen-String innerhalb eines DB's sucht.
    Die SUFU kann Zwischensprünge machen und in einer anderen SUFU habe ich sogar eingebaut mehrere Vergleiche innerhalb eines Zykluses zu machen, kann ich hier ggf. auch Nachtragen.
    Wenn Interesse besteht einfach bescheid sagen
    Code:
    NW2: Zähler für Suchlauf nach UDT/String im DB
        U     #String_gefunden
        SPB   N3S1
        L     #DB_LEN
        L     #UDT_LEN
        -I    
        L     #Zaehler_SUFU
        ==D   
        SPBN  N1S1
        L     #Offset
        SPA   N1S2
    N1S1: L     #UDT_LEN
           +D    
    N1S2: T     #Zaehler_SUFU
    
    NW3: erste Übereinstimmung im String finden
        L     #Zaehler_SUFU
        L     2
        +D    
        L     P#1.0
        *D    
        T     #P_UDT
        AUF   #DB_Nr
        L     DBB [#P_UDT]
        L     #ID[2]
        ==D   
        S     #String_gefunden
        NOT   
        BEB   
    
    NW4: Zähler für Suchlauf nach String im DB
    N3S1: L     #Zaehler_Vergleich_String
           L     31
           ==D   
           SPBN  N3S2
           L     0
           SPA   N3S3
    N3S2: L     #Zaehler_Vergleich_String
           L     1
           +D    
    N3S3: T     #Zaehler_Vergleich_String
    
    
    NW5: Zähler für Vergleichswert
          L     #Zaehler_String_IN
          L     31
          ==D   
          SPBN  N4S1
          L     0
          SPA   N4S2
    N4S1: TAK   
          L     1
          +D    
    N4S2: T     #Zaehler_String_IN
    Geändert von martin1988 (21.02.2014 um 10:18 Uhr)

Ähnliche Themen

  1. Suche nach erschwinglichem Fernwirksystem
    Von v.stefan im Forum Sonstige Steuerungen
    Antworten: 7
    Letzter Beitrag: 14.01.2014, 12:18
  2. Suche nach DINT im ARRAY
    Von zloyduh im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 25.11.2011, 17:34
  3. Suche nach Datenbit erfolglos
    Von beckbrother im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 07.05.2010, 21:04
  4. Suche nach Steuerung
    Von sommerey im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 22.10.2009, 12:07
  5. Suche nach Var-Namen
    Von L.T. im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 19.08.2009, 21:55

Lesezeichen

Berechtigungen

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