Windows平台上的串行通信简介 -电脑资料.

Windows平台上的串行通信简介 -电脑资料
2019-01-01
Windows平台上的串行通信简介
1.使用VC编程
利用VisualC++编写串行通信程序可借助于
API(ApplicationProgramInterface)函数,。

Windows9x及更高版本的通信函数为32位。

涉及到串行通信的APl函数主要有以下几个:
打开通信资源(包括通信口)使用CreateFile(),通信资源被看成一个文件。

该函数有7个自变量。

对通信口的设置涉及3个函数:SetupComm()使用来设置发送和接收缓冲区的大小;GetCommState()可用来获取串行通信设备控制块DCB结构的当前状态;SetCommState()用来对通信口进行自己的设置。

发送数据使用WriteFile()函数。

读接收到的数据使用ReadFile()函数。

清除通信错误并通信口当前状态使用ClearCommError()函数。

指示通信口进行某种扩充功能(如发送DTR信号)使用EscapeCommFunction()函数。

这些函数的说明可参看
VisualStudioMSDN(MicrosoftDeveloperNetwork),
《》()。

2.使用VIi编程
Visualc++3.0(VB)及以上的专业版、企业版都提供了一个通信控件,5.O 版本以后称之为MSComm。

利用该控件可很方便地实现RS-232通信。

下面是一个很简单的程序示例,读者从注释中不难理解它的作用。

这里假定事先已定义Comml为MSComm类型的对象。

Comml.CommPort=2指定Comml是COM2口
Comml.Settings="9600,n,8,l设置通信参数Comml.InputLen=0读取接收数据时,一次读取所有已收到的字符Comml.PortOpen=True打开COM2
Comml.DTREnable=True置DTR
Comml.RTSEnable=True置RTS
Comml.Output=TestCommunication发送一字符串
Do循环等待,直到接收到5个以上的字符为止
DoEvents此期间将控制权交还给Windows,以响应其他事件LoopUntilComml.InBufferCounter>=5
InString$=Comml.Input读收到的字符,赋给变量InString$。

合集下载

基于Windows CE的掌上设备与GPS接收机的串行通信

基于Windows CE的掌上设备与GPS接收机的串行通信

p e e t n i d w sCE sa p n a d e e d do eai g s se b s d o h a m o u e. i a e ic se rsn, dW n o a i no e n mb d e p r tn y tm a e nte p l c mp tr Th sp p rd s u s s
G S系统 由卫星全天候地发射包含 自身三维速度 、三维坐 P 标和准确时间等信 息的导航 电文 。 由设在代定点上 的接收机通过 接受导航 电文进行测时 、测距 , 利用空间后方距离交会技术反算
在测绘和导航 方面具有广泛的应用。随着 G S P 系统在理论研究 、 新应用领域的开拓及软硬件的开发等方面的迅速发展 , P 定位 GS 技术 已经广泛 渗透到经济建设和科学技术的诸多领域 , 充分显示
收稿 日期 :2 6 — 0 —1 2 0 2 9
2 3 GP . S的定 位原 理
G S系统能够为地球表面任意地 点、任意多个用户同时提 P 供高精度 、全 天候 、连续、实时的三维 定位 、测速和时间基准 ,
●地面控制部分 : 由主控站 ( 负责管理、 协调整个地面系统 的工作 ) 注入站 ( 、 地面天线 , 主控站的控制下向卫星注入导航 在
电文和其他命令 ) 、监测站 ( 数据 自动收集中心 )和通讯辅助系 统 ( 数据传输)组成。 ●用户部分 : 由天线、 接收机、 微处理机和输入输出设备组成。
机 的 串行 通 信 。 关键 词 : S W id ws E; 行通 信 GP ; n o C 串 中 图分类 号 : 9 5 1 TN 1 . 文献 标 识 码 : B 文章 编 号 :0 7 2 1 (0 7 9 16 4 10 74 2 0 )0 0 2 0

用多线程技术实现Windows环境下串行通信

