WinCC 7.3 Suchfeld für Wörter einbinden

avenger

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo miteinander,

ich suche eine bestimmte Funktion für WinCC 7.3 und bin nichtmal sicher, ob diese überhaupt existiert.

Ich möchte eine Suchfunktion einfügen, über diese ich dann einen Begriff suchen kann, der auf irgendeinem der übrigen Seiten im Projekt als statischer Text steht.
Ich gebe zum Beispiel "Maschine1" ein und es springt auf die Seite mit dem Begriff "Maschine1". Bestenfalls ist dieser Begriff dann noch markiert. Bei mehreren Ergebnissen kann man dann auf "Weiter" klicken um zum nächsten zu gelangen.

Im Prinzip so wie die normale Suche in jedem Windowsprogramm.

Wäre schön, wenn mir da jemand weiterhelfen könnte.

Danke und Gruß
 
Also etwa was fertiges gibt es da nicht, sollte sich aber mit mehr oder weniger Aufwand selber programmieren lassen.

1) Über ein C- oder VB-Skript kannst du in der Runtime alle Bildobjekte durchgehen. Allerdings immer nur für das aktive Bild. Alternativ könntest du alle Bilder nacheinander in ein unsichtbares Bildfenster laden, um dort auf die Objekte zuzugreifen. Dauert bei vielen Bildern aber entsprechend lange.

2) Über den Graphics Designer die Texte exportieren. Die Exportdatei enthält alle Texte, in welchen Bildern und an welchen Bildobjekten diese vorhanden sind. Diese Liste müsste dann nach jeder Projektierungsänderung erneuert werden. Diese Datei kannst du dann über C/VB einlesen und entsprechend verarbeiten. Wenn du den Bild- und Objektnamen hast, kannst du mit diesen Informationen bei Bedarf das Bild aufrufen, und das Bildobjekt in gewünschter Art und Weise modifizieren (Rahmenfarbe ändern o.Ä).

3) Das WinCC ODK kaufen und eine eigene Anwendung schreiben
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Falls ich dich bzw. deine Anforderung richtig verstanden habe gibt es sowas in PCS7. Sollte sich also evtl. in "normales" WinCC umsetzen lassen, falls es das nicht sogar dort auch gibt.
In PCS7 gibt es die Funktion "Bildanwahl über Messstelle" ... dort kann man im Suchfeld die gewünschte Messstelle eingeben und landet auf dem gewünschten Bild. Dort sollte dann je nach Auswahl der Typicals bzw. Bibliothek die gewählte Messstelle markiert sein ... so wie bei der "Loop in Alarm" - Funktion.
 
Hallo, danke schonmal für die Antworten.

Diese Version gefällt mir momentan am besten:

2) Über den Graphics Designer die Texte exportieren. Die Exportdatei enthält alle Texte, in welchen Bildern und an welchen Bildobjekten diese vorhanden sind. Diese Liste müsste dann nach jeder Projektierungsänderung erneuert werden. Diese Datei kannst du dann über C/VB einlesen und entsprechend verarbeiten. Wenn du den Bild- und Objektnamen hast, kannst du mit diesen Informationen bei Bedarf das Bild aufrufen, und das Bildobjekt in gewünschter Art und Weise modifizieren (Rahmenfarbe ändern o.Ä).

Ich habe die txt-Datei erstellen können. Leider komme ich jetzt nicht weiter...

txtdatei_exportiert.jpg

Ich möchte in ein E/A-Feld den Begriff BFPV01MP1204 eingeben. Über einen Button soll dann die txt-Datei nach dem Begriff durchsucht werden. Dann soll das Bild: Seite_3.pdl geöffnet werden. Außerdem von: Statischer Text9 die Hintergrundfarbe umschalten.

Kann mir da jemand bei helfen? Habe leider keine großen Kentnisse von C- oder VBS-Script um das komplett neu zu erstellen.

Grüße
 
Das sollte mit einer sehr langen Case Select Abfrage gehen.

Du gibst den Suchstring in eine Stringvariable, z.B. isSuchstring genannt, ein.
Dann lässt du das Skript laufen.

Dieses könnte in VB in etwa so aussehen:


Case Select isSuchstring

Case "BFPV01MP1204"
ActivateScreen("Seite_3")
Case "Doppellesung"
ActivateScreen("Seite_3")
Case "Blabla"
ActivateScreen("Seite_4")
End Select

Falls ein und der Selbe Text auf mehreren Seiten vorhanden ist, könnte dort anstatt ActivateScreen eine If Abfrage stehen die dir die Möglichkeit gibt zwischen Seiten zu wählen.
Wie genau das geht, kann ich jetzt nicht aus dem Kopf aufschreiben, aber in etwa so sollte das möglich sein:
Du könntest ein Auswahlfenster als Bildobjekt erstellen, das dir 5 oder 6 Variablen anzeigt.
Über die Case Anweisung kannst du anstatt Activate Screen jeder der Variablen einen Wert zuweisen und dann anzeigen.

Case "Doppellesung"
n = 0
Var 1 ="Seite3"
Var 2 ="Seite4"
Var 3 ="Seite9"
'Öffne das Bildobjekt das dann die Variablen anzeigt und dir die Variable n nach einem Klick zurückgibt.
Do While n = 0

End While
'Schließe das Bildobjekt
If n = 1 then
ActivateScreen"Seite3"
Elsif n = 2 then
ActivateScreen"Seite4"
Elsif n = 3 then
ActivateScreen"Seite9"
End If
Case "Blabla"
.
.
.
.
.
End Select

