-- VFP 中的串口通信一般是通过 mscomm ActiveX 控件来做,请参考:
串口通讯的解决
--------------------------------------------------------------------------------
前一阶段,单位为了实现地磅与计算机连接,直接用计算机从地磅读数,我编写了一个串口通讯程序,在编程的过程中,遇到了不少问题,在panbq和版主的帮助下,问题已经解决,有鉴于这方面的资料比较少,本人觉得有必要将我对串口通讯的理解写出来,与网友共飨,不正之处,望指出.
1、 控件 mscomm32.ocx 的几个重要属性
CommPort: 设置并返回通讯端口号。
Settings: 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位
PortOpen: 设置并返回通讯端口的状态。也可以打开和关闭端口。
Input: 从接收缓冲区返回和删除字符。
Output: 向传输缓冲区写一个字符串。
InBufferCount: 返回接收缓冲区中等待的字符数,该属性在设计时无效,可以把 InBufferCount 属性设置为 0 来清除接收缓冲区。
InBufferSize: 设置并返回接收缓冲区的字节数,接收缓冲区的大小。
Rthreshold: 产生 OnComm 事件之前要接收的字符数。
设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
设置为 0(缺省值)则不产生 OnComm 事件。
CommEvent: 返回最近的通讯事件或错误。
该属性在设计时无效,在运行时为只读。
只要有通讯错误或事件发生时都会产生 OnComm 事件,CommEvent 属性存有该错误或事件的数值代码。
CommEvent 属性返回 2 表示收到 Rthreshold 个字符。
该事件将持续产生直到用 Input 属性从接收缓冲区中删除数据。
2、 接受数据:见版主的 KB 译文〈如何用 mscomm32.ocx 从串口接受〉
3、 实例(事件驱动接受,以下括号中的数据为本单位地磅和计算机的参数值)
(1) 制作串口线,查阅相关技术资料
(2) 在VFP中,建立一个新的表单
(3) 插入标签 (命名为重量)
(4) 插入文本 (命名为 TEXT1,用来显示重量数据)
(5) 建立 Microsoft Communication Control1 控件 在工具栏中点插入ole容器控件,选择 Microsoft Communication Control 控件(NAME 为 OLECONTRO1)
(6) 设置 commport = 2 (串口2)
(7) 设置 settings = 1200,e,7,2(1200 波特率,偶校验,7 个数据位,1 个停止位)
(8) 设置 Rthreshold = 17 表示当缓冲区中有 17 个数据等待接受时,产生 OnComm
(9) 在表单的 init 事件中写 thisform.olecontrol1.portopen=.t.,释放事件中写 thisform.olecontrol1.portopen = .f.
(10) 在控件 olecontrol1 的 OnComm 事件中写如下程序代码
if this.commevent = 2 && 缓冲区中有 17 个字符等待接受,产生 OnComm 事件
dbbl=subs(this.input,1,17) && 取串口数据
thisform.text1.value=subs(dbbl,5,6) && 取字符串中的重量数据
thisform.refreshendif
---- 近来,笔者在工作中解决了一个串行口通讯问题。我公司用一台火车静态秤进行进出货物的检斤计量工作。现在,计划让计量数据在网络上共享,实现计量工作的制度化,规范化,现代化。但是原先现场计算机执行DOS平台应用软件,为实现网络共享带来不便。经过一段时间的实验,找到了用VFP Microsoft Comm 控件来解决串行口读数据这一关键问题的简便方法。首先介绍一下Microsoft Comm 控件。
---- 一、 Microsoft Comm 控件的简介
---- 在VFP 5.0 中添加Microsoft Comm 控件到表单中必须要ACTIVE X控件中的通讯控件(MSCOMM32.OCX)。我们首先介绍Microsoft Comm 控件的几个重要属性。
CommPort 属性:设置与返回通讯端口数
Settings 属性:设置与返回波特率,奇偶校验位,
字符串的停止位和数据位
PortOpen 属性:设置与返回通讯端口的状态,
并可开放、关闭端口
Input 属性:返回和删除接收缓冲区的字符
Output 属性:写字符串到发送缓冲区
---- 二、实现通讯口读数据
---- 工业中,用MICROSOFT VFP编写串行口通讯程序与现场二次仪表紧密相连。在编程之前我们必须查阅二次仪表的内部资料,清楚它发送给计算机什么数据,以及数据的具体含义,以便编出适用的程序来。
---- 本程序涉及的二次仪表是静态秤显示终端。它的主要功能是重量显示及用串行输出接口发送称重数值到COM口接收缓冲区。如果现场用不同的二次仪表,程序的实现将有不同。但程序的流程图基本上是一致的。流程图显示如下(略)
---- 以下是程序清单,本程序在我厂运行一段时间后,性能一直比较稳定,取数准确。并能在网络上实现数据共享,减少了计量员的工作量,提高了工作效率。
#define COM2 2
#define CR 13
#define MAXCOUNT 14
//创建Microsoft Comm 控件对象
comm1=createobject("mscommlib.mscomm.1")
comm1.commport=COM2 //指定COM2口工作
comm1.portopen=.t. //打开COM2口
//设置传输速率,奇偶校验,数据位,停止位
comm1.settings="1200,n,7,1"
indata1="" //变量初始化
//从接收缓冲区读出字符串
do while comm1.inbuffercount<=MAXCOUNT
comm1.inbuffercount=0 //清缓冲区
comm1.inputmode=0 //设置字符输入输出方式
comm1.inputlen=1 //仅输入输出一个字符
//判断头一个字符是否正确,如不正确循环判断
do while .t.
indata=comm1.input
if asc(indata)=CR
exit
endif
enddo
//从缓冲区读字符
indata=comm1.input
//生成字符串
indata1=indata1+indata
enddo
//取出符合标准的计量数据
indate=substr(indata1,6,4)+'.'+substr(indata1,11,2)
@1,2 say indata //在VFP主屏幕输出变量
comm1.portopen=.f //关闭串行端口
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
vfp+MsComm32+STC89C52+DS18B20.rar (43个子文件)
vfp+MsComm32+STC89C52+DS18B20取串口温度
vfp+MsComm32控件做上位机
FoxCharts.log 15KB
程序1.FXP 8KB
Images
vfpxpoweredby_alternative1.gif 519B
vfpxpoweredby_alternative.gif 6KB
Thumbs.db 14KB
foxcharts.vcx 3KB
system.drawing.h 7KB
chartssample_circulargauge.SCT 51KB
test.SCT 27KB
mscomm32.ocx 103KB
gdiplusx.vcx 3KB
gdiplusx.VCT 48KB
VFP中的串口通信.txt 5KB
test.scx 6KB
chartssample_circulargauge.scx 7KB
System.app 820KB
项目1.pjx 3KB
foxcharts.vct 422KB
项目1.PJT 5KB
下位机源代码
Temp.OBJ 9KB
Temp.c 7KB
Temp.LST 12KB
STARTUP.LST 11KB
hc595.LST 3KB
TemMain.OBJ 6KB
TemMain.c 3KB
Temp.uvopt 57KB
Temp.M51 19KB
Temp.plg 666B
Temp.lnp 72B
TemMain.LST 5KB
STARTUP.A51 5KB
Temp.opt.bak 1KB
Temp.uvproj 13KB
hc595.OBJ 2KB
Temp_Uv2.Bak 2KB
Temp_Opt.Bak 1KB
Temp_uvopt.bak 57KB
Temp.Uv2.bak 2KB
STARTUP.OBJ 749B
Temp 13KB
hc595.c 1KB
Temp.hex 4KB
共 43 条
- 1
资源评论
- 发现代码2019-03-17下载了,看着不错,好好学习一下。
- lnhclz2013-10-23非常感谢,这个例子对我帮助很大
wqj5431
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功