⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mscomm的完整应用例子.txt

📁 介绍组件MSCOMM的用法及详细例子.希望对大家有用.谢谢!
💻 TXT
字号:
用MSCOMM涉及到OleVariant和Variant变量,而结构TVarData直接映射了这两者,OleVariant
与Variant的区别仅仅在于前者只支持OLE类型变量.TVarData结构的定义在System单元内.
以下是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)字符。

type
  TByteArray = array[0..99]of Byte;
  PByteArray = ^TByteArray;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //串口初始化
  MSComm.CommPort := 1;         //COM1
  MSComm.Setting:= '9600,n,8,1';//波特率9600,数据位8位,无奇偶校验,停止位1位
  MSComm.InBufferCount := 0;  //清空接收缓冲区
 MSComm.InputLen := 0;  //读取整个缓冲区内容
  MSComm.InBufferSize := 1024;  //接收缓冲区1024个字节
 MSComm.RThreshold := 100;  //每次接收到100个字节即产生OnComm事件
  MSComm.OutBufferCount := 0;  //清空发送缓冲区
  MSComm.OutBufferSize := 512;  //发送缓冲区512个字节
 MSComm.SThreshold := 1;  //每次发送缓冲区字节数少于1个即产生OnComm事件
  if not MSComm.PortOpen then  //打开串口
    MSComm.PortOpen := True;
end;

procedure TForm1.MSCommComm(Sender: TObject);
var 
  ovRec: OleVariant;    //MSCOMM接收的数据
  baVal: TByteArray;    //接收数组,这里假设每次接收100个数据
  s: PByteArray;
  i: Integer;
begin
  if MSComm.ComEvent=ComEvReceive then
  begin
    ovRec := MSComm.Input;
    s := TVarData(ovRec).VPointer;
    for i:=0 to 99 do
      baVal[i] := s^[i];
  end;
end;

procedure TForm1.Transmit(baVal: TByteArray);  //发送数据主程序
var
  ovSend: OleVariant;
begin
  TVarData(ovSend).VPointer := @baVal;
  if not MSComm.PortOpen then  //打开串口
    MSComm.PortOpen := True;
  MSComm.Output := ovSend;
end;  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -