Forum: PC-Programmierung Grafische Programmierung


von Horst (Gast)


Lesenswert?

Hallo zusammen!
Ich habe ein Bus-System für eine Modelleisenbahn-Anlage eines bekannten 
entwickelt. Diese bekommt ihre Befehle über die serielle Schnittstelle 
eines PC. Unter Zeitdruck vor einer Ausstellung habe ich die PC-Software 
mit den mir verfügbaren und mir gewohnten Mitteln geschrieben: In PHP 
und MySQL.
Es lief reibungslos ohne Zwischenfälle, aber es ist einfach nicht das 
Wahre.
Die grundsätzlichen Funktionen waren die Darstellung eines Gleisbildes 
und den dazugehörigen Buttons zur Steuerung, sowie eine Datenbank mit 
dem aktuellen Status jeder Weiche etc.

Womit programmiert man soetwas "richtig"?
Ich kann nicht viel mehr als C und PHP (inkl MySQL), bin aber gewillt, 
mich in dazu benötigte objektorientierte Sprachen (am besten basierend 
auf C) einzuarbeiten.

MfG,
Horst

von Karl H. (kbuchegg)


Lesenswert?

So schwer mir das auch fällt, aber bei den Stichworten "Windows" und 
"grafische Oberfläche programmieren" führt meiner Meinung nach 
mitlerweile kein Weg mehr an C# vorbei.

Lass dich nicht vom Namen täuschen: C# hat mehr mit Java zu tun als mit 
C. Aber so wild sind die Unterschiede auch wieder nicht. An einem 
vernünftigem Buch, welches dich durch C# und vor allen Dingen der .Net 
Klassenbibliothek leitet führt sowieso kein Weg vorbei.

C# ist in der Hinsicht immer noch besser, als das was Microsoft als 
'managed C++' bezeichnet - ein Krüppel der weder C++ noch sonst 
irgendeine andere Sprache ist. Und C++ mit der MFC willst du 
wahrscheinlich nicht mehr antun.

zu C++ gibt es dann noch einige andere Frameworks, die absolut brauchbar 
sind. Zb Qt. Aufwand und lernen muss man aber da wie dort und C# (bzw. 
.Net) hat dann halt den Vorteil, dass der ganze graphische Unterbau dort 
sauber eingebaut ist und vom Hersteller des graphischen Systems gewartet 
wird.

von Robert L. (lrlr)


Lesenswert?

also das ist jetzt "kurios"


also gerade in DIESEM Zusammenhang ist doch eine WEB-basierte Geschichte 
ideal

Steuerung der Modelleisenbahn mit z.b.  IPad

anzeige von Status der weichen/Ampeln auf einem andere PC (z.b großen 
display) für die zuschauer

speichern des ganzen in (MySQL) Datenbank: als LOG (um bei Kollisionen 
die Ursache  feststellen zu können)

ich kann im ausgangsposting auch nirgends etwas von WINDOWS lesen...

von Karl H. (kbuchegg)


Lesenswert?

Robert L. schrieb:

> ich kann im ausgangsposting auch nirgends etwas von WINDOWS lesen...

Oops, du hast recht.
Da hab ich was gelesen, was gar nicht dort steht.

von Udo S. (urschmitt)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Lass dich nicht vom Namen täuschen: C# hat mehr mit Java zu tun als mit
> C. Aber so wild sind die Unterschiede auch wieder nicht. An einem
> vernünftigem Buch, welches dich durch C# und vor allen Dingen der .Net
> Klassenbibliothek leitet führt sowieso kein Weg vorbei.

Da ich in der Richtung leider (gottseidank?) noch ziemlich jungfräulich 
bin.
Was gibts denn für Empfehlungen hier für .net oder c# Literatur.
Mit Schwerpunkt auf "strukturiert" und "fundiert", nicht Anfänger.

von Robert L. (lrlr)


Lesenswert?

ist halt die frage was einfacher ist
eine (komplett) neue Programmiersprache lernen

oder das was du jetzt hast, "aufpeppen" und z.b. auf html5 mit WebSocket 
umbaust (das geht angeblich auch mit PHP)

von Arno (Gast)


Lesenswert?

Hallo Udo,

wenn es Platformunabhängig sein darf, dann nimm doch Java. Das Buch 
"Java ist auch eine Insel" bietet eine prima Einführung. Ist auch frei 
im Netz einsehbar. Die freie Eclipse IDE ist ebenfalls Klasse und 
schreibt den Code fast von alleine.

