Final (provisional) de esta historia, de hecho he tocado bien poca cosa, sólo he simplificado, mejorando así la consistencia y fiabilidad.
Definiciones:
- HDOP es el dato de calidad de recepción GPS/GNSS. Es mejor cuanto más bajo. Con buena recepción suele estar por debajo de 1,00. Se toma un valor de 5,00 como límite para determinar si hay que ignorar al GPS en cuestión (como si no estuviera).
- Canal es una conexión del dispositivo Ocenav al mundo exterior. Puede ser cableada (NMEA2000, Seatalk, NMEA0183 (1 a 3) o USB), o inalámbrica: WiFi.
Acciones globales con respecto a los datos GPS/GNSS:
- Supervisión del tiempo de vida de los datos del GPS válido. Este tiempo es de 5 segundos, es decir que al cabo de ese tiempo, Ocenav vuelve a habilitar la salida de datos GPS en todos los canales, y empieza a tomar datos de un posible GPS de respaldo en cualquier canal. Esto es un procedimiento controlado por un timer hardware.
- Si la calidad de datos (HDOP) recibidos por un canal es suficiente, se impide la salida de datos GPS por ese canal.
- Si la calidad de datos (HDOP) es mejor que el del GPS activo, se conmuta la recepción de GPS activo, y los datos de salida hacia los demás canales (excluyendo aquellos con GPS conectado de una mínima calidad) serán los del nuevo GPS validado.
Luego, esta es la forma de proceder en cada canal:
1) NMEA2000:
- Como en el mismo bus NMEA2000 pueden coexistir más de un GPS/GNSS, se tomarán los datos del mejor de ellos, pero no se transmitirán por allí mientras haya uno enviando con una mínima calidad HDOP.
- Si el usuario fuerza la generación de la declinación en el setup de Ocenav, se ignorará el dato de declinación que venga en el PGN 127258 (Magnetic variation). En su lugar, esa declinación será calculada por Ocenav y transmitida a los demás canales cada vez que se reciba el PGN 129029 (GNSS position data), puesto que este PGN contiene los datos necesarios (Coordenadas y fecha) para realizar el cálculo.
-En el caso de que un GPS conectado en NMEA2000 no entregue el dato de declinación (AIS en el caso de Onilum), Ocenav realizará el cálculo, pero no lo enviará a NMEA2000 en el PGN 127258 que es propio de un dispositivo GPS, sino que lo hará incluyendo ese dato en el PGN 127250 (Heading) tanto cuando se envíe el magnético como el verdadero.
2) Canales NMEA0183 (Cableados 1, 2 y 3, USB (REM072/ATM200), y WiFi):
- Algunos dispositivos GPS no envían ni la sentencia GGA ni GNS, siendo estas sentencias las que contienen el dato HDOP.
En este caso, se tomarán los datos GPS de la sentencia RMC si no existe ningún otro conectado en el sistema, pero serán retransmitidos también por el mismo canal. Si el GPS en cuestión acaba enviando GGA o GNS, se procederá como en el caso general: Bloqueando la salida en ese canal y manteniendo la salida hacia los demás.
- Cuando un GPS sea activo en un canal NMEA0183: Si el usuario fuerza la generación de declinación en el setup de Ocenav o el campo de declinación en la sentencia RMC recibida está vacío, esa declinación será calculada por Ocenav y transmitida a los demás canales NMEA0183 añadiéndola en la sentencia RMC. También generará el PGN 127258 (Magnetic variation) en NMEA2000 y el datagrama 0x99 correspondiente en Seatalk.
3) El viejecito Seatalk:
- Seatalk usa el datagrama 0x57 para transmitir HDOP y el número de satélites usado para el cáculo de la posición. Ocenav explora ese datagrama y valida el GPS si su HDOP es mejor que el mínimo (5m) en el caso de ser el único conectado, o mejor que el de otro posible GPS conectado en el sistema (cosa improbable ya que los GPS Seatalk - Raystar son viejos y de calidad bastante baja). En cualquier caso, si no hay otra cosa, Ocenav enviará esos datos GPS hacia los demás canales.
- De manera análoga a NMEA2000, si el usuario fuerza la generación de la declinación, Ocenav ignorará el datagrama 0x99 (Magnetic variation) que le llegue por Seatalk, y realizará el cálculo de la declinación cuando reciba la fecha y coordenadas (datagramas 0x56 - fecha, 0x50/051 o 0x58 - coordenadas). Esa declinación será transmitida a los demás canales NMEA0183 y 2000 en las sentencias RMC y PGN 127258.