串口通信----------高分征答 快来看看!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (100分)

  • 主题发起人 主题发起人 sophie
  • 开始时间 开始时间
S

sophie

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在没有连接串口的情况下,如何模拟串行通信.
 
请问你用什么控件?
 
这个程序是没有控件的直接用API
源码如下
procedure TForm1.btnSendClick(Sender: TObject);
var
Temp:string;
lrc:LongWord;
begin
if (hComm=0) then exit;
Temp:=msend.Text ;
WriteFile(hComm,Pointer(Temp)^,Length(Temp), lrc, nil); //送出数据
end;

procedure TForm1.btnOpenPortClick(Sender: TObject);

begin
//若通信端口已打开,则不需要再打开
if (hComm<>0) then begin
ShowMessage('通信端口已打开!不需再开!');
exit;
end;
OpenComm;
end;

//以下是打开通信端口的程序
procedure TForm1.OpenComm;
var
cc:TCOMMCONFIG;
Temp:string;
begin
Temp:='COM'+inttostr(rdcom.ItemIndex+1); //选择所要打开的COM
hComm:=CreateFile(PChar(Temp), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING, 0, 0); //打开COM
if (hComm = INVALID_HANDLE_VALUE) then begin //如果COM 未打开
MessageBox (0, '打开通信端口错误!!','',MB_OK);
exit;
end;

GetCommState(hComm,cc.dcb); // 得知目前COM 的状态
cc.dcb.BaudRate:=CBR_9600; // 设置波特率为9600
cc.dcb.ByteSize:=8; // 字节为 8 bit
cc.dcb.Parity:=NOPARITY; // Parity 为 None
cc.dcb.StopBits:=ONESTOPBIT; // 1 个Stop bit

if not SetCommState(hComm, cc.dcb) then begin // 设置COM 的状态
MessageBox (0, '通信端口设置错误!!!','',MB_OK);
CloseHandle(hComm);
exit;
end;
end;

procedure TForm1.btnEndClick(Sender: TObject);
begin
CloseHandle(hComm);//关闭通信端口
close;//结束程序
end;


//定时器事件
procedure TForm1.Timer1Timer(Sender: TObject);
var
Temp : string;
inbuff: array[0..2047] of Char;
nBytesRead, dwError:LongWORD ;
cs:TCOMSTAT;
begin
ClearCommError(hComm,dwError,@CS); //取得状态
if cs.cbInQue =0 then exit;
if cs.cbInQue > sizeof(inbuff) then begin
PurgeComm(hComm, PURGE_RXCLEAR); // 清除COM 数据?
exit;
end;
ReadFile(hComm, inbuff,cs.cbInQue,nBytesRead,nil); // 接收COM 的数据
Temp:=Copy(inbuff,1,cs.cbInQue);
mReceive.Text :=mReceive.Text + Temp; // 将数据显示于Memo1 上 ?
mReceive.SetFocus ;
mReceive.SelStart :=Length(mReceive.Text);
mReceive.SelLength :=0;//将Memo的显示位置移到最下端
end;
//以下是处理按键动作
procedure TForm1.mSendKeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then btnSendClick(Sender);
end;

end.
 
hComm是全局变量吗?
什么类型?
如果实在不行你可以用MsComm控件。
 
是全局变量
请你指教一定高分重谢
 
这个控件我也是刚刚下载下来的,
我目前还不会使用。
 
那其它方法你知道吗?请指教
 
目前还不知道有其它什么好的方法,
 
我不懂你的意思。
不过我也了一个最好的串口调试程序
vip.6to23.com/cooldba
 
刚刚看到你在我笔记里的留言,不知道你留给谁的。
我来这里招呼一声,我对串口通信没有实际接触,水平一定不如你。
你下载一个离线数据库,检索一下串口相关的帖子,一定可以得到启示的。
 
弄个插头,把RXD和TXD短接,即可模拟实际情况进行收发。
 
多人接受答案了。
 
后退
顶部