unit BufferVerwaltungUnit1;
interface
uses Windows, Dialogs;
const
MaschinenZeichen = 3; // Maschinen-Bezeichnung #K01# = 3 Char-Zeichen
MessStelleZeichen = 2; // Meßstellen-Bezeichung #T1# = 2 Char-Zeichen
BufferLaenge = 13; // Buffer-Länge (entspricht 2 Mess-Werte)
type
{
Maschinen-Bezeichungs Array von 3 Zeichen an der Stelle 0 befindet sich
das erste Zeichen, deshalb muss von der MaschinenZeichen 1 abgezogen
werden.
}
TMBezArr = array [0..MaschinenZeichen-1] of Char;
{
Meßstellen-BezeichungsArray von 2 Zeichen an der Stelle 0 befindet sich
das erste Zeichen, deshalb muss von der Anzahl MessStelleZeichen ein 1 ab-
gezogen werden.
}
TMSBezArr = array [0..MessStelleZeichen-1] of Char;
{
Der TMWCharRec ist der Variable-Type wie der Messwert über die serielle
Schnittstelle übertragen wird.
Aufbau: MaNr = 3 Charzeichen z.B.: 'K','0','1'
MSNr = 2 Charzeichen z.B.: 'T'1'
MWd = double z.B.: -112.22 // Länge entspricht 8 Byte
Wichtig dabei ist, daß der Record mit "packed" verwendet wird, um den Compiler
so einzustellen das soviel Byte reserviert werden, wie gebraucht werden.
Record-Aufbau: 13 Byte
----------------------------------------
|0 | 1| 2| 3| 4| 5| 6| 7| 8| 9|10|11|12|
----------------------------------------
| K| 0| 1| T| 1| D| D| D| D| D| D| D| D|
----------------------------------------
D = 8 Byte von der Variable "double"
}
TMWCharRec = packed record // Das entspricht 13 Byte, ohne packed 16
MaNr : TMBezArr; // Maschinen-Bezeichnung
MSNr : TMSBezArr; // Meßstellen-Bezeichnung
MWd : double; // Meß-Wert als double = 8 Byte
end;
TBuffer = array [0..BufferLaenge-1] of byte;
TBufferZeiger = ^TBuffer;
TMWCharRecZeiger = ^TMWCharRec;
function RecInBuffer (MW1 : TMWCharRec; var buffer1 : TBuffer) : boolean;
function BufferInRec (var MW1 : TMWCharRec; buffer1 : TBuffer) : boolean;
implementation
function RecInBuffer (MW1 : TMWCharRec; var buffer1 : TBuffer) : boolean;
var p1 : Pointer;
pBuff : TBufferZeiger;
begin
try
p1 := @MW1; // Adresse vom Rec einen Pointer zuweisen
pBuff := TBufferZeiger(p1); // Die Adresse zeigt auf den Buff-Zeiger
buffer1 := pBuff^; // Die Daten sind im Buff übertragen
result := TRUE;
except
MessageBox (0,'Fehler in der Function: RecInBuffer()','Problem',16);
result := FALSE;
Exit;
end;
end;
function BufferInRec (var MW1 : TMWCharRec; buffer1 : TBuffer) : boolean;
var p1 : Pointer;
pMW1 : TMWCharRecZeiger;
begin
try
p1 := @Buffer1; // Adresse vom Buffer1 einen Pointer zuweisen
pMW1 := TMWCharRecZeiger(p1); // Die Adresse zeigt auf den MW1-Zeiger
MW1 := pMW1^; // Die Daten sind im Buff übertragen
result := TRUE;
except
MessageBox (0,'Fehler in der Function: BufferInRec()','Problem',16);
result := FALSE;
Exit;
end;
end;
end.