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.
Voici d'ailleur le code :
Par contre pour l'écriture, je ne m'en sors pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ;
J'arrive à écrire quelque chose mais la valeur en retour n'est pas bonne.
Voici le code
Dois-je aussi swaper et inverser les bytes en écriture?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Je vous remercie d'avance pour votre aide.
Partager