请问MSCOMM控件的使用。。。。。

dadado 2002-05-15 05:42:33
任何包括这个控件的使用方面的资料都可以。我都需要。
谢谢。请发到我的信箱。
...全文
138 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dadado 2002-05-15
  • 打赏
  • 举报
回复
moodboy zzzai
或者其他能否对spcomm说清楚点呢?
比如说说它的属性和事件。其他人也可以
谢谢。(前些天,刚好有人在批评我这样的人,我无话可说。但由于时间紧迫
dedpi没学过。所以请各位帮忙了。谢谢。)
dadado 2002-05-15
  • 打赏
  • 举报
回复
谢谢各位。
以后分数肯定给。
zzzai 2002-05-15
  • 打赏
  • 举报
回复
mscomm 是一个单线城,最好用 spcomm 空件,是多现成
DeathCat 2002-05-15
  • 打赏
  • 举报
回复
说具体问题吧。给我发消息或写信都可以。

laze_cat@163.com
moodboy 2002-05-15
  • 打赏
  • 举报
回复
一、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)字符。
  二、程序样例
    下面是一接收程序的样例(主要部分),大家可根据实际需要进行完善。
  在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;
Billy_Chen28 2002-05-15
  • 打赏
  • 举报
回复
在Windows95下用Delphi开发微机与PLC的串行通信程序

鲁昌华 徐 稳

  摘 要:在Windows95下利用Delphi实现微机与PLC的串行通信的 几种方法。
  关键词:串行通信 Delphi 动态链接库DLL 构件 句柄 设备控制 块DCB 可编程控制器 PLC

  在自动测量和控制系统中,常常需要在上位机(微机)和PLC(可编程控制器) 之间进行数据交 换和发送控制信号,串行通信是其主要手段,我们在开发一套自动测试系统时就是采用串行 通信的方法,即由上位机向PLC发送命令,控制其进行各种测试线路的切换。

1 通信协议
  在本系统中微机和PLC采用一对一通信连接,上位机作主局,PLC作子局。通信开始时由上位 机向PLC发出呼叫,PLC收到上位机的呼叫后应答,并返回应答信号,然后上位机发首标,PL C应答,接着上位机发数据块,PLC应答,数据全部发完后上位机发一结束标志,至此上位机 与PLC的通信结束。
  上述通信协议可用图1描述。




  该协议使用的传输控制字符有:
  ENQ(查询):在需要通信时作为发送方的请求。
  ACK(认可):接收方给发送方的应答,表示正确接收信息包。
  SOH(首标):表示要传送的是首标。
  ETB(数据结束):标志数据块的结束。
  STX(文本开始):标志数据块的开始。
  ETX(文本结束):标志文本块的结束。
  EOT(结束):表示传送结束。
  LRC:纵向冗余校验码,即对前面所有的传输码进行异或计算。
2 Windows95下用Delphi实现串行通信
  在Windows95环境下用Delphi3.0实现串行通信有3种方法:①使用VB的通信构件MSComm ;② 调用Windows95下的API函数来完成通信;③熟悉C/C++或其它语言的用户可以将自己的程序 编译链接为DLL(动态链接库),这样Delphi就可以调用DLL里的函数来通信。下面就这3种方 法分别加以讨论。
2.1 使用VB通信构件
  在使用VB构件之前,首先要将VB构件文件MSComm32.OCX安装到Delphi的动态构件库中。打开 主菜单Component选择Import ActiveX Control...项,在弹出的对话框里选中Microsoft Co mm Control5.0(安装VB5.0后必有此项),再单击Install按钮。此时Delphi载入VB构件文件并重新编译DCL(Delphi Component Library)。编译完成后,MSComm的小按钮出现在ActiveX 页中,这时程序就可以使用此 构件了。应该注意的是,安装前要确保VB通信构件的控制文件MSComm32.OCX(在VB4.0以上版 本中)在编译DCL之前已在\Windows\System下。接着向窗体中 添加1个MSComm构件并进行串行口的初始化,初始化子例程序如下:

Procedure TForm1.FormCreate(Sender:TObject);
begin
MSComm1.CommPort:=2; {使用COM2口为通信口}
MSComm1.InBufferSize:=1024; {设定接收队列长度为
1KB}
MSComm1.OutBufferSize:=1024; {设定发送队列长度为
1KB}
MSComm1.Settings:=‘9600,N,8,1';{波特率9600b/s,无校验,8个数据位,1 个停止位}
MSComm1.InputLen:=0; {读取整个接收缓冲区内容}
MSComm1.InputBufferCount:=0; {清除接收缓冲区}
MSComm1.PortOpen=:True; {打开串行口}
End;
  用Input属性从接收对列读入字符串:ReadBuffer:=MSComm1.Input;用Output属性发送字 符串:MSComm1.Output:=WriteBuffer;然后根据上述通信协议,即可快速编制出通信软件 。
