# Projektarbeit_Messwerte_in_MSSQL_schreiben



## Huan90 (2 April 2013)

Guten Tag liebe Gemeinde,

ich stehe erst seit kurzem auf eurer Benutzerliste und möchte mich hier erst einmal vorstellen und euch erklären, warum ich nun hier bin.

Mein Name ist Philipp, ich mache zzt. eine Schulische Ausbildung zum Fachinformatiker(Systemintegration) und zum Technischem Assi für Informatik. Derzeit befinde ich mich in einer Praktikumsphase und habe vom Betrieb eine Projektaufgabe bekommen. Konkrete Fragen habe ich zzt. nicht, da ich momentan erst einmal Informationen sammel und versuche einen Überblick zu bekommen, dennoch erstelle ich hier meinen ersten Beitrag, vielleicht hat ja schon jmd. tipps für mich.

Zur Zeit benutzt das Unternehmen viele verschiedene Programme um Messwerte zu sammeln (z.B. WinCC, Herstellersoftware wie "GridVis" von Janitza und und und...). Meine Aufgabe ist es nun, eine einheitliche MSSQL-DB zu erstellen, welche AUTOMATISCH von allen Sensoren, Geräten etc. die Messwerte sammeln soll.

meine Fortschritte bisher:
- Die SQL-Datenbank ist auf einem virtuellem Server installiert (win2003 RS2) (befindet sich in Domäne)
- WinCC wurde auf meinem Arbeitsplatzrechner installiert (OPC-Server) (dieser Rechner ist allerdings nicht in der Domäne)
- ein wenig VBA/VBS gelernt 
- dOPC-DA-Clients getestet, gingen alle nicht: (weil winCC-server nicht in domain, Client schon) deswegen:
- zzt. kümmere ich mich um einen OPC-tunneler von Matrikon, komme aber erst mit Hilfe meines Chefs da ran und der ist zzt. nicht da

So... Meine Probleme momentan:
Ich beherrsche SQL, habe mich aber bislang nie mit "OPC, DCOM, SPS usw." befasst und schwimme demnach momentan in trüben Gewässern. Das Internet hilft nat. weiter und ich weiss, dass google mein Freund ist, allerdings ist es schwierig bei einem so komplexen Thema den Überblick zu behalten und vor allem hilft mir nur jeder 25te Treffer bei der Googlesuche weiter und das frisst sehr viel Zeit.

Ein weiteres Problem sind meine Programmier"fähigkeiten". Ich habe in der Schule C# 'kennen'gelernt und während der letzten 3 Wochen habe ich mich ein wenig in VBA/VBS reingewurschtelt.

Ich weiss momentan nicht so recht, wo ich anfangen soll 

Sobald ich konkrete Fragen habe, werde ich diesen Threat weiter führen. So seid ihr wenigstens schon einmal vorgewarnt und habt euer neustes Mitglied kennen gelernt. 

Für Fragen zu mir oder meiner Aufgabe, Tips, Hilfen o.a. sind meine Augen und Ohren geöffnet.


mfG Philipp as Huan90


----------



## Larry Laffer (2 April 2013)

Hallo,
der einzige Tip, der mir so ad hoc einfällt wäre :
Ich würde nicht von zentraler Stelle die Daten von unterschiedlichen Teilnehmern abholen sondern es den Teilnehmern erstmal selbst überlassen, sich um ihre Daten zu kümmern und die bereit zu stellen. Die so bereit gestellten Daten dann zu verarbeiten ist dann "sauberer".
Aber so grundsätzlich : von wievielen Stationen, die wie erreichbar sind, reden wir denn hier ?
In welchem Zeitraster werden Daten generiert ?

Gruß
Larry


----------



## Huan90 (2 April 2013)

Hallo und danke erst einmal für den Ratschlag,
laut meiner aktuellen Informationslage sind es >5 Programme (mit OPC-Server) die von Sensoren und Geräten die Daten sammeln.
D.h. die Daten werden gesammelt und gespeichert, ich brauche nun "lediglich" die MSSQL-DB mit den >5 OPC-Servern koppeln.
Die Daten werden 24/7 generiert, das Zeitraster ist unterschiedlich aber meistens <60sek.

Habe mal versucht das darzustellen:






LG Philipp

_edit: d.h. ich befinde mich zzt. dort, wo die 4 Pfeile zusammenlaufen_


----------



## volker (2 April 2013)

den von dir erwähnten opc-client kenne ich nicht.
aber vlt hilft dir das ein wenig weiter

excel als opc client
Siemens Industry Online Support - Automation Service, Automation Support, Simatic Service, Simatic Support, Technical Support, Technical Consulting

mit vb-script (vba wird das auch funktionieren) kannst du in die datenbank schreiben.
hier ist beschrieben wie es mit acces und mysql funktioniert
http://www.sps-forum.de/faq/15348-protool-winccflex-daten-lesen-schreiben-mit-vbulletin-script.html

da du eine hochsprache beherrscht sollte das für dich umsetzbar sein.


----------



## seeba (2 April 2013)

