Plattformunabhängiges Diagnosesystem

Hier können eigene Projekte, die mit Qt in Beziehung stehen vorgestellt werden.
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Plattformunabhängiges Diagnosesystem

Beitrag von harry_m »

Hallo Freunde des gehobenen Zeitvertreibs!

Ich bin für einen großen Deutschen Maschinenbauer tätig und gedenke ein Diagnosesystem für unsere Anlagen zu entwickeln.

Dabei fiel mein Blick auf Qt. Denn durch Kundenvorschriften sind wir immer wieder gezwungen, andere Steuerungen und Systeme einzusetzen. Im Embedded-Bereich ist Linux auf dem Vormarsch, daher bin ich der Meinung, dass es sich auszahlen würde, ein System zu entwickeln, das sowohl unter Windows (was bis jetzt 99% des Volumens ausmacht), als auch unter Linux verfügbar wäre.

So weit, so gut.

Jetzt muss ein kleines Projekt her, welches als Demo bei den Entscheidungsträgern präsentiert werden kann.

Aufgabestellung.

1. Von vier Maschinen müssen die Daten eingesammelt werden. Datenmenge: ein Array aus 20 Byte. Daten werden über Ethernet via OPC übermittelt. (Für diejenigen, die sich in diesem Bereich nicht auskennen "OPC" steht für "OLE for Process Control", das ist ein offener industrieller Standard für den Datenaustausch in der Automatisierungstechnik.)

2. Die eingesammelte Daten müssen visualisiert werden. Dafür wird pro Maschine ein "Icon" angezeigt werden.

3. Seine Bestandteile: Rand, der verschiedene Farben haben kann, Zentrales Bild, das 20 verschiedene Symbole anzeigen kann. Die Farbe des Hintergrunds soll auch veränderbar sein. Oben in diesem "Icon" soll ein fixer Text stehen, der jedoch parametrierbar sein muss. Unten im "Icon" soll ein String sein, dessen Inhalt je nach Daten unterschiedlich zusammengesetzt wird.

Und jetzt die Fragen.

1. Da die OPC-Schnittstelle auf Windows-DCOM basiert, wird es unter Linux eine andere geben (OPC United Architecture: befindet sich bereits in Entwicklung). Daher muss das Einsammeln der Daten von der Anzeige sehr strickt getrennt werden.

- wie macht man das denn in der Qt-Welt am besten?

Ich selbst bin ein C++/Qt-Anfänger, muss es aber zum Laufen bekommen. (4 Bücher sind bereits gekauft, damit verbringe ich meine gesamte Freizeit und vor dem Schalfen wird auch darin gelesen. Einige Tutorials habe ich schon durch genommen, und Lösungsansätze gefunen. Dazu aber später)

Sollte es klappen, werden dafür auch Leute eingestellt, die es dann weiter entwickeln werden.

Für den Anfang reicht es mal.

Rückmeldung erwünscht.

Gruß
Harry
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
ScyllaIllciz
Beiträge: 200
Registriert: 9. Juli 2010 19:31

Beitrag von ScyllaIllciz »

Also im Prinzip kann das alles mit Qt realisiert werden. Wir setzen bei uns Qt als Visualsierung auf unseren Steuerungen ein. Da auf unserer Steuerung auch ein Embedded Linux läuft kenne ich das Problem, dass OPC nicht verfügbar ist. OPC UA klingt viel versprechend, habe ich aber auch noch nicht genauer angesehen. Deshalb habe ich ein Library entwickelt, die direkten Zugriff auf die SPS Variablen ermöglicht, via TCP/IP. Die Lib läuft unter Linux und Windows. Somit kann ich auch die Visu auch auf einem anderen PC laufen lassen und via TCP/IP trotzdem auf die SPS Variablen zugreifen (Fernwartung, Multiscreen usw.). Unter Linux setzen wir die Embedded Variante von Qt ein, die das Bild auch als VNC bereitstellen kann (Fernwartung).