2.2 调用Windows95下的API函数
  Windows95对通信功能的支持非常强,它增加了一系列用于通信的API函数供用户调用。同样 ,要进行串行通信,也需要先对串口进行初始化。Windows95把串行口作为设备文件,对串 口操作就是对文件操作。因此,必须先为串口分配1个文件句柄,以后对串口操作都将通过 这个文件句柄来完成。初始化过程如下:
  (1)调用CreateFile函数为串口分配1个文件句柄。
  Var HComm:THandle;
  HComm:=CreateFile(‘COM2',GENERICREAD or GENERICWRITE ,0,@NULL,OPENEXISTING,FILEFLAGOVERLAPPED,0);
  如果对串行口1操作,用字符串COM1代替COM2即可。
  (2)调用SetupComm函数设置串行口的输入和输出缓存区。
  SetupComm(HComm,1024,1024);
  (3)填充1个DCB(设备控制块)结构来设置通信参数。通过调用GetCommState函数 获得当前系统的DCB结构,按需要赋值给DCB的成员,如波特率、奇偶校验、数据位、停止位 等,最后将创建后的DCB结构作为参数传给SetCommState函数就可以初始化串口了。

  Var DCB:TDCB;
  GetCommState(HComm,DCB);
  BuildCommDCB(‘9600,N,8,1',DCB);
  SetCommState(HComm,DCB);
  (4)用PurgeComm函数来清除接收缓存区的内容。
  PurgeComm(HComm,PurgeRXCLEAR);

  (5)串行口的初始化完成后,接下来的工作就是根据通信协议发送和接收串行口上的数据。R eadFile函数用于接收数据,WriteFile函数用于发送数据。

  Var
  OverLapped:TOverLapped;
  DataIn:Byte;
  DataOut:Byte;
  BufferSize:Integer;
  COMSTAT cs;
  ReadFile(HComm,DataIn,cs.cbInQue,BufferSize,@OverLapped);
   {从串行口读输入缓存的字节,存入DataIn变量中}
  WriteFile(HComm,DataOut,cs.cbOutQue,BufferSize,@OverLapped);
   {向串行口写输出缓存的字节,要写的数据存放在DataOut}
  按照上述步骤,再根据前面的通信协议,即可完成串行通信。
2.3 调用其它语言编写的DLL
  由于这里所说的其它语言包含面很广,可以是开发人员所熟悉的编程语言(只要其支持DLL即 可),如C和C++等,所以如何编写DLL就不再详述了。将编写好的DLL进行编译,然后把编译 通过后的DLL放在\Windows\System子目录下,在Delphi下打开1个单元文件,将DLL里的所 有函数在单元文件中声明,格式如下:

  unit UnitName;
  interface
  procedure p1(param1:type1;param2:type2;...);stdcall;
  external‘DLLName';
  …
  implementation
  end

  其中UnitName为单元文件名,p1为调用过程名,param1、param2为参数名,type1、type2为 参数类型名,DLLName为DLL名。串行通信时,只要将此单元包含进编程单元就行了。

3 结 论
  对使用Delphi开发Windows95下与PLC进行串行通信程序的3种方法进行比较可以得出这样的 结论:
  (1)使用VB通信构件不但能够实现API的所有功能,而且程序简单明了。
  (2)调用Windows95的API通信函数,可以设计和开发出各种通信软件,但编程复杂。
  (3)第3种方法适合那些熟悉其它编程语言的开发人员。
  以上所有程序均在Windows95中文版下使用Delphi3.0调试通过。

作者单位:合肥工业大学计算机系(230061)

参考文献

 1 李汉涛,杨长春.Windows下三线制串行通信的实现方法.电脑技 术,1998;(7)
 2 王仲文译.精通串行通信.北京:电子工业出版社
taidy 2002-05-15
  • 打赏
  • 举报
回复
msdn有mscomm的详细说明,你可以参照



Properties Description
CommPort Sets and returns the communications port number.
Settings Sets and returns the baud rate, parity, data bits, and stop bits as a string.
PortOpen Sets and returns the state of a communications port. Also opens and closes a port.
Input Returns and removes characters from the receive buffer.
Output Writes a string of characters to the transmit buffer.

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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