PKT8 fixes
This commit is contained in:
parent
a33457d025
commit
1da1d628c2
@ -42,12 +42,10 @@ import java.util.*;
|
||||
*/
|
||||
public class PKT8Device extends PortSensor<PKT8Result> {
|
||||
|
||||
private static final String[] CHANNEL_DESIGNATIONS = {"a", "b", "c", "d", "e", "f", "g", "h"};
|
||||
|
||||
public static final String PGA = "pga";
|
||||
public static final String SPS = "sps";
|
||||
public static final String ABUF = "abuf";
|
||||
|
||||
private static final String[] CHANNEL_DESIGNATIONS = {"a", "b", "c", "d", "e", "f", "g", "h"};
|
||||
/**
|
||||
* The key is the letter (a,b,c,d...) as in measurements
|
||||
*/
|
||||
@ -77,6 +75,7 @@ public class PKT8Device extends PortSensor<PKT8Result> {
|
||||
}
|
||||
|
||||
super.init();
|
||||
|
||||
//update parameters from meta
|
||||
if (meta().hasValue("pga")) {
|
||||
getLogger().info("Setting dynamic range to " + meta().getInt("pga"));
|
||||
@ -95,10 +94,12 @@ public class PKT8Device extends PortSensor<PKT8Result> {
|
||||
|
||||
@Override
|
||||
public void shutdown() throws ControlException {
|
||||
super.shutdown();
|
||||
if (collector != null) {
|
||||
collector.clear();
|
||||
collector = null;
|
||||
}
|
||||
super.shutdown();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PortHandler buildHandler(String portName) throws ControlException {
|
||||
@ -154,7 +155,7 @@ public class PKT8Device extends PortSensor<PKT8Result> {
|
||||
private String spsToStr(int sps) {
|
||||
switch (sps) {
|
||||
case 0:
|
||||
return "2,5 SPS";
|
||||
return "2.5 SPS";
|
||||
case 1:
|
||||
return "5 SPS";
|
||||
case 2:
|
||||
@ -196,9 +197,9 @@ public class PKT8Device extends PortSensor<PKT8Result> {
|
||||
case 4:
|
||||
return "± 312.5 mV";
|
||||
case 5:
|
||||
return "± 156,25 mV";
|
||||
return "± 156.25 mV";
|
||||
case 6:
|
||||
return "± 78,125 mV";
|
||||
return "± 78.125 mV";
|
||||
default:
|
||||
return "unknown value";
|
||||
}
|
||||
@ -274,6 +275,10 @@ public class PKT8Device extends PortSensor<PKT8Result> {
|
||||
return this.getMeasurement();
|
||||
} else {
|
||||
try {
|
||||
if (getHandler().isLocked()) {
|
||||
getLogger().error("Breaking hold on handler because it is locked");
|
||||
getHandler().breakHold();
|
||||
}
|
||||
return new PKT8Measurement(getHandler());
|
||||
} catch (ControlException e) {
|
||||
throw new MeasurementException(e);
|
||||
@ -286,11 +291,12 @@ public class PKT8Device extends PortSensor<PKT8Result> {
|
||||
//clearing PKT queue
|
||||
try {
|
||||
getHandler().send("p");
|
||||
getHandler().sendAndWait("p", null, 1000);
|
||||
getHandler().sendAndWait("p", 400);
|
||||
} catch (ControlException e) {
|
||||
getLogger().error("Failed to clear PKT8 port");
|
||||
// throw new MeasurementException(e);
|
||||
}
|
||||
if(collector == null){
|
||||
if (collector == null) {
|
||||
setupStorage();
|
||||
}
|
||||
return super.startMeasurement();
|
||||
@ -307,6 +313,10 @@ public class PKT8Device extends PortSensor<PKT8Result> {
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
if (isStarted()) {
|
||||
getLogger().warn("Trying to start measurement which is already started");
|
||||
}
|
||||
|
||||
try {
|
||||
handler.holdBy(this);
|
||||
handler.send("s");
|
||||
@ -314,20 +324,26 @@ public class PKT8Device extends PortSensor<PKT8Result> {
|
||||
} catch (PortException ex) {
|
||||
error("Failed to start measurement", ex);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean stop(boolean force) throws MeasurementException {
|
||||
try {
|
||||
getHandler().send("p");
|
||||
if (collector != null) {
|
||||
collector.clear();
|
||||
if (isFinished()) {
|
||||
getLogger().warn("Trying to stop measurement which is already stopped");
|
||||
}
|
||||
return true;
|
||||
|
||||
try {
|
||||
String response = getHandler().sendAndWait("p", 400).trim();
|
||||
// Должно быть именно с большой буквы!!!
|
||||
return "Stopped".equals(response) || "stopped".equals(response);
|
||||
} catch (Exception ex) {
|
||||
error(ex);
|
||||
return false;
|
||||
} finally {
|
||||
if (collector != null) {
|
||||
collector.clear();
|
||||
}
|
||||
handler.unholdBy(this);
|
||||
}
|
||||
}
|
||||
@ -338,8 +354,8 @@ public class PKT8Device extends PortSensor<PKT8Result> {
|
||||
String trimmed = message.trim();
|
||||
|
||||
if (isStarted()) {
|
||||
if (trimmed.equals("stopped")) {
|
||||
afterStop();
|
||||
if (trimmed.equals("Stopped") || trimmed.equals("stopped")) {
|
||||
afterPause();
|
||||
getLogger().info("Measurement stopped");
|
||||
} else {
|
||||
String designation = trimmed.substring(0, 1);
|
||||
@ -354,7 +370,6 @@ public class PKT8Device extends PortSensor<PKT8Result> {
|
||||
} else {
|
||||
result(new PKT8Result(designation, rawValue, -1));
|
||||
}
|
||||
setMeasurementState(MeasurementState.OK);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,6 @@
|
||||
*/
|
||||
package inr.numass.cryotemp;
|
||||
|
||||
import hep.dataforge.context.GlobalContext;
|
||||
import hep.dataforge.control.devices.Device;
|
||||
import hep.dataforge.control.devices.DeviceListener;
|
||||
import hep.dataforge.control.measurements.Measurement;
|
||||
@ -33,6 +32,8 @@ import hep.dataforge.plots.fx.FXPlotFrame;
|
||||
import hep.dataforge.plots.fx.PlotContainer;
|
||||
import hep.dataforge.plots.jfreechart.JFreeChartFrame;
|
||||
import hep.dataforge.values.Value;
|
||||
import javafx.beans.InvalidationListener;
|
||||
import javafx.beans.Observable;
|
||||
import javafx.event.ActionEvent;
|
||||
import javafx.fxml.FXML;
|
||||
import javafx.fxml.Initializable;
|
||||
@ -58,18 +59,17 @@ import java.util.ResourceBundle;
|
||||
public class PKT8MainViewController implements Initializable, DeviceListener, MeasurementListener<PKT8Result>, AutoCloseable {
|
||||
|
||||
public static final String DEFAULT_CONFIG_LOCATION = "devices.xml";
|
||||
ConsoleFragment consoleFragment;
|
||||
private PKT8Device device;
|
||||
private FXPlotFrame<XYPlottable> plotFrame;
|
||||
private TimePlottableGroup plottables;
|
||||
private Meta currentPlotConfig;
|
||||
|
||||
ConsoleFragment consoleFragment;
|
||||
|
||||
@FXML
|
||||
private Button loadConfigButton;
|
||||
@FXML
|
||||
private ToggleButton startStopButton;
|
||||
@FXML
|
||||
private ToggleButton rawDataButton;
|
||||
@FXML
|
||||
private AnchorPane plotArea;
|
||||
@FXML
|
||||
private ToggleButton consoleButton;
|
||||
@ -89,6 +89,17 @@ public class PKT8MainViewController implements Initializable, DeviceListener, Me
|
||||
setupPlotFrame(null);
|
||||
this.consoleFragment = new ConsoleFragment();
|
||||
consoleFragment.bindTo(consoleButton);
|
||||
rawDataButton.selectedProperty().addListener(new InvalidationListener() {
|
||||
@Override
|
||||
public void invalidated(Observable observable) {
|
||||
if (plotFrame != null) {
|
||||
setupPlotFrame(plotFrame.getConfig());
|
||||
if (device != null) {
|
||||
setupChannels();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@FXML
|
||||
@ -96,7 +107,7 @@ public class PKT8MainViewController implements Initializable, DeviceListener, Me
|
||||
FileChooser fileChooser = new FileChooser();
|
||||
fileChooser.setTitle("Open configuration file");
|
||||
fileChooser.setInitialFileName(DEFAULT_CONFIG_LOCATION);
|
||||
fileChooser.setInitialDirectory(GlobalContext.instance().io().getRootDirectory());
|
||||
// fileChooser.setInitialDirectory(GlobalContext.instance().io().getRootDirectory());
|
||||
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("xml", "*.xml", "*.XML"));
|
||||
fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("json", "*.json", "*.JSON"));
|
||||
// fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("all", "*.*"));
|
||||
@ -129,7 +140,6 @@ public class PKT8MainViewController implements Initializable, DeviceListener, Me
|
||||
}
|
||||
|
||||
setupPlotFrame(plotConfig.getNode("plotFrame", null));
|
||||
currentPlotConfig = plotConfig;
|
||||
}
|
||||
|
||||
if (config.hasNode("device")) {
|
||||
@ -144,7 +154,7 @@ public class PKT8MainViewController implements Initializable, DeviceListener, Me
|
||||
/**
|
||||
* Set o reset plot area
|
||||
*/
|
||||
private void setupPlotFrame(Meta plotFrameMeta) {
|
||||
private synchronized void setupPlotFrame(Meta plotFrameMeta) {
|
||||
plottables = new TimePlottableGroup();
|
||||
plotArea.getChildren().clear();
|
||||
plotFrame = new JFreeChartFrame(plotFrameMeta);
|
||||
@ -169,8 +179,7 @@ public class PKT8MainViewController implements Initializable, DeviceListener, Me
|
||||
device.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyDeviceInitialized(Device device) {
|
||||
private void setupChannels() {
|
||||
Collection<PKT8Channel> channels = this.device.getChanels();
|
||||
|
||||
//plot config from device configuration
|
||||
@ -188,16 +197,18 @@ public class PKT8MainViewController implements Initializable, DeviceListener, Me
|
||||
plottables.addPlottable(plottable);
|
||||
plotFrame.add(plottable);
|
||||
});
|
||||
plottables.applyConfig(plotFrame.getConfig());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyDeviceInitialized(Device device) {
|
||||
setupChannels();
|
||||
startStopButton.setDisable(false);
|
||||
|
||||
if (currentPlotConfig != null) {
|
||||
applyViewConfig(currentPlotConfig);
|
||||
}
|
||||
}
|
||||
|
||||
public void applyViewConfig(Meta viewConfig) {
|
||||
plottables.applyConfig(viewConfig);
|
||||
}
|
||||
// public void applyViewConfig(Meta viewConfig) {
|
||||
// plottables.applyConfig(viewConfig);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public void notifyDeviceShutdown(Device device) {
|
||||
@ -213,9 +224,13 @@ public class PKT8MainViewController implements Initializable, DeviceListener, Me
|
||||
|
||||
|
||||
@Override
|
||||
public void onMeasurementResult(Measurement<PKT8Result> measurement, PKT8Result result, Instant time) {
|
||||
public synchronized void onMeasurementResult(Measurement<PKT8Result> measurement, PKT8Result result, Instant time) {
|
||||
if (rawDataButton.isSelected()) {
|
||||
plottables.put(result.channel, result.rawValue);
|
||||
} else {
|
||||
plottables.put(result.channel, result.temperature);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onMeasurementFailed(Measurement measurement, Throwable exception) {
|
||||
|
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<device>
|
||||
<!-- Device configuration -->
|
||||
<storage path="D:\\temp\\cryo"/>
|
||||
<port>192.168.111.36:4001</port>
|
||||
<abuf>1</abuf>
|
||||
<averagingDuration>"PT60S"</averagingDuration>
|
||||
|
||||
<!-- Channel configuration -->
|
||||
<channel designation="a" name="T1" r0="1000" transformationType="hyperbolic"
|
||||
coefs="[17.066, -249.29, 1663.6, -5263.8, 9004.7, -7151.8, 2288.3]"/>
|
||||
<channel designation="b" name="T2" r0="1000" transformationType="hyperbolic"
|
||||
coefs="[73.202, -841.5, 3995.9, -9579.1, 12361.0, -7976.5, 2161.3]"/>
|
||||
<channel designation="c" name="T3" r0="1000" transformationType="hyperbolic"
|
||||
coefs="[52.402, -579.55, 2665.5, -6110.0, 7501.9, -4553.5, 1197.1]"/>
|
||||
<channel designation="d" name="T4" r0="1000" transformationType="hyperbolic"
|
||||
coefs="[17.136, -249.09, 1667.5, -5316.4, 9226.7, -7515.6, 2382.4]"/>
|
||||
<channel designation="e" name="T5" r0="1000" transformationType="hyperbolic"
|
||||
coefs="[58.060, -664.38, 3158.3, -7531.0, 9616.3, -6029.3, 1589.6]"/>
|
||||
<!-- Обрыв -->
|
||||
<!-- <channel designation="f" name="T6" r0="1000" transformationType="hyperbolic" coefs="[989.0, -1040.0, 4958.6, -11980, 15598, -10158, 2728.4]"/>-->
|
||||
<channel designation="g" name="T7" r0="1000" transformationType="hyperbolic"
|
||||
coefs="[71.984, -822.09, 3872.0, -9183.0, 11729.0, -7518.6, 2034.2]"/>
|
||||
<channel designation="h" name="T8" r0="1000" transformationType="hyperbolic"
|
||||
coefs="[23.894, -358.42, 2355.2, -7509.8, 12893.0, -10454.0, 3403.9]"/>
|
||||
|
||||
<!-- Plot configuration -->
|
||||
<plotConfig>
|
||||
<eachPlot thickness="3"/>
|
||||
</plotConfig>
|
||||
</device>
|
@ -16,11 +16,11 @@ See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
|
||||
<?import javafx.scene.control.*?>
|
||||
<?import javafx.scene.layout.AnchorPane?>
|
||||
<?import javafx.scene.layout.BorderPane?>
|
||||
<BorderPane prefHeight="600.0" prefWidth="800.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="inr.numass.cryotemp.PKT8MainViewController">
|
||||
<BorderPane xmlns:fx="http://javafx.com/fxml/1" prefHeight="600.0" prefWidth="800.0"
|
||||
xmlns="http://javafx.com/javafx/8.0.60" fx:controller="inr.numass.cryotemp.PKT8MainViewController">
|
||||
<center>
|
||||
<AnchorPane fx:id="plotArea" />
|
||||
</center>
|
||||
@ -28,6 +28,7 @@ limitations under the License.
|
||||
<ToolBar BorderPane.alignment="CENTER">
|
||||
<items>
|
||||
<ToggleButton fx:id="startStopButton" disable="true" mnemonicParsing="false" onAction="#onStartStopClick" prefWidth="50.0" text="Start" />
|
||||
<ToggleButton fx:id="rawDataButton" mnemonicParsing="false" text="Raw data"/>
|
||||
<Separator orientation="VERTICAL" />
|
||||
<Button fx:id="loadConfigButton" mnemonicParsing="false" onAction="#onLoadConfigClick" text="Load config" />
|
||||
<ToggleButton fx:id="consoleButton" contentDisplay="CENTER" mnemonicParsing="false" text="Console" />
|
||||
|
Loading…
Reference in New Issue
Block a user