WIP-PC2
Harald Wolff 2017-08-24 18:01:41 +02:00
parent a3e32ad3e5
commit c0286e6a2e
11 changed files with 205 additions and 119 deletions

View File

@ -6,6 +6,6 @@
<classpathentry combineaccessrules="false" kind="src" path="/org.hwo.ui"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.hwo.servicelink"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.hwo.platform"/>
<classpathentry kind="lib" path="lib/hsqldb.jar"/>
<classpathentry kind="lib" path="hsqldb.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

3
Manifest 100644
View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: org.hwo.pulscounter.Application

View File

@ -2,73 +2,98 @@
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>missing translations</comment>
<entry key="Skript bearbeiten">Skript bearbeiten</entry>
<entry key="neu...">neu...</entry>
<entry key="Intervall 2 basiert auf Tageszeit">Intervall 2 basiert auf Tageszeit</entry>
<entry key="Intervall 1:">Intervall 1:</entry>
<entry key="Schnittstelle wählen...">Schnittstelle wählen...</entry>
<entry key="5x neu">5x neu</entry>
<entry key="Niemals">Niemals</entry>
<entry key="auf Zähler übertragen....">auf Zähler übertragen....</entry>
<entry key="Meldungen">Meldungen</entry>
<entry key="Synololog einstellen">Synololog einstellen</entry>
<entry key="ARITHEMTIK = B - 1">ARITHEMTIK = B - 1</entry>
<entry key="tooltip.synololog.einstellen">tooltip.synololog.einstellen</entry>
<entry key="ARITHEMTIK = A / B">ARITHEMTIK = A / B</entry>
<entry key="Von Gerät %s geholt am %s">Von Gerät %s geholt am %s</entry>
<entry key="A &lt; B">A &lt; B</entry>
<entry key="Intervall 0:">Intervall 0:</entry>
<entry key="Intervall 0 basiert auf Tageszeit">Intervall 0 basiert auf Tageszeit</entry>
<entry key="Anschlusseinstellungen">Anschlusseinstellungen</entry>
<entry key="ARITHEMTIK = B + 1">ARITHEMTIK = B + 1</entry>
<entry key="Aufzeichnungen verwalten">Aufzeichnungen verwalten</entry>
<entry key="Ausgang">Ausgang</entry>
<entry key="von Zähler holen....">von Zähler holen....</entry>
<entry key="SnapShot Speicher zurücksetzen">SnapShot Speicher zurücksetzen</entry>
<entry key="tooltip.synololog.einstellen">tooltip.synololog.einstellen</entry>
<entry key="Operation">Operation</entry>
<entry key="Z">Z</entry>
<entry key="Von Gerät %s geholt am %s">Von Gerät %s geholt am %s</entry>
<entry key="Inkrement">Inkrement</entry>
<entry key="ARITHEMTIK = B + 1">ARITHEMTIK = B + 1</entry>
<entry key="Bezeichnung:">Bezeichnung:</entry>
<entry key="Bedingung">Bedingung</entry>
<entry key="Anschlusseinstellungen">Anschlusseinstellungen</entry>
<entry key="Ausgang">Ausgang</entry>
<entry key="tooltip.daten.exportieren">tooltip.daten.exportieren</entry>
<entry key="Bezeichnung">Bezeichnung</entry>
<entry key="Intervall 1:">Intervall 1:</entry>
<entry key="Alle Zähler zurücksetzen">Alle Zähler zurücksetzen</entry>
<entry key="ARITHEMTIK = A - B">ARITHEMTIK = A - B</entry>
<entry key="A &gt; B">A &gt; B</entry>
<entry key="Skripte">Skripte</entry>
<entry key="Snapshot Index zurücksetzen">Snapshot Index zurücksetzen</entry>
<entry key="A == B">A == B</entry>
<entry key="ARITHEMTIK = A + B">ARITHEMTIK = A + B</entry>
<entry key="Signalfenster">Signalfenster</entry>
<entry key="Es konnte kein Skript vom gerät empfangen werden.">Es konnte kein Skript vom gerät empfangen werden.</entry>
<entry key="name">name</entry>
<entry key="Skript bearbeiten">Skript bearbeiten</entry>
<entry key="B">B</entry>
<entry key="A != 0">A != 0</entry>
<entry key="A">A</entry>
<entry key="Signalfilter">Signalfilter</entry>
<entry key="neu...">neu...</entry>
<entry key="Der Selbsttest für Zähler #%d war erfolgreich.">Der Selbsttest für Zähler #%d war erfolgreich.</entry>
<entry key="Wählen Sie die Schnittstelle über die das Skript empfangen werden soll.">Wählen Sie die Schnittstelle über die das Skript empfangen werden soll.</entry>
<entry key="Intervall 1 basiert auf Tageszeit">Intervall 1 basiert auf Tageszeit</entry>
<entry key="Beschreibung:">Beschreibung:</entry>
<entry key="Intervall 0 basiert auf Tageszeit">Intervall 0 basiert auf Tageszeit</entry>
<entry key="Alle Zählerstände zurücksetzen">Alle Zählerstände zurücksetzen</entry>
<entry key="ARITHEMTIK = A - 1">ARITHEMTIK = A - 1</entry>
<entry key="ARITHEMTIK = A * B">ARITHEMTIK = A * B</entry>
<entry key="tooltip.daten.exportieren">tooltip.daten.exportieren</entry>
<entry key="LOGIK = A or B">LOGIK = A or B</entry>
<entry key="bearbeiten...">bearbeiten...</entry>
<entry key="ARITHEMTIK = A + 1">ARITHEMTIK = A + 1</entry>
<entry key="A == 0">A == 0</entry>
<entry key="Löst Snapshot aus">Löst Snapshot aus</entry>
<entry key="Entfernen">Entfernen</entry>
<entry key="entfernen">entfernen</entry>
<entry key="Daten exportieren">Daten exportieren</entry>
<entry key="Inkrement">Inkrement</entry>
<entry key="1x neu">1x neu</entry>
<entry key="SnapShot Speicher auf letzten bekannten SnapShot setzen">SnapShot Speicher auf letzten bekannten SnapShot setzen</entry>
<entry key="Bedingung">Bedingung</entry>
<entry key="Wählen Sie die Schnittstelle über die das Skript übertragen werden soll.">Wählen Sie die Schnittstelle über die das Skript übertragen werden soll.</entry>
<entry key="&lt;html&gt;Diese Funktion sollte nur auf Aufforderung durch den Support ausgeführt werden.&lt;br/&gt;Soll der Snapshot Index auf dem Gerät wirklich zurückgesetzt werden?&lt;/html&gt;">&lt;html&gt;Diese Funktion sollte nur auf Aufforderung durch den Support ausgeführt werden.&lt;br/&gt;Soll der Snapshot Index auf dem Gerät wirklich zurückgesetzt werden?&lt;/html&gt;</entry>
<entry key="warning.selftest">warning.selftest</entry>
<entry key="Intervall 3 basiert auf Tageszeit">Intervall 3 basiert auf Tageszeit</entry>
<entry key="Intervall 2 basiert auf Tageszeit">Intervall 2 basiert auf Tageszeit</entry>
<entry key="Z">Z</entry>
<entry key="warning.title.selftest">warning.title.selftest</entry>
<entry key="LOGIK = A and B">LOGIK = A and B</entry>
<entry key="ARITHEMTIK = B">ARITHEMTIK = B</entry>
<entry key="ARITHEMTIK = A">ARITHEMTIK = A</entry>
<entry key="Alle Zähler zurücksetzen">Alle Zähler zurücksetzen</entry>
<entry key="OK">OK</entry>
<entry key="Skripte">Skripte</entry>
<entry key="Wählen Sie die Schnittstelle über die das Skript übertragen werden soll.">Wählen Sie die Schnittstelle über die das Skript übertragen werden soll.</entry>
<entry key="tooltip.intervall">tooltip.intervall</entry>
<entry key="Snapshot Index zurücksetzen">Snapshot Index zurücksetzen</entry>
<entry key="&lt;html&gt;Diese Funktion sollte nur auf Aufforderung durch den Support ausgeführt werden.&lt;br/&gt;Soll der Snapshot Index auf dem Gerät wirklich zurückgesetzt werden?&lt;/html&gt;">&lt;html&gt;Diese Funktion sollte nur auf Aufforderung durch den Support ausgeführt werden.&lt;br/&gt;Soll der Snapshot Index auf dem Gerät wirklich zurückgesetzt werden?&lt;/html&gt;</entry>
<entry key="Wollen Sie wirklich alle Zählerstände auf 0 zurücksetzen?">Wollen Sie wirklich alle Zählerstände auf 0 zurücksetzen?</entry>
<entry key="Tageszeitabhängigkeit:">Tageszeitabhängigkeit:</entry>
<entry key="Synololog einstellen">Synololog einstellen</entry>
<entry key="Intervall 0:">Intervall 0:</entry>
<entry key="A != B">A != B</entry>
<entry key="name">name</entry>
<entry key="Invertiert">Invertiert</entry>
<entry key="Intervall 3:">Intervall 3:</entry>
<entry key="ARITHEMTIK = 0">ARITHEMTIK = 0</entry>
<entry key="bearbeiten...">bearbeiten...</entry>
<entry key="Löst Snapshot aus">Löst Snapshot aus</entry>
<entry key="auf Zähler übertragen....">auf Zähler übertragen....</entry>
<entry key="Nur nach Rücksprache mit Support:">Nur nach Rücksprache mit Support:</entry>
<entry key="Verbindung">Verbindung</entry>
<entry key="Meldungen">Meldungen</entry>
<entry key="Passiver Schalter">Passiver Schalter</entry>
<entry key="tooltip.tagesbasierte.intervalle">tooltip.tagesbasierte.intervalle</entry>
<entry key="Kanal">Kanal</entry>
<entry key="Der Selbsttest für Zähler #%d ist fehlgeschlagen.">Der Selbsttest für Zähler #%d ist fehlgeschlagen.</entry>
<entry key="Daten exportieren">Daten exportieren</entry>
<entry key="warning.selftest">warning.selftest</entry>
<entry key="A == 0">A == 0</entry>
<entry key="SnapShot Speicher auf letzten bekannten SnapShot setzen">SnapShot Speicher auf letzten bekannten SnapShot setzen</entry>
<entry key="entfernen">entfernen</entry>
<entry key="Schnittstelle wählen...">Schnittstelle wählen...</entry>
<entry key="Formeln">Formeln</entry>
<entry key="Intervall 2:">Intervall 2:</entry>
<entry key="Aufzeichnungen verwalten">Aufzeichnungen verwalten</entry>
<entry key="Alle Zählerstände zurücksetzen">Alle Zählerstände zurücksetzen</entry>
<entry key="B">B</entry>
<entry key="A">A</entry>
<entry key="ARITHEMTIK = 1">ARITHEMTIK = 1</entry>
<entry key="ARITHEMTIK = 0">ARITHEMTIK = 0</entry>
<entry key="Immer">Immer</entry>
<entry key="Ausgangswert Z">Ausgangswert Z</entry>
<entry key="A != 0">A != 0</entry>
<entry key="Beschreibung:">Beschreibung:</entry>
<entry key="Intervall 1 basiert auf Tageszeit">Intervall 1 basiert auf Tageszeit</entry>
<entry key="Signalfilter">Signalfilter</entry>
<entry key="Bezeichnung">Bezeichnung</entry>
<entry key="Intervall 3:">Intervall 3:</entry>
<entry key="tooltip.intervall">tooltip.intervall</entry>
<entry key="Tageszeitabhängigkeit:">Tageszeitabhängigkeit:</entry>
<entry key="Verbindung">Verbindung</entry>
<entry key="tooltip.tagesbasierte.intervalle">tooltip.tagesbasierte.intervalle</entry>
<entry key="Nur nach Rücksprache mit Support:">Nur nach Rücksprache mit Support:</entry>
<entry key="Passiver Schalter">Passiver Schalter</entry>
<entry key="Skriptelement bearbeiten">Skriptelement bearbeiten</entry>
<entry key="OK">OK</entry>
<entry key="Wählen Sie die Schnittstelle über die das Skript empfangen werden soll.">Wählen Sie die Schnittstelle über die das Skript empfangen werden soll.</entry>
<entry key="LOGIK = A xor B">LOGIK = A xor B</entry>
<entry key="Der Selbsttest für Zähler #%d war erfolgreich.">Der Selbsttest für Zähler #%d war erfolgreich.</entry>
<entry key="Eingangswert B">Eingangswert B</entry>
<entry key="Eingangswert A">Eingangswert A</entry>
<entry key="Intervall 2:">Intervall 2:</entry>
<entry key="LOGIK = not B">LOGIK = not B</entry>
<entry key="LOGIK = not A">LOGIK = not A</entry>
<entry key="Formeln">Formeln</entry>
<entry key="Es konnte kein Skript vom gerät empfangen werden.">Es konnte kein Skript vom gerät empfangen werden.</entry>
<entry key="Operation">Operation</entry>
<entry key="Bezeichnung:">Bezeichnung:</entry>
<entry key="Wollen Sie wirklich alle Zählerstände auf 0 zurücksetzen?">Wollen Sie wirklich alle Zählerstände auf 0 zurücksetzen?</entry>
<entry key="Der Selbsttest für Zähler #%d ist fehlgeschlagen.">Der Selbsttest für Zähler #%d ist fehlgeschlagen.</entry>
</properties>

