WIP161117

WIP-PC2
Harald Wolff 2016-11-17 16:37:45 +01:00
parent a7e43ec0b4
commit 4332bb8a14
17 changed files with 1186 additions and 142 deletions

View File

@ -9,6 +9,7 @@ import java.util.Arrays;
import java.util.Date;
import org.hwo.csv.CSVRecord;
import org.hwo.models.TableMapper.TableColumn;
import org.hwo.servicelink.ServiceLink;
import org.hwo.servicelink.ServiceLinkException;
@ -21,19 +22,24 @@ public class SnapShot {
Integer[] values;
Integer[] analog;
Integer[] merker;
Integer inputmask,
outputmask,
pullupmask,
invertmask,
triggermask;
static SimpleDateFormat
df = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
public SnapShot(int deviceSerial){
this.deviceSerial = deviceSerial;
this.values = new Integer[32];
this.analog = new Integer[8];
this.merker = new Integer[24];
}
@ -74,6 +80,7 @@ public class SnapShot {
}
}
@TableColumn(label="Gerät",order=5,width=80)
public Integer getDeviceSerial() {
return deviceSerial;
}
@ -81,6 +88,7 @@ public class SnapShot {
this.deviceSerial = deviceSerial;
}
@TableColumn(label="HW-Index",order=0,width=80)
public Integer getIndex() {
return index;
}
@ -97,6 +105,7 @@ public class SnapShot {
public void setTimestamp(Integer timestamp) {
this.timestamp = timestamp;
}
public Integer getTimestamp() {
return timestamp;
}
@ -141,7 +150,9 @@ public class SnapShot {
return this.values[ch];
}
return null;
}
}
@TableColumn(label="Zähler #%d",order=50,fieldlength=32, width=80)
public Integer[] getValues(){
return Arrays.copyOf(this.values, this.values.length);
}
@ -172,7 +183,12 @@ public class SnapShot {
public int getSource(){
return (field0 >> 8) & 0xff;
}
@TableColumn(label="Zeitstempel",order=10,width=100)
public String getTimeStampFormated(){
return df.format(new Date(((long)timestamp)*1000));
}
public byte[] toBytes(){
byte[] buffer = new byte[256];
@ -226,7 +242,6 @@ public class SnapShot {
if (extended)
record.appendValue(timestamp);
SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");
record.appendValue(df.format(new Date(((long)timestamp)*1000)));

View File

@ -267,7 +267,7 @@ public class PulsCounterDatabase {
simpleScript.getId(),
simpleScript.getName(),
simpleScript.getDescription(),
simpleScript.getSimpleScriptElementsAsInt()
simpleScript.getSimpleScriptElementsAsInteger()
);
}

View File

@ -1,5 +1,7 @@
package org.hwo.pulscounter.device;
import java.awt.Component;
import org.hwo.pulscounter.SnapShot;
public interface IDeviceConnector {
@ -9,7 +11,7 @@ public interface IDeviceConnector {
public Integer getDeviceSerial();
public boolean showConnctionSetup();
public boolean showConnctionSetup(Component parent);
public String getConnectionSettings();
public void setConnectionSettings(String connectionSettings);
public String getConnectionSettingsText();
@ -51,7 +53,10 @@ public interface IDeviceConnector {
public int[] getWindows();
public void setWindows(int[] windows);
public int[] getIncrements();
public void setIncrements(int[] increments);
public int getInterval(int iNo);
public boolean isIntervalDailyBased(int iNo);
public void setInterval(int iNo,int intervall,boolean dailyBase);

View File

@ -1,5 +1,6 @@
package org.hwo.pulscounter.device;
import java.awt.Component;
import java.io.IOException;
import java.text.DateFormat;
import java.util.ArrayList;
@ -10,6 +11,7 @@ import java.util.List;
import org.hwo.io.NewSerialPort.NewSerialPort;
import org.hwo.pulscounter.SnapShot;
import org.hwo.pulscounter.simplescript.SimpleScript.SimpleScriptElement;
import org.hwo.pulscounter.ui.DeviceConfiguration;
import org.hwo.servicelink.ServiceLink;
import org.hwo.servicelink.ServiceLinkException;
@ -84,8 +86,8 @@ public class ServiceLinkDeviceConnector implements IDeviceConnector {
}
@Override
public boolean showConnctionSetup() {
NewSerialPort newSerialPort = SerialPortChooser.execute(serviceLink.getSerialPort().getPortName());
public boolean showConnctionSetup(Component parent) {
NewSerialPort newSerialPort = SerialPortChooser.execute(parent,serviceLink.getSerialPort().getPortName());
if (newSerialPort != null){
serviceLink.close();
serviceLink.getSerialPort().setPortName(newSerialPort.getPortName());
@ -161,13 +163,55 @@ public class ServiceLinkDeviceConnector implements IDeviceConnector {
@Override
public int[] getSimpleScript() {
// TODO Auto-generated method stub
try {
Integer l = serviceLink.readInt(13, 0, 0x0700);
log(DEBUG,"%d ScriptElements on Device.",l);
if (l<0)
return new int[0];
int[] script = new int[l];
int p;
serviceLink.writeInt(13, 0, 0x0701, 0);
for (p=0;p<l;p++){
script[p] = serviceLink.readInt(13, 0, 0x0702);
SimpleScriptElement e = new SimpleScriptElement(script[p]);
log(DEBUG,"Element: 0x%08x [A=0x%02x B=0x%02x C=0x%02x O=0x%02x Z=0x%02x]",script[p],e.getA(),e.getB(),e.getCondition(),e.getOperation(),e.getZ());
}
log(INFO,"%d von %d Skript Elementen empfangen.",p,l);
return script;
} catch (Exception e){
log(e);
}
return null;
}
@Override
public void setSimpleScript(int[] simpleScript) {
// TODO Auto-generated method stub
try {
serviceLink.writeInt(13, 0, 0x0700, simpleScript.length);
for (int i=0;i<simpleScript.length;i++){
serviceLink.writeInt(13, 0, 0x0702, simpleScript[i]);
SimpleScriptElement e = new SimpleScriptElement(simpleScript[i]);
log(DEBUG,"Element: 0x%08x [A=0x%02x B=0x%02x C=0x%02x O=0x%02x Z=0x%02x]",simpleScript[i],e.getA(),e.getB(),e.getCondition(),e.getOperation(),e.getZ());
}
Integer p = serviceLink.readInt(13, 0, 0x0701);
if (!p.equals(simpleScript.length)){
log(INFO,"ServiceLinkDeviceConnector: Skript konnte nicht geschrieben werden (%d von %d Elementen erkannt)",p,simpleScript.length);
} else {
serviceLink.writeInt(13, 0, 0x0703, 1);
}
} catch (Exception e){
log(e);
}
}
@ -320,14 +364,16 @@ public class ServiceLinkDeviceConnector implements IDeviceConnector {
Integer id;
try {
Integer sbrk,stacklimit,cycletime;
Integer sbrk,stacklimit,cycletime,enginestate;
sbrk = serviceLink.readInt(13, 0, 0x0020);
stacklimit = serviceLink.readInt(13, 0, 0x0021);
cycletime = serviceLink.readInt(13, 0, 0x1310);
enginestate = serviceLink.readInt(13, 0, 0x0703);
log(INFO,"HEAP END: 0x%04x SYS-STACK: 0x%04x",sbrk,stacklimit);
log(INFO,"I/O cycle time: %dus",cycletime);
log(INFO,"Engine-State: 0x%08x",enginestate);
newest = serviceLink.readInt(13, 0, 0x0581);
sssize = serviceLink.readInt(13, 0, 0x0582);
@ -743,5 +789,47 @@ public class ServiceLinkDeviceConnector implements IDeviceConnector {
return 0;
}
@Override
public int[] getIncrements() {
int[] values = new int[32];
for (int n=0;n<32;n++){
values[n] = getIncrement(n);
}
return values;
}
@Override
public void setIncrements(int[] increments) {
for (int n=0;n<32;n++){
setIncrement(n, increments[n]);
}
}
public int getIncrement(int channel) {
Integer v = null;
checkOpen();
try {
v = serviceLink.readInt(13, 0, 0x12A0 + channel );
} catch (Exception e) {
throw new NoDeviceConnectionException();
}
if (v != null){
return v;
} else {
return 0;
}
}
public void setIncrement(int channel, int increment) {
checkOpen();
try {
serviceLink.writeInt(13, 0, 0x12A0 + channel, increment);
} catch (IOException | ServiceLinkException e) {
e.printStackTrace();
}
}
}

View File

@ -1,5 +1,6 @@
package org.hwo.pulscounter.device;
import java.awt.Component;
import java.util.Random;
import org.hwo.pulscounter.SnapShot;
@ -21,6 +22,8 @@ public class SimulatedCounter implements IDeviceConnector {
private Random random;
private int[] scriptElements;
public SimulatedCounter() {
random = new Random();
serial = random.nextInt();
@ -45,8 +48,8 @@ public class SimulatedCounter implements IDeviceConnector {
}
@Override
public boolean showConnctionSetup() {
return SimulatedCounterSettingsDialog.show(this);
public boolean showConnctionSetup(Component parent) {
return SimulatedCounterSettingsDialog.show(parent,this);
}
@Override
@ -105,14 +108,12 @@ public class SimulatedCounter implements IDeviceConnector {
@Override
public int[] getSimpleScript() {
// TODO Auto-generated method stub
return null;
return scriptElements;
}
@Override
public void setSimpleScript(int[] simpleScript) {
// TODO Auto-generated method stub
scriptElements = simpleScript;
}
@Override
@ -288,4 +289,15 @@ public class SimulatedCounter implements IDeviceConnector {
return 0;
}
@Override
public int[] getIncrements() {
return new int[]{1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1};
}
@Override
public void setIncrements(int[] triggers) {
}
}

View File

@ -1,6 +1,7 @@
package org.hwo.pulscounter.device;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import javax.swing.JButton;
@ -17,8 +18,11 @@ import java.awt.Insets;
public class SimulatedCounterSettingsDialog extends JDialog {
public static boolean show(SimulatedCounter counter){
public static boolean show(Component parent,SimulatedCounter counter){
SimulatedCounterSettingsDialog dlg = new SimulatedCounterSettingsDialog();
if (parent != null)
dlg.setLocationRelativeTo(parent);
dlg.setSerial(counter.getConnectionSettings());
dlg.setVisible(true);

View File

@ -68,7 +68,16 @@ public class SimpleScript {
return simpleScriptElements;
}
public Integer[] getSimpleScriptElementsAsInt(){
public int[] getSimpleScriptElementsAsInt(){
int[] sse = new int[simpleScriptElements.size()];
for (int i=0;i<sse.length;i++){
sse[i] = simpleScriptElements.get(i).getCode();
}
return sse;
}
public Integer[] getSimpleScriptElementsAsInteger(){
Integer[] sse = new Integer[simpleScriptElements.size()];
for (int i=0;i<sse.length;i++){
@ -82,29 +91,46 @@ public class SimpleScript {
this.simpleScriptElements.clear();
this.simpleScriptElements.addAll(Arrays.asList(elements));
}
public void setSimpleScriptElements(int[] elements){
this.simpleScriptElements.clear();
for (int e: elements){
simpleScriptElements.add(new SimpleScriptElement(e));
}
}
public void setSimpleScriptElements(Integer[] elements){
this.simpleScriptElements.clear();
for (int e: elements){
simpleScriptElements.add(new SimpleScriptElement(e));
}
}
public enum ScriptOperation {
SET_ZERO (0x00),
SET_ONE (0x01),
SET_A (0x02),
SET_B (0x03),
A_PLUS_B (0x04),
A_MINUS_B (0x05),
A_MUL_B (0x06),
A_DIV_B (0x07),
A_AND_B (0x08),
A_OR_B (0x09),
A_XOR_B (0x0A),
SET_ZERO (0x00,"ARITHEMTIK = 0"),
SET_ONE (0x01,"ARITHEMTIK = 1"),
SET_A (0x02,"ARITHEMTIK = A"),
SET_B (0x03,"ARITHEMTIK = B"),
A_PLUS_B (0x04,"ARITHEMTIK = A + B"),
A_MINUS_B (0x05,"ARITHEMTIK = A - B"),
A_MUL_B (0x06,"ARITHEMTIK = A * B"),
A_DIV_B (0x07,"ARITHEMTIK = A / B"),
A_AND_B (0x08,"LOGIK = A and B"),
A_OR_B (0x09,"LOGIK = A or B"),
A_XOR_B (0x0A,"LOGIK = A xor B"),
/* 0x0b..0x0f: frei */
SET_NOT_A (0x10),
SET_NOT_B (0x11)
/* 0x12..0x1f: frei */
SET_NOT_A (0x10,"LOGIK = not A"),
SET_NOT_B (0x11,"LOGIK = not B"),
A_PLUS_ONE (0x12,"ARITHEMTIK = A + 1"),
A_MINUS_ONE (0x13,"ARITHEMTIK = A - 1"),
B_PLUS_ONE (0x14,"ARITHEMTIK = B + 1"),
B_MINUS_ONE (0x15,"ARITHEMTIK = B - 1")
/* 0x16..0x1f: frei */
;
ScriptOperation(int n){
ScriptOperation(int n,String desc){
this.n = n;
this.desc = desc;
}
static ScriptOperation operations[] = {
@ -126,10 +152,10 @@ public class SimpleScript {
null,
SET_NOT_A, // 0x10
SET_NOT_B,
null,
null,
null, // 0x14
null,
A_PLUS_ONE,
A_MINUS_ONE,
B_PLUS_ONE, // 0x14
B_MINUS_ONE,
null,
null,
null, // 0x18
@ -146,23 +172,34 @@ public class SimpleScript {
return operations[code];
}
int n;
private int n;
private String desc;
public int getCode(){
return this.n;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return desc;
}
}
public enum ScriptCondition {
NEVER (0x00),
ALWAYS (0x01),
A_EQ_ZERO (0x02),
A_NEQ_ZERO (0x03),
A_EQ_B (0x04),
A_NEQ_B (0x05),
A_LT_B (0x06),
A_GT_B (0x07)
NEVER (0x00,"Niemals"),
ALWAYS (0x01,"Immer"),
A_EQ_ZERO (0x02,"A == 0"),
A_NEQ_ZERO (0x03,"A != 0"),
A_EQ_B (0x04,"A == B"),
A_NEQ_B (0x05,"A != B"),
A_LT_B (0x06,"A < B"),
A_GT_B (0x07,"A > B")
;
static ScriptCondition scriptConditions[] = {
@ -175,20 +212,31 @@ public class SimpleScript {
A_LT_B,
A_GT_B
};
static ScriptCondition get(int code){
return scriptConditions[code];
}
private int code;
private String desc;
ScriptCondition(int code){
ScriptCondition(int code,String desc){
this.code = code;
this.desc = desc;
}
public int getCode(){
return this.code;
}
public String getDesc() {
return desc;
}
@Override
public String toString() {
return desc;
}
}
public static class SimpleScriptElement{
@ -244,10 +292,10 @@ public class SimpleScript {
}
public int getCondition(){
return (code >> 24) & 0xff;
return (code >> 24) & 0x07;
}
public int getOperation(){
return (code >> 27) & 0xff;
return (code >> 27) & 0x1f;
}
public void setA(int a){
@ -272,7 +320,7 @@ public class SimpleScript {
}
@TableColumn(label="Operation",order=50)
ScriptOperation getScriptOperation(){
public ScriptOperation getScriptOperation(){
return ScriptOperation.get(getOperation());
}
public void setScriptOperation(ScriptOperation scriptOperation){

View File

@ -10,6 +10,13 @@ public class SimpleScriptAddress{
this.address = a;
}
public int getAddress() {
return address;
}
public void setAddress(int address) {
this.address = address;
}
@Override
public String toString() {
return toString(address);
@ -28,8 +35,10 @@ public class SimpleScriptAddress{
return String.format("Ausgang %d", address - 96);
} else if (address < 160){
return String.format("Inverter %d", address - 128);
} else if (address < 192){
return String.format("Eingang %d", address - 160);
} else {
return String.format("Variable %d", address - 160);
return String.format("Variable %d", address - 192);
}
}

View File

@ -20,9 +20,14 @@ import javax.swing.JTabbedPane;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.Insets;
import java.awt.Dialog.ModalityType;
import java.awt.Dimension;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.math.BigInteger;
@ -44,7 +49,7 @@ import java.awt.event.FocusEvent;
import javax.swing.JScrollPane;
import javax.swing.JTable;
public class DeviceConfiguration extends JFrame {
public class DeviceConfiguration extends JDialog {
private JPanel contentPane;
@ -64,10 +69,16 @@ public class DeviceConfiguration extends JFrame {
trigger;
int[] filter,
windows;
windows,
increments;
private JTable tSettings;
private IDeviceConnector deviceConnector;
private JPanel pManagement;
private JButton btnSnapshotSpeicherZurcksetzen;
private JButton btnSnapshotSpeicherAuf;
private JButton btnAlleZhlerLschen;
/**
* Create the frame.
@ -75,6 +86,8 @@ public class DeviceConfiguration extends JFrame {
public DeviceConfiguration(IDeviceConnector deviceConnector) {
this.deviceConnector = deviceConnector;
setModalityType(ModalityType.APPLICATION_MODAL);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 860, 498);
contentPane = new JPanel();
@ -224,47 +237,6 @@ public class DeviceConfiguration extends JFrame {
gbc_tseI3.gridy = 4;
panel_2.add(tseI3, gbc_tseI3);
JButton btnSnapshotSpeicherZurcksetzen = new JButton("SnapShot Speicher zurücksetzen");
btnSnapshotSpeicherZurcksetzen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resetSnapShots();
}
});
GridBagConstraints gbc_btnSnapshotSpeicherZurcksetzen = new GridBagConstraints();
gbc_btnSnapshotSpeicherZurcksetzen.gridwidth = 2;
gbc_btnSnapshotSpeicherZurcksetzen.fill = GridBagConstraints.HORIZONTAL;
gbc_btnSnapshotSpeicherZurcksetzen.insets = new Insets(0, 0, 5, 0);
gbc_btnSnapshotSpeicherZurcksetzen.gridx = 0;
gbc_btnSnapshotSpeicherZurcksetzen.gridy = 5;
panel_2.add(btnSnapshotSpeicherZurcksetzen, gbc_btnSnapshotSpeicherZurcksetzen);
JButton btnAlleZhlerLschen = new JButton("Alle Zähler zurücksetzen");
btnAlleZhlerLschen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resetCounters();
}
});
JButton btnSnapshotSpeicherAuf = new JButton("SnapShot Speicher auf letzten bekannten SnapShot setzen");
btnSnapshotSpeicherAuf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resetSnapShots(true);
}
});
GridBagConstraints gbc_btnSnapshotSpeicherAuf = new GridBagConstraints();
gbc_btnSnapshotSpeicherAuf.fill = GridBagConstraints.HORIZONTAL;
gbc_btnSnapshotSpeicherAuf.gridwidth = 2;
gbc_btnSnapshotSpeicherAuf.insets = new Insets(0, 0, 5, 0);
gbc_btnSnapshotSpeicherAuf.gridx = 0;
gbc_btnSnapshotSpeicherAuf.gridy = 6;
panel_2.add(btnSnapshotSpeicherAuf, gbc_btnSnapshotSpeicherAuf);
GridBagConstraints gbc_btnAlleZhlerLschen = new GridBagConstraints();
gbc_btnAlleZhlerLschen.gridwidth = 2;
gbc_btnAlleZhlerLschen.fill = GridBagConstraints.HORIZONTAL;
gbc_btnAlleZhlerLschen.gridx = 0;
gbc_btnAlleZhlerLschen.gridy = 7;
panel_2.add(btnAlleZhlerLschen, gbc_btnAlleZhlerLschen);
JPanel panel_1 = new JPanel();
tabbedPane.addTab("Kanäle", null, panel_1, null);
GridBagLayout gbl_panel_1 = new GridBagLayout();
@ -287,6 +259,62 @@ public class DeviceConfiguration extends JFrame {
tSettings.setCellSelectionEnabled(true);
scrollPane.setViewportView(tSettings);
pManagement = new JPanel();
tabbedPane.addTab("Speicherverwaltung", null, pManagement, null);
GridBagLayout gbl_pManagement = new GridBagLayout();
gbl_pManagement.columnWidths = new int[] {100};
gbl_pManagement.rowHeights = new int[]{25, 0, 0, 0, 0};
gbl_pManagement.columnWeights = new double[]{1.0};
gbl_pManagement.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
pManagement.setLayout(gbl_pManagement);
btnAlleZhlerLschen = new JButton("Alle Zähler zurücksetzen");
btnAlleZhlerLschen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resetCounters();
}
});
GridBagConstraints gbc_btnAlleZhlerLschen_1_1 = new GridBagConstraints();
gbc_btnAlleZhlerLschen_1_1.fill = GridBagConstraints.HORIZONTAL;
gbc_btnAlleZhlerLschen_1_1.gridx = 0;
gbc_btnAlleZhlerLschen_1_1.gridy = 0;
gbc_btnAlleZhlerLschen_1_1.insets = new Insets(0, 0, 5, 0);
pManagement.add(btnAlleZhlerLschen, gbc_btnAlleZhlerLschen_1_1);
JLabel lblNurNachRcksprache = new JLabel("Nur nach Rücksprache mit Support:");
GridBagConstraints gbc_lblNurNachRcksprache = new GridBagConstraints();
gbc_lblNurNachRcksprache.fill = GridBagConstraints.HORIZONTAL;
gbc_lblNurNachRcksprache.insets = new Insets(0, 0, 5, 0);
gbc_lblNurNachRcksprache.gridx = 0;
gbc_lblNurNachRcksprache.gridy = 1;
pManagement.add(lblNurNachRcksprache, gbc_lblNurNachRcksprache);
btnSnapshotSpeicherZurcksetzen = new JButton("SnapShot Speicher zurücksetzen");
btnSnapshotSpeicherZurcksetzen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resetSnapShots();
}
});
btnSnapshotSpeicherAuf = new JButton("SnapShot Speicher auf letzten bekannten SnapShot setzen");
btnSnapshotSpeicherAuf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
resetSnapShots(true);
}
});
GridBagConstraints gbc_btnSnapshotSpeicherAuf_1_1 = new GridBagConstraints();
gbc_btnSnapshotSpeicherAuf_1_1.fill = GridBagConstraints.HORIZONTAL;
gbc_btnSnapshotSpeicherAuf_1_1.insets = new Insets(0, 0, 5, 0);
gbc_btnSnapshotSpeicherAuf_1_1.gridx = 0;
gbc_btnSnapshotSpeicherAuf_1_1.gridy = 2;
pManagement.add(btnSnapshotSpeicherAuf, gbc_btnSnapshotSpeicherAuf_1_1);
GridBagConstraints gbc_btnSnapshotSpeicherZurcksetzen_1_1 = new GridBagConstraints();
gbc_btnSnapshotSpeicherZurcksetzen_1_1.fill = GridBagConstraints.HORIZONTAL;
gbc_btnSnapshotSpeicherZurcksetzen_1_1.gridx = 0;
gbc_btnSnapshotSpeicherZurcksetzen_1_1.gridy = 3;
pManagement.add(btnSnapshotSpeicherZurcksetzen, gbc_btnSnapshotSpeicherZurcksetzen_1_1);
JButton btnSchliessen = new JButton("abbrechen");
btnSchliessen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
@ -326,6 +354,8 @@ public class DeviceConfiguration extends JFrame {
currentChannel = -1;
filter = new int[32];
windows = new int[32];
increments = new int[32];
tmSettings = new TableMapper(ChannelConfiguration.class, tSettings);
BitField bf = new BitField();
@ -344,17 +374,22 @@ public class DeviceConfiguration extends JFrame {
}
private void resetSnapShots(){
resetSnapShots(false);
resetSnapShots(false);
}
private void resetSnapShots(boolean toLastKnown){
deviceConnector.reset(toLastKnown ? PulsCounterApplication.getApplication().getDatabase().highestSnapShot(deviceConnector.getDeviceSerial()) : -1);
if (JOptionPane.showConfirmDialog(null, "<html>Diese Funktion sollte nur auf Aufforderung durch den Support ausgeführt werden.<br/>Soll der Snapshot Index auf dem Gerät wirklich zurückgesetzt werden?</html>", "Snapshot Index zurücksetzen", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
deviceConnector.reset(toLastKnown ? PulsCounterApplication.getApplication().getDatabase().highestSnapShot(deviceConnector.getDeviceSerial()) : -1);
}
}
private void resetCounters(){
int[] zero = new int[32];
Arrays.fill(zero, 0);
deviceConnector.setCounters(zero);
if (JOptionPane.showConfirmDialog(null, "Wollen Sie wirklich alle Zählerstände auf 0 zurücksetzen?", "Alle Zählerstände zurücksetzen", JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
int[] zero = new int[32];
Arrays.fill(zero, 0);
deviceConnector.setCounters(zero);
}
}
private void readDevice(){
@ -363,12 +398,13 @@ public class DeviceConfiguration extends JFrame {
outputs = intOr0(deviceConnector.getConfigOutputs());
pullups = intOr0(deviceConnector.getConfigPullups());
inverts = intOr0(deviceConnector.getConfigInverts());
trigger = intOr0(deviceConnector.getConfigTriggers());
trigger = intOr0(deviceConnector.getConfigTriggers());
bfeIntervall.setIntValue(deviceConnector.getDailyBaseMask());
filter = deviceConnector.getDebounce();
windows = deviceConnector.getWindows();
increments = deviceConnector.getIncrements();
tseI0.setValue( deviceConnector.getInterval(0) );
tseI1.setValue( deviceConnector.getInterval(1) );
@ -390,6 +426,7 @@ public class DeviceConfiguration extends JFrame {
deviceConnector.setDebounce(filter);
deviceConnector.setWindows(windows);
deviceConnector.setIncrements(increments);
deviceConnector.syncConfigToLive();
}
@ -402,7 +439,7 @@ public class DeviceConfiguration extends JFrame {
this.channel = channel;
}
@TableColumn(label="Channel",width=80,order=0)
@TableColumn(label="Kanal",width=60,order=0,format="%02d")
public int getChannel(){
return channel;
}
@ -467,6 +504,14 @@ public class DeviceConfiguration extends JFrame {
filter[channel] = value;
}
@TableColumn(label="Inkrement",width=80,order=190)
public Integer getIncrement(){
return increments[channel];
}
public void setIncrement(Integer increment){
increments[channel] = increment;
}
}

View File

@ -17,6 +17,8 @@ import org.hwo.pulscounter.PulsCounterApplication;
import java.awt.GridBagLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import java.awt.GridBagConstraints;
import javax.swing.JScrollPane;
import java.awt.Insets;
@ -26,8 +28,10 @@ import java.awt.event.ActionEvent;
import javax.swing.JToolBar;
import javax.swing.ListSelectionModel;
import javax.swing.JSeparator;
import java.awt.Dialog.ModalExclusionType;
import java.awt.Dialog.ModalityType;
public class ExportFilesFrame extends JFrame {
public class ExportFilesFrame extends JDialog {
private JPanel contentPane;
private JTable tExportSettings;
@ -47,6 +51,8 @@ public class ExportFilesFrame extends JFrame {
* Create the frame.
*/
public ExportFilesFrame() {
setModalityType(ModalityType.APPLICATION_MODAL);
setTitle("Export Einstellungen...");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 825, 433);

View File

@ -107,6 +107,7 @@ public class ExportSettingsEditorDialog extends JDialog implements IObjectEditor
}
});
cbTriggerType.addItem(TriggerType.ALL);
cbTriggerType.addItem(TriggerType.Trigger);
cbTriggerType.addItem(TriggerType.Intervall);
cbTriggerType.addItem(TriggerType.Timer);
cbTriggerType.addItem(TriggerType.Manual);

View File

@ -126,6 +126,7 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis
private JPanel panel_4;
private JTextArea tfConnectionSettings;
private JButton btnSkripte;
private JButton btnAufzeichnungenVerwalten;
public static void startGUI(){
@ -276,7 +277,7 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis
*/
private void initialize() {
frmSynolog = new JFrame();
frmSynolog.setTitle("Synololog");
frmSynolog.setTitle("SYNOLO-LOG");
frmSynolog.setBounds(100, 100, 1000, 580);
frmSynolog.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frmSynolog.getContentPane().setLayout(new BorderLayout(0, 0));
@ -294,6 +295,7 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis
public void actionPerformed(ActionEvent e) {
if (selectedDeviceInterface != null){
DeviceConfiguration cc = new DeviceConfiguration(selectedDeviceInterface);
cc.setLocationRelativeTo(frmSynolog);
cc.setVisible(true);
}
}
@ -305,6 +307,7 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis
btnDatenExportieren.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ExportFilesFrame eff = new ExportFilesFrame();
eff.setLocationRelativeTo(frmSynolog);
eff.setVisible(true);
}
});
@ -320,6 +323,14 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis
});
toolBar.add(btnSkripte);
btnAufzeichnungenVerwalten = new JButton("Aufzeichnungen verwalten");
btnAufzeichnungenVerwalten.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
SnapshotManager.show(frmSynolog);
}
});
toolBar.add(btnAufzeichnungenVerwalten);
splitter = new JSplitPane();
splitter.setBorder(null);
splitter.setOneTouchExpandable(true);
@ -395,7 +406,7 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis
public void mouseClicked(MouseEvent e) {
if ((e.getClickCount()==2)&&(e.getButton()==e.BUTTON1)){
if (selectedDeviceInterface != null){
selectedDeviceInterface.showConnctionSetup();
selectedDeviceInterface.showConnctionSetup(frmSynolog);
frmSynolog.repaint();
}
}

View File

@ -5,7 +5,14 @@ import java.awt.GridBagLayout;
import javax.swing.JComboBox;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;
import org.hwo.pulscounter.simplescript.SimpleScriptAddress;
import org.hwo.ui.JComboBoxEx;
public class SimpleScriptAddressEditor extends JPanel {
@ -16,8 +23,15 @@ public class SimpleScriptAddressEditor extends JPanel {
new AddressRange("PullUp Status", 64, 32),
new AddressRange("Ausgang", 96, 32),
new AddressRange("Inverter", 128, 32),
new AddressRange("Variable", 160, 96)
new AddressRange("Eingang", 160, 32),
new AddressRange("Variable", 192, 64)
};
private JComboBoxEx cbRange;
private JSpinner spValue;
private SpinnerNumberModel numberModel = new SpinnerNumberModel(0, 0, 0, 1);
private int
address;
/**
* Create the panel.
@ -30,23 +44,72 @@ public class SimpleScriptAddressEditor extends JPanel {
gridBagLayout.rowWeights = new double[]{1.0, Double.MIN_VALUE};
setLayout(gridBagLayout);
JComboBox comboBox = new JComboBox();
GridBagConstraints gbc_comboBox = new GridBagConstraints();
gbc_comboBox.insets = new Insets(0, 0, 0, 5);
gbc_comboBox.fill = GridBagConstraints.BOTH;
gbc_comboBox.gridx = 0;
gbc_comboBox.gridy = 0;
add(comboBox, gbc_comboBox);
cbRange = new JComboBoxEx();
GridBagConstraints gbc_cbRange = new GridBagConstraints();
gbc_cbRange.insets = new Insets(0, 0, 0, 5);
gbc_cbRange.fill = GridBagConstraints.BOTH;
gbc_cbRange.gridx = 0;
gbc_cbRange.gridy = 0;
cbRange.setItems(addressRanges);
cbRange.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
syncNumberFormat();
}
});
add(cbRange, gbc_cbRange);
JSpinner spinner = new JSpinner();
GridBagConstraints gbc_spinner = new GridBagConstraints();
gbc_spinner.fill = GridBagConstraints.BOTH;
gbc_spinner.gridx = 1;
gbc_spinner.gridy = 0;
add(spinner, gbc_spinner);
spValue = new JSpinner();
GridBagConstraints gbc_spValue = new GridBagConstraints();
gbc_spValue.fill = GridBagConstraints.BOTH;
gbc_spValue.gridx = 1;
gbc_spValue.gridy = 0;
spValue.setModel(numberModel);
add(spValue, gbc_spValue);
cbRange.setSelectedIndex(0);
}
private AddressRange getSelectedRange(){
return (AddressRange)cbRange.getSelectedItem();
}
private int getSelectedDisplayValue(){
return (Integer)spValue.getValue();
}
private void syncNumberFormat(){
AddressRange range = getSelectedRange();
numberModel.setMaximum(range.getSize()-1);
if (range.getSize() <= getSelectedDisplayValue()){
numberModel.setValue(range.getSize()-1);
}
}
public int getAddress() {
this.address = getSelectedRange().scriptValue(((Integer)numberModel.getValue()).intValue());
return address;
}
public void setAddress(int address) {
this.address = address;
cbRange.setEnabled(true);
cbRange.setSelectedItem(findRange(address));
syncNumberFormat();
numberModel.setValue(getSelectedRange().displayValue(address));
}
private AddressRange findRange(int address){
for (AddressRange range: addressRanges){
if (range.contains(address))
return range;
}
return null;
}
private class AddressRange{
@ -70,6 +133,21 @@ public class SimpleScriptAddressEditor extends JPanel {
return name;
}
public boolean contains(int address){
return (base <= address) && (address < (base+size));
}
public int displayValue(int address){
return address - base;
}
public int scriptValue(int displayAddress){
return displayAddress + base;
}
@Override
public String toString() {
return name;
}
}
}

View File

@ -7,9 +7,12 @@ import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.border.EmptyBorder;
import org.hwo.models.TableMapper.TableColumn;
import org.hwo.models.TableMapper.TableMapper;
import org.hwo.models.TableMapper.TableMapperListener;
import org.hwo.pulscounter.simplescript.SimpleScript;
import org.hwo.pulscounter.simplescript.SimpleScript.ScriptCondition;
import org.hwo.pulscounter.simplescript.SimpleScript.SimpleScriptElement;
@ -22,13 +25,20 @@ import javax.swing.JTable;
import java.awt.GridBagConstraints;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import java.awt.Insets;
import java.awt.MenuItem;
import javax.swing.JTextField;
import javax.swing.JTextArea;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Dialog.ModalExclusionType;
import java.awt.Dialog.ModalityType;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
public class SimpleScriptEditor extends JDialog {
@ -56,13 +66,13 @@ public class SimpleScriptEditor extends JDialog {
private JMappedTable mtScriptElements;
private JTextField tfName;
private JTextArea taDescription;
private JScrollPane spElementTable;
/**
* Create the dialog.
*/
public SimpleScriptEditor() {
setModalityType(ModalityType.APPLICATION_MODAL);
setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setBounds(100, 100, 921, 474);
getContentPane().setLayout(new BorderLayout());
@ -74,6 +84,77 @@ public class SimpleScriptEditor extends JDialog {
gbl_contentPanel.columnWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
gbl_contentPanel.rowWeights = new double[]{0.0, 1.0, 1.0, Double.MIN_VALUE};
contentPanel.setLayout(gbl_contentPanel);
MouseAdapter popupAdapter = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
checkPopup(e);
}
@Override
public void mousePressed(MouseEvent e) {
if ((e.getComponent() == spElementTable)){
mtScriptElements.clearSelection();
}
checkPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
checkPopup(e);
}
private void checkPopup(MouseEvent e){
if (e.isPopupTrigger()){
JPopupMenu popupMenu = new JPopupMenu();
JMenuItem miAdd = new JMenuItem("1x neu");
miAdd.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SimpleScriptElement sse = (SimpleScriptElement)mtScriptElements.getTableMapper().getSelectedRow();
mtScriptElements.getTableMapper().addRow(new SimpleScriptElement(),sse);
}
});
popupMenu.add(miAdd);
JMenuItem miAdd5 = new JMenuItem("5x neu");
miAdd5.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SimpleScriptElement sse = (SimpleScriptElement)mtScriptElements.getTableMapper().getSelectedRow();
mtScriptElements.getTableMapper().addRows(new SimpleScriptElement[]{
new SimpleScriptElement(),
new SimpleScriptElement(),
new SimpleScriptElement(),
new SimpleScriptElement(),
new SimpleScriptElement()
}, sse);
}
});
popupMenu.add(miAdd5);
SimpleScriptElement sse = (SimpleScriptElement)mtScriptElements.getTableMapper().getSelectedRow();
if (sse != null){
JMenuItem miRemove = new JMenuItem("Entfernen");
miRemove.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SimpleScriptElement[] selected = mtScriptElements.getTableMapper().getSelectedRows(new SimpleScriptElement[0]);
for (SimpleScriptElement se: selected){
mtScriptElements.getTableMapper().removeRow(se);
}
}
});
popupMenu.add(miRemove);
}
popupMenu.show(e.getComponent(), e.getX(), e.getY());
}
}
};
{
JLabel lblBezeichnung = new JLabel("Bezeichnung:");
GridBagConstraints gbc_lblBezeichnung = new GridBagConstraints();
@ -115,16 +196,18 @@ public class SimpleScriptEditor extends JDialog {
contentPanel.add(taDescription, gbc_taDescription);
}
{
JScrollPane scrollPane = new JScrollPane();
GridBagConstraints gbc_scrollPane = new GridBagConstraints();
gbc_scrollPane.gridwidth = 2;
gbc_scrollPane.fill = GridBagConstraints.BOTH;
gbc_scrollPane.gridx = 0;
gbc_scrollPane.gridy = 2;
contentPanel.add(scrollPane, gbc_scrollPane);
spElementTable = new JScrollPane();
GridBagConstraints gbc_spElementTable = new GridBagConstraints();
gbc_spElementTable.gridwidth = 2;
gbc_spElementTable.fill = GridBagConstraints.BOTH;
gbc_spElementTable.gridx = 0;
gbc_spElementTable.gridy = 2;
spElementTable.addMouseListener(popupAdapter);
contentPanel.add(spElementTable, gbc_spElementTable);
{
mtScriptElements = new JMappedTable(SimpleScriptElement.class);
scrollPane.setViewportView(mtScriptElements);
mtScriptElements.addMouseListener(popupAdapter);
spElementTable.setViewportView(mtScriptElements);
}
}
{
@ -153,16 +236,38 @@ public class SimpleScriptEditor extends JDialog {
buttonPane.add(cancelButton);
}
}
mtScriptElements.addTableMapperListener(new TableMapperListener() {
@Override
public boolean editorRequest(TableMapper tableMapper, Object row) {
SimpleScriptElement e = (SimpleScriptElement)row;
if (e != null){
if (SimpleScriptElementEditor.show(SimpleScriptEditor.this, e)){
mtScriptElements.repaint();
}
}
return true;
}
@Override
public void ValueChanged(int row, int column) {
// TODO Auto-generated method stub
}
});
mtScriptElements.getTableMapper().setEditorEnabled(true);
initialize();
}
private void accept(){
simpleScript.setName(tfName.getText());
simpleScript.setDescription(taDescription.getText());
simpleScript.setSimpleScriptElements(mtScriptElements.getTableMapper().getRows(SimpleScriptElement.class).toArray(new SimpleScriptElement[0]));
accepted = true;
setVisible(false);
@ -182,8 +287,7 @@ public class SimpleScriptEditor extends JDialog {
tfName.setText(simpleScript.getName());
taDescription.setText(simpleScript.getDescription());
mtScriptElements.getTableMapper().setRows(simpleScript.getSimpleScriptElements().toArray(new SimpleScriptElement[0]));
mtScriptElements.getTableMapper().setRows(new ArrayList<SimpleScriptElement>(simpleScript.getSimpleScriptElements()));
mtScriptElements.getTableMapper().setSortingEnabled(false);
}

View File

@ -9,46 +9,215 @@ import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import org.hwo.pulscounter.simplescript.SimpleScript;
import org.hwo.pulscounter.simplescript.SimpleScript.ScriptCondition;
import org.hwo.pulscounter.simplescript.SimpleScript.ScriptOperation;
import org.hwo.pulscounter.simplescript.SimpleScript.SimpleScriptElement;
import org.hwo.ui.JComboBoxEx;
import java.awt.Dialog.ModalExclusionType;
import java.awt.Dialog.ModalityType;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import javax.swing.border.TitledBorder;
import javax.swing.border.LineBorder;
import java.awt.Color;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JComboBox;
import java.awt.Font;
public class SimpleScriptElementEditor extends JDialog {
public static boolean show(Component parent,SimpleScriptElement simpleScriptElement){
return false;
SimpleScriptElementEditor editor = new SimpleScriptElementEditor();
if (parent != null){
editor.setLocationRelativeTo(parent);
}
editor.setSimpleScriptElement(simpleScriptElement);
editor.setVisible(true);
return editor.isAccepted();
}
private SimpleScriptElement simpleScriptElement;
private boolean accepted;
private final JPanel contentPanel = new JPanel();
private SimpleScriptAddressEditor ssaA;
private SimpleScriptAddressEditor ssaB;
private SimpleScriptAddressEditor ssaZ;
private JComboBoxEx cbCondition;
private JComboBoxEx cbOperation;
/**
* Create the dialog.
*/
public SimpleScriptElementEditor() {
setResizable(false);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setTitle("Skriptelement bearbeiten");
setModalityType(ModalityType.APPLICATION_MODAL);
setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
setBounds(100, 100, 519, 370);
setBounds(100, 100, 519, 350);
getContentPane().setLayout(new BorderLayout());
contentPanel.setLayout(new FlowLayout());
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
GridBagLayout gbl_contentPanel = new GridBagLayout();
gbl_contentPanel.columnWidths = new int[]{0, 0, 0};
gbl_contentPanel.rowHeights = new int[]{0, 0, 0, 0, 0};
gbl_contentPanel.columnWeights = new double[]{1.0, 1.0, Double.MIN_VALUE};
gbl_contentPanel.rowWeights = new double[]{0.0, 1.0, 1.0, 0.0, Double.MIN_VALUE};
contentPanel.setLayout(gbl_contentPanel);
{
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(new LineBorder(new Color(184, 207, 229)), "Eingangswert A", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(51, 51, 51)));
GridBagConstraints gbc_panel = new GridBagConstraints();
gbc_panel.insets = new Insets(0, 0, 5, 5);
gbc_panel.fill = GridBagConstraints.BOTH;
gbc_panel.gridx = 0;
gbc_panel.gridy = 0;
contentPanel.add(panel, gbc_panel);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[]{0, 0};
gbl_panel.rowHeights = new int[]{0, 0};
gbl_panel.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_panel.rowWeights = new double[]{1.0, Double.MIN_VALUE};
panel.setLayout(gbl_panel);
{
ssaA = new SimpleScriptAddressEditor();
GridBagConstraints gbc_ssaA = new GridBagConstraints();
gbc_ssaA.fill = GridBagConstraints.BOTH;
gbc_ssaA.gridx = 0;
gbc_ssaA.gridy = 0;
panel.add(ssaA, gbc_ssaA);
}
}
{
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(new LineBorder(new Color(184, 207, 229)), "Eingangswert B", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(51, 51, 51)));
GridBagConstraints gbc_panel = new GridBagConstraints();
gbc_panel.insets = new Insets(0, 0, 5, 0);
gbc_panel.fill = GridBagConstraints.BOTH;
gbc_panel.gridx = 1;
gbc_panel.gridy = 0;
contentPanel.add(panel, gbc_panel);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[]{0, 0};
gbl_panel.rowHeights = new int[]{0, 0};
gbl_panel.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_panel.rowWeights = new double[]{1.0, Double.MIN_VALUE};
panel.setLayout(gbl_panel);
{
ssaB = new SimpleScriptAddressEditor();
GridBagConstraints gbc_ssaB = new GridBagConstraints();
gbc_ssaB.fill = GridBagConstraints.BOTH;
gbc_ssaB.gridx = 0;
gbc_ssaB.gridy = 0;
panel.add(ssaB, gbc_ssaB);
}
}
{
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(new LineBorder(new Color(184, 207, 229)), "Bedingung", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(51, 51, 51)));
GridBagConstraints gbc_panel = new GridBagConstraints();
gbc_panel.insets = new Insets(0, 0, 5, 0);
gbc_panel.gridwidth = 2;
gbc_panel.fill = GridBagConstraints.BOTH;
gbc_panel.gridx = 0;
gbc_panel.gridy = 1;
contentPanel.add(panel, gbc_panel);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[]{0, 0};
gbl_panel.rowHeights = new int[]{0, 0};
gbl_panel.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
panel.setLayout(gbl_panel);
{
cbCondition = new JComboBoxEx();
cbCondition.setFont(new Font("Courier", Font.BOLD, 14));
GridBagConstraints gbc_cbCondition = new GridBagConstraints();
gbc_cbCondition.fill = GridBagConstraints.HORIZONTAL;
gbc_cbCondition.gridx = 0;
gbc_cbCondition.gridy = 0;
cbCondition.setItems(SimpleScript.ScriptCondition.values());
panel.add(cbCondition, gbc_cbCondition);
}
}
{
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(new LineBorder(new Color(184, 207, 229)), "Operation", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(51, 51, 51)));
GridBagConstraints gbc_panel = new GridBagConstraints();
gbc_panel.insets = new Insets(0, 0, 5, 0);
gbc_panel.gridwidth = 2;
gbc_panel.fill = GridBagConstraints.BOTH;
gbc_panel.gridx = 0;
gbc_panel.gridy = 2;
contentPanel.add(panel, gbc_panel);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[]{0, 0};
gbl_panel.rowHeights = new int[]{0, 0};
gbl_panel.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_panel.rowWeights = new double[]{0.0, Double.MIN_VALUE};
panel.setLayout(gbl_panel);
{
cbOperation = new JComboBoxEx();
cbOperation.setFont(new Font("Courier", Font.BOLD, 14));
GridBagConstraints gbc_cbOperation = new GridBagConstraints();
gbc_cbOperation.fill = GridBagConstraints.HORIZONTAL;
gbc_cbOperation.gridx = 0;
gbc_cbOperation.gridy = 0;
cbOperation.setItems(SimpleScript.ScriptOperation.values());
panel.add(cbOperation, gbc_cbOperation);
}
}
{
JPanel panel = new JPanel();
panel.setBorder(new TitledBorder(new LineBorder(new Color(184, 207, 229)), "Ausgangswert Z", TitledBorder.LEADING, TitledBorder.TOP, null, new Color(51, 51, 51)));
GridBagConstraints gbc_panel = new GridBagConstraints();
gbc_panel.insets = new Insets(0, 0, 0, 5);
gbc_panel.fill = GridBagConstraints.BOTH;
gbc_panel.gridx = 0;
gbc_panel.gridy = 3;
contentPanel.add(panel, gbc_panel);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[]{0, 0};
gbl_panel.rowHeights = new int[]{0, 0};
gbl_panel.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_panel.rowWeights = new double[]{1.0, Double.MIN_VALUE};
panel.setLayout(gbl_panel);
{
ssaZ = new SimpleScriptAddressEditor();
GridBagConstraints gbc_ssaZ = new GridBagConstraints();
gbc_ssaZ.fill = GridBagConstraints.BOTH;
gbc_ssaZ.gridx = 0;
gbc_ssaZ.gridy = 0;
panel.add(ssaZ, gbc_ssaZ);
}
}
{
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
{
JButton okButton = new JButton("OK");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
accept();
}
});
okButton.setActionCommand("OK");
buttonPane.add(okButton);
getRootPane().setDefaultButton(okButton);
}
{
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
cancel();
}
});
cancelButton.setActionCommand("Cancel");
buttonPane.add(cancelButton);
}
@ -60,13 +229,23 @@ public class SimpleScriptElementEditor extends JDialog {
}
public void setSimpleScriptElement(SimpleScriptElement simpleScriptElement) {
this.simpleScriptElement = simpleScriptElement;
ssaA.setAddress( simpleScriptElement.getA() );
ssaB.setAddress( simpleScriptElement.getB() );
ssaZ.setAddress( simpleScriptElement.getZ() );
cbCondition.setSelectedItem(simpleScriptElement.getScriptCondition());
cbOperation.setSelectedItem(simpleScriptElement.getScriptOperation());
}
private void accept(){
simpleScriptElement.setA(ssaA.getAddress());
simpleScriptElement.setB(ssaB.getAddress());
simpleScriptElement.setZ(ssaZ.getAddress());
simpleScriptElement.setScriptOperation((ScriptOperation)cbOperation.getSelectedItem());
simpleScriptElement.setScriptCondition((ScriptCondition)cbCondition.getSelectedItem());
accepted = true;
setVisible(false);
}
private void cancel(){

View File

@ -6,6 +6,7 @@ import java.awt.BorderLayout;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionEvent;
@ -16,18 +17,25 @@ import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import javax.swing.border.BevelBorder;
import javax.swing.JButton;
import javax.swing.JDialog;
import java.awt.FlowLayout;
import org.hwo.models.TableMapper.TableMapper;
import org.hwo.models.TableMapper.TableMapperListener;
import org.hwo.pulscounter.PulsCounterApplication;
import org.hwo.pulscounter.device.IDeviceConnector;
import org.hwo.pulscounter.simplescript.SimpleScript;
import org.hwo.ui.JMappedTable;
import org.hwo.ui.JObjectSelector;
import javax.swing.JScrollPane;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.awt.event.ActionEvent;
import static org.hwo.logging.Logging.*;
@ -58,8 +66,10 @@ import org.hwo.ui.JMappedTable;
import javax.swing.JScrollPane;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.Dialog.ModalExclusionType;
import java.awt.Dialog.ModalityType;
public class SimpleScriptSetup extends JFrame {
public class SimpleScriptSetup extends JDialog {
private JPanel contentPane;
private JMappedTable scriptTable;
@ -68,9 +78,12 @@ public class SimpleScriptSetup extends JFrame {
private JButton btnEntfernen;
private JButton btnBearbeiten;
private JButton btnNeu;
private JButton btnTransmit;
private JButton btnReceive;
public SimpleScriptSetup() {
setTitle("Formeln");
setModalityType(ModalityType.APPLICATION_MODAL);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(100, 100, 831, 406);
contentPane = new JPanel();
@ -103,6 +116,11 @@ public class SimpleScriptSetup extends JFrame {
panel.add(btnNeu);
btnBearbeiten = new JButton("bearbeiten...");
btnBearbeiten.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
scriptTable.getTableMapper().openEditor();
}
});
btnBearbeiten.setEnabled(false);
panel.add(btnBearbeiten);
@ -117,6 +135,23 @@ public class SimpleScriptSetup extends JFrame {
});
panel.add(btnEntfernen);
btnTransmit = new JButton("auf Zähler übertragen....");
btnTransmit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
transmit();
}
});
btnTransmit.setEnabled(false);
panel.add(btnTransmit);
btnReceive = new JButton("von Zähler holen....");
btnReceive.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
receive();
}
});
panel.add(btnReceive);
JScrollPane scrollPane = new JScrollPane();
GridBagConstraints gbc_scrollPane = new GridBagConstraints();
gbc_scrollPane.fill = GridBagConstraints.BOTH;
@ -163,9 +198,11 @@ public class SimpleScriptSetup extends JFrame {
if (scriptTable.getTableMapper().getSelectedRow() == null){
btnBearbeiten.setEnabled(false);
btnEntfernen.setEnabled(false);
btnTransmit.setEnabled(false);
} else {
btnBearbeiten.setEnabled(true);
btnEntfernen.setEnabled(true);
btnTransmit.setEnabled(true);
}
}
});
@ -177,6 +214,7 @@ public class SimpleScriptSetup extends JFrame {
if (SimpleScriptEditor.show(SimpleScriptSetup.this,(SimpleScript)row)){
log(INFO,"store SimpleScript");
PulsCounterApplication.getApplication().getDatabase().storeSimpleScript((SimpleScript)row);
scriptTable.repaint();
}
return true;
}
@ -185,11 +223,54 @@ public class SimpleScriptSetup extends JFrame {
@Override
public void ValueChanged(int row, int column) {
// TODO Auto-generated method stub
}
});
}
private void transmit(){
IDeviceConnector[] connectors = PulsCounterApplication.getApplication().getInterfaces().toArray(new IDeviceConnector[0]);
IDeviceConnector connector = JObjectSelector.execute(
connectors,
this,
"Schnittstelle wählen...",
"Wählen Sie die Schnittstelle über die das Skript übertragen werden soll."
);
if (connector != null){
log(INFO,"Übertrage Skript an Synololog an Schnittstelle %s", connector);
connector.setSimpleScript(((SimpleScript)scriptTable.getTableMapper().getSelectedRow()).getSimpleScriptElementsAsInt());
}
}
private void receive(){
IDeviceConnector[] connectors = PulsCounterApplication.getApplication().getInterfaces().toArray(new IDeviceConnector[0]);
IDeviceConnector connector = JObjectSelector.execute(
connectors,
this,
"Schnittstelle wählen...",
"Wählen Sie die Schnittstelle über die das Skript empfangen werden soll."
);
if (connector != null){
log(INFO,"Übertrage Skript von Synololog an Schnittstelle %s", connector);
int[] scriptElements = connector.getSimpleScript();
if (scriptElements == null){
JOptionPane.showMessageDialog(this, "Es konnte kein Skript vom gerät empfangen werden.");
} else {
SimpleScript simpleScript = new SimpleScript();
simpleScript.setSimpleScriptElements(scriptElements);
simpleScript.setName(String.format("Von Gerät %s geholt am %s", connector.getDeviceSerial(), DateFormat.getDateTimeInstance().format(new Date())));
scriptTable.getTableMapper().addRow(simpleScript);
PulsCounterApplication.getApplication().getDatabase().storeSimpleScript(simpleScript);
}
}
}
}

