Tout protocole de communication structure les données. C’est le rôle du contrôleur des 2 côtés de sérialiser et désérialiser les données du modèle…Citation:
La communication (en ASCII) ne doit pas structurer les données (voir MVC).
Version imprimable
Tout protocole de communication structure les données. C’est le rôle du contrôleur des 2 côtés de sérialiser et désérialiser les données du modèle…Citation:
La communication (en ASCII) ne doit pas structurer les données (voir MVC).
Bonjour mormic,
Sauf erreur, il n'y a que deux paramètres, alors j'ai supposé que le premier est un type d'action et le second une valeur liée à l'action, ce qui ne semble pas le cas dans l'exemple. je n'ai aucune idée de ce que signifie mémoire 2 ou manœuvre 5.
Si manœuvre 5 désignait une action particulière, autant lui donner un nom dans une énumération. Par exemple actOnTemp pour un collage de relais.
Dans la mesure où les différentes action sont inconnues, il est difficile d'être plus près des cas effectivement rencontrés. Par ailleurs, l'argument pourrait se présenter comme une ou plusieurs chaînes de caractères que la fonction devrait traduire. Des vérifications pourraient également êtes faites sur la validité des paramètres : gamme des n° de carte, gamme des n° de relais, état actuel du relais ciblé, heure < 24 etc. avant toute création éventuelle d'une nouvelle commande.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Prog_t prgs[100]; // ici en statique pour simplifier l'illustration uint8_t iprg = 0; // Prochain indice bool AddCommand(action_t a_act, uint8_t a_actval, uint8_t a_carte, uint8_t a_relais, uint8_t a_h, uint8_t a_mn) { if(iprg >= 100) return false; prgs[iprg].action = a_act; prgs[iprg].actparam = a_actval; prgs[iprg].iCarte = a_carte; // 0 si local prgs[iprg].iRelais = a_relais; prgs[iprg].h = a_h; prgs[iprg].mn = a_mn; iprg++; return true; } ... AddCommande(actOnTemp, 10, 5, 4, 13, 28); // Colle le relais 4 de la carte 5 pendant 10 s à partir de 13h28
Au lieu du tableau statique, une liste dynamique triée par h:mn serait certainement plus utile. Mais je ne donne ici qu'une piste, pas une solution clé en main.
Salut
Bonjour Guesset, merci pour cette aide.
Ma question première était à propos de l'utilisation du code ASCII, mais j'aurais peut être dû expliquer plus en profondeur mon objectif:
En mémoire flash d'un ESP32 jusqu'à 10 fichiers représentant 10 programmes horaires de 10 manoeuvres chacun peuvent être chargés.
Chaque manoeuvre est codée sur 8 octets, donc chaque fichier fait 80 octets.
Jusqu'à présent ces 8 octets par manoeuvre me suffisait, mais voulant faire évoluer mon système(qui ne se contentait que d'adresser des équipements locaux) j'ai eu besoin d'une adresse supplémentaire pour accéder à des équipements distants.
Ne voulant pas modifier une organisation qui fonctionnait, j'ai chercher un truc pour solutionner ce besoin nouveau.
Mon programme encode donc ces manoeuvres selon un protocole défini.
Puis, l'heure étant arrivée, décode les 8 octets pour exécuter la manoeuvre correspondante.
Mais, par exemple, pour actionner un équipement distant relais N°5 de la carte N° 4 pendant 10 secondes à 13:57 h -->D54101357 il faudrait 9 octets; d'où ma recherche pour compresser à 8 octets.
Je comprends bien que j'aurais dû y penser à l'analyse du projet, mais pour l'instant il n'est pas dans mon intention de remettre en question une structure fonctionnelle.
Aujourd'hui, j'ai un autre soucis: je n'arrive pas à charger les fichiers de programmes horaires en mémoire flash. Cela fonctionnait avec un ESP8266 mais avec un ESP32 cela coince. (j'ai lancé une autre discussion à ce propos).
Bonjour Jay,
Le protocole de communication structure les données... ...de communication :D et nullement les données utilisées hors communication. Ici, celles qui sont utilisées pour la programmation des relais n'ont pas la nécessité d'être sous forme de caractères sous prétexte que le protocole de communication s'appuie sur des caractères.
Salut