各路英雄,有人能帮我解决Delphi中的串口通讯问题(OnComm 事件)吗?(100分)

  • 主题发起人 主题发起人 老糖
  • 开始时间 开始时间

老糖

Unregistered / Unconfirmed
GUEST, unregistred user!
本人使用 win/system 下的 mscomm32.ocx ,通讯格式为 com1:9600,n,8,1,串口缓冲区有接收字符,但OnComm并未被触发,请各位助我,谢谢。
 
请将mscomm32控件的RThreshold属性改为1,这样缓冲区中一旦有数据,并且系统空闲,oncomm事件就会触发.
 
procedure TForm1.MSComm1Comm(Sender: TObject);
begin
showmessage('');
end;
谢谢,可我已证实串口有数据上来,但该事件却并未被触发。 :-(
 
证实串口有数据上来.怎么证实的?
 
只有将RThreshold属性设置为一个非零值时才能触发
OnComm事件,如:当RThreshold=5,则每当接收缓冲
区接收到5个字符时就会触发一次OnComm事件。
 
补充一下:
procedure TForm1.MSComm1Comm(Sender: TObject);
begin
case MsComm1.CommEvent of
2:
showmessage('dfd');
end;
end;
 
ydy is right
 
实在不行,用一个timer轮询input的值
 
我在Builder中用MSComm32也没有事件产生。
why?
我也用过轮询方式,收不到数据
 
能不能告诉我怎么把mscomm32.ocx给import进去的?
我试过import activex component,但是发现提示如下信息:
No license message found.....
好多人都说注册,怎么个注册法呢?
 
MSCOMM32是VB的控件,如果使用不好,看一下VB自代的例子。
注册不进,好象和机器有关,我用它有时也出此提示,但有时不出此提示,你可用VB的安装制作工具制作
一个只包含MSCOMM32的安装补丁盘。
 
很奇怪!
如果在机器上装一下visual basic,那这些控件就可以使用了。
是不是visual basci帮着把这些控件注册了?
再接着问一下:控件注册进delphi和系统是不是两码事?
我好模糊的说。
 
为何要用微软的东东,用VCL不是更好吗,我介绍一组优秀的通讯组件:
TURBO POWER Async Professional 3 ,在:
http://home.online.tj.cn/~kw/ 下载。
 
是visual basci帮着把这些控件注册了
 
首先,这样的active X控件需要安装,用visual studio安装时,只要选择
安装active X,就会安装微软的这些七七八八的控件,包括MSComm控件。之后,
在delphi/CB下用component/安装/active x即可顺利安装,安装后控件出现在
active x组中,为电话图标。

其次,如前面大虾所言,问题在RThreshold属性,其实,用串口通信可以大体分
为轮询和中断两种方式,用查询方式时,可以不停地检测(用定时器)MSComm1.InBufferCount属性,
当大于1(或更大)时,将MSComm1.Input取出即可。(注意,InputLen属性需设为0)

用中断方式,无需占有cpu过多时间,利用Oncomm事件实现,Oncomm触发事件有许多,
主要分为events和errors,常用的有comEvReive(2),表示收到了RThreshold个字符,
其它事件可以查询VB Active X控件使用大全,或msdn,该控件为VB原版,因此vb下其
帮助很全,例子也全面,一般的应用都能对付。
 
RThreshold设为1
 
啊,这么多串口通信高手!看来我得失业了
 
RThreshold设为1
rthreshold相当一个门槛只要接收到的内容多于这个值就会触发CommEvent
在这个事件中可收到信息
 
不可能,我用了几万年了!不会是PORT没打开吧?不妨将此段源码贴上我帮你看看。
关于注册问题看我前面的回答。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
666
import
I
后退
顶部