Bonjour, je suis actuellement en stage et je fais un petit bloquage sur
cet exercice donc jvous joint l'énoncé ci-dessous en espérant que quelqu'un
puisse m'aider à le résoudre ou a me faire comprendre qu'elle démarche je dois
suivre.
Toutes les remarques concernant cet exercices sont les bienvenues.
Merci.
Module de simulation de pulses de comptage de fluides.
Objectif:
Ecrire et mettre au point un module qui puisse émuler un débimètre cad un
compteur qui délivre des impulsions au passage d'un fluide,
cela dans le cadre du développement d'un outil de test en fin de production
des matériels A3B.
Spécifications:
Ce module écrit en C devra tourner en tache de fond sur la carte MULTIFONCTIONs,
au sein du programme chargé sur UPSD_ES.
Pour produire les pulses, il devra actionner un relais(ON/OFF) selon:
une fréquence, un rapport cyclique et une quantité.
Le mieux serait que l'initialisation et la conclusion se fasse en tache d'avant
plan et que le décomptage se fasse en routine d 'interruption timers.
BASEs
a/ actionner un relais
// Port B ( non bit adressable )
# define RELAIS_1_ON 0x01
# define RELAIS_2_ON 0x02
# define RELAIS_3_ON 0x04
# define RELAIS_4_ON 0x08
# define RELAIS_5_ON 0x10
# define RELAIS_6_ON 0x20
exemple :
PORT_B_OUT | = RELAIS_3_ON; // relais 3 ON
PORT_B_OUT & = ~RELAIS_3_ON // relais 3 OFF
b/ parametres statistiques de génération de pulses :
# define NB_VOIES_A_SCRUTER 6
struct typ_generation_pulses {
MOT PPL; // type débimètre
OCTET RAPPORT CYCLIQUE; // de 1 à 100
MOT DEBIT_SIMULE; // en pulse/minutes de 1 à 65535 PPM
(et autres si nécessaires)
}GENERATION_PULSES [NB_VOIES_A_SCRUTER];
Valeurs des débimètres ( pulse par litres) :
#define PPL_10 10
#define PPL_14 14
#define PPL_16 16
#define PPL_26 26
#define PPL_35 35
#define PPL_52 52
#define PPL_72 72
#define PPL_100 100
#define PPL_328 328
#define PPL_1400 1400
c/ paramètres dynamiques pour la livraison
struct demande_ivraison
{
OCTET no_livraison;
OCTET code_retour_fdl;
DBL_MOT DEMANDE_LIVR; //quantité à livrer en 1/100 de litres
DBL_MOT QTE_LIVREE;
int timer;
OCTET general;
OCTET bascule_faite;
}LIVRAISON_EN_COURS;
=> il y a un lien entre la qté demandée et le nombre de pulses à générer :
nb_pulses = (DEMANDE_LIVR /100) * PPL
d/ Timers :
La machine dispose d'interruptions où on peut gérer des timers qui
battent au choix : 1/4 ms, 1ms, 10ms, 256ms
par exemple LIVRAISON_EN_COURS.timer bat la 10ms
4/ appel de fonction et code retour :
prototype : OCTET genere_pulses (OCTET voie):
le parametre voie vaut de 1 à 6 code pour la voie actionnée
le code retour vaut :
0 si OK
autre valeur code erreur .(à definir)