Changeset 648 for BAORadio/libindi/libindi/drivers/telescope
- Timestamp:
- Mar 7, 2012, 6:19:29 PM (14 years ago)
- Location:
- BAORadio/libindi/libindi/drivers/telescope
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
BAORadio/libindi/libindi/drivers/telescope/BAO.cpp
r642 r648 43 43 init_properties(); 44 44 45 // Le bouton connect de la boîte de dialogue d'indi 8BAO45 // Le bouton connect de la boîte de dialogue d'indi_BAO 46 46 // est dans l'état IDLE au démarrage 47 47 … … 52 52 lastRA = 0.0; 53 53 lastDEC = 0.0; 54 55 // Jour julien de la derniÚre actualisation 56 54 57 JJAnc = 0.0; 55 58 56 59 // Variables d'état 57 60 58 currentSet = 0; // Variables internes d'Indi, ne pas toucher 59 lastSet = -1; // Variable interne d'Indi, ne pas toucher 61 currentSet = 0; 60 62 61 63 // Nombre d'antennes connectées … … 65 67 // Le mode tracking est activé par défaut 66 68 67 TrackingMode = 1; 69 TrackingMode = BAO_TRACKING; 70 71 // Méthode d'alignement par défaut 72 73 MethodeAlignement = SIMPLE; 68 74 69 75 // délais en sec entre deux actualisations 70 76 // dans les modes transit et tracking 71 77 72 ActualisationTMTransit = 15.0 * 60.0; // Délai entre 2 actualisations dans le mode transit 78 ActualisationTMTransit = 15.0 * 60.0; // Délai entre 2 actualisations dans le mode transit (en sec) 79 73 80 ActualisationTMTracking = 5.0; // " " tracking 74 81 … … 86 93 RealisationGoto = false; 87 94 88 // vauttrue si l'utilisateur demande l'annulation du mouvement en cours95 // = true si l'utilisateur demande l'annulation du mouvement en cours 89 96 90 97 Abort = false; 91 98 92 // vauttrue si l'utilisateur demande de mettre les antennes en mode park99 // = true si l'utilisateur demande de mettre les antennes en mode park 93 100 94 101 Park = false; 95 102 96 // vaut trueun objet est actuellement suivi par les antennes103 // = true si un objet est actuellement suivi par les antennes 97 104 98 105 Suivi = false; 99 106 100 // vaut true si l'utilisateur demande à sortirde l'application -> permet de fermer le thread107 // = true si l'utilisateur sort de l'application -> permet de fermer le thread 101 108 102 109 Exit = false; 110 111 // Initialisation des paramÚtres atmosphériques par défaut 103 112 104 113 Pression = 1013.0; … … 141 150 BAO::~BAO() 142 151 { 143 // On informe le thread que nous allons sortir152 // On informe le thread que nous allons sortir 144 153 145 154 Exit = true; … … 161 170 162 171 // Petit message à l'attention de l'utilisateur 163 // permet de savoir si le destructeur est bienatteint172 // permet de savoir si le destructeur a bien été atteint 164 173 165 174 IDLog("Sortie de indi_BAO\n"); … … 257 266 258 267 /************************************************************************************** 259 ** Initialisation de la boîte de dialogue INDI (suite)260 ** Vider tous les vecteurs268 ** Définition de tous les vecteurs de la boîte de dialogue INDI 269 ** Cette procédure doit être obligatoirement présente dans tous pilotes Indi 261 270 ** 262 271 ***************************************************************************************/ … … 271 280 IDDefSwitch(&ConnectSP, NULL); 272 281 IDDefText(&ObjectTP, NULL); 273 IDDefNumber(&EquatorialCoordsWNP, NULL); 274 IDDefNumber(&GeographicCoordsWNP, NULL); 275 IDDefNumber(&PressionTempWNP, NULL); 282 IDDefNumber(&EquatorialCoordsWNP, NULL); 276 283 IDDefSwitch(&OnCoordSetSP, NULL); 277 284 IDDefSwitch(&AlignmentSP, NULL); … … 282 289 IDDefNumber(&ActualisationNP1, NULL); 283 290 IDDefNumber(&ActualisationNP2, NULL); 284 } 285 286 287 /************************************************************************************** 288 ** Initialisation des vecteurs INDI 289 ** ParamÚtres par défaut 291 IDDefNumber(&PressionTempWNP, NULL); 292 IDDefNumber(&GeographicCoordsWNP, NULL); 293 } 294 295 296 /************************************************************************************** 297 ** Initialisation des vecteurs de la boîte Indi 298 ** Cette procédure doit être obligatoirement présente dans tous pilotes Indi 290 299 ** 291 300 ***************************************************************************************/ … … 333 342 ** En cas de changement de texte dans la boîte de dialogue (par exemple : changement du 334 343 ** nom de l'objet) alors suivre l'objet... 335 ** Cette fonction n'est pas encore utilisée 336 ** TODO: faut-il pouvoir modifier le nom de l'objet depuis la boîte ? 337 ** pas sûr que cela soit utile: kstars et BAOcontrol permettent de faire cela 344 ** Cette fonction n'est pas utilisée 345 ** TODO: faut-il proposer cette fonction depuis la boîte alors qu'il est déjà 346 ** possible de le faire depuis Kstars et BAOcontrol ? 347 ** 338 348 ** 339 349 ***************************************************************************************/ … … 372 382 ** Exemple : longitude, latitude, ar, dec etc...) -> prendre en compte les modifications 373 383 ** 384 ** const char *dev contient le nom du dispositif recevant le message (ici indi_BAO) 385 ** const char *name reçoit le nom de la rubrique modifiée par l'utilisateur 386 ** (ex : les coordonnées géographiques, les coordonnées horaires de l'objet etc...) 387 ** double names[] contient la liste de tous les champs modifiables dans chaque rubrique 388 ** (ex : longitude et latitude dans la rubrique coordonnées géographiques 389 ** char *values[] contient toutes les valeurs (numériques ou non) mais toujours exprimées 390 ** sous la forme d'une chaîne de caractÚres 391 ** 374 392 ***************************************************************************************/ 375 393 … … 400 418 if (!strcmp (name, GeographicCoordsWNP.name)) 401 419 { 402 // l'utilisateur a modifié un les coordonnées géographiques de la boite indi420 // l'utilisateur a modifié une des coordonnées géographiques de la boite indi 403 421 404 422 int i = 0, nset = 0; 405 423 406 424 // En cas d'erreur, on doit pouvoir sortir avec des paramÚtres par défaut 407 // ici la latitude et la longitude vondront 0.0425 // ici la latitude et la longitude valent 0.0 408 426 409 427 Latitude = 0.0; … … 412 430 // pour ce vecteur, on sait qu'il y a n éléments possibles 413 431 // Exemple pour la rubrique coordonnées géographique de la boîte indi 414 // il y a deux éléments : la longtude et la latitude 415 // pour la rubrique alignement, il y aen a trois par exemple : 416 // simple, affine et taki 432 // il y a deux éléments : la longitude et la latitude 433 // pour la rubrique alignement, il y a en a trois : simple, affine et taki 417 434 418 435 for (i = 0; i < n; i++) … … 425 442 if (eqp == &GeographicCoordsWN[0]) 426 443 { 427 // ici on a identifié la zone latitude de la boîte de dialogue428 // Value[i] contient la cha ine de caractÚre correspondante dans la boîte444 // ici on a identifié la zone latitude de la boîte de dialogue 445 // Value[i] contient la chaîne de caractÚre correspondante dans la boîte 429 446 // C'est la valeur saisie par l'utilisateur 430 447 … … 459 476 if (nset == 2) 460 477 { 461 // Vérification462 // IDLog("Geographic : RA %5.2f - DEC %5.2f\n", Latitude, Longitude);463 464 // nset vaut 2, onsommes donc sûrs qu'il n'y a pas de problÚme dans les valeurs478 // Vérification 479 // IDLog("Geographic : RA %5.2f - DEC %5.2f\n", Latitude, Longitude); 480 481 // nset vaut 2, nous sommes donc sûrs qu'il n'y a pas de problÚme dans les valeurs 465 482 // saisies par l'utilisateur 466 483 // voir le code plus haut pour comprendre... 467 484 468 // On change la couleur de la "diode" de la rubrique coordonnées géographiques de la boîte469 // en vert485 // On change la couleur de la "diode" de la rubrique coordonnées 486 // géographiques de la boîte en vert 470 487 471 488 GeographicCoordsWNP.s = IPS_OK; … … 478 495 { 479 496 // quelque chose cloche 480 // peut-être l'une des v eleurs saisies par l'utilisateur n'est-elle pas dans497 // peut-être l'une des valeurs saisies par l'utilisateur n'est-elle pas dans 481 498 // le bon intervalle ? ex : lat = 150° 482 499 … … 496 513 497 514 // c'est bon. On peut donc transmettre les nouvelles valeurs à la classe astro 498 // qui utilisera ces informations pur calculer l'azimut des objets et le t sl en particulier...515 // qui utilisera ces informations pur calculer l'azimut des objets et le temps sidéral local en particulier... 499 516 500 517 DefinirLongitudeLatitude(Longitude, Latitude); … … 533 550 else if (eqp == &EquatorialCoordsWN[1]) 534 551 { 535 // même chose pour la déclinaison552 // même chose pour la déclinaison 536 553 newDEC = values[i]; 537 554 … … 553 570 targetDEC = newDEC; 554 571 555 // on les affiche sdans les logs572 // on les affiche dans les logs 556 573 557 574 fs_sexa(RAStr, newRA, 2, 3600); … … 602 619 if (eqp == &PressionTempWN[0]) 603 620 { 604 // on a compris que l'utilisateur a vaitchangé l'ascension droite de l'objet621 // on a compris que l'utilisateur a changé l'ascension droite de l'objet 605 622 606 623 // on affecte la nouvelle valeur à newRA … … 649 666 if (!strcmp (name, ActualisationNP1.name)) 650 667 { 651 // on a ici exactement le même fonctionnement que précédem ent652 // on rà ©gle ici les valeurs des delais entre deux actualisations668 // on a ici exactement le même fonctionnement que précédemment 669 // on rÚgle ici les valeurs des délais entre deux actualisations 653 670 // de la position en mode transit et tracking 654 // retourne un message d'erreur si les durées ne sont pas exprimées655 // dans un intervalle > 0 .0et < 3600671 // Retourne un message d'erreur si les durées ne sont pas exprimées 672 // dans un intervalle > 0 et < 3600 656 673 657 674 double newAct1 = 1.0; … … 717 734 /************************************************************************************** 718 735 ** L'utilisateur clique sur l'un des boutons de la boîte Indi 719 ** 736 ** Même observation que pour la procédure précédente 737 ** 720 738 ***************************************************************************************/ 721 739 … … 767 785 return; 768 786 769 currentSet = get_switch_index(&AlignmentSP); 770 AlignmentSP.s = IPS_OK; 787 MethodeAlignement = get_switch_index(&AlignmentSP) + 1 ; 788 789 /*char chaine[100]; 790 sprintf(chaine, "****************************************** %i\n", MethodeAlignement); 791 IDLog(chaine);*/ 792 793 AlignmentSP.s = IPS_OK; 771 794 IDSetSwitch(&AlignmentSP, NULL); 772 795 773 for (int i=0; i<MAX ALIGNEMENTANTENNE; i++)774 { 775 switch ( currentSet)796 for (int i=0; i<MAXHOSTNAME; i++) 797 { 798 switch (MethodeAlignement) 776 799 { 777 800 case 1 : … … 846 869 ** l'utilisation d'un thread permet de contourner le problÚme de la fonction accept 847 870 ** qui est bloquante. 871 ** L'adresse IP de l'antenne qui a effectué la connexion est consignée dans la variable IP 872 ** de la structure Sockets. L'état de l'antenne (connected) est placée à true 848 873 ** 849 874 ***************************************************************************************/ … … 858 883 859 884 Sockets[SocketsNumber].IP = server.recupip(Sockets[SocketsNumber].new_sock); 860 861 Sockets[SocketsNumber++].Connected = true; 885 886 Sockets[SocketsNumber].AlignementAntenne->MethodeAlignement = MethodeAlignement; 887 888 Sockets[SocketsNumber++].Connected = true; 862 889 863 890 InitThreadOK = true; … … 894 921 /************************************************************************************** 895 922 ** Extraction de la position de l'antenne aprÚs l'envoi de la commande P 896 ** Le retour de la commande P est POSITION/valeur_az/valeur_alt/ 897 ** ExtractPosition retourne donc Valeur_az et Valeur_alt 923 ** Le retour de la commande P est POSITION/valeur_az/valeur_alt/ 924 ** Ce retour est envoyé dans la chaîne str 925 ** ExtractPosition retourne une structure Position contenant Valeur_az et Valeur_alt 926 ** Ex: ExtractPosition("POSITION/0100/0001/", result) retourne result.x=100 et result.y=1 898 927 ** 899 928 ***************************************************************************************/ … … 929 958 930 959 /************************************************************************************ 931 ** Cette procédure, aprÚs avoir appliqué la matrice de rotation aux coordonnées 932 ** visées par l'utilisateur, convertit les coordonnées équatoriales de l'objet visé 933 ** en unités de codeurs des paraboles 960 ** Cette procédure, aprÚs avoir appliqué la matrice de rotation aux coordonnées de l'objet 961 ** visées par l'utilisateur, effectue les conversions en unités codeurs des paraboles 934 962 ** (cà d en nb de tours des deux axes moteurs depuis la position PARK) 935 963 ** … … 954 982 if (Sockets[i].Connected) 955 983 { 956 newRA = newRA2;984 newRA = newRA2; 957 985 newDEC = newDEC2; 958 986 … … 960 988 // sur les coordonnées horaires de l'objet visé 961 989 962 // il faut vérifier auparav ent que la matrice de rotation est disponible990 // il faut vérifier auparavant que la matrice de rotation est disponible 963 991 // pour l'antenne i 964 992 965 993 if (Sockets[i].AlignementAntenne->Matrice_ok) 966 994 { 967 // On est bien dans le cas de l'al lignement AFFINE ou Taki995 // On est bien dans le cas de l'alignement AFFINE ou Taki 968 996 969 997 if (Sockets[i].AlignementAntenne->MethodeAlignement == AFFINE || 970 Sockets[i].AlignementAntenne->MethodeAlignement == TAKI)998 Sockets[i].AlignementAntenne->MethodeAlignement == TAKI) 971 999 { 972 1000 // On crée un vecteur avec pour coordonnées 973 1001 // x = Angle horaire de l'objet visé 974 // y = décl ainaison de l'objet1002 // y = déclinaison de l'objet 975 1003 // z = 1.0 976 1004 // Voir la documentation pour plus d'explications sur le calcul affine/taki … … 999 1027 // On récupÚre les nouvelles coordonnées. z ne nous intéresse pas 1000 1028 1001 newRA = VerifAngle(result.x +GetTSL());1029 newRA = VerifAngle(result.x + GetTSL()); 1002 1030 newDEC = result.y; 1003 1031 … … 1023 1051 } 1024 1052 } 1025 IDLog("Nouvelles Coordonnées AD =%s Dec = %s\n", DHMS(newRA*N180divPi, true).c_str(), DHMS(newDEC*N180divPi, false).c_str()); 1026 1027 1053 1028 1054 // Calcule la hauteur et l'azimut de la zone du ciel pointée (en fonction de la date et du lieu d'observation) 1029 1055 … … 1042 1068 1043 1069 // On constitue un vecteur vect 1044 // Les coordonnées du vecteur correspond ont à la position1045 // d'un point sur une sphÚre de rayon 11046 // avec une latitude = targetAlt et une longitude=targetAz 1047 // on reconnait bienles formules de passage des coordonnées1070 // Les coordonnées du vecteur correspondent à la position 1071 // d'un point défini par une latitude targetAlt et une longitude targetAz 1072 // sur une sphÚre de rayon 1. 1073 // On reconnaît les formules de passage des coordonnées 1048 1074 // sphériques aux coordonnées rectangulaires 1049 1050 1075 1051 1076 … … 1067 1092 targetAz = atan( result.y / result.x ); 1068 1093 1069 if (result.x < 0) targetAz +=Pi;1094 if (result.x < 0) targetAz += Pi; 1070 1095 } 1071 1096 else targetAz = Pidiv2; … … 1107 1132 1108 1133 1109 // Conversion des deux angles en pas codeurs1134 // Conversion des deux angles en pas codeurs 1110 1135 1111 1136 if ( targetAlt < HAUTMIN ) … … 1140 1165 //4000 pas pour 360° sur l'axe az 1141 1166 1142 Sockets[i].TargetPosition.x = (int) Arrondi( targetAz * 4000.0/ 360.0);1167 Sockets[i].TargetPosition.x = (int) Arrondi( targetAz * (double)NBREPASCODEURSAZ / 360.0); 1143 1168 1144 1169 // Message de debug 1145 1170 1146 IDLog("Nbre de pas codeurs Az = %i Alt = %i\n", Sockets[i].TargetPosition.x, Sockets[i].TargetPosition.y);1171 IDLog("Nbre de pas codeurs Az = %i Alt = %i\n", Sockets[i].TargetPosition.x, Sockets[i].TargetPosition.y); 1147 1172 } 1148 1173 } … … 1153 1178 1154 1179 /************************************************************************************ 1155 * Retourne le nombre d'antennes actuellement connectées1156 * 1180 ** Retourne le nombre d'antennes actuellement connectées 1181 ** 1157 1182 ************************************************************************************/ 1158 1183 … … 1187 1212 ** Procédure principale 1188 1213 ** Elle est appelée toutes les ms 1214 ** 1189 1215 ***************************************************************************************/ 1190 1216 … … 1199 1225 struct timezone tz; 1200 1226 1201 //si pas de connexion avec le se veur d'indi -> on sort1227 //si pas de connexion avec le serveur d'indi -> on sort 1202 1228 1203 1229 if (!is_connected()) return; … … 1227 1253 DefinirDateHeure(Annee, Mois, Jour, Heu, Min, Sec); 1228 1254 1229 // Puis on calule le temps sidéral local, le JJ etc.1255 // Puis on calcule le temps sidéral local, le JJ etc. 1230 1256 1231 1257 CalculTSL(); … … 1243 1269 Sockets[i].AlignementAntenne->TransmettreParametresClasseAstro(Annee, Mois, Jour, Heu, Min, Sec, Longitude, Latitude, Pression, Temp); 1244 1270 1245 Sockets[i].AlignementAntenne->ChargementParametresAlignement(Sockets[i].IP, "/home/" + (string)getenv("USER") + "/AlignementAntennes.cfg", targetRA * 15 * Pidiv180, targetDEC * Pidiv180); 1271 if (Sockets[i].AlignementAntenne->MethodeAlignement == SIMPLE ) 1272 { 1273 //IDLog("chargement simple\n"); 1274 Sockets[i].AlignementAntenne->ChargementParametresAlignement(Sockets[i].IP, "/home/" + (string)getenv("USER") + "/AlignementAntennesSIMPLE.cfg", targetRA * 15 * Pidiv180, targetDEC * Pidiv180); 1275 } 1276 else 1277 { 1278 // IDLog("chargement taki\n"); 1279 Sockets[i].AlignementAntenne->ChargementParametresAlignement(Sockets[i].IP, "/home/" + (string)getenv("USER") + "/AlignementAntennesTAKI.cfg", targetRA * 15 * Pidiv180, targetDEC * Pidiv180); 1280 } 1246 1281 } 1247 1282 } … … 1268 1303 1269 1304 ///////////////////////////////////////////////// 1270 // Début des échanges avec les micro contrÃŽleurs1271 1272 // Analyse des réponses des micro contrÃŽleurs1305 // Début des échanges avec les micro-contrÃŽleurs 1306 1307 // Analyse des réponses des micro-contrÃŽleurs 1273 1308 1274 1309 for (int i=1; i<SocketsNumber; i++) … … 1280 1315 string reponse, buffereponse; 1281 1316 1282 // on récupÚre la réponse du micro contrÃŽleur1317 // on récupÚre la réponse du micro-contrÃŽleur 1283 1318 1284 1319 Sockets[i].new_sock >> reponse; … … 1336 1371 if (reponse.find("POSITION") != string::npos) 1337 1372 { 1338 // Il y a une erreur signalée par le micro controleur1373 // Il y a une erreur signalée par le micro-contrÃŽleur 1339 1374 1340 1375 if (reponse.find("NACK") != string::npos) … … 1364 1399 { 1365 1400 // La fonction extractPositon confirme que les positions transmises 1366 // par le micro contrÃŽleur sont valides1401 // par le micro-contrÃŽleur sont valides 1367 1402 1368 1403 OnCoordSetSP.s = IPS_OK; … … 1393 1428 if (reponse.find("NACK") != string::npos) 1394 1429 { 1395 // Une erreur est retournée par le micro controleur concernant la commande Park1430 // Une erreur est retournée par le micro-contrÃŽleur concernant la commande Park 1396 1431 // On affiche le voyant Park en rouge dans la boîte indi... 1397 1432 … … 1418 1453 if (reponse.find("NACK") != string::npos) 1419 1454 { 1420 // Une erreur est retournée par le micro controleur concernant la commande Abort1455 // Une erreur est retournée par le micro-contrÃŽleur concernant la commande Abort 1421 1456 // On affiche le voyant Park en rouge dans la boîte indi... 1422 1457 … … 1443 1478 if (reponse.find("NACK") != string::npos) 1444 1479 { 1445 // Une erreur est retournée par le micro controleur concernant la commande Goto1480 // Une erreur est retournée par le micro-contrÃŽleur concernant la commande Goto 1446 1481 // On affiche le voyant Park en rouge dans la boîte indi... 1447 1482 … … 1452 1487 IDSetSwitch(&OnCoordSetSP, "ALERTE antenne %s : Erreur GOTO !\n", Sockets[i].IP.c_str()); 1453 1488 1454 // On déconnecte l'antenne. Elle ne semble pas en mesure d'ex ecuter les ordres goto1489 // On déconnecte l'antenne. Elle ne semble pas en mesure d'exécuter les ordres goto 1455 1490 1456 1491 DeconnecterSocket(i); … … 1460 1495 if (reponse.find("OK") != string::npos) 1461 1496 { 1462 // On a ici la confirmation que l'antenne 'i' a bien réalisé 1463 // le goto 1497 // On a ici la confirmation que l'antenne 'i' a bien réalisé le goto 1464 1498 1465 1499 // On prend note … … 1488 1522 } 1489 1523 1490 // Si le nombre d'antennes connectées est > 01524 // Si le nombre d'antennes connectées est > 0 1491 1525 // et que toutes les antennes connectées ont 1492 1526 // réalisé le goto alors... … … 1495 1529 { 1496 1530 // C'est bon ! Tout marche bien... 1497 // On actualise l'A R et la dec dans la boîte de dialogue1531 // On actualise l'AD et la Dec dans la boîte de dialogue 1498 1532 1499 1533 lastRA = targetRA; … … 1559 1593 Suivi = false; 1560 1594 1561 // On arrête l'enchaînement des actions 1562 // pour réaliser un goto 1595 // On arrête l'enchaînement des actions nécessaires à la réalisation d'un goto 1563 1596 1564 1597 RealisationGoto = false; … … 1617 1650 InitAntennes(); 1618 1651 1619 // Pour permettre de refaire un park1652 // Pour permettre de refaire un park 1620 1653 1621 1654 Park = false; … … 1629 1662 { 1630 1663 // Délais entre deux actualisations 1631 1632 double delai = ActualisationTMTransit / 3600.0 / 24.0; // Actualisation toutes les 15 minutes en mode transit (par défaut) 1633 1634 if (TrackingMode == 2) delai = ActualisationTMTracking / 3600.0 / 24.0; //et 5 secs en mode tracking (par défaut) 1635 1636 1637 // On actualise la position si le delai est dépassé 1664 1665 // Actualisation toutes les 15 minutes en mode transit (par défaut) 1666 1667 double delai = ActualisationTMTransit / 3600.0 / 24.0; 1668 1669 // et 5 secs en mode tracking (par défaut) 1670 1671 if (TrackingMode == BAO_TRACKING) delai = ActualisationTMTracking / 3600.0 / 24.0; 1672 1673 1674 // On actualise la position si le délai est dépassé 1638 1675 1639 1676 if (GetJJ() - JJAnc > delai) 1640 1677 { 1641 // Cette variable vau dra true lorsque le goto aura été réalisé1678 // Cette variable vaut true lorsque le goto a été réalisé 1642 1679 1643 1680 UpdatedGoto = false; … … 1706 1743 case 0 : 1707 1744 { 1708 // On doit in tialiser l'acknowledge à false1745 // On doit initialiser l'acknowledge à false 1709 1746 1710 1747 Sockets[i].ack_pos = false; … … 1765 1802 1766 1803 // Les erreurs graves s'accumulent. Pas de réponse aprÚs plusieurs minutes 1767 // Il faut déconnecter l'antenne1804 // -> Il faut déconnecter l'antenne 1768 1805 if (Sockets[i].AnomaliesExecution > MAXANOMALIES) 1769 1806 { … … 1772 1809 OnCoordSetSP.s = IPS_ALERT; 1773 1810 1774 //Message à l'attentnio de l'utilisateur 1811 //Message à l'attention de l'utilisateur 1812 1775 1813 IDSetSwitch(&OnCoordSetSP, "Erreur sur l antenne %s : pas d acknowledge recu apres l ordre POSITION. \ 1776 1814 Deconnexion de l antenne.", Sockets[i].IP.c_str()); 1777 1815 1778 1816 // On déconnecte l'antenne 1817 1779 1818 DeconnecterSocket(i); 1780 1819 } … … 1792 1831 // Tout vas bien 1793 1832 // On ne consigne aucune anomalie 1833 1794 1834 Sockets[i].AttenteExecution = 0; 1795 1835 Sockets[i].AnomaliesExecution = 0; 1796 1836 1797 1837 //On passe à l'étape suivante 1838 1798 1839 Sockets[i].etape++; 1799 1840 } … … 1812 1853 1813 1854 // On consigne une erreur grave. L'antenne tarde à répondre 1855 1814 1856 Sockets[i].AnomaliesExecution++; 1815 1857 } … … 1817 1859 // Aucune réponse de l'antenne depuis plusieurs minutes 1818 1860 // On la déconnecte 1861 1819 1862 if (Sockets[i].AnomaliesExecution > MAXANOMALIES) 1820 1863 { … … 1824 1867 1825 1868 //Message d'erreur 1869 1826 1870 IDSetSwitch(&OnCoordSetSP, "Erreur sur l antenne %s : la position retournee n est pas valide. \ 1827 1871 Deconnexion de l antenne.", Sockets[i].IP.c_str()); 1828 1872 1829 1873 //Déconnexion de l'antenne 1874 1830 1875 DeconnecterSocket(i); 1831 1876 } … … 1898 1943 if (Sockets[i].AttenteExecution > MAXATTENTE) 1899 1944 { 1900 // On prolonge l'attente afin de recevoi tun GOTO OK1945 // On prolonge l'attente afin de recevoir un GOTO OK 1901 1946 1902 1947 Sockets[i].etape = 5; … … 1905 1950 } 1906 1951 1907 // On déconnecte l'antenne s'il n'y a pas de co onfirmation du goto au bout de 2 minutes1952 // On déconnecte l'antenne s'il n'y a pas de confirmation du goto au bout de 2 minutes 1908 1953 if (Sockets[i].AnomaliesExecution > MAXANOMALIESGOTO) 1909 1954 { … … 1927 1972 1928 1973 /////////////////////////////////////// 1929 // Traitement de l'étape 3 de la réalisation d'un goto1974 // Réalisation d'un goto - traitement de l'étape 3 1930 1975 // On place cette partie du traitement en dehors du switch et de la boucle 1931 // pour pouvoir envoyer les ordresgotos à toutes les antennes lorsque l'on a la confirmation1932 // qu'elles sont toutes prêtes à ex ecuter cet ordre (être à l'étape 3 pour un socket)1976 // pour pouvoir envoyer les gotos à toutes les antennes lorsque l'on a la confirmation 1977 // qu'elles sont toutes prêtes à exécuter cet ordre (être à l'étape 3 pour un socket) 1933 1978 // -> meilleure synchronisation 1934 1979 … … 2004 2049 /************************************************************************************** 2005 2050 ** Mode transit ou tracking 2051 ** 2006 2052 ***************************************************************************************/ 2007 2053 … … 2011 2057 { 2012 2058 // Transit 2059 2013 2060 case BAO_TRANSIT: 2014 2061 2015 // Eteindre les voyants dans la boîte de dialogue Indi2062 // Ãteindre les voyants dans la boîte de dialogue Indi 2016 2063 EquatorialCoordsWNP.s = IPS_BUSY; 2017 2064 AbortSlewSP.s = IPS_IDLE; … … 2026 2073 InitAntennes(); 2027 2074 2028 // On garde la trace du début du Goto pour encha iner les actualisations2075 // On garde la trace du début du Goto pour enchaîner les actualisations 2029 2076 2030 2077 JJAnc = GetJJ(); … … 2036 2083 // Mode transit activé 2037 2084 2038 TrackingMode = 1;2085 TrackingMode = BAO_TRANSIT; 2039 2086 2040 2087 // On suit un objet … … 2053 2100 2054 2101 // Tracking 2102 2055 2103 case BAO_TRACKING: 2056 2104 2057 //Eteindre les voyants dans la boîte de dialogue Indi 2105 // Ãteindre les voyants dans la boîte de dialogue Indi 2106 2058 2107 EquatorialCoordsWNP.s = IPS_BUSY; 2059 2108 AbortSlewSP.s = IPS_IDLE; … … 2070 2119 ADDEC2Motor(targetRA, targetDEC); 2071 2120 2072 TrackingMode = 2;2121 TrackingMode = BAO_TRACKING; 2073 2122 2074 2123 Suivi = true; … … 2088 2137 /************************************************************************************** 2089 2138 ** Connexion / Déconnexion avec le télescope 2139 ** 2090 2140 ***************************************************************************************/ 2091 2141 … … 2270 2320 2271 2321 // problÚme 1 : si deltaAz > à un demi-tours - soit 2000 pas codeur alors 2272 // on fait le trajet dans lesens inverse pour aller plus vite2322 // on fait le trajet en sens inverse pour aller plus vite 2273 2323 2274 2324 // problÚme 2 : Passage au méridien … … 2278 2328 2279 2329 // ne pas faire des tours complets en Az pour rien... 2330 2280 2331 while (deltaAz > NBREPASCODEURSAZ) deltaAz -= NBREPASCODEURSAZ; 2281 2332 2282 2333 // Doit résoudre tous les problÚmes concernant l'azimut... 2334 2283 2335 if (deltaAz > NBREPASCODEURSAZ / 2 ) 2284 2336 { … … 2313 2365 { 2314 2366 //Il ne faut exécuter la fonction qu'une seule fois 2367 2315 2368 static int isInit = 0; 2316 2369 -
BAORadio/libindi/libindi/drivers/telescope/BAO.h
r642 r648 57 57 58 58 int sendalertes; // une requête 'send' a généré une erreur sur le réseau 59 int AttenteExecution; // L'antenne parvient-elle à ex ecuter un cycle de commandes ?59 int AttenteExecution; // L'antenne parvient-elle à exécuter un cycle de commandes ? 60 60 int AnomaliesExecution; // Erreur critique. L'antenne ne répond plus ! 61 int etape; // étape dans le cycle de commandes/réponses entre PC et micro controleurs61 int etape; // étape dans le cycle de commandes/réponses entre PC et micro-contrÃŽleurs 62 62 63 63 bool Connected; // le micro-contrÃŽleur est-il connecté ? 64 64 bool PosValides; // le micro-contrÃŽleur a-t-il donné une position des moteurs valide ? 65 65 bool ack_status; // Etat des acknowledges ? 66 bool ack_pos; // le PC a-t-il reçu une confirmation du micro controleurs aprÚs un ordre POSITION ?67 bool ack_park; // le PC a-t-il reçu une confirmation du micro controleurs aprÚs un ordre PARK ?68 bool ack_abort; // le PC a-t-il reçu une confirmation du micro controleurs aprÚs un ordre ABORT ?69 bool ack_goto; // le PC a-t-il reçu une confirmation du micro controleurs aprÚs un ordre GOTO ?66 bool ack_pos; // le PC a-t-il reçu une confirmation du micro-contrÃŽleurs aprÚs un ordre POSITION ? 67 bool ack_park; // le PC a-t-il reçu une confirmation du micro-contrÃŽleurs aprÚs un ordre PARK ? 68 bool ack_abort; // le PC a-t-il reçu une confirmation du micro-contrÃŽleurs aprÚs un ordre ABORT ? 69 bool ack_goto; // le PC a-t-il reçu une confirmation du micro-contrÃŽleurs aprÚs un ordre GOTO ? 70 70 bool GotoOk; // Est-ce que le dernier goto est OK ? 71 71 72 72 Position TargetPosition; // Position à atteindre 73 Position Pos; // derniÚre position retournée par le micro contrÃŽleur73 Position Pos; // derniÚre position retournée par le micro-contrÃŽleur 74 74 75 75 Alignement *AlignementAntenne; // Contient les paramÚtres d'alignement de l'antenne … … 79 79 // Le PC et les antennes communiquent par le biais du port 8000 sur le réseau Ethernet 80 80 81 ServerSocket server( 8000);81 ServerSocket server( BAO_PORT ); 82 82 83 83 class BAO : public Astro … … 206 206 double lastDEC; // ...et la déclinaison 207 207 double JJAnc; // Sauvegarde du jour julien lors de la derniÚre actualisation de la position (fct Goto) 208 double ActualisationTMTransit; // Délai entre deux actualisations dans les modes transit 209 double ActualisationTMTracking; // " " " tracking 208 double ActualisationTMTransit; // Délai entre deux actualisations dans les modes transit (en sec) 209 double ActualisationTMTracking; // " " " tracking (en sec) 210 210 double Longitude; // Longitude et latitude du lieu d'observation 211 211 double Latitude; … … 221 221 222 222 int currentSet; // mode de suivi actuel - tracking ou transit 223 int lastSet; // Variable interne de l'interface indi - ne pas toucher224 int TrackingMode; // 1 : Transit 2: Tracking223 int MethodeAlignement; // Méthode d'alignement 224 BAO_STATUS TrackingMode; // Mode de suivi actuellement activé 225 225 }; 226 226
Note:
See TracChangeset
for help on using the changeset viewer.
