Page 1 sur 2

Publié : sam. 21/févr./2009 21:10
par chercheacomprendre

Code : Tout sélectionner

;programme de calcul d'inductance avec la formule de Nagaoka 

;code du 21 février 2009 

; fenetre élargie pour messages 
    
Define L.F 
Define A.D 
Define B.D 
Define C.D 
Define N.D 
Define K.D

Enumeration

#gadget

EndEnumeration



OpenWindow(-1, 0, 0, 280, 240, "Calcul de self à air", $CF0001) ; fenetre principale 

TextGadget(11, 0, 20,   200, 30, "    Diamètre du mandrin en mm") ;a 
TextGadget(12, 0, 50,  200, 30, "    Longueur de la self en mm") ;b 
TextGadget(13, 0, 80,  200, 30, "        Diamètre du fil en mm") ;c 
TextGadget(14, 0, 110,  200, 30, "             Nombre de spires") ;n 
TextGadget(15, 0, 140, 200, 30, "             Inductance en µH") ;L 
StringGadget(1, 200, 10,   50, 30, "") ;position a 
StringGadget(2, 200, 40,  50, 30, "") ;position b 
StringGadget(3, 200, 70,  50, 30, "") ;position c 
StringGadget(4, 200, 100,  50, 30, "") ;position n 
StringGadget(5, 200, 130, 50, 30, "") ;position L 




Repeat 
   A = ValD(GetGadgetText(1) ) 
   B = ValD(GetGadgetText(2) ) 
   C = ValD(GetGadgetText(3) ) 
   N = ValD(GetGadgetText(4) ) 
  

   ; conversion des cm en mm 
   A=A/10 
   B=B/10 
   C=C/10 

    
   ; calcul du rayon théorique suivant Nagaoka 
   A=(A+C)/2 
    
    
    
  ; ==========================tests pour coeficient K ============ 
  
    If (2*(a/b))=0 :K=1 : EndIf
    
    If (2*(a/b)) > 0.02 And (2*(a/b)) < 0.06 : K=0.97 : EndIf 
    
    If (2*(a/b)) > 0.07 And (2*(a/b)) < 0.11 : K=0.959: EndIf
    
    If (2*(a/b)) > 0.12 And (2*(a/b)) < 0.16 : K=0.939: EndIf
    
    If (2*(a/b)) > 0.17 And (2*(a/b)) < 0.21 : K=0.92 : EndIf 
    
    If (2*(a/b)) > 0.22 And (2*(a/b)) < 0.26 : K=0.902: EndIf 
    
    If (2*(a/b)) > 0.27 And (2*(a/b)) < 0.31 : K=0.884: EndIf
    
    If (2*(a/b)) > 0.32 And (2*(a/b)) < 0.41 : K=0.85 : EndIf 
    
    If (2*(a/b)) > 0.42 And (2*(a/b)) < 0.51 : K=0.818: EndIf 
    
    If (2*(a/b)) > 0.52 And (2*(a/b)) < 0.61 : K=0.789: EndIf
    
    If (2*(a/b)) > 0.62 And (2*(a/b)) < 0.71 : K=0.761: EndIf 
    
    If (2*(a/b)) > 0.72 And (2*(a/b)) < 0.81 : K=0.735: EndIf
    
    If (2*(a/b)) > 0.82 And (2*(a/b)) < 0.91 : K=0.711: EndIf
    
    If (2*(a/b)) > 0.92 And (2*(a/b)) < 1.01 : K=0.688: EndIf
    
    If (2*(a/b)) > 1.02 And (2*(a/b)) < 1.26 : K=0.638: EndIf 
    
    If (2*(a/b)) > 1.27 And (2*(a/b)) < 1.51 : K=0.595: EndIf 
    
    If (2*(a/b)) > 1.52 And (2*(a/b)) < 1.76 : K=0.558: EndIf
    
    If (2*(a/b)) > 1.77 And (2*(a/b)) < 2.01 : K=0.526: EndIf
    
    If (2*(a/b)) > 2.02 And (2*(a/b)) < 2.51 : K=0.472: EndIf
    
    If (2*(a/b)) > 2.52 And (2*(a/b)) < 3.01 : K=0.429: EndIf
    
    If (2*(a/b)) > 3.02 And (2*(a/b)) < 3.51 : K=0.394: EndIf 
    
    If (2*(a/b)) > 3.52 And (2*(a/b)) < 4.01 : K=0.365: EndIf
    
    If (2*(a/b)) > 4.02 And (2*(a/b)) < 5.01 : K=0.32 : EndIf
    
    If (2*(a/b)) > 5.02 And (2*(a/b)) < 6.01 : K=0.283: EndIf 
    
    If (2*(a/b)) > 6.02 And (2*(a/b)) < 7.01 : K=0.258: EndIf
    
    If (2*(a/b)) > 7.02 And (2*(a/b)) < 8.01 : K=0.237: EndIf 
    
    If (2*(a/b)) > 8.02 And (2*(a/b)) < 9.01 : K=0.219: EndIf 
    
    If (2*(a/b)) > 9.02 And (2*(a/b)) < 10.01: K=0.203: EndIf 
    
    If (2*(a/b)) > 10.02 And (2*(a/b)) < 25.01:K=0.105: EndIf  
    
    If (2*(a/b)) > 25.02 And (2*(a/b)) < 50.01:K=0.061: EndIf 
    
    If (2*(a/b)) > 50.02 And (2*(a/b)) < 75.01:K=0.043: EndIf
    
    If (2*(a/b)) > 75.02 And (2*(a/b)) < 100.01:K=0.035:EndIf
    
    If (2*(a/b)) > 100.02 And (2*(a/b)) < 200.01:K=0.019:EndIf 
    
    If (2*(a/b)) > 200.02 And (2*(a/b)) < 400.01:K=0.011:EndIf  
    
    
