harry_m hat geschrieben:Zu Python/Ruby: und wie mache ich damit eine Plattform unabhängige Oberfläche? Ich dachte das ist falsch, eine Sprache mit eine Framework zu vergleichen?!
python und ruby sind erstmal nur Sprachen, sowie halt C++, Java, C#, ... Dort wird der Syntaktische, Semantische, ... Grundstock für Programme gelegt.
Um dieses Grundgerüst baut sich eine STandardbibliothek auf. Und da fängt bereits der Unterschied an: die C++-StdLib ist sehr klein. Wenn du die STL dazu nimmst wird es nicht viel besser. Um wirklich was mit C++ anfangen zu können, musst du drittanbieter Libs dazu nehmen. boost, oder eben Qt.
C#, java, python haben da von der Installation weg DEUTLICH mehr zu bieten - z.B. überall schon ne GUI. Für viele Aufgaben gibt es bereits Lösungen: XML mit DOM und SAX, inis lesen, Socket-Programmierung, ...
Packaging ist mit Python usw auch einfacher: File speichern, irgendwo mit import einbinden, klappt. In C++ musst du in Header und Source aufteilen, bei includes zirkuläre Abhängigkeiten beachten, die ODR nicht verletzen, mit Compiler und Linker umgehen lernen, Fehler lesen lernen.
Ich könnt jetzt noch weiter machen. Aber ich weiß dass es dir nichts bringt
Ich will nur sagen, dass für eine schnelle Lösung andere Sprachen geeigneter sind - vor allem wenn man die Sprache erst noch lernen muss.
Zu deinen Fragen:
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.
1) Ich hab von OPC keinen Plan! Wenn du für den Anfang eh schon fertige Sachen von Windows nehmen wirst, wird das nicht das große Problem sein - kann aber ein Spezialist sicher mehr sagen.
Aus Qt-Sicht startest du für Netzwerksachen bei QAbstractSocket aufwärts. Für Byte-Arrays gibt es QByteArray.
2) Icon -> QPixmap.
3) Die Bestandteile des Icons?
*) Oder willst du eher ein eigenes QWidget malen? -> QWidget ableiten und paintEvent+sizeHint implementieren.
*) Oder vorhandene Komponenten in einem Layout anordnen? QWidget::setLayout() mit passendem Layout.
Frage 1) war technischer Natur, die spezielle Anforderungen benötigt.
2) und 3) waren schon auf eine grafische Umsetzung angelegt.
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?
Ja, Daten von Anzeige trennen. Das kommt ganz drauf an, WIE du das erreichen willst. Das kommt auch auf den Umfang an. Am schönsten geht das über das "Qt Item View Framework" (Fester Bestandteil von Qt): Ein eigenes Model von QAbstractItemModel ableiten. Wenn du eine der View verwenden kannst (List, Table, Tree) -> fertig. Nein? Nochmal von QAbstractItemView ableiten.
Ich bin mir aber sicher, dass das zu komplex wird für den Anfang. Dann musst du selber kapseln: class Item für die Daten, class ItemView:public QWidget für die ANzeige. View zeigt ein Item an.
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.
Sehr schön, zwei Klassen. Die Beschreibung ist allgemein und lässt viel Raum für Spekulationen. Hier kann man nicht wirklich ansetzen.
Wir haben als Info:
Maschinenstatus wird per OPC übertragen. Die Anzeige soll via Icons stattfinden. Daten von Anzeige trennen.
Was fehlt? Eine konkrete Aufgabenstellung
Bei OPC kann dir nur ein Spezialist helfen. Die Anzeige ist auch kein Problem. WIr haben keine Info WAS die Maschinen machen. Was steckt in den Bytes? Brauchst du nen kleinen Parser? Oder sind das nur "Status-Bytes". Sollen die Daten-Klassen dynamisch auf Änderungen der Maschinen reagieren? Willst du Status-Kontrolle durchführen - also Warnungen bei bestimmten Konstellationen ausgeben?
Zwischen Datenbeschaffung von der Maschine und Anzeige klafft eine riesige Definitionslücke.
Im Prinzip fehlt nur noch, dass du mit C++ anfängst. Konkrete Fragen werden sich dann von selber ergeben, wenn es nur um die Qt-Seite geht.
Wenn es dir um das Konzept deiner Softwarearchitektur geht, musst du anfangen, dir selbst und deinen Kollegen/Vorgesetzten Fragen zu stellen, um genau abzustecken, was die Software können soll und was nicht, um ein "Lastenheft" o.Ä. zu erstellen. Um zu wissen, wie man das macht, braucht man Erfahrung, und/oder ausreichend Wissen -> OOA/D.
Vielleicht kannst du nun etwas genauer artikulieren, wo deine Probleme liegen, dann kann man auch konkret helfen. Eine komplette Analyse + Designvorschlag wird dir hier noch keiner geben können...