主题:spcom的问题
xp系统,dephi5,在运行以下spcom的例程序时,出现‘acess violation’,其错误指向writecommdata(read address of 0028);请赐教;代码如下:
unit PAS_SCI;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ComCtrls, ExtCtrls, Menus, SPComm;
type
TFComm = class(TForm)
BitBtn1: TBitBtn;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
Label1: TLabel;
Memo1: TMemo;
StatusBar1: TStatusBar;
DateTimePicker1: TDateTimePicker;
MainMenu1: TMainMenu;
Stopbit1: TMenuItem;
N11: TMenuItem;
N151: TMenuItem;
N21: TMenuItem;
None1: TMenuItem;
Parity1: TMenuItem;
Odd1: TMenuItem;
Even1: TMenuItem;
None2: TMenuItem;
Databit1: TMenuItem;
N61: TMenuItem;
N71: TMenuItem;
N81: TMenuItem;
Handshaking1: TMenuItem;
Have1: TMenuItem;
None3: TMenuItem;
Baudrate1: TMenuItem;
N3001: TMenuItem;
N6001: TMenuItem;
N12001: TMenuItem;
N24001: TMenuItem;
N48001: TMenuItem;
N96001: TMenuItem;
N192001: TMenuItem;
Com1: TComm;
N1101: TMenuItem;
procedure SpeedButton1Click(Sender: TObject);
procedure N12001Click(Sender: TObject);
//procedure Formshow(Sender: TObject) ;
private
{ Private declarations }
public
{ Public declarations }
end;
var
FComm: TFComm;
receive_data, transmit_data : char;
FCOMM1 : TCOMM;
viewstring : string;
i : integer;
rbuf,sbuf: array[1..16] of byte;
procedure Formshow() ;
implementation
{$R *.DFM}
procedure senddata;
var
i: integer;
commflg:boolean;
begin
viewstring :=' ';
commflg := true;
for i:=1 to 6 do
begin
if NOT FComm1.writecommdata(@sbuf[i],1) then
begin
commflg := false;
break;
end;
sleep(2);//delay in transmitting data
viewstring:= viewstring + IntToHex(sbuf[i],2)+' ';
end;
viewstring := 'send' + viewstring;
FComm.memo1.lines. add(viewstring);
FComm.memo1.lines.add(' ');
if not commflg then
MessageDlg('sending failure !',mterror ,[mbyes],0);
end;
procedure TFComm.SpeedButton1Click(Sender: TObject);
var
times :integer;
begin
sbuf[1] := byte($f0);
sbuf[2] := byte($01);
sbuf[3] := byte($ff);
sbuf[4] := byte($ff);
sbuf[5] := byte($01);
sbuf[6] := byte($f0);
senddata;
for times :=0 to 1000
do
MEMO1.Text := MEMO1.Text+' '+ InttoStr(times);
end;
procedure TFComm.N12001Click(Sender: TObject);
begin
//Form1.MainMenu1.N12001.caption := '1200';
end;
procedure Formshow();
begin
FComm1.StartComm;
end;
procedure FormClose(Sender:Tobject; var action: TCloseAction);
begin
FComm1.StopComm;
end;
end.
unit PAS_SCI;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ComCtrls, ExtCtrls, Menus, SPComm;
type
TFComm = class(TForm)
BitBtn1: TBitBtn;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
Label1: TLabel;
Memo1: TMemo;
StatusBar1: TStatusBar;
DateTimePicker1: TDateTimePicker;
MainMenu1: TMainMenu;
Stopbit1: TMenuItem;
N11: TMenuItem;
N151: TMenuItem;
N21: TMenuItem;
None1: TMenuItem;
Parity1: TMenuItem;
Odd1: TMenuItem;
Even1: TMenuItem;
None2: TMenuItem;
Databit1: TMenuItem;
N61: TMenuItem;
N71: TMenuItem;
N81: TMenuItem;
Handshaking1: TMenuItem;
Have1: TMenuItem;
None3: TMenuItem;
Baudrate1: TMenuItem;
N3001: TMenuItem;
N6001: TMenuItem;
N12001: TMenuItem;
N24001: TMenuItem;
N48001: TMenuItem;
N96001: TMenuItem;
N192001: TMenuItem;
Com1: TComm;
N1101: TMenuItem;
procedure SpeedButton1Click(Sender: TObject);
procedure N12001Click(Sender: TObject);
//procedure Formshow(Sender: TObject) ;
private
{ Private declarations }
public
{ Public declarations }
end;
var
FComm: TFComm;
receive_data, transmit_data : char;
FCOMM1 : TCOMM;
viewstring : string;
i : integer;
rbuf,sbuf: array[1..16] of byte;
procedure Formshow() ;
implementation
{$R *.DFM}
procedure senddata;
var
i: integer;
commflg:boolean;
begin
viewstring :=' ';
commflg := true;
for i:=1 to 6 do
begin
if NOT FComm1.writecommdata(@sbuf[i],1) then
begin
commflg := false;
break;
end;
sleep(2);//delay in transmitting data
viewstring:= viewstring + IntToHex(sbuf[i],2)+' ';
end;
viewstring := 'send' + viewstring;
FComm.memo1.lines. add(viewstring);
FComm.memo1.lines.add(' ');
if not commflg then
MessageDlg('sending failure !',mterror ,[mbyes],0);
end;
procedure TFComm.SpeedButton1Click(Sender: TObject);
var
times :integer;
begin
sbuf[1] := byte($f0);
sbuf[2] := byte($01);
sbuf[3] := byte($ff);
sbuf[4] := byte($ff);
sbuf[5] := byte($01);
sbuf[6] := byte($f0);
senddata;
for times :=0 to 1000
do
MEMO1.Text := MEMO1.Text+' '+ InttoStr(times);
end;
procedure TFComm.N12001Click(Sender: TObject);
begin
//Form1.MainMenu1.N12001.caption := '1200';
end;
procedure Formshow();
begin
FComm1.StartComm;
end;
procedure FormClose(Sender:Tobject; var action: TCloseAction);
begin
FComm1.StopComm;
end;
end.