WinCC TIA V12 Professional - interne INT-Variable

DiGo1969

Level-2
Beiträge
137
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich habe ein Programm geschrieben für eine Schnittbildberechnung. Da ich die vielen Schleifen, Abfragen und Werteverschieben nicht in einem SPS-Zyklus abarbeiten kann (Zykluszeit) habe ich diese Berechnung über xx Zyklen aufgeteilt. Nun benötigt diese Berechnung ca. 15 Sekunden. Dies aber nur am Rande.
Die Wartezeit habe ich mit einem Bargraph visualisiert. Zusätzlich wollte ich aber ich aber noch solch einen Ladekreis (siehe Anhang) visuell darstellen. Einen Zähler in der SPS zu programmieren macht meiner Meinung nach keinen Sinn, da ich eine Abtastrate zwischen VISU und SPS von ca. 1 Sekunde habe. Dabei wird dieser Kreis zu stark ruckeln.
Mein neuer Gedanke war, man kann bestimmt eine interne Variable dafür nutzen. Von der SPS kommt ein Bit als Signal zum starten und der Kreis läuft. Leider habe ich keine Ahnung was ich in einen Script schreiben muss um eine Variable zu erhalten, welche in 250 MillisekundenTakt immer von 0 - 11 zählt und wieder bei 0 beginnt.

Vielen Dank für eure Hilfe schon im Voraus!

LG Dirk
 

Anhänge

  • Ladekreis.bmp
    147,1 KB · Aufrufe: 36
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
Ich bin der Meinung (ohne es getestet zu haben) in dem Bild wo ich diesen Kreis darstellen möchte muss ich ca. 2100 TAG aus der SPS lesen. Und weiterhin, bedingt durch mein eh schon überlastetes Netzwerk (durch Video-Übertragung) bekomme ich das nicht gleichmäßig hin.
Bei WinCC flexible kann ich jeder einzelnen Variable eine Abtastzeit (Zykluszeit) zuordnen. Bei WinCC TIA V12 geht das nur für das gesamte Bild und dann bekomme ich wieder die 2100 TAG als Problem.

Weiterhin war dann noch der Gedanke: „Ich kann mich ja auch mal mit was neuem beschäftigen…“ J

LG Dirk
 
Meines erachtesn kann man jede Variablen den Erfassungszyklus sperat einstellen,
es sei den die Variablen sind als Array deklariert.
Bei 2100 Variablen auf einen Bild, ist da wahrscheinlich einiges Schiefgelaufen bei
euch in der Ausarbeitung des Projektes.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meines erachtesn kann man jede Variablen den Erfassungszyklus sperat einstellen,
es sei den die Variablen sind als Array deklariert.
Ich habe das jetzt gefunden wo man das einstellen kann - war ein bisschen versteckt...
Danke!!!


Bei 2100 Variablen auf einen Bild, ist da wahrscheinlich einiges Schiefgelaufen bei
euch in der Ausarbeitung des Projektes.
Wie ich schon erwähnt habe sind das Schnittbilder, welche ich darstelle. Dazu habe ich 400 Linien, welche ich dynamisiert habe. Je Linie habe ich 5 Variablen (sichtbar, Position X, Position Y, Länge, Breite).



Aber allen vielen Dank. Ich werde doch den Weg gehen, das ich die Ladekreis über die SPS realisiere.

LG Dirk
 
