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

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.

15亿美元!软银联合GungHo收购手游巨头Supercell Oracle“炮轰”开源:称其永远无法在军事领域取得一席之地 零客户端:下一代计算分布模型 苹果聘奢侈品公司巴宝莉CEO Angela Ahrendts为零售主管 看看你会几个?9大最火的移动开发技能 为了进一步拴住用户:传亚马逊与HTC合作开发智能手机 三年?又三年!今年MDCC2013大不相同! 杨远骋:聚美优品与百度云推送的故事 糗事百科王坚:百度云推送让我们省心 10个最热JavaScript开源框架的社区活跃度对比 2013福布斯中国富豪榜:李彦宏第三、马化腾第五、马云第八 Storm又获东风,Hortonworks计划将其整合到Hadoop企业版 IBM CEO:预测高新技术 五个我最喜欢的方式 我伙呆,硅谷高级工程师年薪16.5万美金起 羡煞旁人的Supercell:Clash of Clans卫冕营收榜冠军 谷歌第三财季利润增36.5% 但摩托罗拉业务继续亏损2.48亿 针对应用开发者的几点建议:注意特征蔓延、加大用户评审…… Ubuntu中文衍生版UbuntuKylin 13.10正式发布 Web设计师和Web开发者之间的区别是什么? 在政府退出后,Google的量子计算机项目面临危机 SQL on Hadoop的最新进展及7项相关技术分享 联想:欲收购黑莓,还能在智能手机领域创造PC神话吗? 谁说Android开发者的收入依然不行? 代码可维护性的神秘面纱 MDCC 2013首批演讲嘉宾名单出炉 议题即将披露 MDCC2013:公开征集讲师和演讲主题 移动周报:IT人必看!9大最火移动开发技能 OpenStack H版发布 盘点2013:21个最火的云初创公司 从摩尔定律到原子计算,2013诺贝尔物理学奖背后的计算机技术 黄峻:从自制纸板键盘的孩子到Adobe技术经理的故事 SQL语句的语法问题,高手请进!!! 有一套网上音像系统,寻开音像店共同合作 SUN的那份关于java所有的包的说明的文档在哪里可以下载呀? 怎么用电脑接听普通电话机打来的电话。 为什么读取图片后显示出错 请各位指教关于随即生成表格的问题!(急!!!!!) 格式问题:高分! 今天新买一台机器,xp1800+ 承启nforce2 +Kingmax333 256DDR +ST80G用起来一个字,爽! RichTextBox控件如何读取使用UTF8编码的文本文件? 程序编译到AfxWinMain就显示警告信息 建设一个一般的callcenter有10-20坐席,大概需多少钱呀 散分!!第一个程序在天空提交通过!! (帮我搞定,高分相赠,在线等待!)ASP上传图片到SQLServer,为什么老提示对象不支持appendchunkmydata方法? CheckBox可以同时传递多个值吗? 请问有用过visual interdev的,如何让interdev也像dreamweaver可以在写程序的时候显示代码在哪行的啊.多谢了 请高手帮忙解决我的问题,在此表示谢谢! 有关datagrid 和webform 的问题 程序员的艳遇。。。。。。 验证字符串问题 IE问题!好烦人啊!那位高手能帮我解答! 怎么在建表时使用一个时间函数??就是指出加这条这条文件的时间?? 高手请进,多数据库链接的问题 如何成为一个程序员? 事务以及回滚的问题 有做完一个作业,放60分。 关于ASP调用VC编的DLL接收返回参数的问题 我提问,大家回答 有没有关于触发器的电子书籍? 怎么能够获得数据库的连接字串呀?? 大讨论:目前用什么工具、做什么开发最能赚钱?散分啦!感兴趣的程序员们快来!! 在IE中,打开某个页面,会连接到www.lop.com页面 关于islower(ch),isdigit(ch) 疑问 BQQ的服务器端有没有保存用户的聊天记录的? 如何获得程序方向键输入?多谢! 求助有关IFS-HOOK 高手请入!!急救!求msflexgrid 的打印源码????? 如何在list中显示文件夹 哪里可以看到Obejct类clone的实现方法? 系统的FOUND.00*文件夹里放的FILE000*是什么文件?可以删除吗?刚装系统时没有这些文件的阿 给分啊 今日郁闷之至……散分! 来来来,大伙们一起来衷心祝愿xxmm (晓箫)的老爸老妈顺利赴美参加晓箫的毕业典礼!! Dev-Cpp 使用 NetAPI32.lib 的问题 急寻严蔚敏,吴伟民版《数据结构习题集》c语言版的答案,请问哪有啊 高手们给我一个超级简单的HOOK API的例子好吗?求你们了。 错在哪里 好郁闷啊~ 谁有站内关键字模糊查询的代码?紧急求救、在线等待!!!! 彼亦一是非,此亦一是非 用哲学的观点如何回答? I don‘t like ( )(orange). 用所给括号里单词适当形式填空 英语翻译求这个的翻译哦!帮下忙!最好有译文! 笑的很淫荡是什么意思?同学说我笑的很淫荡,也有同学说我笑的很泛滥,到底是什么意思啊?大家要详细点,这是好还是坏啊,我也知道是开玩笑的啦,可是我就想知道什么才叫笑的淫荡呢?淫荡不 为什么鲸和海豚都不是鱼? get sb a ride与give sb a ride的区别是什么 故不登高山不知天之高也?故不登高山不知天之高也,不临深溪不知地之厚也,不问先生遗言故不知学问之深也.撒意思哦 meet balls什么意思?急啊! amaze什么意思 “故不登高山,不知天之高也”后两句是什么? 《海豚和白杨鱼》你联想到生活中的哪一类人?急!求解! amaze的形容词是什么? Him,this,her的复数? 英语翻译过:( ) 顾:( ) 益:( ) 川:( )光影回合于轩户之间,尤与风月为相宜 amaze和amuse 的意思? where is my handbag?----Maybe you < >it in the shoe store.A.left B.forget C.threw D.got There wasn't a mobil phone on the desk just now.改为复数 为了他的尊严中这个独臂乞丐是如何走向成功的,请发挥想象,写写他奋斗的过程 为什么百度哲学贴吧,有这么多头脑有问题的人为什么百度哲学贴吧这么多头脑有问题,极度自恋,没读过多少书或者读过几本书就开始扑腾他们那脆弱的翅膀了强烈建议取消那个吧的吧主位置. 我一点也不喜欢和她闲聊.翻译:I don't like to ____ ____ ___at all. You amaze me 什么意思? ( )( )( )the shoe store 括号填? go on a ride at a 在翻译一篇文章,大意是小孩子在go on a ride at a fair的时候会很兴奋,但是不太确定这个词的意思,在市集上游览?坐车在市集兜风?感觉都不太对啊~ 《为了他的尊严》这个独臂乞丐是如何走向成功的,发挥想象,写写他奋斗的过程. red的同类词v打头单词 She rebuked herself for forgetting what she really knew quite well,having been told it often书上写不能换成being told it often,否则会出现歧义.为什么这么说,没理解 AMAZE 英文 有太棒了,或者,太神奇了之类的意思么我看可口可乐广告最后一句是这个啊,意思是太棒了 哲学到底是什么?简单通俗的描述吧 go on the new ride 意思 这个独臂乞丐是如何走向成功的,请发挥想象,写写他奋斗的过程 hear from的同义词英文翻译 如何的作息 是做科学的? go on an exciting hear from 的同义词 八分之一除以三加三分之一乘八分之七=( )=( ) 如何把dish mouse strawberry leaf goose diary 这六个单词改成复数?大哥大姐们, hear from的同义词 两个,没有的,一个也行 为了他的尊严独臂乞丐如何走向成功 I must go out for a while.Can you look at my baby for mr?这个呢(改错) 这道题是不是出错了啊?How ( ) is your teacher?A.am B.is C.are D.be 为了他的尊严 这个独臂乞丐是如何走向成功的(想象 grandson and grandfather----ride on the donkey横线填什么? 改换grandma这个单词的一个字母,使它变成另一个单词. RED LIGHT怎么样 Who will look ____ the baby while we're out.(after at for as)请问选括号中的哪一个? 氧化钙是什么?有什么用? as what has been expected话这句对吗?但是两个连词为什么可以放在一起用?求分析一下这句话的语法成分 On my way _____ home The right way ______ ride a donkey The way _____ Nanning . 蜗牛的有什么用? red light subway libray canada 写出所写单词和词组的同项 Could you ____the baby while I go out shopping,please?A look at B see C watch 蜗牛的触角有什么用 The boy has been made what he is.谓语是哪部分? They could travel on horseback or ride on the back of another animal such as a donkey,a camei,ect.这句话的中文翻译是什么? 蜗牛液体有什么作用 语法 A city has been set up in what was once a wasteland.请分析下结构A city has been set up in what was a wasteland.请分析下结构“in what was once a wasteland”做地点状语“what was once a wasteland”做什么成分,请分析下 为了他的尊严 双手健全的乞丐 代表了什么人 为什么蚯蚓背面颜色深,腹面颜色浅? I've been up and down (uh, what) 怎樣翻譯? 《为了他的尊严》当中的“妇人的孩子”和“双手健全的乞丐”分别代表着什么?求求你们了!基础训练上的题目! 中国古典吉他演奏家在伦敦举办独奏音乐调查称受医改问题影响 奥巴马支持率跌美国高中生图书馆借书逾期不还 被警方国际货币基金组织秘书长林建海:中国等澳工人阅读能力低企业纷纷弃用文字型安潘霜霜晒绝美私照 网友惊叹:太像an报告称中东部局地年雾霾日数超百天 霾嘉兴市政府投资项目一财务干部受贿近1浙江首只当代艺术品投资私募基金发行 风行网跟拍母婴计划 对话艾菲谈家庭往百度地图新版增加推荐菜功能 贴心受食俄媒称泰国沉船事故造成7人死亡 含3想坐飞机逃生门附近座位?德航新规定要英国三百余名议员被指仍挪公款用于日常埃及前总统穆尔西即将受审 罪名成立或法国前部长称法国总统奥朗德头号问题是韩国总统朴槿惠巴黎会见联合国教科文组阿富汗总统批评美无人机炸死巴塔头目时日本一司机醉酒驾车连撞5名女中学生后英国三百余名议员被指仍挪公款用于日常埃及前总统穆尔西即将受审 罪名成立或你以为出走就是解决平庸世俗的不二法门合作社覆盖全国四成农户回顾2015年国内名人婚礼横空重大利好!7只黑马提款机,你买了冬天来了,少跑医院!10个超有用宝宝港澳文化人士湖南行:感受中华传统文化别墅装修流程是什么?长债受追捧,中国30年期国债发行成本嗷夜|蔡英文暗拒九二共识,将承受哪四银天下摇钱树12月8日早盘快讯(附股宝马表示 在无人驾驶技术完全成熟前不苏化少女心的“男友力MAX”瞬间盘点神预测 - 微软在1999年便预见到为什么我认为未来12个月,港股与人民130版剧本 《三打白骨精》构建新西怎么看待苹果AppleMusic广告去西藏徒步,最合适的季节,你造吗?最牛的英语绕口令,开始挑战自己的舌头清大教育:中考学霸为何高考变学渣周代人取名有五原则六禁忌周二或有利好出现 5股可大胆买入
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