说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

Delphi 中 串 行 通 信 的 实 现

HTML文档下载 WORD文档下载 PDF文档下载
Delphi 中 串 行 通 信 的 实 现

随 着 现 代 信 息 技 术 的 发 展 以 及 计 算 机 网 络 的 广 泛 使 用, 计 算 机 通 信 技 术已 经 日 臻 成 熟, 但 串 行 通 信 作 为 一 种 灵 活 方 便 可 靠 的 通 信 方 式, 仍 不 失 为有 效 的 通 信 手 段, 被 广 泛 应 用 于 工 业 控 制 中。 在 工 业 生 产 实 践 中, 用PC 机 对工 程 实 现 实 时 监 控, 通 常 要 求PC 机 能 在 用 户 界 面 上 具 有 数 据 采 集、 数 据 处理 以 及 控 制 信 号 的 产 生 与 传 输 等 功 能。 在 这 种 特 定 的 环 境 下,PC 机 要 与 过程 控 制 的 实 时 信 号 相 联 系, 就 要 求 能 实 现 对PC 机 的 串 行 端 口 直 接 操作。Borland公 司 推 出 的Delphi 是 一 种 功 能 强 大 的 高 级 编 程 语 言, 其 具 有 的 可 视 化 面 向 对象 的 特 性, 特 别 适 于 在Windows 环 境 下 图 形 界 面 和 用 户 程 序 的 编 制。 本 文 就 是介 绍 基 于Windows95/NT 操 作 系 统 用Delphi 来 实 现PC 机 与 下 层PLC 控 制 器 之 间 的 串 口通 信 方 法。

基 于WIN95/NT 的 串 行 通 信 机 制

Windows 操 作 系 统 的 机 制 禁 止 应 用 程 序 直 接 访 问 计 算 机 硬 件, 但 它 为 程 序员 提 供 了 一 系 列 的 标 准API 函 数, 使 得 应 用 程 序 的 编 制 更 加 方 便 并 且 免 除 了对 有 关 硬 件 的 调 试 麻 烦。 在Windows95/NT 中, 原 来Windows3.X 的WM_COMMNOTIFY 消 息已 被 取 消, 操 作 系 统 为 每 个 通 信 设 备 开 辟 了 用 户 可 定 义 大 小 的 读/ 写 缓 冲

区, 数 据 进 出 通 信 口 均 由 操 作 系 统 后 台 完 成, 应 用 程 序 只 需 对 读/ 写 缓 冲 区操 作 即 可。WIN95/NT 中 几 个 常 用 的 串 行 通 信 操 作 函 数 如 下:

CreatFile

打 开 串 行 口

CloseHandle

关 闭 串 行 口

SetupComm

设 置 通 信 缓 冲 区 的 大 小

ReadFile

读 串 口 操 作

WriteFile

写 串 口 操 作

SetCommState

设 置 通 信 参 数

GetCommState

获 取 默 认 通 信 参 数

ClearCommError

清 除 串 口 错 误 并 获 取 当 前 状 态

---- 除 上 述 几 个 函 数 外, 还 要 经 常 用 到 一 个 重 要 的 记 录DCB( 设 备 控 制

块)。DCB 中 记 录 有 可 定 义 的 串 行 口 参 数, 设 置 串 行 口 参 数 时 必 须 先 用

GetCommState 函 数 将 系 统 默 认 值 填 入DCB 控 制 块, 然 后 才 可 把 用 户 想 改 变 的 自 定

义 值 设 定。

---- 在WIN95/NT 中 进 行 串 行 通 信 除 了 解 基 本 的 通 信 操 作 函 数 外, 还 要 掌 握 多 线

程 编 程。 线 程 是 进 程 内 部 执 行 的 路 径, 是 操 作 系 统 分 配CPU 时 间 的 基 本 实

体。 每 个 进 程 都 由 单 线 程 开 始 完 成 应 用 程 序 的 执 行。 串 行 通 信 需 要 利 用 多

