Feel free to modify, adapt or use the code or even finish off the project! Hopefully someone will benefit from it...
Project Arc-Flash - Main.pb
Code: Select all
; Title: Project Arc-Flash v0.02 Alpha
; Author: Teddy Rogers
; Email: teddyrogers@tuts4you.com
; Website: https://tuts4you.com/download.php?view.3611
XIncludeFile "Project Arc-Flash.pbf" ; GUI built using the Form Designer tool
Global kV.d
Global mm.d
Global Error_Flag = #False
OpenMainWindow() ; Open the main window
SetGadgetText(#String_Voltage, "11")
SetGadgetText(#String_Gap, "152")
SetGadgetText(#String_Current, "13.51")
SetGadgetText(#String_Rating, "5.02")
SetGadgetState(#Combo_Equipment, 0)
SetGadgetState(#Combo_Grounding, 0)
SetGadgetState(#Combo_Equipment_Type, 1)
SetGadgetText(#String_Distance_Person, "500")
SetGadgetText(#String_Distance_Factor, "0.973")
SetGadgetText(#String_Arching_Time, "0.10")
SetGadgetState(#TrackBar_Current, 75)
SetGadgetState(#TrackBar_Integer, 15)
; log10(Ia)=K+0.662log10(Ibf)+0.0966V+0.000526G+0.5588Vlog10(Ibf)−0.00304Glog10(Ibf)
Procedure Arcing_Current(EventType)
Protected ArcFaultCurrent.d, NormalisedEnergy.d, IncidentEnergy.d, FlashBoundary.d
Equipment_Type(EventType)
If Error_Flag = #True
Error_Flag = #False
ProcedureReturn
EndIf
kV.d = ValD(GetGadgetText(#String_Voltage)) ; V - system voltage (kV)
mm.d = ValD(GetGadgetText(#String_Gap)) ; G - Conductor gap (mm)
kA.d = ValD(GetGadgetText(#String_Current)) ; Ibf - three phase fault current (kA)
DP.d = ValD(GetGadgetText(#String_Distance_Person)) ; Distance from arc point to the person [mm]
DF.d = ValD(GetGadgetText(#String_Distance_Factor)) ; Distance factor - dependent on equipment type & voltage (IEEE 1584-2002, pg 12) [x]
AT.d = ValD(GetGadgetText(#String_Arching_Time)) ; Arcing time [s]
Integer = GetGadgetState(#TrackBar_Integer)
; Checkbox to see if we want results in joules or calories...
If GetGadgetState(#Checkbox_Joules) = 0
RT.d = ValD(GetGadgetText(#String_Rating)) ; PPE category rating in joules
Else
RT.d = ValD(GetGadgetText(#String_Rating)) ; PPE category rating in joules, convert to calories
RT.d = RT.d*4.1858
EndIf
If kV.d
If mm.d
If kA.d
If kV.d < 1 ; For systems under < 1000 volts
; 1) First equation is to work out the arc fault current...
ArcFaultCurrent.d = 0.662*Log10(kA.d) + 0.0966*kV.d + 0.000526*mm.d + 0.5588*kV.d*Log10(kA.d) + -0.00304*mm.d*Log10(kA.d)
If GetGadgetState(#Combo_Equipment) = 0
ArcFaultCurrent.d = ArcFaultCurrent.d + -0.097
ElseIf GetGadgetState(#Combo_Equipment) = 1
ArcFaultCurrent.d = ArcFaultCurrent.d + -0.153
EndIf
Else ; For systems greater than > 1000 volts
ArcFaultCurrent.d = 0.00402 + 0.983*Log10(kA.d)
EndIf
ArcFaultCurrent.d = Pow(10, ArcFaultCurrent.d)
SetGadgetText(#Answer, StrD(ArcFaultCurrent.d, Integer))
; 2) Second part of the equation is the normalised energy calculation...
If GetGadgetState(#Combo_Equipment) = 0 ; K1 = -0.792 for open configurations and -0.555 for boxed configurations
NormalisedEnergy.d = -0.555
ElseIf GetGadgetState(#Combo_Equipment) = 1
NormalisedEnergy.d = -0.792
EndIf
If GetGadgetState(#Combo_Grounding) = 0 ; K2 = 0 for ungrounded or high resistance ground systems and -0.113 for grounded systems
NormalisedEnergy.d = NormalisedEnergy.d + -0.113
ElseIf GetGadgetState(#Combo_Grounding) = 1
NormalisedEnergy.d = NormalisedEnergy.d + 0
EndIf
NormalisedEnergy.d = Pow(10, (NormalisedEnergy.d + 1.0811*Log10(ArcFaultCurrent.d) + 0.0011*mm.d))
; ANSWER! 1 joule is equal to 0.238902957619 calories.
If GetGadgetState(#Checkbox_Joules) = #PB_Checkbox_Unchecked
SetGadgetText(#Answer_Normalised, StrD(NormalisedEnergy.d, Integer)) ; Display answer in joules
Else
SetGadgetText(#Answer_Normalised, StrD(NormalisedEnergy.d*0.238902957619, Integer)) ; Display answer in calories
EndIf
; Check to see if the user wants to use the Lee Method for the incident energy calculation...
If GetGadgetState(#Checkbox_Lee) = #PB_Checkbox_Unchecked
; 3) Third part is the calculation to work out the incident energy at working distance...
If kV.d > 1 ; For systems under < 1000 volts * 1.5
IncidentEnergy.d = 4.184 * 1.0
Else
IncidentEnergy.d = 4.184 * 1.5
EndIf
IncidentEnergy.d = IncidentEnergy.d*NormalisedEnergy.d*(AT.d/0.2)*(Pow(610, DF.d)/Pow(DP.d, DF.d))
Else ; Use the Lee Method for the incident energy calculations (should be used for 15kV and above)...
IncidentEnergy.d = 2.142*Pow(10, 6)*kV.d*kA.d*(AT.d/Pow(DP.d, 2))
EndIf
; ANSWER! 1 joule is equal to 0.238902957619 calories.
If GetGadgetState(#Checkbox_Joules) = #PB_Checkbox_Unchecked
SetGadgetText(#Answer_Incident, StrD(IncidentEnergy.d, Integer))
Else
SetGadgetText(#Answer_Incident, StrD(IncidentEnergy.d*0.238902957619, Integer))
EndIf
; 4) Forth part is to determine the flash boundary...
If GetGadgetState(#Checkbox_Lee) = #PB_Checkbox_Unchecked
If kV.d > 1 ; For systems under < 1000 volts * 1.5
FlashBoundary.d = 4.184*1.0*NormalisedEnergy.d*(AT.d/0.2)*(Pow(610, DF.d)/RT.d)
Else
FlashBoundary.d = 4.184*1.5*NormalisedEnergy.d*(AT.d/0.2)*(Pow(610, DF.d)/RT.d)
EndIf
FlashBoundary.d = Pow(FlashBoundary.d, (1/DF.d))
Else ; Use the Lee Method for the incident energy calculations (should be used for 15kV and above)...
FlashBoundary.d = Sqr(2.142*Pow(10, 6)*kV.d*kA.d*(AT.d/RT.d))
EndIf
; ANSWER!
SetGadgetText(#Answer_Flash, StrD(FlashBoundary.d, Integer))
; Calculate 75%
Percentage = GetGadgetState(#TrackBar_Current)
SetGadgetText(#Current_Percentage, Str(Percentage) + "% of Arc Fault Current")
SetGadgetText(#Answer_75, StrD(((ArcFaultCurrent.d*Percentage)/100), Integer))
SetGadgetText(#Answer_Flash_75, StrD(((FlashBoundary.d*Percentage)/100), Integer))
If GetGadgetState(#Checkbox_Joules) = 0 ; Display answer in joules
SetGadgetText(#Answer_Normalised_75, StrD(((NormalisedEnergy.d*Percentage)/100), Integer))
SetGadgetText(#Answer_Incident_75, StrD(((IncidentEnergy.d*Percentage)/100), Integer))
Else ; Display answer in calories
SetGadgetText(#Answer_Normalised_75, StrD((((NormalisedEnergy.d*0.238902957619)*Percentage)/100), Integer))
SetGadgetText(#Answer_Incident_75, StrD((((IncidentEnergy.d*0.238902957619)*Percentage)/100), Integer))
EndIf
ProcedureReturn
EndIf
EndIf
EndIf
SetGadgetText(#Answer, "NaN")
ProcedureReturn
EndProcedure
; Check and set the distant factor [x] as per 1584-2002 Table 4, pg 12
Procedure Equipment_Type(EventType)
kV.d = ValD(GetGadgetText(#String_Voltage)) ; V - system voltage (kV)
mm.d = ValD(GetGadgetText(#String_Gap)) ; G - Conductor gap (mm)
If GetGadgetState(#Checkbox_Lee) = #PB_Checkbox_Unchecked And GetGadgetState(#Checkbox_Distance) = #PB_Checkbox_Unchecked
If GetGadgetState(#Combo_Equipment_Type) = -1
MessageRequester("Equipment Type Error!", "Select equipment type or set the distance factor checkbox to manual mode.", #MB_ICONERROR | #MB_TOPMOST)
SetGadgetState(#Combo_Equipment_Type, -1)
Error_Flag = #True
ProcedureReturn
EndIf
If kV.d < 0.208 Or kV.d > 15
MessageRequester("Voltage Error!", "Set voltage between 0.208 and 15kV or set the distance factor checkbox to manual mode.", #MB_ICONERROR | #MB_TOPMOST)
SetGadgetState(#Combo_Equipment_Type, -1)
Error_Flag = #True
ProcedureReturn
ElseIf GetGadgetState(#Combo_Equipment_Type) = 0 ; Open air
SetGadgetText(#String_Distance_Factor, "2.000")
DF.d = 2.000
ElseIf GetGadgetState(#Combo_Equipment_Type) = 1 ; Switchgear
If kV.d >= 0.208 And kV.d <= 1
SetGadgetText(#String_Distance_Factor, "1.473")
DF.d = 1.473
ElseIf kV.d > 1 And kV.d <= 15
SetGadgetText(#String_Distance_Factor, "0.973")
DF.d = 0.973
EndIf
ElseIf GetGadgetState(#Combo_Equipment_Type) = 2 ; MCC and panels
SetGadgetText(#String_Distance_Factor, "1.641")
DF.d = 1.641
ElseIf GetGadgetState(#Combo_Equipment_Type) = 3 ; Cables
SetGadgetText(#String_Distance_Factor, "2.000")
DF.d = 2.000
EndIf
EndIf
Error_Flag = #False
EndProcedure
; Check and set the Lee method...
Procedure Lee_Factor(EventType)
If GetGadgetState(#Checkbox_Lee) = #PB_Checkbox_Checked
SetGadgetState(#Checkbox_Distance, #PB_Checkbox_Checked)
SendMessage_(GadgetID(#String_Distance_Factor), #EM_SETREADONLY, #False, #False) ; Remove read only status
Arcing_Current(EventType)
Else
SendMessage_(GadgetID(#String_Distance_Factor), #EM_SETREADONLY, #True, #False) ; Enable read only status
SetGadgetState(#Checkbox_Distance, #PB_Checkbox_Unchecked)
Arcing_Current(EventType)
EndIf
EndProcedure
; Checkbox for setting the distance factor to manual mode...
Procedure Distance_Factor(EventType)
If GetGadgetState(#Checkbox_Lee) = #PB_Checkbox_Checked
MessageRequester("Lee Checkbox Error!", "Unckeck Lee Method checkbox first!", #MB_ICONERROR | #MB_TOPMOST)
SetGadgetState(#Checkbox_Distance, #PB_Checkbox_Checked)
Else
If GetGadgetState(#Checkbox_Distance) = #PB_Checkbox_Checked
SendMessage_(GadgetID(#String_Distance_Factor), #EM_SETREADONLY, #False, #False) ; Remove read only status
Else
SendMessage_(GadgetID(#String_Distance_Factor), #EM_SETREADONLY, #True, #False) ; Enable read only status
Equipment_Type(EventType)
EndIf
EndIf
EndProcedure
Procedure JoulesToCal(EventType)
If GetGadgetState(#Checkbox_Joules) = #PB_Checkbox_Unchecked
SetGadgetText(#Text_PPE_Rating, "PPE Rating (J/cm²) :")
SetGadgetText(#Text_Energy_Normalised_100, "J/cm² :") ; Text_Energy_Normalised_100
SetGadgetText(#Text_Energy_Normailsed_75, "J/cm² :") ; Text_Energy_Normailsed_75
SetGadgetText(#Text_Energy_Incident_100, "J/cm² :") ; Text_Energy_Incident_100
SetGadgetText(#Text_Energy_Incident_75, "J/cm² :") ; Text_Energy_Incident_75
; The user is changing from calories to joules so convert the number in the box
RT.d = ValD(GetGadgetText(#String_Rating)) ; PPE category rating in joules
If RT.d
RT.d = RT.d*4.1858
SetGadgetText(#String_Rating, StrD(RT.d))
EndIf
Else
SetGadgetText(#Text_PPE_Rating, "PPE Rating (Cal/cm²) :")
SetGadgetText(#Text_Energy_Normalised_100, "Cal/cm² :") ; Text_Energy_Normalised_100
SetGadgetText(#Text_Energy_Normailsed_75, "Cal/cm² :") ; Text_Energy_Normailsed_75
SetGadgetText(#Text_Energy_Incident_100, "Cal/cm² :") ; Text_Energy_Incident_100
SetGadgetText(#Text_Energy_Incident_75, "Cal/cm² :") ; Text_Energy_Incident_75
; The user is changing from joules to calories so convert the number in the box
RT.d = ValD(GetGadgetText(#String_Rating)) ; PPE category rating in calories, convert to joules
If RT.d
RT.d = RT.d*0.238902957619
SetGadgetText(#String_Rating, StrD(RT.d))
EndIf
EndIf
Arcing_Current(EventType)
EndProcedure
; The main event loop, calls the automatically generated event procedure.
Repeat
Event = WaitWindowEvent()
Select EventWindow()
Case MainWindow
MainWindow_Events(Event)
EndSelect
Until Event = #PB_Event_CloseWindow ; Quit on any window close
Code: Select all
;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
Global Frame_0, Text_Voltage, Text_Arching, Text_Fault, Text_Grounding, Frame_100_Normalised, Frame_75_Normalised, Text_Voltage_75, Frame_75_Arcing, Text_Arching_Copy1, Frame_100_Incident, Text_Equipment, Text_Gap, Text_Distance, Text_Voltage_100, Frame_100_Arcing, Frame_75_Incident, Frame_75_Flash, Text_Flash_75, Frame_Flash, Text_Flash, Text_Equipment_Type
Enumeration FormWindow
#MainWindow
EndEnumeration
Enumeration FormGadget
#Panel_0
#Checkbox_Lee
#TrackBar_Current
#Answer
#Button_Calculate
#Combo_Equipment
#String_Voltage
#String_Arching_Time
#String_Current
#Current_Percentage
#Answer_75
#Text_Energy_Incident_100
#Answer_Normalised_75
#String_Distance_Factor
#Answer_Incident
#Current_100
#String_Gap
#Text_Energy_Normalised_100
#String_Distance_Person
#Answer_Normalised
#Combo_Grounding
#Answer_Incident_75
#Text_Energy_Incident_75
#Text_Energy_Normailsed_75
#Text_PPE_Rating
#String_Rating
#Answer_Flash_75
#Answer_Flash
#Checkbox_Joules
#Checkbox_Distance
#Combo_Equipment_Type
#TrackBar_Integer
EndEnumeration
Enumeration FormFont
#Font_MainWindow_0
#Font_MainWindow_1
#Font_MainWindow_2
#Font_MainWindow_3
EndEnumeration
LoadFont(#Font_MainWindow_0,"Arial", 10)
LoadFont(#Font_MainWindow_1,"Arial", 10, #PB_Font_Bold)
LoadFont(#Font_MainWindow_2,"Arial Rounded MT Bold", 12)
LoadFont(#Font_MainWindow_3,"Arial Rounded MT Bold", 10)
Declare Equipment_Type(EventType)
Declare Lee_Factor(EventType)
Declare JoulesToCal(EventType)
Declare Arcing_Current(EventType)
Declare Distance_Factor(EventType)
Procedure OpenMainWindow(x = 0, y = 0, width = 560, height = 530)
OpenWindow(#MainWindow, x, y, width, height, "Project Arc-Flash v0.02 Alpha", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
PanelGadget(#Panel_0, 0, 0, 560, 530)
SetGadgetFont(#Panel_0, FontID(#Font_MainWindow_0))
AddGadgetItem(#Panel_0, -1, "AC Calculator", 0, 1)
CheckBoxGadget(#Checkbox_Lee, 170, 20, 20, 20, "")
GadgetToolTip(#Checkbox_Lee, "Apply Lee Method (Voltages >15kV)")
SetGadgetFont(#Checkbox_Lee, FontID(#Font_MainWindow_0))
TrackBarGadget(#TrackBar_Current, 290, 260, 240, 25, 0, 100, #PB_TrackBar_Ticks)
StringGadget(#Answer, 100, 310, 150, 20, "", #PB_String_ReadOnly)
SetGadgetFont(#Answer, FontID(#Font_MainWindow_1))
ButtonGadget(#Button_Calculate, 300, 138, 230, 80, "Calculate")
SetGadgetFont(#Button_Calculate, FontID(#Font_MainWindow_1))
ComboBoxGadget(#Combo_Equipment, 420, 20, 110, 28)
GadgetToolTip(#Combo_Equipment, "Distinction between open and box enclosure configurations...")
SetGadgetFont(#Combo_Equipment, FontID(#Font_MainWindow_0))
AddGadgetItem(#Combo_Equipment, -1, "Box Configs")
AddGadgetItem(#Combo_Equipment, -1, "Open Configs", 0, 1)
StringGadget(#String_Voltage, 190, 20, 100, 20, "")
GadgetToolTip(#String_Voltage, "Set typical voltage between 0.05 and 132...")
SetGadgetFont(#String_Voltage, FontID(#Font_MainWindow_0))
Frame_0 = FrameGadget(#PB_Any, 10, 0, 530, 228, "System Details")
SetGadgetFont(Frame_0, FontID(#Font_MainWindow_2))
Text_Voltage = TextGadget(#PB_Any, 20, 20, 140, 20, "System Voltage (kV) :")
SetGadgetFont(Text_Voltage, FontID(#Font_MainWindow_0))
StringGadget(#String_Arching_Time, 190, 140, 100, 20, "")
GadgetToolTip(#String_Arching_Time, "Set typical arcing time between 0.02 and 2...")
SetGadgetFont(#String_Arching_Time, FontID(#Font_MainWindow_0))
Text_Arching = TextGadget(#PB_Any, 20, 140, 150, 20, "Arching Time (s) :")
SetGadgetFont(Text_Arching, FontID(#Font_MainWindow_0))
StringGadget(#String_Current, 190, 80, 100, 20, "")
GadgetToolTip(#String_Current, "Set typical fault current between 0.7 and 106...")
SetGadgetFont(#String_Current, FontID(#Font_MainWindow_0))
Text_Fault = TextGadget(#PB_Any, 20, 80, 150, 20, "Three Phase Fault (kA) :")
SetGadgetFont(Text_Fault, FontID(#Font_MainWindow_0))
Text_Grounding = TextGadget(#PB_Any, 300, 60, 110, 20, "Grounding :")
SetGadgetFont(Text_Grounding, FontID(#Font_MainWindow_0))
Frame_100_Normalised = FrameGadget(#PB_Any, 20, 340, 240, 48, "Normalised Energy (En)")
SetGadgetFont(Frame_100_Normalised, FontID(#Font_MainWindow_3))
FrameGadget(#Current_Percentage, 280, 238, 260, 260, "75% of Arc Fault Current")
SetGadgetFont(#Current_Percentage, FontID(#Font_MainWindow_2))
StringGadget(#Answer_75, 370, 310, 150, 20, "", #PB_String_ReadOnly)
SetGadgetFont(#Answer_75, FontID(#Font_MainWindow_1))
Frame_75_Normalised = FrameGadget(#PB_Any, 290, 340, 240, 48, "Normalised Energy (En)")
SetGadgetFont(Frame_75_Normalised, FontID(#Font_MainWindow_3))
TextGadget(#Text_Energy_Incident_100, 30, 410, 60, 20, "J/cm² :", #PB_Text_Right)
SetGadgetFont(#Text_Energy_Incident_100, FontID(#Font_MainWindow_0))
StringGadget(#Answer_Normalised_75, 370, 360, 150, 20, "", #PB_String_ReadOnly)
SetGadgetFont(#Answer_Normalised_75, FontID(#Font_MainWindow_1))
Text_Voltage_75 = TextGadget(#PB_Any, 300, 310, 60, 20, "kA :", #PB_Text_Right)
SetGadgetFont(Text_Voltage_75, FontID(#Font_MainWindow_0))
Frame_75_Arcing = FrameGadget(#PB_Any, 290, 290, 240, 48, "Arcing Current (Ia)")
SetGadgetFont(Frame_75_Arcing, FontID(#Font_MainWindow_3))
Text_Arching_Copy1 = TextGadget(#PB_Any, 20, 170, 140, 20, "Distance Factor (x) :")
SetGadgetFont(Text_Arching_Copy1, FontID(#Font_MainWindow_0))
StringGadget(#String_Distance_Factor, 190, 170, 100, 20, "", #PB_String_ReadOnly)
GadgetToolTip(#String_Distance_Factor, "Set typical distance factor between 0.973 and 2.000...")
SetGadgetFont(#String_Distance_Factor, FontID(#Font_MainWindow_0))
StringGadget(#Answer_Incident, 100, 410, 150, 20, "", #PB_String_ReadOnly)
SetGadgetFont(#Answer_Incident, FontID(#Font_MainWindow_1))
Frame_100_Incident = FrameGadget(#PB_Any, 20, 390, 240, 48, "Incident Energy (E)")
SetGadgetFont(Frame_100_Incident, FontID(#Font_MainWindow_3))
FrameGadget(#Current_100, 10, 238, 260, 260, "100% of Arc Fault Current")
SetGadgetFont(#Current_100, FontID(#Font_MainWindow_2))
Text_Equipment = TextGadget(#PB_Any, 300, 20, 110, 20, "Configurations :")
SetGadgetFont(Text_Equipment, FontID(#Font_MainWindow_0))
StringGadget(#String_Gap, 190, 50, 100, 20, "")
GadgetToolTip(#String_Gap, "Set typical gap between 1 and 2000...")
SetGadgetFont(#String_Gap, FontID(#Font_MainWindow_0))
Text_Gap = TextGadget(#PB_Any, 20, 50, 150, 20, "Conductor Gap (mm) :")
SetGadgetFont(Text_Gap, FontID(#Font_MainWindow_0))
TextGadget(#Text_Energy_Normalised_100, 30, 360, 60, 20, "J/cm² :", #PB_Text_Right)
SetGadgetFont(#Text_Energy_Normalised_100, FontID(#Font_MainWindow_0))
StringGadget(#String_Distance_Person, 190, 110, 100, 20, "")
GadgetToolTip(#String_Distance_Person, "Set typical working distance between 150 and 10000...")
SetGadgetFont(#String_Distance_Person, FontID(#Font_MainWindow_0))
Text_Distance = TextGadget(#PB_Any, 20, 110, 150, 20, "Working Distance (mm) :")
SetGadgetFont(Text_Distance, FontID(#Font_MainWindow_0))
StringGadget(#Answer_Normalised, 100, 360, 150, 20, "", #PB_String_ReadOnly)
SetGadgetFont(#Answer_Normalised, FontID(#Font_MainWindow_1))
ComboBoxGadget(#Combo_Grounding, 420, 60, 110, 25)
GadgetToolTip(#Combo_Grounding, "Ungrounded and high-resistance grounded systems...")
SetGadgetFont(#Combo_Grounding, FontID(#Font_MainWindow_0))
AddGadgetItem(#Combo_Grounding, -1, "Grounded")
AddGadgetItem(#Combo_Grounding, -1, "Ungrounded", 0, 1)
Text_Voltage_100 = TextGadget(#PB_Any, 30, 310, 60, 20, "kA :", #PB_Text_Right)
SetGadgetFont(Text_Voltage_100, FontID(#Font_MainWindow_0))
Frame_100_Arcing = FrameGadget(#PB_Any, 20, 290, 240, 48, "Arcing Current (Ia)")
SetGadgetFont(Frame_100_Arcing, FontID(#Font_MainWindow_3))
Frame_75_Incident = FrameGadget(#PB_Any, 290, 390, 240, 48, "Incident Energy (E)")
SetGadgetFont(Frame_75_Incident, FontID(#Font_MainWindow_3))
StringGadget(#Answer_Incident_75, 370, 410, 150, 20, "", #PB_String_ReadOnly)
SetGadgetFont(#Answer_Incident_75, FontID(#Font_MainWindow_1))
TextGadget(#Text_Energy_Incident_75, 300, 410, 60, 20, "J/cm² :", #PB_Text_Right)
SetGadgetFont(#Text_Energy_Incident_75, FontID(#Font_MainWindow_0))
TextGadget(#Text_Energy_Normailsed_75, 300, 360, 60, 20, "J/cm² :", #PB_Text_Right)
SetGadgetFont(#Text_Energy_Normailsed_75, FontID(#Font_MainWindow_0))
TextGadget(#Text_PPE_Rating, 20, 200, 140, 20, "PPE Rating (J/cm²) :")
SetGadgetFont(#Text_PPE_Rating, FontID(#Font_MainWindow_0))
StringGadget(#String_Rating, 190, 200, 100, 20, "")
GadgetToolTip(#String_Rating, "Set between 5 and 800, note: 5.0 J/cm2 is bare skin...")
SetGadgetFont(#String_Rating, FontID(#Font_MainWindow_0))
Frame_75_Flash = FrameGadget(#PB_Any, 290, 440, 240, 48, "Distance Boundary (DB)")
SetGadgetFont(Frame_75_Flash, FontID(#Font_MainWindow_3))
Text_Flash_75 = TextGadget(#PB_Any, 300, 460, 60, 20, "mm :", #PB_Text_Right)
SetGadgetFont(Text_Flash_75, FontID(#Font_MainWindow_0))
StringGadget(#Answer_Flash_75, 370, 460, 150, 20, "", #PB_String_ReadOnly)
SetGadgetFont(#Answer_Flash_75, FontID(#Font_MainWindow_1))
Frame_Flash = FrameGadget(#PB_Any, 20, 440, 240, 48, "Distance Boundary (DB)")
SetGadgetFont(Frame_Flash, FontID(#Font_MainWindow_3))
Text_Flash = TextGadget(#PB_Any, 30, 460, 60, 20, "mm :", #PB_Text_Right)
SetGadgetFont(Text_Flash, FontID(#Font_MainWindow_0))
StringGadget(#Answer_Flash, 100, 460, 150, 20, "", #PB_String_ReadOnly)
SetGadgetFont(#Answer_Flash, FontID(#Font_MainWindow_1))
CheckBoxGadget(#Checkbox_Joules, 170, 200, 20, 20, "")
GadgetToolTip(#Checkbox_Joules, "Alternate between joules and calories...")
SetGadgetFont(#Checkbox_Joules, FontID(#Font_MainWindow_0))
CheckBoxGadget(#Checkbox_Distance, 170, 170, 20, 20, "")
GadgetToolTip(#Checkbox_Distance, "Set distance x factor to manual mode...")
SetGadgetFont(#Checkbox_Distance, FontID(#Font_MainWindow_0))
ComboBoxGadget(#Combo_Equipment_Type, 420, 100, 110, 25)
GadgetToolTip(#Combo_Equipment_Type, "This needs to be set if distance factor is not set to manual mode...")
SetGadgetFont(#Combo_Equipment_Type, FontID(#Font_MainWindow_0))
AddGadgetItem(#Combo_Equipment_Type, -1, "Open Air")
AddGadgetItem(#Combo_Equipment_Type, -1, "Switchgear", 0, 1)
AddGadgetItem(#Combo_Equipment_Type, -1, "MCC / Panels", 0, 2)
AddGadgetItem(#Combo_Equipment_Type, -1, "Cable", 0, 3)
Text_Equipment_Type = TextGadget(#PB_Any, 300, 100, 110, 20, "Equipment Type :")
SetGadgetFont(Text_Equipment_Type, FontID(#Font_MainWindow_0))
TrackBarGadget(#TrackBar_Integer, 20, 260, 240, 25, 0, 15, #PB_TrackBar_Ticks)
CloseGadgetList()
EndProcedure
Procedure MainWindow_Events(event)
Select event
Case #PB_Event_CloseWindow
ProcedureReturn #False
Case #PB_Event_Menu
Select EventMenu()
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case #Checkbox_Lee
Lee_Factor(EventType())
Case #TrackBar_Current
Arcing_Current(EventType())
Case #Button_Calculate
Arcing_Current(EventType())
Case #Combo_Equipment
Arcing_Current(EventType())
Case #Combo_Grounding
Arcing_Current(EventType())
Case #Checkbox_Joules
JoulesToCal(EventType())
Case #Checkbox_Distance
Distance_Factor(EventType())
Case #Combo_Equipment_Type
Equipment_Type(EventType())
Case #TrackBar_Integer
Arcing_Current(EventType())
EndSelect
EndSelect
ProcedureReturn #True
EndProcedure