Projektarbeit_Messwerte_in_MSSQL_schreiben

Huan90

Level-1
Beiträge
15
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
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 :confused:

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. :D

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


mfG Philipp as Huan90
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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:



datenflussdiagramm.JPG

LG Philipp

edit: d.h. ich befinde mich zzt. dort, wo die 4 Pfeile zusammenlaufen
 
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.
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 

Anhänge

  • Zwischenablage02.gif
    Zwischenablage02.gif
    7,8 KB · Aufrufe: 49
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.
 
habs auch schnell rausgefunden. aber ist schon erschreckend wie schnell google das wusste.
 
Hallo und danke erst einmal für die Antworten und Links!!!

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.

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 :p), damit ich den Datenzuwachs im Auge behalten kann (aber hauptsächlich zur Übung)
Code:
'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

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?)

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)

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:
wow is google schnell. [...]
Genau so ging es mir auch gerade^^
 
Zuletzt bearbeitet:
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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....:
Das OPC Tunneling und Scripting in WinCC würde ich mir wirklich sparen.
komme ich um das Tunneling nicht herum.

Wenn du auf SQL Server bleibst, kannst du als Frontend super die kostenlosen SQL Reporting Services verwenden.
Tausend Dank für den Tipp :ROFLMAO:


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
 
Zuletzt bearbeitet:
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.
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Zurück
Oben