WinCC 6.0 Archivdaten zu Excel, OLE Provider ??, OLEDB ?

A

Anonymous

Guest
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

mit WinCC arbeite ich noch nicht lange und trete zur Zeit bei der Auswertung von Archivdaten auf der Stelle.
Die projektierten Archivvariablen können ja mit Objekt CONTROL mit der Funktion
online table control
online trend control
ganz gut grafisch und tabellarisch angezeigt werden.

Ich möchte aber Archivdaten z.B. vom 01.10.05 - 31.10.05 der Variable XXX in eine Excel- oder CSV-Datei haben. Bisher bin ich nur auf Zusatz-Tools PM-OPEN-EXPORT (kostenpflichtig) gestoßen.

Mir kommt zur Zeit WinCC (Archivdaten) vor wie eine Sparbüchse, in der man alles reinlegen kann und es ist möglich zu schauen, was drin ist (Datenansicht), aber rausholen/ verarbeiten der Daten ist kompliziert, oder ???

Nur gucken macht doch keinen Spaß.

Kann mir jemand von den Spezialisten sagen, wie ein einfacher Datenexport aus dem Archiv geht? Nach langer Suche bin jetzt auf diesen Forum gelangt und hoffe auf eine Antwort.


MfG Siggi
 
... darfs auch ODBC sein?

Hallo Siggi,

wenn die Runtime von WinCC läuft, werden automatisch
ODBC-Benutzer-DSNs (z.B. CC_ProjektName_03-11-18_13:15:13R)
im System angelegt.

Du findest die ODBC-Einträge unter
Start / Einstellungen / Systemsteuerung /
Verwaltung / Datenquellen(ODBC).

Die dazugehörige Datenbank findest du in deinem
Projektverzeichnis z.B. unter ..\wincproj\hmi\hmiRT.db

Unter Access kannst du dann z.B. über "Tabellen verknüpfen",
(als Dateityp im Dialog "ODBC Databases ()" auswählen!)
einen Link zu den Tabellen einrichten.

Die Tabellennamen der UserArchive beginnen immer mit
"DBA_UA#". Nach der Vernüpfung kannst du mit den UAs
wie mit normalen Access-Tabellen arbeiten.

ACHTUNG: Der Zeitstempel ändert sich manchmal, wenn du das
Projekt auf einen anderern Rechner bringt oder reorganisierst.
Dann musst du die Verknüpfungen erneuern!

Einschränkung: hat unter V 5.x noch so funktioniert, ist aber
unter V6.0 noch nicht getestet!

Schreib mal deine Erfahrungen.

Gruß G.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo G.

vielen Dank für deinen Tip, es mit ODBC zu versuchen, an die Archivdaten in WinCC heranzukommen. Leider hat es nach einigen Versuchen nicht so richtig geklappt.

1. Es wird in Runtime ein ODBC-Benutzer-DSN angelegt > auch in WinCC 6.0 so
z.B. CC_SimuDSW2_05_11_11_16_04_04

2. „ Datenbank unter /winccproj/hmi/hmiRT.db“ > deine Angabe aus V 5.x

In WinCC 6.0 werden die Archive mit SQL-Server verwaltet und unter
Projektordner : ArchiveManager / Alarmlogging
/ TagLoggingFast
/ TagLoggingSlow abgelegt.

3. Unter Access konnte ich zwar mit „Tabellen verknüpfen“ Daten auf Access
übertragen, aber leider keine Archivedaten.
möglich war unter dbo_AlgCSViewDEU > Alarmliste
dbo_Archive > Liste der Archivvariablen
An die Archivdatenwerte selbst bin ich nicht rangekommen.

Die Daten z.B. einer Anlage auf einer Platte zu archivieren macht doch nur Sinn, wenn ich diese Daten mit einfachen Funktionen wieder auslesen und z.B. mit Excel,Access weiterverarbeiten kann.
Ich dachte zu diesem Thema erhalte ich gleich 3- 5 Lösungen von WinCC-Spezialisten. Die Begeisterung mit WinCC zu arbeiten hält sich bei mir bisher in Grenzen. Zwar kann man ganz nette bunte Bildchen erzeugen, aber bei einigen Punkten sind Schwächen erkennbar:

- sehr begrenzte Powertagsvariablen in der Grundversion
- Probleme mit Drehteilen
- Funktionen zur einfachen Archivdatenverarbeitung fehlen (scheinbar)

Gibt es denn in WinCC V6.0 wirklich keine Funktion, um Archivdaten zur externen Verarbeitung (Zeit, Variablenauswahl) vorzubereiten und in ein Format .cvs, .xls, oder .db zu übertagen???

Gruss Siggi
 
Grundsätzliches ...

Hallo Siggi,

der Zugriff über ODBC auf die Userarchive war auch mein
erster Versuch beim 1. WinCC-Projekt.

Wegen diverser Einschränkungen bei WinCC5.x (übersteigt
die Anzahl von Feldern x Datensätzen eine bestimmte
Größe, bricht die Performance dramatisch ein), musste
ich dann die Daten regelmäßig aus dem Archiv herausholen.