Gruß,
Arno

von Sam .. (sam1994)


Lesenswert?

Robert L. schrieb:
> also gerade in DIESEM Zusammenhang ist doch eine WEB-basierte Geschichte
> ideal
>
> Steuerung der Modelleisenbahn mit z.b.  IPad

Dafür bräuchte man erstmal einen Server.


Mit C# dürfted dein Vorhaben deutlich einfacher sein, als mit PHP. 
Solang keine aufwändige grafische Animtionen vorkommen, kann man das 
auch ganz ohne MDX bzw. XNA machen.

von MrBlabla (Gast)


Lesenswert?

Hast du schonmal an RocRail gedacht? Ist eine freie Modellbahnsteuerung, 
geschrieben in C/C++, aufgebaut als Client/Server-Modell, d.h. du hast 
einen Steuer-PC als Server und kannst vom Laptop, PC, Smartphone, Tablet 
die Anlage steuern. Link: http://wiki.rocrail.net/doku.php

...man muss das Rad ja nicht mehrmals erfinden :-)

von Udo S. (urschmitt)


Lesenswert?

Arno schrieb:
> Hallo Udo,
>
> wenn es Platformunabhängig sein darf, dann nimm doch Java. Das Buch
> "Java ist auch eine Insel" bietet eine prima Einführung. Ist auch frei
> im Netz einsehbar. Die freie Eclipse IDE ist ebenfalls Klasse und
> schreibt den Code fast von alleine.

Hallo Arno,
das ist jetzt ein Missverständis. Mit Eclipse und Java verdiene ich mir 
inden letzten Jahren meine Brötchen, allerdings Backoffice ohne 
Benutzeroberfläche :-)
Mir gings eher drum für .net und c# Tipps für richtig gute Bücher 
und/oder Tutorials zu bekommen, und zwar für jemand der programmieren 
kann, nur die Sprache und die API noch nicht kennt.
Aber da es hier doch nicht um PC Programmierung geht wollen wir den 
Thread nicht kapern.
Trotzdem Danke.

von Horst (Gast)


Lesenswert?

Webbasiert ist in diesem Fall eine wunderbare Lösung gewesen, vor allem 
weil auch alle anderen Funktionen (sämtlicher Schnickschnack auf der 
Anlage) auch von einem anderen PC aus bedient werden konnten. Basiert 
hatte das alles auf easyPHP.
ABER:
-Das senden eines Befehls wurde in einem anderen Frame ausgeführt, was 
ein Neuladen des Gleisbildes überflüssig machte. Eine Rückmeldung 
(andere grafische Darstellung) musste aber trotzdem irgendwie erfolgen. 
-> doch jedesmal neu laden.

-Zeitverzögerung: Ich habe ALLES ausprobiert, aber das laden des 
Gleisbildes dauerte einfach zu lange, genauer gesagt nicht das Laden, 
sondern es brauchte zu lange bis nach dem Laden und korrektem Anzeigen 
der Browser fertig war um einen neuen Befehl entgegen zu nehmen. (alle 
üblichen Browser ausprobiert, Rechner 2GHz Core2Duo). Ich rede hier von 
Klick > 1sek > Befehl ausgeführt > 1sek > Gleisbild wieder sichtbar > 
3-5sek > Browser ist fertig. Das machte ein flüssiges Arbeiten 
unmöglich.

-Man ist Grafisch eingeschränkt. Ich habe z.B. mit 3 Ebenen <div> 
arbeiten müssen, was ca. 300 Objekte zur Folge hatte. Eine Version mit 
Tabelle wurde wegen massiven Schwierigkeiten bei der Positionierung 
aufgegeben.



C# hatte man mir auch empfohlen, deshalb mal einige Fragen an Kenner:
-Kann ich Bitmaps an beliebiger Stelle (natürlich in einem begrenzen 
Bereich) einfügen?
-Kann ich Punkte/Linien/Polygone/Text frei Positionieren und während der 
Laufzeit ändern/löschen?
-Funktionen aufrufen durch Klick auf Punkte/Linien/Polygone/Text?
-Anbindung an Datenbank, um über mehrere Rechner zugreifen zu können?

