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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: DB's nach Strings durchsuchen

  1. #1
    Registriert seit
    24.10.2009
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    nachdem ich nun schon länger ein fleißiger Leser hier bin, und mich durch viele Themen gelesen habe, die mir sehr geholfen habe, bin ich nun auf ein Problem gestoßen auf dass ich noch keine Antwort gefunden habe.

    Habe bei meiner jetzigen Anlage die Aufgabenstellung, dass ich aus 15 DB's mit jeweils 100 STRING[7]'s einen Vergleich durchführen muss mit einem Vergleichsstring, der mir von einer anderen Steuerung vorgegeben wird. Das ganze hat den Sinn, dass ich wenn ich weis in welchem DB der vorgegebene String steht, ich eine entsprechende Programmauswahl treffen kann. Das ganze soll so ablaufen, dass ich den neuen String mit den vorhandenen in den DB's vergleiche, bei positivem Ergebnis rausspringe und dann ein entsprechendes Programm anwähle.

    Bin in AWL ziemlich fit, und denke dass ich das mit viel probieren und Zeit auch in AWL hinbekommen würde, jedoch erscheint mir der Aufwand in AWL sehr groß zu werden. Hier würde denke ich SCL ins Spiel kommen, von dem ich aber überhaupt keine Ahnung habe. Wo programmier ich das? In den Quellen? Wenn ja, wie wird dass Aufgerufen? Übersetzt die Step 7 Software dass so, dass es die SPS verarbeiten kann? Fragen über Fragen, bin dankbar für Lösungsansätze. Denke doch, dass man sowas mit String-Vergleichen über mehrerer DB's schonmal gebraucht hat irgendwo.

    Ich setzte eine 317-2DP CPU ein, Step 7 Version müsst ich nachschauen falls die auch wichtig ist.

    Danke für die tolle Arbeit von euch hier, und für die hoffentlich vielen Antworten
    Zitieren Zitieren DB's nach Strings durchsuchen  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Hallo,
    aus meiner Sicht wäre hier tatsächlich SCL für dich die richtige Wahl.
    Der SCL-Compiler erzeugt aus den Pascal-ähnlichen Befehlen einen für die SPS lesbaren Code.
    Zu dem Thema "Stringverarbeitung" und "SCL" findest du hier im über die Suche mit Sicherheit unzählige Beiträge, die dich weiterbringen können.
    Fragen bitte nicht pauschal sondert konkret stellen.

    Du solltest bei deinem "Projekt" allerdings berücksichtigen, dass dieser angedachte Suchdurchlauf ganz ordentlich Zykluszeit verschlingen wird. Hast du das berücksichtigt ?

    Gruß
    LL

  3. #3
    Registriert seit
    16.05.2007
    Ort
    im Stahlwerk...
    Beiträge
    1.178
    Danke
    120
    Erhielt 429 Danke für 236 Beiträge

    Standard

    Zitat Zitat von Flying Maulwurf Beitrag anzeigen
    Wo programmier ich das? In den Quellen? Wenn ja, wie wird dass Aufgerufen? Übersetzt die Step 7 Software dass so, dass es die SPS verarbeiten kann?

    Ich setzte eine 317-2DP CPU ein, Step 7 Version müsst ich nachschauen falls die auch wichtig ist.
    Hallo.
    Das Programmierpaket SCL ist beim Step 7 Professional Paket mit dabei (genau wie Graph u. PlcSim). Hast Du nur Step 7 V5.x, dann musst Du vom großen S. eine zusätzliche Software/Lizenz kaufen.
    Bei Vorhandensein von SCL wird beim Baustein-Editieren statt KOP, FUP oder AWL einfach SCL angegeben und dann kann es losgehen. Vorher würde ich aber lieber in den Handbüchern schnüffeln, z.B. HIER

    Edit: Vielleicht ist ja in der OSCAT-Bibliothek (V3.11?) etwas für Dich dabei. Die ist echt gut, und man muss das Rad meist nicht neu erfinden, wenn es bereits frei verfügbar ist...

    Gruß Approx
    Geändert von Approx (04.05.2010 um 16:57 Uhr) Grund: Oscat
    Nihil est in cpu, quod non fuerit in intellectu" - Nichts ist in der CPU, was nicht (zuvor) im Verstand war.

  4. #4
    Registriert seit
    27.07.2007
    Beiträge
    223
    Danke
    17
    Erhielt 42 Danke für 40 Beiträge

    Standard

    Bei Vorhandensein von SCL wird beim Baustein-Editieren statt KOP, FUP oder AWL einfach SCL angegeben und dann kann es losgehen. Vorher würde ich aber lieber in den Handbüchern schnüffeln, z.B. HIER
    Das ist leider nicht ganz so einfach. SCL hat einen eigenen Editor. Um in SCL zu programmieren musst du vorher eine SCL-Quelle anlegen.

  5. #5
    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

    Das Programmierpaket SCL ist beim Step 7 Professional Paket mit dabei (genau wie Graph u. PlcSim). Hast Du nur Step 7 V5.x, dann musst Du vom großen S. eine zusätzliche Software/Lizenz kaufen.
    Ja das habe ich heute auch gemerkt. Haben leider die Version ohne SCL. Werd mich mal schlau machen, habe aber wenig hoffnung dass da eine neue Lizenz erworben wird. So nach dem Motto, das ham mer noch nie gebraucht etc...

    Du solltest bei deinem "Projekt" allerdings berücksichtigen, dass dieser angedachte Suchdurchlauf ganz ordentlich Zykluszeit verschlingen wird. Hast du das berücksichtigt ?
    Ja daran habe ich auch schon gedacht. Wollte es irgendwie hinbekommen, dass ich pro Zyklus nur einen DB durchsuche.

    Fragen bitte nicht pauschal sondert konkret stellen.
    Ja ich bemüh mich, suche im Moment eher nach Lösungsansätzen für das Problem, damit ich nicht gleich aufs völlig falsche Pferd setze... Sobald ich mal einen Weg eingeschlagen habe, geh ich dann denk ich mal ins Detail.

    Wäre als Lösungsansatz es nicht möglich einen FC zu schreiben, dem ich in jedem Zyklus (natürlich nur wenn ich das möchte) neue Werte - sprich den zu durchsuchenden DB übergebe, zusammen mit einem Vergleichsstring. Der FC würde nur einen Zyklus lang mit dem Suchen eines DB's verbringen, und im nächsten Zyklus würde ich einen neuen DB Wert übergeben, bis der Vergleich irgendwann positiv ist oder alle DB's durchsucht sind und der Vergleich somit negativ wäre. Denke das wäre auch mit AWL drin, sollte das SCL nix werden. Bräuchte natürlich irgendwie einen externen Zähler der mitläuft damit ich weis wann alle DB's durchsucht sind.

    Gruß FM

  6. #6
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Bei der Menge an Daten bietet es sich an die Strings in den DBs sortiert vorzuhalten.
    Dann kannst du mittels binärer Suche (Teile und Herrsche) deinen String lokalisieren, und würdest damit nur noch log2(15*100) = 11 Iterationen benötigen.

    Wenn der zu durchsuchende DB fix ist, also während der Projektierung einmal angelegt wird, ist das recht einfach vorzusortieren. Ansonsten müsstest du einen Sortieralgorithmus in der SPS programmieren, hast dann aber auch wieder das Problem mit der Zykluszeit.

  7. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Bei der Menge an Daten bietet es sich an die Strings in den DBs sortiert vorzuhalten.
    Das Finden eines Strings ist dann in der Tat sehr schnell erledigt, so wie Thomas schon beschreibt.

    Damit das Einsortieren von neu hinzukommenden Strings nicht lange dauert, wäre eine doppelt verkettete Liste oder ein
    balancierter Binär-Baum das Mittel meiner Wahl.
    http://de.wikipedia.org/wiki/Liste_(Datenstruktur)
    http://de.wikipedia.org/wiki/Baum_(Graphentheorie)
    http://de.wikipedia.org/wiki/Balancierter_Baum

    In verketteten Listen und Bäumen können außerdem Strings unterschiedlicher Länge effizienter als in Arrays gespeichert werden.

    Für das Programmieren der sehr abstrakten elementaren Daten-Operationen würde ich SCL empfehlen.

    Gruß
    Harald
    Geändert von PN/DP (05.05.2010 um 02:34 Uhr) Grund: Links repariert
    Zitieren Zitieren Datenstrukturen: Listen und Bäume  

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Die Daten-Operationen dürfen aber nicht rekursiv programmiert werden, man beachte die maximale Baustein-Schachtelungstiefe!
    Die 11 bis 15 Iterationen müssen für die S7-CPU leider direkt nacheinander programmiert werden.

    Gruß
    Harald
    Zitieren Zitieren Nachtrag  

  9. #9
    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

    Bei der Menge an Daten bietet es sich an die Strings in den DBs sortiert vorzuhalten.
    Was ist damit gemeint? Die DB's werden einmal im Projekt angelegt und sind dann fest. Die Strings in den DB's werden von außen via Ethernet durch einen OPC Server gefüllt bzw. gepflegt. Habe keinen Einfluß auf was da drinnen steht. Nur den Vergleichsstring kenne ich vorher.

    Gruß
    FM

  10. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    OK, da war ich wohl schon zu müde letzte Nacht.

    Mein Vorschlag mit der verketteten Liste paßt hier doch nicht so gut.
    Da kann man zwar schnell neue Strings sortiert einfügen aber das Finden dauert lange.

    Und für den balancierten Binär-Baum lohnt der Aufwand nicht, wenn jeder DB in sich sortiert ist.
    100 Strings sind einfach noch zu wenig Daten.

    Da würde es sich eher anbieten, zusätzlich zu dem ARRAY[0..99] OF STRING[7] einen Sortier-Index
    ARRAY[0..99] OF BYTE einzufügen. Dann braucht nur dieses Index-Array sortiert werden.

    Noch eine Idee:
    Wenn diese Strings tatsächlich nur Ziffern und keine anderen Zeichen enthalten, dann würde ein
    ARRAY[0..99] OF DINT schon mal den Speicherplatzbedarf in den DB um zwei Drittel verringern.
    Und die Vergleichsoperation für DINT wäre viel simpler als für STRING.

    Zitat Zitat von Flying Maulwurf Beitrag anzeigen
    Die Strings in den DB's werden von außen via Ethernet durch einen OPC Server gefüllt bzw. gepflegt. Habe keinen Einfluß auf was da drinnen steht.
    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?
    Wenn nicht, dann ist es wohl doch am besten, das Suchen in den DB auf mehrere Zyklen aufzuteilen.

    Gruß
    Harald

Ä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
  •