Avatar

Delphi (Pascal) --> Java (Codeumwandeln) (Geodäsie/Vermessung)

MichaeL ⌂, Bad Vilbel, Montag, 18.05.2009, 14:00 (vor 3348 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

Tags:
Java, Pascal

Avatar

Delphi (Pascal) --> Java (Codeumwandeln)

MichaeL ⌂, Bad Vilbel, Montag, 18.05.2009, 16:40 (vor 3347 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

Avatar

Delphi (Pascal) --> Java (Codeumwandeln)

Tino ⌂, Donnerstag, 28.05.2009, 00:16 (vor 3338 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.

Avatar

Delphi (Pascal) --> Java (Codeumwandeln)

MichaeL ⌂, Bad Vilbel, Donnerstag, 28.05.2009, 11:10 (vor 3338 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

Avatar

Sensoransteuerung mit Java

MichaeL ⌂, Bad Vilbel, Montag, 02.11.2009, 08:35 (vor 3180 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

Avatar

Sensoransteuerung mit Java

Tino ⌂, Samstag, 14.11.2009, 18:59 (vor 3167 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

Avatar

Sensoransteuerung mit Java

MichaeL ⌂, Bad Vilbel, Samstag, 14.11.2009, 19:18 (vor 3167 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

Avatar

Sensoransteuerung mit Java

Tino ⌂, Sonntag, 15.11.2009, 02:38 (vor 3167 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.

Avatar

Sensoransteuerung mit Java

MichaeL ⌂, Bad Vilbel, Sonntag, 15.11.2009, 10:48 (vor 3167 Tagen) @ Tino

Hi Tino,

Ich meine damit natürlich auch die entwickelte Software ;-)

Die natürlich auch, ganz klar :-P
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:

[image]

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

RSS-Feed dieser Diskussion