Fazit: die UAs sollte man nur für die Verwaltung von z.B.
Rezeptdaten verwenden oder zur Abspeicherung von Maschinen-
parametern oder zum Sichern von internen WinCC-Variablen
vor dem Runterfahren des Projekts.

Für Online-Trends, Protokollierung etc. verwende ich heute
Direktzugriffe auf die CPUs und schreibe die Daten ohne
Umwege in eine andere Datenbank.

Aber der Zugriff auf das Alarmlogging ist nicht zu verachten.
Ich habe mir da mal eine Häufigkeitsverteilung für Alarme
erstellt, die hat schon oft bei difusen Kundenaussagen
(die Maschine hält immer wieder mal ohne Grund an, etc.)
gute Dienste gleistet.

Falls du trotzdem noch Interesse hast, kann ich ja nochmal bez.
WinCC 6 und ODBC weiterforschen. Sag mal bescheid!

Gruß G.
 
Oh, oh!

Hallo Siggi,

jetzt bin ich doch auch selbst neugierig geworden und habe noch ein
wenig geforscht. Was ich dabei gefunden habe, ist nicht grade erfreulich:

In WinCC V6 benötigt man eine ZUSÄTZLICHE Lizenz um auf die
Datenbank zugreifen zu können. Diese Lizenz ist in den
Optionspaketen "Connectivity Pack" oder "Dat@Monitor" enthalten.

Natürlich ÄUSSERST preiswert, wie man das von Siemens gewohnt ist!

Nähere Infos unter:
http://support.automation.siemens.com/WW/view/de/19300688

Gruß G.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
WinCC für kleine Anlagen zu teuer

Vielen Dank G.

mir geht es bei dem Datemexport um mögliche Funktionen in der
WinnCC-Basisversion.

Die zusätzlichen Optionen Connectivity Pack und Dat@Monitor sind mir schon bekannt. Das bedeutet ja bei jedem neuen Projekt Runtimelizenzen
und wenn man Web und Dat@monitor brauch, sind die Softwarekosten einfach zu hoch bei kleinen Anlagen. Schade,Schade, Schade!!

Vieleicht ist der Datenzugriff auf den SQL-Server aber auch ohne Lizenz
möglich und erlaubt.

MfG Siggi
 
Direct Access

Hallo Siggi,

wir haben WinCC 6 zwar schon im Haus, aber noch
nicht installiert.

Ein Direktzugriff über ODBC müsste m.E. aber auch klappen.
Du bist doch schon weit gekommen:

- dbo_AlgCSViewDEU > Alarmliste
- dbo_Archive > Liste der Archivvariablen

Sollte eine Tabelle geschützt sein, versuche mal den
Zugang User/Pwd = "sa"/leer. Das ist der Standard-
Zugang für den SysAdmin bei jeder MSSQL-DB. Es
würde mich nicht wundern, wenn Siemens den (wie so
viele andere Applikationen) offengelassen hat.

Damit ist es nur noch eine Fleissarbeit, die richtige Tabelle
zu finden.

U.U. musst du auch in der Projekt- UND in der RT-Datenbank
suchen. Z.B. beim Alarmlogging stehen in der RT-DB nur die
Alarm-IDs und die Zeitstempel. Der zugehörige Text steht in
der Projekt-DB (ggf. mehrsprachig) und muss dann per JOIN
verknüpft werden.

Ich denke, wir werden WinCC 6 noch in diesem Jahr installieren
und testen. Dann melde ich mich mich hier mal wieder.

Gruß G.
 
Vielleicht helfen folgende Skripte weiter:

Werte aus Archiv lesen:

Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)
Dim objConnection
Dim strConnectionString
Dim lngValue
Dim strSQL
Dim objCommand
Dim n
strConnectionString ="Provider=WinCCOLEDBProvider.1;Data Source=.\WinCC;Catalog=CC_V6-Kurs_03_04_25_08_34_17R"
' Auswahl des Archives
strSQL = "TAG:R, 1, 0000-00-00 00:05:00.000,0000-00-00 00:00:00.000"
' Die '"1" Nach dem TAG:R ist die ID für das Archiv
' Es werden die letzten 5 Minuten gelesen aus dem Archiv
Set objConnection = CreateObject("ADODB.Connection")
objConnection.ConnectionString = strConnectionString
objconnection.CursorLocation = 3
objConnection.Open
Set objCommand = CreateObject("ADODB.Command")
objCommand.CommandType = 1
'die 1 Bedeutet Text
With objCommand
.ActiveConnection = objConnection
.CommandText = strSQL
End With
Dim oRs
Set oRs = objCommand.Execute

HMIRuntime.trace oRs.Fields(1).name & vbTab
HMIRuntime.trace oRs.Fields(2).name & vbTab
HMIRuntime.trace oRs.Fields(3).name & vbTab
HMIRuntime.trace oRs.Fields(4).name & vbTab

