Beiträge von ckr7 im Thema „ASCOM Treiberentwicklung, Arduino und Error handling“

    Nein, geht nicht.
    Eine Exception in NINA tut nur, wenn sie SOFORT geworfen wird. Also Du kannst z.B. irgendein feature abfragen, was true oder false zurück gibt. Z.B. war mein "mach-den-COM-port auf"-call erfolgreich oder nicht? Je nach response (also meistens wenn "false") kannst du dann eine Exception werfen.


    Aber es ist nicht möglich, einen Funktionsaufruf zu machen, auf das Ergebnis zu warten und dann zu entscheiden, ob Dir das Ergebnis gefällt oder nicht und DANN zu sagen "wirf 'ne Exception".
    Ich habe mit den NINA Leuten debattiert und die wollen so was nicht. Ich versteh's jetzt nicht wirklich , aber wenn sie nicht wollen, wollen sie nicht.
    Man kann da eventuell drum herum programmieren, aber mir langt jetzt auch die MessageBox. Ich sage slew auf irgendeinen Azimuth, prüfe auf ein "X" via ReceiveTerminated und wenn das NICHT kommt, dann war der slew erfolgreich. Wenn die Kuppel hängen bleibt, kriegt der Arduino das mit und schreibt eben dieses "X" raus.


    Aber auch hier nochmal danke für die Hilfe!
    Ich habe das zwar in der Doku gesehen, aber den Wald vor lauter Bäumen dann nicht...


    Grüsse
    Joerg

    Hmm...nun, es IST einfach, aber am Ziel bin ich noch nicht.

    Ich kann z.B, Folgendes tun:


    Code
    try
    {
        string response = serialPort.ReceiveTerminated(terminator);
    }
    catch (Exception e)
    {
        System.Windows.Forms.MessageBox.Show("timeout");
        throw new ASCOM.DriverException("timeout " + e);
    }

    Das tut auch, wenn der "terminator" nicht binnen timeout (default 5 Sek) kommt, dann triggered die Exception und meine MessageBox erscheint, aber NINA reagiert leider nicht (wie erhofft mit so einem roten popup). Finde ich jetzt merkwürdig, denn der Dome Driver tut an anderer Stelle im code exakt dasaselbe, wenn er nicht auf den für den Dome konfigurierten COM Port zugreifen kann.
    Dort geht es aber.


    Grüsse
    Joerg


    Edit:
    Ich habe im NINA discord gefragt - geht nicht, exceptions müssen entweder sofort triggern oder gar nicht. Eine "verzögerte" exception, wie ich sie wollte, ist nicht möglich.
    Schade, dann muss es bei der MessageBox bleiben. Besser als nix

    Hallo Alex


    danke für die Antwort.

    Ja, das ist eben so eine Sache mit den Methoden. Es findet ja erst mal gar keine Rückmeldung statt seitens Arduino.
    Ich nehme dort ohnehin nur zwei mögliche Kommandos entgegen. Einmal ein simples "P", was meine Kuppel auf die Parkposition fahren lässt und sonst ein "T nnn.nn", wobei nnn.nn ein float Wert zwischen 0 und 359.99 ist. Aber das war es auch schon, die Kommunikation mit dem ASCOM Treiber ist also unidirektional, sofern man es dann überhaupt Kommunikation nennen will.


    Das Problem ist also ein Grundsätzliches, denn mir ist weiterhin nicht klar, wie das bidirektional implementiert werden muss. Zwar habe ich Beispiele in Visual Basic gefunden, aber die helfen für die C# Implementierung leider nicht weiter. Wenn ich einfach wüsste, wie ich eine mögliche Rückgabe über den seriellen Port im ASCOM Treiber lesen kann, dann wäre der Rest wohl kein Problem. Ich müsste nur ein Signal definieren, was der Arduino sendet und mein ASCOM Treiber dann sehen und eine exception werfen kann.
    Ich bin mir sicher, dass es trivial ist. Aber halt erst, wenn man weiss, wie es geht :)


    Mit dem ascomtalk hatte ich überhaupt kein Glück. Ich habe mich dort schon vor etwa vier Monaten registriert, drei Mal eine Frage gestellt, welche drei Mal nicht publiziert wurde.
    Das waren völlig normale Fragen, also nichts, was irgendwie gegen Regeln verstossen würde. Am Ende dachte ich mir dann, dass ich das echt nicht brauche und habe den Account wieder gelöscht.


    Grüsse
    Joerg

    Ich bin (endlich) fertig mit meiner Gartensternwarte, der Antrieb der Kuppel läuft gut, gesteuert wird alles via Arduino. Den ASCOM Treiber habe ich in C# erstellt (aus dem ASCOM dome template).
    Auch das läuft wunderbar, die Kuppel dreht sauber synchron zum Teleskop, ich bin also am gewünschten Punkt angekommen - ich kann am Schreibtisch sitzen und alles fernsteuern :)


    Eine Sache ist aber noch offen, eventuell kann jemand helfen?


    Ich habe eine Überwachung im Arduino eingebaut. Wenn der Motor läuft, muss sich die Kuppel drehen (logisch...). Das wird mit einem Drehgeber kontrolliert (und zwar unabhängig von der Motorachse!).
    Wenn sich etwa zwei Sekunden nach Start des Motors die Position des Drehgebers nicht verändert hat, dann stimmt was nicht und der Motor stellt ab. Auch das klappt prima, aber.....ich sehe es nicht.


    In NINA gibt es ja diese roten/gelben/grünen Popups. Ich möchte also jetzt, dass im Falle von "Dach bewegt sich nicht" so ein rotes Popup in NINA erscheint. Aber wie macht man das?
    Es sind hier zwei Stufen im Spiel - zuerst muss der Arduino diesen Fehlerzustand an den ASCOM Treiber melden (wie?). Dann muss dieser seinerseits etwas tun, eine exception werfen, was NINA als Anlass für ein Popup erkennt.


    Grüsse
    Joerg