串口通讯的问题,救命呀!!!(100分)

  • 主题发起人 主题发起人 power_source
  • 开始时间 开始时间
P

power_source

Unregistered / Unconfirmed
GUEST, unregistred user!
我最近做一个接收程控交换机电话通话记录的程序(直接读串口)
请大虾们赐教,本人没做过这样的程序,不知道从何下手,请指点,有做过的朋友提供demo更是不胜感激
 
用SPComm直接读串口数据了,不过先应当弄清楚数据格式。
 
关键是数据格式
其它的都好说
用控件可以
用API也可以的
 
先不说数据格式,我想知道SPComm 用哪个事件去实时监听串口呀 收到信息后如何回复信息呀 有没有例子
 
用这个SPComm控件,怎么实现实时监听串口呀
 
使用这个事件。
procedure Tfrmmain.Comm1ReceiveData(Sender:TObject; Buffer:Pointer;
BufferLength:Word);
var t:pchar;
t1:string;
begin
end;
 
用MSCOMM32也可,或者把邮箱告诉我.我发一个自已写的组件给你.把所有操作更简化了..比现在在DELPHI里所有用到的串口通信组件都简单.十分钟全部搞定发送接收.
 
sxwy 可否发一个组件给我 谢谢!
55423726@qq.com
 
Commsxw2005通信组件
//******************************************************************************
一:
A:
打开串口
OPENCOMMSTR
CommSXW2005.opencommstr('COM1','9600,N,8,1' ,FORM1.HANDLE,True)
说明:打开成功返回TRUE,失败FALSE
其中FORM1.HANDLE,是窗体接收线程ID,如不要返回,此处可为0.
在哪个窗体里接收数据就将哪个窗体的FORM1.HANDLE传入.
//*****************************************************************************
二:
发送数据:
//*****************************************************************************
A:
pubsenddata
COMMSXW2005.pubsenddata('1234567890',true);
说明:'1234567890'为要发送的数据,
TRUE为二进制发送.
那么这个'1234567890'对应的十六进制为:0X12,0X34,0X56,0X78,0X90

//******************************************************************************
B:
更参波特率发送并等等数据返回:
CommSXW2005.pubsenddata_changeset('1234567890',true,'9600,n,8,1',1000);
说明:
这里的'9600,N,8,1'可以更改为其它的波特率,不要关闭串口.可作第二次直接发送.
其中TRUE为文件或者十六进制发送,最后的1000为串口等待时间,也就是说将数据发送后在串口等待1000MS再返回.
等待1000MS后,如果收到数据,则在COMMSXW2005的getrevbin(十六进制接收),GETREVSTR(字符接收),这两个参数跟据你的设定再决定接收是十六进制还是字符串.有数据时,自动触发Procedure WMCommNoTify(Var Msg:Tmessage);Message WM_CommNoTify过程.

//*****************************************************************************
三:
文件的接收处理;
//******************************************************************************
A:自动触发接收处理(串口有数据接收时自动接收)
在窗体变量里加入监视函数:
private
Procedure WMCommNoTify(Var Msg:Tmessage);Message WM_CommNoTify;//接收定义

函数过程;
Procedure Tfrm_Main.WMCommNoTify(Var Msg:Tmessage); //接收的实现
begin
RevHex:=RevHex+Commsxw2005.getrevbin ;//这里的REVHEX为窗体级变量,你可以在止接收所有的串口数据,然后进行处理
//如果是字符串接收就要REVSTR:=REVSTR+COMMSXW2005.GETREVSTR
end;
//******************************************************************************
B:
查询式接收处理(延时等待后返回,再查询串口接收缓冲区是否有数据)
对于接收过程,也可以这样用,这种用法一般用在仪表的问答式通信中比较多.
CommSXW2005.pubsenddata_changeset('FF0B)',true,'9600,M,8,1',0);
CommSXW2005.pubsenddata_changeset('FF12',true,'9600,S,8,1',1000);
IF Commsxw2005.getrevbin<>'' then//判断接收数据
begin
//在等待1000MS后,接收数据不为空的处理....
end;
以上是将地址'FF0B'以波特率9600,M,8,1发出(不延时),再将数据&quot;FF12&quot;以波特率:9600,S,8,1发出(加延时等待过程1000MS).最后再判断串口接收数据是否为空.
不为空就进行处理.这种方式并不要在主窗体里加接收数据的消息处理.可以以过
程的方式来完全控制串口的收发.
//******************************************************************************
四:
关闭串口:
COMMSXW2005.CLOSECOM;
说明:直接调用既可
 
to:冰力不足,已经发了.请查收.
 
to sxwy朋友,给我也发一份吧,先谢谢了。
panchenglinxm@126.com
 
强烈建议楼主访问
http://zhaokaien.17757.com
你会找到很多你需要的串口通信的资料
 
TO:panchenglinxm@126.com,已经发了.
 
串口就是一个波特率设置问题
 
还没搞定吗
串口问题不是很复杂的
 
你惨了。。。
 
sxwy 兄,这里来一分
liuguilg078912@163.com
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=23543
 
你也可以参考串口通讯助手的DELPHI源代码。在2CCC上有。
 
弄个CPORT3.0吧,简单易用,我做检验仪器数据采集都用这个。MSCOMM32是OCX,打包发行时要弄在一起发行,CPORT是VCL,直接编译到EXE里面,方便很多,最主要的是CPORT支持多线程[:)]
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
875
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部