Delphi (Pascal) --> Java (Codeumwandeln) (Geodäsie/Vermessung)
MichaeL , Bad Vilbel, Monday, 18.05.2009, 14:00 (vor 5671 Tagen)
Hallo,
hab mal eine Frage, speziell an die GIS. Ich habe folgenden Pascal-Code, den ich in Java gern vorliegen hätte.
function TForm1.GetValue(ch: Integer; chL, chH: Byte): string; var y: SmallInt; begin y:= SmallInt(256*chH+ chL); if (y and $2000) = 0 then y:= y and $1FFF else y:= y or $E000; Result:= FormatFloat('0.000 g', 0.004*y); end; end;
in JAVA habe ich es so gemacht:
private double getValue(int sensorType, int chL, int chH) { double value = 256*(byte)chH + (byte)chL; if (((int)value & 0x2000) == 0) value = (int)value & 0x1FFF; else value = (int)value | 0xE000; return 0.004*value; }
das scheint aber nicht 100%ig korrekt zu sein. Ich erhalte aus dem Delphi-Tool andere Werte als aus meinem JAVA-Programm. Kann mir einer sagen, wo der Fehler leigt?
Gruß Micha
--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences
Delphi (Pascal) --> Java (Codeumwandeln)
MichaeL , Bad Vilbel, Monday, 18.05.2009, 16:40 (vor 5671 Tagen) @ MichaeL
Hallo,
ich habe es (scheinbar) rausbekommen:
-------
if (((int)value & 0x2000) == 0) value = (short)((int)value & 0x1FFF); else value = (short)((int)value | 0xE000); value = 0.004*value;
-------
Gruß Micha
--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences
Delphi (Pascal) --> Java (Codeumwandeln)
Tino, Thursday, 28.05.2009, 00:16 (vor 5661 Tagen) @ MichaeL
Hallo Micha,
ich frage mich ernsthaft wofür diese ganzen Konvertierungen gut sein sollen. Nun ich habe keine Testdaten und kann dadurch nicht testen... aber hier ist meine Version:
private double getValue(byte chL, byte chH) { int value = 256 * chH + chL; if ((value & 0x2000) == 0) value &= 0x1FFF; else value |= 0xE000; return 0.004 * value; }
Den Sensortype habe ich rausgenommen, da er nicht gebraucht wird. Aus den Eingabeparametern kannst du auch Integer-Werte machen, falls Dir das lieber ist. Hier solltest Du prüfen ob byte Deinen Wertebereich abdeckt. Die Hexadezimalwerte stehen warscheinlich für irgendwelche "Schalter". Hier würde ich static-final-Variablen mit einen entsprechenden Namen einführen.
Delphi (Pascal) --> Java (Codeumwandeln)
MichaeL , Bad Vilbel, Thursday, 28.05.2009, 11:10 (vor 5661 Tagen) @ Tino
Hi,
Danke für den Hinweis. Es müsste mMn. aber
short value = (short)(256 * chH + chL);
heißen, da ein SmallInt
gefordert war. Dann passen beide Ergebnisse zusammen. Sowie ich den Sensor habe, check es mal.
Den Sensortype habe ich rausgenommen, da er nicht gebraucht wird.
Ich habe es aufs wesentliche reduziert. Der Sensor kann verschieden Daten registrieren, die sich dann unterschiedlich berechnen. Den If-Else-Kram habe ich, ums leserlich zu halten, mal entfernt. Den Methodenkopf habe ich nicht angepasst.
Aus den Eingabeparametern kannst du auch Integer-Werte machen, falls Dir das lieber ist.
Ich habe Beispielcodes in C, Pascal und ?!?. Er verwendet immer einen Integer zur Abfrage der Sensoren. Die Berechung der eigentlichen Werte ist jedoch nur in Pascal einmal bespielhaft drin. Aus diesem Grund habe ich auch einen int
genommen; genauer gesagt einen IntByReference.
Sollte sich hier noch Probleme ergeben, meld ich mich hier. Ansonsten schon mal Danke für Deien Hilfe!
Gruß Micha
--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences
Sensoransteuerung mit Java
MichaeL , Bad Vilbel, Monday, 02.11.2009, 08:35 (vor 5503 Tagen) @ Tino
Hi Tino,
wollte nur noch kurz eine Rückmeldung geben. Auch wenn ich die Sensoren zwischenzeitlich wieder Heim geholt habe aus Wettzell, bin ich nicht (mehr) dazu gekommen, die Modifikation zu testen. Wir hatten ein paar Sensoren zur Erfassung der Umgebung gekauft. Diese haben auch ein Intertialsystem dabei, welches ich auslesen wollte. Hierzu war die Umrechnung nötig. Ich erhalte zwar Werte aber so richtig lässt sich das nicht vergleichen/validieren mit der Originalsoftware, da man den Messsensor ja beim Auslesen beschleunigen muss und ich immer nur ein Tool an der Schnittstelle lauschen lassen kann...
Trotzdem vielen Dank!
Micha
--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences
Sensoransteuerung mit Java
Tino, Saturday, 14.11.2009, 18:59 (vor 5490 Tagen) @ MichaeL
Ich erhalte zwar Werte aber so richtig lässt sich das nicht vergleichen/validieren mit der Originalsoftware, da man den Messsensor ja beim Auslesen beschleunigen muss und ich immer nur ein Tool an der Schnittstelle lauschen lassen kann...
Hey Micha,
das bedeutet Du benutzt Software, bei der Du nicht genau weißt, ob Sie korrekte Werte liefert?!
Die Kommunikation mit dem Gerät erfolgt doch sicherlich über Input-/Outputstreams. Du könntest doch einfach mal ein paar Testdaten aufzeichnen, indem Du den Inputstream umleitest und in eine Datei schreibst. Anschließend kannst Du die Datei beliebig oft auslesen und den Stream an Deine Programme weiterleiten. Die Ergebnisse sollten dann die gleichen sein.
Gruß
Tino
Sensoransteuerung mit Java
MichaeL , Bad Vilbel, Saturday, 14.11.2009, 19:18 (vor 5490 Tagen) @ Tino
Hallo Tino,
das bedeutet Du benutzt Software, bei der Du nicht genau weißt, ob Sie korrekte Werte liefert?!
Nein. Die Software, die dazu ist, wird auch funktionieren - keine Frage. Der Sensor kann Zustände messen. Temperatur, Druck usw. sind Zustände, die man als kurzzeitstabil einstufen kann. Bei der Temperatur kann ich also einfach den Wert mit der zugehörigen Software und anschließend mit meinem selbst geschriebenen Tool auslesen (Gleichzeitiges Auslesen geht wie gesagt nicht).
Bei Beschleunigung ist nun mein Problem, dass diese eben nicht mal kurzzeitstabil ist, sodass ich das "Experiment" nicht reproduzieren kann.
Du könntest doch einfach mal ein paar Testdaten aufzeichnen, indem Du den Inputstream umleitest und in eine Datei schreibst.
Das würde mein Problem nicht lösen, da ich diese Daten nicht in die Originalsoftware bekomme. Ich könnte also nicht prüfen, was die raus bekommt.
Wenn ich nochmal sowas in der Richtung mache, werde ich mich an dich wenden. So im nach hinein ist es etwas schwierig - gerade wenn man die Sensoren auch nicht mehr hat
Schönes Wochenende
Micha
--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences
Sensoransteuerung mit Java
Tino, Sunday, 15.11.2009, 02:38 (vor 5490 Tagen) @ MichaeL
Nein. Die Software, die dazu ist, wird auch funktionieren - keine Frage.
Das setzte ich natürlich vorraus. Ich meine damit natürlich auch die entwickelte Software
(Gleichzeitiges Auslesen geht wie gesagt nicht).
Bei Beschleunigung ist nun mein Problem, dass diese eben nicht mal kurzzeitstabil ist, sodass ich das "Experiment" nicht reproduzieren kann.
Genau das ist die Ausgangsituation. Deshalb meine Idee mit der Aufzeichnung.
Das würde mein Problem nicht lösen, da ich diese Daten nicht in die Originalsoftware bekomme. Ich könnte also nicht prüfen, was die raus bekommt.
Du meinst weil die Originalsoftware direkt die Schnittstelle abhört. Das sollte trotzdem kein Problem sein. Du benötigst lediglich ein zweite Schnittstelle. Die erste verwendest Du zum Empfangen, die zweite zum Senden. Zuerst zeichnest Du die Testdaten vom Gerät in Form einer Datei auf. Dann verbindest Du die beiden Schnittstellen miteinander. Deine Originalsoftware hört auf die erste Schnittstelle. Die aufgezeichneten Daten liest Du aus und sendest diese über zweite Schnittstelle an die erste. Du emulierst damit sozusagen Dein Gerät und kannst Deine Software nach der Aufzeichnung sogar unabhängig vom Gerät testen.
Sensoransteuerung mit Java
MichaeL , Bad Vilbel, Sunday, 15.11.2009, 10:48 (vor 5490 Tagen) @ Tino
Hi Tino,
Ich meine damit natürlich auch die entwickelte Software
Die natürlich auch, ganz klar
Ich benötigte nur Temperatur, Druck und Luftfeuchte, damit ich die EDM-Korrektur vom Tachymeter bestimmen kann. Alles andere noch zu integrieren wäre also ein Feature gewesen und keine Notwendigkeit. Schematisch sah da so aus:
Keines der Objekte bewegt sich so schnell, dass auch Beschleunigungen(!) relevante Größen für die Überwachung gewesen wären.
Du meinst weil die Originalsoftware direkt die Schnittstelle abhört.
Ja, das wäre der Knackpunkt gewesen. Ich hätte im Moment keinen Plan gehabt, wie ich den Datenstrom umleiten kann, wenn die Originalsoftware die Schnittstelle besetzt hat.
Dein Vorschlag hört sich natürlich nach DER Lösung an. Gleichzeitig habe ich so etwas auch noch nie gemacht, sodass es für mich wohl auch erstmal mit (etwas|erheblichen) Aufwand verbunden gewesen wäre.
Ich behalte das trotzdem mal im Hinterkopf. Sollte ich so was nochmal machen, komme ich auf Dich zurück! Besten Dank für Deine Hilfe!
Schönen Sonntag wünsche ich Dir!
Micha
--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences