mscomm控件使用方法
更新时间:2024-02-28 08:34:01 阅读量: 综合文库 文档下载
mscomm
献花(0)
http://www.cnblogs.com/aaa2520/articles/1868824.html mscomm默认rthresholdsthreshold默认0 不激活事件 Delphi MSComm实时串口通讯
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)字符。 4.应用实例
下面通过一个实例介绍Delphi利用MSComm通信控件,开发PC机通过串口对某试验厂路面荷载进行实时数据采集的编程技术。给出的程序代码具有通用性,并有详细的注释,可以直接或稍加改动就可用于其它数据采集或者实时控制程序中。
该项目上位机采用Delphi编写,数据采集仪采用研华ADAM5510作为下位机采集实时压力数据,采用AscII方式传送数据,数据传输速率为
9600bps,1位开始位,8位数据位,1位停止位,无奇偶校验位。数据通信的具体格式为:。 程序用到的全局变量为:
ReceiveStr :String; //接受Ascii码字符数据字符串
F1,F2,F3,F4,Fz,Fa:Double; //四路压力值数据,总压力值,平均压力值 程序中绘制的压力曲线采用TChart组件,变量定义为: FChart: TChart; 1).串口初始化 withMSComm do begin
CommPort:=1; //使用Com1
Settings:=9600,n,8,1; //设置通信口参数
InputLen:=1; //设置Input一次从接受缓冲区读取字节数为1 InBufferCount:=0; //清除接受缓冲区 OutBufferCount:=0; //清除发送缓冲区
InBufferSize:=50; //设置接受缓冲区为50字节 OutBufferSize:=2; //设置发送缓冲区为2字节
RThreshold:=1; //设置接受一个字节产生OnComm事件
InputMode:=ComInputModeText; // 设置接受数据模式为二进制方式 If (not PortOpen )then //判断通信口是否打开 PortOpen:=True else
ShowMessage(串口已经打开!); end;
2).数据接收与处理
为了达到实时数据采集的目的,实时数据采集处理程序采用MSComm的事件驱动方式。
procedure TForm1.MSCommComm(Sender: TObject); var
buffer :Olevariant; sTemp:string; cNow :Char; tmpX:Double; begin
i f MSComm.CommEvent = comEvReceive then //接受事件 begin
buffer:=MSComm.Input; //读取接受到的数据 sTemp:=buffer; cNow:=sTemp[1];
if((cLast=Chr(13))and(cNow=Chr(10)))then begin
sF1:=Trim(sF1);
dF1:=StrToFloat(sF1);
with SeriesDepth do //利用TChart绘制深度曲线 begin
tmpX:=XValues[1]-XValues[0]; Delete(0);
AddXY( XValues.Last+tmpX,dF1,,clGed); end; sF1:=; end;
if((cLast<>Chr(13))and(cNow<>Chr(10)))then begin
sF1:=sF1+cNow; end;
cLast:=cNow; end; end; 3).串口关闭
If (MSComm.PortOpen) then MSComm.PortOpen:=False;
delphi使用mscomm处理16进制 ()
下面这些代码是针对发送和接收为16进制处理的。 var
senddata:array[1..10] of char; reData:array of Variant; sendstr:string; restr:string; i:longint; begin
mscomm1.CommPort := 1; //指定端口 mscomm1.Settings := '9600,N,8,1'; //其它参数 mscomm1.InBufferSize := 1024; //接收缓冲区 mscomm1.OutBufferSize := 1024; //发送缓冲区 mscomm1.InputMode := comInputModeBinary; //接收模式 mscomm1.InputLen := 0; //一次读取所有数据 mscomm1.SThreshold := 0; //一次发送所有数据 mscomm1.InBufferCount := 0; //清空读取缓冲区 mscomm1.OutBufferCount := 0; //清空发送缓冲区 mscomm1.PortOpen:=true; //打开端口
MSComm1.RThreshold := 16; //设置接收多少字节开产生oncomm事件
senddata[1]:=chr($06); //要发送的数据 senddata[2]:=chr($03); senddata[3]:=chr($00); senddata[4]:=chr($03); senddata[5]:=chr($10); sendstr:=''; for i:=1 to 5 do
sendstr:=sendstr + senddata[i];
mscomm1.output:=sendstr; //发送数据
i:=0;
bzw:=false; repeat sleep(10);
Application.ProcessMessages; i := i + 1;
If i > 30000 Then begin
showmessage('发送超时!'); break; end;
Until bzw = true;
redata:=mscomm1.Input; 接收数据 restr:='';
for i:=0 to vararrayhighbound(redata,1) do restr:=restr + inttohex(redata[i],2)+' '; mscomm1.PortOpen:=false; flatmemo1.Text:=restr; end;
//oncomm事件
procedure TForm1.MSComm1Comm(Sender: TObject); begin
case mscomm1.CommEvent of comEvReceive: bzw := true; end; end;
procedure TForm1.FormCreate(Sender: TObject); var
str: string; begin
//MSCOMM参数设置
MSComm1.CommPort := 1;//使用COM1
MSComm1.Settings := ''9600,N,8,1'';//设置通信口参数
MSComm1.InBufferSize := 32;//设置MSComm1接收缓冲区为32字节 MSComm1.OutBufferSize := 2;//设置MSComm1发送缓冲区为2字节
MSComm1.InputMode := comInputModeBinary;//设置接收数据模式为二进制形式
MSComm1.InputLen := 1;//设置Input 一次从接收缓冲读取字节数为1 MSComm1.SThreshold := 1;//设置Output 一次从发送缓冲读取字节数为1
MSComm1.InBufferCount := 0;//清除接收缓冲区 MSComm1.OutBufferCount := 0;//清除发送缓冲区
MSComm1.RThreshold := 1;//设置接收一个字节产生OnComm事件 MSComm1.PortOpen := true;//打开串口1
正在阅读:
mscomm控件使用方法02-28
架空高压输电线路巡线机器人样机研制08-28
HJ毕业论文格式01-11
西南政法大学青年志愿者协会大致简介10-25
最新组合数学习题答案(1-4章全)06-02
化工分析工(技师)06-10
幼儿教师综合素质大赛专业理论试题04-21
混凝土上册习题答案(第四版)03-18
材料力学- 选择(终稿)03-21
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 控件
- 使用方法
- mscomm
- 金蝶K3供应链试题
- 2010年度大学生自主创新性实验项目――理工类(61项) - 图文
- GNSS实习报告 - 米家俊
- 信息技术教师招聘考试题库
- 径门中学历届学生名册
- 2006,2007东华大学纺织材料学真题名词解释答案
- 汽车转向机构设计(大学毕业设计)
- 湖北省2017年上半年综合法律知识:共同犯罪的概念和条件考试题
- 2013林俊杰广州演唱会门票订票 - 图文
- 7-5 组合 学生版
- 广州市奥校历年入学考试试题(订正版)
- 法国古典园林布局有什么特点
- 经济学原理练习题
- 康普六类大厦方案-PDS-方案 - 图文
- HXD3型交流传动电力机车转向架
- 国金计算
- 河南科技大学 2013 届优秀毕业生名单
- 2013届高考历史热点 科教兴国
- 动火作业管理制度
- 国家试题10 复习