MSSQL ist leider per se erstmal gänzlich ungeeignet um Daten in der Masse bzw. Zeitreihen wie du es vor hast zu speichern. De Datenbankgröße wird dir innerhalb kürzester Zeit explodieren.

Daher meine Frage: Wie oft ändern sich deine Daten? Wieviele Signale sind es in Summe? Eventuell hat eine Delta-Event-Speicherung hier Vorteile.


----------



## volker (2 April 2013)

wow is google schnell.
ich habe gerade mal Delta-Event-Speicherung bei google eingegeben weil mir das nichts sagt.
und was ist direkt oben in der liste?


----------



## seeba (2 April 2013)

Naja, das erklärt sich eigentlich fast anhand des Namen. Ein Wert wird nur gespeichert, wenn er sich (um ein ggf. einstellbares Delta) geändert hat.
Ich mache das so (Beispiel Energiezähler, 60 Sekundenraster):
Ich frage den OPC-Server alle 60 Sekunden nach dem neuen Wert.
Hat sich der Wert geändert, erzeuge ich einen Datensatz im SQL Server.

Gerade bei binären Werten wie Betriebsmeldungen bspw. verringert man so das Datenaufkommen natürlich erheblich.


----------



## volker (2 April 2013)

habs auch schnell rausgefunden. aber ist schon erschreckend wie schnell google das wusste.


----------



## bike (2 April 2013)

volker schrieb:


> habs auch schnell rausgefunden. aber ist schon erschreckend wie schnell google das wusste.



Das ginge auch bei dir so, wenn du so viele Anschlüsse und so viel Energie verbrauchen könntest wie du Tante G 


bike


----------



## Huan90 (2 April 2013)

Hallo und danke erst einmal für die Antworten und Links!!!



volker schrieb:


> den von dir erwähnten opc-client kenne ich nicht.


Getestet habe ich bislang den dOPC-DA-Client von kassl und den PowerOPC-DA-Client.
Nachher bekomme ich wie schon erwähnt einen DA-Client und Tunnel von *Matrikon*.



volker schrieb:


> da du eine hochsprache beherrscht sollte das für dich umsetzbar sein.


Ich möchte nicht so weit gehen und behaupten, dass ich C# "beherrsche", über vbs in eine MSSQL-DB zu lesen/schreiben habe ich allerdings schon gemacht (die Links helfen dennoch^^), z.B. ist während meines Praktikums folgendes Script entstanden:

