Update 10.3. URL support

Added URL support and code-base clean-up.
master
miguel 2023-08-26 14:05:56 +10:00
rodzic c43f663be1
commit 3196e6098e
1 zmienionych plików z 84 dodań i 194 usunięć

Wyświetl plik

@ -7,7 +7,7 @@
<link rel="stylesheet" href="magloop.css"> <link rel="stylesheet" href="magloop.css">
</head> </head>
<body> <body>
<header>Miguel <a href="mailto:vk3cpu@gmail.com">VK3CPU</a> - Magloop Antenna Calculator V10.2</header> <header>Miguel <a href="mailto:vk3cpu@gmail.com">VK3CPU</a> - Magloop Antenna Calculator V10.3</header>
<section class="gridLayoutClass"> <section class="gridLayoutClass">
<div class="chart-container" style="position: relative;"> <div class="chart-container" style="position: relative;">
<canvas id="chartCanvas" class="chartCanvasClass"> <canvas id="chartCanvas" class="chartCanvasClass">
@ -45,9 +45,9 @@
<label>Imp</label> <label>Imp</label>
<input type="radio" name="unit_radio" id="imperial_radio" value="imperial"/> <input type="radio" name="unit_radio" id="imperial_radio" value="imperial"/>
<label>Cu</label> <label>Cu</label>
<input type="radio" name="metal_radio" id="copper_radio" value="copper" checked/> <input type="radio" name="metal_radio" id="copper_radio" value="Cu" checked/>
<label>Al</label> <label>Al</label>
<input type="radio" name="metal_radio" id="aluminium_radio" value="aluminium"/> <input type="radio" name="metal_radio" id="aluminium_radio" value="Al"/>
<label>Circ</label> <label>Circ</label>
<input type="radio" name="shape_radio" id="circle_radio" value="circle" checked/> <input type="radio" name="shape_radio" id="circle_radio" value="circle" checked/>
<label>Oct</label> <label>Oct</label>
@ -136,6 +136,8 @@
[3]: F W Grover, <b>"Formulas and Tables for the Calculation of the Inductance of Coils of Polygonal Form"</b> <i>Scientific Papers of the Bureau of Standards, Vol 18, p753</i> <br> [3]: F W Grover, <b>"Formulas and Tables for the Calculation of the Inductance of Coils of Polygonal Form"</b> <i>Scientific Papers of the Bureau of Standards, Vol 18, p753</i> <br>
<br> <br>
<b><u>Change history:</u></b><br> <b><u>Change history:</u></b><br>
<b>[26-Aug-23] - V10.3</b> <br>
* Added support for URL parameters. Some code-base clean-up. <br>
<b>[13-May-23] - V10.2</b> <br> <b>[13-May-23] - V10.2</b> <br>
* Changed radiation and loss resistance to logarithmic. Capacitance limited to 5-5000pF. <br> * Changed radiation and loss resistance to logarithmic. Capacitance limited to 5-5000pF. <br>
<b>[8-May-23] - V10.1</b> <br> <b>[8-May-23] - V10.1</b> <br>
@ -263,11 +265,42 @@
window.history.replaceState(null, null, new_url); window.history.replaceState(null, null, new_url);
} }
function getUnits() {
var unit_radio = document.getElementsByName("unit_radio");
for(var i = 0; i < unit_radio.length; i++) {
if(unit_radio[i].checked == true) {
return unit_radio[i].value;
}
}
return "null";
}
function getMetal() {
var metal_radio = document.getElementsByName("metal_radio");
for(var i = 0; i < metal_radio.length; i++) {
if(metal_radio[i].checked == true) {
return metal_radio[i].value;
}
}
return "null";
}
function getShape() {
var shape_radio = document.getElementsByName("shape_radio");
for(var i = 0; i < shape_radio.length; i++) {
if(shape_radio[i].checked == true) {
return shape_radio[i].value;
}
}
return "null";
}
// Global variables: // Global variables:
var units = "metric"; var units = getUnits();
var metal = getMetal(); // Default metal is copper
var conductivity = 58e6; // Default is annealed copper var conductivity = 58e6; // Default is annealed copper
var shape = "circle"; // Shape of the main loop var shape = getShape();
var loop_turns = 1; // var loop_turns = 1;
var loop_mode = "series"; // Series or parallel. When loop_turns_slider.value == 0, loop_turns is 2 and loop_mode is "parallel" var loop_mode = "series"; // Series or parallel. When loop_turns_slider.value == 0, loop_turns is 2 and loop_mode is "parallel"
const mu0 = Math.PI * 4e-7; const mu0 = Math.PI * 4e-7;
@ -278,7 +311,6 @@
var srf = 0.0; // Self-resonant frequency SRF var srf = 0.0; // Self-resonant frequency SRF
var conductor_length = 0.0; // Total conductor length var conductor_length = 0.0; // Total conductor length
var R_ext = 0.0; // External losses due to capacitor resistance and ground effects, in ohms var R_ext = 0.0; // External losses due to capacitor resistance and ground effects, in ohms
var metal = "Cu"; // Default metal is copper
const proximityResistance = { const proximityResistance = {
// From G. S. Smith, "Radiation Efficiency of Electrically Small Multiturn Loop Antennas", IEEE Trans Antennas Propagation, September 1972 // From G. S. Smith, "Radiation Efficiency of Electrically Small Multiturn Loop Antennas", IEEE Trans Antennas Propagation, September 1972
@ -324,6 +356,15 @@
? ((((perimeter* loop_turns) ** 2.0) + ((loop_spacing_slider.value * conductor_diameter_slider.value * 1e-3 * loop_turns) ** 2.0)) ** 0.5) ? ((((perimeter* loop_turns) ** 2.0) + ((loop_spacing_slider.value * conductor_diameter_slider.value * 1e-3 * loop_turns) ** 2.0)) ** 0.5)
: (perimeter* loop_turns); : (perimeter* loop_turns);
R_ext = external_losses_slider.value * 0.001; R_ext = external_losses_slider.value * 0.001;
units = getUnits();
shape = getShape();
metal = getMetal();
if(metal == "Cu") {
conductivity = 58e6; // Default is annealed copper
} else if(metal == "Al") {
conductivity = 35e6;
}
} }
// Returns the loop area in square meters: // Returns the loop area in square meters:
@ -664,149 +705,63 @@
return (1.0 / (2.0 * Math.PI * ((inductance * loop_capacitance) ** 0.5))); return (1.0 / (2.0 * Math.PI * ((inductance * loop_capacitance) ** 0.5)));
} }
metric_radio.oninput = function() { function updateUnits() {
units = metric_radio.value;
//console.log(units);
setGlobals(); setGlobals();
drawFrontDesign(); drawFrontDesign();
drawSideDesign(); drawSideDesign();
updateURL(); updateURL();
} }
function updateAll() {
setGlobals();
drawFrontDesign();
drawSideDesign();
updateFrequencies();
myChart.data.datasets[0].data = calculateTuningCapacitor();
myChart.data.datasets[1].data = calculateCapacitorVoltage();
myChart.data.datasets[2].data = calculateBandwidth();
myChart.data.datasets[3].data = calculateEfficiencyFactor();
myChart.data.datasets[4].data = calculateRadiationResistance();
myChart.data.datasets[5].data = calculateLossResistance();
myChart.data.datasets[6].data = calculateInductiveReactance();
myChart.data.datasets[7].data = calculateQualityFactor();
myChart.data.datasets[8].data = calculateCirculatingCurrent();
myChart.data.datasets[9].data = calculateAntennaSize();
myChart.data.datasets[10].data = calculateSkinDepth();
myChart.update();
updateURL();
}
metric_radio.oninput = function() {
updateUnits();
}
imperial_radio.oninput = function() { imperial_radio.oninput = function() {
units = imperial_radio.value; updateUnits();
//console.log(units);
drawFrontDesign();
drawSideDesign();
updateURL();
} }
copper_radio.oninput = function() { copper_radio.oninput = function() {
conductivity = 58e6; updateAll();
metal = "Cu";
setGlobals();
drawFrontDesign();
drawSideDesign();
updateFrequencies();
myChart.data.datasets[0].data = calculateTuningCapacitor();
myChart.data.datasets[1].data = calculateCapacitorVoltage();
myChart.data.datasets[2].data = calculateBandwidth();
myChart.data.datasets[3].data = calculateEfficiencyFactor();
myChart.data.datasets[4].data = calculateRadiationResistance();
myChart.data.datasets[5].data = calculateLossResistance();
myChart.data.datasets[6].data = calculateInductiveReactance();
myChart.data.datasets[7].data = calculateQualityFactor();
myChart.data.datasets[8].data = calculateCirculatingCurrent();
myChart.data.datasets[9].data = calculateAntennaSize();
myChart.data.datasets[10].data = calculateSkinDepth();
myChart.update();
updateURL();
} }
aluminium_radio.oninput = function() { aluminium_radio.oninput = function() {
conductivity = 35e6; updateAll();
metal = "Al";
setGlobals();
drawFrontDesign();
drawSideDesign();
updateFrequencies();
myChart.data.datasets[0].data = calculateTuningCapacitor();
myChart.data.datasets[1].data = calculateCapacitorVoltage();
myChart.data.datasets[2].data = calculateBandwidth();
myChart.data.datasets[3].data = calculateEfficiencyFactor();
myChart.data.datasets[4].data = calculateRadiationResistance();
myChart.data.datasets[5].data = calculateLossResistance();
myChart.data.datasets[6].data = calculateInductiveReactance();
myChart.data.datasets[7].data = calculateQualityFactor();
myChart.data.datasets[8].data = calculateCirculatingCurrent();
myChart.data.datasets[9].data = calculateAntennaSize();
myChart.data.datasets[10].data = calculateSkinDepth();
myChart.update();
updateURL();
} }
circle_radio.oninput = function() { circle_radio.oninput = function() {
shape = "circle"; updateAll();
setGlobals();
drawFrontDesign();
drawSideDesign();
updateFrequencies();
myChart.data.datasets[0].data = calculateTuningCapacitor();
myChart.data.datasets[1].data = calculateCapacitorVoltage();
myChart.data.datasets[2].data = calculateBandwidth();
myChart.data.datasets[3].data = calculateEfficiencyFactor();
myChart.data.datasets[4].data = calculateRadiationResistance();
myChart.data.datasets[5].data = calculateLossResistance();
myChart.data.datasets[6].data = calculateInductiveReactance();
myChart.data.datasets[7].data = calculateQualityFactor();
myChart.data.datasets[8].data = calculateCirculatingCurrent();
myChart.data.datasets[9].data = calculateAntennaSize();
myChart.data.datasets[10].data = calculateSkinDepth();
myChart.update();
updateURL();
} }
oct_radio.oninput = function() { oct_radio.oninput = function() {
shape = "octagon"; updateAll();
setGlobals();
drawFrontDesign();
drawSideDesign();
updateFrequencies();
myChart.data.datasets[0].data = calculateTuningCapacitor();
myChart.data.datasets[1].data = calculateCapacitorVoltage();
myChart.data.datasets[2].data = calculateBandwidth();
myChart.data.datasets[3].data = calculateEfficiencyFactor();
myChart.data.datasets[4].data = calculateRadiationResistance();
myChart.data.datasets[5].data = calculateLossResistance();
myChart.data.datasets[6].data = calculateInductiveReactance();
myChart.data.datasets[7].data = calculateQualityFactor();
myChart.data.datasets[8].data = calculateCirculatingCurrent();
myChart.data.datasets[9].data = calculateAntennaSize();
myChart.data.datasets[10].data = calculateSkinDepth();
myChart.update();
updateURL();
} }
hex_radio.oninput = function() { hex_radio.oninput = function() {
shape = "hexagon"; updateAll();
setGlobals();
drawFrontDesign();
drawSideDesign();
updateFrequencies();
myChart.data.datasets[0].data = calculateTuningCapacitor();
myChart.data.datasets[1].data = calculateCapacitorVoltage();
myChart.data.datasets[2].data = calculateBandwidth();
myChart.data.datasets[3].data = calculateEfficiencyFactor();
myChart.data.datasets[4].data = calculateRadiationResistance();
myChart.data.datasets[5].data = calculateLossResistance();
myChart.data.datasets[6].data = calculateInductiveReactance();
myChart.data.datasets[7].data = calculateQualityFactor();
myChart.data.datasets[8].data = calculateCirculatingCurrent();
myChart.data.datasets[9].data = calculateAntennaSize();
myChart.data.datasets[10].data = calculateSkinDepth();
myChart.update();
updateURL();
} }
square_radio.oninput = function() { square_radio.oninput = function() {
shape = "square"; updateAll();
setGlobals();
drawFrontDesign();
drawSideDesign();
updateFrequencies();
myChart.data.datasets[0].data = calculateTuningCapacitor();
myChart.data.datasets[1].data = calculateCapacitorVoltage();
myChart.data.datasets[2].data = calculateBandwidth();
myChart.data.datasets[3].data = calculateEfficiencyFactor();
myChart.data.datasets[4].data = calculateRadiationResistance();
myChart.data.datasets[5].data = calculateLossResistance();
myChart.data.datasets[6].data = calculateInductiveReactance();
myChart.data.datasets[7].data = calculateQualityFactor();
myChart.data.datasets[8].data = calculateCirculatingCurrent();
myChart.data.datasets[9].data = calculateAntennaSize();
myChart.data.datasets[10].data = calculateSkinDepth();
myChart.update();
updateURL();
} }
// Specify fonts for changing parameters controlled by the sliders: // Specify fonts for changing parameters controlled by the sliders:
@ -840,23 +795,7 @@
}, emphasis_delay); }, emphasis_delay);
} }
setGlobals(); updateUnits();
drawFrontDesign();
drawSideDesign();
updateFrequencies();
myChart.data.datasets[0].data = calculateTuningCapacitor();
myChart.data.datasets[1].data = calculateCapacitorVoltage();
myChart.data.datasets[2].data = calculateBandwidth();
myChart.data.datasets[3].data = calculateEfficiencyFactor();
myChart.data.datasets[4].data = calculateRadiationResistance();
myChart.data.datasets[5].data = calculateLossResistance();
myChart.data.datasets[6].data = calculateInductiveReactance();
myChart.data.datasets[7].data = calculateQualityFactor();
myChart.data.datasets[8].data = calculateCirculatingCurrent();
myChart.data.datasets[9].data = calculateAntennaSize();
myChart.data.datasets[10].data = calculateSkinDepth();
myChart.update();
updateURL();
} }
var cond_dia_timer_handler = 0; var cond_dia_timer_handler = 0;
@ -882,22 +821,7 @@
}, emphasis_delay); }, emphasis_delay);
} }
setGlobals(); updateUnits();
drawFrontDesign();
drawSideDesign();
myChart.data.datasets[0].data = calculateTuningCapacitor();
myChart.data.datasets[1].data = calculateCapacitorVoltage();
myChart.data.datasets[2].data = calculateBandwidth();
myChart.data.datasets[3].data = calculateEfficiencyFactor();
myChart.data.datasets[4].data = calculateRadiationResistance();
myChart.data.datasets[5].data = calculateLossResistance();
myChart.data.datasets[6].data = calculateInductiveReactance();
myChart.data.datasets[7].data = calculateQualityFactor();
myChart.data.datasets[8].data = calculateCirculatingCurrent();
myChart.data.datasets[9].data = calculateAntennaSize();
myChart.data.datasets[10].data = calculateSkinDepth();
myChart.update();
updateURL();
} }
var turns_timer_handler = 0; var turns_timer_handler = 0;
@ -920,23 +844,7 @@
}, emphasis_delay); }, emphasis_delay);
} }
setGlobals(); updateUnits();
drawFrontDesign();
drawSideDesign();
updateFrequencies();
myChart.data.datasets[0].data = calculateTuningCapacitor();
myChart.data.datasets[1].data = calculateCapacitorVoltage();
myChart.data.datasets[2].data = calculateBandwidth();
myChart.data.datasets[3].data = calculateEfficiencyFactor();
myChart.data.datasets[4].data = calculateRadiationResistance();
myChart.data.datasets[5].data = calculateLossResistance();
myChart.data.datasets[6].data = calculateInductiveReactance();
myChart.data.datasets[7].data = calculateQualityFactor();
myChart.data.datasets[8].data = calculateCirculatingCurrent();
myChart.data.datasets[9].data = calculateAntennaSize();
myChart.data.datasets[10].data = calculateSkinDepth();
myChart.update();
updateURL();
} }
var spacing_timer_handler = 0; var spacing_timer_handler = 0;
@ -959,25 +867,7 @@
}, emphasis_delay); }, emphasis_delay);
} }
setGlobals(); updateUnits();
drawFrontDesign();
drawSideDesign();
if(loop_turns > 1) {
updateFrequencies();
}
myChart.data.datasets[0].data = calculateTuningCapacitor();
myChart.data.datasets[1].data = calculateCapacitorVoltage();
myChart.data.datasets[2].data = calculateBandwidth();
myChart.data.datasets[3].data = calculateEfficiencyFactor();
myChart.data.datasets[4].data = calculateRadiationResistance();
myChart.data.datasets[5].data = calculateLossResistance();
myChart.data.datasets[6].data = calculateInductiveReactance();
myChart.data.datasets[7].data = calculateQualityFactor();
myChart.data.datasets[8].data = calculateCirculatingCurrent();
myChart.data.datasets[9].data = calculateAntennaSize();
myChart.data.datasets[10].data = calculateSkinDepth();
myChart.update();
updateURL();
} }
var tx_timer_handler = 0; var tx_timer_handler = 0;