Main Page | Class List | Class Members

EqStruct Class Reference

Strukturierte Daten vom SIS-Datentyp UFS_DT_Structure, wie zum Beispiel die der Property MAGNINFO bei gepulsten oder DC-Magneten, müssen in Java als Stream geschrieben und gelesen werden. More...

List of all members.

Public Member Functions

 EqStruct ()
 Erzeugt ein Objekt mit einer Speichergröße von 128 Bytes für zu lesende Daten.

 EqStruct (int arraySize)
 Erzeugt ein Objekt mit der angegebenen Speichergröße für zu lesende Daten.

byte readByte () throws IOException
 Liest ein Byte aus dem Input-Stream.

void writeByte (byte b) throws IOException
 Schreibt ein Byte in den Output-Stream.

short readShort () throws IOException
 Liest einen Short aus dem Input-Stream.

void writeShort (short s) throws IOException
 Schreibt einen Short in den Output-Stream.

int readInt () throws IOException
 Liest einen Integer aus dem Input-Stream.

void writeInt (int i) throws IOException
 Schreibt einen Integer in den Output-Stream.

float readFloat () throws IOException
 Liest einen Float (IEEE-Format) aus dem Input-Stream.

void writeFloat (float f) throws IOException
 Schreibt einen Float in den Output-Stream.

float readRealF () throws IOException
 Liest einen F_Floating (OpenVMS-Format) aus dem Input-Stream, konvertiert ihn in IEEE-Format (Java) und gibt diesen Wert zurück.

void writeRealF (float f, boolean swap) throws IOException
 Konvertiert ein IEEE-Float (Java) in ein F_Floating (OpenVMS-Format) und schreibt diesen Wert in den Output-Stream.

String readString () throws IOException
 Liest einen String aus dem Input-Stream.

String readString (int len) throws IOException
 Liest einen String der angegebenen Länge aus dem Input-Stream.

void writeString (String s) throws IOException
 Schreibt einen String in den Output-Stream.

EqData toEqData ()
 Gibt eine Referenz auf das interne EqData-Objekt zurück.

void reset ()
 Setzt den Input- und Output-Stream auf den Ausgangszustand zurück.

void close () throws IOException
 Schließt den Input- und Output-Stream.


Detailed Description

Strukturierte Daten vom SIS-Datentyp UFS_DT_Structure, wie zum Beispiel die der Property MAGNINFO bei gepulsten oder DC-Magneten, müssen in Java als Stream geschrieben und gelesen werden.

EqStruct hält die Daten intern in einem EqData-Objekt des Typs UFS_DT_Integer8. Dieses wird mittels eines ByteArrayOutputStream beschrieben bzw. mittels eines ByteArrayInputStream gelesen. In diesen Stream muss geschrieben bzw. aus diesem Stream muss gelesen werden, genau in der Reihenfolge, wie die Struktur es erfordert. Beim Schreiben wird die Größe des Arrays automatisch angepasst. Beim Lesen muss das Array die entsprechende Kapazität haben.

Angenommen, man hat eine Struktur, die in C wie folgt definiert ist

typedef struct { int i; // 32 bits char c; // 8 bits float f; // 32 bits } myStruct;
dann kann man deren Elemente in Java folgendermaßen lesen
UfClnt uf = new UfClnt(); EqStruct eq = new EqStruct(); UsrCompl cmpl = new UsrCompl();

uf.access("NOM", "PROP", "R", 0, null, eq.toEqData(), cmpl);

int i = eq.readInt(); // als erstes den Integer-, ... byte b = eq.readByte(); // ... dann den Byte- ... float f = eq.readFloat(); // ... und zum Schluss den Float-Wert
wobei auf die genaue Reihenfolge zu achten ist. Der Schreibzugriff funktioniert entsprechend:
eq.reset(); eq.writeInt(4711); eq.writeByte(37); eq.writeFloat(17.04F);

uf.access("NOM", "PROP", "W", 0, null, eq.toEqData(), cmpl);

ACHTUNG! Properties von Geräten auf VME-Ebene mit Parametern oder Daten vom SIS-Datentyp UFS_DT_Structure, die Float-Werte enthalten, erwarten bzw. senden diese Float-Werte im OpenVMS-Format F_Floating. In diesem Fall muss man statt readFloat und writeFloat die Methoden readRealF und writeRealF benutzen. Bei unterschiedlicher Endianität der kommunizierenden Maschinen müssen die einzelnen Elemente in der zu sendenden Struktur außerdem noch geswapt werden. Der Swap beim Empfang funktioniert automatisch.

Auf eine Lese-Property mit obigen Daten und den Parametern

typedef struct { int i; // 32 bits float f; // 32 bits } myPara;
würde man unter OpenVMS wie folgt zugreifen:
EqStruct para = new EqStruct(); EqStruct data = new EqStruct();

para.writeInt(Swap.swapInt(42)); para.writeRealF(47.11f, true); // true => swap

uf.access("NOM", "PROP", "R", 0, para.toEqData(), data.toEqData(), cmpl);

int i = eq.readInt(); byte b = eq.readByte(); float f = eq.readRealF(); // im Gegensatz zu oben

See also:
UfClnt

UfsDataTypes

EqData

ByteArrayOutputStream

ByteArrayInputStream

Author:
Ludwig Hechler
Version:
0.3, 4. Oktober 2004


Constructor & Destructor Documentation

EqStruct.EqStruct  ) 
 

Erzeugt ein Objekt mit einer Speichergröße von 128 Bytes für zu lesende Daten.

EqStruct.EqStruct int  arraySize  ) 
 

