Commit 447a735d authored by Andrey Filippov's avatar Andrey Filippov

Adding heater/fan control for thermal focal distance measurements

parent d3195f8c
......@@ -519,6 +519,7 @@ public static MatchSimulatedPattern.DistortionParameters DISTORTION =new MatchSi
public float [][] SIM_ARRAY=null; // first index - 0 - main, 1 - shifted by 0.5 pixel diagonally (to extract checker greens)
public static CalibrationHardwareInterface.LaserPointers LASERS=new CalibrationHardwareInterface.LaserPointers(LASER_POINTERS);
public static CalibrationHardwareInterface.PowerControl POWER_CONTROL=new CalibrationHardwareInterface.PowerControl();
public static CalibrationHardwareInterface.CamerasInterface CAMERAS=new CalibrationHardwareInterface.CamerasInterface(26,LASERS);
public static CalibrationHardwareInterface.FocusingMotors MOTORS=new CalibrationHardwareInterface.FocusingMotors();
......@@ -781,6 +782,7 @@ if (MORE_BUTTONS) {
addButton("Auto Focus/Tilt",panelFocusing,color_process);
// addButton("List Pre-focus",panelFocusing);
addButton("Focus Average",panelFocusing,color_report);
addButton("Power Control",panelFocusing,color_configure);
addButton("Temp. Scan",panelFocusing,color_process);
//
addButton("List History",panelFocusing,color_report);
......@@ -3766,6 +3768,7 @@ if (MORE_BUTTONS) {
// Use rotation from head lasers
if (FOCUS_MEASUREMENT_PARAMETERS.useHeadLasers){
psi=-headPointersTilt; // "-" - correction, instead of the target tilt
FOCUS_MEASUREMENT_PARAMETERS.result_PSI=psi; // Was not here, using relative to the pattern (w/o head lasers)
}
double diffY=12*Math.sin(Math.PI/180.0*psi);
......@@ -5069,7 +5072,8 @@ if (MORE_BUTTONS) {
Matcher matcher=fileNameFormat.matcher(fileList[i].getName());
if (matcher.find()){
if ((matcher.group(1)!=null) && multiLensPerSFE) lens= Integer.parseInt(matcher.group(1));
if ((matcher.group(2)!=null) && stageResults && multiLensPerSFE) manState=Integer.parseInt(matcher.group(2));
// if ((matcher.group(2)!=null) && stageResults && multiLensPerSFE) manState=Integer.parseInt(matcher.group(2));
if ((matcher.group(2)!=null) && stageResults) manState=Integer.parseInt(matcher.group(2));
} else {
matcher=fileNameFormat0.matcher(fileList[i].getName());
if (matcher.find()){
......@@ -5085,6 +5089,7 @@ if (MORE_BUTTONS) {
ts=Double.parseDouble(sts);
} else {
System.out.println("Failed to find timestamp in "+fileList[i].getName()+", lens="+lens+" manState="+manState);
continue;
}
if (DEBUG_LEVEL>1){
System.out.println (i+": "+fileList[i].getName()+ " lens="+lens+" manState="+manState+" timestamp="+ts);
......@@ -5187,8 +5192,8 @@ if (MORE_BUTTONS) {
sb.append("\t"+IJ.d2s(sfeParameters[iSFE][iLens][iState].result_B50,3));
sb.append("\t"+IJ.d2s(sfeParameters[iSFE][iLens][iState].result_RC50,3));
// if (iState==0) { // to visually separate different lenses
sb.append("\t"+IJ.d2s(sfeParameters[iSFE][iLens][iState].result_PX0-0.5*sensorDimensions[iSFE][0],3));
sb.append("\t"+IJ.d2s(sfeParameters[iSFE][iLens][iState].result_PY0-0.5*sensorDimensions[iSFE][1],3));
sb.append("\t"+IJ.d2s(sfeParameters[iSFE][iLens][iState].result_PX0-0.5*sensorDimensions[iSFE][0]-sfeParameters[iSFE][iLens][iState].centerDeltaX,3));
sb.append("\t"+IJ.d2s(sfeParameters[iSFE][iLens][iState].result_PY0-0.5*sensorDimensions[iSFE][1]-sfeParameters[iSFE][iLens][iState].centerDeltaY,3));
// } else {
// sb.append("\t\t");
// }
......@@ -5266,7 +5271,15 @@ if (MORE_BUTTONS) {
MASTER_DEBUG_LEVEL,
DISTORTION.loop_debug_level);
return;
}
}
/* ======================================================================== */
//"Power Control"
if (label.equals("Power Control")) {
DEBUG_LEVEL=MASTER_DEBUG_LEVEL;
POWER_CONTROL.setDebugLevel(DEBUG_LEVEL);
POWER_CONTROL.showDialog("Configure power control", true);
return;
}
/* ======================================================================== */
if (label.equals("Temp. Scan") || label.equals("Focus Average")) {
checkSerialAndRestore(); // returns true if did not change or was restored
......@@ -5286,16 +5299,27 @@ if (MORE_BUTTONS) {
gd.addMessage("Temperature has to be varied separately.");
gd.addMessage("Use \"List History\" to see the results.");
gd.addCheckbox("Turn lasers off to protect from overheating",true);
if (!POWER_CONTROL.isPowerControlEnabled()){
gd.addMessage("Power control hardware is disabled, use \"Power Control\" command to enable it before proceeding");
}
}
gd.addCheckbox("Erase previous measurement history",modeAverage);
gd.addCheckbox("Allow tilt scan when looking for the best fit",!noTiltScan);
gd.addCheckbox ("Use lens aberration model (if available) for focal distance and tilts", FOCUS_MEASUREMENT_PARAMETERS.useLMAMetrics);
// gd.addCheckbox("Use LMA calculations for focus/tilt",useLMA);
double scanMinutes=modeAverage?2.0:30.0;
gd.addNumericField("Measure for ", scanMinutes , 1,5," minutes");
if (modeAverage) {
gd.addNumericField("Measure for ", scanMinutes , 1,5," minutes");
} else {
gd.addCheckbox ("Enable power control for heater and fan", FOCUS_MEASUREMENT_PARAMETERS.powerControlEnable);
gd.addNumericField("Maximal allowed temperature", FOCUS_MEASUREMENT_PARAMETERS.powerControlMaximalTemperature, 3,5,"C");
gd.addNumericField("Heater ON time", FOCUS_MEASUREMENT_PARAMETERS.powerControlHeaterOnMinutes, 1,5,"min");
gd.addNumericField("Both heater and fan OFF time", FOCUS_MEASUREMENT_PARAMETERS.powerControlNeitherOnMinutes, 1,5,"min");
gd.addNumericField("Fan ON time", FOCUS_MEASUREMENT_PARAMETERS.powerControlFanOnMinutes, 1,5,"min");
}
gd.showDialog();
if (gd.wasCanceled()) return;
if (!modeAverage && gd.getNextBoolean()){
if (!modeAverage && gd.getNextBoolean()){ // was only asked in thermal scan mode
UV_LED_LASERS.debugLevel=DEBUG_LEVEL;
UV_LED_LASERS.lasersOff(FOCUS_MEASUREMENT_PARAMETERS);
if (MASTER_DEBUG_LEVEL>0) System.out.println ("Turned laser pointers off to protect from overheating");
......@@ -5312,9 +5336,19 @@ if (MORE_BUTTONS) {
FOCUSING_FIELD.setDebugLevel(DEBUG_LEVEL);
}
boolean useLMA=FOCUS_MEASUREMENT_PARAMETERS.useLMAMetrics && (FOCUSING_FIELD!=null);
// int startHistPos=MOTORS.historySize();
scanMinutes=gd.getNextNumber();
if (modeAverage) {
scanMinutes=gd.getNextNumber();
} else {
FOCUS_MEASUREMENT_PARAMETERS.powerControlEnable=gd.getNextBoolean();
FOCUS_MEASUREMENT_PARAMETERS.powerControlMaximalTemperature=gd.getNextNumber();
FOCUS_MEASUREMENT_PARAMETERS.powerControlHeaterOnMinutes=gd.getNextNumber();
FOCUS_MEASUREMENT_PARAMETERS.powerControlNeitherOnMinutes=gd.getNextNumber();
FOCUS_MEASUREMENT_PARAMETERS.powerControlFanOnMinutes=gd.getNextNumber();
scanMinutes=FOCUS_MEASUREMENT_PARAMETERS.powerControlMaximalTemperature+
FOCUS_MEASUREMENT_PARAMETERS.powerControlHeaterOnMinutes+
FOCUS_MEASUREMENT_PARAMETERS.powerControlNeitherOnMinutes+
FOCUS_MEASUREMENT_PARAMETERS.powerControlFanOnMinutes;
}
long startTime=System.nanoTime();
long endTime=startTime+(long) (6E10*scanMinutes);
if (MASTER_DEBUG_LEVEL>0) System.out.println(" startTime= "+startTime+", endTime="+endTime);
......@@ -5342,6 +5376,13 @@ if (MORE_BUTTONS) {
System.out.println("Optimal Ty="+FOCUSING_FIELD.qualBOptimizationResults[2]);
}
}
long stateEndTime=endTime;
if (!modeAverage) {
POWER_CONTROL.setPower("fan","off");
POWER_CONTROL.setPower("heater","on");
stateEndTime=startTime+(long) (6E10*FOCUS_MEASUREMENT_PARAMETERS.powerControlHeaterOnMinutes);
}
int scanState=(!modeAverage && FOCUS_MEASUREMENT_PARAMETERS.powerControlEnable)?1:-1;
while (System.nanoTime()<endTime){
moveAndMaybeProbe(
true, // just move, not probe
......@@ -5363,15 +5404,48 @@ if (MORE_BUTTONS) {
MASTER_DEBUG_LEVEL,
DISTORTION.loop_debug_level);
runs++;
long secondsLeft=(long) (0.000000001*(endTime-System.nanoTime()));
if (secondsLeft<0) secondsLeft=0;
if (MASTER_DEBUG_LEVEL>0) System.out.println(" Measured "+runs+", "+secondsLeft+" seconds left");
if (this.SYNC_COMMAND.stopRequested.get()>0) {
System.out.println("User requested stop");
break;
}
// Temperature within limits?
if (FOCUS_MEASUREMENT_PARAMETERS.sensorTemperature>=FOCUS_MEASUREMENT_PARAMETERS.powerControlMaximalTemperature){
POWER_CONTROL.setPower("heater","off");
}
// long secondsLeft=(long) (0.000000001*(endTime-System.nanoTime()));
long secondsLeft=(long) (0.000000001*(endTime-System.nanoTime()));
if (secondsLeft<0) secondsLeft=0;
long secondsLeftState=(long) (0.000000001*(stateEndTime-System.nanoTime()));
if (secondsLeftState<0) secondsLeftState=0;
if (MASTER_DEBUG_LEVEL>0) System.out.println(" Measured "+runs+", "+secondsLeftState+" seconds left ("+secondsLeft+")");
boolean timerOver=(System.nanoTime()>=stateEndTime) ||
((scanState==1) && (FOCUS_MEASUREMENT_PARAMETERS.sensorTemperature>=FOCUS_MEASUREMENT_PARAMETERS.powerControlMaximalTemperature));
if ((scanState>0) && timerOver) {
scanState++;
switch (scanState) {
case 2:
POWER_CONTROL.setPower("heater","off");
POWER_CONTROL.setPower("fan","off");
stateEndTime=System.nanoTime()+(long) (6E10*FOCUS_MEASUREMENT_PARAMETERS.powerControlNeitherOnMinutes);
break;
case 3:
POWER_CONTROL.setPower("heater","off");
POWER_CONTROL.setPower("fan","on");
stateEndTime=System.nanoTime()+(long) (6E10*FOCUS_MEASUREMENT_PARAMETERS.powerControlFanOnMinutes);
break;
}
// nothing specific is needed for case 4 - it will end anyway
}
}
if (!modeAverage) {
if (DEBUG_LEVEL>0) System.out.println("Turning both heater and fan off");
POWER_CONTROL.setPower("fan","off");
POWER_CONTROL.setPower("heater","off");
}
// LMA version
FocusingField ff= null;
if (useLMA){
......@@ -5475,7 +5549,7 @@ if (MORE_BUTTONS) {
// Calculate and show average distances and tilts for measured history
if (!modeAverage) {
remoteNotifyComplete();
double [] lastKT=MOTORS.focusingHistory.temperatureLinearApproximation(
useLMA,
runs, // number of last samples from history to use, 0 - use all
......@@ -13820,6 +13894,7 @@ private double [][] jacobianByJacobian(double [][] jacobian, boolean [] mask) {
boolean select_GONIOMETER_PARAMETERS=!select;
boolean select_ABERRATIONS_PARAMETERS=!select;
boolean select_FOCUSING_FIELD=!select;
boolean select_POWER_CONTROL=!select;
if (select) {
GenericDialog gd = new GenericDialog("Select parameters to save");
gd.addMessage("===== Individual parameters ======");
......@@ -13859,6 +13934,8 @@ private double [][] jacobianByJacobian(double [][] jacobian, boolean [] mask) {
gd.addCheckbox("GONIOMETER_PARAMETERS",select_GONIOMETER_PARAMETERS);
gd.addCheckbox("ABERRATIONS_PARAMETERS",select_ABERRATIONS_PARAMETERS);
gd.addCheckbox("FOCUSING_FIELD",select_FOCUSING_FIELD);
gd.addCheckbox("POWER_CONTROL",select_POWER_CONTROL);
WindowTools.addScrollBars(gd);
gd.showDialog();
if (gd.wasCanceled()) return;
......@@ -13898,6 +13975,7 @@ private double [][] jacobianByJacobian(double [][] jacobian, boolean [] mask) {
select_GONIOMETER_PARAMETERS=gd.getNextBoolean();
select_ABERRATIONS_PARAMETERS=gd.getNextBoolean();
select_FOCUSING_FIELD=gd.getNextBoolean();
select_POWER_CONTROL=gd.getNextBoolean();
}
if (select_MASTER_DEBUG_LEVEL) properties.setProperty("MASTER_DEBUG_LEVEL", MASTER_DEBUG_LEVEL+"");
......@@ -13936,6 +14014,8 @@ private double [][] jacobianByJacobian(double [][] jacobian, boolean [] mask) {
if (select_GONIOMETER_PARAMETERS) GONIOMETER_PARAMETERS.setProperties("GONIOMETER_PARAMETERS.", properties);
if (select_ABERRATIONS_PARAMETERS) ABERRATIONS_PARAMETERS.setProperties("ABERRATIONS_PARAMETERS.", properties);
if ((select_FOCUSING_FIELD) && (FOCUSING_FIELD!=null)) FOCUSING_FIELD.setProperties("FOCUSING_FIELD.", properties);
if (select_POWER_CONTROL) POWER_CONTROL.setProperties("POWER_CONTROL.", properties);
if (select) properties.remove("selected");
}
/* ======================================================================== */
......@@ -13976,6 +14056,7 @@ private double [][] jacobianByJacobian(double [][] jacobian, boolean [] mask) {
GONIOMETER_PARAMETERS.getProperties("GONIOMETER_PARAMETERS.", properties);
ABERRATIONS_PARAMETERS.getProperties("ABERRATIONS_PARAMETERS.", properties);
if (FOCUSING_FIELD!=null) FOCUSING_FIELD.getProperties("FOCUSING_FIELD.", properties,false); // false -> overwrite distortions center
POWER_CONTROL.getProperties("POWER_CONTROL.", properties);
}
private String selectSourceDirectory(String defaultPath) {
......
......@@ -1797,12 +1797,99 @@ public class CalibrationHardwareInterface {
throw new RuntimeException(ie);
}
}
}
public static class PowerControl{
public int debugLevel=1;
private String powerIP="192.168.0.80";
private final String urlFormat="http://%s/insteon/index.php?cmd=%s&group=%s";
private final String rootElement="Document";
public boolean powerConrtolEnabled=false;
public void setProperties(String prefix,Properties properties){
properties.setProperty(prefix+"powerIP",this.powerIP+"");
properties.setProperty(prefix+"powerConrtolEnabled",this.powerConrtolEnabled+"");
}
//Integer.decode(string)
public void getProperties(String prefix,Properties properties){
if (properties.getProperty(prefix+"powerIP")!=null)
this.powerIP=properties.getProperty(prefix+"powerIP");
if (properties.getProperty(prefix+"powerConrtolEnabled")!=null)
this.powerConrtolEnabled=Boolean.parseBoolean(properties.getProperty(prefix+"powerConrtolEnabled"));
}
public boolean setPower (String group, String state){
if (!powerConrtolEnabled) {
System.out.println("=== Power control is disabled ===");
return false;
}
String url=String.format(urlFormat,this.powerIP,state,group);
if (this.debugLevel>2) System.out.println("setPower: "+url);
Document dom=null;
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
dom = db.parse(url);
if (!dom.getDocumentElement().getNodeName().equals(rootElement)) {
System.out.println("Root element: expected \""+rootElement+"\", got \"" + dom.getDocumentElement().getNodeName()+"\"");
IJ.showMessage("Error","Root element: expected \""+rootElement+"\", got \"" + dom.getDocumentElement().getNodeName()+"\"");
return false;
}
// boolean responceError= (dom.getDocumentElement().getElementsByTagName("error").getLength()!=0);
// if (responceError) {
// System.out.println("ERROR: register write ("+url+") FAILED" );
// IJ.showMessage("Error","register write ("+url+") FAILED");
// return false;
// }
} catch(MalformedURLException e){
System.out.println("Please check the URL:" + e.toString() );
return false;
} catch(IOException e1){
IJ.showStatus("");
String error = e1.getMessage();
if (error==null || error.equals("")) error = ""+e1;
IJ.showMessage("setPower ERROR", ""+error);
return false;
}catch(ParserConfigurationException pce) {
pce.printStackTrace();
return false;
}catch(SAXException se) {
se.printStackTrace();
return false;
}
return true;
}
public boolean showDialog(String title, boolean control) {
GenericDialog gd = new GenericDialog(title);
boolean heaterOn=false, fanOn=false;
gd.addCheckbox("Enable power control (heater, fan) ", this.powerConrtolEnabled);
gd.addStringField("IP address of the power control",this.powerIP,15);
if (control){
gd.addCheckbox("Heater On", heaterOn);
gd.addCheckbox("Fan On", fanOn);
}
WindowTools.addScrollBars(gd);
if (control) gd.enableYesNoCancel("OK", "Control Power");
gd.showDialog();
if (gd.wasCanceled()) return false;
this.powerConrtolEnabled=gd.getNextBoolean();
this.powerIP=gd.getNextString();
if (control){
heaterOn=gd.getNextBoolean();
fanOn=gd.getNextBoolean();
if (!gd.wasOKed()) {
setPower("heater",heaterOn?"on":"off");
setPower("fan",fanOn?"on":"off");
}
}
return true;
}
public boolean isPowerControlEnabled(){
return this.powerConrtolEnabled;
}
public void setDebugLevel(int debugLevel){
this.debugLevel=debugLevel;
}
}
public static class LaserPointers{
public int debugLevel=1;
......
......@@ -330,6 +330,12 @@ public class LensAdjustment {
public boolean lensDistanceShowResults=true; // show results window from foca
public boolean lensDistanceMoveToGoal=true; // Move to targetMicrons
public boolean powerControlEnable=true;
public double powerControlMaximalTemperature=60.0;
public double powerControlHeaterOnMinutes=10.0;
public double powerControlNeitherOnMinutes=5.0;
public double powerControlFanOnMinutes=15.0;
public String uvLasersIP="192.168.0.236"; // IP address of the camera with UV LEDs and aiming lasers are connected
public int uvLasersBus=0; // 0 if 103641 board is connected to the sensor port (through 10-359), 1 - to 10369
public double [] uvLasersCurrents={40.0,40.0,40.0,40.0}; // default LED on currents (mA)
......@@ -546,6 +552,11 @@ public class LensAdjustment {
boolean lensDistanceInteractive, // Open dialog when calibrating focal distance
boolean lensDistanceShowResults, // show results window from foca
boolean lensDistanceMoveToGoal, // Move to targetMicrons
boolean powerControlEnable,
double powerControlMaximalTemperature,
double powerControlHeaterOnMinutes,
double powerControlNeitherOnMinutes,
double powerControlFanOnMinutes,
String uvLasersIP, // IP address of the camera with UV LEDs and aiming lasers are connected
int uvLasersBus, // 0 if 103641 board is connected to the sensor port (through 10-359), 1 - to 10369
double [] uvLasersCurrents, // default LED on currents (mA)
......@@ -692,6 +703,11 @@ public class LensAdjustment {
this.lensDistanceInteractive=lensDistanceInteractive; // Open dialog when calibrating focal distance
this.lensDistanceShowResults=lensDistanceShowResults; // show results window from foca
this.lensDistanceMoveToGoal=lensDistanceMoveToGoal; // Move to targetMicrons
this.powerControlEnable=powerControlEnable;
this.powerControlMaximalTemperature=powerControlMaximalTemperature;
this.powerControlHeaterOnMinutes=powerControlHeaterOnMinutes;
this.powerControlNeitherOnMinutes=powerControlNeitherOnMinutes;
this.powerControlFanOnMinutes=powerControlFanOnMinutes;
this.uvLasersIP=new String(uvLasersIP); // IP address of the camera with UV LEDs and aiming lasers are connected
this.uvLasersBus=uvLasersBus; // 0 if 103641 board is connected to the sensor port (through 10-359), 1 - to 10369
this.uvLasersCurrents=uvLasersCurrents.clone(); // default LED on currents (mA)
......@@ -840,6 +856,11 @@ public class LensAdjustment {
this.lensDistanceInteractive, // Open dialog when calibrating focal distance
this.lensDistanceShowResults, // show results window from foca
this.lensDistanceMoveToGoal, // Move to targetMicrons
this.powerControlEnable,
this.powerControlMaximalTemperature,
this.powerControlHeaterOnMinutes,
this.powerControlNeitherOnMinutes,
this.powerControlFanOnMinutes,
this.uvLasersIP, // IP address of the camera with UV LEDs and aiming lasers are connected
this.uvLasersBus, // 0 if 103641 board is connected to the sensor port (through 10-359), 1 - to 10369
this.uvLasersCurrents, // default LED on currents (mA)
......@@ -992,7 +1013,13 @@ public class LensAdjustment {
properties.setProperty(prefix+"lensDistanceInteractive",this.lensDistanceInteractive+"");
properties.setProperty(prefix+"lensDistanceShowResults",this.lensDistanceShowResults+"");
properties.setProperty(prefix+"lensDistanceMoveToGoal",this.lensDistanceMoveToGoal+"");
properties.setProperty(prefix+"powerControlEnable",this.powerControlEnable+"");
properties.setProperty(prefix+"powerControlMaximalTemperature",this.powerControlMaximalTemperature+"");
properties.setProperty(prefix+"powerControlHeaterOnMinutes",this.powerControlHeaterOnMinutes+"");
properties.setProperty(prefix+"powerControlNeitherOnMinutes",this.powerControlNeitherOnMinutes+"");
properties.setProperty(prefix+"powerControlFanOnMinutes",this.powerControlFanOnMinutes+"");
properties.setProperty(prefix+"uvLasersIP",this.uvLasersIP);
properties.setProperty(prefix+"uvLasersBus",this.uvLasersBus+"");
properties.setProperty(prefix+"uvLasersCurrents_0",this.uvLasersCurrents[0]+"");
......@@ -1275,6 +1302,18 @@ public class LensAdjustment {
this.lensDistanceShowResults=Boolean.parseBoolean(properties.getProperty(prefix+"lensDistanceShowResults"));
if (properties.getProperty(prefix+"lensDistanceMoveToGoal")!=null)
this.lensDistanceMoveToGoal=Boolean.parseBoolean(properties.getProperty(prefix+"lensDistanceMoveToGoal"));
if (properties.getProperty(prefix+"powerControlEnable")!=null)
this.powerControlEnable=Boolean.parseBoolean(properties.getProperty(prefix+"powerControlEnable"));
if (properties.getProperty(prefix+"powerControlMaximalTemperature")!=null)
this.powerControlMaximalTemperature=Double.parseDouble(properties.getProperty(prefix+"powerControlMaximalTemperature"));
if (properties.getProperty(prefix+"powerControlHeaterOnMinutes")!=null)
this.powerControlHeaterOnMinutes=Double.parseDouble(properties.getProperty(prefix+"powerControlHeaterOnMinutes"));
if (properties.getProperty(prefix+"powerControlNeitherOnMinutes")!=null)
this.powerControlNeitherOnMinutes=Double.parseDouble(properties.getProperty(prefix+"powerControlNeitherOnMinutes"));
if (properties.getProperty(prefix+"powerControlFanOnMinutes")!=null)
this.powerControlFanOnMinutes=Double.parseDouble(properties.getProperty(prefix+"powerControlFanOnMinutes"));
if (properties.getProperty(prefix+"uvLasersIP")!=null)
this.uvLasersIP=properties.getProperty(prefix+"uvLasersIP");
......@@ -1528,12 +1567,18 @@ public class LensAdjustment {
gd.addCheckbox ("Show results window from focal distance calibration", this.lensDistanceShowResults);
gd.addCheckbox ("Move motors together to the requested microns from the \"best focus\"", this.lensDistanceMoveToGoal);
gd.addCheckbox ("Enable power control for heater and fan", this.powerControlEnable);
gd.addNumericField("Maximal allowed temperature", this.powerControlMaximalTemperature, 3,5,"C");
gd.addNumericField("Heater ON time", this.powerControlHeaterOnMinutes, 1,5,"min");
gd.addNumericField("Both heater and fan OFF time", this.powerControlNeitherOnMinutes, 1,5,"min");
gd.addNumericField("Fan ON time", this.powerControlFanOnMinutes, 1,5,"min");
gd.addStringField ("IP address of the camera with 103641 board (UV LEDs and lasers) are attached", this.uvLasersIP,40);
gd.addNumericField("I2C bus where LED/laser board is attached (0 - through 10359, 1 - through 10369)",this.uvLasersBus, 0);
gd.addNumericField("UV LED1 \"on\" current (left/near when looking from the target)", this.uvLasersCurrents[0], 3,5,"mA");
gd.addNumericField("UV LED2 \"on\" current (right/near when looking from the target)", this.uvLasersCurrents[0], 3,5,"mA");
gd.addNumericField("UV LED3 \"on\" current (right/far when looking from the target)", this.uvLasersCurrents[0], 3,5,"mA");
gd.addNumericField("UV LED4 \"on\" current (left/far when looking from the target)", this.uvLasersCurrents[0], 3,5,"mA");
gd.addNumericField("UV LED1 \"on\" current (left/near when looking from the target)", this.uvLasersCurrents[0], 3,5,"mA");
gd.addNumericField("UV LED2 \"on\" current (right/near when looking from the target)", this.uvLasersCurrents[0], 3,5,"mA");
gd.addNumericField("UV LED3 \"on\" current (right/far when looking from the target)", this.uvLasersCurrents[0], 3,5,"mA");
gd.addNumericField("UV LED4 \"on\" current (left/far when looking from the target)", this.uvLasersCurrents[0], 3,5,"mA");
gd.addMessage("");
gd.addNumericField("Minimal correction movement to initiate final series of corrections - focus/tilt mode", this.minCorr, 1,5,"motors steps");
......@@ -1700,6 +1745,12 @@ public class LensAdjustment {
this.lensDistanceInteractive= gd.getNextBoolean();
this.lensDistanceShowResults= gd.getNextBoolean();
this.lensDistanceMoveToGoal= gd.getNextBoolean();
this.powerControlEnable= gd.getNextBoolean();
this.powerControlMaximalTemperature=gd.getNextNumber();
this.powerControlHeaterOnMinutes= gd.getNextNumber();
this.powerControlNeitherOnMinutes= gd.getNextNumber();
this.powerControlFanOnMinutes= gd.getNextNumber();
this.uvLasersIP= gd.getNextString();
this.uvLasersBus= (int) gd.getNextNumber();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment