[Tportcom] Lire et écrire en asynchrone sur port RS232 d'un lecteur Phoenix
Bonjour à tous.
Je souhaiterais lire et écrire sur le port rs232 d'un lecteur de carte phoenix en mode asynchrone.
Pour la partie lecture, j'ai réussi grace à un post de shinning, merci à lui. :ccool:
Voici d'ailleur le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| function IGetBuffer(Count : Integer):String;
var
Buffer : array[0..255] of byte;
I : Integer;
S : String;
begin
Form1.ComPort1.Read(Buffer, Count);
S:= '';
for I := 0 to Count - 1 do
//Inversion binaire avec NOT puis Swap pour asynchrone
S := S + IntToHex(ReverseByte(NOT Buffer[I]),2)+ ' ';
result := TrimRight(S);
end;
function ReverseByte(const X : byte) : byte ;
const A : array [$0..$F] of byte =
($0,$8,$4,$C,$2,$A,$6,$E,$1,$9,$5,$D,$3,$B,$7,$F) ;
begin
ReverseByte := (A[X and $0F] shl 4) or (A[X shr 4])
end ; |
Par contre pour l'écriture, je ne m'en sors pas.
J'arrive à écrire quelque chose mais la valeur en retour n'est pas bonne.
Voici le code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| function WriteBuffer(Buffer : string): Boolean;
// Données hexa exemple 'de0002ca00'
var
B : Byte;
CmdLen : byte;
i : integer;
begin
CmdLen := Length(Buffer);
i:=1;
while i < CmdLen do
begin
B := strtoint('$'+(Buffer[i])+(Buffer[i+1]));
Form1.ComPort1.Write(B, 1);
Form1.ComPort1.Read (B, 1);
i := i+2;
Sleep(50);
end;
Sleep(250);
end; |
Dois-je aussi swaper et inverser les bytes en écriture?
Je vous remercie d'avance pour votre aide.