急!!!串口问题(在线等待)(100分)

  • 主题发起人 主题发起人 李艾
  • 开始时间 开始时间

李艾

Unregistered / Unconfirmed
GUEST, unregistred user!
谁能给我一个PCOMM的通迅程序!要能自动接收
E-MAIN:LIAILMK@163.COM
 
SPCOMM,发给你拉!
 
SPCOMM控件有Data Bits、Parity、 Stop Bits 等配置,支持 Read/Write 时序控制
(Timing control)、 ReadIntervalTimeout、 WriteIntervalTimout 等 ,支持 DTR/DSR,
RTS/CTS 硬件流程控置及 Xon/Xoff 软件流程控置,是目前比较完善的控件。 以下是一个
用RS-232进行数据接收、显示的例子。必须将RS232的通信参数设置好才能正确接收数据。
(Data Bits,Parity,Stop Bits,COM口参数)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, SPComm;
type
TForm1 = class(TForm)
Comm1: TComm;
Memo1: TMemo;
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;

BufferLength: Word);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
s: string;
begin
SetLength(S, BufferLength); //接收RS232的数据并显示Memo1上。
Move(Buffer^, PChar(S)^, BufferLength);
Memo1.Lines.Add(S);
Memo1.Invalidate;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Comm1.startcomm;//创建窗体时,将comm1控件打开。
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;//关闭窗体时,将comm1控件关闭。
end;
end.
 
我也给你发了一个,是用api做的,你看看
 
SPCOMM不行因为我的下位机要用到128个
 
那你把我的邮件删掉就行了![:D][:D][:D]
 
takashiki谢谢你!
 
to:APP200
好象你的程序不能运行!
 
你要告诉我怎么不能运行才可以呀,在我这里是可以的,我用的是delphi6
 

procedure TF_COMTest.SendStr;
var
i: Integer;
Strs : array [1..30] of Char;
begin
Edit1.Text:=StrSend;
StrRecv:='';
TimeOut:=0;
for i:=1 to Length(StrSend) do Strs:=StrSend;
sio_write(Port,@Strs,Length(StrSend));
sio_write(Port,@Strs,7);
CheckRecv;
end;

function TF_COMTest.ReceiveStr:String;
var
ret, i:Integer;
Datas : array [1..22] of Char;
begin
Result:='';
ret:=sio_iqueue(Port);
if ret>0 then
begin
if ret>20 then ret:=20;
sio_read(Port,@Datas,ret);
for i:=1 to ret do
begin
Result:=Result+Datas;
end;
end;
end;

procedure TF_COMTest.Open;
var
ret:Integer;
begin
Port:=RadioGroup1.ItemIndex+1;

ret := sio_open(Port);
if ret <> SIO_OK then
begin
MessageDlg('通信端口 COM'+IntToStr(Port)+'不存在或在使用中',mtWarning,[mbOK],0);
Exit;
end;
sio_ioctl(Port,B9600,P_EVEN or BIT_7 or STOP_1);
SendRead;
end;

procedure TF_COMTest.FormCreate(Sender: TObject);
begin
ShowOk:=False;
Port:=RadioGroup1.ItemIndex+1;
ScanTimes:=0;
TimeOut:=0;
ComErr:=False;
StrSend:='';
StrRecv:='';

StartID:=2;
EndID:=2;
MemAddr:=0;
ID:=StartID-1;
end;

procedure TF_COMTest.FormShow(Sender: TObject);
begin
if ShowOk=True then Exit;
ShowOk:=True;
Open;
ScanTimer(Sender);

end;

procedure TF_COMTest.FormClose(Sender: TObject; var Action: TCloseAction);
begin
sio_close(Port);

end;

procedure TF_COMTest.CheckRecv;
var
i, LenSend, LenRecv:Integer;
begin
TimeOut:=TimeOut+1;
StrRecv:=StrRecv+ReceiveStr;
Edit2.Text:=Copy(StrRecv,1,16);
LenSend:=Length(StrSend);
LenRecv:=Length(StrRecv);

if (LenRecv<12) then Exit;
i:=1;
while i<LenRecv do
begin
if Copy(StrRecv,i,LenSend)=StrSend then
begin
StrRecv:=Copy(StrRecv,i+LenSend,LenRecv-LenSend-i+1);
LenRecv:=Length(StrRecv);
i:=LenRecv+1;
end
else
begin
i:=i+1;
end;
end;
end;

procedure TF_COMTest.SendRead;
begin
ID:=ID+1;
if ID>EndID then ID:=StartID;
StrSend:=')'+CHR(13); //')'
SendStr;

end;

procedure TF_COMTest.scanTimer(Sender: TObject);
begin
if ID<StartID then ID:=StartID;
if StrSend<>'' then CheckRecv;
if TimeOut>ScanTimes then
begin
StrSend:='';
ComErr:=True;
end;
if StrSend='' then SendRead;

end;
 
接受答案了.
 

Similar threads

后退
顶部