HMIRuntime.trace vbCrLf
n=0
Do While Not oRs.eof
HMIRuntime.trace oRs.Fields(1).value & vbTab
HMIRuntime.trace oRs.Fields(2).value & vbTab
HMIRuntime.trace oRs.Fields(3).value & vbTab
HMIRuntime.trace oRs.Fields(4).value & vbTab

HMIRuntime.trace vbCrLf
n=n+1
oRs.movenext
If n>50 Then Exit Do
Loop
oRs.close
Set objCommand = Nothing
objConnection.Close
Set objConnection = Nothing


End Sub

und Werte in Excel Tabelle schreiben:

Sub OnClick(ByVal Item)
Dim objExcelApp
Set objExcelApp = CreateObject("Excel.Application")
objExcelApp.Visible = True
'Excel öffnen ( Applikation starten )
item.Text = "Berechnete Werte:" & vbCrLf
'In das Textfenster eine Überschrift schreiben
With objExcelApp
' [objExcelApp.Workbooks.Open "<path>\ExcelExample.xls"] mit dem "With Befehl
' spart man sich "objExcelApp." zu schreiben. Jede Zeile die mit einem Punkt beginnt,
' wird in VBS-Excel ausgeführt
.Workbooks.Open"D:\Programme\Siemens\WinCC\WinCCProjects\Rechnung.xls"
' Öffnen der Excelmappe
.Range("C3").Select
' Auswählen der Zelle
.ActiveCell.FormulaR1C1 = HMIRuntime.Tags("d_1").Read
' Schreiben des Variablenwerts In die Zelle
.Range("C4").Select
.ActiveCell.FormulaR1C1 = HMIRuntime.Tags("d_2").Read
.Range("C5").Select
.ActiveCell.FormulaR1C1 = HMIRuntime.Tags("d_3").Read
.Range("C6").Select
.ActiveCell.FormulaR1C1 = HMIRuntime.Tags("d_4").Read
.Range("C7").Select
.ActiveCell.FormulaR1C1 = HMIRuntime.Tags("d_5").Read
.ActiveWorkbook.Save
' Sichern das die Berechnung wirklich durchgeführt ist
.Range("F3").Select
' Auswählen der Zelle mit dem Ergebniss der Berechnug
item.Text = item.Text & "Min : " & .ActiveCell.Value & vbCrLf
' Schreiben des Ergebnisses In das Textfenster
.Range("F4").Select
item.Text = item.Text & "Max : " & .ActiveCell.Value & vbCrLf
.Range("F5").Select
item.Text = item.Text & "Mittelwert : " & .ActiveCell.Value & vbCrLf
.Range("F6").Select
item.Text = item.Text & "Summe : " & .ActiveCell.Value & vbCrLf
End With
MsgBox ("Klick einfach weiter! ")
' Zwischenstop durch Messagebox zum Prüfen der Exceltabelle
objExcelApp.ActiveWorkbook.Save
' Speichern der Tabelle
objExcelApp.Workbooks.Close
' Tabelle schließen
objExcelApp.Quit
' Excel schließen
Set objExcelApp = Nothing

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo kluger Unbekanter,

vielen Dank für den Tip.
Das Skript zeigt doch schon sehr viel Hintergrundwissen.

Ich werde das mal gelegentlich testen.


Gruss Siggi
 
Skript läuft nur teilweise

Hallo,

habe den Skript mal versucht auszuführen. Der Skript zum
Archivteil wird ohne Error ausgeführt, aber Archivdaten kamen leider nicht zu Tage.

Vielleicht kann mir diesen Skriptteil mal einer erklären ?
Dim oRs
Set oRs = objCommand.Execute

HMIRuntime.trace oRs.Fields(1).name & vbTab
HMIRuntime.trace oRs.Fields(2).name & vbTab
HMIRuntime.trace oRs.Fields(3).name & vbTab
HMIRuntime.trace oRs.Fields(4).name & vbTab

HMIRuntime.trace vbCrLf
n=0
Do While Not oRs.eof
HMIRuntime.trace oRs.Fields(1).value & vbTab
HMIRuntime.trace oRs.Fields(2).value & vbTab
HMIRuntime.trace oRs.Fields(3).value & vbTab
HMIRuntime.trace oRs.Fields(4).value & vbTab

HMIRuntime.trace vbCrLf
n=n+1
oRs.movenext
If n>50 Then Exit Do
Loop
oRs.close

Da wird jeder Datensatz schrittweise angesteuert, aber was bedeutet der
Befehl HMIRuntime.trace oRs.Fields(1).value & vbTab genau ????



Der angegebene Excel-Skript funktioniert schon ganz gut, wenn man
für HMIRuntime.Tags("WinCC-Variable").Read eingibt , wird der Onlinewert der variablen in die Exceltabelle geschrieben.


Ich konnte nicht erkennen, wie denn Archivdaten zu den angegebenen
Variablen-Namen "d_1" bis "d_5" gelangen sollten.

Wer hat da eine Meinung dazu.???
Hier ist vor allem der nette kluge Unbekannte gefragt.

Gruss Siggi
 
Zurück
Oben