提示错误:port already open

gooddancer 2007-04-19 05:29:02
我用的是mscomm,进入发送块的时候会报错port already open,
function Tmainfrm.SendFrameBuffer(Sendframe:Framebyte):String;
var
k: integer;
ReceFrame: String;
starttime, endtime: Longint;
ssss: array of byte;
TempStr, commstr: string;

begin
MSComm1.CommPort := 1;
MSComm1.Settings :='19200,n,8,1';
MSComm1.InBufferCount:=0 ;
ReceFrame:='';
MSComm1.OutBufferCount:=0;
if MSComm1.PortOpen =false then
begin
MSComm1.PortOpen:=true ; //打开串口,等待接收数据
end;
mscomm1.Output:=Sendframe;
starttime:=gettickcount(); //时间控制起始时间
while true do //等待接收数据
begin
if mscomm1.InBufferCount>0 then
begin
starttime:=gettickcount();
break;
end;
if gettickcount()-starttime>10000 then //判断是否大于10000毫
begin
showmessage('通讯超时!请判断是否连接!'); //通讯超时!请判断是否连接!
break ;
end;
Sleep (10);
application.ProcessMessages ;
end;

while true do //等待接收数据
begin
if gettickcount()-starttime>300 then //字节间延时300毫秒
begin
if MSComm1.PortOpen=true then
begin
MSComm1.PortOpen:=false; //关闭串口
end;
result:=ReceFrame;
break;
end;
if mscomm1.InBufferCount>0 then
begin
setlength(ssss,mscomm1.InBufferCount);
ssss:=mscomm1.Input; //接收数据
if tempstr='' then
begin
tempstr:=' ';
end;
k:=0;
while k<length(ssss) do
begin
commstr:=inttohex(ssss[k],2);
ReceFrame:=ReceFrame+commstr;
k:=k+1;
end;
starttime:=gettickcount();
end ;
Sleep(10);
application.ProcessMessages ;
end;
end;
这个模块放在另外程序里都不会有问题
谁遇到过这样的错误?
...全文
733 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
IDWB 2007-04-22
  • 打赏
  • 举报
回复
真麻烦!只是接收和发送判断是否超时为什么要写那么麻烦的代码?如果用spcomm的话,设置一个全局时间变量,在发送时设置时间,接收时判断时间差在做相应处理,应该不难吧!
gooddancer 2007-04-22
  • 打赏
  • 举报
回复
顶,在线等
gooddancer 2007-04-22
  • 打赏
  • 举报
回复
现在我写了一个测试程序,
准备了所有数据是$01
和协议打包成一个数据包了
接着是上面的代码发送,
报错说是通讯超时,不知道是什么原因,请高手指导指导
雪狼__ 2007-04-22
  • 打赏
  • 举报
回复
发送和接收都是一个串口,打开一次就可以了。接收完再释放也不迟
按你的代码是:打开->发送->关闭->打开->接收->关闭;烦不烦?
直接:打开->发送->接收->关闭;
gooddancer 2007-04-20
  • 打赏
  • 举报
回复
UP一下,CSDN的高手都哪里去了,睡觉了?
gooddancer 2007-04-20
  • 打赏
  • 举报
回复
重启过了的,
占用串口也不可能,我刚刚还用这个串口发过东西,也不是串口的问题
chenzhuo 2007-04-20
  • 打赏
  • 举报
回复
重启一下,如果还是不行就是你的代码有问题!
HsWong 2007-04-20
  • 打赏
  • 举报
回复
com1已经被打开占用,换一个串口

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