-- 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 //关闭串行端口
wqj5431
- 粉丝: 0
- 资源: 4
最新资源
- screenrecorder-20241221-204839.mp4
- Screenshot_20241221-204051.png
- 自考计算机网络原理04741真题及答案2018-2020
- YOLO算法-垃圾箱检测数据集-214张图像带标签-垃圾桶.zip
- Hive存储压缩与Hive3性能优化-必看文档
- YOLO算法-施工管理数据集-7164张图像带标签-安全帽-装载机-挖掘机-平地机-移动式起重机-反光背心-工人-推土机-滚筒-哑巴卡车.zip
- YOLO算法-俯视视角草原绵羊检测数据集-4133张图像带标签-羊.zip
- YOLO算法-挖掘机数据集-2656张图像带标签-自卸卡车-挖掘机-轮式装载机.zip
- YOLO算法-火车-轨道-手推车数据集-3793张图像带标签-火车-轨道-手推车.zip
- YOLO算法-垃圾数据集-6561张图像带标签-纸张-混合的-餐厅快餐.zip
- 技术报告:大型语言模型在压力下战略欺骗用户的行为研究
- YOLO算法-水泥路面裂纹检测数据集-5005张图像带标签-裂纹.zip
- YOLO算法-垃圾数据集-568张图像带标签-纸张-纸箱-瓶子.zip
- YOLO算法-施工设备数据集-2000张图像带标签-装载机-挖掘机-平地机-移动式起重机-推土机-滚筒-哑巴卡车.zip
- 防火墙系统项目源代码全套技术资料.zip
- 西门子V90效率倍增-伺服驱动功能库详解-循环通信库 DRIVELib.mp4
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