TIA Wartezeit in Script TIA V13

emilio20

Level-1
Beiträge
835
Reaktionspunkte
20
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
ich möchte in wicc Tia V13 PC Station mit einen Script mehrere Datensatznamen einlesnen und diesen auf einen Button als Name ablegen.
Ich erhalte immer den Fehler "Datensatzbearbeitung nicht möglich da bereits ein Rezepturaktion läuft"
Wenn ich mit einem Button die Funktion LesenDatensatzname beim Drücken ausführe Funktioniert es.

Es liegt an der Bearbeitungszeit des Scriptes (zu schnell). Füge ich nach jedem Lesen eine For Schleife ein Funktioniert es auch.

Gibt es eine Sleep oder delay Funktion ?

Code:
Sub HUE_Scene_Name()
Dim i,i2

' Datensatzname Einlesen




GetDataRecordName 2, SmartTags("HUE_SCEN_Butt_1"), "Rezeptname_1", "HUE_SCEN_TEXT_1", Null
For i2 = 1 To 1000000
    
       Next

GetDataRecordName 2, SmartTags("HUE_SCEN_Butt_2"), "Rezeptname_2", "HUE_SCEN_TEXT_2", Null
For i2 = 1 To 1000000
    
       Next

GetDataRecordName 2, SmartTags("HUE_SCEN_Butt_3"), "Rezeptname_3", "HUE_SCEN_TEXT_3", Null
For i2 = 1 To 1000000
    
       Next

GetDataRecordName 2, SmartTags("HUE_SCEN_Butt_4"), "Rezeptname_4", "HUE_SCEN_TEXT_4", Null
For i2 = 1 To 1000000
    
       Next

GetDataRecordName 2, SmartTags("HUE_SCEN_Butt_5"), "Rezeptname_5", "HUE_SCEN_TEXT_5", Null
For i2 = 1 To 1000000
    
       Next

GetDataRecordName 2, SmartTags("HUE_SCEN_Butt_6"), "Rezeptname_6", "HUE_SCEN_TEXT_6", Null





End Sub
 
Hallo
habe was gefunden

http://support.automation.siemens.c...objaction=csview&extranet=standard&viewreg=WW

Allerdings schaffeich es nicht 50 ms zu warten.
Es benötigt immer 1 sec

DelayTime(50)

Code:
Sub Delay(ByRef DelayTime)


Dim LastTime, StopTime, i

    DelayTime=DelayTime/1000
    
    StopTime= Now+DelayTime/24/3600
   
    ShowSystemAlarm "Script will be waiting for " & DelayTime & " seconds."
    Do
        If Now>LastTime + 0.1/24/3600 Then
            i = i+1
            ShowSystemAlarm "Script is waiting " & Left("....", (i Mod 4) +1)
            LastTime= Now
        End If
    Loop Until Now>=StopTime

    ShowSystemAlarm "Script resumes working."



End Sub
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo emilio,

zuvor eine Frage: Du liest bzw. durchsuchst aber schon das Forum, bevor du eine Frage postest ;)
Diese Problematik wird nämlich gerade in ähnlicher Form behandelt...


Zur Frage:
Verwende Timer statt Now, dieser löst in Millsekunden auf.

In deinem Fall solltest du aber mal den Rückgabewert der Systemfunktion näher betrachten, damit und mit einer While-Wend-Schleife kann man das ganz ohne Pause lösen.


Gruß, Fred
 
Hallo Fred

erst mal vielen Dank für deine Hilfe, habe es hin bekommen. :TOOL:
Ps. ich lese nicht jeden Beitrag und unter Delay oder Wartezeit habe ich den Beitrag auf anhib nicht gefunden.
 
In deinem Fall solltest du aber mal den Rückgabewert der Systemfunktion näher betrachten, damit und mit einer While-Wend-Schleife kann man das ganz ohne Pause lösen.

... das wäre bei so etwas auch mein Ansatz. Die meißten dieser Funktionen wissen nämlich selbst schon recht gut, wann sie fertig sind.
Das mit dem Timer ist (zumindestens an dieser Stelle) m.E. eher fragwürdig denn wenn der Rechner der Visu mal etwas mehr zu tun hat kann das hand-programmierte Delay dann vielleicht nicht mehr ausreichend sein.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo
ich habe es jetzt so gemacht das ich Warte bis die Funktion fertig ist. Es kommt aber immer noch sporatisch zu dem Fehler

"Datensatzbearbeitung nicht möglich da bereits ein Rezepturaktion läuft"

Jetzt musste ich trotzdem die wartezeit mit einfügen. So geht es jetzt erst mal.

Code:
Sub HUE_Scene_Name()
Dim Wait
Dim i

'Wartezeit bis zum nächsten aufruf
Wait=20


Status=0
GetDataRecordName 2, SmartTags("HUE_SCEN_Butt_1"), "Rezeptname_1", "HUE_SCEN_TEXT_1","Status"    

Do
                Status = SmartTags("Status")
                'If Status = 12 Then Exit Sub
Loop While(Status And 4) = 0

Delay(Wait)

Status=0
GetDataRecordName 2, SmartTags("HUE_SCEN_Butt_2"), "Rezeptname_1", "HUE_SCEN_TEXT_2", "Status"
Do
                Status = SmartTags("Status")
                'If Status = 12 Then Exit Sub
Loop While(Status And 4) = 0

Delay(Wait)

Status=0
GetDataRecordName 2, SmartTags("HUE_SCEN_Butt_3"), "Rezeptname_1", "HUE_SCEN_TEXT_3", "Status"
Do
                Status = SmartTags("Status")
               ' If Status = 12 Then Exit Sub
Loop While(Status And 4) = 0

Delay(Wait)

Status=0
GetDataRecordName 2, SmartTags("HUE_SCEN_Butt_4"), "Rezeptname_1", "HUE_SCEN_TEXT_4", "Status"
Do
                Status = SmartTags("Status")
                'If Status = 12 Then Exit Sub
Loop While(Status And 4) = 0

Delay(Wait)

Status=0
GetDataRecordName 2, SmartTags("HUE_SCEN_Butt_5"), "Rezeptname_1", "HUE_SCEN_TEXT_5", "Status"
Do
                Status = SmartTags("Status")
               ' If Status = 12 Then Exit Sub
Loop While(Status And 4) = 0

Delay(Wait)

Status=0
GetDataRecordName 2, SmartTags("HUE_SCEN_Butt_6"), "Rezeptname_1", "HUE_SCEN_TEXT_6", "Status"
Do
                Status = SmartTags("Status")
                'If Status = 12 Then Exit Sub
Loop While(Status And 4) = 0




End Sub
 
Hallo emilio,

zwei NoGoes:
1. Status = SmartTags("Status") -> Verwende niemals eine lokale und eine globale Variable mit gleichem Namen!
Wobei ich mich frage, warum du diese Zuweisung überhaupt implementiert hast.
2. Do ... Loop While (Status AND 4) -> Warum willst du hier das 3. Bit von Status ausmaskieren? Vergleiche doch einfach "Status = 4".

Folgender Code funktioniert bei mir seit Jahren fehlerfrei:

GetDataRecordName ..., ..., ..., ..., "fctStatus"
While SmartTags("fctStatus") = 2 : Wend
GetDataRecordName ...
usw.

Gruß, Fred
 
Zurück
Oben