Welche Sprache sollte ich verwenden?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
anonym112

Hallo,

ich möchte ein Programm für verschiedene Notebooks erstellen (kompatibel mit verschiedenen OS: Win, Linux, macOS). Mithilfe der GUI soll es möglich sein einen landwirtschaftlichen Lüfter zu steuern. Das Ganze geht dann aus dem PC über ein "serial communications port interface". Der Lüfter sollte ausfallsicher über eine lange Zeit laufen.

Ich frage mache ob ich das besser mit C++ oder Python umsetze. Könnte mir hierbei jemand einen Tipp geben?
Einerseits wäre es mit Python einfacher für alle Betriebssysteme zu entwickeln, aber wäre eine solche GUI sicher genug?
Es wird hier wahrscheinlich keine eindeutige Lösung geben, aber vielleicht kann mir ja jemand ein paar Tipps geben auf was ich aufpassen muss. :mrgreen:

Danke im voraus und ich Entschuldigung sollte das Thema nicht passend für dieses Forum sein. :)
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Ohne jetzt die technischen Vorgaben zu kennen, hier eine Idee:

Nimm einen Bastelrechner ala Raspi (oder noch kleiner), pöppel den fest in die Nähe des Lüfters und schliess das serielle Kabel an. Dann kannst Du mit WLAN oder LAN-Kabel drauf zugreifen. Dann eine kleine Weboberfläche zur Steuerung gebaut, z.B. mit Django (mit Login absichern!), und die Steuersignale über seriell rausgeben. Fertsch.

Vorteil der Weboberfläche - funktioniert mit allen Geräten, die einem Browser darstellen können und Zugriff auf das Netzwerk haben.
Nachteil - wenn Du keine Ahnung von Webprogrammierung und/oder Netzwerken hast, könnte das korrekte Absichern problematisch werden.

Eine native Desktopanwendung wäre mir für sowas zu unflexibel, es sei denn, man hat einem stationären Rechner mit Monitor und Tastatur direkt an den Lüfter geklemmt.
Sirius3
User
Beiträge: 17703
Registriert: Sonntag 21. Oktober 2012, 17:20

Dass der Lüfter ausfallsicher läuft, hängt am Lüfter. Also ist die entscheidende Frage, wie wird der Lüfter angesteuert? Muß das auch ausfallsicher sein? Wenn ja, dann wird es kompliziert.

Für die direkte Kommunikation schließe ich mich jerch an, da reicht wohl ein Raspi-Zero oder ESP, oder Arduino. Entweder läuft darauf direkt ein Web-Server oder es gibt irgendwo einen Server, der das übernimmt. Kommt halt drauf an, was Du sonst noch an Hardware laufen hast.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@Sirius3: Jepp, wichtiger Punkt mit der Ausfallsicherheit.

@fg_91: Falls Ausfall- und Zugriffsicherheit sehr wichtig sind, würde ich da nicht mit etwas selbst Gebasteltem anfangen, sondern lieber ein paar Euro in zertifizierte Anlagensteuerung investieren (hat auch juristische und versicherungstechnische Vorteile). Nicht dass am Ende wegen eines ausgefallenen Raspis die halbe Ernte im Trockensilo verdirbt.
anonym112

Danke schon mal für eure Antworten!
An die Weboberfläche habe ich auch schon gedacht, aber leider keine Erfahrung damit.
Ziel ist es, das Ganze auf einem alten Laptop zu installieren und mit der Steuerung zu Verbinden. Die Steuerung des Lüfters funktioniert bereits, dafür gibt es ein Bedientableau. Darum muss ich mich nicht kümmern. Es soll halt mit dieser GUI schöner dargestellt werden bzw. leichter zu bedienen sein..
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn es *ein* alter Laptop ist, warum dann diese OS-Vielfalt? Dann hast du doch Kontrolle ueber das System, und kannst genau das drauftun, was dir die Loesung am einfachsten macht. Ich persoenlich wuerde aus Kostengruenden einfach ein Linux nehmen, und das Ding bootet dann in deine Anwendung - das war's.
nezzcarth
User
Beiträge: 1631
Registriert: Samstag 16. April 2011, 12:47

Kannst du denn C++ bereits so gut, dass du dir das Entwickeln einer Plattform-übergreifenden GUI-Anwendung zutraust, oder wie kommt genau diese Sprachkombination (Python vs. C++) zustande? Gerade C++ ist ja jetzt nicht unbedingt das, was man so wählt, wenn man es sich leicht machen möchte ... :)
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

@nezzcarth: wenn ich eine cross-platform-gui entwickeln wuerde, waere C++ & Qt durchaus eine engere Wahl. Denn was Python an Leichtigkeit der Entwicklung bringt, verspielt es dann wieder beim Bundling fuer egal welche Plattform.
nezzcarth
User
Beiträge: 1631
Registriert: Samstag 16. April 2011, 12:47