View File

@ -8,9 +8,10 @@ import org.hwo.logging.Logging;
public class Application {
public static void main(String[] args) {
Logging.Init(args, "synololog.log");
PulsCounterApplication application = new PulsCounterApplication(args);
Logging.getInstance().setLimitLogLevel(50);
log(LogLevel.INFO,"Application initialized, starting up user interface");

View File

@ -20,16 +20,21 @@ public class DeviceTester extends Thread{
public void run() {
prepare();
if (fullTest()){
PulsCounterApplication.getApplication().message(String.format(
Messages.getString("Der Selbsttest für Zähler #%d war erfolgreich."),
device.getDeviceSerial()
));
} else {
PulsCounterApplication.getApplication().message(String.format(
Messages.getString("Der Selbsttest für Zähler #%d ist fehlgeschlagen."),
device.getDeviceSerial()
));
try {
if (fullTest()){
PulsCounterApplication.getApplication().message(String.format(
Messages.getString("Der Selbsttest für Zähler #%d war erfolgreich."),
device.getDeviceSerial()
));
} else {
PulsCounterApplication.getApplication().message(String.format(
Messages.getString("Der Selbsttest für Zähler #%d ist fehlgeschlagen."),
device.getDeviceSerial()
));
}
} catch (Exception e){
log(ERROR,"Exception while testing device");
log(e);
}
unprepare();
@ -103,6 +108,8 @@ public class DeviceTester extends Thread{
}
sleep( 500 );
if (!checkCounters(20))
return false;
@ -191,7 +198,7 @@ public class DeviceTester extends Thread{
for (int i=0;i<32;i++){
if (_set[i] != _act[i]){
success = false;
log(INFO,"Setting Channel Counter %d failed",i);
log(INFO,"Setting Channel Counter %d failed [%d!=%d]",i,_set[i],_act[i]);
}
}
return success;

View File

@ -211,8 +211,6 @@ public class PulsCounterApplication implements ServiceLinkListener{
}
private static void logStartup(){
Logging.setLogFileName("synololog.log");
log("Synololog Application Startup");
log("JAVA Environment: %s (%s)", System.getProperty("java.version"),

View File

@ -9,6 +9,7 @@ import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import org.hwo.ArrayHelper;
import org.hwo.io.NewSerialPort.NewSerialPort;
import org.hwo.pulscounter.SnapShot;
import org.hwo.pulscounter.simplescript.SimpleScript.SimpleScriptElement;
@ -115,21 +116,22 @@ public class SimpleLinkDeviceConnector implements IDeviceConnector {
@Override
public int[] getCounters() {
int[] values = new int[32];
checkOpen();
for (int n=0;n<32;n++){
values[n] = getCounter(n);
try {
return ArrayHelper.unbox(this.simpleLink.readInt(0x0600,32));
} catch (ServiceLinkException | IOException e){
log(e);
return null;
}
checkRealTimeClock();
return values;
}
@Override
public void setCounters(int[] values) {
for (int n=0;n<32;n++){
setCounter(n, values[n]);
try {
simpleLink.writeInt(0x0600, values);
} catch (IOException | ServiceLinkException e) {
log(e);
}
}
@ -140,7 +142,7 @@ public class SimpleLinkDeviceConnector implements IDeviceConnector {
checkOpen();
try {
v = simpleLink.readInt( 0x600 + channel );
v = simpleLink.readInt( 0x0600 + channel );
} catch (Exception e) {
throw new NoDeviceConnectionException();
}
@ -311,13 +313,23 @@ public class SimpleLinkDeviceConnector implements IDeviceConnector {
@Override
public float[] getAnalogs() {
float[] values = new float[32];
checkOpen();
for (int n=0;n<8;n++){
values[n] = getAnalog(n);
try {
Integer[] values = this.simpleLink.readInt(0x8000, 8);
float[] analogs = new float[8];
for (int n=0;n<8;n++){
if (values[n] != null){
analogs[n] = (values[n] / 6553.60f);
}
}
return analogs;
} catch (Exception e){
log(e);
return null;
}
return values;
}
@Override
@ -365,11 +377,11 @@ public class SimpleLinkDeviceConnector implements IDeviceConnector {
try {
Integer sbrk,stacklimit,cycletime,enginestate;
sbrk = simpleLink.readInt(0x0020);
stacklimit = simpleLink.readInt(0x0021);
cycletime = simpleLink.readInt(0x1310);
enginestate = simpleLink.readInt(0x0703);
Integer[] rd = simpleLink.readInt(new int[]{0x0020,0x0021,0x1310,0x0703});
sbrk = rd[0];
stacklimit = rd[1];
cycletime = rd[2];
enginestate = rd[3];
log(INFO,"HEAP END: 0x%04x SYS-STACK: 0x%04x",sbrk,stacklimit);
log(INFO,"I/O cycle time: %dus",cycletime);
@ -550,19 +562,22 @@ public class SimpleLinkDeviceConnector implements IDeviceConnector {
@Override
public int[] getDebounce() {
int[] filters = new int[32];
checkOpen();
for (int i=0;i<32;i++){
filters[i] = getDebounce(i);
try {
return ArrayHelper.unbox(this.simpleLink.readInt(0x1020,32));
} catch (ServiceLinkException | IOException e){
log(e);
return null;
}
return filters;
}
@Override
public void setDebounce(int[] filters) {
for (int i=0;i<32;i++){
setDebounce(i,filters[i]);
try {
this.simpleLink.writeInt(0x1020, filters);
} catch (ServiceLinkException | IOException e) {
log(e);
}
}
@ -592,13 +607,14 @@ public class SimpleLinkDeviceConnector implements IDeviceConnector {
@Override
public int[] getWindows() {
int[] windows = new int[32];
checkOpen();
for (int i=0;i<32;i++){
windows[i] = getWindow(i);
try {
return ArrayHelper.unbox(this.simpleLink.readInt(0x1280,32));
} catch (ServiceLinkException | IOException e){
log(e);
return null;
}
return windows;
}
@Override
@ -799,13 +815,14 @@ public class SimpleLinkDeviceConnector implements IDeviceConnector {
@Override
public int[] getIncrements() {
int[] values = new int[32];
checkOpen();
for (int n=0;n<32;n++){
values[n] = getIncrement(n);
try {
return ArrayHelper.unbox(this.simpleLink.readInt(0x12A0,32));
} catch (ServiceLinkException | IOException e){
log(e);
return null;
}
return values;
}
@Override

View File

@ -412,10 +412,14 @@ public class DeviceConfiguration extends JDialog {
windows = deviceConnector.getWindows();
increments = deviceConnector.getIncrements();
tseI0.setValue( deviceConnector.getInterval(0) );
tseI1.setValue( deviceConnector.getInterval(1) );
tseI2.setValue( deviceConnector.getInterval(2) );
tseI3.setValue( deviceConnector.getInterval(3) );
Integer iv0 = deviceConnector.getInterval(0);
tseI0.setValue( iv0 == 0 ? null : iv0 );
Integer iv1 = deviceConnector.getInterval(0);
tseI1.setValue( iv1 == 0 ? null : iv1 );
Integer iv2 = deviceConnector.getInterval(0);
tseI2.setValue( iv2 == 0 ? null : iv2 );
Integer iv3 = deviceConnector.getInterval(0);
tseI3.setValue( iv3 == 0 ? null : iv3 );
}
private void writeDevice(){

View File

@ -194,7 +194,6 @@ public class NewMainWindow implements PulsCounterApplicationListener, TaskletLis
backgroundThread = new BackgroundThread();
backgroundThread.start();
restoreState();
frmSynolog.setVisible(true);

32
synololog.jardesc 100644
View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<jardesc>
<jar path="/Volumes/DATEN/src/java/release/synololog.jar"/>
<options buildIfNeeded="true" compress="true" descriptionLocation="/org.hwo.pulscounter/synololog.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="true" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
<storedRefactorings deprecationInfo="true" structuralOnly="false"/>
<selectedProjects/>
<manifest generateManifest="false" mainClassHandleIdentifier="=org.hwo.pulscounter/src&lt;org.hwo.pulscounter{Application.java[Application" manifestLocation="/org.hwo.pulscounter/Manifest" manifestVersion="1.0" reuseManifest="true" saveManifest="true" usesManifest="true">
<sealing sealJar="false">
<packagesToSeal/>
<packagesToUnSeal/>
</sealing>
</manifest>
<selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
<file path="/org.hwo.pulscounter/missing-translation.txt"/>
<file path="/org.hwo.pulscounter/synololog-hsql.properties"/>
<file path="/org.hwo.pulscounter/PulsCounterApplication.msg_en.xml"/>
<file path="/org.hwo.pulscounter/synololog-hsql.log"/>
<file path="/org.hwo.pulscounter/.gitignore"/>
<file path="/org.hwo.pulscounter/.project"/>
<javaElement handleIdentifier="=org.hwo.servicelink/src"/>
<javaElement handleIdentifier="=org.hwo.ui/src"/>
<javaElement handleIdentifier="=org.hwo.platform/src"/>
<javaElement handleIdentifier="=org.hwo/src"/>
<javaElement handleIdentifier="=org.hwo.pulscounter/src"/>
<file path="/org.hwo.pulscounter/.classpath"/>
<file path="/org.hwo.pulscounter/synololog.cfg"/>
<file path="/org.hwo.pulscounter/synololog.log"/>
<file path="/org.hwo.pulscounter/PulsCounterApplication.msg.xml"/>
<file path="/org.hwo.pulscounter/synololog.log.old"/>
<file path="/org.hwo.pulscounter/synololog-hsql.script"/>
</selectedElements>
</jardesc>