Welche SPS setzt Ihr ein?

Scylla
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Beitrag von harry_m »

ScyllaIllciz hat geschrieben:...Welche SPS setzt Ihr ein?
Zur Zeit ist das die Simatic S7, bzw. Sinumerik 840D. Daneben ist aber auch die Bosch-Rextroth MTX zu berücksichtigen. Des Weiteren Schneider Unity und noch ein Paar andere...

Mein System soll Daten von Maschinen bzw. Steuerungen verschiedener Hersteller einsammeln: ich visualisiere aktuell eine ganze Produktionslinie. Der Simatic OPC läuft auf dem Windows-Rechner lokal, Bosch-Rexroth bringt dagegen einen eigenen OPC mit, der über das Netz via eigenen Verbindung angesprochen wird. Schneider hat wiederum auch einen eigenen OPC: der läuft auch lokal neben dem Simatic OPC DA.

Daher kommt direkter Zugriff auf die Steuerungen in der letzten Konsequenz nicht in Frage. Das ist der Grund, warum ich in meiner Einleitung schrieb, dass in der ersten Stufe das System auf Windows-Basis laufen wird und OPC verwenden.

P.S.: was den OPC UA betrifft. Angesehen habe ich ihn mir. Auf Anhieb aber nicht besonders viel verstanden. Mangels eines geeigneten Testobjekts links liegen gelassen. Der OPC Scout V10 von Siemens kann OPC UA bereits: jetzt fehlen nur noch die entsprechende Server.

Einen OPC UA Client irgendwann zu programmieren wäre wohl eine sehr reizvolle Aufgabe... ;)
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
ScyllaIllciz
Beiträge: 200
Registriert: 9. Juli 2010 19:31

Beitrag von ScyllaIllciz »

Dann kommt wirklich nur OPC in Frage, was unter Windows ja kein Problem ist. Ich habe gerade mal nach OPC UA geschaut. Das wäre insgesamt gesehen das Richtig. Dann müsste man nur den OPC UA client in Qt einbinden (als Lib). Das hätte den Vorteil, dass das auf allen Plattformen läuft.

Ich würde nicht mit OPC DA auf Windows anfangen um dann später, wenn Linux auch dazu kommt, dann noch mal von vorne anzufangen oder ein Mischbetrieb zu fahren. Dann lieber gleich mit OPC UA anfangen und richtig durchziehen. Es gibt Anbieter die SDK's für alle Plattformen anbieten.

Scylla
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Beitrag von harry_m »

Hat (noch) keine Wert: wie ich bereits schrieb, weder Bosch-Rexroth- noch Schneider-OPC unterstützen UA.

Mir geht es vorerst um die Schaffung einer Struktur, die den Austausch des OPC-Clients so einfach, wie möglich machen.
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

ich kenn mich mit OPC ned aus, (obwohl ich auch ausm maschbau komme ^^).
Aber meine Frage, laesst sich OPC generell nicht ueber andere Protokolle tunneln, bzw aufspalten ?
Ich mein euere SPS Daten scheinen sowas wie nen Zustandsautomat zu sein ... das laesst sich ueber was anderes mit sicherheit genau so transportieren.

Ich wuerd also ne server - client struktur bauen, die miteinander auf irgendwas TCP-IP basierendes kommunizieren.
Bei den clients wiederum wuerd ich plugins schreiben, die die unterschiedliche hardware ueber nen plugin oder nen userlevel-treiber oder sowas anbinden. Ein client waer dann z.b. einer fuer alle OPC DA faehigen Maschinen ....

Und wenn server und 20 clients auf einer maschine laufen, sollt das auch kein proplem sein ...

Ciao ...
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Beitrag von harry_m »

Hm... OPC ist hier weder die Frage, noch ein Problem. Er wird in der ersten Stufe, die unter Windows laufen wird einfach benutzt.

