/////////////////////////////////////////////////// //// Simulation d'une pièce chauffée avec perte /// /// avec regulation de temperature /// /////////////////////////////////////////////////// function probleme1() //Entree des paramètres Umax=220 //tension maximale R=50 //resistance chauffante C=5e5 //capacité calorifique T=4*24*3600 //durée d'observation dt=T/10000 //pas de temps égal à la durée de chauffe G=20 //conductivité thermique W/K amplitude =10 //en degre C offset=15 //en degre C consigne_temperature=20 // consigne en degre C //choix du type de temperature exterieure // l1=list('Température extérieure',1,['sinus','triangulaire']); // choix_type_signal=x_choices('Choix du type de température extérieure',list(l1)); // texte_box=['Entrée des paramètres' // ' Variation de température extérieure' // ' Consigne de température intérieure'] // parametres_nom=['amplitude du signal extérieur (°C)';'offset du signal extérieur (°C)';'consigne de température (°C)'] // parametres_valeurs=[string(amplitude);string(offset);string(consigne_temperature)] // param=x_mdialog(texte_box,parametres_nom,parametres_valeurs) // amplitude=evstr(param(1)) // offset=evstr(param(2)) // consigne_temperature=evstr(param(3)) choix_type_signal=1 //Creation consigne nb_points=round(T/dt) disp('nombre de points de calcul : '+string(nb_points)) temps=[0:T/(nb_points-1):T]; //tracé du signal de commande //plot(temps,Text(temps,amplitude, offset, choix_type_signal),'r') global modec modec=0 //Resolution Temperature = resoud1(temps,R,C,Umax,G,amplitude,offset,consigne_temperature,choix_type_signal); plot(temps,Temperature,'r-.') endfunction ////////////////////////// // Creation de la consigne ///////////////////////// function y=consigne(Tc,T,U) global modec y=0 //initialisation à arret chauffage if (modec == 1 ) then //si mode chauffe, on continue de chauffer y=U end if ((Tc-T) > 3) then //si écart de température inférieur à 3, on chauffe et on passe en mode chauffe y=U modec=1 end if ( (Tc - T) < 0 ) then //si on dépasse la cible on arrete de chauffer y=0 modec=0 end // disp(modec) endfunction function y=Text(t,amplitude,offset,choix) if choix == 1 then y=amplitude*sin(t*2*%pi/(3600*24))+offset else y(modulo(t,24*3600) <= 6*3600)= modulo(t(modulo(t,24*3600) <= 6*3600),24*3600)*amplitude/2/(6*3600)+offset y(modulo(t,24*3600) <= 18*3600 & modulo(t,24*3600) > 6*3600)= -(modulo(t(modulo(t,24*3600) <= 18*3600 & modulo(t,24*3600) > 6*3600),24*3600)-12*3600)*amplitude/2/(6*3600)+offset y(modulo(t,24*3600) <= 24*3600 & modulo(t,24*3600) > 18*3600)= (modulo(t(modulo(t,24*3600) <= 24*3600 & modulo(t,24*3600) > 18*3600),24*3600)-24*3600)*amplitude/2/(6*3600)+offset end endfunction /////////////////////////// // resolution //////////////////////////// // calcul de la variation de température // Création de la quantité de chaleur : Pr = R i^2 = u^2 / R : pas de temps assez petit pour avoir u constant // C dT/dt + G T = Pr + G Text => résolution de l'équa diff du 1er ordre function T=resoud1(t,R,C,Um,G,amplitude,offset,Tcons,choix_type) T=20*ones(length(t),1) //initialisation à 20° dt = t(2)-t(1); //pas de temps constant global modec; for i=2:length(t) Pr = consigne(Tcons,T(i-1),Um)^2 / R // calcul de la quantité de chaleur sur le pas de temps T(i)=T(i-1) + dt / C * ( Pr + G * (Text(t(i),amplitude,offset,choix_type)-T(i-1) )) // calcul de la nouvelle température end endfunction function main() rep=get_absolute_file_path("test_chauffage.sce"); importXcosDiagram(rep+"/chauffage3.zcos") xcos_simulate(scs_m,4); probleme1() endfunction main()