Page 1 of 1

Automatic parameters calculation in an inductance coil

Posted: Tue Aug 20, 2013 6:09 pm
by Psychophanta

Code: Select all

;El programa permite conocer el valor de una induccion de una bobina dados sus parametros fisicos: numero de espiras, longitud de la bobina y diametro interior.
;Asimismo permite conocer cualquiera de esos 4 parametros dados 3 de ellos.
Define .d
#my0=4*#PI*1E-7; permeabilidad magnetica absoluta del vacio
Global myr=1.00000037;permeabilidad magnetica relativa del aire
Global d=0.15;diametro de la bobina en cm
Global l=2.4;longitud de la bobina en cm
Global n=40; numero de espiras
Global ind
Procedure.d CalculoBobina(myr.d,*d.double,*l.double,*n.double,Induccion.d=0)
  Protected s.d=#PI**d\d**d\d/4; superficie cubierta por cada espira
  Protected my.d=myr*#my0
  If *d\d>0 And *l\d>0 And *n\d>0
    Induccion=my**n\d**n\d*s/100/*l\d; en Henrios
    ProcedureReturn Induccion
  ElseIf *d\d<=0 And *l\d>0 And *n\d>0
    s=100**l\d*Induccion/my/*n\d/*n\d; en cm^2
    *d\d=2*Sqr(s/#PI); en cm
    ProcedureReturn *d\d
  ElseIf *l\d<=0 And *n\d>0
    *l\d=my**n\d**n\d*s/100/Induccion; en cm
    ProcedureReturn *l\d; en cm
  ElseIf *n\d<=0
    *n\d=10*Sqr(*l\d*Induccion/my/s)
    ProcedureReturn *n\d; numero de vueltas del hilo conductor
  EndIf
  ProcedureReturn 0
EndProcedure

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Option_induccion
  #Option_diametro
  #Option_vueltas
  #Option_longitud
  #String_induccion
  #String_diametro
  #String_longitud
  #String_vueltas
  #Text_9
  #String_my
  #Text_11
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure refresh()
  If GetGadgetState(#Option_induccion)
    ind=0
    ind=CalculoBobina(myr,@d,@l,@n)
    SetGadgetText(#String_induccion,StrD(ind*1000)); milihenrios   
  ElseIf GetGadgetState(#Option_diametro)
    d=0
    d=CalculoBobina(myr,@d,@l,@n,ind)
    SetGadgetText(#String_diametro,StrD(d)); cm
  ElseIf GetGadgetState(#Option_longitud)
    l=0
    l=CalculoBobina(myr,@d,@l,@n,ind)
    SetGadgetText(#String_longitud,StrD(l)); cm
  ElseIf GetGadgetState(#Option_vueltas)
    n=0
    n=CalculoBobina(myr,@d,@l,@n,ind)
    SetGadgetText(#String_vueltas,StrD(n)); vueltas
  EndIf
EndProcedure

Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 601, 633, 300, 203, "Calculo de valores de autoinduccion en una bobina",#PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    OptionGadget(#Option_induccion, 10, 50, 160, 20, "Autoinduccion en milihenrios")
    OptionGadget(#Option_diametro, 10, 90, 160, 20, "diametro de la bobina en cm")
    OptionGadget(#Option_vueltas, 10, 170, 160, 20, "numero de espiras")
    OptionGadget(#Option_longitud, 10, 130, 160, 20, "longitud de la bobina en cm")
    StringGadget(#String_induccion, 180, 50, 100, 20,"1", #ES_CENTER|#WS_BORDER)
    StringGadget(#String_diametro, 180, 90, 100, 20,StrD(d), #ES_CENTER|#WS_BORDER)
    StringGadget(#String_longitud, 180, 130, 100, 20,StrD(l), #ES_CENTER|#WS_BORDER)
    StringGadget(#String_vueltas, 180, 170, 100, 20,StrD(n), #ES_CENTER|#WS_BORDER)
    TextGadget(#Text_9,40, 8, 135, 20, "permeabilidad magnetica = ", #PB_Text_Center|#SS_CENTERIMAGE)
    StringGadget(#String_my, 175, 8, 100, 20,StrD(myr) , #ES_CENTER|#WS_BORDER)
    TextGadget(#Text_11, 10, 30, 90, 20, "Calcular:", #SS_CENTERIMAGE)
  EndIf
EndProcedure

ind=CalculoBobina(myr,@d,@l,@n)
OpenWindow_Window_0()
SetGadgetState(#Option_induccion,1):DisableGadget(#String_induccion,1)


SetGadgetText(#String_induccion,StrD(ind*1000)); milihenrios        

;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Option_induccion
        DisableGadget(#String_induccion,1);induccion
        DisableGadget(#String_diametro,0);diametro
        DisableGadget(#String_vueltas,0)
        DisableGadget(#String_longitud,0)
        ind=0
        ind=CalculoBobina(myr,@d,@l,@n)
        SetGadgetText(#String_induccion,StrD(ind*1000)); milihenrios        
      ElseIf EventGadget = #Option_diametro
        DisableGadget(#String_induccion,0);induccion
        DisableGadget(#String_diametro,1);diametro
        DisableGadget(#String_vueltas,0)
        DisableGadget(#String_longitud,0)
        d=0
        d=CalculoBobina(myr,@d,@l,@n,ind)
        SetGadgetText(#String_diametro,StrD(d)); cm
      ElseIf EventGadget = #Option_vueltas
        DisableGadget(#String_induccion,0);induccion
        DisableGadget(#String_diametro,0);diametro
        DisableGadget(#String_vueltas,1)
        DisableGadget(#String_longitud,0)
        l=0
        l=CalculoBobina(myr,@d,@l,@n,ind)
        SetGadgetText(#String_longitud,StrD(l)); cm
      ElseIf EventGadget = #Option_longitud
        DisableGadget(#String_induccion,0);induccion
        DisableGadget(#String_diametro,0);diametro
        DisableGadget(#String_vueltas,0)
        DisableGadget(#String_longitud,1)
        n=0
        n=CalculoBobina(myr,@d,@l,@n,ind)
        SetGadgetText(#String_vueltas,StrD(n)); vueltas
      ElseIf EventGadget = #String_induccion
        ind=ValD(GetGadgetText(#String_induccion))/1000
        refresh()
      ElseIf EventGadget = #String_diametro
        d=ValD(GetGadgetText(#String_diametro))
        refresh()
      ElseIf EventGadget = #String_longitud
        l=ValD(GetGadgetText(#String_longitud))
        refresh()
      ElseIf EventGadget = #String_vueltas
        n=ValD(GetGadgetText(#String_vueltas))
        refresh()
      ElseIf EventGadget = #Text_9
      ElseIf EventGadget = #String_my
        myr=ValD(GetGadgetText(#String_my))
        refresh()
      ElseIf EventGadget = #Text_11
      EndIf

    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow=EventWindow()
      If EventWindow=#Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver
;
;}



Re: Automatic parameters calculation in an inductance coil

Posted: Wed Sep 11, 2013 10:54 pm
by minimy
Muy interesante! Quiero decir..
Very interesting friend! Thank for share! :wink: