Logiciels > Code Delphi > Acquisition sur port série (RS232)

Dernière mise à jour : 15/02/2007

Présentation

Voici quelques lignes de code que j'ai utilisées pour capturer l'état des entrées d'un port série. Code mis en application dans le logiciel ADDatAcq (jamais terminé) et pour de l'acquisition de données avec un TLV1543.

Prototype 1

Acquisition d'un état logique fourni par un AOP, lui-même alimenté en symétrique +/-12V directement par le port série.

acq_donnees_rs232_001a

J'ai mis en oeuvre ce principe pour mon détecteur de mensonge, ce qui m'a évité l'emploi d'un MAX232 pour l'interfaçage RS232.

Exemple de code

Code compatible NT / XP si usage du driver zlportio.

function SerialPort_ReadAllValues(
BaseAddr: word;
var I_CTS, I_DSR, I_RI, I_DCD: boolean): boolean;
begin
result := SerialPort_ReadModemStatusValues(
BaseAddr,
I_CTS, I_DSR, I_RI, I_DCD);
end;

function SerialPort_ReadModemStatusValues(
BaseAddr: word;
var I_CTS, I_DSR, I_RI, I_DCD: boolean): boolean;
var
Data: DWord;
Addr: DWord;
begin
if FHandle = INVALID_HANDLE_VALUE then exit;
Addr := BaseAddr + 6;

// read value on COM port if system IS NOT WinNT
if Win32Platform <> VER_PLATFORM_WIN32_NT then
begin
try
Case DataType of
DataType_Byte :
asm
mov edx,Addr
xor eax,eax
in al,dx
mov Data,eax
end;
DataType_Word :
asm
mov edx,Addr
xor eax,eax
in ax,dx
mov Data,eax
end;
DataType_DWord:
asm
mov edx,Addr
xor eax,eax
in eax,dx
mov Data,eax
end;
end;

except
result := false;
exit;
end;
end
else

// read status value on COM port if system IS WinNT
begin
try
if ZLIOStarted then
Data := ZLIOPortRead(Addr, DataType)
else
begin
Data := 0;
result := false;
end;
except
result := false;
exit;
end;
end;

// extract bits value for individual status line
I_DCD := ((Data and 128) = 128);
I_RI := ((Data and 64) = 64);
I_DSR := ((Data and 32) = 32);
I_CTS := ((Data and 16) = 16);
result := true;

end;

-

Codes source complets

Code à prendre tel quel ! Je n'ai pas le temps actuellement de mettre ça au propre, merci de votre compréhension.
Routines Communication diverses- Code source pour accès aux ports série RS232, port joystick, port parallèle, protocoles GPIB et JBUS.
Exemple 1 de lecture sur port série - ADDatAcq
Exemple 2 de lecture sur port série - ADDatAcq 2

Visualisation statut lignes du port série

En parallèle de l'utilisation de mon espion RS232 permettant de visualiser des données transitant sur un port série, j'utilisais un petit circuit tout bête basé sur un ensemble de leds faible consommation.

acq_donnees_rs232_000a