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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: DB's nach Strings durchsuchen

  1. #11
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    mich würde an dieser Stelle mal interessieren, wie die vielen String-Daten in die SPS kommen / gekommen sind ...

    Ein Such- / Sortier-Algorhythmus gleich welcher Art ist mit Sicherheit nicht nicht unbedingt für ein zyklisch arbeitendes Programm geeignet. Auch mit einer superschnellen CPU wirst du hier ganz leicht auf Zykluszeit von mehreren 100 Millisekunden kommen.

    Ein PC (z.B. eine Visu) hätte hier allerdings überhaupt keine Probleme Vielleicht mal so als Gedanken-Anstoss ...

    Gruß
    LL

  2. #12
    Flying Maulwurf ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.10.2009
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Läßt sich vereinbaren, daß der OPC-Server die Daten in den DB irgendwie sortiert ablegt?
    Oder jeden String einzeln an die SPS schickt und die SPS sortiert den in die DB ein?
    mich würde an dieser Stelle mal interessieren, wie die vielen String-Daten in die SPS kommen / gekommen sind ...
    Der OPC Server legt immer den kompletten DB ab, ich muss keine Sortierung vornehmen, nur eine Suche nach einem mir vorgegebenen Referenzstring. Das ganze läuft so ab, dass der OPC wenn er seine Datenbank aktuallisiert hat, er die Daten in die entsprechenden DB's in meiner SPS schickt.
    Der Grund ist, dass die Programmauswahl von einer anderen Steuerung angetriggert wird, diese Steuerung kennt aber nur den aktuellen String (Artikelnummer) vom jeweiligen Auftrag. Meine Aufgabe besteht darin diese Artikelnummer in einem DB bei mir zu finden und daraufhin zu entscheiden welches Programm benötigt wird.

    Ein PC (z.B. eine Visu) hätte hier allerdings überhaupt keine Probleme Vielleicht mal so als Gedanken-Anstoss ...
    Über eine Visu? Setze ein MP277 ein, habe aber keine Idee wie ich über eine Visuallisierung die Auswertung machen könnte.

  3. #13
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.786
    Danke
    398
    Erhielt 2.414 Danke für 2.010 Beiträge

    Standard

    Also ich fasse das jetzt mal zusammen :
    Ein OPC-Server ballert dir gemäß einer nach irgendwelchen Kriterien getroffenen Auswahl deine DB's voll.
    In einem Bediengerät wird ein Artikel per Name ausgewählt und diesen Namen sollst du dann finden nebst den dahinter stehenden Daten, die du für den Ablauf deiner Anlage brauchst.
    Dieses Bediengerät kennt die Daten des OPC-Rechners nicht ...

    Wie wäre es, wenn der OPC-Rechner sich die aktuelle Anwahl/Auswahl abholt und den dazugehörenden Index dann zurück liefert ? Das wäre doch dann ein PC, dem es keine Schwierigkeiten bereitet, ein paar 100 Datensätze zu durchsuchen ...

    Gruß
    LL

  4. #14
    Flying Maulwurf ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.10.2009
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja das wäre sicherlich die für einen Programmierer einfachste Lösung, aber das lässt sich Kundenseitig nicht verwirklichen, trotz mehrfacher Nachfrage, da das EDV "Team" beim Kunden das nicht will.

    Die Zusammenfassung ist Richtig, der OPC wird das natürlich nur in meine DB's schreiben wenn sich an der Stammdatenbank was ändert, also nicht laufend. Für mich ist der DB in dem der Datensatz gefunden wird entscheidend, über den weis ich dann, welches Programm ich vorwählen muss...

    Thx
    FM

  5. #15
    Flying Maulwurf ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.10.2009
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    So, habe eine Lösung gefunden, in AWL realisiert und funktioniert. Pro Zyklus durchsuche ich einen DB, was bei 100 Strings ca 10ms dauert...



    L #Such_laenge_loop
    CON2: T #loop_2

    // ANY Pointer zusammenstellen, dessen Adresse in jedem Loop erhöht wird

    // 10 für S7
    L B#16#10
    T LB 0

    // Datentyp welcher kopiert werden soll (2=Byte)
    L B#16#2
    T LB 1

    // Wiederholfaktor wieviele Datentypen kopiert werden soll (10=10 Bytes)
    L 10
    T LW 2

    // DB-Nummer aus welchen DB kopiert werden soll
    L #Such_DB
    T LW 4

    // Speicherbereich auswählen (84=DB)
    L B#16#84
    T LB 6

    // Bit Adresse festlegen
    L 0
    T LB 7

    // Byte Adresse festlegen (muss 3 Bits nach links geschoben werden)
    L #Byte_Such_Speicher
    SLW 3
    T LW 8

    // den zu suchenden aktuellen String im DB zuweisen (Abhängig vom loop)

    CALL "BLKMOV"
    SRCBLK :=#Block_IN
    RET_VAL:=#fehler
    DSTBLK :=#aktueller_Suchstring

    // Vergleich beider aktuellen Strings

    CALL "EQ_STRNG"
    S1 :="DB 180 MDE Daten Belade1".Beladeplatz_1.Artikelnummer
    S2 :=#aktueller_Suchstring
    RET_VAL:=#Ergebnis

    // String gefunden --> Sprung zu TRUE

    U #Ergebnis
    = #Artikel_gefunden

    SPB TRUE

    // String nicht gefunden, Anfangsadresse um 10 Byte erhöhen, Suche fortfahren

    L #Byte_Such_Speicher
    L 10
    +I
    T #Byte_Such_Speicher

    L #loop_2
    LOOP CON2

    // Loop wurde #Such_laenge_loop x durchlaufen ohne Erfolg

    SET
    = #Artikel_nicht_gefunden

    BEA

    TRUE: NOP 0

    // String wurde gefunden, BEA und FC verlassen

    BEA

  6. #16
    Registriert seit
    17.06.2004
    Ort
    Offenau
    Beiträge
    3.758
    Danke
    209
    Erhielt 421 Danke für 338 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hab dir hier auch mal die Quelle eines von mir irgendwann mal programmierten stringsuchers in einer struktur, vielleicht kannst ja gebrauchen...

    Code:
    FUNCTION FC 124 : VOID
    TITLE =STD_ANY_SUCHEN
    //===================================================
    //Technische Daten:
    //====================================================
    //           Version: 1.00
    //             Datum: 25.09.2009
    //====================================================
    //             Autor: Kühner J.
    //Baustein Name Symb: STD_ANY_SUCHEN
    //
    //====================================================
    //Beschreibung:
    //
    //Such nach einem gegebenen ANY in einem DB.
    //
    //Dazu kann die Struct größe in der Sich der Any befindet,
    //der DB, und die Startadresse eingegeben werden.
    //Die Any Länge wird aus den zu suchenden Daten ausgelesen.
    //
    //Der FC gibt 0 zurück wenn nichts gefunden wurde und >0
    //die Nummer des Structes!
    //====================================================
    VERSION : 0.1
    
    
    VAR_INPUT
      VERGLEICHS_ANY : ANY ;	//Any zu den Daten die Verglichenwerden sollen (Bsp. der gescannte Barcode)
      DB_VERGLEICH : INT ;	//DB in dem die Daten stehen
      GROESE_STRUCT_VERGLEICH : INT ;	//Größse des zu durchlaufenden Structes
      ANZAHL_VERGLEICH : INT ;	//Anzahl der Struct Elemente
      START_VERGLEICH : INT ;	//Adresse im STruct
    END_VAR
    VAR_OUTPUT
      ZAEHLER_AUSGABE : INT ;	//Nummer des Datensatzes, 0 = keinen gefunden!
    END_VAR
    VAR_TEMP
      ANY1 : ANY ;	
      ANY2 : ANY ;	
      ZAEHLER_1 : INT ;	
      ZAEHLER_2 : INT ;	
      RET_VAL_INT : INT ;	
      LAENGE_ANY : INT ;	
      STARTADRESSE_IN_LOKALDAT : INT ;	
      DATEN : ARRAY  [1 .. 100 ] OF BYTE ;	
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          L     0; 
          T     #ZAEHLER_AUSGABE; 
          T     #ZAEHLER_1; 
    
    //Startadresse der Temporär in den Lokaldaten abgelegten Daten!
          L     30; 
          T     #STARTADRESSE_IN_LOKALDAT; 
    
    //Vergleichsdaten in Lokaldaten kopieren
    //ANY 1 auf Vergleichsdaten nutzen
          L     P##VERGLEICHS_ANY; 
          LAR1  ; 
          L     D [AR1,P#0.0]; 
          T     LD     0; 
          L     D [AR1,P#4.0]; 
          T     LD     4; 
          L     W [AR1,P#8.0]; 
          T     LW     8; 
    
    //ANY 2 auf Lokaldaten befüllen
          L     28; 
    
          L     W#16#1002; //Typ BYTE
          T     LW    10; 
          L     LW     2; //Anzahl Bytes
          T     LW    12; 
          T     #LAENGE_ANY; 
          L     0; //Quell-DB
          T     LW    14; 
          L     #STARTADRESSE_IN_LOKALDAT; //Startadresse in Lokaldaten
          SLD   3; 
          OD    DW#16#87000000; //87 Vorgänger-Lokaldatenbereich
          T     LD    16; 
    
          CALL SFC   20 (
               SRCBLK                   := #ANY1,
               RET_VAL                  := #RET_VAL_INT,
               DSTBLK                   := #ANY2);
    
    
    sl1:  L     #ZAEHLER_1; 
          +     1; 
          T     #ZAEHLER_1; 
          L     #ANZAHL_VERGLEICH; 
          >I    ; 
          BEB   ; 
    
          L     #ZAEHLER_1; 
          +     -1; 
          L     #GROESE_STRUCT_VERGLEICH; 
          *D    ; 
          L     #START_VERGLEICH; 
          +D    ; 
          SLD   3; 
          LAR1  ; 
    
          L     #STARTADRESSE_IN_LOKALDAT; 
          SLD   3; 
          LAR2  ; 
    
          L     0; 
    sl2:  T     #ZAEHLER_2; 
    
          L     DBB [AR1,P#0.0]; 
          L     LB [AR2,P#0.0]; 
          <>I   ; 
          SPB   sl1; //ungleich, weiter springen!
    
          L     P#1.0; 
          +AR1  ; 
          +AR2  ; 
    
          L     #LAENGE_ANY; 
          +     -2; 
          L     #ZAEHLER_2; 
          <=I   ; 
          SPB   gl; 
    
          +     1; 
          SPA   sl2; 
    
    //ergebnis ist gleich
    gl:   L     #ZAEHLER_1; 
          T     #ZAEHLER_AUSGABE; 
    END_FUNCTION
    ---------------------------------------------
    Jochen Kühner
    https://github.com/jogibear9988/DotN...ToolBoxLibrary - Bibliothek zur Kommunikation mit PLCs und zum öffnen von Step 5/7 Projekten
    Zitieren Zitieren String suche...  

Ähnliche Themen

  1. Verzeichnis nach Dateien durchsuchen.
    Von Nobbie im Forum Programmierstrategien
    Antworten: 1
    Letzter Beitrag: 11.04.2012, 14:30
  2. Gesamtes Projekt nach Variablenname durchsuchen
    Von twincatter im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 21.04.2011, 12:26
  3. DB nach Werten durchsuchen - SCL ?
    Von karsten.schmidt im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 26.03.2011, 13:15
  4. DB nach einem bestimmten Wert durchsuchen
    Von Herrminator im Forum Simatic
    Antworten: 20
    Letzter Beitrag: 30.07.2009, 16:53
  5. DB mit 1000 Strings durchsuchen...?!?!
    Von Klausi im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 15.08.2006, 12:35

Stichworte

Lesezeichen

Berechtigungen

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