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



## Anonymous (15 November 2005)

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


----------



## Anonymous (16 November 2005)

*... 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.


----------



## Anonymous (18 November 2005)

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


----------



## Anonymous (18 November 2005)

*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.


----------



## Anonymous (21 November 2005)

*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.


----------



## Anonymous (21 November 2005)

*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


----------



## Anonymous (22 November 2005)

*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.


----------



## Anonymous (24 November 2005)

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ß


----------



## Anonymous (25 November 2005)

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


----------



## Anonymous (28 November 2005)

*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


----------

