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

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

Thema: Skript: TP > Excel Übertragung zu Langsam o. TP hängt

  1. #1
    Registriert seit
    05.08.2009
    Beiträge
    69
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren

    Hardware:
    Speed 7 313 SC
    TP277
    Crossover Kabel
    PC
    Problem

    Mit Hilfe des Skripts unten, sollen Werte, die in einem DB (mit UDTs erstellt) stehen in eine Txt oder csv Datei geschrieben werden. Die Datenmenge ist groß. Es müssten ca. 720 (20 Schritte x36 Variablen) Variablen zu über 1KB übertragen werden. Die Verbindung zum PC steht und funktioniert.
    Das Übertragen und Schreiben von 5 Schritten(180 Variablen) im Skript funktioniert problemlos. Wenn ich aber die restlichen Schritte anhänge an das Skript, so dauert es unendlich und scheinbar hängt sich das Panel auf.

    Der Erfassungszyklus jeder Variable ist 100ms!

    Ich habe viel gegoogled, bisher , aber ich finde mir wirklich keinen Rat womit das zu tun haben kann.
    Wenn ich smarttags verwende das gleiche Schauspiel. Wie gesagt bis zum 5. Schritt wird alles übertragen, sobald ich dann den restlichen Code anhänge, hängt es sich auf.

    Was mache ich falsch? Es müsste aber doch möglich sein die 720 Variablen in eine csv Datei zu schreiben, oder?

    Skript:

    Path ist der PC Name – Verbindung ist aktiv

    '----------Objekt erstellen für Dateizugriff------------------------------------------------

    Set f = CreateObject("FileCtl.File")
    If Err.Number <> 0 Then
    ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
    Err.Clear
    Exit Sub
    End If

    '----------Datei erstellen. Öffnen der .txt oder .csv Datei--------------------------------

    f.open path , 2
    If Err.Number <> 0 Then
    ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
    Err.Clear
    Exit Sub
    End If

    '----------Daten schreiben in .txt oder .csv Datei----------------------------------------

    f.LinePrint("Stationsnummer:;"& ";")
    f.LinePrint(";")
    f.LinePrint("///Variablename///; "& "///Wert///;" & ";")

    f.LinePrint("///Schritt 1 ///")
    f.LinePrint("Var_1 :; " & Schritt_1_ Var_1 )'Typ: BOOL
    f.LinePrint("Var_2 :; " & Schritt_1_ Var_2)'Typ: BOOL
    f.LinePrint("Var_3 :; " & Schritt_1_ Var_3)'Typ: BOOL
    f.LinePrint("Var_4 :; " & Schritt_1_ Var_4)'Typ: BOOL
    f.LinePrint("Var_5:; " & Schritt_1_ Var_5)'Typ: INT
    ……
    f.LinePrint("Var_36 :; " & Schritt_1_Var_36)'Typ: DINT
    ….
    ….
    ….
    f.LinePrint("///Schritt 20 ///")
    f.LinePrint("Var_1 :; " & Schritt_20_ Var_1 )'Typ: BOOL
    f.LinePrint("Var_2 :; " & Schritt_20_ Var_2)'Typ: BOOL
    f.LinePrint("Var_3 :; " & Schritt_20_ Var_3)'Typ: BOOL
    f.LinePrint("Var_4 :; " & Schritt_20_ Var_4)'Typ: BOOL
    f.LinePrint("Var_5:; " & Schritt_20_ Var_5)'Typ: INT
    ……
    f.LinePrint("Var_36 :; " & Schritt_20_Var_36)'Typ: DINT
    Zitieren Zitieren Skript: TP > Excel Übertragung zu Langsam o. TP hängt  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo,
    dazu gleich noch ein paar Fragen :
    - schreibst du direkt in die Datei auf den PC ? - wenn ja, dann versuch doch mal die Datei auf dem TP erst lokal zu erzeuigen und dann per copy zu übertragen.
    - erhältst du irgendeine Meldung vom TP ?
    - was stösst auf dem TP dieses Script an ? - kann es sein, dass das Script (nochmal) gestartet wird während es in der ersten Instanz noch läuft ?

    Gruß
    LL

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

    Hocheck (22.10.2009)

  4. #3
    Registriert seit
    05.08.2009
    Beiträge
    69
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry,
    Danke für die schnelle Antwort...

    Zu deinen Fragen:

    - erhältst du irgendeine Meldung vom TP ?

    Nein ich bekomme keine Meldung vom TP- Ich denke sogar, dass es auch komplett übertragen werden könnte- Meine Vermutung ist, dass das Problem bei den verschiedenen Zykluszeiten liegt- Der DB aus dem ich Lade ist ziemlich groß-- ca 6 kB an Variablen... Kann es sein, dass das Skript dann im TP immer warten muss bis der Zyklus im DB wieder die Variable erreicht?! Oder liegt es gar einfach an meinem Crossover Kabel? Das ist nämlich !10 Meter! lang... Sollte aber doch egal sein, oder? Naja jedenfalls ist die Dauer einfach zu lange- Komisch ist wirklich dass es ab dem 6. Block der übertragen wird richtig lange dauert- bzw- es kein Abschluss gibt innerhalb von 5 Minuten...

    - was stösst auf dem TP dieses Script an ? - kann es sein, dass das Script (nochmal) gestartet wird während es in der ersten Instanz noch läuft ?

    Es ist eine "Speichern" Schaltfläche, die über Klicken das Skript auslöst. Im Skript habe ich mir dann noch eine Variable eingebaut, die diese Schaltfläche ausblendet sobald das Skript aktiv ist- daran sollte es also eigentlich nicht liegen....



    - schreibst du direkt in die Datei auf den PC ? - wenn ja, dann versuch doch mal die Datei auf dem TP erst lokal zu erzeuigen und dann per copy zu übertragen.

    Ja ich schreibe direkt in die Datei auf dem PC. An diese Sache habe ich noch garnicht gedacht- Müsste ich dann einfach anstelle des PC Paths einen Ordner auf dem flash speicher des Panels angeben?! Stimmt dann könnte man die komplette Datei einfach vom Panel auf den PC übertragen

    Meinst du das wäre schneller? Bzw. würde das bei der Datenmenge funktionieren?!


    Vielleicht hat noch irgendwer eine Hilfe parat, oder weis wirklich einen technischen Grund dafür- obwohl ich eher von einem Programmierfehler von mir ausgehe

    Wäre euch sehr dankbar!!

  5. #4
    Registriert seit
    11.04.2008
    Ort
    Bayern
    Beiträge
    523
    Danke
    26
    Erhielt 67 Danke für 67 Beiträge

    Standard

    Ich würde an verschieden Stellen im Script einer Internen Varibele in der Steuerung einer Nummer zuweisen. So wie eine Schrittnummer einer Schrittkette. Diese Variable dann als Ausgabe im Touch anzeigen. So siehst du genau an welcher Stelle sich das Script aufhängt oder stehen bleibt.

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

    Hocheck (22.10.2009)

  7. #5
    Registriert seit
    05.08.2009
    Beiträge
    69
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Netmaster, danke für deine Antwort!

    Hatte es vergessen zu erwähnen..
    Sowas habe ich auch schon gemacht- In so einer Art wie wenn WinCC Flexible ein Programm überträgt- Habe ein Fenster erstellt und dort 20 Rechtecke eingefügt. Ein Rechteck pro Variablen Block den ich laden möchte. Dann habe ich eine INT Variable erstellt und nach jedem durchgeführten Block erhöht das Programm den Wert und so habe ich den Lade Effekt....

    Das Problem ist einfach nur, dass das Skript manchmal nach 4 Balken aufhört (nach ca. 3 Minuten keine Bewegung), dann mal nach 5 Balken, auch mal nach 3 Balken.

    Das is ja grad des

  8. #6
    Registriert seit
    11.04.2008
    Ort
    Bayern
    Beiträge
    523
    Danke
    26
    Erhielt 67 Danke für 67 Beiträge

    Standard

    An der Größe des Datenbaustein wird es nicht liegen. Habe sowas ähnliches auch schon mal gemacht um den Inhalt von 5 Datenbausteinen komplett in eine txt Datei zu schreiben. Am Anfang am Panel immer eine Störmeldung mit Overflow gekommen. Erst als ich im Script die Daten von der CPU auf ein Internes Array im Touch kopiert habe und diese Daten dann weggeschrieben habe ging es.

  9. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Hallo,
    nachdem du die mir bekannten (Negativ-)Einflußfaktoren ausgeschlossen hast bleibt eigentlich nur noch der Fern-Zugriff übrig.
    Das deine Cross-Over-Leitung 10 m lang ist sollte kein Problem darstellen - das wäre höchst unlogisch.
    Was mich an der Sache stört ist, dass du nur immer bis zu einem bestimmten Punkt kommst - das sieht für mich so aus, als wenn ein Puffer voll wäre und gewartet wird bis dieser wieder entleert wird. Das wäre ein Indiez für die Übertragung. Mein Ansatz wäre hier tatsächlich die Datei zunächst lokal zu Erzeugen und zu übertragen wenn fertig. Probier das doch bitte mal aus.
    Am Bereitstellen der Variablen kann es nicht liegen, da die Variablen immer alle vorhanden sind. Hier kann es dir nur passieren, dass du beim Speichern derselben noch gar nicht der Wert darin hast, den du erwartest darin zu haben - die Variable wurde noch nicht aktualisiert ...

    Was du in deinem Script noch machen könntest wäre deine Datenzeile zunächst in eine lokale String-Variable des Scriptes zu schreiben und diese dann mit LinePrint zu schreiben ... also so :
    Code:
    oben im Script :
    DIM temp_String
     
    und dann beim Schreiben :
     
    temp_String = "Var_1 :; " &  Schritt_1_ Var_1
    f.LinePrint temp_String 
    Gruß
    LL

  10. #8
    Registriert seit
    05.08.2009
    Beiträge
    69
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    Larry richtig, das werde ich noch machen!

    Also habe nun einmal die Dateien am PC erhalten. Das hat ganze 9 Minuten gedauert!!!
    Die txt Datei ist dann gerade mal 18 kB groß- Dafür 9 Minuten?!

    Habe es nun wie netmaster erklärt hat probiert und einfach erst die Daten vom DB in ein Array am Panel geschrieben. Dann die Datei am PC geöffnet und dort die Variablen reingeschrieben- Habe es nun mal mit smarttags probiert (schneller?!) (Siehe skript unten).

    Sowohl das Laden in das !eine! Array (4min) als auch das schreiben in die txt Datei (5min) dauert in etwa gleich lange...

    Könnte es vielleicht doch an den vielen UDT's liegen die ich verwende!?

    Ich weis einfach nicht warum das so lange dauert

    Hatte auch schon probiert das Laden aus dem DB in das Panel über eine For schleife abzukürzen in dem ich die blauen Zahlen unten durch ein "& i &" ersetze, aber da überträgt es nur den Text und nicht die Variablen, sondern schreibt überall 0 oder false hin...

    Habe das auch schon probiert die Datei auf dem flash speicher anzulegen oder auf einem USB stick (\Storage Card USB\) Doch dann bekomme ich die Meldung "path or file not found"- Beim MP277 funktioniert es aber prima....


    '----------Objekt erstellen für Dateizugriff------------------------------------------------

    Set f = CreateObject("FileCtl.File")
    If Err.Number <> 0 Then
    ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
    Err.Clear
    Exit Sub
    End If


    '----------Aus DB in Panel laden--------------------------------------------
    Intern_Meldefenster_Speichern = True
    Intern_Status_Speichern = 1

    k = 1

    Daten(k) = SmartTags("OP.Station.Programm.Schrit[1].Vorw_INT.Var_1")
    k = k+1
    Daten(k) = SmartTags("OP.Station.Programm.Schritt[1].Vorw_INT.Var_2")
    k = k+1
    ...
    ...
    Daten(k) = SmartTags("OP.Station.Programm.Schritt[1].Vorw_INT.Var_36")
    k = k+1
    ...
    ...
    ...
    Daten(k) = SmartTags("OP.Station.Programm.Schritt[20].Vorw_INT.Var_1")
    k = k+1
    ...
    ...
    Daten(k) = SmartTags("OP.Station.Programm.Schritt[20].Vorw_INT.Var_36")
    k = k+1

    '----------Datei erstellen. Öffnen der .txt oder .csv Datei--------------------------------

    f.open path , 2
    If Err.Number <> 0 Then
    ShowSystemAlarm "Error #" & CStr(Err.Number) & " " & Err.Description
    Err.Clear
    Exit Sub
    End If

    '----------Daten schreiben in .txt oder .csv Datei----------------------------------------

    p = 1

    For z=1 To 20

    f.LinePrint("///Schritt "& z &" ///") '9

    f.LinePrint("Var_1 :; " & Daten(p))'Typ: BOOL
    p = p+1

    f.LinePrint("Var_2:; " & Daten(p) )'Typ: BOOL
    p = p+1
    ..
    ..

    f.LinePrint("Var_36 :; " & Daten(p))'Typ: BOOL
    p = p+1

    Next
    Geändert von Hocheck (23.10.2009 um 12:52 Uhr)

  11. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard

    Zitat Zitat von Hocheck Beitrag anzeigen
    Könnte es vielleicht doch an den vielen UDT's liegen die ich verwende!?
    Das kann ich mir nicht vorstellen.
    Ich muß dir allerdings gestehen, dass ich zwar sehr häufig ähnliche Dinge wie das was du da machst auch durchführe, diese aber immer auf einer PC-Runtime. Zu der Funktionalität auf einem TP kann ich also nicht wirklich etwas sagen. Für einen PC-Runtime wäre deine Aufgabenstellung kein Problem und auch nicht die Art, wie du es realisiert hast.

    Wie wäre es, wenn du (nur um in der Problematik weiterzukommen) einfach dein Script dahingehend abänderst, dass du 720 mal die gleiche Variable (oder sogar ggf. eine Konstante) abspeicherst und hierzu dann mal die benötigte Zeit feststellst ...?

    Gruß
    LL

  12. #10
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.624
    Danke
    377
    Erhielt 800 Danke für 642 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habe nicht alles gelesen, aber nur dies bemerkt:
    180 Variablen = OK.
    720 Variablen = Nix OK. ("mehr als 1kB")

    Also 1 Variabel beträgt 2 Bytes ?
    Dann ist 180 Variablen = 360 Bytes.
    So weit ich weiss gibt es ein einschränkung das bei S7-300 CPUs kann max 440 Bytes auf einmal übertragen werden. Irgendwie konnte das mit Dein Problem zu tun haben.

    Versuch 4 Skripte mit je 180 Variablen einzurichten.
    Und in jeder Skript muss ein bestätigung zurück zum SPS transferiert werden dass der Skript erfolgreich beendet wurde.
    Dann kann der SPS die 4 Skripte nacheinander anstossen.
    Jesper M. Pedersen

Ähnliche Themen

  1. Verzögerung bei Übertragung
    Von Woody88 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 11.06.2011, 21:05
  2. Step 5 startet langsam Bedienung langsam
    Von mitchih im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 04.01.2010, 10:26
  3. OP Übertragung
    Von MAJO im Forum HMI
    Antworten: 1
    Letzter Beitrag: 23.11.2009, 12:59
  4. Codesys Übertragung und Visualisierung sehr langsam
    Von Eddie123 im Forum Sonstige Steuerungen
    Antworten: 6
    Letzter Beitrag: 18.01.2007, 14:48
  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
  •