@__deets__: Das verstehe ich. Allerdings hast du allgemein sehr viel Programmiererfahrung und kannst C++ bereits, oder? Ich hätte es jetzt so gesehen, dass C++ für jemanden, der neu einsteigt, ein dickeres Brett zu Bohren ist, als Python. Aber andere kennen sich da besser aus als ich. Daher habe ich jedenfalls gefragt, ob bereits C++-Kenntnisse vorliegen.
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Klar kann ich C++ & Python. Rein altersbedingt habe ich mit C++ sogar angefangen, da gab's Python nicht oder nur in einer rudimentaeren Form.

Wie dick das Brett C++ als Erstsprache vs. Python ist - finde ich schwierig zu beurteilen. Das hat auch wirklich viel mit Neigung zu tun. Fuer mich war Python definitiv eine Offenbarung, weil so viel ausdrucksstaerker. Aber es gibt auch Leute, die bevorzugen klare Typinformationen und entsprechendes Feedback und Design. Und Qt zumindest ist auch ziemlich freundlich was resourcen-Management angeht. Man muss ausser deleteLater eigentlich relativ wenig wissen.
anonym112

Super, dass ihr so schnell antwortet.
Ich kann beide Sprachen. (ist natürlich relativ, würde mich nicht als Experte bezeichnen :D)
Die OS-Vielfalt kommt daher, dass dieses System für mehrere existiert. Es soll für mehrere alte Rechner gehen.

QT + C++ war mein erster Gedanke, nach einem kleinen POC bin ich aber irgendwie auf die Idee mit Python gekommen. Wäre das für eine Cross Platform nicht einfacher?
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

fg_91:

Zur engeren Sprachauswahl - in welcher Sprache hast Du denn Vorkenntnisse? Hast Du schon mal eine GUI geschrieben mit irgendeiner Sprache? Dann würde ich dabei bleiben, egal ob Java, C++ oder welche Sprache auch immer.

Wenn Du keine Vorkenntnisse hast, empfehle ich Dir was Einsteigerfreundliches, und da ist Python eine gute Wahl. Da dann gleich bis zur GUI-Programmierung vorzudringen, ist allerdings ein ziemliches Brett, da Du Dich zunächst mit der Sprache selbst vertraut machen musst, um dann Konzepte wie ereignisgesteuerte Programmierung zu lernen. Erst dann kann man sich sinnvoll an eine GUI wagen. Mit hoher Motivation und ausreichend Zeit kann man in Python da schnell hinkommen, trotzdem reden wir hier eher von Monaten und nicht nur ein paar Wochen.

Erzähl doch mal, was Deine Vorkenntnisse in puncto Programmieren sind, vllt. kann man so gezieltere Tipps geben.

Edit: Ok, Du warst schneller und hast Obiges schon beantwortet. Wenn Du C++ gut kannst, ist es mit Qt doch sehr einfach. Bzgl. Python mit Qt sehe ich hier nur den Vorteil der schnelleren Entwicklung/Eingriffe (ist super für RAD). Da Du wahrscheinlich kaum Businesslogik brauchst, reduziert sich die Frage darauf, ob Du lieber Qt in C++ oder Python ausdrücken möchtest (+ build/bundling Einfachheit). Das ist Geschmackssache (ich würde es mit Python machen).
Benutzeravatar
__blackjack__
User
Beiträge: 12984
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ nezzcarth: Wobei C++ durch Qt IMHO auch schon wieder ein bisschen entschärft wird. Klar die ganze Komplexität von C++ ist natürlich trotzdem da, aber wenn man sich an die ”Untermenge” und die Konventionen hält die Qt ”vorlebt”, ist das für Anfänger ein bisschen weniger krass als C++ ohne Rahmenwerk oder einem das weniger ”opinionated” ist.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich wuerde immer noch mit Nachdruck dazu raten, sich die Mehrplattformigkeit abzuschminken. Das wird der entscheidende Teil des Aufwandes sein in meinen Augen, und bei der angestrebten Nutzung ist es doch total egal. Solange das Notebook nur *eine* Sache machen soll (und es soll ja stabil sein, also gleichzeitig noch auf fragwuerdigen Seiten rumsurfen sollte nicht erlaubt sein, etc), kannst und solltest du mehrere gleich aufgesetzte Notebooks verwenden.

Denn auch wenn du recht hast, das Python an sich einfacher auszufuehren ist, wenn man drei verschiedene Kisten vor sich stehen hat, so liegt das nur daran, dass jemand anderes fuer dich einen oder mehrere Installer gebaut hat. Und du das System so hinfrickeln kannst, das alles geht.

In dem Moment, wo du aber selbst einen komfortablen Installer bauen willst, damit dein Programm auch bequem installiert werden kann, sieht das ploetzlich ganz anders aus.
anonym112

Danke nochmal für eure Antworten. Ich bin begeistert wie viel Rückmeldung man in diesem Forum bekommt.

