Aide moi svp

happywalid

Nouveau membre
bonjour
j'ai programé une liaison RS232 avec le langage delphi et voila mon programme
unit nouha;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
const TAILLE_RX = 4096; // taille tampon d''entrée
TAILLE_TX = 4096; // taille tampon de sortie
MAX_WAIT_READ = 5000; // temps max d''attente pour lecture (en ms)
type
TForm1 = class(TForm)
Button1: TButton;
RichEdit1: TRichEdit;
Button2: TButton;
Button3: TButton;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;
type
//PCOMPORT = ^COMPORT;
COMPORT = String;
T_LiaisonRS232 = class
constructor Create;
destructor Destroy;override;
private
g_hCOM : Hwnd;
g_cto: COMMTimeOuts;
g_dcb : Dcb;
public
function OuvrirCOM(szCOM: COMPORT):Boolean;
function LireCOM(Buffer: Pointer; nOctetsALire :Integer;var lpNumberOfBytesRead: Cardinal):Boolean;
function EcrireCOM(Buffer: Pointer; nOctetsAEcrire: Integer;var lpNumberOfBytesWritten: Cardinal):Boolean;
function CloseCOM:Boolean;
end;
var
_liaisonrs232:T_liaisonrs232;

var
Form1: TForm1;
nId : Integer;
nOctetsEcris: Integer;
nOctetsLus: Integer;

implementation
constructor T_LiaisonRS232.Create;
begin
//configuration du temps d''attente
g_cto.ReadIntervalTimeout := MAX_WAIT_READ;
g_cto.ReadTotalTimeoutMultiplier := 0;
g_cto.ReadTotalTimeoutConstant := MAX_WAIT_READ;
g_cto.WriteTotalTimeoutMultiplier := 0;
g_cto.WriteTotalTimeoutConstant := 0;

//Configuration du Port
g_dcb.DCBlength := sizeof(DCB);
g_dcb.BaudRate := CBR_9600;
g_dcb.wReserved := 0;
g_dcb.XonLim := $100;
g_dcb.XoffLim := $100;
g_dcb.ByteSize := 8;
g_dcb.Parity := NOPARITY;
g_dcb.StopBits := ONESTOPBIT;
g_dcb.XonChar := 'B'; //$11
g_dcb.XoffChar := 'D'; //$13
g_dcb.ErrorChar := '?';
g_dcb.EofChar := '&';
g_dcb.EvtChar := '$';
end;

destructor T_LiaisonRS232.Destroy;
begin
CloseHandle(g_hCOM);
inherited Destroy;
end;


function T_LiaisonRS232.OuvrirCOM(szCOM: COMPORT):Boolean;
begin
// construction + tentative d''ouverture du port
g_hCOM := CreateFile(PChar(szCOM),
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_SYSTEM,
0);

if(g_hCOM = INVALID_HANDLE_VALUE) then
begin
MessageDlg('Erreur lors de l''ouverture du port : '+szCOM,mtError,[mbOk],0);
OuvrirCOM:=False;
Exit;
end else
// affectation taille des tampons d''émission et de réception
SetupComm(g_hCOM, TAILLE_RX , TAILLE_TX);

//configuration du port COM
if((not SetCommTimeouts(g_hCOM, g_cto))or(not SetCommState(g_hCOM, g_dcb))) then
begin
MessageDlg('Erreur lors de la configuration du port : '+szCOM, mtError,[mbOk],0);
CloseHandle(g_hCOM);
OuvrirCOM:=False;
Exit;
end;
// on vide les tampons d''émission et de réception, mise à 1 DTR
PurgeComm(g_hCOM, PURGE_TXCLEAR or PURGE_RXCLEAR or PURGE_TXABORT or PURGE_RXABORT);
EscapeCommFunction(g_hCOM, SETDTR);
OuvrirCom:=True;
end;

function T_LiaisonRS232.LireCOM(Buffer: Pointer; nOctetsALire :Integer;var lpNumberOfBytesRead: Cardinal):Boolean;
begin
LireCOM:=ReadFile(g_hCOM,
Buffer,
nOctetsALire,
lpNumberOfBytesRead,
nil);
end;

function T_LiaisonRS232.EcrireCOM(Buffer: Pointer; nOctetsAEcrire: Integer;var lpNumberOfBytesWritten: Cardinal):Boolean;
begin
EcrireCOM:=WriteFile(g_hCOM,
Buffer,
nOctetsAEcrire,
lpNumberOfBytesWritten,
nil);
end;

function T_LiaisonRS232.CloseCOM:Boolean;
begin
CloseHandle(g_hCOM);
CloseCOM:=True;
end;
{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
f:boolean;
begin
f:=_LiaisonRS232.OuvrirCOM('0');
writeln(f);

end;

procedure TForm1.Button2Click(Sender: TObject);
var
c:boolean;

begin
c:=_liaisonrs232.CloseCOM;
writeln(c);
end;

end.
mais le probleme dans l'excution
je fait conecte avec le button 1
il me affiche le msg suivant

notification d'une exeption du debogueur :
le projet project.exe a provoque une classe d'exception EAccessviolation avec le message violationd'acces à l'adresse 00458061 dans le module project.exe ecriture de l'adresse 0000004 processus stopé utilisez pas àpas ou exécuter pour continuer
j'ai pas bien compri ce message la
je veu relier mon demodulateur numerique avec le PC
SPV aide moi
 

batchy

Grand Maître
y a un truc qui me chiffonne, pour ouvrir un port COM, faut pas utiliser le nom de fichier "COM0" au lieu de simplement "0" ?

ça n'a peut être rien a voir avec ton problème ...
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 079
Messages
6 716 711
Membres
1 586 247
Dernier membre
MrAzgarIII
Partager cette page
Haut