Ce post pour dépanner les utilisateurs d'un réseau en Seatalk
ng.
Copie du buffer des émissions en Seatalk ng |
Pour comprendre ce qui se passait sur le réseau, nous avons du lire les trames d'informations qui circulaient. Le but était de vérifier que les instruments recevaient les bonnes trames et le cas échéant bloquer / débloquer les messages.
Il est assez facile de lire les trames NMEA 0183, car elles sont affichées en clair dans la plupart des ordinateurs de bord. Pour Raymarine, il suffit d'aller dans le menu "entretien" et de sélectionner l'interface à lire (généralement NMEA in, Out ou Seatalk) et de lancer le buffer.
NMEA 0183
Le format des trames NMEA 0183 est le suivant :
$--123,x1,x2,x3,....., xn,a*hh
Avec 123, l'identifiant de la trame
x1 à xn les données propres à une trame
a*hh un contrôle sur la somme des données transmises
x1 à xn les données propres à une trame
a*hh un contrôle sur la somme des données transmises
Exemple ;
$--MVW,x.x,a,x.x,a*hh
5 informations séparées par des virgules :
$--MVW,x.x,a,x.x,a*hh
5 informations séparées par des virgules :
MVW correspond à une trame de données "Angle et vitesse du vent"
Angle du vent, de 0 à 360 degrés
Référence, R = Relative, T = Vraie,
Vitesse du vent,
Unité de vitesse du vent, K/M/N,
Etat, A = Données valides
Angle du vent, de 0 à 360 degrés
Référence, R = Relative, T = Vraie,
Vitesse du vent,
Unité de vitesse du vent, K/M/N,
Etat, A = Données valides
$--MVW335,R,11.0,N,A*08 se lit donc ;
Vent à 335°, donc bâbord 25° (par rapport à l'axe du
bateau)
R indique un vent relatif, donc un vent apparent
11,1 la vitesse du vent
N, le vent est en nds
A = données valides
Trames Raymarine |
Description |
AAM | Alarme d'arrivée à un point de route |
APB | Pilote automatique "B" |
BWC | Relèvement et distance au point de route |
BWR | Relèvement et distance au point de route sur la route loxodromique |
DBT | Profondeur sous sondeur |
DPT | Profondeur |
DSC | Données d'appel sélectif numérique |
DSE | Complément données de détresse |
DTM | Système géodésique de référence |
GBS | Données de détection de défaillance d'un satellite GPS |
GGA | Données point GPS |
GLC | Position géographique Loran C |
GLL | Latitude longitude de la position géographique |
GSA | Précision GPS et satellites actifs |
GSV | Satellites GPS en vue |
HDG | Déclinaison du cap et variation de la déclinaison |
HDT | Cap vrai |
HDM | Cap magnétique |
MDA | Météo composite |
MSK | Interface récepteur MSK |
MSS | État du signal du récepteur MSK |
MTW | Température de l'eau |
MWV | Angle et vitesse du vent |
RMB | Données minimum recommandées de navigation |
RMC | Données minimum recommandées spécifiques de transit GPS |
RSD | Données système Radar |
TTM | Message de cible poursuivie |
VHW | Cap et vitesse surface |
VLW | Distance parcourue sur l'eau |
VTG | Route et vitesse sur le fond |
XTE | Écart traversier calculé |
ZDA | Date et heure |
Seatalk ng
Pour le
Seatalk ng, c'est un peu plus difficile.
Nous avons toujours affaire à des trames, mais elles apparaissent en hexadécimal.
Nous avons toujours affaire à des trames, mais elles apparaissent en hexadécimal.
En
hexadécimal, on compte en base 16, donc les chiffres sont les suivants
:
1 2 3 4 5 6
7 8 9 A B C D E F
A =
10
F=
16
Pour
écrire 17 en hexadécimal on écrit 11, 26 on écrira 1A, 27 donnera
1B...
Le format des trames Seatalk ng est le suivant :
11AAAA22 FF AA AA AA AA AA FF FF
Avec 11, la priorité de la trame
AAAA l'identifiant du PGN, c'est le type d'information en fait
22 est l'adresse de la source d'information
FF est le SID
AA AA AA AA AA les informations à transmettre
FF FF non utilisé je crois
Attention, pour décoder l'hexadécimal il faut lire 4 caractères à la fois et inverser les 2 derniers avec les 2 premiers si ceux-ci sont plus petits.
Exemple 1 :
FF 18 03 9F EE FA FF FF
18 03 se lit 0318 et donne en décimal 792
Utiliser la fonction =HEXDEC("0318") de votre tableur préféré :)
Exemple 2:
FF 3B 02 36 EB FA FF FF
36 EB se lit 36EB et donne en décimal 14059
Exemple de trame complète;
09FD0204 FF 18 03 9F EE FA FF FF
09FD0204 FF 18 03 9F EE FA FF FF
09 => priorité 2
FD002 => PGN 130306
18 03 donne 15,84 nds
9F EE donne 359°
FA pour vent apparent
Le PGN 130306 correspond à une trame de données "Angle et vitesse du vent"
avec une vitesse à l'échelle 10 mm/s donc
formule =2*HEXDEC("0318")/100
car on divise par 100 pour avoir des m/s puis on multiplie par 2 pour avoir de nds
Angle du vent, de 0 à 360 degrés à l'échelle 0,0001 radian
donc formule =(HEXDEC("EE9F")/10000)*180/PI()
FA donne en binaire 11111010, prendre les 3 derniers digits, donc 010 et cela donne
en décimal 2
0 serait pour le vent vrai / Nord géographique
1 serait pour le vent vrai / Nord magnétique
2 pour le vent apparent
3 pour le vent vrai / axe du bateau
4 pour le vent vrai / cap de surface
Extrait des trames de notre ordinateur A125
Raymarine A125 | |||||
Emission Réception |
PGN Extrait |
N° PGN | Message NMEA | Commentaires | |
RX | 09F10D73 | 1F10D | 127245 | RSA | Rudder (Barre) |
RX / TX | 09F11273 | 1F112 | 127250 | HDG, HDM, HDT | Vessel Heading |
RX / TX | 09F50323 | 1F503 | 128259 | VHW | Speed, Water referenced |
TX / RX | 09F80104 | 1F801 | 129025 | GLL | Position, Rapid Update |
TX / RX | 09F80204 | 1F802 | 129026 | VTG | COG & SOG, Rapid Update |
TX / RX | 09FD0204 | 1FD02 | 130306 | VWR, VWT, MWD, MWV | Wind Data |
TX / RX | 0DF01004 | 1F010 | 126992 | ZDA, GLL | System Time |
RX / TX | 0DF50B23 | 1F50B | 128267 | DBT, DBS, DPT | Water Depth |
TX / RX | 0DF80504 | 1F805 | 129029 | GGA, GLL, RMC, ZDA | GNSS Position Data |
TX / RX | 0DF80904 | 1F809 | 129033 | Heure | Local Time Offset |
TX / RX | 0DF90304 | 1F903 | 129283 | APB, BWC, BWR, RMB, XTE | Cross Track Error |
TX / RX | 0DF90B04 | 1F90B | 129291 | VDR | Set & Drift, Rapid Update |
TX / RX | 0DFE1104 | 1FE11 | 130577 | Heading | Direction Data |
TX | 10F11A04 | 0F11A | 61722 | Tension ? | DC/DC 2 High side Current |
RX / TX | 19F51323 | 1F513 | 128275 | VLW | Distance Log |
RX | 15FD0723 | 1FD07 | 130311 | XDR, MTW, MDA | Environmental Parameters |
RX | 15FD0C23 | 1FD0C | 130316 | XDR, MTW, MDA | Temperature, Extended Range |
TX | 19F11A04 | 1F11A | 127258 | HDG | Magnetic Variation |
TX | 19FA0404 | 1FA0A | 129546 | GNSS RAIM Settings | Report the control parameters for a GNSS Receiver |
TX | 19FA0604 | 1FA06 | 129542 | GNSS Noise | Statistiques de bruit de pseudodistance GNSS |
RX | 1CFF0873 | 0FF08 | 65288 | Alarmes ? | apparently a proprietary datagram |
TX | 1CFF1F04 | 0FF1F | 65311 | HDT, RMC, VDR,VHW,VTG | Magnetic Variation (Raymarine) |
RX | 1CFF4F73 | 0FF4F |
65359 |
HDT, HDM | Pilot heading |
TX | 1CFF5204 | 0FF52 | 65362 | Test status hardware ? | apparently a proprietary datagram |
TX | 1CFF5404 | 0FF54 | 65364 | XYZ angle ? | apparently a proprietary datagram |
RX | 1DEFFF73 | 1EFFF | 126975 | Multi messages |
Pour utiliser les PGN, il reste à trouver quels sont les champs transmis dans la
trame et avec quelle échelle de lecture. Pour nous, c'était uniquement le
vent qui nous intéressait, donc le message MWV
en NMEA et le PGN 130306 en Seatalk ng.
Avec ce travail de fourmi, nous avons pu trouver que les messages MWV arrivaient bien
au pilote sur le réseau Seatalk ng et donc que notre anémomètre Nasa
Clipper était compatible avec notre pilote Raymarine.
Au lieu d'incriminer l'anémomètre, nous avons vérifié les
paramètres du pilote et bingo, il manquait la définition du bateau en
"Sailling boat" pour fonctionner en mode vent ...
Note sur le décodage des identifiants en Seatalk ng
L'identifiant est codé sur 29 bits
- Priorité 3 bits
- PGN 18 bits, dont 2 bits libres (en noir ci-dessous) et 16 fixés par la norme
- Adresse source 8 bits
Cela donne :
Msb : bits de poids fort, donc le plus grand
Lsb : bits de poids faible, le plus à droite
Exemple pour le vent, message identifié 09FD0204 sur le Raymarine (en
hexadécimal, ce que l'on lit à l'écran)
Sur 29 bits (en complétant donc les champs avec des 0 à gauche) on
obtient le tableau suivant
28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
Détail pour obtenir le tableau :
09 en hexadécimal donne 1001 en binaire donc sur 5 digits on complète
à gauche par un 0
28 | 27 | 26 | 25 | 24 |
0 | 1 | 0 | 0 | 1 |
23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 |
02 en hexadécimal donne 10 en binaire donc sur 8 digits on complète
à gauche par plusieurs 0
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
04 en hexadécimal donne 100 en binaire donc sur 8 digits on complète
à gauche par plusieurs 0
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
Lecture des informations :
Les 3 premiers digits définissent la priorité des messages.
ici on lit 010 donc priorité 2
Cela donne les tableaux suivants :
Binaire | Hexa | Décimales |
Binaires sur 3 digits |
||
010 01 | 09 | Priorité | 2 | 0 | 000 |
011 00 | 0C | Priorité | 3 | 1 | 001 |
011 01 | 0D | Priorité | 3 | 2 | 010 |
100 00 | 10 | Priorité | 4 | 3 | 011 |
101 01 | 15 | Priorité | 5 | 4 | 100 |
110 01 | 19 | Priorité | 6 | 5 | 101 |
111 01 | 1D | Priorité | 7 | 6 | 110 |
111 00 | 1C | Priorité | 7 | 7 | 111 |
Le PGN sur 18 digits :
25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 |
0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
Cela donne en décimal 130306
Votre tableur préféré ne donne probablement pas de résultat si le
nombre binaire dépasse 10 digits.
Pour contourner le souci, prendre les 10 premiers à gauche soit 01 11111101
Cela donne en décimal 509
Multiplier par 2 autant de fois que vous avez de digit non calculés à
droite. Ici il manque 8 digits, donc on multiplie par 256 cela donne 130304
Reste à ajouter les bits qui ne sont pas à zéro en partant de la
droite. Ici vous avez 10 en binaire à ajouter.
10 donne 2 en décimal, donc le nombre recherché est 130304 + 2 = 130306
(cqfd)
Lecture des alarmes :
PGN 65288 (0FF08) et format data
Byte 1 = FF Manufacture
Byte 2 = FC Manufacture & Industry Group
Byte 3 = Load Least significant byte
Byte 4 = Load Most significant byte
Byte 5 = FF Unused
Byte 6 = FF Unused
Byte 7 = FF Unused
Byte 8 = FF Unused
- Manufacturer (1851 pour Raymarine)
- Reserved 2 digits
- Industry code (4 pour Marine)
- SID 1 octet
- Alarm id 1 octet
- Alarm status 1 octet
- Alarm group 1 octet
- Alarm priority 2 octets
Alarm status
- 0 = condition non remplie
- 1 = condition remplie et non silencieuse
- 2 = condition remplie et silencieuse
- 0=No Alarm
- 1=Shallow Depth
- 2=Deep Depth
- 3=Shallow Anchor
- 4=Deep Anchor
- 5=Off Course
- 6=AWA High
- 7=AWA Low
- 8=AWS High
- 9=AWS Low
- 10=TWA High
- 11=TWA Low
- 12=TWS High
- 13=TWS Low
- 14=WP Arrival
- 15=Boat Speed High
- 16=Boat Speed Low
- 17=Sea Temp High
- 18=Sea Temp Low
- 19=Pilot Watch
- 20=Pilot Off Course
- 21=Pilot Wind Shift
- 22=Pilot Low Battery
- 23=Pilot Last Minute Of Watch
- 24=Pilot No NMEA Data
- 25=Pilot Large XTE
- 26=Pilot NMEA DataError
- 27=Pilot CU Disconnected
- 28=Pilot Auto Release
- 29=Pilot Way Point Advance
- 30=Pilot Drive Stopped
- 31=Pilot Type Unspecified
- 32=Pilot Calibration Required
- 33=Pilot Last Heading
- 34=Pilot No Pilot
- 35=Pilot Route Complete
- 36=Pilot Variable Text
- 37=GPS Failure
- 38=MOB
- 39=Seatalk1 Anchor
- 40=Pilot Swapped Motor Power
- 41=Pilot Standby Too Fast To Fish
- 42=Pilot No GPS Fix
- 43=Pilot No GPS COG
- 44=Pilot Start Up
- 45=Pilot Too Slow
- 46=Pilot No Compass
- 47=Pilot Rate Gyro Fault
- 48=Pilot Current Limit
- 49=Pilot Way Point Advance Port
- 50=Pilot Way Point Advance Stbd
- 51=Pilot No Wind Data
- 52=Pilot No Speed Data
- 53=Pilot Seatalk Fail1
- 54=Pilot Seatalk Fail2
- 55=Pilot Warning Too Fast To Fish
- 56=Pilot Auto Dockside Fail
- 57=Pilot Turn Too Fast
- 58=Pilot No Nav Data
- 59=Pilot Lost Waypoint Data
- 60=Pilot EEPROM Corrupt
- 61=Pilot Rudder Feedback Fail
- 62=Pilot Autolearn Fail1
- 63=Pilot Autolearn Fail2
- 64=Pilot Autolearn Fail3
- 65=Pilot Autolearn Fail4
- 66=Pilot Autolearn Fail5
- 67=Pilot Autolearn Fail6
- 68=Pilot Warning Cal Required
- 69=Pilot Warning OffCourse
- 70=Pilot Warning XTE
- 71=Pilot Warning Wind Shift
- 72=Pilot Warning Drive Short
- 73=Pilot Warning Clutch Short
- 74=Pilot Warning Solenoid Short
- 75=Pilot Joystick Fault
- 76=Pilot No Joystick Data
- 77=not assigned
- 78=not assigned
- 79=not assigned
- 80=Pilot Invalid Command
- 81=AIS TX Malfunction
- 82=AIS Antenna VSWR fault
- 83=AIS Rx channel 1 malfunction
- 84=AIS Rx channel 2 malfunction
- 85=AIS No sensor position in use
- 86=AIS No valid SOG information
- 87=AIS No valid COG information
- 88=AIS 12V alarm
- 89=AIS 6V alarm
- 90=AIS Noise threshold exceeded channel A
- 91=AIS Noise threshold exceeded channel B
- 92=AIS Transmitter PA fault
- 93=AIS 3V3 alarm
- 94=AIS Rx channel 70 malfunction
- 95=AIS Heading lost/invalid
- 96=AIS internal GPS lost
- 97=AIS No sensor position
- 98=AIS Lock failure
- 99=AIS Internal GGA timeout
- 100=AIS Protocol stack restart
- 101=Pilot No IPS communications
- 102=Pilot Power-On or Sleep-Switch Reset While Engaged
- 103=Pilot Unexpected Reset While Engaged
- 104=AIS Dangerous Target
- 105=AIS Lost Target
- 106=AIS Safety Related Message (used to silence)
- 107=AIS Connection Lost
- 108=No Fix
- 0=Instrument
- 1=Autopilot
- 2=Radar
- 3=Chart Plotter
- 4=AIS
Aucun commentaire:
Enregistrer un commentaire