Viel mehr würden mich ein Paar Tipps für der Aufbau der Applikation interessieren.
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Er wird in der ersten Stufe, die unter Windows laufen wird einfach benutzt.
Klar, Sprech ich ja auch ned degegen ...
Viel mehr würden mich ein Paar Tipps für der Aufbau der Applikation interessieren.
Fehlen irgendwie viele Informationen über Details, um da was spezifischeres Vorschlagen zu koennen.

Ich zum beispiel weiss ned wie die "Installation" deines Systems aussehen soll. Soll das nur auf einer Maschine laufen ? D.h. du bindest die Systeme direkt an den Rechner an. Das heisst, das transportprotokoll uebers NW liegt vor deiner Architektur ?

Daher muss das Einsammeln der Daten von der Anzeige sehr strickt getrennt werden.
Also wenn du so mehrere Module hasst/brauchst, die eigentlich das selbe machen, aber an unterschiedlichen Faktoren gebunden sind (Hardware z.b.), und sich der Einsatz nach gegebenheiten vor ort (also an der konkreten installation richtet) ... ist die maximalst Implementation die machen kannst immer ein Plugin ! Damit kriegst du die Maxiamalste flexibilitaet.
Beispielsweisse koenntest ein Plugin fuer OPC DA, und eines fuer OPC UA haben. Und je nach Maschinen vor Ort und welche platttform du hasst, kannst dann das richtige einsetzen ...
Und wenn spaeter doch mal was ganz anderes hinzukommt, dann gibts halt noch nen weiteres plugin ...

Ciao ...
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Beitrag von harry_m »

du bindest die Systeme direkt an den Rechner an. Das heisst, das transportprotokoll uebers NW liegt vor deiner Architektur ?
OPC Server kann sowohl lokal d.h. auf dem gleichen Rechner, laufen, auf dem meine Applikation gestartet wird, als auch auf einem anderen Rechner, auf den über TCP/IP zugegriffen wird. Grundlage des OPC DA ist Windows DCOM.

Was ich wohl brauchen werde wird eine Klasse sein, die eine OPC-Verbindung öffnet und liest. Mein Kollege hat es schon mal mit C# gemacht, da werde ich spicken können. Es gibt auch Dokumente der OPC-Foundation, in der beschrieben wird, wie die OPC-Zugriffe im Client aussehen sollen. Das ist jedoch vorerst nicht das Problem.

Viel mehr ist mir unklar, wie die Klassen und Daten aussehen sollen.

Ich beschreibe mal meine Vorstellung. Hoffen wir mal, dass es als Grundlage dienen kann.

Klasse "OPC-Connection": liest die Daten vom OPC-Server und schreibt sie ... irgendwo hin.

Klasse "Maschinenstatus": liest die Daten, und bildet sie entsprechend ab.

Was mir unklar ist: wie macht man das mit der "Datenschicht" am besten? Soll ich in der Server-Komponente ein Signal einrichten, das den gesamten Datensatz an den Slot der "Maschinenstatus"-Klasse schicken soll? Schön, aber wie parametriert man so eine Verbindung? Denn es soll ja kein fest "verdrahtetes" Programm sein, sondern je nach Anlagenkonfiguration anders aussehen.
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Seh ich das richtig: Du bist C++/Qt-Anfänger und sollst gleich mal ne komplexe Demo umsetzen, um den Entscheidungsträgern ein "Ja, ich will" zu entlocken? Wie lange hast du Zeit? C++ lernt man nicht in ein paar Wochen/Monaten (du hast noch nicht gesagt, wie lange du Zeit bekommen hast). Und vor allem lernt man OOP-Design nicht in so kurzer Zeit, und wie man das in C++ umsetzt.
Versuch erstmal vernünftig C++ zu lernen, dann arbeit dich in die Konzepte von Qt ein. Alles andere wäre für dich unnötig frustrierend, und für deine Helferlein (auf Arbeit, privat, Forum, ...) anstrengend.
Und bevor du dich an so ein System wagen kannst, sollte auch etwas Erfahrung in OOP-Design vorhanden sein. Ein 30-Zeiliger Forenpost wird den Anforderungen nicht gerecht. Hast du schon eine Sitzung mit den Personen (Entscheidungsträger, Auftraggeber, Chefentwickler, ...) abgehalten, wo festgelegt wurde, was das System am Ende können soll? wichtige Core-Funktionalitäten? Use-Cases festgehalten? usw?

