MSCOMM的使用(100分)

  • 主题发起人 主题发起人 mylovegirl
  • 开始时间 开始时间
M

mylovegirl

Unregistered / Unconfirmed
GUEST, unregistred user!
现在正在做一个和单片机通讯的软件,想使用MSCOMM,但是如何才能使MSSCOM为COMEVSEND事件
如有例成不胜感激
 
MSCOMM只有一个事件吧?就是ONCOMMON事件,当接收到数据之后就产生这个事件。
 
MSDN里面应该有帮助
 
强烈建议使用Apro控件。
 
?
设置完通讯协议: 9600,8,1(或者其他)
(Handshaking)握手协议:0-
COMPORT:1
调用:激活COM口
try
Mscomm1.portopen:=true;
except
................
end


procedure TForm1.MSComm1Comm(Sender: TObject);
var s:string;
begin
s:=Mscomm1.Input;
end;
就可以接收字符了。

单片机应该可以发送一些数据到COM1的时候,就激活了MSCOMM的 上面的那个时间.


 
要是既要接受又要发送呢
 
procedure TForm1.MSComm1Comm(Sender: TObject);
begin
case mscomm1.comevent of
comEvSend://发送触发
comEvReceive://接收触发
...
end;
 
但是如过要发送MEMO的内容如何才能
case mscomm1.comevent of
comEvSend://发送触发
假设有个发送的按钮,应该如何写代码
 
banlance.MSComm1.CommPort = I_WeightComPort
banlance.MSComm1.Settings = "1200,o,7,1"
'串口通讯设置(波特率:1200
校验方式:o
数据位:7位
停止位: 1位)
banlance.MSComm1.InputLen = 0
'Tell the control to read entire buffer when Input is used.

banlance.MSComm1.PortOpen = True
'Open the port.
banlance.MSComm1.Output = Chr$(27) + "P" + Chr$(13) + Chr$(10)
'Send the attention command to the modem.
 
发送是你自己用代码控制,你在发送的时候加一段发送时触发的代码不行吗?
 
应该加什么代码,我不知道
 
我可以完全为你解决,不过要给钱[:D][:D]
 
都不知道你要什么!!!!
还要我去猜?
 
谁能给个例程
sdenf@sina.com
 
用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 := s^;
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;
 
多人接受答案了。
 
后退
顶部