基于ActiveX控件及多线程的串行通信
通信网络-基于多线程技术的多串口通信
基于多线程技术的多串口通信王苓1, 苏维均2(1.北京工商大学信息工程学院,北京 100037;2.北京工商大学信息工程学院,北京100037)摘要:介绍了一个多串口通信模块,该模块采用VC++6.0并结合多线程技术编写,用来处理从远程终端站上传来数据。
同时良好的线程同步解决方法也保证了模块程序能够运行更可靠,数据的实时性能更好。
关键词:串行通信;多线程;线程同步;API接口Multiport Communication Based on Multithread TechnologyWANG Ling, SU Wei-jun(Beijing Technology & Business University,Beijing, 100037, China)Abstract: Presents a multiport communication module, which can deal with data from RTU by Multiport Serial Boards, combine with multithread technology. The module developed with VC++ 6.0. In order to resolve the real-time problem in data acquisition and reliability in program, the synchronization of these threads among the serial port communication have been described in detail.Keywords: serial communication; Multithread; synchronization of threads; API interface1 引言在目前的工控系统中,工控仪器如何把可靠数据成功传送给计算机终端已经是一个至关重要的环节,而串行通信以其方便易行,信道成本比较低廉的优势,常常作为计算机与外部串行设备之间的首选数据传输通道,又因为许多设备和计算机都可以通过串口对外设进行控制、检测,串口通讯日益成为计算机和外设进行通讯、获取由外设采集到的监测数据的一个非常重要的手段。
基于ActiveX控件的串口通信技术
器与客户端 的事件 。当预 先指定 的某事 件发生 时, 过滤器 被 调 用, 对要传递 的数据进 行加密 , 压缩 , 者身份认证 。. 或
2 3 采用 A t v X控件 串口编程 的基本流 程 . cie 使 用 A tv X控 件 的应 用程 序 和 A tv X控 件之 间 的 c ie c ie
程 序 时 , 文 档 对 象 将 自动 注 册 。 该
等 ,在本 文中我选择使 用 V + 6 0来 设计 A t vX控 件 , C+ . c ie 因 为 V + 6 0捆 绑 的 M C技术使 开 发者可 以不 必关心 具体 的 C+. F 编程接 口,集 中精力 开发对象 的动作 就可 以十分 容易地 完 成控件 的设计, 且控 件的可移植性 较好 。
串行 接 口与 外部设 备进行通 信 ,以前编 写这类 串行通 信程 序 是一件相 当复杂 的工作 ,程序 员需要 具备相 当 的硬 件知 识, 而本 文采 用 A t vX控件技 术 , c ie 使应 用开 发者 只需 要关 心数据 的业 务逻辑处 理 ,编 写少量 的代码 即可轻 松高效 地 完成与 设备 的通信任 务。
维普资讯
通讯产 品方面 , 在现代 的各种 实时监 控系 统和通信 系统 中 , 仍 以 R 2 2的通讯方式最 为普及 。 S3 在开发微机控 制系统的过程 中,经常需 要通过 R 一 3 S22
户 端如果 要运行此 A t v X控制 , c ie 必须拥有 相应版 本 的 M c F 类库 的 D L L。 使 用 M C开 发 A t v X控 制 , 可 以 用 肝C A tv X F cie c ie
在 使 用 C A P P 。
功能大大缩短 了应用 程序 的开 发周 期。A t v X 件与开发 c ie 控 平 台无关, 以很容 易移植 到其他应用系 统中 。 可
用Activex实现串口通信
用Activex实现串口通信为实现Windows的串口通信可用API实现,但十分不便。
也可以用Active控件实现。
先在应用程序中插入Active控件Microsoft commcontronl(MSComm)。
SComm控件的属性MSComm控件的属性CommPort:设置串口号,类型 short :1-comm1 2-comm2.Settings:设置串口通讯参数,类型 CString :B-波特率 P-奇偶性(N-无校验,E-偶校验,O-奇验) D-字节有效位数S-停止位。
PortOpen:设置或返回串口状态,类型 BOOL:TURE-打开 FALSE-关闭。
InputMode:设置从接收缓冲区读取数据的格式,类型 long: 0-Text 1-Bin.Input:从接收缓冲区读取数据类型 VARIANT。
InBufferCount:接收缓冲区中的字节数,类型:short.InBufferSize:接收缓冲区的大小,类型:short.Output:向发送缓冲区写入数据,类型:VARIANT.OutBufferCount:发送缓冲区中的字节数,类型:short.OutBufferSize:发送缓冲区的大小,类型:short.InputLen:设置或返回Input读出的字节数,类型:short.CommEvent:串口事件,类型:short.程序示例串口初始化if(!m_comm.GetPortOpen())m_comm.SetPortOpen(TURE); /*打开串口m_comm.SetSettings("4800,n,8,1"); /*串口参数设置m_comm.SetInputMode(0); /*设置TEXT缓冲区输入方式m_comm.SetRthresHold(1); /*每接收一个字符则激发OnComm()事件接收数据m_comm.SetInputLen(1); /*每次读取一个字符VARINAT V1=m_comm.GetInput(); /*读入字符m_V1=V1.bstrval;发送字符m_comm.SetOutput(COlevariant("Hello");/*发送“Hello"。
在LabVIEW中利用ActiveX技术实现串行通信
收稿日期:2005-05 作者简介:夏星欣(1981—),女,硕士研究生,主要研究方向为数字信号处理及应用;戴瑜兴(1956—),男,教授,博士生导师。
在Lab V I E W 中利用ActiveX 技术实现串行通信夏星欣,戴瑜兴(湖南大学电气与信息工程学院,湖南长沙410082) 摘要:针对在Lab V I E W 开发环境下传统串口通信控制方式的弊端,提出了另一种控制方法,即在Lab V I E W 中利用ActiveX 控件容器,调用第三方提供的ActiveX 控件—MSComm 控件,实现对计算机串口的通信管理,并结合一数据采集系统给出了实例。
关键词:Lab V I E W;串口通信;ActiveX 技术;MSComm 控件中图分类号:TP39 文献标识码:B 文章编号:1006-2394(2005)05-0015-02Usi n g Acti veX Technology to Rea li ze Ser i a l Co mm un i ca ti on i n LabV I E WX I A Xing 2xin,DA I Yu 2xing(Electr onic and I nfor mati on Engineering of Hunan University,Changsha 410082,China )Abstract:T o the drawback of the traditi onal contr ol method of serial communicati on in Lab V I E W devel opment envir on ment,another contr ol method,which ultilized ActiveX technol ogy and transfered ActiveX contr ol —MSComm contr ol,was suggested,and an exa mp le of da 2ta acquisiti on syste m based on this method was intr oduced .Key words:Lab V I E W;serial communicati on;ActiveX contr ol;MSComm contr ol1 应用Acti veX 技术实现串口通信ActiveX 通常翻译为“微软倡导的网络化多媒体对象技术”,实际上它是一整套跨越编程语言的软件开发方法与规范。
用VisualBasic的Communications控件实现串行通信-2019年精选文档
ations 控件实现串行通信1.引言Visual Basic (以下简称VB )是一般程序设计人员在Windows 环境下最常用的编程语言。
在 VB 中除了可以调用 API 函数,完成串行通信的任务之外,更常用、更简便的是使用 提供的Communications 控件(以下简称Comn 控件)来完成各种 串行通信任务。
2. VB 的Comr 控件2.1 Com m 控件的添加Comm 控件并不是VB 的基本控件,刚进入 VB 环境中时,在控件工具箱上是找不到 Comn 控件的,要使用它必须另行添加,添加的方法如下:用鼠标右击VB 的控件工具箱,在弹出菜单中选择"部件…"菜单项,会出现一个"部件…"对话框,勾选其中的"MicrosoftComm Control6.0"选项,在VB 的控件工具箱中会出现一个电话2.2 Comm 控件概述 Comm 控件用于进行串行通信,既可以用来提供简单的串行端口通信功能, 也可以用来创建功能完备的、 事件驱动的高级通 信工具。
Comm 空件提供了一系列标准通信命令的使用界面。
使用它用Visua Basic 的CommunicVB 机形状的控件图标,它就是进行串行通信要使用的Comr 控 件。
可以建立与串行端口的连接,通过串行端口连接到其他通信设备(如MODEM,发出命令,交换数据以及监视和响应串行连接中发生的事件和错误。
利用它可以进行诸如拨打电话、监视串行端口的输入数据乃至创建功能完备的终端程序等功能。
2.3 Comm 空件的重要属性1)CommPor:t 设置或返回通信端口号,其取值范围为1〜99,缺省为1。
当把这个属性设置成1,表示利用COM1 端口进行串行通信。
在程序运行时也可以读取该属性, 用来了解串行端口的使用情况。
2)Settings :用字符串的形式设置或返回串行通信的帧格式。
例如将Settings设置为"9600, n, 8, 1",表示采用的串行通信波特率是9600、无奇偶校验、数据位是8 位、 1 位停止位。
基于VCMSComm控件的串行通信
基金项目:航空工业部技改资助项目作者简介:杨海涛( ),男,河南孟津人,硕士生 收稿日期:文章编号: ( )基于 控件的串行通信杨海涛 ,张自强( 河南科技大学电子信息工程学院,河南洛阳 ; 上海师范大学机械与电子工程学院,上海 )摘要:在介绍 平台下串行通信机理的基础上,讨论了基于 控件进行串行通信的方法。
通过 控件为串行数据通信提供的各种协议,以及使用该控件事件驱动方式,处理和解决了通信软件的开发设计问题,方便而快捷地实现了串行通信功能。
最后通过实验对程序进行了调试。
关键词:计算机通信;数据通信;程序设计中图分类号:文献标识码:前言随着微机网络和多微机系统的广泛应用,接口通讯技术已成为十分关键的技术[ ]。
许多杂志上已有很多介绍串口编程的文章,但很少有详细介绍在 环境下基于 控件进行串行通信的资料。
本文通过一个实例来说明在可视化语言 中,如何使用 进行串行数据通信。
串行通信在远程通信时可减少通信线路费用,能避免众多连线间的信号干扰,充分保障了通信的可靠性,因而倍受设计者的青睐。
在信号接收和发送过程中,对端口的数据采集和数据发送的方法虽有不少,但许多方法或过于复杂[ ],或存在局限性[ ],而 控件在串行通信的软件中集便捷性、可靠性、实时行、准确性于一身,使得串行通信系统的设计操作方便、快捷、实用成为可能。
基于 控件的串行通信串行通信系统终端设备和计算机之间或计算机之间串行数据通信系统的基本构成如图 所示。
数据终端 ()可以是计算机或打印机。
数据电路终结设备( )可以是调制解调器( ),也可以是简单的线路驱动器。
通常在计算机标准接口上外加一个专门的转换器,使 和 或 相连进行远距离传输。
当通信距离较近时(小于 )可用电缆将两台设备直接相连。
在通信过程中双方必须共同遵守通信协议,它对数据格式、同步方式、传送速度、传送顺序、检查纠错方式以及控制字符定义等问题作出统一规定。
该协议属于 (国际标准化组织)的 (开放系统互联)七层参考模型中的数据链路层。
用Visual C++编制串行通信程序
用Visual C++编制串行通信程序摘要: 本文介绍了在Win32环境下用Visual C++的MFC实现串行通信方法,用类实现多线程编程,较好地将32位串口通信的API函数封装在一个类中实现串行通信,并给出示例程序。
关键词:串行通信多线程 Visual C++ MFC随着计算机应用深入,经常需要通过计算机RS-232串口与外部设备通信,采集如温度、压力、重量等模拟数据,或发出控制信息,用Visual C++编制串行通信程序可有三种方法:1、采用Microsoft Win32应用程序编程接口(API)所提供串行通信函数,用SDK思路编写。
2、用ActiveX通讯控件开发串行通信程序。
3、用C++的MFC思路,将Win32串口通信的API函数封装在一个类中实现串行通信。
前两种方法己有不少刊物已作过介绍,方法各有利弊,而第三种方法较为繁琐,不仅要了解Win32位串行通信的API函数,还要掌握多线程编程,但控制灵活,既涉及到底层编程、纠错能力强,又有C++风格,为专业C++开发人员所采用。
本文就在Win32环境下串行通信、多线程编程概念作简单叙述,并给出相应的示例程序,以供参考。
一、串口通信1.串口通信步骤:一般编制串行通信程序分四个部分:A 打开串行端口:打开通信资源,设置通信参数、设置通信事件、创建读、写事件、进入等待串口消息循环。
B 读取串行端口信息,当串口发生EV_RXCHAR(接收到字符并放入了输入缓冲区)消息后读取串口、数据传输错误处理、字符串处理如回车符、空格并相应转化成数据,如果模拟量还要进行数据检验等功能。
C 写串行端口信息:将要发送的信息写入串口,相应进行错误处理。
D 断开串行端口连接:关闭事件,清除通信事件,丢弃通信资源并关闭。
2.串口通信函数在Win32环境下,由于Windows禁止应用程序直接和硬件打交道,所以程序员只能用Win32 API提供的串行通信函数与串行端口打交道,主要函数有:打开、关闭通信资源CreateFile();CloseHandle( );设置通信资源SetCommState(()等待串口事件WaitCommEvent()创建、关闭事件对象 CreateEvent();CloseHandle()串口读写ReadFile(),WriteFile()以上函数具体如何使用见示例或联机帮助。
多线程与串行通信
多线程与串行通信Windows是一个多任务操作系统。
传统的Windows 3.x只能依靠应用程序之间的协同来实现协同式多任务,而Windows 95/NT实行的是抢先式多任务。
在Win 32(95/NT)中,每一个进程可以同时执行多个线程,这意味着一个程序可以同时完成多个任务。
对于象通信程序这样既要进行耗时的工作,又要保持对用户输入响应的应用来说,使用多线程是最佳选择。
当进程使用多个线程时,需要采取适当的措施来保持线程间的同步。
利用Win 32的重叠I/O操作和多线程特性,程序员可以编写出高效的通信程序。
在这一讲的最后将通过一个简单的串行通信程序,向读者演示多线程和重叠I/O的编程技术。
多任务、进程和线程线程的同步串行通信与重叠I/O一个通信演示程序小结12.1.1 Windows 3.x的协同多任务在16位的Windows 3.x中,应用程序具有对CPU的控制权。
只有在调用了GetMessage、PeekMessage、WaitMessage或Yield后,程序才有可能把CPU控制权交给系统,系统再把控制权转交给别的应用程序。
如果应用程序在长时间内无法调用上述四个函数之一,那么程序就一直独占CPU,系统会被挂起而无法接受用户的输入。
因此,在设计16位的应用程序时,程序员必须合理地设计消息处理函数,以使程序能够尽快返回到消息循环中。
如果程序需要进行费时的操作,那么必须保证程序在进行操作时能周期性的调用上述四个函数中的一个。
在Windows 3.x环境下,要想设计一个既能执行实时的后台工作(如对通信端口的实时监测和读写),又能保证所有界面响应用户输入的单独的应用程序几乎是不可能的。
有人可能会想到用CWinApp::OnIdle函数来执行后台工作,因为该函数是程序主消息循环在空闲时调用的。
但OnIdle的执行并不可靠,例如,如果用户在程序中打开了一个菜单或模态对话框,那么OnIdle将停止调用,因为此时程序不能返回到主消息循环中!在实时任务代码中调用PeekMessage也会遇到同样的问题,除非程序能保证用户不会选择菜单或弹出模态对话框,否则程序将不能返回到PeekMessage的调用处,这将导致后台实时处理的中断。
利用VC中的通讯控件开发串形通信程序
由于需要我们开发了前置机应用程序,实现功能就是将前置机里存放的信息取出来用计算机进行处理,该程序是利用VC在WIN98下开发而成,对串口的访问是通过VC中的通讯控件主要完成的。
通讯程序开发不仅涉及对串口的访问,还牵涉多线程编程24小时运行等问题,是编程中令人头疼的问题。
本文中只介绍利用控件对串口的访问。
为了说明控件的应用,这里特编制两台计算机通过串口进行信息交换的小程序,来介绍通讯控件的具体运用。
1.控件程序的实现启动Microsoft 5.0,利用Appwizards建立一个新的基于对话框的project,选名commtest,其中第二步选择ActiveX Control选项,证明支持控件功能,其他都选择缺省,这样就建立了一个基于对话框的应用程序。
然后将通讯控件加入应用之中,在对话框资源上点击鼠标右键,选择Insert ActiveX Control然后在控件选择对话框中选择Microsoft Communictions Control,V ersion5.0,然后选择Insert插入一个类似电话机的控件,然后点击该控件就可以修改和设置控件特性。
按Add to Project选项中Registered ActiveX Control选项然后在控件选择对话框中选择Microsoft Communictions Control,V ersion5.0,将通讯控件两个程序Mscomm.h和Mscomm.cpp加入project当中。
这样就把通讯控件加入了应用程序当中,可以应用该控件进行编程了。
2.通讯控件的各属性的含义:w10 属性设定值说明ComPort1串口号Settings9600,n,8,1串口的参数设置,依次为波特率、奇偶校验、数据位数、停止位数InBufferSize1024接收缓冲区大小InputLen0从接收缓冲区读取的字节数,0表示全部读取InputMode1接收数据的类型,0表示文本类型,1表示二进制类型OutBufferSize1024发送缓冲区大小RThreshold1设定当接收几个字符时触发OnComm事件,0表示不产生事件,1表示每接收一个字符就产生一个事件SThreshold0设定在触发OnComm事件前发送缓冲区内所允许的最少字符数,0表示发数据时不产生事件,1表示当发送缓冲区空时产生OnComm事件通讯控件的属性很多,这里只是介绍其中的几种,可以根据自己的需求选择加以设置调整,对于其他属性可以查看VC帮助和联机手册。
串行通信的基本原理
本文详细介绍了串行通信的基本原理,以及在Windows NT、Win98环境下用MFC 实现串口(COM)通信的方法:使用ActiveX控件或Win API.并给出用Visual C++6.0编写的相应MFC32位应用程序。
关键词:串行通信、VC++6.0、ActiveX控件、Win API、MFC32位应用程序、事件驱动、非阻塞通信、多线程.在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。
计算机和单片机(如MCS-51)都具有串行通信口,可以设计相应的串口通信程序,完成二者之间的数据通信任务。
实际工作中利用串口完成通信任务的时候非常之多。
已有一些文章介绍串口编程的文章在计算机杂志上发表。
但总的感觉说来不太全面,特别是介绍32位下编程的更少,且很不详细。
笔者在实际工作中积累了较多经验,结合硬件、软件,重点提及比较新的技术,及需要注意的要点作一番探讨。
希望对各位需要编写串口通信程序的朋友有一些帮助。
一.串行通信的基本原理串行端口的本质功能是作为CPU和串行设备间的编码转换器。
当数据从 CPU经过串行端口发送出去时,字节数据转换为串行的位。
在接收数据时,串行的位被转换为字节数据。
在Windows环境(Windows NT、Win98、Windows2000)下,串口是系统资源的一部分。
应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。
串口通信程序的流程如下图:二.串口信号线的接法一个完整的RS-232C接口有22根线,采用标准的25芯插头座(或者9芯插头座)。
25芯和9芯的主要信号线相同。
以下的介绍是以25芯的RS-232C为例。
①主要信号线定义:2脚:发送数据TXD; 3脚:接收数据RXD; 4脚:请求发送RTS; 5脚:清除发送CTS;6脚:数据设备就绪DSR;20脚:数据终端就绪DTR; 8脚:数据载波检测DCD;1脚:保护地; 7脚:信号地。
在VC++中用ActiveX控件实现与单片机的串行通信
在VC++中用ActiveX控件实现与单片机的串行通信在VC++中用ActiveX控件实现与单片机的串行通信摘要:详细论述在VC++6.0中使用ActiveX控件通过串口与单片机进行二进制数据传输的具体方法。
关键词:VC++ ActiveX 串行通信在单片机应用系统中,经常需要通过RS-232串行口与微机进行通信。
目前在各种操作系统中,Microsoft的Windows较为常见,而且大多为Windows95/98等32位平台。
以往在Windows平台上的串行通信多使用其提供的API函数来实现,这种方法使用起来需要许多底层设置,因而较为繁琐,并且难以理解。
Microsoft推出的ActiveX 技术提供了另外一种实现串行通信的方法。
这种方法不仅相对较为简单,而且非常实用。
尤其是Visual C++这种可视化面向对象的编程环境中,可以真正把串口看作一个对象,编程时只需简单的设置,理解起来也很容易。
下面详细讨论Microsoft提供的串行通信ActiveX控件的使用方法。
该控件的相应文件是MSCOMM32.OCX,以下简称为MSCOMM控件。
一、MSCOMM控件MSCOMM控件,即Microsoft Communication Control,是Microsoft为简化Windows下串行通信编程而提供的ActiveX控件。
它提供了一系列标准通信命令的使用接口,利用它可以建立与串口的连接,并可以通过串口连接到其他通信设备(如调制解调器),发出命令,交换数据以及监视和响应串行连接中发生的事件和错误。
MSCOMM控件可用于创建电话拨号程序、串口通信程序和功能完备的.终端程序。
MSCOMM控件提供了两种处理通信的方式:(1)事件驱动方式。
当通信事件发生时,MSCOMM控件会触发OnComm事件,调用者可以捕获该事件,通过检查其CommEvent 属性便可确认发生的是哪种事件或错误,从而进行相应的处理。
这种方法的优点是响应及时、可靠性高。
串口通讯方法的三种实现
串口基本信息用一台电脑实验串口自发自收,实验前要将串口(以9针为例)的发送引脚(2脚)和接受引脚(3脚)短接。
三线连接:适用于计算机之间尤其是PC机和单片机之间的数据通信。
其连接信号对为(TxD,RxD)、(RxD,TxD)、(SG,SG)。
即发送数据TxD端和接受数据RxD端交叉连接,信号地SG对应连接。
七线交叉连接:适用于同型号的计算机之间的连接,如PC机间的数据通信。
其连接信号对为:(TxD,RxD)、(RxD,TxD)、(SG,SG)、(RTS,CTS)、(CTS,RTS)、(DSR.DTR)、(DTR,DSR)。
其中,TxD、RxD、SG与前面信号的含义相同,RTS为请求发送,CTS为准许发送,DSR为数据装置准备好,DTR为数据终端准备好。
在本地连接的微机系统中,RTS、CTS、DTR、DSR用作硬件联络控制信号。
目前使用的串口连接线有DB9和DB25两种连接器,用户可以国家使用的具体机器选择相应的连接器。
一个串口通讯类在/network/serialport.shtml。
PC机的RS-232接口的电平标准是-12V标示“1”,和+12V表示“0”,有些单片机的信号电平时TTL 型,即大于2.4v表示“1”,小于0.5v表示“0”,因此采用RS-232总线进行异步通信是,发送端和接受端要有一个电平转换接口。
串口通讯方法的三种实现串口是计算机上一种非常通用的设备通信协议。
大多数计算机包含两个基于RS232的串口。
串口同时也是仪器仪表设备通用的通信协议;很多GPIB兼容的设备也带有RS一232口。
同时,串口通信协议也可以用于获取远程采集设备的数据。
串口通信(Serial Communication),是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
串口通信方便易行,应用广泛。
在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。
最新-在VC++中用ActiveX控件实现与单片机的串行通信 精品
在VC++中用ActiveX控件实现与单片机的串行通信摘要详细论述在++60中使用控件通过串口与单片机进行二进制数据传输的具体方法。
关键词++串行通信在单片机应用系统中,经常需要通过-232串行口与微机进行通信。
目前在各种操作系统中,的较为常见,而且大多为9598等32位平台。
以往在平台上的串行通信多使用其提供的函数来实现,这种方法使用起来需要许多底层设置,因而较为繁琐,并且难以理解。
推出的技术提供了另外一种实现串行通信的方法。
这种方法不仅相对较为简单,而且非常实用。
尤其是++这种可视化面向对象的编程环境中,可以真正把串口看作一个对象,编程时只需简单的设置,理解起来也很容易。
下面详细讨论提供的串行通信控件的使用方法。
该控件的相应文件是32,以下简称为控件。
一、控件控件,即,是为简化下串行通信编程而提供的控件。
它提供了一系列标准通信命令的使用接口,利用它可以建立与串口的连接,并可以通过串口连接到其他通信设备如调制解调器,发出命令,交换数据以及监视和响应串行连接中发生的事件和错误。
控件可用于创建电话拨号程序、串口通信程序和功能完备的终端程序。
控件提供了两种处理通信的方式1事件驱动方式。
当通信事件发生时,控件会触发事件,调用者可以捕获该事件,通过检查其属性便可确认发生的是哪种事件或错误,从而进行相应的处理。
这种方法的优点是响应及时、可靠性高。
2查询方式。
在程序的每个关键功能之后,可以通过检查属性的值来查询事件和错误。
如果应用程序较小,这种方法可能更可取。
例如,如果写一个简单的电话拨号程序,则没有必要每接收1个字符都产生事件,因为惟一等待接收的字符是调制解调器的"确定"响应。
在使用控件时,1个控件只能同时对应1个串口。
基于多线程的多串行通信任务的实现
第 2 6卷 第 5期
20 0 2年 1 0月
武汉理工大学学报 鸯 袭 ) (垩 差
J u n lo u a ie st fTe h oo y o r a fW h n Un v r i o c n l g y
( rnp rainS ine& E gneig T a sott c c o e n ier ) n
因素进行 了探讨 . 有效地解 决了在 串口通 信中 的实 时响应问题 , 降低 了数 据丢失率 , 提高 了系统 的
可靠性.
关 键 词 : 行 通 信 ; I 2 I多 线程 ; 件 驱 动 ; 串 W N3 AP ; 事 同步
中 圈 法分 类 号 : TP3 3 0 9.4
1 系 统 组 成及 原 理
d ws 允许 程序 开 发人 员直 接 和 硬件 打 交 道 , o 不 在 串行 通信 方 面提 供 了一 组 AP I系 统 函数 来 管 理 串 口. Wi9 操作 系统 中 , 串行 通 信设 备 的 在 nX 对 操作 和 文件 的操作 相 同 , 得 应用 程 序 工作 于“ 使 事
1 1 系统组 成 结构 .
1 2 系统 的工作 原理 L . l q]
由于 Wid ws是 一 个 基 于 消 息 驱 动 的操 作 no 系统 , 的很 多 消息 是从 硬 件 反 馈 过 来 的. i— 它 W n
图 1所 示 为某 企业 P C控 制 网络和 P L C管理 网络 通 信 系统 的 结构 图 ,O多条 皮带 运 输 机 由中 2
可 以采用 硬 握 手 和 软 握手 两种 方 式 , 目前 常 用 的 是 软 握手 的三 线 制 方式 , “ 叉 技 术 ” TXD, 即 交 的
基于ActiveX控件的串口通信技术
调用 WriteHDLCData 方法实现以 HDLC 格式发送数据的
功能,此方法串口发送的数据除待发送的数据外,还添加了
HDLC 协议数据:
BYTE bData[10]; // 待 发 送 的 数 据 区 for (int i =
0;i < sizeof(bData),i++) bData[i] = i;// 数据区赋
开发人员的大部分工作在 C HD CM Ctrl 中,例如用 Class Wizard 添加属性、方法和事件,处理显示等。
编 译 生 成 OCX 文 件 后 , 用 VC 提 供 的 ActiveX Test Container 测试这个控制。
(2)使用 ATL,由于不涉及 MFC 的标准类库,生成的控制 相对较小,但开发者必须了解 COM,OLE 技术的细节。大多数 情况下,可以使用 MFC 开发 ActiveX 控制,这样比较容易。
1) 用 VC 开发 ActiveX 文档服务器 MFC4。 2) 不支持开发 ActiveX 容器,但支持 ActiveX 服务器。 在使用 MFC APP。 Wizard 生成应用程序框架时,选择支持 Active Docu- ment,就可以生成标准的 ActiveX 文档服务器。运行此应用 程序时,该文档对象将自动注册。 ISAPI(Internet Server API)。ISAPI 过滤器提供了扩 展支持 Web 服务器的简单有效的方法,提供了对服务器和客 户之间传递的数据进行预处理的功能。它的作用是监视服务 器与客户端的事件。当预先指定的某事件发生时,过滤器被 调用,对要传递的数据进行加密,压缩,或者身份认证。 2.3 采用 ActiveX 控件串口编程的基本流程 使用 ActiveX 控件的应用程序和 ActiveX 控件之间的 工作方式是客户 / 服务器方式,即应用程序通过 ActiveX 控 件提供的接口来访问 ActiveX 控件的功能。 ActiveX 控 件 设 计 的 核 心 思 想 : VC++6.0 提 供 了 Ac-
在VC++中利用ActiveX控件开发串行通信程序
在VC++中利用ActiveX控件开发串行通信程序在开发微机控制系统的过程中,我们常常需要通过RS-232串行接口与外部设备举行通信。
例如分级控制系统中上位机与下位机的数据交换以及数据采集系统中计算机与数字仪表的通信等。
在DOS时代,编写串行通信程序是一件相当复杂的工作,程序员需要具备相当的硬件学问,对可编程串行通信接口芯片的内部寄存器定义、工作方式、命令字等相关内容有所了解,才有可能着手编写程序,大量的时光和精力都花在了如何与硬件打交道上,而不是花在我们的主要目的——猎取与处理数据上;在Windows下,Win32API提供了用法CreateFile/WriteFile等文件I/O 函数举行串行口操作的办法,但是在实现上仍然是相当烦琐的。
幸运的是,Windows平台先进的ActiveX技术使我们在对串行口编程时不再需要处理烦琐的详情。
利用已有的ActiveX控件,我们只需要编写少量的代码,就可以轻松高效地完成任务。
本文以Windows 98下用Visual C++6.0开发PT650C秤重的通信模块为例,探讨了用法Microsoft Communications Control控件举行串行通信的办法。
1 ActiveX控件介绍ActiveX是Windows下举行应用程序开发的崭新技术,它的核心内容是组件对象模型COM(Component Object Model)。
ActiveX控件包括一系列的属性、办法和大事,用法ActiveX控件的应用程序和ActiveX 控件之间的工作方式是客户/服务器方式,即应用程序通过ActiveX 控件提供的接口来拜访ActiveX控件的功能。
Microsoft Communications control(以下简称MSComm)是Microsoft 公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便办法。
基于ActiveX控件及多线程的串行通信
基于ActiveX控件及多线程的串行通信
李海燕
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2010(000)016
【摘要】详细介绍了基于Activex控件和多线程的串行通信模块的设计方案,分析了串行通信中所要求的实时性、更高效率的执行时间、存储空间、较短开发周期和较高可靠性、并发性等各种因素,以面向对象的分析和设计为指导,实现了一个封装完整的、具有数据收发和协议处理功能的ActiveX控件,实现了基于多线程技术串行通信.
【总页数】3页(P85-87)
【作者】李海燕
【作者单位】广东外语艺术职业学院信息技术系,广州,510640
【正文语种】中文
【相关文献】
1.基于自定义多线程串口类的串行通信 [J], 宋菲
2.用Windows API设计多线程的串行通信ActiveX控件 [J], 雷鹏;陈星
3.基于ActiveX控件及多线程的串行通信 [J], 李海燕
4.基于ActiveX控件实现Windows 9x环境下异步串行通信 [J], 汪慧英;马学童;王磊
5.基于VC++和ActiveX控件的PT650C电子秤重显示器串行通信接口程序设计[J], 黄海荣;李鹰;田作华
因版权原因,仅展示原文概要,查看原文内容请购买。
基于多线程的串口通信软件的设计与实现
基于多线程的串口通信软件的设计与实现作者:邰斌高坤来源:《科学与信息化》2017年第24期摘要串行通信是各类通信方式中最基本、最常用、最可靠的一种,具有实现简单、使用灵活、数据传输可靠等优点,因此采用串口通信实现计算机与其他设备的通信在系统检测、数据采集和实时监控等系统中的应用越来越广泛。
文中采用VC++开发软件,利用多线程串口编程工具CSerial Port类进行串口通信设计与实现,开发一种通信测试软件。
测试结果表明,数据交换正常,系统运行稳定可靠。
除此之外,该软件还可以作为串口调试助手使用。
关键词基于多线程;串口通信软件的设计;实现前言串口应用是一种常见的应用技术,无论是在工业控制领域,还是其他行业,其应用屡见不鲜。
作为计算机与外部串行设备之间常用的数据传输通道,在很多工业控制系统中,通常要求系统具有实时计算能力,串口能够满足高效中断处理、多任务和通信的需要。
在作者参与设计的项目中,将多线程技术应用于串口通信中,在收发数据的同时执行海量数据的存储、图形绘制等任务,提高了资源的利用率。
1 系统硬件及其通信协议1.1 通信硬件连接串行接口是计算机与外部设备之间进行数据传输的一种接口(简称串口)。
美国电子工业协会(EIA)订制并发布的串行数据接口标准主要有RS-232,RS-422和RS-485。
其中,RS-232被定义为在低速串行通信中增加通信距离的单端标准,即单端通信标准,被广泛应用于计算机串行接口外设连接。
由于其传输的最大距离约为15 m,最高传输速率为20 kb/s,所以RS-232适合本地设备间的通信。
1.2 通信协议通信协议是通信双方为了完成通信或服务所必须遵循的规则和约定。
该系统中所编制的通信协议主要有测试软件与道岔驱动板间通信协议和测试软件与信号机驱动板间通信协议[1]。
系统要求PC机输出格式为串行异步全双工RS-232电气接口标准,要求测试软件每隔250 ms 定时发送一次数据,并且同时发送和接收正码和反码两帧数据,正反码帧数据间延时20ms,通信序号在0X00-0XFF范围内连续递增。
基于VC_的多线程技术在串行通信中的应用
page 2
7 小结 本程序利用 MSCOMM 控件及多线程技术实现了对于多个 电视频道的实时控制。 其界面如图 2 所示。当鼠标点击选中的 频道变成黄绿色时, 可观察该频道的控制参 数, 也可进行参数 调节,同时,后台线程可按设定时间周期性扫描。本程序在 VC+ +6.0 下编译通过, 且运行良好。 6 多线程在串口通信中的应用 6.1 串口通信对线程同步的要求 因为同一进程的所有线程共享进程的虚拟地址空间, 而在 Windows 9X/NT 系统 下线程是汇编级中断,所以有可能多个线 程同时访问同一个对象。这些对象可能是全 局变量, MFC 的对 MFC 的 API 等。串口通信的几个特点决定了必须采用措施 象、 来同步线程的执行。 串口通信中, 对于每个串口对象, 只有一个缓冲区, 发送和 接收都要用到, 必须建立起同步机制, 使得在一个时候只能进 行一种操作, 否则 通信就会出错。 进行串口通信处理的不同线程之间需要协调运行。如果一 个线程必 须等待另一个线程结束才能运行, 则应该挂起该线程 以减少对 CPU 资源的占用,通 过另一进程完成后发出的信号 (线程间通信)来激活。 VC++提供了同步对象来协调多 线程的并行,常用的有以 下几种: CSemaphore: 信号灯对象, 允许一定数目的线 程访问某个 共享资源, 常用来控制访问共享资源的线程数量。 图 2 程序界面 参考文献: [1] John E. Swanke. Visual C++ MFC 扩展编程实例.机械工业出 版社,2000,1 [2] 龚建伟, 熊光明.Visual C++/Turbo C 串口通信编程实践(第 2 版). 电子工业出版社, 2007, 9 胡仁杰, 徐日升.用 VC++多线程技术实现 PC 串 口 [3] 戴红梅, 全双工通讯.电测与仪表, 2000, 11 (作者单位: 华南师范大学 物理与电信工程学院 ) 59 广东科技 2010.1 总第 2 BD30AV 系统连接框图 3 BD30AV 通信协议 数据头:0xAA 数据包长度信息:LENGTH = n, (n>=6 ) 命令标志符: 0x01, 送延时数据。 data0= [0,7];data1= [0,24] 1 本项目受广东省科技计划工业攻关项目资助,项目编号:2008B010200042 , 2009B010800051 ,2009B010900056 58 广东科技 2010.1 总第 229 期 气象、 防雷、 通信、 通讯与电子 学界 nateThread( )退出; 线程所属的进程被终止。 工作者线程倾向于琐碎的处理 , 用户界面线程则具有自己 的界面而且实际上类似于运行其他应用程序。多线程的 实现可 以使得各端口独立, 准确地实现串行通信, 使串口通信具有更 广泛的灵活 性与严格性, 且充分利用了 CPU 时间。 本系统中, 计 算机通过串口循环扫描多台 BD30AV, 以提供给工作人员需查 后 询和监控的各个电视台的信息。前者通过工作 者线程实现, 者则需通过用户界面线程显示, 如两者没有处理好很容易引起 死机的 现象。 Cmutex: 互斥量对象, 一个时刻至多只允许一个线程访问 某资源, 未被占用 时处于有信号状态, 可以实现对共享资源的 互斥访问。 CEvent: 事件对象, 用于 使一个线程通知其他线程某一事 件的发生, 所以它也可以用来封锁对某一资源的访 问, 直到线 程释放资源使其成为有信号状态。适用于某一线程等待某事件 发生才能 执行的场合。 CCriticalSection: 临界区对象, 将一段代码置入临界区, 只 允许 最多一个线程进入执行这段代码。一个临界区仅在创建它 的进程中有效。 5 MScomm 控件 VC++是可视化面向对象的编程环境,提供了串行通信 ActiveX 控件 MSCOMM, 可以真正把串口看作一个对象。 该控件 的相应文件是 MSCOMM32.OCX,它提供了一系 列标准通信命 令的使用接口, 利用它可以建立与串口的连接, 并可以通过串 口连 接到其他通信设备 (如调制解调器) 发出命令, , 交换数据 MSCOMM 控件 以及监 视和响应串行连接中发生的事件和错误。 提供了两种处理通信的方式: (1 事件驱 动方式。 ) 当通信事件发生时, MSCOMM 控件会触 发 OnComm 事件,调用者可以捕 获该事件,通过检查其 Com- mEvent 属性便可确认发生的是哪种事件或错误, 从而 进行相应 可靠性高。 的处理。这种方法的优点是响应及时、 (2 查询方式。在程序 的每个关键功能之后, ) 可以通过检查 CommEvent 属性的值来查询事件和错误。 在使用 MSCOMM 控件时, 个 MSCOMM 控件只能同时对 1 那么必 应 1 个串口。如果 应用程序需要访问和控件多个串口, MSCOMM 控件只对应 须使用多个 MSCOMM 控件。 在 VC++中, 着 1 个 C++类--CMSComm。由于 MSCOMM 控件本身没有提供 ( 成员函 数外, 其他的函数 方法, 所以 CMSComm 类除了 Create ) 都是 Get/Set 函数对 , 用来获取或设置控件的属性。 MSCOMM 控 用来向调用者通知有通信事件发 件也只 有 1 个 OnComm 事件, 生。MSCOMM 控件有许多属性, 限于篇幅只给出几个较为重 要 和常用的属性。如 CommPort: 通信端口号; Settings: 以字符串形 奇偶校验 、 数据位; PortOpen: 通信端口的状 式表示的波特率、 态,打开或是关闭; In put:接收数据; Output:发送数据; Input- Mode: 接收数据的类型: 为文本; 为二进制。 0 1 6.2 等待函数 Win32 API 提供了能使线程阻塞其自身执行的等待函数, 等待其监视的对象产 生一定的信号才停止阻塞, 继续线程的执 行。 其意义是通过暂时挂起线程减少对 CPU 资源的占用。 在某 些大型监控系统中,串口通信只是其中事务处理的一部分, 所 以必须考虑程序执行效率问题, 当串口初始化完毕后, 就使其 处于等待通信事 件的状态, 减少消耗的 CPU 时间, 提高程序运 行效率。 常用的等待函数是 Wait ForSingleObject( )和 WaitForMulti- pleObjects( ), 前者可监测单个同步对象 , 后者可同时监测多个 同步对象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在用 Vsa c + i l + 编程 实现读卡 的多线程操作时 ,先调用端 u 口关 闭函数 以关 闭 当前工作 读卡器所在 端 口 ,然后调 用端 口 打开函数打开 下一个等待 工作的读卡器 ;再 检测 当前 读卡器
是否有 I c卡数据需要 读取 ,如果读 到了数据 ,பைடு நூலகம்先进入 临界
a a y e te f co s s c s r a - i e oma c , ih r ef i n y i h x c t n t , tr g p c ,s o tr d v l p n l z h a tr u h a e l t me p r r n e h g e f c e c n t e e e u i i f i o me so a e s a e h r e e o — e
N 0 KA DCM U IA【 EW R N 0 M NCT0 r N
网络与通信
基于 A t e c vX控件及 多线程的 串行 通信 i
李 海燕
( 广东外语艺术职业学院信息技术 系,广州 5 04 ) 6 0 1
摘 要 : 详 细介 绍一个基 于 A t e ci X控件和 多线程的 串行 通信模块 的设 计方案 ,分析 了串行通 信 中所要 求的 实时 v
S r e m m u i a i n Ba e n Ac i e Co t o lr a d M u tp e e i sCo n c t s d o tv X n r l n o e li l
Thr a ed
LIH a y n ia
( e at n f noma o eh oo y, u n d n eces o eeo oe nL n u g n t G agh u 50 4 ) D pr me t fr t nT cn lg G ag o gT ahr H g f ri a g aeadAr oI i C F g s, u nz o 16 0
性 、更 高效 率的执行 时间、存储 空间、较短 开发 周期和较 高可靠性等各种 因素 ,以面向对象的分析和设计 为指 导 ,
实现 了一个封装完整 的、具有数据收发和协议 处理功 能的 A t e ci X控件 ,并实现基于多线程技术 串行通信 的方法。 v
关 键 词 : 多线程 ;串行 通 信 ; cvX控 件 A te i
能满足 高实时性 的要求 ,为提高效率 ,需要 在 串行 通信程序 中引入 多线程机 制 。再者 ,在一卡通 通信 中 ,常会 碰到要处 理异 步 、突发 的通信请求 而用户进程 不能及 时反应 ,易造 成 通信 出错的现象 ,因此需 要程序 中使 用多线 程 ,从 而在功 能 上提高串行通信中的实时性 和可靠性 。
区 ,再调用 队列的写数据 方法 ,将卡 号信息 写入 队列 中 ,最 后退 出临界 区完成一次读 卡操作 。
根据 P C机所挂 的读卡器数量 ,只需一定程度地调高读 卡 线 程的优先级 ,就能使得 所有读卡器 在一个 短的 时间内 ,近
1 一卡 通通 信 的多线 程技 术
1 串行通信设计 . 1 多线程是 Widw 系统支持 的一项十分重要 的功能 ,特别 nos
me t y l d hg e eibl y whc r e n e nteS r sCo n ce a ih rrl it, ih aed ma d di e e mmu iain c n a i h i nc t .Moe v r wi be toine n yi o ro e, t o ic— re td a a ss h l
Ke r s:Mu i l h e d ; e e o y wo d hpeT ra S r s C mmu ia in ; t e Co t l r i nc t o Ac i X n r l v oe
在开发微机控制系统的过程 中,经常需要通过 R 一 3 S 22串 行接 口与外部设备进行通信 ,如果采用 A t e ci X控件技术将使 v
n e in we i lme ta Aci X c n r l wh c o t e d t e ev n n e d n n r tc l r c s i . a d d sg mp e n t e o t l ri i h b t h aa r c ii g a d s n i g a d t e p oo os p o e s g A n v oe n h h n n w t o o e is C mmu ia o a e n Mut l h e d i a h e e . e meh d f rS r o e n c t n b s d o l p e T r a c iv d i i s
应用开发 者只需要 关心数据 的业务逻 辑处理 ,编写少 量的代
取 ,如果使用 多线 程技术 ,接收数据 和发送数 据采用 不 同的 线程处理 ,将会 提高通信效率 。
1 . 卡线程工作流程 . I读 2
码即可轻松高效地完成 与设备 的通信任务。 在开发一 卡通系统 项 目时由于一 卡通布线 环境 复杂 ,通
Ab ta t n t i p p r a S re o sr c :I l s a e , e s C mmu ia in mo ue b s d o t e c n r l ra d Mu t l h e d i p o o e . e l i n c t d l a e n Ac i X o t l n l p e T r a S r p s d W o v oe i