Hallo,
habe das nun versucht über die SPS zu realisieren. Leider musste ich dabei feststellen, dass das ganze sehr stark ruckelt. So kann ich das einfach nicht lassen.:-(

Sollte es noch jamanden geben, der mir einen Ansatz geben kann, wie ich eine interne Variable anlege, welche ständig von 0-16 zählt in einem Takt von 100ms, würde ich das ganze noch mal darüber probieren.


MfG Dirk
 
Ich habe mal so etwas wie eine Progressbar gemacht, da habe ich einen Timer mit Scripten gebaut.
So richtig zufrieden bin ich damit nicht, ich verstehe auch die Siemens Leute nicht, das die ein solches
Element in WinCC nicht anbieten. Schön wäre auch ein interner Timer in WinCC den man in milisikunden
auswerten kann.

Na ja, vielleicht hilft es dir.

Progressbar.jpg

Script für das Pop-Up
Code:
'--- Variablen definieren ---------------------------------
Dim i, j, text


'--- Auftrag auswerten ------------------------------------
Select Case Auftrag
	'Runtime beenden
	Case 1 text = "wechsel zum Betriebssystem"
	'Rechner runterfahren
	Case 2 text = "der Rechner wird runtergefahren"
End Select

SmartTags("001\Pop_UP\Text_1") = text


'--- Auftrag melden --------------------------------------
'Meldung "warten Sie bitte einen Augenblick"
SmartTags("001\Pop_UP\Text_1") = "warten Sie bitte einen Augenblick"

For i = 1 To 7
	SmartTags("Prozessbar\Status") = i
	Delay 1	
	If SmartTags("Delay\loop_breacker") = True Then Exit For
Next

If SmartTags("Delay\loop_breacker") = True Then
	SmartTags("Delay\loop_breacker") = False
	Exit Sub
End If

'Meldung Auftrag
SmartTags("001\Pop_UP\Text_1") = text

For i = 8 To 20
	SmartTags("Prozessbar\Status") = i
	Delay 1	
	If SmartTags("Delay\loop_breacker") = True Then Exit For
Next

If SmartTags("Delay\loop_breacker") = True Then
	SmartTags("Delay\loop_breacker") = False
	Exit Sub
End If


'--- Auftrag ausführen ----------------------------------
Select Case Auftrag
	'Runtime beenden
	Case 1 StopRuntime hmiStopRuntime
	'Rechner runterfahren
	Case 2 StartProgram SmartTags("001\Beenden\Batch"), "", hmiShowNormal, hmiNo
End Select

Script für den Timer
Code:
'-------------------------------------------------------------------------
'Delay                                                            29.06.12
'
'Mit diesen Script wird eine Verzögerung für WinCCflexibel realisiert,
'Dazu wird eine Schleife ausgeführt, wo ein Zähler hochgezählt wird.
'Zusätzlich ist ein Loopbreacker über die Systemzeit und einer Globalen
'Variabel möglich. Die Zeit wird in 100ms Raster vorgegeben.
'
'V1.0 RN
'
'-------------------------------------------------------------------------

'--- Variablen Deklarieren --------------------------------
Dim StartTime, StopTime
Dim Zaehler, StopZaehler
Dim abgelaufen


'--- Variablen vorbesetzen --------------------------------
abgelaufen = False
Zaehler = 0
SmartTags("Delay\loop_breacker") = False


'--- Zaehler berechen -------------------------------------
StopZaehler	= DelayTime * SmartTags("Delay\ScriptZyklen")


'--- Watchdog berechnen -----------------------------------
DelayTime = Round((DelayTime/10)+0.5)
StartTime = Now
StopTime = StartTime + DelayTime / 24 / 3600


'--- Warteschleife ----------------------------------------
Do
	'Loopbreacker
	If SmartTags("Delay\loop_breacker") = True Then abgelaufen = True
	
	'Zaehler hochzählen
	Zaehler = Zaehler + 1
			
	'Kontrolle ob Zaehler abgelaufen
	If Zaehler >= StopZaehler Then abgelaufen = True
		
	
	'Kontrolle ob Watchdog abgelaufen	 
	If Now >= StopTime Then abgelaufen = True	
	
Loop Until abgelaufen = True
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sollte es noch jamanden geben, der mir einen Ansatz geben kann, wie ich eine interne Variable anlege, welche ständig von 0-16 zählt in einem Takt von 100ms, würde ich das ganze noch mal darüber probieren.
Mit der Systemfunktion "SimuliereVariable" kann man innerhalb der HMI ohne externe Hilfe eine Variable im 200ms-Raster hochzählen lassen und für Animationen nutzen. Die Systemfunktion "SimuliereVariable" kann man allerdings nur beim Bild-Ereignis "Aufgebaut" aufrufen. (Und man kann damit leider keine Ereignisse auslösen.)

Harald
 
Zurück
Oben