Erzeugt ein Objekt mit der angegebenen Speichergröße für zu lesende Daten.

Parameters:
arraySize die Speichergröße in Bytes


Member Function Documentation

void EqStruct.close  )  throws IOException
 

Schließt den Input- und Output-Stream.

byte EqStruct.readByte  )  throws IOException
 

Liest ein Byte aus dem Input-Stream.

float EqStruct.readFloat  )  throws IOException
 

Liest einen Float (IEEE-Format) aus dem Input-Stream.

int EqStruct.readInt  )  throws IOException
 

Liest einen Integer aus dem Input-Stream.

float EqStruct.readRealF  )  throws IOException
 

Liest einen F_Floating (OpenVMS-Format) aus dem Input-Stream, konvertiert ihn in IEEE-Format (Java) und gibt diesen Wert zurück.

Die Methode wird benötigt, da beim SIS-Datentyp UFS_DT_Structure keine Möglichkeit besteht, Konvertierungen automatisch von einem UFC-Client oder vom UFC-Server durchführen zu lassen. Das muss der Anwender selbst tun, indem er diese Methode in seinem Code benutzt.

short EqStruct.readShort  )  throws IOException
 

Liest einen Short aus dem Input-Stream.

String EqStruct.readString int  len  )  throws IOException
 

Liest einen String der angegebenen Länge aus dem Input-Stream.

Parameters:
len die Länge des zu lesenden Strings

String EqStruct.readString  )  throws IOException
 

Liest einen String aus dem Input-Stream.

void EqStruct.reset  ) 
 

Setzt den Input- und Output-Stream auf den Ausgangszustand zurück.

Eventuell noch vorhandene Daten gehen verloren.

EqData EqStruct.toEqData  ) 
 

Gibt eine Referenz auf das interne EqData-Objekt zurück.

Diese kann UfClnt.access() übergeben werden.

EqStruct eq = new EqStruct();

uf.access("UKTCG3E_", "USRVERS", "R", 0, null, eq.toEqData(), cmpl);

See also:
UfClnt

void EqStruct.writeByte byte  b  )  throws IOException
 

Schreibt ein Byte in den Output-Stream.

void EqStruct.writeFloat float  f  )  throws IOException
 

Schreibt einen Float in den Output-Stream.

Parameters:
f der zu schreibende Float-Wert

void EqStruct.writeInt int  i  )  throws IOException
 

Schreibt einen Integer in den Output-Stream.

void EqStruct.writeRealF float  f,
boolean  swap
throws IOException
 

Konvertiert ein IEEE-Float (Java) in ein F_Floating (OpenVMS-Format) und schreibt diesen Wert in den Output-Stream.

Falls angegeben (swap == true), wird noch ein Swap ausgeführt. Die Methode wird benötigt, da beim SIS-Datentyp UFS_DT_Structure keine Möglichkeit besteht, Konvertierungen automatisch von einem UFC-Client oder vom UFC-Server durchführen zu lassen. Das muss der Anwender selbst tun, indem er diese Methode in seinem Code benutzt. Ein Swap ist notwendig, wenn Client und Server auf Maschinen mit unterschiedlicher Endianität laufen.

Parameters:
f der Float-Wert, der im F_Floating-Format geschickt werden soll.
swap swap == true => swap

void EqStruct.writeShort short  s  )  throws IOException
 

Schreibt einen Short in den Output-Stream.

void EqStruct.writeString String  s  )  throws IOException
 

Schreibt einen String in den Output-Stream.


The documentation for this class was generated from the following file:
Generated on Thu Jan 24 10:17:04 2008 for Download S-Record Files by doxygen 1.3.5