Das soll jetzt nur ein Vorschlag sein, und keine Kritik, also bitte nicht Sauer sein :)
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Beitrag von harry_m »

OK.

Ich werde wohl oder übel meine C++ und Qt Bücher bei Ebay versteigern und C# Bücher kaufen müssen.

Mit Qt braucht man in Deutschland nicht anzufangen...

Denn bei uns in der Firma hat ein begabter Mechatroniker es in einem halben Jahr im Selbststudium geschafft, ein Paar ganz gut funktionierende Programme in C# zu schreiben, die inzwischen auch eingesetzt werden. Dabei hatte er nicht mehr in der Hand als Visual Studio Express, ein gutes Buch, Microsoft Online Hilfe und Google Suche.

Mit C++ und Qt ist es offensichtlich nicht möglich.

Danke für die Entscheidungshilfe.

Gruß
Harry
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

harry_m hat geschrieben:Mit C++ und Qt ist es offensichtlich nicht möglich.
Sicher ist das mit C++ und Qt möglich, sogar mit C++ und ohne Qt, stattdessen mit C++ und boost. Oder sonst was.
Nur hast du überall das Problem, dass du erstmal eine Sprache lernen musst. Das ist mit C# genauso. C# wird genauso wie C++ seine eigenen Hürden mitbringen, die du überwinden musst. Die geforderte OO-Denke und Analyse+Design sind immer noch Voraussetzung.

Eine ernstgemeinte Frage: Warum leistet ihr euch keine professionellen Programmierer, wenn ihr für einen "großen deutschen Maschinenbauer" tätig seid? Schon der zweite Unerfahrene Angestellte, der auf Softwareentwicklung angesetzt wird. Man kann auch in einem halben Jahr mit C# kein komplexes System entwickeln, außer man hat schon ordentlich Hintergrundwissen. Ein halbes Jahr bis zum Release ist sogar für gestandene Profis relativ kurz, die ihre Sprache beherrschen...
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Beitrag von harry_m »

franzf hat geschrieben:Warum leistet ihr euch keine professionellen Programmierer...
Lange Geschichte.

Wir hatten einen: er war gut und hat in kurzen Zeit sehr viel in Bewegung gesetzt. Eigentlich zu viel: denn er blieb alleine. Stichwort: "Personalmangel".

Das Problem war, dass er nach zwei Jahren ging und all die Projekte, die er angefangen und nicht fertiggestellt hat sind eben halbfertig hängen geblieben.

Das zog Kreise und diese erreichten sogar die Vorstandsebene. Die Reaktion darauf war: "so was tun wir nicht mehr".

Im Laufe der letzten Krise hat sich die Notwendigkeit herauskristallisiert, doch in diese Richtung zu gehen. Nur haben wir zur Zeit keine Chance, ein "OK" für die Einstellung eines weiteren Mannes zu bekommen. Vor einigen Monaten war noch die Rede von der Kurzarbeit im Januar.

Jetzt hat sich die Situation schlagartig verbessert und es droht sogar die Urlaubssperre. Nur von Einstellungen immer noch keine Rede: wenn überhaupt, werden demnächst nur Leiharbeiter geholt.

Ich habe mir vorgenommen, mich in die Sache einzuarbeiten und tue das auch: in meiner Freizeit, wie man es sieht.

Dieses Projekt habe ich mir einfach als ein "Einsteiger-Übungs-Projekt" ausgedacht und war der Meinung, dass es nicht übermäßig kompliziert sein soll.