Die Do While Schleife dient dazu dass das Skript wartet bis du eine EIngabe gemacht hast.
Ich bin mir nicht sicher ob das in jedem WinCC so funktioniert, aber in flexible habe ich sowas ähnliches zur Zeitverzögerung schonmal programmiert.
Dazu gibt es aber sicherlich auch eine Online Hilfe

Nachteilig ist, dass das Skript fest ist, also die Liste die du exportiert hast nicht einliest und somit bei jeder Änderung ebenfalls neu angepasst werden muss.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe grad' mal etwas probiert wie man das umsetzen könnte.

Über den Text Distributor alle Texte aus dem Baum "Graphics Designer" exportieren. Als Format ".csv" auswählen.
Die Datei liegt dann im Projektverzeichnis im Unterverzeichnis \TXTDIST \Projektname_GraphicsDesigner.csv

In ein Bild zwei Listenfelder einfügen, mit Namen:
1) ListenfeldTexte
2) ListenfeldTexteGefiltern

Eine interne String Variable suchtext anlegen.
In das Bild ein EA-Feld das mit dieser Variable verknüpft ist einfügen.

Bei Bildaufruf (oder per Button) folgendes VB-Skript aufrufen, welches das Gesamt-Listenfeld mit allen Texten füllt.
Es werden dabei nur die Objekte beachtet, die auch die Eigenschaft "Text" aufweisen:
Code:
Dim fso
Dim oFile, oListenfeld
Dim i, pos1, pos2
Dim zeile
Dim werte
Dim bildname, objektname, eigenschaft, text, dateiname_texte

' Der Export vom Text-Distributor liegt normalerweilse im Projektverzeichnis im Ordner TXTDIST
' Werden alle Texte des GraphicsDesigner als csv exportiert, heißt die Datei wie das WinCC-Projekt
' plus _GraphicsDesigner.csv
dateiname_texte = HMIRuntime.ActiveProject.Path & "\TXTDIST\" & HMIRuntime.ActiveProject.Name & "_GraphicsDesigner.csv"

Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.OpenTextFile(dateiname_texte, 1, 0, -1) ' -1 = als Unicode öffnen
Set oListenfeld = ScreenItems("ListenfeldTexte")
i = 1
Do Until oFile.AtEndOfStream
	zeile = oFile.Readline
	pos1 = InStr(1, zeile, "<")
	If pos1 = 1 Then
		' Bildname
		pos2 = InStr(1, zeile, ">")
		bildname = Mid(zeile, 2, pos2-pos1-1)
	Else
		werte = Split(zeile, ";")
		If  UBound(werte) > 9 Then
			objektname =  werte(0)
			eigenschaft = werte(1)
			text = werte(8)
			' Nur Texte die als Eigenschaft "Text" besitzen auswerten. Diese sind an den Objekten "Statischer Text" oder Button
			' Wenn kein text vorhanden, nicht mit aufnehme
			If (eigenschaft = "Text" And Len(text) > 0) Then
				oListenfeld.NumberLines = i
				oListenfeld.Index = i
				oListenfeld.Text = text & " (" & bildname & "/" & objektname & ")"
				i = i + 1
			End If
		End If		
	End If	
Loop


Dann als Ereignis "Eingabewert Änderung" an das EA-Feld mit dem Suchtext folgendes Skript:
Code:
Dim oListenfeld
Dim oListenfeldGefiltert
Dim i, j, pos
Dim suchtext

Set oListenfeld = ScreenItems("ListenfeldTexte")
Set oListenfeldGefiltert = ScreenItems("ListenfeldTexteGefiltert")

suchtext = value
j = 0
oListenfeldGefiltert.NumberLines = j
For i = 1 To oListenfeld.NumberLines
	oListenfeld.Index = i
	pos = InStr(oListenfeld.Text, suchtext)
	If pos > 0 Then
		j = j + 1
		oListenfeldGefiltert.NumberLines = j
		oListenfeldGefiltert.Index = j
		oListenfeldGefiltert.Text = oListenfeld.Text
	End If
Next

Und an das ListenfeldGefiltert an das Ereignis Mausklick:
Code:
Dim oListenfeld
Dim oBildObjekt
Dim zeile
Dim bildname, objektname
Dim text
Dim pos1, pos2
Dim werte

Set oListenfeld = ScreenItems("ListenfeldTexteGefiltert")

zeile = oListenfeld.SelText
pos1 = InStrRev(zeile, "(") + 1
pos2 = InStrRev(zeile, ")")
werte = Split(Mid(zeile, pos1, pos2 - pos1), "/")
bildname = werte(0)
objektname = werte(1)

' Dateiendung .pdl für Bildanwahl entfernen
bildname = Mid(bildname, 1, InStr(bildname, ".pdl") - 1)

HMIRuntime.BaseScreenName = bildname
Set oBildObjekt = HMIRuntime.Screens(bildname).ScreenItems(objektname)

' Nur möglich wenn globales Farbschema aus
oBildObjekt.GlobalColorScheme = False
oBildObjekt.ForeColor = 255 ' rote Schrift

Leider funktioniert das Einfärben der Texte bei Bildwechsel nicht mehr bei 7.3, bei 7.2 war das noch möglich.
Da musst du noch etwas Arbeit investieren.

Ob das auch bei großen Projekten mit mehreren 100/1000 Texten so fuktioniert muss du ebenfalls prüfen.
 
Hallo und danke für die Antworten und Hilfen. Werde das mal testen und gebe dann Rückmeldung. Sieht auf jeden Fall mal vielversprechend aus.
 
Zurück
Oben