View File

@ -0,0 +1,358 @@
package org.hwo.pulscounter.ui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.FlowLayout;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.border.EmptyBorder;
import java.awt.Dialog.ModalExclusionType;
import java.awt.Dialog.ModalityType;
import java.awt.GridBagLayout;
import javax.swing.JSplitPane;
import java.awt.GridBagConstraints;
import org.hwo.ObjectTable;
import org.hwo.pulscounter.PulsCounterApplication;
import org.hwo.pulscounter.SnapShot;
import org.hwo.ui.JMappedTable;
import org.hwo.ui.MousePopupListener;
import org.hwo.ui.diagram.LinePlotPainter;
import org.hwo.ui.diagram.SimplePlotProvider;
import javax.swing.JScrollPane;
import javax.swing.JList;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.ListSelectionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.ScrollPaneConstants;
import javax.swing.ListSelectionModel;
import java.awt.Insets;
import javax.swing.JTabbedPane;
import javax.swing.BoxLayout;
import org.hwo.ui.JDiagram;
import javax.swing.JCheckBox;
import java.awt.Dimension;
public class SnapshotManager extends JDialog {
public static Color[] plotColors = new Color[32];
public static void show(Component parent){
SnapshotManager sm = new SnapshotManager();
if (parent != null)
{
sm.setLocationRelativeTo(parent);
}
sm.setVisible(true);
}
private final JPanel contentPanel = new JPanel();
private JList lDevices;
private JMappedTable mtSnapshots;
private JScrollPane scrollPane_1;
private JDiagram diaSnapshots;
private JCheckBox cbDifferenzen;
private JPanel paIndex;
/**
* Create the dialog.
*/
public SnapshotManager() {
setModal(true);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setModalityType(ModalityType.APPLICATION_MODAL);
setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
setBounds(100, 100, 991, 547);
getContentPane().setLayout(new BorderLayout());
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
getContentPane().add(contentPanel, BorderLayout.CENTER);
GridBagLayout gbl_contentPanel = new GridBagLayout();
gbl_contentPanel.columnWidths = new int[]{0, 0};
gbl_contentPanel.rowHeights = new int[]{0, 0};
gbl_contentPanel.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_contentPanel.rowWeights = new double[]{1.0, Double.MIN_VALUE};
contentPanel.setLayout(gbl_contentPanel);
{
JSplitPane splitPane = new JSplitPane();
splitPane.setResizeWeight(0.2);
GridBagConstraints gbc_splitPane = new GridBagConstraints();
gbc_splitPane.fill = GridBagConstraints.BOTH;
gbc_splitPane.gridx = 0;
gbc_splitPane.gridy = 0;
contentPanel.add(splitPane, gbc_splitPane);
{
JPanel panel = new JPanel();
splitPane.setLeftComponent(panel);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[]{0, 0};
gbl_panel.rowHeights = new int[]{0, 0};
gbl_panel.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_panel.rowWeights = new double[]{1.0, Double.MIN_VALUE};
panel.setLayout(gbl_panel);
{
JScrollPane scrollPane = new JScrollPane();
GridBagConstraints gbc_scrollPane = new GridBagConstraints();
gbc_scrollPane.fill = GridBagConstraints.BOTH;
gbc_scrollPane.gridx = 0;
gbc_scrollPane.gridy = 0;
panel.add(scrollPane, gbc_scrollPane);
{
lDevices = new JList();
lDevices.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent e) {
showSnapshots();
}
});
scrollPane.setViewportView(lDevices);
}
}
}
{
JPanel panel = new JPanel();
splitPane.setRightComponent(panel);
GridBagLayout gbl_panel = new GridBagLayout();
gbl_panel.columnWidths = new int[]{0, 0};
gbl_panel.rowHeights = new int[] {0};
gbl_panel.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_panel.rowWeights = new double[]{1.0};
panel.setLayout(gbl_panel);
{
JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
GridBagConstraints gbc_tabbedPane = new GridBagConstraints();
gbc_tabbedPane.fill = GridBagConstraints.BOTH;
gbc_tabbedPane.gridx = 0;
gbc_tabbedPane.gridy = 0;
panel.add(tabbedPane, gbc_tabbedPane);
{
JPanel panel_1 = new JPanel();
tabbedPane.addTab("Tabelle", null, panel_1, null);
panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.X_AXIS));
{
scrollPane_1 = new JScrollPane();
panel_1.add(scrollPane_1);
scrollPane_1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS);
scrollPane_1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
{
mtSnapshots = new JMappedTable(SnapShot.class);
mtSnapshots.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
mtSnapshots.setFillsViewportHeight(true);
mtSnapshots.setColumnSelectionAllowed(true);
scrollPane_1.setViewportView(mtSnapshots);
}
}
}
{
JPanel panel_1 = new JPanel();
tabbedPane.addTab("Diagramm", null, panel_1, null);
tabbedPane.setBackgroundAt(1, Color.WHITE);
panel_1.setLayout(new BorderLayout(0, 0));
{
diaSnapshots = new JDiagram();
diaSnapshots.setBackground(Color.WHITE);
diaSnapshots.setPreferLabelHints(true);
diaSnapshots.setDrawVerticalGrid(true);
diaSnapshots.setAutoScale(true);
panel_1.add(diaSnapshots);
}
{
JPanel panel_2 = new JPanel();
panel_1.add(panel_2, BorderLayout.NORTH);
GridBagLayout gbl_panel_2 = new GridBagLayout();
gbl_panel_2.columnWidths = new int[]{0, 0};
gbl_panel_2.rowHeights = new int[]{0, 0};
gbl_panel_2.columnWeights = new double[]{0.0, Double.MIN_VALUE};
gbl_panel_2.rowWeights = new double[]{0.0, Double.MIN_VALUE};
panel_2.setLayout(gbl_panel_2);
{
cbDifferenzen = new JCheckBox("Differenzen");
cbDifferenzen.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
updateDiagram();
}
});
GridBagConstraints gbc_cbDifferenzen = new GridBagConstraints();
gbc_cbDifferenzen.gridx = 0;
gbc_cbDifferenzen.gridy = 0;
panel_2.add(cbDifferenzen, gbc_cbDifferenzen);
}
}
{
paIndex = new JPanel();
paIndex.setBackground(Color.WHITE);
paIndex.setPreferredSize(new Dimension(80, 10));
panel_1.add(paIndex, BorderLayout.EAST);
paIndex.setLayout(new FlowLayout(FlowLayout.LEADING, 5, 5));
}
}
}
}
}
{
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
getContentPane().add(buttonPane, BorderLayout.SOUTH);
{
JButton cancelButton = new JButton("schliessen");
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
setVisible(false);
}
});
cancelButton.setActionCommand("Cancel");
buttonPane.add(cancelButton);
}
}
initialize();
}
private void initialize(){
Integer[] deviceSerials = PulsCounterApplication.getApplication().getDatabase().getKnownDevices();
DefaultListModel<Integer> lm = new DefaultListModel<>();
for (Integer serial: deviceSerials){
lm.addElement(serial);
}
lDevices.setModel(lm);
mtSnapshots.getTableMapper().setReadOnly(true);
mtSnapshots.getTableMapper().addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
updateDiagram();
}
});
for (int i=0;i<32;i++){
JLabel l = new JLabel(String.format("#%02d", i));
l.setForeground(plotColors[i]);
paIndex.add(l);
}
mtSnapshots.addMouseListener(new MousePopupListener() {
@Override
public void popupTriggered(int x, int y) {
SnapShot[] selRows = mtSnapshots.getTableMapper().getSelectedRows(new SnapShot[0]);
if ((selRows != null)&&(selRows.length>0)){
JPopupMenu popupMenu = new JPopupMenu();
JMenuItem mi = new JMenuItem("Entfernen...");
mi.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (JOptionPane.showConfirmDialog(mtSnapshots, "Sollen die markierten Snapshots wirklich gelöscht werden?","Aufzeichnungen entfernen",JOptionPane.YES_NO_OPTION)==JOptionPane.YES_OPTION){
for (SnapShot ss: selRows){
mtSnapshots.getTableMapper().removeRow(ss);
}
mtSnapshots.repaint();
}
}
});
popupMenu.add(mi);
popupMenu.show(mtSnapshots, x, y);
}
}
});
}
private void showSnapshots(){
Integer deviceSerial = (Integer)lDevices.getSelectedValue();
if (deviceSerial != null){
SnapShot[] snapshots = PulsCounterApplication.getApplication().getDatabase().loadSnapshots(0, deviceSerial);
mtSnapshots.getTableMapper().setRows(snapshots);
} else {
mtSnapshots.getTableMapper().clear();
}
updateDiagram();
}
private void updateDiagram(){
System.gc();
SnapShot[] rows = mtSnapshots.getTableMapper().getSelectedRows(new SnapShot[0]);
if ((rows == null)||(rows.length==0)){
rows = mtSnapshots.getTableMapper().getRows(SnapShot.class).toArray(new SnapShot[0]);
}
int plotLength = rows.length;
if (cbDifferenzen.isSelected()){
plotLength--;
}
if (plotLength > 1024)
plotLength = 1024;
SimplePlotProvider pp = new SimplePlotProvider(32, plotLength);
diaSnapshots.setPlotProvider(pp);
for (int p=0;p<32;p++){
Float[] v = new Float[ plotLength ];
for (int i=0;i<plotLength;i++){
v[i] = (float)rows[i].getValue(p);
if (cbDifferenzen.isSelected()){
v[i] = ((float)rows[i+1].getValue(p)) - v[i];
}
}
pp.setPlot(p, v);
LinePlotPainter lpp = new LinePlotPainter();
lpp.setColor(plotColors[p]);
diaSnapshots.setPlotPainter(p, lpp);
}
diaSnapshots.repaint();
}
static {
plotColors[0] = new Color(255,0,0);
plotColors[1] = new Color(0,0,255);
plotColors[2] = new Color(0,255,0);
plotColors[3] = new Color(255,0,255);
plotColors[4] = new Color(0,255,255);
plotColors[5] = new Color(255,255,0);
plotColors[6] = new Color(192,192,0);
plotColors[7] = new Color(0,192,192);
int a = 2,
b = 4;
for (int i=0;i<3;i++){
for (int j=0;j<8;j++){
plotColors[8 + (i*8) + j] = new Color(
plotColors[j].getRed() * a / b,
plotColors[j].getBlue() * a / b,
plotColors[j].getGreen() * a / b
);
}
}
}
}