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

Seite 3 von 5 ErsteErste 12345 LetzteLetzte
Ergebnis 21 bis 30 von 45

Thema: Auswertung Array of Char

  1. #21
    Matze001 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.12.2009
    Beiträge
    2.115
    Danke
    388
    Erhielt 390 Danke für 271 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Damit habe ich wieder ein

    FOR i:=280 TO 4000 DO

    END_FOR;

    Das ist dann wieder wie bei 200 die Handbremse ziehen. Vor allem da ich den Datenmüll zwischen den Variablen (Teilweise 300 Zeichen) mit durchleuchte, obwohl ich sie einfach ignorieren könnte).

    Grüße

    Marcel

    EDIT: Hat meine Tippserei doch tatsächlich eine 0 gefressen
    Geändert von Matze001 (10.06.2013 um 06:52 Uhr)

  2. #22
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Irgendwie fällt mir gerade das Sprichwort ein:

    Wasch mich aber mach mich nicht nass!

  3. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    PN/DP (09.06.2013)

  4. #23
    Matze001 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.12.2009
    Beiträge
    2.115
    Danke
    388
    Erhielt 390 Danke für 271 Beiträge

    Standard

    Nein, das verstehst du Falsch!

    ich will mir ja helfen lassen, aber den Vorschlag mit "alles durchsuchen" war mein erster Schritt, und führt nur zu einem:

    CPU Stop wegen Zykluszeitüberschreitung.

    Die Vorschläge sind ja alles soweit ok, und bei kleineren Bereichen sicher sinnvoll (wenn es nur 200 Zeichen wären, würde ich mir jetzt keinen Kopf machen)... aber halt hier nicht Zielführend.

    Grüße

    Marcel

  5. #24
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von Matze001 Beitrag anzeigen
    Vor allem da ich den Datenmüll zwischen den Variablen (Teilweise 30 Zeichen) mit durchleuchte, obwohl ich sie einfach ignorieren könnte).
    Deine SPS ist aber kein Mensch der aufgrund Erfahrung den Datenmüll sofort sieht - bzw. Du als Mensch machst es doch genauso: Du überfliegst den Datenmülltext Zeichen für Zeichen bis Du etwas bekanntes (vereinbartes) findest.

    Wenn Dir der enthaltene Datenmüll nicht gefällt, dann vereinbare mit dem Datensender ein anderes Datentelegramm mit festem Aufbau und fester Anzahl an Dezimalziffern.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #25
    Matze001 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.12.2009
    Beiträge
    2.115
    Danke
    388
    Erhielt 390 Danke für 271 Beiträge

    Standard

    Nochmal zusammengefasst bzw. nochmal nachgeguckt:

    Ich Empfange ca. 4000 CHAR. Davon verwerten tue ich ca. 160. Der Rest ist "Müll" der mich nicht interessiert.
    Die Reihenfolge ist immer:

    Header, Variable1, Müll, Variable2, Müll, Variable3, Müll, VariableN, ENDE;

    Ich weis wo ungefähr meine Variablen liegen, und dort suche ich nach ihnen. Somit muss ich nur 160 Schleifendurchläufe machen, statt 4000! Deshalb muss ich mir den Müll gar nicht erst angucken! (Ich habe als Mensch für die Maschine bereits vorselektiert).

    Somit behaupte ich, dass an diesem Punkt vermutlich keine oder nur eine geringe Optimierung möglich ist, und meiner Meinung nach das durchsuchen der gesamten Daten nicht das Ziel ist.

    Die anderen Vorschläge die hier genannt wurden (z.B. Die verschachtelten IF-Abfragen sowie das Rechnen statt String-Wandeln) werde ich umsetzen, denn die sind definitiv gut!

    Grüße

    Marcel

    P.S: Nicht falsch verstehen, ich habe nix gegen Vorschläge und Ideen, aber die habe ich schon durch, und glaubt mir wenn ich sage, dass ich noch NIE so oft nen STOP->RUN Übergang hatte wie bei dieser CPU.

    P.P.S: Mein Partner ist eine Serienmaschine -> Friss oder Stirb!

  7. #26
    Registriert seit
    13.10.2007
    Beiträge
    12.036
    Danke
    2.789
    Erhielt 3.269 Danke für 2.157 Beiträge

    Standard

    Ähm Marcel, ist es bei deine Anwendung wirklich erforderlich das du deine Daten
    Zyklisch verarbeitest. Oder könntest du es nicht auch einfach auf mehrere SPS Zyklen
    verteilen?

    Anders gefragt, brauchst du wirklich, sagen wir mal alle 1-5 sec. die Daten, hat
    deine Anwendung solche Taktzyklen?
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  8. #27
    Matze001 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    11.12.2009
    Beiträge
    2.115
    Danke
    388
    Erhielt 390 Danke für 271 Beiträge

    Standard

    Hättest du den Beitrag komplett gelesen wüsstest du, dass ich mit dem Gedanken spiele die Auswertung auf mehrere Zyklen zu legen!

    Taktzeit: Einige Signale sind zyklisch nicht wichtig. Auf 3-4 kommt es aber an. Die hätte ich gern so schnell wie möglich mitbekommen.

    Grüße

    Marcel

  9. #28
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Marcel, eins schnapp ich nicht: wenn ich mal großzügig 30 Byte pro Variable für "Name=123.456," annehme und das mal 20 Variablen, dann komme ich auf 600 Byte. Die ersten 280 Byte des Telegramms werden übersprungen. Bleiben trotzdem noch über 3000 Byte Müll - wo hast Du die vor uns versteckt? Bei Deinen Beispielen sind immer nur ein paar bis vielleicht 10 Bytes Müll zwischen den Variablen - dann sollte doch nach Ansehen von 800 aufeinanderfolgenden Bytes alles erledigt sein?

    Auch daß Du tatsächlich nur 160 Byte verwerten willst, tsts - das können ja fast nur netto die Ziffern der Werte ohne Variablenname sein, die Du aber erstmal finden mußt bei zugegeben größer werdendem Suchfenster. Alleine die Suchfenster enthalten ja zusammen schon vielleicht 400 Bytes. Die 'zig Byte der Variablennamen willst Du wohl gar nicht mehr lesen? (ist ja eigentlich auch nicht nötig, man muß ja nur das '=' finden) Ich kann mir Dein Datentelegramm nicht so richtig vorstellen. Vor allem "sehe" ich keine Such-Abkürzungen. Wie sieht denn der "Müll" zwischen den Werten aus?

    Sind vielleicht die Anzahl Bytes nach der letzten Dezimalziffer eines Wertes bis zum Beginn des nächsten Wertes konstant (die Länge des Müll-/Fülltextes)? Dann könnte man nach dem Einlesen eines Wertes die Startposition des nächsten Wertes berechnen statt suchen. Gibt es alternativ garantierte Mindestlängen des Fülltextes zum nächsten Wert? Dann würden Deine Suchfenster vielleicht nicht größer werden und Du könntest immer relativ die selbe Anzahl Zeichen überspringen.

    Wie es momentan für mich aussieht, wirst Du wohl doch nicht ganz ohne Suchen auskommen. Du solltest aber alles versuchen um jeweils möglichst nahe an den Beginn des nächsten Wertes zu springen. Ab da halt immer nur 1 Zeichen prüfen um den Vergleich bei nicht-Übereinstimmung vorzeitig abzubrechen. Und ab der ersten Ziffer dann die Ziffern nicht zu einem String zusammfügen sondern auf Ziffer prüfen und sofort konvertieren in einem fortlaufenden Algorithmus.

    Das reine Konvertieren von 20 Werten kann nicht lange dauern. Das Finden der Werte muß natürlich optimiert werden. Ich kann mir irgendwie nicht vorstellen, daß das indirekt adressierte Ansehen und Auswerten von 600 Bytes auf einer aktuellen IM151-8F PN/DP 21ms verschlingen muß. Ich würde mir auch mal das Kompilat des SCL-Compilers ansehen, ob ich ihm etwas unter die Arme greifen muß um effizienten Code zu erzeugen. Sehr wahrscheinlich würde ich den Code bei Geschwindigkeitsproblemen aber in AWL schreiben. Da es ein CHAR-Array ist, wird die Adress-Rechnerei auch nicht besonders undurchsichtig aussehen. Außerdem kann ich in AWL notfalls auch mehrere Zeichen gleichzeitig anfassen.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #29
    Registriert seit
    29.04.2012
    Beiträge
    195
    Danke
    13
    Erhielt 42 Danke für 37 Beiträge

    Standard

    Das reine Konvertieren von 20 Werten kann nicht lange dauern.
    Sicher?
    Ich weiß ja nicht was der Concat da macht aber 20*6 / 20*12 sind auch 120/240 Aufrufe.

    Zu den verschachtelten IFs:
    Man würde erwarten, dass nach der ersten 0 die restlichen Ausdrücke nicht mehr ausgewertet werden.
    Oder ist das zuviel verlangt?

  11. #30
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Pipboy Beitrag anzeigen
    Das reine Konvertieren von 20 Werten kann nicht lange dauern.
    Sicher?
    Ich weiß ja nicht was der Concat da macht aber 20*6 / 20*12 sind auch 120/240 Aufrufe.
    CONCAT darf man natürlich nicht benutzen wenn es schnell sein soll. Ich meinte mit eigenem direkten Konvertieren von CHAR zu DINT/REAL ohne STRING-Umweg.

    Zu den verschachtelten IFs:
    Man würde erwarten, dass nach der ersten 0 die restlichen Ausdrücke nicht mehr ausgewertet werden.
    Oder ist das zuviel verlangt?
    Ein C-Compiler würde das optimieren, doch der Siemens-SCL-Compiler? Das müßte man eben ausprobieren.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 31.08.2012, 08:55
  2. S7-1200-Array of Char in string
    Von Diplomand11 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 21.01.2011, 08:44
  3. Integer in Char Array wandeln ?
    Von Power_Pete im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 28.01.2010, 15:26
  4. Array of Char umwandeln?
    Von thomzur im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 25.02.2008, 17:06
  5. Array mit Char an FC übergeben?
    Von Ingo im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.12.2007, 16:07

Lesezeichen

Berechtigungen

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