Dass ich mir noch einiges aneignen muss, ist keine Frage. Das wäre auch nicht das erste Mal, dass ich ins kalte Wasser springe. Bis jetzt habe ich mich immer durchgebissen. Mit dem Buch "Die C++ Programmiersprache" von Bjarne Stroustrup ging ich eine Weile ins Bett. Jetzt habe ich mir für den Anfang doch etwas einfacheres zugelegt.

Übrigens: das hier

http://cartan.cas.suffolk.edu/oopdocboo ... index.html

finde ich sehr interessant. Dort habe im Kap. 11.2.1 etwas gefunden, was den größten Teil meiner "Icon"-Klasse liefern könnte. (Wobei ich zum Schluss eher .svg-Dateien benutzen möchte und nicht Pixmaps... Aber das kommt später).
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

"Die C++ Programmiersprache" ist ja auch kein Einsteigerbuch :D Trotzdem: Buch unbedingt behalten -> Bibel!, schaff dir ein Einsteigerbuch an und schnupper vielleicht schon parallel in die entsprechenden Kapitel des "großen Struppi" rein.
Sehr gut und recht neu scheint der Einsteigerschinken von stroustrup zu sein "Einführung in die Programmierung mit C++".
Ansonsten "C++ Primer" als eBook. Der Breymann scheint auch gut zu sein, laut amazon aber nur bedingt für Einsteiger nützlich.
Vom Wolf lass besser die Finger (Warnung schon vorweg...).

Ich denke, der kleine Struppi oder der Primer sind die beste Wahl.

Das war bei euch ja wirklich ein Drama... Gab es denn keine vertragliche Vereinbarung über die Fertigstellung der Projekte?
Wie sieht es mit Beauftragung einer Softwarefirma aus?

Ansonsten Grüße und viel Spaß :)
Franz
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Beitrag von harry_m »

franzf hat geschrieben:...Das war bei euch ja wirklich ein Drama... Gab es denn keine vertragliche Vereinbarung über die Fertigstellung der Projekte?
Wie sieht es mit Beauftragung einer Softwarefirma aus?...
Welche vertragliche Vereinbarungen soll es denn mit einem Angestellten geben, außer der Kündigungsfristen? Abgesehen davon ist da noch mehr schief gelaufen. Aber das ist nicht das Thema...

Eine Fremdfirma mit etwas zu beauftragen, wo nicht mal ein Pflichtenheft verbindlich geschrieben werden kann, hat keinen Sinn. Viel zu teuer, weil der "Auftragnehmer" gar nicht richtig weiß, was er eigentlich machen soll. Das Ding wird wachsen... Hört sich hirnrissig an, ist aber so. Denn unsere Kunden (Autoindustrie) wissen manchmal erst wenn die Anlage in die Produktion geht, was sie WIRKLICH wollen.

Es gibt auch andere wirtschaftliche Aspekte, die ich hier nicht weiter breittreten möchte.

Eigentlich habe ich in diesem Thread auf ein Paar Hinweise und Ideen gehofft. Auch wenn ich sie vielleicht auf Anhieb nicht verstanden hätte.

So, wie es aussieht, kann mir hier niemand helfen.

Dann muss ich eben mit ganz kleinen Brötchen anfangen.

Gruß

P.S.: Wolf ist in der Tat keine große Hilfe. Wenn das C++ Buch noch eingermaßen hilfreich ist, kann man vom Wolf'schen Qt-Buch ("Qt 4.6 GUI-Entwicklung mit C++") nur abraten: die ersten 100 Seiten könnte man noch durchgehen lassen. Was danach kommt, ist die wahre Katastrophe. Es entsteht der Eindruck, dass ihn nur ein Gedanke getrieben hat: "Wie fülle ich die Seiten bis zum Abgabetermin beim Verlag mit Buchstaben".
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Antworten