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

Ergebnis 1 bis 9 von 9

Thema: Script setzt variable zu früh

  1. #1
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo. folgendes Problem:

    Ein script im wincc flex liest eine csv datei aus, nach der schleife, welche die datei ausliest, wird eine variabe gesetzt.

    Diese kommt jedoch schon bevor alle datan in einen db geschrieben wurden. dies kann allerdings nach der reihenfolge des scriptes nicht sein.
    meine frag jetzt:

    Kann es sein, dass das script durchlaufen wurde, aber die befehle readline noch nicht fertig ausgeführt wurden?
    Zitieren Zitieren Script setzt variable zu früh  

  2. #2
    Registriert seit
    13.10.2007
    Beiträge
    12.033
    Danke
    2.788
    Erhielt 3.269 Danke für 2.157 Beiträge

    Standard

    ja das kann schon mal passieren, versuche doch mal eine Zeit nach den
    Start deines lesen einzubauen wie hier in diesen Thread http://www.sps-forum.de/showthread.php?t=34622
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  3. #3
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.241 Danke für 973 Beiträge

    Standard

    Mit sowas hab ich mich auch schon mal "vergnügt".
    Ich hab die Zählvariable der Schleife dann nicht als interne Variable deklariert, sondern als Datenwort in der Steuerung. Ist zwar langsamer, aber erfüllt bislang seinen Zweck zuverlässig.

    Gruß
    Dieter

  4. #4
    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,
    die Daten-Synchronisierung mit der SPS von Seiten der Visu erfolgt ziemlich willkürklich. Liest du mit einem Script einen variablenwert ein, so ist dieser ganz sicher irgendwann in der SPS - nur wann ...? Da ich mit dem Thema auch schon so meine Erfahrung machen durfte vielleicht folgende Anregung :

    Deine CSV-Variablen (ich nenn das mal so) haben z.B. eine Aktualisierungszeit von 1 Sek.
    Am Ende deines Scriptes baust du dir eine Warte-Schleife von 1,1 Sekunde ein und du setzt nach Ablauf dieser Zeit eine zusätzliche Variable, die die SPS veranlasst, nun die Daten als gelesen anzuerkennen. Damit kannst du die Chancen, dass die Daten konsistent in der Steuerung angekommen sind, stark erhöhen. Diese Trigger-Variable muß natürlich die gleiche Aktualisierungszeit wie die anderen Variablen haben.
    Eine weitere Verbesserung erzielst du, wenn du die Aktualisierung dieser Variablen zusätzlich auf "zyklisch fortlaufend" setzt.

    Viel Erfolg ...

    Gruß
    LL

  5. #5
    Bensen83 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    29.08.2009
    Beiträge
    776
    Danke
    25
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Also noch eine Anmerkung, der Fwehler taucht nicht imm er auf, nur manchmal:

    Also die werte brauchen ca. 20 sekunden länger als die schleife läuft, kann doch nicht sein, oder?
    Zitieren Zitieren Ok  

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

    Dazu nochmal :
    Um da etwas genaueres sagen zu können müßte ich wissen :
    - welche Visu ? (PC-Runtime oder MP)
    - wieviele max. aktive Powertags ? was hast du hier für eine Aktualisierungsrate ?
    - welcher Übertragungs-Bus zwischen CPU und Visu ?
    - wieviele CSV-Elemente willst du übertragen und wie werden die zur Zeit aktualisiert ?

    Das der Effekt nur manchmal auftritt entspricht genau meinen Erkenntnissen. Wie ich schon geschrieben habe erfolgt die Aktualisierung der Variablen zum Teil "nach Lust und Laune" - soll heißen, dass bei einer stark belasteten Kommunikation nicht immer alle Variablen "in Time" von und zur SPS aktualisiert werden - die kommen dann beim nächsten Mal dran. So kann es dann passieren, dass ein für dich zusammenhängender Block in vielen Teil-Abschnitten übertragen wird. Einzige mir bekannte Ausnahme hier :
    ARRAY's und Profilkurven werden von der SPS zusammenhängend abgeholt.

    Gruß
    LL

  7. #7
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.241 Danke für 973 Beiträge

    Standard

    Zitat Zitat von Bensen83 Beitrag anzeigen
    Also die werte brauchen ca. 20 sekunden länger als die schleife läuft, kann doch nicht sein, oder?
    Doch kann sein. Deckt sich mit meinen Erfahrungen. Du kannst die Aktualisierungsrate deiner Variablen heruntersetzen und versuchen deine CSV-Werte in einen einzelnen DB zu schreiben. Wenn du dann nicht jeden Wert einzeln schreibst, sondern mit Array arbeitest, dann geht es auch schneller.
    Also CSV einlesen und in ein internes Array schreiben. Dann das interne Array auf das "externe" Array kopieren.

    Gruß
    Dieter

  8. #8
    Registriert seit
    13.10.2007
    Beiträge
    12.033
    Danke
    2.788
    Erhielt 3.269 Danke für 2.157 Beiträge

    Standard

    vlt auch ein versuch wert, du ziehst deine Variablen in ein Rezept, dann
    nimmst du die Funktion Datensätze Exportieren bzw. Importieren. Hier
    bekommst du eine Rückmeldung die du dann auswertest. So ähnlich wie
    in den Beispiel.

    Code:
    Dim Status, Aktiv, OK , KO
    
    ExportDataRecords 1, 0, "\Storage Card MMC\record.csv", hmiOverwriteWithConfirmation, hmiOn, Status
    If Status = 2 Then
        Aktiv = True
        OK = False
        KO = False
    End If
    If Status = 4 Then
        Aktiv = False
        OK = True
        KO = False
    End If 
    If Status = 12 Then
        Aktiv = False
        OK = False
        KO = True
    End If
    
    ImportDataRecords "\Storage Card MMC\record.csv", 0, hmiOverwriteWithConfirmation, hmiOn, Status
    If Status = 2 Then
        Aktiv = True
        OK = False
        KO = False
    End If
    If Status = 4 Then
        Aktiv = False
        OK = True
        KO = False
    End If 
    If Status = 12 Then
        Aktiv = False
        OK = False
        KO = True
    End If
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  9. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Bensen83,

    so wie Helmut es schon angedeutet hat, bekommst Du das Problem des konsistenten Schreibens wohl nur mit
    Datensätzen/Rezepturen in den Griff. Allerdings hakt es nicht beim Lesen der csv-Datei (readline wartet
    tatsächlich, bis die Zeile aus der Datei gelesen wurde), sondern beim anschließenden Schreiben in die SPS.

    Für das konsistente Schreiben von Datensätzen mit Endemeldung gibt es in WCF die Systemfunktion
    SchreibeDatensatzvariablenInSteuerung (im Script: SetDataRecordTagsToPLC)
    Code:
    ' "DS_Schreibstatus" ist eine Panel-interne Variable (UInt)
    ' "SPS\neuer_Datensatz" ist die Fertigmeldung-Variable in der SPS (INT, BOOL)
    Dim csvReadOK, wrStat
    
    ' Daten aus csv-Datei in Rezepturvariablen lesen
    ' ...
    
    ' Rezepturvariablen in die SPS schreiben
    If csvReadOK Then
        SetDataRecordTagsToPLC "Rezepturname", SmartTags("DS_Schreibstatus") 'Datensatz in SPS schreiben
    
        Do 'in Schleife auf Ende DS-Schreiben warten, weil interne Variablen kein Ereignis "beiÄnderung" auslösen
            wrStat = SmartTags("DS_Schreibstatus")
        Loop While (wrStat And 4) = 0 ' 4=fertig OK / 12=abgebrochen mit Fehler
    
        If wrStat = 4 Then  'wenn Schreiben ohne Fehler, dann Fertigmeldung an SPS
            SmartTags("SPS\neuer_Datensatz") = 1
            'weitere Fertig-Aktionen
            '...
        End If
    End If
    Wenn Du die Variable "DS_Schreibstatus" in die SPS legst, dann musst Du nicht unbedingt im Script auf das Ende
    des Datensatz-Schreibens warten. (Wenn Du trotzdem wartest, dann dauert es mindestens 2 Sekunden.)
    Die SPS braucht dann keine gesonderte Fertigmeldungs-Variable, sie braucht nur "DS_Schreibstatus" überwachen.
    Sobald eine 4 darinsteht ist ein neuer Datensatz vom Panel angekommen. Dann den Datensatz an das/die eigentlichen
    Ziel(e) schreiben und "DS_Schreibstatus" auf 0 setzen.

    @Helmut
    Das ist ein Teil dessen, wie ich die Rezepturverwaltung abgelöst habe. Weil da noch viel mehr selbstgestricktes
    dazugehört, müßte ich erst ein überschaubares Beispielprojekt zusammenstellen. Deshalb habe ich Dir in dem anderen
    Tread (noch) nicht geantwortet.

    Gruß
    Harald
    Zitieren Zitieren konsistent Variablen in SPS schreiben mit Endemeldung  

  10. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    rostiger Nagel (30.03.2010)

Ähnliche Themen

  1. Benutzer mit SPS-Variable anmelden VB-Script
    Von PeterGötz im Forum HMI
    Antworten: 9
    Letzter Beitrag: 03.11.2011, 11:39
  2. Antworten: 3
    Letzter Beitrag: 21.09.2010, 11:54
  3. WinCC Script - Bildname in Variable
    Von Lars Bizare im Forum HMI
    Antworten: 3
    Letzter Beitrag: 27.08.2010, 17:33
  4. C-Script aus Index in Variable schreiben
    Von WendeMarkus im Forum HMI
    Antworten: 0
    Letzter Beitrag: 23.08.2010, 05:34
  5. SPS Variable im Script verwenden
    Von Hofi im Forum HMI
    Antworten: 5
    Letzter Beitrag: 16.01.2009, 09:55

Lesezeichen

Berechtigungen

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