happywalid
Nouveau membre
bonjour
j'ai programé une liaison RS232 avec le langage delphi et voila mon programme
je fait conecte avec le button 1
il me affiche le msg suivant
je veu relier mon demodulateur numerique avec le PC
SPV aide moi
j'ai programé une liaison RS232 avec le langage delphi et voila mon programme
mais le probleme dans l'excutionunit 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.
je fait conecte avec le button 1
il me affiche le msg suivant
j'ai pas bien compri ce message lanotification 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
je veu relier mon demodulateur numerique avec le PC
SPV aide moi