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

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

Thema: Probleme mit Skript

  1. #1
    Registriert seit
    23.10.2006
    Ort
    Bielefeld-Sennestadt
    Beiträge
    67
    Danke
    22
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forum!
    Ich habe ein Skript in WinCC flexible 2008 SP2 erstellt, um mir eine Datei auszulesen und die Werte in die SPS zu übernehmen. Es handelt sich um eine TXT-Datei in der unter anderem eine art Tabelle steht. Die Werte in der Tabelle sind durch ":" getrennt. In der Regel sind das weniger als 100 Zeilen. Das Skript funktioniert soweit auch, ABER wenn ich in der Tabelle mehr als 100 zeilen habe, werden nur 100 oder manchmal auch 102 Zeilen eingelesen. Habe das Skript und die Datei mal angehängt. Bin für jeden Tipp dankbar. Kann es auch einzeitliches Problem sein? Es dauert ungefähr 20 sek bis die Daten eingelesen sind. Das Skript hat mir Praktikant vor einigen Jahren mal geschrieben. Nochmals Danke dafür. Zu dieser Zeit hatten die Tabellen nie mehr als 100 Einträge. Wenn er das liest kann er sich vielleicht erinnern.
    Noch ein paar Randdaten:
    Runime auf PanelPC577B
    CPU 315-2 PN/DP
    Verbindung Ethernet
    Danke schon einmal

    81481BC0026.txtDatei einlesen.doc
    „Nicht mir Erfindungen, sondern mit Verbesserungen macht man Vermögen.”
    Zitieren Zitieren Probleme mit Skript  

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

    Standard

    Hallo,
    das Script sieht erstmal gar nicht so schlecht aus. Ich habe auch nichts entdecken können, was den von dir beschriebenen Effekt erklären würde ... aber : wie groß sind denn die Array's, in die du schreibst, dimensioniert ? Vielleicht liegt es ja da dran ...

    Gruß
    Larry

  3. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Neuling74 (02.05.2012)

  4. #3
    Registriert seit
    23.10.2006
    Ort
    Bielefeld-Sennestadt
    Beiträge
    67
    Danke
    22
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo Larry!
    Erstmal Danke für die Antwort. Hatte jetzt ein langes Wochenende und kann daher erst jetzt antworten . Also, die Arrays sind dimensioniert und zwar richtig. Die Arrays haben 200 Elemente. Daran hatte ich auch schon gedacht, aber das ist das Problem leider nicht. Sollte noch jemandem etwas einfallen, bitte posten. Danke!
    „Nicht mir Erfindungen, sondern mit Verbesserungen macht man Vermögen.”

  5. #4
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.622
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard

    Es gibt eine On Error Resume Next innerhalb von den DO WHILE Schleife, aber keine ERR Auswertung.
    Es bedeutet das wenn das Skript ein Problem hat, wird es einfach ignoriert und das Skript lauft weiter ohne Warnmeldungen.

    Plazier diese Code mindestens einmal in der DO WHILE Schleife:

    Code:
    If Err.Number <> 0 Then
     ShowSystemAlarm "Script Read Vars error" & Err.Number & " " & Err.Description
        Err.Clear 
        Exit Sub
    End If
    Mit ShowSystemAlarm hat man den Vorteil das die Warnungen in System Log archiviert werden, wenn man so etwas konfiguriert hat.
    Dann bekommst du hoffentlich Meldungen um warum das Skript nicht funktioniert.

    Zu den Problem: Vielleicht liegt es bei den maximalen Datenmenge das den CPU auf einmal transferieren kann. Bei ein S7-300 CPu liegt es bei ungf. 440 Bytes. Das entspricht 110 REALs.
    Wobei ich bin nicht 100% sicher das die Werte erst beim Skript-Ende übertragen werden, oder bei jeden Zeile wenn das Skript lauft.

    edit: Bei ARRAYs bin ich ziemlich sicher das den ganze ARRAY jeden mal komplett übertragen werden.

    noch ein edit: Die 20 Sekunden find ich verdächtig. 100 REALs sollte nicht so lange brauchen um von ein PC an ein 315-2PN CPU zu transferieren. Aber wenn es 100 mal 100 REALs, dann vielliecht ja.
    Es gibt vielleicht den Möglichkeit ein Zwischen-Speicher zu verwenden (irgendwie DIM TempArray() ... ), und dann beim Skript-Ende das Array nur einmal komplett übertragen (etwa wie SmartTags("Array Material.Material") = TempArray ...).
    Bin nicht 100% sicher das es geht, aber ist ein Versuch wert.
    Geändert von JesperMP (02.05.2012 um 10:06 Uhr)
    Jesper M. Pedersen

  6. Folgender Benutzer sagt Danke zu JesperMP für den nützlichen Beitrag:

    Neuling74 (02.05.2012)

  7. #5
    Registriert seit
    23.10.2006
    Ort
    Bielefeld-Sennestadt
    Beiträge
    67
    Danke
    22
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo Jesper!
    Vielen Dank erstmal für den Tipp mit der Fehlerauswertung. War nur leider zu beschäfftigt und konnte es nicht umgehend ändern. Du hattest Recht. Das Skript meldet eine Überlast bei den Array Variablen. Das ist natürlich sehr schade. Da ich von dem Kunden gerade einen TXT-File bekommen habe, in der es 192 Zeilen sind. Das funktioniert dann so nicht. Werde deine Idee mit dem Zwischenspeicher aufnehmen und es mal ändern. Allerdings weiß ich noch nicht genau wann ich das schaffe. Habe noch andere Kommunikationsprobleme, die ich gerade behebe. Wenigstens das klappt.
    Werde mich dann die Tage noch einmal melden und Bericht erstatten.
    Vielen Dank


    Ich noch einmal. Also meine Idee wäre jetzt einfach eine Warteschleife einzufügen. Da ich aber von VB nicht so wirklich Ahnung habe, fällt mir das sehr schwer. Wenn mir jemand sagen könnte, wo und wie ich da eine Warteschleife einfügen kann, wäre das klasse. müsste ja irgendwie vor den Loop Befehl. Ich stelle mir das wie folgt vor:
    1. Durchlauf (Werte werden in die jeweiligen Variablen geschrieben)
    Warte Zeit x
    2. Durchlauf
    usw.

    Ist das irgendwie machbar?
    Geändert von Neuling74 (03.05.2012 um 07:56 Uhr)
    „Nicht mir Erfindungen, sondern mit Verbesserungen macht man Vermögen.”

  8. #6
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.622
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard

    Das Problem ist also das ungf. maksimal 100 REALs übertragen werden kann.
    Ich glaube nicht das es helfen wird zu warten. Aber es wird helfen die Daten in mehrere Arrays bzw. Skript-Aufrufe aufzuteilen. Flexible sorgt in der Hintergrund für das die Daten gepuffert werden, und nach einander übertragen werden.
    Ich wurde es in mehrere Skripte so aufteilen:

    Verteiler-Skripts ruft mehrere Unter-Skripte auf.
    Unter-Skript 1: Lesen von Array1.
    Unter-Skript 2: Lesen von Array2.
    Usw.

    Array1: Nutzdaten[0..99]
    Array2: Nutzdaten[100..199]
    Usw.

    Keine Garantie das es funktionieren wird. Aber ein paar Versuche muss es aufklären können. Das Ergebnis wäre mir auch interessant.
    Jesper M. Pedersen

  9. Folgender Benutzer sagt Danke zu JesperMP für den nützlichen Beitrag:

    Neuling74 (03.05.2012)

  10. #7
    Registriert seit
    23.10.2006
    Ort
    Bielefeld-Sennestadt
    Beiträge
    67
    Danke
    22
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo Jesper!
    OK. Wenn ich das richtig verstehe soll ich die Daten iin eine interene Array-Variable schreiben, und diese dann in zwei sKripten an die SPS übertragen. Ist das so richtig?
    Zur Info:
    Es siind insgesamt maximal 1800 Real's. Ich habe 8 Arrays mit jeweils 200 Nutzdaten. Ich weiß, ist viel. Aber was will man machen.
    Geändert von Neuling74 (03.05.2012 um 09:31 Uhr)
    „Nicht mir Erfindungen, sondern mit Verbesserungen macht man Vermögen.”

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

    Standard

    Hallo,
    das Ergebnis davon würde mich auch auf jeden Fall interessieren.
    Ich muss dir allerdings sagen, dass ich schon bei weit geringeren Datenmengen (wenn ich die Datenquellen aufteile) Schwierigkeiten habe, die Konsistenz der Daten aufrecht zu erhalten. ich könnte mir also sehr gut vorstellen, dass du dich an dieser Stelle ggf. von Flex wegbewegen wirst müssen ...

    Gruß
    Larry

  12. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Neuling74 (03.05.2012)

  13. #9
    Registriert seit
    23.10.2006
    Ort
    Bielefeld-Sennestadt
    Beiträge
    67
    Danke
    22
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Hallo,
    das Ergebnis davon würde mich auch auf jeden Fall interessieren.
    Ich muss dir allerdings sagen, dass ich schon bei weit geringeren Datenmengen (wenn ich die Datenquellen aufteile) Schwierigkeiten habe, die Konsistenz der Daten aufrecht zu erhalten. ich könnte mir also sehr gut vorstellen, dass du dich an dieser Stelle ggf. von Flex wegbewegen wirst müssen ...
    Gruß
    Larry
    Das fände ich aber nicht so schön. Weil es nicht geht. Ich kann hier an der Anlage nicht das ganze System ändern.
    „Nicht mir Erfindungen, sondern mit Verbesserungen macht man Vermögen.”

  14. #10
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.622
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Neuling74 Beitrag anzeigen
    Wenn ich das richtig verstehe soll ich die Daten iin eine interene Array-Variable schreiben, und diese dann in zwei sKripten an die SPS übertragen. Ist das so richtig?
    Nein. Ich meine das je Skript will ich nur eine Array von 100 Reals addressieren. Und ich wurde den Verfahren mit ein Temp Array verwende.

    Zitat Zitat von Neuling74 Beitrag anzeigen
    Es siind insgesamt maximal 1800 Real's. Ich habe 8 Arrays mit jeweils 200 Nutzdaten.
    Um der Grenze von ungf. 400 Bytes einzuhalten, wurde ich es in 18 Arrays je 100 Reals umorganizieren.

    Aber ich bin einig mit LL, das es ist vielleicht zu viel für Flexible und VBS.
    Jesper M. Pedersen

Ähnliche Themen

  1. MP277 ProfibusAdresse mit Skript ändern
    Von Siox_Defender im Forum HMI
    Antworten: 0
    Letzter Beitrag: 23.02.2012, 12:51
  2. VB-Skript mit WinCC flexible 2007
    Von Earny im Forum HMI
    Antworten: 4
    Letzter Beitrag: 27.07.2008, 21:03
  3. Textfeld mit VB-Skript bearbeiten
    Von Earny im Forum HMI
    Antworten: 9
    Letzter Beitrag: 18.07.2008, 17:25
  4. Antworten: 7
    Letzter Beitrag: 18.09.2007, 14:01
  5. Antworten: 0
    Letzter Beitrag: 12.01.2007, 23:33

Lesezeichen

Berechtigungen

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