线 程 技 术 实 现, 其 主 要 的 处 理 逻 辑 可 以 表 述 如 下: 进 程 一 开 始 先 由 主 线 程

做 一 些 必 要 的 初 始 化 工 作, 然 后 主 线 程 根 据 需 要 在 适 当 时 候 建 立 通 信 监 视

线 程 监 视 通 信 口, 当 指 定 的 串 行 口 事 件 发 生 时, 向 主 线 程 发 送

WM_COMMNOTIFY 消 息( 由 于WIN95 取 消 了WM_COMMNOTIFY 消 息, 因 此 必 须 自 己 创

建), 主 线 程 对 其 进 行 处 理。 若 不 需 要WM_COMMNOTIFY 消 息, 则 主 线 程 终 止 通

信 监 视 线 程。

---- 多 线 程 同 时 执 行, 将 会 引 起 对 共 享 资 源 的 冲 突。 为 避 免 冲 突, 就 要 用 同

步 多 线 程 对 共 享 资 源 进 行 访 问。WIN95 提 供 了 许 多 保 持 线 程 同 步 的 方 法, 笔

者 采 用 创 建 事 件 对 象 来 保 持 线 程 同 步。 通 过CraeteEvent() 创 建 事 件 对 象, 使

用SetEvent() 或PulseEvent() 函 数 将 事 件 对 象 设 置 成 信 号 同 步。 在 应 用 程 序 中,

利 用WaitSingleObject() 函 数 等 待 同 步 的 触 发, 等 到 指 定 的 事 件 被 其 它 线 程 设 置

为 有 信 号 时, 才 继 续 向 下 执 行 程 序。

---- Delphi 下 的 具 体 实 现 方 法

---- Delphi 的 强 大 功 能 和 支 持 多 线 程 的 面 向 对 象 编 程 技 术, 使 得 实 现 串 行 通 信

非 常 简 单 方 便。 它 通 过 调 用 外 部 的API 函 数 来 实 现, 主 要 步 骤 如 下: 首 先, 利

用CreateFile 函 数 打 开 串 行 口, 以 确 定 本 应 用 程 序 对 此 串 行 口 的 占 有 权, 并 封

锁 其 它 应 用 程 序 对 此 串 口 的 操 作; 其 次, 通 过GetCommState 函 数 填 充 设 备 控 制

块DCB, 再 通 过 调 用SetCommState 函 数 配 置 串 行 口 的 波 特 率、 数 据 位、 校 验 位 和

停 止 位。 然 后, 创 建 串 行 口 监 视 线 程 监 视 串 行 口 事 件。 在 此 基 础 上 就 可 以

在 相 应 的 串 口 上 操 作 数 据 的 传 输; 最 后, 用CloseHandle 函 数 关 闭 串 行 口。 具 体

的 程 序 如 下, 本 程 序 用Delphi3.0 编 制 在Win95 环t 境 下 调 试 通 过, 已 投 入 实 际 应 用

中, 供 广 大 读 者 参 考。

---- 程 序:

unit comdemou;

interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

Forms

Dialogs;

const

Wm_commNotify=Wm_User+12;

type

TForm1 = class(TForm)

procedure FormCreate(Sender: TObject);

private

Procedure comminitialize;

Procedure MsgcommProcess(Var

Message:Tmessage); Message Wm_commnotify;

{ Private declarations }

public

{ Public declarations }

end;

//线程声明

TComm=Class(TThread)

protected

procedure Execute;override;

end;

var

Form1: TForm1;

hcom

Post_Event:Thandle;

lpol:Poverlapped;

implementation

{$R *.DFM}

Procedure TComm.Execute; //线程执行过程

var

dwEvtMask:Dword;

Wait:Boolean;

Begin

fillchar(lpol

sizeof(toverlapped)

0);

While True do Begin

dwEvtMask:=0;

Wait:=WaitCommEvent(hcom

dwevtmask

lpol);