用多线程技术实现Windows环境下串行通信
TH READ PRI ORI Y T
— — — . — .
所有 线程 必须 从 一 个 指定 的 函数 开 始执 行 , 函数 该
称为 线 程 函 数 , 具 有 下 列 原 型 : WO D WI A I o r 它 D R N P u Y T r d u c L V I lv hed am) 该 函 数 输 入 一 个 he F n ( P O D p T raP r 。 a
— _
恢 复一个线程可调用 R sm T r d函数 , e eh a u e 并传递给
创建一 个 线程 , 可通 过调 用 函数 Cet hed完成 。 rae ra T
H N L ra T ra ( P E U IY A T I U E A D E Ce t hed L S C R T — 1r B T S e R
ls p a,DW OR b t e L THRE D e s k, P a AD S TART ROUTI p NE l —
程可以执行应用程序的任何部分 , 包括 当前被其它线程
执行 的部 分 。一 个 进 程通 常定 义 为 程 序 的一 个 实 例 , 其 所有 线程 共享 虚拟 地址 空 间 、 局 变量 和 该 进 程 的操 作 全 资源 。一 个应 用程 序 至 少包 括 一 个 主线 程 , 可创 建 其 还 它线 程 , 当一个 应用 程序 中的线 程 的数 目多于 1时 , 就称 该 程序 是多线 程 的。 为 了运行 所 有 这 些 线 程 , 作 系统 操 为 每个独 立线 程安 排一 些 C U时 间 , P 并通 过其 本 身 的调 度 机制来 评价 各个 活 动 线 程 的优 先 级 , 先 执 行优 先 级 优
2 线程 的编 程技 术

用VB6_0实现PC机与智能仪表的远距离串行通信

用VB6_0实现PC机与智能仪表的远距离串行通信

用 VB6. 0 实现 PC 机与智能仪表的远距离串行通信Ξ
周耿烈1 ,ห้องสมุดไป่ตู้红梅2 ,刘瑞玲1
(1. 兰州工业高等专科学校 计算机工程系 ,甘肃 兰州 730050 ; 2. 甘肃煤矿安全监察局 信息调度中心 ,甘肃 兰州 730000)
摘要 : 利用带有 RS - 485 总线接口的智能仪表与计算机的通信接口 ,应用 VB6. 0 ActiveX 控件的
从接收缓冲区读取数据格式 ,类型 VARIANT ,设置为 0 时表示字符串格式 ,设置为 1 时表示 一进制格式
Input Output InputLen Rthreshold Sthreshold CommEvent
3. 2 编程实现
设置从缓冲区中读取数据 ,类型 Long 向发送缓冲区中写入数据 ,类型 Long 设置或返回 Input 每次读取的字节数 ,类型 Short 设置返回要接收的字符数 ,类型 Short 设置并返回发送缓冲区中允许的最少字符数 ,类型 Short 返回通信过程中产生的错误信息及事件 ,类型 Short
© 1994-2007 China Academic Journal Electronic Publishing House. All rights reserved.
第 1 期 周耿烈 ,等 :用 VB6. 0 实现 PC 机与智能仪表的远距离串行通信 · 7 ·
指令 (向仪表写数据) 、读指令 (从仪表读数据) 、键盘命令 (向仪表写入键盘代码 ,等同键盘操作) ;第 3 项为
参数代码 ,该参数在键盘命令中表示键值 ,在读指令中置零 ,其值为 00 - 11 (其意义略) ;第 4 项为数据项 ,
若为读命令或键盘命令则为 4 字节“0”,若为写命令 ,则为 4 字节浮点数 (先发低字节) ;第 5 项为校验和 ,

串口助手使用教程

串口助手使用教程
03
总结词:选择正确的串口参数
04
详细描述:根据连接的设备和通信协议的要求,选择正确 的波特率、数据位、停止位和校验位等参数。
05
总结词:保存配置
06
详细描述:完成参数设置后,记得保存配置以便下次使用 。
如何解决串口数据传输错误的问题?
总结词
检查数据完整性
详细描述
在数据传输过程中,如果发生错误,首先检查数据的完整性。确认发送的数据是否正确, 以及接收端是否完整接收。
用户需要先安装串口助 手软件,然后根据实际 硬件设备配置相应的串 口参数,如波特率、数 据位、停止位等。
通过串口助手,用户可 以发送和接收串口数据 。发送数据时,用户可 以选择文本或二进制格 式;接收数据时,软件 会自动捕获串口数据并 显示在界面上。
对于接收到的数据,用 户可以进行编辑、保存 或导出操作,方便后续 处理和分析。
如何解决串口数据传输错误的问题?
总结词
查看错误日志
详细描述
打开串口助手的错误日志功能,查看详细的 错误信息和历史记录。根据日志中的提示信 息,进一步排查问题原因。
05
总结与展望
总结串口助手的使用方法
功能介绍
安装与配置
数据发送与接收
数据编辑与保存
参数设置与调试
串口助手是一款用于串 口通信的软件,支持串 口数据的发送、接收、 查看、编辑等功能。
关闭串口
完成数据发送和接收后,点击“关闭串口”按钮。
关闭串口连接并释放相关资源。
03
串口助手的进阶功能
波特率设置
总结词
波特率是串口通信的重要参数,用于 控制数据传输速率。
详细描述
在串口助手中,您需要选择合适的波特率 以确保数据传输的稳定性和正确性。常见 的波特率有9600、19200、115200等, 根据您的设备和通信协议选择合适的值。

基于VB6.0的串口通信方法

基于VB6.0的串口通信方法

基于VB6.0的串口通信方法串口通信在数据采集中有着广泛的应用,因为串口通信通信线路简单、灵活方便、数据可靠。

作为快速开发,利用VB开发串口通信程序既可以使用MSComm控件也可以调用WindowsAPI函数实现。

这里我们使用VB6.0提供的MSComm控件,因为MSComm控件的功能和API调用一样强,甚至更好且使用起来更加简单,能很方便地实现所需的串口通信功能。

1.MSComm控件简介MSComm控件是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。

具体的来说,它提供了两种处理通信问题的方法:一是事件驱动方法,当串口通信产生错误时,MSComm控件会触发OnComm事件,程序员可以在OnComm事件处理函数中加入自己的处理代码。

另外一种是查询法。

查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。

在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。

2.MSComm控件的常用属性MSComm控件有很多重要的属性,但首先必须熟悉几个关键属性。

CommPort 设置并返回通讯端口号Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位PortOpen 设置并返回通讯端口的状态。

也可以打开和关闭端口Input 从接收缓冲区返回和删除字符Output 向传输缓冲区写一个字符串3.程序代码设计利用MSComm控件编写串口通信程序是十分便利和简单的。

下面我就事件驱动方式以VB6.0为平台编写了PC间串口通信程序的实例。

代码如下:'串口初始化PrivateSubForm_Load()mPort=1 '设置通信端口号为COM1MSComm1.Settings="9600,n,8,1" '设置串口参数MSComm1.InputMode=0 '接收文本型数据MSComm1.RThreshold=1'接收缓冲区每收到一个字符都会使MSComm控件触发OnComm事件MSComm1.PortOpen=True '打开通信端口1EndSub'把字符通过串口发送出去'启动定时器PrivateSubCmdsend_Click()IfTextsend.Text=""Thenpp=MsgBox("发送的数据不能为空!",16)ExitSubEndIfMSComm1.Output=Trim(Textsend.Text)EndSub'MSComm的OnComm事件程序'由CommEvent属性值的不同,将各自的程序代码写入相关的子程序中'只要RThresold中的设定字符数到达时便会使得CommEvent属性值变成comEvReceive'因此接收的子程序便会被执行PrivateSubMSComm1_OnComm()Dimbuf$mEvent'通过取代每一个case表达式来处理每个事件与错误CasecomEvCD'CD线的状态发生变化CasecomEvCTS'CTS线的状态发生变化CasecomEvDSR'DSR线的状态发生变化CasecomEvReceivebuf=Trim(MSComm1.Input)'将缓冲区内的数据读入buf变量中CasecomEvSendEndSelectTextReceive.Text=TextReceive.Text&bufEndSub'停止程序运行PrivateSubCmdquit_Click()UnloadMeEndSub'关闭通信端口,PrivateSubForm_Unload(CancelAsInteger)MSComm1.PortOpen=FalseEndSub4结束语本文通过具体实例介绍了如何利用VB6.0中的MSComm控件来实现串口通信。

在FoxPro for Windows环境中实现串行口通信

在FoxPro for Windows环境中实现串行口通信

在FoxPro for Windows环境中实现串行口通信
刘昱鹏
【期刊名称】《中国计算机用户》
【年(卷),期】1996(000)001
【摘要】FoxPro软件是当前较为流行的数据库软件之一,由于某些特殊的原因,需要在数据库环境中利用通信接口与外部设备进行通信。

在FoxPro for DOS中您可以利用低级文件函数来控制一个串口,如利用FOPEN()、FCLOSE()、FGETS()、FPUTS()、FREAD()、FWRITE()等函数来实现串行口的打开/关闭、读/写等功能。

然而,在FoxPro for Windows中您却不可以用低级文件函数来控制串行口的通信操作,因为每一个COM都可以说是MS-Windows的资源,故都被MS-Windows 所拿走了。

下面将向您提供一种在FoxPro for
【总页数】2页(P65-66)
【作者】刘昱鹏
【作者单位】无
【正文语种】中文
【中图分类】TP317
【相关文献】
1.在FOXPRO/FOXBASE中实现较为完善的串行通信 [J], 王颖;邹介棠
2.Windows环境下FOXPRO应用系统中实时通讯功能的实现 [J], 曹桂琴;董晶;刘润斌
3.FoxPro for Windows环境下与单片机串行通信的实现 [J], 周卫平;周斌
4.在Visual Foxpro中实现FTP远程通信 [J], 吴凤英
5.Windows NT中实现串行口实时中断通信 [J], 蒙文川;徐俊峰;侯延峰
因版权原因,仅展示原文概要,查看原文内容请购买。

基于Windows CE.NET平台的串行通信实现

L X u i g 0 5@ Ya o . o . n 。 v i Pn 2 0 ho cr c n
须在 “ E 文 件 中正 确设 置 注 册表 键 值 , .R G” 尤其 是
中断和基地址 , 必须与嵌 入式板上所给出的串口中 断和基地址一致 , 否则将无法正常通信。
尽 管 Wi o sC . E n w E N T支 持 标 准 的 桌 面 Wi— d n
面临与外 围设 备通 信 的 问题 , 对此 Wi o sC . n w E d
N T提供 了广 泛 的硬 件 支持 和 通讯 方 式 , 于 用 电 E 对
缆、 调制解调器或者红外传输介质连接的设备提供
了 串行 通信 支持 。尽 管在 计算机 外 围通讯 中 已经 有 了 比串 口更 快 、 更稳 定 的接 口, 是在 基 于 Widw 但 no s C .E E N T的嵌 入式设 备 中 , 串行 通讯 仍 然是 最 基本 、 最常用 的通 讯 方 式 , 绝 大 部 分 Widw E N T 被 no sC . E
1 Wid w E N T下 的串行通信 no s . E C
基 于 Widw E N T 的操 作 系统 平 台可 以在 no s . E C 集成开发 环境 Paom B ie . ltr ul r 2中根 据需 要 进行 f d 4
定制。若要实现串口通信 , 需要平台提供对串行通信
维普资讯
第 7卷 第 8 期 20 0 7年 4月 17 -89 20 ) 815 . 6 11 1 (0 7 0 - 20 7 - 4








Vo . No Ap . 007 17 .8 r2

Win32串口编程


(2)配置串口
在打开通讯设备句柄后,常常需要对串口进行一些 初始化配置工作。这需要通过一个DCB结构来进行。 DCB结构包含了诸如波特率、数据位数、奇偶校验 和停止位数等信息。在查询或配置串口的属性时, 都要用DCB结构来作为缓冲区。 一般用CreateFile打开串口后,可以调用 GetCommState函数来获取串口的初始配置。要修 改串口的配置,应该先修改DCB结构,然后再调用 SetCommState函数设置串口。
GetCommState函数可以获得COM口的设备 控制块,从而获得相关参数: BOOL GetCommState( HANDLE hFile, //标识通讯 端口的句柄 LPDCB lpDCB //指向一个设备控 制块(DCB结构)的指针 ); SetCommState函数设置COM口的设备控制 块: BOOL SetCommState( HANDLE hFile, LPDCB lpDCB );
二、串口编程的步骤
(1) 打开串口 (2) 配置串口 (3) 读写串口 (4) 关闭串口
(1)打开串口
Win32系统把文件的概念进行了扩展。无论是文 件、通信设备、命名管道、邮件槽、磁盘、还是控 制台,都是用API函数CreateFile来打开或创建的。 该函数的原型为:
HANDLE CreateFile( LPCTSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDistribution, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);

java串口通信

java串口通信API说明java串口通信Java提供了 CommunicationAPI(包含于m包中)用于通过与机器无关的方式,控制各种外部设备。

Communications API,是标准的Java的扩展部分,它在JavaAPI中是没有附带的。

因此,必须先在SUN公司网站的Java站点()上下载这个扩展类库。

1.1Communications API 简介Communications API 的核心是抽象的CommPort类及其两个子类:SerialPort类和ParallePort类。

其中,SerialPort类是用于串口通信的类,ParallePort类是用于并行口通信的类。

CommPort类还提供了常规的通信模式和方法,例如:getInputStream( )方法和getOutputStream( )方法,专用于与端口上的设备进行通信。

然而,这些类的构造方法都被有意的设置为非公有的(non-public)。

所以,不能直接构造对象,而是先通过静态的CommPortIdentifer.getPortIdentifiers()获得端口列表;再从这个端口列表中选择所需要的端口,并调用CommPortIdentifer对象的Open( )方法,这样,就能得到一个CommPort对象。

当然,还要将这个CommPort对象的类型转换为某个非抽象的子类,表明是特定的通讯设备。

该子类可以是SerialPort类和ParallePort类中的一个。

下面将分别对CommPort类,CommPortIdentifier类,串口类SerialPort进行详细的介绍。

1.2 CommPortIdentifier类CommPortIdentifier类的方法如下:方法说明addPortName(String, int, CommDriver) 添加端口名到端口列表里addPortOwnershipListener(CommPortOwnershipListener) 添加端口拥有的监听器removePortOwnershipListener(CommPortOwnershipListener) 移除端口拥有的监听器getCurrentOwner() 得到当前占有端口的对象或应用程序getName() 得到端口名称getPortIdentifier(CommPort) 得到参数打开的端口的CommPortIdentifier类型对象getPortIdentifier(String) 得到以参数命名的端口的CommPortIdentifier类型对象getPortIdentifiers() 得到系统中的端口列表getPortType() 得到端口的类型isCurrentlyOwned() 判断当前端口是否被占用open(FileDescriptor) 用文件描述的类型打开端口open(String, int) 打开端口,两个参数:程序名称,延迟时间(毫秒数)1.3 SerialPort类SerialPort关于串口参数的静态成员变量成员变量说明成员变量说明成员变量说明DATABITS_5 数据位为5 STOPBITS_2 停止位为2 PARITY_ODD 奇检验DATABITS_6 数据位为6 STOPBITS_1 停止位为1 PARITY_MARK 标记检验DATABITS_7 数据位为7 STOPBITS_1_5 停止为1.5 PARITY_NONE 空格检验DATABITS_8 数据位为8 PARITY_EVEN 偶检验 PARITY_SPACE 无检验SerialPort对象的关于串口参数的函数方法说明方法说明getBaudRate() 得到波特率 getParity() 得到检验类型getDataBits() 得到数据位数 getStopBits() 得到停止位数setSerialPortParams(int, int, int, int) 设置串口参数依次为(波特率,数据位,停止位,奇偶检验)SerialPort关于事件的静态成员变量成员变量说明成员变量说明BI Break interrupt中断 FE Framing error错误CD Carrier detect载波侦听 OE Overrun error错误CTS Clear to send清除以传送 PE Parity error奇偶检验错误DSR Data set ready数据备妥 RI Ring indicator响铃侦测DATA_AVAILABLE 串口中的可用数据 OUTPUT_BUFFER_EMPTY 输出缓冲区空SerialPort中关于事件的方法方法说明方法说明方法说明isCD() 是否有载波 isCTS() 是否清除以传送 isDSR() 数据是否备妥isDTR() 是否数据端备妥 isRI() 是否响铃侦测 isRTS() 是否要求传送addEventListener(SerialPortEventListener) 向SerialPort对象中添加串口事件监听器removeEventListener() 移除SerialPort对象中的串口事件监听器notifyOnBreakInterrupt(boolean) 设置中断事件true有效,false 无效notifyOnCarrierDetect(boolean) 设置载波监听事件true有效,false无效notifyOnCTS(boolean) 设置清除发送事件true有效,false无效notifyOnDataAvailable(boolean) 设置串口有数据的事件true有效,false无效notifyOnDSR(boolean) 设置数据备妥事件true有效,false无效notifyOnFramingError(boolean) 设置发生错误事件true有效,false无效notifyOnOutputEmpty(boolean) 设置发送缓冲区为空事件true有效,false无效notifyOnParityError(boolean) 设置发生奇偶检验错误事件true 有效,false无效notifyOnRingIndicator(boolean) 设置响铃侦测事件true有效,false无效getEventType() 得到发生的事件类型返回值为int型sendBreak(int) 设置中断过程的时间,参数为毫秒值setRTS(boolean) 设置或清除RTS位setDTR(boolean) 设置或清除DTR位SerialPort中的其他常用方法方法说明close() 关闭串口getOutputStream() 得到OutputStream类型的输出流getInputStream() 得到InputStream类型的输入流一年半前在jbuilder2006下写过串口通信程序,最近做一个GPS-SMS 项目,用到串口通信,在JBUILDER 配置了comm.jar却发现找不到端口,经过几番查找才发现自己配置的路径错了,浪费了不少时间,有必要记下来,防止下次出错,此次还暴露了自己看文章一目十行,走马观花的毛病。

用Visual C++开发Windows环境下串行通信程序



别 是 一些大 于 8 H 的字 节 . 收 和 发 送 时 会 出现 的 主要 原 因是 由 于 Widw 使 用 no s 不 耐类 型 的 字 符 串 而导 致 的 Widw 使 用 两 种 类 no s 鬻 型 的字 符 串 , A SI字符 串 和 U i d 字 符 串 。 即 N nc e u 所
容 。V R A T及 由之 而 派 生 出 的 c 1 ai t 主 A IN Oe r n 类 V a

薯 誊
( ) 何 发 送 0 H 1如 0
在 给 出 的示 例程 序 中 ,需 要 发 送 的 是 一 个 简 单 的字 符 串 .所 使 用 了一 个 C tng类 型 的 变 量 来 S in r 存储它 , 然后 使用 C l al t 的构 造 函 数 将之 转 Oe r n 类 V a
在 Vsa C + . , i l + 50巾 串行 通信 的控 件 不 再 叫撤 u O X控 件 , 是 改 名 为 A t e 控 件 , 用 于 Vsa C 而 ci X v 通 i l u
B s 、 e曲 i以 及 诸 多 ]t m t 用 程 序 中 与 ai D l c ne e 应 l
换 为 S t tu( 函数 所 需 要 的 V R A T类 型 的 参 e Ou t ) p A IN 数 (A IN V R A T和 C lV r n 可 以通 用 ) 所 如 果 Oe a at i


量 要 发 送 的 串 中含 有 0 H. 0 H 及 其后 的 字 节 都 将 0 则 0 毫 被 C tn Sr g舍 弃 , i 导致 只有 部分 字 节发 送 要解 决 这 个 问题 .必 须 使 用其 它 类 型 的 变量 来 存 储 待发 送 的
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档