;===================================formule de Nagaoka ==================    
    
   L = (0.0395*(a*a)*(n*n)*K) / b 
   
   ; =============modif  a mettre apres la valeur calculée de L à essayer=========
   
 ; If n*c=b : TextGadget  (#gadget 0,190,200,30,"les spires sont jointives"): EndIf
  ; If n*c<b : textgadget ( #gadget,0,190,200,30, "les spires ne sont pas jointives"): EndIf
   If n*c>b : TextGadget  ( #gadget ,0,190,200,30, "erreur ! valeurs incompatibles.") :EndIf

  ;================================================================================= 
      
    
   If L <> AncienResultat 
      SetGadgetText(5, StrF(L,2) ) ; sortie du résultat position 5 avec que 2 chiffres apres la virgule 
   EndIf 
   AncienResultat = L    
    

Publié : sam. 21/févr./2009 21:36
par Jagang
Tu as oublié une virgule :

Code : Tout sélectionner

 If n*c=b : #setgadgettext  (#gadget 0,190,200,30,"les spires sont jointives"): EndIf 
après le #gadget
Ça donne :

Code : Tout sélectionner

 If n*c=b : #setgadgettext  (#gadget ,0,190,200,30,"les spires sont jointives"): EndIf 

Publié : sam. 21/févr./2009 21:49
par chercheacomprendre
Jagang a écrit :Tu as oublié une virgule :

Code : Tout sélectionner

 If n*c=b : #setgadgettext  (#gadget 0,190,200,30,"les spires sont jointives"): EndIf 
après le #gadget
Ça donne :

Code : Tout sélectionner

 If n*c=b : #setgadgettext  (#gadget ,0,190,200,30,"les spires sont jointives"): EndIf 
oui merci, mais je n'arrive pas a le faire tourner ces trois conditions, tant pis je laisse tomber, bon week end.

YB

Publié : sam. 21/févr./2009 21:53
par Jagang

Code : Tout sélectionner

;programme de calcul d'inductance avec la formule de Nagaoka

;code du 21 février 2009

; fenetre élargie pour messages
   
Define L.F
Define A.D
Define B.D
Define C.D
Define n.D
Define K.D

Enumeration
  
  #gadget
  #setgadgettext
  
EndEnumeration



OpenWindow(-1, 0, 0, 280, 240, "Calcul de self à air", $CF0001) ; fenetre principale

TextGadget(11, 0, 20,   200, 30, "    Diamètre du mandrin en mm") ;a
TextGadget(12, 0, 50,  200, 30, "    Longueur de la self en mm") ;b
TextGadget(13, 0, 80,  200, 30, "        Diamètre du fil en mm") ;c
TextGadget(14, 0, 110,  200, 30, "             Nombre de spires") ;n
TextGadget(15, 0, 140, 200, 30, "             Inductance en µH") ;L
StringGadget(1, 200, 10,   50, 30, "") ;position a
StringGadget(2, 200, 40,  50, 30, "") ;position b
StringGadget(3, 200, 70,  50, 30, "") ;position c
StringGadget(4, 200, 100,  50, 30, "") ;position n
StringGadget(5, 200, 130, 50, 30, "") ;position L

TextGadget  (#gadget ,0,190,200,30,"")

Repeat
  EventID = WaitWindowEvent()
  
  A = ValD(GetGadgetText(1) )
  B = ValD(GetGadgetText(2) )
  C = ValD(GetGadgetText(3) )
  n = ValD(GetGadgetText(4) )
  
  ; conversion des cm en mm
  A=A/10
  B=B/10
  C=C/10
  
  
  ; calcul du rayon théorique suivant Nagaoka
  A=(A+C)/2
  
  
  
  ; ==========================tests pour coeficient K ============
  
  If (2*(A/B))=0 :K=1 : EndIf
  
  If (2*(A/B)) > 0.02 And (2*(A/B)) < 0.06 : K=0.97 : EndIf
  
  If (2*(A/B)) > 0.07 And (2*(A/B)) < 0.11 : K=0.959: EndIf
  
  If (2*(A/B)) > 0.12 And (2*(A/B)) < 0.16 : K=0.939: EndIf
  
  If (2*(A/B)) > 0.17 And (2*(A/B)) < 0.21 : K=0.92 : EndIf
  
  If (2*(A/B)) > 0.22 And (2*(A/B)) < 0.26 : K=0.902: EndIf
  
  If (2*(A/B)) > 0.27 And (2*(A/B)) < 0.31 : K=0.884: EndIf
  
  If (2*(A/B)) > 0.32 And (2*(A/B)) < 0.41 : K=0.85 : EndIf
  
  If (2*(A/B)) > 0.42 And (2*(A/B)) < 0.51 : K=0.818: EndIf
  
  If (2*(A/B)) > 0.52 And (2*(A/B)) < 0.61 : K=0.789: EndIf
  
  If (2*(A/B)) > 0.62 And (2*(A/B)) < 0.71 : K=0.761: EndIf
  
  If (2*(A/B)) > 0.72 And (2*(A/B)) < 0.81 : K=0.735: EndIf
  
  If (2*(A/B)) > 0.82 And (2*(A/B)) < 0.91 : K=0.711: EndIf
  
  If (2*(A/B)) > 0.92 And (2*(A/B)) < 1.01 : K=0.688: EndIf
  
  If (2*(A/B)) > 1.02 And (2*(A/B)) < 1.26 : K=0.638: EndIf
  
  If (2*(A/B)) > 1.27 And (2*(A/B)) < 1.51 : K=0.595: EndIf
  
  If (2*(A/B)) > 1.52 And (2*(A/B)) < 1.76 : K=0.558: EndIf
  
  If (2*(A/B)) > 1.77 And (2*(A/B)) < 2.01 : K=0.526: EndIf
  
  If (2*(A/B)) > 2.02 And (2*(A/B)) < 2.51 : K=0.472: EndIf
  
  If (2*(A/B)) > 2.52 And (2*(A/B)) < 3.01 : K=0.429: EndIf
  
  If (2*(A/B)) > 3.02 And (2*(A/B)) < 3.51 : K=0.394: EndIf
  
  If (2*(A/B)) > 3.52 And (2*(A/B)) < 4.01 : K=0.365: EndIf
  
  If (2*(A/B)) > 4.02 And (2*(A/B)) < 5.01 : K=0.32 : EndIf
  
  If (2*(A/B)) > 5.02 And (2*(A/B)) < 6.01 : K=0.283: EndIf
  
  If (2*(A/B)) > 6.02 And (2*(A/B)) < 7.01 : K=0.258: EndIf
  
  If (2*(A/B)) > 7.02 And (2*(A/B)) < 8.01 : K=0.237: EndIf
  
  If (2*(A/B)) > 8.02 And (2*(A/B)) < 9.01 : K=0.219: EndIf
  
  If (2*(A/B)) > 9.02 And (2*(A/B)) < 10.01: K=0.203: EndIf
  
  If (2*(A/B)) > 10.02 And (2*(A/B)) < 25.01:K=0.105: EndIf 
  
  If (2*(A/B)) > 25.02 And (2*(A/B)) < 50.01:K=0.061: EndIf
  
  If (2*(A/B)) > 50.02 And (2*(A/B)) < 75.01:K=0.043: EndIf
  
  If (2*(A/B)) > 75.02 And (2*(A/B)) < 100.01:K=0.035:EndIf
  
  If (2*(A/B)) > 100.02 And (2*(A/B)) < 200.01:K=0.019:EndIf
  
  If (2*(A/B)) > 200.02 And (2*(A/B)) < 400.01:K=0.011:EndIf 
  
  
  ;===================================formule de Nagaoka ==================   
  
  L = (0.0395*(A*A)*(n*n)*K) / B
  
  
  ; modifs texte a ajouter en bas apres résultat de L  (le 21-02)
  If n*C=B : texte1$="les spires sont jointives" : EndIf
  If n*C<B : texte1$="les spires ne sont pas jointives" : EndIf
  If n*C>B : texte1$="erreur ! valeurs incompatibles." :EndIf
  
  ;anti-scintillement
  If ancienTexte1$<>texte1$
    SetGadgetText(#gadget, texte1$)
    ancienTexte1$=texte1$
  EndIf
  
  
  If L <> AncienResultat
    SetGadgetText(5, StrF(L,2) ) ; sortie du résultat position 5 avec que 2 chiffres apres la virgule
  EndIf
  AncienResultat = L   
  
  
Until EventID = #PB_Event_CloseWindow
Voila
Tu peut aussi mettre "l'anti-scintillement" pour le résultat de l'inductance

Cordialement
Jagang

Publié : sam. 21/févr./2009 21:57
par chercheacomprendre
Jagang a écrit :
Voila
Tu peut aussi mettre "l'anti-scintillement" pour le résultat de l'inductance

Cordialement
Jagang
ok, super merci oui c'est bon je viens de le tester,

merci encore.

YB

Publié : sam. 21/févr./2009 22:00
par Jagang
Comment calcul tu les valeur de K ?

Publié : sam. 21/févr./2009 22:03
par chercheacomprendre
Jagang a écrit :Comment calcul tu les valeur de K ?
J'ai un tableau tableau de Nagaoka bien connu pour ses travaux sur les selfs, j'en ai pris une quarantaine car il y en a peut etre 500 dans son tableau, j'ai vérifié le résultat c'est bon a priori, encore merci j'ai chercher pas mal de temps sur ce truc la , je ne suis pas bien doué en informatique ...

bon week end
Yves.

Publié : sam. 21/févr./2009 23:09
par Backup
chercheacomprendre a écrit :je ne suis pas bien doué en informatique ...

bon week end
Yves.
ouaip c'est clair !! :lol:

faudrai voir a utiliser les Datas !! ils sont fait pour ça...
sans parler de StringField()

et du coup pas besoin d'un myriade de
IF Endif ;)

mais bon, faudrai voir a apprendre le Basic

et des cours concernant le basic t'apporteront les< bases
qui te permettront de comprendre les data, if, else , elseif etc .... ;)

lorsque je vois une structure de code comme ça

Code : Tout sélectionner

If (2*(a/b)) > 0.02 And (2*(a/b)) < 0.06 : K=0.97 : EndIf
   
    If (2*(a/b)) > 0.07 And (2*(a/b)) < 0.11 : K=0.959: EndIf
   
    If (2*(a/b)) > 0.12 And (2*(a/b)) < 0.16 : K=0.939: EndIf  
je me dit qu'il y a moyen de remplacer cres differentes valeur par des variables, puisque les lignes different seulement par ces valeurs

on retouve systematiquement

If (2*(a/b)) > 0.12 And (2*(a/b)) < 0.16 : K=0.939: EndIf

bref , pourquoi ne pas envisager un truc comme

If (2*(a/b)) > XXX And (2*(a/b)) < YYY : K=ZZZ: EndIf
et alors il suffirai de faire varier , les variables XXX , YYY,ZZZ

en mettant cette unique ligne dans une boucle !!

du coup une seule ligne de IF endif :)
...

Publié : sam. 21/févr./2009 23:34
par chercheacomprendre
Dobro a écrit : et alors il suffirai de faire varier , les variables XXX , YYY,ZZZ

en mettant cette unique ligne dans une boucle !!

du coup une seule ligne de IF endif :)
...
bonsoir, oui vous avez raison pour les tests, on pourrait les rentabiliser, je vais y réflechir pour eviter d'utiliser trop de papier .

bon week end

yves.

Publié : sam. 21/févr./2009 23:51
par Backup
.....

Publié : dim. 22/févr./2009 0:03
par chercheacomprendre
Dobro a écrit :un peu comme ça par exemple
oui merci pour les infos c'est super et avec vous ca ne traine pas ...

encore merci pour les codes .

Yves

Publié : dim. 22/févr./2009 0:03
par Anonyme
Dobro a écrit :
chercheacomprendre a écrit :je ne suis pas bien doué en informatique ...

bon week end
Yves.

Code : Tout sélectionner

If (2*(a/b)) > 0.02 And (2*(a/b)) < 0.06 : K=0.97 : EndIf
   
    If (2*(a/b)) > 0.07 And (2*(a/b)) < 0.11 : K=0.959: EndIf
   
    If (2*(a/b)) > 0.12 And (2*(a/b)) < 0.16 : K=0.939: EndIf  
je me dit qu'il y a moyen de remplacer cres differentes valeur par des variables, puisque les lignes different seulement par ces valeurs


2*(a/b) deviens constant durant les tests.

Donc :

Code : Tout sélectionner

ResConstant.f = (2*(a/b))

If ResConstant > 0.02 And ResConstant < 0.06 : K=0.97 : EndIf
   
    If ResConstant > 0.07 And ResConstant < 0.11 : K=0.959: EndIf
   
    If ResConstant > 0.12 And ResConstant < 0.16 : K=0.939: EndIf 
Voila , CAC* , utilise des titres plus explicites s'il te plaît.
c'est un forum d'entraide pour TOUS pas un self service ou une hotline.
On dois pouvoir facilement identifié le contenu du topic par son titre.
( efficace pour ceux qui utilisent la fonction recherché du forum...)
de même , ici , le tutoiement est de rigueur , on est pas au bureau. peu importe l'age , la classe sociale , l'ethnie... , ici , pas de différence.

@+

*CAC = chercheacomprendre

Publié : dim. 22/févr./2009 0:10
par chercheacomprendre
Cpl.Bator a écrit : Voila , CAC* , utilise des titres plus explicites s'il te plaît.
c'est un forum d'entraide pour TOUS pas un self service ou une hotline.
On dois pouvoir facilement identifié le contenu du topic par son titre.
( efficace pour ceux qui utilisent la fonction recherché du forum...)
de même , ici , le tutoiement est de rigueur , on est pas au bureau. peu importe l'age , la classe sociale , l'ethnie... , ici , pas de différence.

@+

*CAC = chercheacomprendre
ok, merci pour les tuyaux , j'en prend bien note.
encore merci
CAC

Publié : dim. 22/févr./2009 0:15
par Backup
dans mon dernier code , la boucle deviendrai donc

Code : Tout sélectionner

#formule.f= (2*(a/b))

For tt=1 To 32
    a1.F=ValF( StringField(aaa.s, tt, ","))
    b1.F=ValF(  StringField(bbb.s, tt, ","))
    c1.F=ValF( StringField(ccc.s, tt, ","))
    If #formule > a1.F And #formule<b1.F : K=c1.F : EndIf
Next tt
:)

Publié : dim. 22/févr./2009 0:19
par Anonyme
On vas bien finir par tout faire tenir sur une ligne :D