Verzeiht mir die dümmlich klingenden Fragen, aber vielleicht kann mir 
ein Wissender die Fragen beantworten. Ich habe selbst schon im Internet 
gesucht, aber als Prä-Neuling ist das Suchen, vor Allem aber das Deuten 
der Antworten etwas schwierig.

mit Java habe ich mich noch nicht befasst, dadurch möchte ich die o.g. 
Fragen auch für Java stellen.

Fertige Lösungen habe ich mir auch angesehen, allerdings habe ich da 
meist Probleme mein eigenes Bus-System einzubinden. Weiterhin sind diese 
Programme meist nur auf Fahrbetrieb ausgelegt, ich aber auch zig 
Sonderfunktionen habe, die ich nicht ins Gleisbild einbauen kann.

von dall (Gast)


Lesenswert?

Da könnte man eher an der Clientseite der Webanwendung optimieren... 
stichwort AJAX. dAnn musst du dein PHP-Zeug nicht komplett wegwerfen, 
solange es halbwegs brauchbar geschrieben ist.
Oder wie gesagt doch schauen ob man RocRail erweitern kann.

von Sam .. (sam1994)


Lesenswert?

Horst schrieb:
> C# hatte man mir auch empfohlen, deshalb mal einige Fragen an Kenner:
> -Kann ich Bitmaps an beliebiger Stelle (natürlich in einem begrenzen
> Bereich) einfügen?
Ja, Zeichnenfunktionen bei allen Steuerelementen vorhanden.
> -Kann ich Punkte/Linien/Polygone/Text frei Positionieren und während der
> Laufzeit ändern/löschen?
Man könnte es durch ein gefärbtes Steuerelement realisieren, das ist 
aber nicht zu empfehlen. Die Punkte sollten in einer Tabelle gespeichert 
werden und beim Refresh neugezeichnet werden.
> -Funktionen aufrufen durch Klick auf Punkte/Linien/Polygone/Text?
Das fällt unter Kollisionserkennung und wirst du selbst machen müssen 
(aufgrund von Mausposition).
> -Anbindung an Datenbank, um über mehrere Rechner zugreifen zu können?
Ja, darüber weiß ich aber selbst nichts genaueres.

Der Umfang .Nets ist riesig, selten muss man etwas selbst 
implementieren.

von Gernot B. (gernot_b)


Lesenswert?

Horst schrieb:

> -Das senden eines Befehls wurde in einem anderen Frame ausgeführt, was
> ein Neuladen des Gleisbildes überflüssig machte. Eine Rückmeldung
> (andere grafische Darstellung) musste aber trotzdem irgendwie erfolgen.
> -> doch jedesmal neu laden.

Das macht man über JavaScript ("AJAX" wie schon oben gesagt). Frameworks 
wie jQuery machen das einfach, sauber und ratzfatzschnell.

> -Zeitverzögerung: Ich habe ALLES ausprobiert, aber das laden des
> Gleisbildes dauerte einfach zu lange, genauer gesagt nicht das Laden,
> sondern es brauchte zu lange bis nach dem Laden und korrektem Anzeigen

Mit JavaScript je nach Antwort die Seite umzubauen ist sicher viel 
flotter.

> -Man ist Grafisch eingeschränkt. Ich habe z.B. mit 3 Ebenen <div>
> arbeiten müssen, was ca. 300 Objekte zur Folge hatte. Eine Version mit
> Tabelle wurde wegen massiven Schwierigkeiten bei der Positionierung
> aufgegeben.

Klar, HTML ist eben nicht dafür gedacht, Grafiken zu zeichnen. Da nimmt 
man z.B. SVG oder Canvas und zeichnet das am Client entsprechend um. 
Oder nach deiner Methode hätte man das Bild am Server als Bild gerendert 
und direkt ausgeliefert.

> C# hatte man mir auch empfohlen, deshalb mal einige Fragen an Kenner:
> -Kann ich Bitmaps an beliebiger Stelle (natürlich in einem begrenzen
> Bereich) einfügen?
> -Kann ich Punkte/Linien/Polygone/Text frei Positionieren und während der
> Laufzeit ändern/löschen?
> -Funktionen aufrufen durch Klick auf Punkte/Linien/Polygone/Text?
> -Anbindung an Datenbank, um über mehrere Rechner zugreifen zu können?

Kann ich dir leider nicht beantworten, aber mit JavaScript + Server geht 
das alles recht leicht, sauber und schnell.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.