//等待串行口事件;

if Wait Then Begin

waitforsingleobject(post_event

infinite);

//等待同步事件置位;

resetevent(post_event); //同步事件复位;

PostMessage(Form1.Handle

WM_COMMNOTIFY

0

0);//发送消息;

end;

end;

end;

procedure Tform1.comminitialize;

//串行口初始化

var

lpdcb:Tdcb;

Begin

hcom:=createfile('com2'

generic_read or

generic_write

0

nil

open_existing

file_attribute_normal or

file_flag_overlapped

0);//打开串行口

if hcom=invalid_handle_value then

else

setupcomm(hcom

4096

4096);

//设置输入,输出缓冲区皆为4096字节

getcommstate(hcom

lpdcb);

//获取串行口当前默认设置

lpdcb.baudrate:=2400;

lpdcb.StopBits:=1;

lpdcb.ByteSize:=8;

lpdcb.Parity:=EvenParity; //偶校验

Setcommstate(hcom

lpdcb);

setcommMask(hcom

ev_rxchar);

//指定串行口事件为接收到字符;

end;

Procedure TForm1.Msgcomm

Process(Var Message:Tmessage);

var

Clear:Boolean;

Coms:Tcomstat;

cbNum

ReadNumber

lpErrors:Integer;

Read_Buffer:array[1..100]of char;

Begin

Clear:=Clearcommerror(hcom

lpErrors

@Coms);

if Clear Then Begin

cbNum:=Coms.cbInQue;

ReadFile(hCom

Read_Buffer

cbNum

ReadNumber

lpol);

//处理接收数据

SetEvent(Post_Event);

//同步事件置位

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

comminitialize;

post_event:=CreateEvent

(nil

true

true

nil); //创建同步事件;

Tcomm.Create(False);

//创建串行口监视线程;

end;

end.

