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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 31

Thema: Mehrere Datenbausteine durchsuchen

  1. #11
    Registriert seit
    18.09.2004
    Ort
    Münsterland/NRW
    Beiträge
    4.718
    Danke
    729
    Erhielt 1.158 Danke für 969 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Daher sollte es eine Anregung sein, wie man überhaupt Daten hintereinander in einem DB ablegt, wegen Pointer und so
    Aber eine Tabelle mit Kennzeichnung ist schon besser

  2. #12
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Hallo,

    also ich habe jetzt ein Muster - Datentelegramm erhalten und es hat knapp 1600 Zeichen, aber das kann sich durchaus auch noch ändern. Soll heissen es können mal mehr werden.

    Kann der CP340 so viele Zeichen überhaupt am Stück einlesen?
    Und wohin? Ein String kann ja nur 254 Zeichen enthalten?

    Was das Suchen in den Datenbausteinen betrifft, denke ich das die Version mit mehreren DB´s fast übersichtlicher ist, auch wenn es mehr Aufwand bedeutet.

    SCL sagt mir leider nichts. Klar hab ich hier und da schon mal was davon gelesen, kann ich aber eben nicht.

    Was mir gerade ein wenig Bauchschmerzen besorgt ist die Länge des Datentelegramms. Kann ich das überhaupt verarbeiten?

    Und dann ist da noch die Sache mit der CPU: Ich bin mir fast sicher das eine S7-313C viel zu wenig Resourcen für solch eine Aufgabe hat.

    Was meint ihr?

    Gruß smartie

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

    Standard

    Siehe hier: http://support.automation.siemens.co...ew/de/27072372

    Also max. 1024 Byte pro Telegramm. Ob die CPU reicht? Schwierig zu sagen. Zuerst mal anhand der Länge und Anzahl der zu verwaltenden Nachrichten nachrechnen, ob der Speicher ausreicht. Dann kommt es darauf an, was die CPU noch so machen soll und wie zeitkritisch das ist. Immerhin muß ja die Suchfunktion in den langen Telegrammen nach Übereinstimmungen suchen, das braucht mit Sicherheit Zykluszeit. Die S7 ist für deinen Fall sicher nicht das NonPlusUltra . Auf jeden Fall mußt du die ankommenden Daten irgendwie umrangieren. Wenn du IEC-Funktionen wie FIND nutzen willst, dann muß alles in 254-Byte-Strings zerhackt und später wieder zusammengesetzt werden. In diesem Falle sollte man sich evtl. besser eine eigene Suchfunktion schreiben, die dann vorteilhafter Weise, bei Bedarf, die Suche auch über mehrere SPS-Zyklen verteilen kann, um die Zykluszeit der SPS nicht ganz in die Knie zu zwingen. Kannst auch einmal über eine VIPA-Speed7 nachdenken.
    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

  4. #14
    Registriert seit
    02.09.2006
    Beiträge
    115
    Danke
    5
    Erhielt 13 Danke für 11 Beiträge

    Standard

    Hui, ich hab mal sowas ähnliches gemacht, allerdings in kleinerem Masstab.

    Ich hab ein kleines Programm geschrieben, was 5 DBs durchsucht, nach einer Art Materialnummer (auch von nem Scanner), welche aus 2 CHARs und einem Integer Wert bestand.
    Und die 315 hatte sehr stark zu kämpfen mit der Zykluszeit (hab alles in einen Zyklus gepackt). Und das waren nur 5 Regale (5 DBs) á 20 x 5 Stellplätze...
    Um zu schauen, ob eine Mat-Nr. schon eingelagert war, musste ich die DBs auch durchsuchen, im schlechtesten Fall hat es fast eine Sekunde gedauert, bis der Zyklus beendet war.

    Ich hab den Quellcode noch hier, allerdings nicht die endgültige Version, wenn du Interesse hast...

    Aber, was mir grad noch auffällt... 1600 Byte großes Telegramm? Oder war das nur ein Ethernet Packet? Wenn ich das richtig in Erinnerung hab, war doch die MSS 1460 Byte + die Header, Trailer, etc...
    Wäre es bei so einer Datenmenge nicht vielleicht sinnvoller das ganze in einer SQL Datenbank zu verwalten?

    P.S.: Ist bei Simatic ein String nicht auch einfach nur ein CHAR Array? Ich mein, so wie in C/C++? Wenn ja, dann kannst du den String doch zerlegen und einfach immer Zeichen für Zeichen zu vergleichen, anstelle des kompletten Strings...

    Oh man, ich müsste in der Richtung auch mal wieder was machen...
    „Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, daß sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, daß es unmöglich zerlegt oder repariert werden kann.“
    Douglas Adams

  5. #15
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    ... ich stimme da Borsti zu.
    Vielleicht gibt es in dem Zusammenhang ja auch eine Visu an der Anlage, möglicherweise ein PC, der dann über Script-Befehle ohne große Schwierigkeiten in der Lage wäre, diese Daten zu bewältigen ...

    Gruß
    LL

  6. #16
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Danke, werd mich da mal einlesen.

    Zitat Zitat von Ralle Beitrag anzeigen
    Kannst auch einmal über eine VIPA-Speed7 nachdenken.
    Der Kunde besteht auf eine Siemens SPS, und wie es halt so ist hat unser lieber Vertrieb da mal wieder mal etwas Vorschnell was verkauft..

    Zitat Zitat von Ralle Beitrag anzeigen
    In diesem Falle sollte man sich evtl. besser eine eigene Suchfunktion schreiben, die dann vorteilhafter Weise, bei Bedarf, die Suche auch über mehrere SPS-Zyklen verteilen kann, um die Zykluszeit der SPS nicht ganz in die Knie zu zwingen.
    Selber schreiben? Ich??? Heul!!!
    Wär schön wenn ich das könnte...

    Na gut mal sehen wie ich das hinbekommen kann. Selber eine Suchfunktion schreiben ist definitiv nicht drin.
    Also doch die Files splitten, aber wie stell ich das denn an, wenn alles in einem Rutsch vom CP kommt, dann muss ich es doch erst mal irgendwo ablegen, oder?

    Werd dann heut mal ein wenig mit einem Versuchsaufbau tüfteln..

    Was jetzt noch ein Problem darstellen könnte ist die Tastsache das ich nur <=1024 Byte empfangen kann. Wie siehts denn da mit einem Ethernet CP (CP343-1) aus?

    Was die SPS betrifft denke ich da muss ich einfach ausprobieren was geht. Natürlich ist da auch noch ne ganze Menge E/A - Verarbeitung dabei..


    Gruß smartie

  7. #17
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Hallo zusammen,

    ich hab mich jetzt mal an ne SPS gehängt und ein bisschen getüftelt.

    Was die Datenübertragung mit dem CP340 betrifft so trifft es zu das nur <=1024 Byte in einem Rutsch übertragen werden können.

    Aber laut Handbuch des CP340 müsste es so sein das, bei aktivierter Datenflusskontrolle XON/XOFF oder RTS/CTS, wenn der Puffer des CP340 voll ist dieser die Übertragung anhalten kann bis "die Daten von der SPS abgeholt wurden" (Zitat Handbuch).
    Die nicht gesendeten Daten müssten dann also zunächst im Ausgangspuffer der COM - Schnittstelle am PC bleiben.

    So verstehe ich das zumindest. Ist aber leider nicht so...
    Ich warte diesbezüglich noch auf einen Rückruf von Siemens.

    Desweiteren habe ich mich einwenig mit der Suchfuktion beschäftigt.

    Ich denke ich werde mit der SFC22 CREAT_DB einen neuen DB anlegen wenn ich neue Daten empfange. Wenn ich dann eine neue Seriennummer einlese dann kopiere ich alle mit SFC22 angelegten DB´s der Reihe nach mit SFC20 BLKMOV in einen "Search_DB" (in dem ich mehrere Strings angelegt habe welche ich dann der Reihe nach durchsuche) und durchsuche nur diesen einen DB.

    Jetzt bin ich am überlegen wie ich das Durchsuchen des einen DB am besten anstelle. In diesem DB will ich 8 Strings mit je 254 Zeichen anlegen.
    Diese Strings müsste ich der Reihe nach durchsuchen und dann bei negativem Ergebniss zum nächsten String wechseln und wenn ein DB durchsucht ist wird der nächste DB in den "SearchDB" übertragen.

    Wie könnte ich das wechseln von einem String zum nächsten realisieren. Ich denke da gerade an eine Schrittkette mit Merkern.
    Bestimmt geht das aber auch etwas eleganter, oder?

    Gruß smartie

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

    Standard

    Machs dir nicht zu schwer. Ich würde etwas anders vorgehen. Also den DB mit den getrennten Daten zu füllen ist ok, du kannst auch Strings nehmen. Ich würde nicht unbedingt DB erzeugen, sondern mir einen Pool an DB anlegen. Oder alles in einem DB, mit festen Grenzen pro "Datensatz". Beim Durchsuchen des DB würde ich aber evtl. auf die Strings pfeifen, also keine Stringfunktion nutzen und einfach mit den Daten arbeiten, wie sie im DB liegen.

    Vorschlag:
    Du hast einen Suchstring, das ist der 18-stellige Code. Nimm das 1. DWord daraus. Iteriere in Byteschritten durch den gesamten DB, und vergleiche das "Such-DWord" mit dem an der aktuellen Position stehenden DWord. Geht prima mit indirekter Adressierung, siehe hier im Forum. Bei Gleichheit, auch die jeweils nächsten Bytes vergleichen (Unterprogramm), bis du die 18 Stellen hast. Ist z.Bsp. die 10. Stelle anders, raus aus dem Unterprogramm, weiter mit dem Iterieren. Bei 1600 Byte Datenlänge brauchst du so ca. 1600 Schritte zu einem vollständigen Vergleich. Das kann man bei Bedarf auch leicht über mehrere Zyklen verteilen, indem man pro Zyklus immer nur 200 Byte iterriert.

    PS: Du mußt in diesem Fall die Daten eigentlich gar nicht als String ablegen und auftrennen, da du zum Suchen ja keine Stringfunktion nutzt. Am besten ginge das in SCL, wie schon gesagt, aber auch in AWL kein Problem.
    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

  9. #19
    smartie ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    14.07.2005
    Beiträge
    298
    Danke
    27
    Erhielt 18 Danke für 15 Beiträge

    Standard

    Hi Ralle,

    Iterieren?
    Hilfe, was soll das denn bitte bedeuten??

    Also was du mir im Prinzip sagen willst verstehe ich schon, nur die Herangehensweise ist mir noch unklar.
    Du meinst ich soll ein DW (zunächst das erste) aus meiner Seriennummer mit dem ersten Doppelwort aus meinem "VergleichsDB" vergleichen. Ist dieser Vergleich negativ soll ich das nächste Doppelwort aus dem "VergleichsDB" vergleichen.

    Wie stell ich das denn an?

    Indirekte Adressierung meinst du wäre das Stichwort. Werde da mal die Suchfunktion bemühen.

    Wo liegt da der Vorteil zu den Stringfunktionen?

    Das erzeugen der DB´s würde ich machen um nicht unnötig den Ladespeicher der CPU zu belasten. (CPU313C).

    Einen Pool an DB´s (ich denke da so an 8 Stück) wäre natürlich einfacher.


    Gruß smartie

  10. #20
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ohne Ralle etwas vorwegnehmen zu wollen :
    Iteration in deinem Fall bedeutet :
    du vergleichst aus einem Datenblock (1. String) das erste Byte (oder Doppelwort). Ist dieser vergleich mit der Vorgabe passend, dann nimmst du das nächste usw. Hast du irgendwann keine Übereinstimmung mehr, dann brichst du ab, ohne auch den Rest weiter zu prüfen - ist dann ja sinnlos ...
    Hierbei wäre ein ARRAY of BYTE (z.B.) einem String gegenüber von Vorteil.


    @Ralle:
    Du sollst nicht immer so mit Fremdwörtern imprägnieren ...

Ähnliche Themen

  1. Antworten: 11
    Letzter Beitrag: 27.04.2010, 19:13
  2. DB schnell durchsuchen
    Von Gerri im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 18.10.2009, 11:18
  3. Mehrere Datenbausteine automatisch löschen
    Von tommylik im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 27.07.2009, 00:01
  4. DB durchsuchen, FB vereinfachen
    Von martinmd2 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 11.02.2009, 13:34
  5. DB durchsuchen
    Von puehri im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 05.12.2005, 14:46

Lesezeichen

Berechtigungen

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