mscomm的用法(200分)

  • 主题发起人 主题发起人 kisse
  • 开始时间 开始时间
K

kisse

Unregistered / Unconfirmed
GUEST, unregistred user!
mscomm的用法
 
我建议你用ComPort Library version 2.62。
我觉得它比mscomm好!
 
我已经E-MAIL给你了。给我分!!!!
 
多人接受答案了。
 
我也不懂。
奇怪?
 
Mscomm是不错,我用它同步控制8个Modem,效果不错。
但好像振铃事件的检测有问题,检不到
 
多人接受答案了。
 
 一、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;
 
void __fastcall TForm1::MSComComm(TObject *Sender)
{
AnsiString a;
Byte *buf;
OleVariant v;
buf = new Byte[1024];
switch(MSCom->CommEvent)
{
case comEvReceive:
MSCom->RThreshold=0;
buf=MSCom->Input;
}
之前已将MSCom->InputMode设置为1
这段程序编译时没有问题,可是运行时就会了错,不知道是什么原因,还望高手不吝赐教!!!
 
后退
顶部