Grundlagen und Winkelberechnungen für H-H DiSEqC Motor Antennenanlagen

  • Das habe ich sowieso noch vor, daß nur die Satelliten angeboten werden, die am aktuellen Standort auch wirklich sichtbar sind.
    Aber im ersten Schritt wird jetzt erstmal die reine Positionierung gehen. Alles weitere, wie z.B. manuelles Positionieren, Feinjustieren und Abspeichern von festen Positionen kommt dann im nächsten Schritt...


    Alles klar, dann widme ich mich erst mal nur den Einganspost. ;)


    Albert

  • Klaus, den Code habe ich jetzt angepasst. Etwas spät, sorry. Alpha ist überall "Longitude - Setup.SiteLon", Delta "HourAngle" und den "NormalizeAngle" komplett entsorgt. Du willst dafür sorgen, dass nur die sichtbaren Satelliten angeboten werden, wie Du es immer anstellst.


    Text und bild wird noch nachgereicht, die beide Winkel passen aber bereits.


    Albert

  • Bevor ich den Text ändere, wäre es hilfreich zu wissen, ob auch USALS Motoren sich mit GotoX steuern lassen. So ich es gelesen habe, soll es beide geben. USALS ist aber ein proprietäres Protokoll den wir nicht kennen. Richtig?


    Albert

  • Bevor ich den Text ändere, wäre es hilfreich zu wissen, ob auch USALS Motoren sich mit GotoX steuern lassen. So ich es gelesen habe, soll es beide geben. USALS ist aber ein proprietäres Protokoll den wir nicht kennen. Richtig?


    "USALS" und "GotoX" ist genau das selbe. "USALS" ist halt ein geschützer Markenname, mehr nicht. Wobei der laut http://www.trademarkia.com/stab--usals-76275292.html bereits 2010 gelöscht wurde.


    Siehe auch http://en.wikipedia.org/wiki/U…Automatic_Location_System.


    Klaus

  • OK. Nach dem zweiten Link soll es egal sein ob USALS oder GotoX darauf steht. Funktionieren werden beide. Habe ich das richtig verstanden?


    Mager: "As it is not an open standard, for a receiver to carry the USALS logo it must undergo a certification test by STAB's laboratories. If successful the manufacturer can include a USALS settings entry in its own menu, as well as place the logo on the front of their unit. However, a large number of manufacturers of both receivers and motors provide compatible modes which have not received certification, leading to use of unofficial terms."


    and


    "USALS is a program and not a communication protocol. The USALS calculates the dish angular position given by the dish lon/lat and the position of the satellite in geostationary orbit. It then sends the angulare position to the positioner using the DiSEqC 1.2 protocol. This calculation is straight on using geometric calculations."


    Genau das machen wir auch, nur ein Touch einfacher. ;)


    Das bedeutet, ich muss weniger schreiben. ;)


    Albert

  • Klaus, kannst Du bitte den einschlägigen / verwendeten Codeschnipsel posten? Nächste Woche hätte ich etwas Zeit, Text und Grafik endgültig anzupassen (hoffe ich).


    Albert

  • Klaus, ich habe mir jetzt mal den Code von der VDR 2.1.1 geholt. In der positioner.c verlinkst Du auf dem Thread hier, aber unsere Bezeichnungen gehen dennoch auseinander. Gehen wir mal logisch die Sache durch und versuchen wir uns zu einigen.


    1. Der Winkel Alpha ist der Differenz zwischen die Längengrade (gemessen von Erdmittelpunkt) Orbitposition des Satellites zum Antennenstandort. double Alpha = RAD(Longitude - Setup.SiteLon); Mit "int cPositioner::CalcHourAngle(int Longitude)" berechnen wir aus Alpha den zugehörigen Motorwinkel (HourAngle).


    2. Der Winkel Delta ist der Motorwinkel zu demselben Satelliten. double Delta = RAD(HourAngle); Delta ist ein anderer Winkel als Alpha, er ist stets größer und nur bei null gleich Alpha. Mit "int cPositioner::CalcLongitude(int HourAngle)" berechnen wir aus dem Motorwinkel das Orbitposition des Satellites.


    3. Der Winkel des maximal sichtbaren Satellitenkreises ist auch eine Art HourAngle, deswegen ist im Allgemeinen an der Winkelbezeichnung Delta nichts auszusetzen.


    4. Warum ist bei SAT_VISIBILITY_LAT > 81 Delta = RAD(145); und nicht Delta = DEG(0); oder einfach 0? Das erscheint mir unlogisch.


    5. NormalizeAngle nehme ich wieder rein, denn bei CalcLongitude(int HourAngle) und HorizonLongitude(ePositionerDirection Direction) hat es seine Berechtigung, wenn die Antenne zwischen 115°E und 115°W sich befindet. Die geografische Länge ist von dem Nullmeridian bis 180°E, bzw. 180°W definiert, wobei West negativ gerechnet wird. In dem genannten Bereich wäre damit ein Überschlag über 180° ohne NormalizeAngle möglich.


    6. Du wolltest den Winkel auf dem sichtbaren Satellitenkreises begrenzen. Eine solche Begrenzung habe ich nicht gefunden. Sinnvoll wäre vielleicht eine Winkelbegrenzung auf dem technischen Motorwinkel, bzw. auf dem max. sichtbaren Satellitenkreises, je nachdem was kleiner ist. Der Motorwinkel 65° ist auch keine Absolution, ich habe schon welche gesichtet, die mit 75° Winkel angegeben sind. Eine Abfrage des technischen Motorwinkel wäre vielleicht auch noch sinnvoll.


    Für’s Code schlage ich also das vor:



    Keine Sorge, die Funktionalität ist dasselbe, nur die Winkelbezeichnungen sind konsequenter.


    Albert

  • Klaus, was kostet eine Antwort!?


    Albert


  • Mit der Namensänderung bin ich einverstanden.


    Zitat


    4. Warum ist bei SAT_VISIBILITY_LAT > 81 Delta = RAD(145); und nicht Delta = DEG(0); oder einfach 0? Das erscheint mir unlogisch.


    Ich weiß nicht mehr, wer es gesagt hat, aber mit RAD(145) soll es wohl einen stetigeren Übergang geben.
    Ich bleibe mal bei RAD(145), bis jemand schlüssig zeigen kann, daß ein anderer Wert besser ist.


    Zitat


    5. NormalizeAngle nehme ich wieder rein, denn bei CalcLongitude(int HourAngle) und HorizonLongitude(ePositionerDirection Direction) hat es seine Berechtigung, wenn die Antenne zwischen 115°E und 115°W sich befindet. Die geografische Länge ist von dem Nullmeridian bis 180°E, bzw. 180°W definiert, wobei West negativ gerechnet wird. In dem genannten Bereich wäre damit ein Überschlag über 180° ohne NormalizeAngle möglich.


    Ich sehe keinen Unterschied bzgl. NormalizeAngle() zwischen dem Code in Version 2.1.1 und deinem zuletzt geposteten.


    Zitat


    6. Du wolltest den Winkel auf dem sichtbaren Satellitenkreises begrenzen. Eine solche Begrenzung habe ich nicht gefunden. Sinnvoll wäre vielleicht eine Winkelbegrenzung auf dem technischen Motorwinkel, bzw. auf dem max. sichtbaren Satellitenkreises, je nachdem was kleiner ist. Der Motorwinkel 65° ist auch keine Absolution, ich habe schon welche gesichtet, die mit 75° Winkel angegeben sind. Eine Abfrage des technischen Motorwinkel wäre vielleicht auch noch sinnvoll.


    Der Benutzer kann den maximalen Motorwinkel im Setup einstellen.
    Oder wie meinst du das genau?


    Klaus

  • Mit der Namensänderung bin ich einverstanden.


    OK.


    Ich weiß nicht mehr, wer es gesagt hat, aber mit RAD(145) soll es wohl einen stetigeren Übergang geben.


    Das hat mit Übergang nichts zu tun.


    Ich bleibe mal bei RAD(145), bis jemand schlüssig zeigen kann, daß ein anderer Wert besser ist.


    Ich versuche es:


    1. HorizonLongitude ist ein Darstellungsbalken / Winkel für den max. sichtbaren Satelliten.
    2. Der Winkel ist ausschließlich von der geografischen Breite abhängig.
    3. HorizonLongitude ist am Äquator um die 81°, nimmt mit zunehmender Entfernung stetig ab und tangiert gegen null. Wo genau er null wird das berechne ich Dir.
    4. Du beschränkst ihn per Definition hart: #define SAT_VISIBILITY_LAT 810 // the absolute latitude beyond which no satellite can be seen (degrees * 10)


    Nach dem vier Punkten sagt die (meine) Logik: ich sehe erst dann keine Satelliten mehr, wenn HorizonLongitude null ist.


    Jetzt der mathematische Teil:


    1. HorizonLongitude wird aus Delta = acos(SAT_EARTH_RATIO / cos(RAD(Setup.SiteLat))); errechnet.
    2. Delta ist aus dem Kosinus Funktion dann null, wenn SAT_EARTH_RATIO / cos(RAD(Setup.SiteLat) eins ist.
    3. Das kann nur passieren, wenn Divident und Divisor gleich sind, also: SAT_EARTH_RATIO = cos(RAD(Setup.SiteLat))
    4. Damit hätten wir einen Kosinuswert gleich 0,1513, der zugehörige Breitengrad ist: 81,2977°


    Setze ich genau 81° Breite in die Gleichung ein, dann erhalten wir für HorizonLongitude einen Winkel von genau: 14,7202° (Delta).


    Willst Du immer noch bei RAD(145) bleiben oder doch null?


    Ich sehe keinen Unterschied bzgl. NormalizeAngle() zwischen dem Code in Version 2.1.1 und deinem zuletzt geposteten.


    Das hatte ich zwischenzeitig entsorgt, wird aber gebraucht.


    Der Benutzer kann den maximalen Motorwinkel im Setup einstellen.


    OK, das habe ich nicht gewusst.


    Albert


  • Damit wird nicht HorizonLongitude() limitiert, sondern das ist der maximale Wert, den die geographische Breite des Antennenstandortes annehmen kann, damit überhaupt noch ein Satellit sichtbar sein kann.


    Zitat

    Nach dem vier Punkten sagt die (meine) Logik: ich sehe erst dann keine Satelliten mehr, wenn HorizonLongitude null ist.


    HorizonLongitude() liefert nicht einen Wert zwischen +/-81 (bzw. 810, wegen der zehnfachen Auflösung), sondern die jeweiligen Längengrad-Werte der Satellitenpositionen, die vom aktuellen Standort aus gesehen gerade noch über dem Horizont sichtbar sind.



    Ich kann gerne für Standort-Breiten von über 81 Grad hier den Delta-Wert 0 nehmen. Ich hatte nur in Erinnerung, daß hier jemand ausdrücklich wollte, daß stattdessen 145 genommen wird, weil es "stetiger" wäre. Aber wenn sich derjenige nicht mehr meldet, um hier Widerspruch einzulegen, dann nehme ich halt wieder 0.


    Klaus


  • Ich kann gerne für Standort-Breiten von über 81 Grad hier den Delta-Wert 0 nehmen. Ich hatte nur in Erinnerung, daß hier jemand ausdrücklich wollte, daß stattdessen 145 genommen wird, weil es "stetiger" wäre. Aber wenn sich derjenige nicht mehr meldet, um hier Widerspruch einzulegen, dann nehme ich halt wieder 0.


    Hier ist übrigens die Stelle (evtl. auch die Postings davor und danach anschauen) wo es um dieses Thema ging. Vielleicht kannst du dich ja nochmal mit SHF kurzschließen und ihr einigt euch auf einen Wert. Mir persönlich ist es egal, da ich nicht an diese Grenze kommen werde ;-).


    Klaus

  • Damit wird nicht HorizonLongitude() limitiert, sondern das ist der maximale Wert, den die geographische Breite des Antennenstandortes annehmen kann, damit überhaupt noch ein Satellit sichtbar sein kann.


    Indirekt schon:


    Code
    if (abs(Setup.SiteLat) < SAT_VISIBILITY_LAT)
         Delta = acos(SAT_EARTH_RATIO / cos(RAD(Setup.SiteLat)));
      else
         Delta = RAD(145);


    HorizonLongitude() liefert nicht einen Wert zwischen +/-81 (bzw. 810, wegen der zehnfachen Auflösung), sondern die jeweiligen Längengrad-Werte der Satellitenpositionen, die vom aktuellen Standort aus gesehen gerade noch über dem Horizont sichtbar sind.


    Das ist mir bewusst.


    Hier ist übrigens die Stelle (evtl. auch die Postings davor und danach anschauen) wo es um dieses Thema ging. Vielleicht kannst du dich ja nochmal mit SHF kurzschließen und ihr einigt euch auf einen Wert.


    Noch weiter oben. Bei 81° Breite sind's 14,7202° und null bei 81,2977°. Danach würden wir schon bei 81,2978° einen Kosinuswert bekommen, der größer als ein ist. Das ist per Definition genau so unsinnig, wie z.B. mit null teilen. Jeder Compiler müsste es uns übel nehmen. Wer sich über der scheinbar großen Winkeldifferenz wundert: Kosinus ist eine quadratische Funktion (Satz des Pythagoras). Der Winkelbeschleunigung der Tangente ist am Wendepunkt am größten.


    Klar sind es nur Nuancen. Vielleicht liest SHF mit. Seine Meinung würde ich auch gern hören. Ich würde null favorisieren.


    Mir persönlich ist es egal, da ich nicht an diese Grenze kommen werde ;-).


    Es ist eine "ideale" Berechnung. Ich habe Zweifel daran, dass man selbst bei 80° reell empfangen kann.


    Albert

  • Es würde mich auch sehr interessieren, was mini73 dazu meint. Wenn ich mich richtig "irre": er ist Mathematiker und Programmierer.


    Langhaariger ist er auch. :D


    Albert

  • dann nehme ich halt wieder 0


    In der 2.1.2 ist aber immer noch


    Code
    Delta = RAD(145);


    drin.


    Albert

  • Die Änderung habe ich für Version 2.1.3 vorgesehen. Bisher hat sich ja leider sonst noch niemand dazu geäussert...


    OK. Leider.


    Klaus, wenn Du an dem Übergang Wert legst, dann schaue Dir das hier an:



    Ergebnis:


    Code
    0 0 809 -> -169
    0 0 810 -> -147
    0 0 811 -> -121
    0 0 812 -> -85
    0 0 813 -> 0


    Der letzte verwendbare Wert ist 81,2977°. Du arbeitest mit einer Stelle nach dem Komma, also:


    Code
    #define SAT_VISIBILITY_LAT 813   // the absolute latitude beyond which no satellite can be seen


    Albert

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!