@jerch: Würdest du mir zu QT raten? Ich habe z.B. auch wxWidgets gefunden. (cross platform) Bzw. frage ich mich im Moment ob dein erster Vorschlag mit Django vielleicht gar nicht so schlecht wäre.

@deets: Diese Mehrplattformigkeit wäre für mich schon wichtig. Wie ist das dann mit dem Installer? Damit habe ich keine Erfahrung. Wäre das wirklich so ein großer Aufwand?
__deets__
User
Beiträge: 14480
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst mit verschiedenen installer builders arbeiten. pyinstaller, py2app mindestens. Ggf noch was drittes für Linux. Und die machen Gerne mal Probleme.

Wenn du dir die Lizenz erlauben kannst, solltest du Qt nehmen. wx ist altbacken und grausam.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@fg_91:

Für die Umsetzung einer "nativen" Oberfläche finde ich Qt gut ja, hat aber damit zu tun, dass ich früher mit Qt viel zu hatte. Zu wxWidgets kann ich Dir nichts sagen. Im Prinzip haben alle GUIs ihre Eigenheiten, z.B. merkt man Qt in Python noch relativ stark die C++ Herkunft an (manchmal müssen explizite Referenzen gehalten werden, teilweise unpythonische Entwurfsmuster, Docs mit C++ Schippeln usw).

Zu einer Weboberfläche/Django kann ich Dir nur dann raten, wenn Du entweder Vorerfahrungen damit hast oder im Rahmen der Lüftersteuerung draufziehen möchtest. Da kommt halt viel aus unterschiedlichen Domänen zusammen, um das halbwegs sicher hinzubekommen.

Wenn Du bei beidem (GUI oder Weboberfläche) bei Null anfängst, kommst Du wahrscheinlich mit einer gut dokumentierten GUI-Bibliothek schneller zum Ziel. Qt fetzt diesbezüglich, ist aber nur für C++ gut dokumentiert. Das lässt sich mit etwas Vorkenntnissen in C++ aber relativ einfach auf Python + Qt übertragen. Wenn Deine Pythonkenntnisse im Vgl. zu C++ dünn sind, nimm C++ und Qt.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1011
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Um einen Lüfter ein-/ausschalten zu können, kann man eine LOGO! mit Relaisausgängen verwenden.
Die Logo gibt es auch als 230V Version.

Logo kostet ca. 100€. Bekommt man auch gebraucht günstiger. Darauf achten, dass die CD beiliegt und ein Ethernet-Anschluss vorhanden ist. Dann kann man auch echte Taster anschließen und kann ohne GUI den Lüfter Ein-/Ausschalten. Programmiert wird die Logo grafisch mit der mitgelieferten Software Logosoft.

Die Logo kann man z.B. als Modbus-Master/Slave via TCP betreiben. Hat den Vorteil, dass die GUI unabhängig von der LOGO betrieben werden kann. Für Modbus gibt es eine Python Bibliothek (pymodbus). MQTT würde ich dafür nicht verwenden, da man sonst noch irgendwo einen Broker benötigt.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
anonym112

Danke für die Antworten

Wahrscheinlich werde ich dann bei C++ und QT bleiben. Die verschiedenen Platformen muss eh handeln?
Bin mir nur nicht sicher ob QT Lizenz technisch für mich das richtige ist. Da muss ich mal nochmal recherchieren.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Für Deine Verwendungszwecke sollte der Teil von Qt, der unter L/GPL3 daherkommt, völlig ausreichend sein. Du nutzt es ja nur intern, da sind OSS-Regeln ja eh erfüllt (Du hast Zugriff auf den Sourcecode). Anders sieht es aus, wenn Du die Anwendung weitergeben möchtest, dass geht dann nur mit dem Sourcecode. Oder halt mit der kommerziellen Lizenz, dann auch ohne Sourcecode.

Mit C++ würde ich wahrscheinlich sogar überlegen, die kleine Steuerapplikation statisch zu linken - da kommt zwar ein relativ großes Binary raus, allerdings hat das dann nur noch Abhängigkeiten gegen fundamentale Standard-APIs. Unter Windows ist so eine Anwendung über viele Releasezyklen lauffähig (APIs sind sehr stabil/konservativ), unter Linux zumindest bis zum nächsten Ausrollen einer fundamentalen Änderung (linux, glibc, X11/Wayland).
Aber Achtung - statisches Linken ist offiziell nicht empfohlen seitens Qt, und manche Dinge sind schlicht nicht verfügbar. Leider ist nicht sauber dokumentiert, was noch geht und was nicht. Wenn Dir das zu heisst ist, machs dynamisch, allerdings musst Du dann evtl. nach jedem größeren Distributionsupgrade die App neu linken. Ein Mittelweg wäre, die shared libs von Qt mit auszuliefern und nicht auf die Pakete der Linux-Distribution zu gehen (ist ein bisschen mehr bundling-Arbeit, geht aber z.B. mit AppImage leicht von der Hand, für Windows gibts windeployqt).
Antworten