_*edit: *(Das Skript zählt lediglich die Anzahl der Datensätze in der Werte-Tabelle und schreibt die Zahl mit Datum und Uhrzeit in eine .txt, Das Script wird alle 12 Stunden ausgeführt (Geplante Tasks ), damit ich den Datenzuwachs im Auge behalten kann (aber hauptsächlich zur Übung)
_

```
'Variablen deklarieren
dim dat, i, t
dim cnStr, ac, rs, cn, sQuery
dim objFSO

'ADODB
cnStr = "Provider=MSDASQL;DSN=energie;UID=**;PWD=****************;"
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = cnStr
cn.Open
Set ac = CreateObject("ADODB.Command")
Set rs = CreateObject("ADODB.RecordSet")

'SQL Abfrage, Anzahl datensätze
SQuery = "SELECT Count(*) AS Anzahl FROM value_data"
rs.OPEN SQuery,cn
i = rs.Fields("Anzahl").Value
rs.Close

'Systemzeit/datum auslesen
t = Time
dat = Date
'Textdatei öffnen
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Documents and Settings\werkstad\Desktop\Datenzuwachs_gridvis_db.txt", 8)

'in Textdatei schreiben
objFile.WriteLine(""& Date & " " & Time & " ; " & i & Chr(13))
'Datenbankverbindung schliessen und terminieren
Set ac = Nothing
cn.close
Set cn = Nothing
```



seeba schrieb:


> MSSQL ist leider per se erstmal gänzlich ungeeignet um Daten in der Masse bzw. Zeitreihen wie du es vor hast zu speichern. De Datenbankgröße wird dir innerhalb kürzester Zeit explodieren.


Was wäre denn demnach eine brauchbare Alternative zu MSSQL? (oracle oder mysql besser geeignet?)



seeba schrieb:


> Wieviele Signale sind es in Summe?


Sobald ich das in Erfahrung gebracht habe, werde ich das hier im Threat posten (evtl. im 1. Beitrag ergänzen)



seeba schrieb:


> Eventuell hat eine Delta-Event-Speicherung hier Vorteile.


Das Problem ist, dass sich die Werte laufend ändern. Ich habe soeben erfahren, dass WinCC die Daten lediglich dann abruft, wenn sie sich geändert haben, demnach wird das Verfahren mehr oder weniger zumindest bei WinCC schon genutzt.

LG Philipp

_edit: 





volker schrieb:



			wow is google schnell. [...]
		
Zum Vergrößern anklicken....

Genau so ging es mir auch gerade^^_


----------



## seeba (2 April 2013)

Da WinCC i.d.R. einen integrierten OPC-Server mitbringt (keine Ahnung ab welcher Version das so war) würde ich das ganze grundsätzlich erstmal auf OPC aufbauen.
Ich würde mir einen Client entwickeln, der OPC-Items abgreift und zyklisch speichert. Den würde ich in C# programmieren und direkt auf die relevanten Systeme verteilen. Das OPC Tunneling und Scripting in WinCC würde ich mir wirklich sparen. So besonders stabil finde ich das nicht.
Ein gutes Beispiel ist finde ich: Siemens Industry Online Support - Automation Service, Automation Support, Simatic Service, Simatic Support, Technical Support, Technical Consulting
Angeblich geht das nur mit Siemens OPC Servern. Ich habe es aber auch letztens mal mit einem anderen OPC Server getestet, es hat funktioniert. Vielleicht kann dazu jemand anders nochmal etwas sagen.

SQL Server per se sind nicht sonderlich gut für Zeitreihen, aber darüber findest du im Internet genug Material (Stichwörter Time Series Data, Big Data). Besserung bringt wohl der SQL Server 2012 mit den Columnstore Indexes, die gibt es aber leider nur in der Enterprise-Version, deswegen habe ich das bis heute nicht getestet.

Wenn du auf SQL Server bleibst, kannst du als Frontend super die kostenlosen SQL Reporting Services verwenden.


----------



## Huan90 (3 April 2013)

seeba schrieb:


> Da WinCC i.d.R. einen integrierten OPC-Server mitbringt [...] würde ich das ganze grundsätzlich erstmal auf OPC aufbauen.



So war der Plan... sorry, falls ich mich unklar ausgedrückt habe. Ich steige wie gesagt gerade erst voll in das Thema ein. Den WinCC OPC-Server kann ich lokal ansprechen, über die bislang getesteten Clients ging das nicht, weil sich der Virtuelle Server auf dem der Client später die ganzen Variablen auslesen soll, in einer Domäne befindet, die ganzen OPC-Server sollen später allerdings nicht in der Domäne sein.

Deswegen....:


seeba schrieb:


> Das OPC Tunneling und Scripting in WinCC würde ich mir wirklich sparen.


komme ich um das Tunneling nicht herum.



seeba schrieb:


> Wenn du auf SQL Server bleibst, kannst du als Frontend super die kostenlosen SQL Reporting Services verwenden.


Tausend Dank für den Tipp 


Ich bin gerade dabei für die Programme "GridVis" sowie für "Hydras 3" geeignete OPC-Server zu suchen. Was den Client betrifft, mir wurde vorgeschrieben einen Client von Matrikon zu verwenden, diesen habe ich allerdings immer noch nicht. Sobald ich den Client habe und getestet habe, melde ich mich hier wieder.
Was den MSSQL-Server und Zeitreihen/Datenvolumen betrifft, muss ich hier erst Rücksprache halten, das wird allerdings frühstens morgen etwas.

LG Philipp


----------



## seeba (3 April 2013)

Huan90 schrieb:


> So war der Plan... sorry, falls ich mich unklar ausgedrückt habe. Ich steige wie gesagt gerade erst voll in das Thema ein. Den WinCC OPC-Server kann ich lokal ansprechen, über die bislang getesteten Clients ging das nicht, weil sich der Virtuelle Server auf dem der Client später die ganzen Variablen auslesen soll, in einer Domäne befindet, die ganzen OPC-Server sollen später allerdings nicht in der Domäne sein.


Du hast es falsch verstanden. Ich würde mir einen Client bauen und diesen auf dem selben virtuellen Server wie das WinCC laufen lassen. Der Client baut aktiv eine Verbindung zur Datenbank auf.


----------



## Huan90 (3 April 2013)

Okay, nun hab ich es^^
Werde das (hoffentlich) morgen ebenso ansprechen.
Ich bin mir nicht sicher, werde das so bald es geht mal erfragen, aber ich glaube es gibt mehrere WinCC Rechner mit eigenen Projekten (verschiedene Abteilungen) und demnach mehrere OPC-Server. So hätte man bei Anschaffung neuer Geräte einen höheren Konfigurationsaufwand...
Wie gesagt, ich werde das mit ansprechen und mich dann hier wieder melden.

Vielen lieben Dank, ihr habt mir in den 24Stunden schon enorm weiter geholfen 

LG Philipp


----------



## Huan90 (19 April 2013)

Ich danke euch vielmals für eure Hilfe, heute ist mein letzter Praktikumstag und ich habe in den letzten Wochen ein "anderes projekt" realisiert, werde hier allerdings wieder einsteigen, sofern ich in knapp 4 Monaten auch wieder im gleichen Betrieb landen sollte (was zzt. nicht unwarscheinlich ist)... 

Liebe Grüße Philipp


----------



## PeterHollanda (20 April 2013)

seeba schrieb:


> Wenn du auf SQL Server bleibst, kannst du als Frontend super die kostenlosen SQL Reporting Services verwenden.



Danke und auch kostenlos mit SQL zusammen.


----------

