新闻 | 天津 | 民生 | 广电 | 津抖云 | 微视 | 读图 | 文娱 | 体育 | 图事 | 理论 | 志愿 | 专题 | 工作室 | 不良信息举报
教育 | 健康 | 财经 | 地产 | 天津通 | 旅游 | 时尚 | 购物 | 汽车 | IT | 亲子 | 会计 | 访谈 | 场景秀 | 发布系统

"津云"客户端
  您当前的位置 :北方网 > IT浪潮 > 北方学院 > 软件文库 > 其它 正文
关键词:

用DELPHI开发串口通信软件


http://www.enorth.com.cn  2001-02-21 00:00

  用Delphi开发串口通信软件一般有两种方法:一是利用Windows的通信API函数,另一种是采用Microsoft的MSComm控件。利用API编写串口通信程序较为复杂,需要掌握大量通信知识,其优点是实现的功能强大,应用面广泛,适合于编写较为复杂的低层次通信程序。而利用MSComm控件则相对较简单,该控件具有丰富的与串口通信密切相关的属性及事件,提供了对串口的各种操作。

  

  一、MSComm控件的主要属性及事件

  

  (1)CommPort:设置或返回串行端口号,缺省值1。

  

  (2)Setting:设置或返回串口通信参数,格式为“波特率,奇偶校验位,数据位,停止位”。例如:MSComm1.Setting:=′9600,n,8,1′

  

  (3)PortOpen:打开或关闭串行端口,格式为:MSComm1.PortOpen:={True|False}

  

  (4)InBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。

  

  (5)InBufferCount:返回接收缓冲区内等待读取的字节数,可通过设置该属性为0来清空接收缓冲区。

  

  (6)RThreshold:该属性为一阀值,它确定当接收缓冲区内的字节个数达到或超过该值后就产生代码为ComEvReceive的OnComm事件。

  

  (7)SThreshold:该属性为一阀值,它确定当发送缓冲区内的字节个数少于该值后就产生代码为ComEvSend的OnComm事件。

  

  (8)InputLen:设置或返回接收缓冲区内用Input读入的字节数,设置该属性为0表示Input读取整个缓冲区的内容。

  

  (9)Input:从接收缓冲区读取一串字符。

  

  (10)OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。

  

  (11)OutBufferCount:返回发送缓冲区内等待发送的字节数,可通过设置该属性为0来清空缓冲区。

  

  (12)OutPut:向发送缓冲区传送一串字符。

  

  如果在通信过程中发生错误或事件,就会触发OnComm事件,并由CommEvent属性代码反映错误类型,在通信程序的设计中可根据该属性值来执行不同的操作。CommEvent属性值及其含义如下:

  (1)ComEvSend:值为1,发送缓冲区的内容少于SThreshold指定的值。

  (2)ComEvReceive:值为2,接收缓冲区内字符数达到RThreshold指定的值。

  (3)ComEvFrame:值为1004,硬件检测到帧错误。

  (4)ComEvRxOver:值为1008,接收缓冲区溢出。

  (5)ComEvTxFull:值为1010,发送缓冲区溢出。

  (6)ComEvRxParity:值为1009,奇偶校验错误。

  (7)ComEvEOF:值为7,接收数据中出现文件尾(ASCII码为26)字符。

  

  二、程序样例

  

  在Delphi3.0中无法使用MSComm控件,笔者使用的是Delphi5.0。MSComm控件是VB中的OCX控件,首先需要将其添加到Delphi中,选择菜单“Component”→“Import ActiveX Control”,在“Import ActiveX”页内选择“Microsoft Comm Control”,点击“Install”安装,安装后在“ActiveX”组件板中出现MSComm图标,即可被使用。有一点要注意,在Object Inspector中MSComm控件的Input和Output属性是不可见的,但它们仍然存在,这两个属性的类型是OleVariant(Ole万能变量)。

  

  下面是一接收程序的样例(主要部分),大家可根据实际需要进行完善。

  在Form中放置一Memo控件用于显示接收的数据,Combobox1选择通信参数(Setting属性值),Combobox2选择串口(CommPort属性值),按Button1开始接收数据,按Button2停止接收。

  procedure TForm1.FormCreate(Sender: TObject);

  begin

  Mscomm1.InBufferCount :=0; // 清空接收缓冲区

  Mscomm1.InputLen :=0; // Input读取整个缓冲区内容

  Mscomm1.RThreshold :=1; // 每次接收到字符即产生OnComm事件

  end;

  procedure TForm1.Button1Click(Sender: TObject);

  begin

  Mscomm1.Settings :=ComboBox1.Text;

  if ComboBox2.Text =′com1′ then // 假设只考虑COM1和COM2两种情况

  Mscomm1.CommPort :=1

  else

  Mscomm1.CommPort :=2;

  Mscomm1.PortOpen :=true; // 打开串口

  Mscomm1.DTREnable :=true; // 数据终端准备好

  Mscomm1.RTSEnable :=true; // 请求发送

  end;

  procedure TForm1.Button2Click(Sender: TObject);

  begin

  Mscomm1.PortOpen :=false; // 关闭串口

   Mscomm1.DTREnable :=false;

  Mscomm1.RTSEnable :=false;

  end;

  procedure TForm1.MSComm1Comm(Sender: TObject);

  var

  recstr:Olevariant;

  begin

   if Mscomm1.CommEvent = 2 then

  begin

  recstr := Mscomm1.Input ;

  Memo1.text := Memo1.Text + recstr;

  end;

  end; (江西 万雪勇)

  

  

编辑 超级管理员 null
[进入IT论坛]
请您文明上网、理性发言并遵守相关规定,在注册后发表评论。
 北方网精彩内容推荐
无标题文档
天津民生资讯
天气交通 天津福彩 每月影讯 二手市场
空气质量 天津股票 广播节目 二手房源
失物招领 股市大擂台 天视节目 每日房价
热点专题
北京奥运圣火传递和谐之旅 迎奥运 讲文明 树新风
解放思想 干事创业 科学发展 同在一方热土 共建美好家园
2008天津夏季达沃斯论坛 《今日股市观察》视频
北方网网络相声频道在线收听 2008高考招生简章 复习冲刺
天津自然博物馆馆藏精品展示 2008年天津中考问题解答
带你了解08春夏服饰流行趋势 完美塑身 舞动肚皮舞(视频)
C-NCAP碰撞试验—雪佛兰景程 特殊时期善待自己 孕期检查
热点新闻排行 财经 体育 娱乐 汽车 IT 时尚 健康 教育

Copyright (C) 2000-2021 Enorth.com.cn, Tianjin ENORTH NETNEWS Co.,LTD.All rights reserved
本网站由天津北方网版权所有