WinCC flex + Datenbank

marvin

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

kann mir jemand sagen ob es möglich ist mit WinCC flexible Daten aus einer Datenbank auszulesen ?
Normalerweise müsste es doch über ein Skript möglich sein, oder ?
 
Datenbank

Ja, mit einem PC und VB-Script ist dies ohne weiteres möglich!
Nicht nur lesen, sondern auch schreiben!

Falls du nicht VB-Script kannst, aber ein bischen Geld über hast
gibt es von der Firma Inat den OPC-Router, der Daten über
zB.: WinCC Flexible OPC-Server auf unterschiedliche
Datenbanken lesen und schreiben kann!

Viele Grüße!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Genau das ist das Problem, ich habe zwar ein wenig Erfahrung mit VB, aber nicht mit VBS. Geld für eine neue Komponente möchte ich auch nicht ausgeben.
Mittlerweile ist die Aufgabenstellung auch ein wenig konkreter: Ich möchte Daten aus einer Access-Datenbank auslesen. Ich habe schon Beispiele gefunden wie ich über ein Archiv Daten in Access abspeicher kann, wie ich aber welche aus Access herausbekomme konnte ich leider noch nicht finden. Hat jemand ein Beispiel an dem mir deutlich wird wie das funktioniert ?
 
daten lesen....

hier mal ein beispiel...

On Error Resume Next
Dim sql,d,t,pos
Dim dbname, dbuser, dbpw, conn
Dim recordset, datenbankwert

dbname = "dbs"
dbuser = "root"
dbpw = "admin"
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; DATABASE=" + dbname + "; UID=" + dbuser + ";PWD=" + dbpw + "; OPTION=3"
conn.Open

d=Mid(SmartTags("DB_ALLGEMEIN.SYSTEMZEIT"),7,4)+"-"+Mid(SmartTags("DB_ALLGEMEIN.SYSTEMZEIT"),4,2)+"-"+Mid(SmartTags("DB_ALLGEMEIN.SYSTEMZEIT"),1,2)
t=Mid(SmartTags("DB_ALLGEMEIN.SYSTEMZEIT"),12,8)

sql = "SELECT feld1 FROM tabelenname WHERE feld2 = wert)"
recordset = conn.Execute(sql)

datenbankwert = recordset("feld1")

conn.Close
Set conn = Nothing
 
Danke erstmal für dein Beispiel. Anscheinend hast du dich da mit einer MySQL DB verbunden. Soweit ich das herausgefunden hatte ist die Syntax für Access eine etwas andere ( oder doch nicht ?). Nach langem (zusammen)suchen hatte ich folgendes Script geschrieben:

Dim db, rst, strSQL

Set db = CreateObject("ADODB.Connection")
db.Open ("DRIVER=Microsoft.Jet.OLEDB.4.0; DBQ=D:\Techniker\Projekt\Test.mdb")

Set rst = CreateObject("ADODB.Recordset")
strSQL = "SELECT tbltest.lfdnr FROM tbltest"
rst.Open strSQL


Was mir aber noch unklar ist und wofür ich noch kein Beispiel gefunden hatte: Wohin erfolgt das Ergebnis der SQL Abfrage bzw. wie bekomme ich das Ergebnis in eine Variable?
Damit klar wird was ich derzeit vorhabe:
Ich möchte mich in einer Runtime auf dem PC mit Hilfe des SmartClient mit verschiedenen Panels ( immer nur eins auf einmal ) auf denen der SmartServer läuft verbinden. In der Access-Datenbank sollen sowohl der Anlagenname wie auch die IP-Adresse des Panels hinterlegt sein.
Ich habe mir das so vorgestellt das ich in einem E/A Feld die Anlagennamen angezeigt bekomme und nachdem ich eine Anlage ausgewählt habe, die zugehörige IP-Adresse in eine Variable geschrieben wird.
 
In der Access-Datenbank sollen sowohl der Anlagenname wie auch die IP-Adresse des Panels hinterlegt sein.
Ich habe mir das so vorgestellt das ich in einem E/A Feld die Anlagennamen angezeigt bekomme und nachdem ich eine Anlage ausgewählt habe, die zugehörige IP-Adresse in eine Variable geschrieben wird.

In der Datenbank soll "nur" IP-Adresse und Anlagenname hinterlegt sein,
oder soll mehr in die DB.

Nur für die IP-Adresse und den Anlagenname brauchst du keine Datenbank,
da reichen ein Skript und 2 Interne Stringvariablen aus!

Werde das Skript testen (wenn ich gleich Zeit habe) + posten!

viele Grüße
Thomas
 
In der Datenbank soll natürlich nicht nur der Anlagenname und die IP hinterlegt sein, sondern jeder Anlage sollen noch weitere Werte in einer eigenen Tabelle zugeordnet werde.
Mittlerweile habe ich das Script zum laufen bekommen. An einer Stelle fehlte ein Set-Befehl und anstatt hmiruntime.tags muss es hmiruntime.smarttags heissen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi!
Dasselbe geht auch mit ner SQL-Datenbank, falls du mal eine
verwenden solltest.

Trotzdem hier noch das Skript um die IP,Hostname und evtl. die MAC-Adresse der HMI-Station auszulesen. Wenn du dann mit Smart-Service
auf die Station schaust, kannst du immer die aktuelle IP sehen!


Einfach 3 interne Stringvariablen (25 Bytes) mit den Namen

strMAC_Adresse
strHost_Name
strIP_Adresse

anlegen und mit einem Ausgabefeld (Typ String min 25 Zeichen)
verschalten.

Dann hängst du dieses Skript zB. einfach an das 'Startbild'->Ereignis->Bild
aufgebaut oder du rufst es zeitlich im Taskplaner auf.


Code:
Dim strComputer,objWMIService,colAdapters,n
Dim objAdapter,i
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colAdapters = objWMIService.ExecQuery _
    ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")
Set objAdapter = colAdapters 
n = 1
 For Each objAdapter In colAdapters
  If n=1 Then
  SmartTags("strMAC_Adresse")=CStr(objAdapter.MACAddress)
   SmartTags("strHost_Name")= CStr(objAdapter.DNSHostName)
 
   If Not IsNull(objAdapter.IPAddress) Then
      For i = 0 To UBound(objAdapter.IPAddress)
        SmartTags("strIP_Adresse")=CStr(objAdapter.IPAddress(i))
      Next
   End If
   End If
   n=n+1
 Next

PS:
Wenn du viel mit Visualisierungen zu tun hast, würde ich mir
VBscript und Visual Basic ein bischen anschauen, denn damit läßt sich
vieles realisieren, wo du sonst mit den 'reinen' Visu-Mitteln nicht
rankommst. Und die meisten Visualisierungen unterstützen VBscript.

Viele Grüße
Thomas
 
Zurück
Oben