No estoy seguro si te entendí bien, quieres decir que si tienes que mandar el byte 41h (65 en decimal) lo que tienes que mandar es Chr($41) (Una 'A'). No entiendo porque, un Char y un byte tienen ambos el mismo tamaño (8 bits), de hecho no hay diferencia entre enviar un byte o un Char. ¿O refieres acaso a convertir cada byte en dos caracteres que representen su valor hexadecimal?
Por ejemplo, si tengo que enviar los bytes 20h, 30h, 40h, 50h se podría hacer así (siempre suponiendo que tenemos el puerto abierto y configurado):
Código Delphi
[-]
var
Buffer: array[1..4] of byte; Escritos: Cardinal;
begin
Buffer[1]:= $20;
Buffer[2]:= $30;
Buffer[3]:= $40;
Buffer[4]:= $50;
WriteFile(hPort, Buffer,4, Escritos, nil);
end;
Para leer los bytes tenemos que saber que nos va a mandar, es decir, podemos estar leyendo continuamente, leer durante un tiempo, o leer hasta encontrar un carácter final. La primera opción no parece practica, solo seria útil para hacer un programa que monitorizara el puerto serie. Y como parece ser que tu dispositivo no utiliza un carácter especial para terminar la conexión, tendremos que quedarnos con la segunda opción.
Código Delphi
[-]
var
Buffer: array[1..4096] of byte; Leidos: Cardinal;
Ticks: Cardinal;
i,j: integer;
B: byte;
Str: string;
Estado: TCOMSTAT;
ErrorCode: cardinal;
begin
i:= 0;
Ticks:= GetTickCount;
repeat
ClearCommError(hPort, ErrorCode, @Estado);
if Estado.cbInQue > 0 then
begin
ReadFile(hPort,B,1,Leidos,nil);
inc(i);
Buffer[i]:= B;
end else Sleep(10);
until (GetTickCount - Ticks) > 5000; Str:= '';
for j:= 1 to i do
Str:= Str + IntToHex(Buffer[j],2) + 'h ';
ShowMessage(Str);
end;
Una secuencia de como lo haria yo seria la siguiente:
Código:
Abrir el puerto
Configurar el puerto
Purgar el puerto
Mandar los bytes
Recibir la respuesta durante unos segundos
Mostrar la respuesta o usarla para lo que se quiera
Cerrar el puerto