VB如何用VB建立快捷方式 VB如何用VB在桌面建立快捷方式 VB如何在 VB 中控制 Modem 行为? VB如何在VB中判断Windows9x的运行模式 VB如何在Visual Basic中实现异步执行程序 VB如何在开机时自动更换墙纸? 使回车具有 Tab 的功能-VB资料 输入时,自动转换成小写? -VB资料 显示多媒体信息 -VB资料 也谈Windows 下的自动存盘 -VB资料 一个小巧精致的CPU监视器 -VB资料 应用VB4.0实现工业控制的实时曲线和历史曲线 应用程序中实现关机功能-VB资料 萤幕抓取与萤幕保护程式 -VB资料 用VB5.0创建Windows快捷方式 用VB5.0收集键盘和鼠标信息 用VBA限制非注册软件使用时间 用VB编程检测当前电池使用情况 用VB编写定时关闭计算机的程序 用VB编写键盘拦截程序 用VB函数轻松访问系统注册表 用VB设计一个定时闹钟程序 用VB实现拖放功能 在VB中启动控制面板 在VB中异步执行程序 在Visual Basic中终止Windows 95 在关机或Logff前信息的拦截-VB资料 VB怎样捕捉窗体的鼠标? VB怎样存取注册表信息 VB怎样改变双击鼠标的时间间隔? VB怎样关闭一个正在运行的程序 关于tomcat 的问题(急) help about windows printer 有关SDK的问题,高手请进! 高分寻求一个例子! dataset更新。100分 请您支招 通配符 有爱国心的高手快去黑了这个网站 这样的字符串比较怎么做?? 怎样在VB中加入动画? 费时操作是如何估计所花费时间的? 为什么我新装的机器在播放声音和视频文件时速度比原速度快了好多? 怎么样清楚Cookies 如何通过一个链接弹出一个没有标题栏,没有菜单栏,没有地址栏等的新页面? 配置问题,在线等待?分不够再加! MFC基础, 如何实现在CScrollView上, 把某一文本文件显示出来(不用file - new)? 求救:请问哪儿有《Beginning Visual Basic.Net》英文书下载??? 高分100 label 控件刷新问题 如何通过一个链接弹出一个没有标题栏,没有菜单栏,没有地址栏等的新页面? 实现这样一个报表??????? 求救。。。。。Access2000的数据库密码忘了,该怎么办呀!!! 动态产生的列表框,如何让记录按列对齐? 为什么有时自动打开网页,有时却不能? 在JDBTable中如何选中行? 我想让进度条竖着从下往上显示,应该怎么做? 可否知道数据表即将产生记录的标识键值???? 怎样让程序启动时最大化,但又不允许用户再还原或者改变窗口大小,谢谢! 紧急求救!关于ADSL下的固定IP地址访问问题,相关IP地址转发技术 谁见过这种编译错误,怎么办啊? 我的RH7.2不能Telnet ,请帮忙. GPRS 有无条件等待指令吗? 简单的问题_50分。 在vba的编写过程中无法在excel中调用word等其他对象,怎么办?(顶者有分) 事实证明,weblogic会对注释行报错! 一个让人困惑的问题 bcp 的问题 请问:有没有UNIX下的测试工具? 请问一个关于BCB消息MAP的问题... 系统2000,用installshield6.0包了程序,有问题 请问我用VC++做的数据库程序怎样打包在线等待急用, 在控制面斑-- >删除/添加程序 选项中 Win2000和Win98怎么不一样啊 改写了8254后如何得到正确的系统时钟 在别人机子上生成报表时提示出错,除打包安装外有无其他办法? ★ 懂 ORACLE 和 DB2 的高手请进... ★ 求助!!! 100分求小软件 为什么MediaPlayer播放不正常? 关于在向固定格式的Word模版中导入数据的问题,急!!!!!!!!!!!!!!! SQL SERVER 2000简体中文企业版 与 SQL SERVER 2000简体中文标准版 区别 同时装了Win2000和Office2000的朋友,快看看自己的电脑有没有这样的毛病:)送分! google搜索词之间“和”与“或”的使用怎么不能得到满意的结果呢?我在google.com上搜索关键词“cocktail and juice”的时候,结果43400000条;关键词“cocktail or juice”,结果43400000条,而且前几页结果 为什么果胶是植物体内的却由动物的半乳糖醛酸组成呢? 浓硫酸能用作水解用催化剂吗 手提式二氧化碳灭火器是怎么换药的?因为我公司的几个灭火器换完药后瓶口的生料带还是原来那样脏脏的,要是换药的话是不是生料带也要换过?还是二氧化碳的灭火器换药只要把原来的气体 由n个半乳糖醛酸合成果胶质体的过程中,会产生多少个水分子A.n B.n-1 C.n+1 D.0 我要公式. 甲酸甲酯水解的催化剂是什么 遵守公共生活规则包括哪些 水果中果胶物质的提取和测定 配制标准溶液时为何要称取0.1205g-水半乳糖醛酸 什么是化纤布 生活中最基本的社会规范有哪些? 请问果胶酸裂解酶(pectate lyase)与多聚半乳糖醛酸酶(Polygalacturonase)有何区别?感谢tianci3388的回答,我还需要知道裂解酶与水解酶在作用形式上或者使糖苷键断裂的形式有什么区别。另外,果胶 化纤服装是什么材料制成的? 基督徒应该遵守的生活规范和饮食规范应该是哪些?我不太懂,希望能够具体些. notice board 求速度)山西省存在的主要环境问题是 产生该问题的主要原因是求速度)山西省存在的主要环境问题是 产生该问题的主要原因是 图中①②两项工程比较,①工程的的有 board怎么读 关于经济学的讲点?我们有个选修课要演讲.我不太懂经济.有什么比较简单的讲点.但又不会太普遍滴 化纤布料是不是合成材料 煤粉细度R200是什么意思 求《吕氏春秋》的简介 1.基数效用论的分析方法包括边际效用分析和无差异曲线分析方法.A.错误B.正确满分:2 分2.当消费某种物品的边际效用为负时,则总效用达极大值.A.错误B.正确满分:2 分3.MC曲线AC曲线相交于MC 请问关于煤粉细度的R90是什么意思啊?而R90为18%~请说得通俗点 《三豕涉河》道理这个是文言文,这个故事的道理是什么 甲,乙两个容器共有盐水2600毫升,从甲容器中取出4/1,从乙容器中取出5/1,结果两个容器共剩2000毫升,甲、乙两个容器原来各有多少毫升盐水? 粉末细度 《吕氏春秋》共有几篇?《吕氏春秋》共有几览?《吕氏春秋》共有几纪? 甲乙两个圆柱形容器,甲容器中有水2000毫升,乙是空的,现往两个容器里各注入水1600毫升,它们水面的高度相等,已知甲的底面半径9厘米,求乙的底面半径. 熟料煅烧为什么要控制煤粉的细度 生物中水解产物是什么意思? 我们应该遵守哪些生活社会上的规则比如不能闯红灯等等等还有很多但我不知道.快 快 风幕机一般多少W 关于糖类的生物题,我知道最终水解产物都是单糖,求具体的名称.3Q二糖:蔗糖水解最终产物是?麦芽糖水解最终产物是?乳糖水解最终产物是?多糖:淀粉的最终水解产物是?糖原的最终水解产物 请你根据所学的知识和实际情况说说生活中我们为什么要遵守规则 煤粉细度R90=0.25的含义 化纤布料有哪些分类 小苏打治痛风有用吗,苏打水对痛风的作用是什么?小苏打治痛风有用吗,苏打水对痛风的作用是什么呢? 三豕涉河的字面解释一定要完整,不要害人哦! 化学纤维的布料都包含什么? 小苏打治痛风有用吗,苏打水对痛风的作用我爹最近痛风犯了,脚肿了好高,而且特别疼,我爹好象吃就是那个别嘌呤醇的药,眼睛好肿呀.  请问这种病吃什么药比较好呢?或者食疗、生活上应该 三豕涉河中 晋师已亥涉河也 涉 结合所学政治生活知识说明我国为什么坚持走和平发展道路 雷达是利用什么来进行定位和导航 当经济出现通货膨胀时应采取什么样的政策? 不议价是什么意思 雷达是利用超声波来定位和导航? 关于天气的知识夏季的黄昏,一阵雷雨过后,你开始观察当时的天气现象.假如你随着时间的推移观察到了彩虹、晚霞、月亮周围的色彩光环,清说一说天气的趋势将如何发展?这是我们的思考题.. 议价粮油什么意思 雷达定位 雷达通过什么定位和导航?. 运用所学的经济生活知识,说明我国为什么要稳定房价 药品二次议价什么意思 gps雷达导航仪怎么样?gps雷达导航仪好用吗?gps雷达导航仪那种比较好用? 运用所学经济生活知识,说明我们为什么能富起来 运用所学政治生活知识说明我们为什么能够站起来运用所学经济生活知识,说明我们为什么能富起来(11分)运用所学政治生活知识说明我们 采购中议价后的评估是什么意思 ? 雷达是利用电磁波来进行定位和导航的么输入您的问题 c4h8的同分异构体CH2=CHCH2CH3 CH3CH=CHCH3 CH3=C(CH3)2 还有别的么? 定价发行与议价发行分别是什么意思啊?我在做复习题...1.我国目前股票定价的基本做法是承销商与发行人在公开发行前商定一个固定的价格,然后据此价格进行公开发售,称为( 答案是C )A.议 有水解催化剂可以让硫酸钙水解吗?还有其他物质的高效水解催化剂.不要强碱,不要强酸. 食品添加剂甘油跟护肤品甘油一样吗 半乳糖醛酸和果胶是什么关系?还有乳糖和半乳糖的关系, 淀粉水解时用的催化剂是什么
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