计算机串口通信(精选9篇)
计算机串口通信 篇1
0 引言
随着微机技术、可视化开发应用软件的不断发展, 计算机测控系统和计算机虚拟系统迅速应用在各个领域中。串行通信是实现计算机和外部设备 (单片机、PLC等) 数据交换的一个简捷又实用的方法。计算机与外部设备间串口的正确通信, 是计算机测控系统或计算机虚拟系统正常工作的保证, 这就要求串口通信有较高的可靠性或故障诊断功能, 若发生通信故障, 应当及时提醒操作者处理。
本文以VB6.0、AT89C51为例, 介绍了计算机与单片机间串口通信故障诊断程序的设计方法。
1 串口通信故障诊断程序的设计思路
单片机与计算机间串口信号的传输过程如图1所示。单片机与计算机之间采用RS232C标准进行点对点的通信连接, 它们之间的通信采用“8位、无奇偶、无握手信号、波特率为19 200 bps”的方式。
串口通信故障诊断思路:计算机作为上位机定时对作为下位机的单片机“点名”, 无“应答”就说明串口通信发生故障。具体的方案:在程序运行过程中, 计算机定时向单片机发一个控制代码 (FEH) , 单片机接收到该代码后, 根据通信协议向计算机回传一个身份识别代码 (该身份识别代码可以由程序产生, 也可以写入串行EEPROM内) 。计算机在一定时间内接收到单片机发送来的识别代码并与驱动程序识别代码比较, 如2个身份识别代码相符, 计算机驱动程序正常运行。若计算机在一定时间内没有收到识别代码或收到的识别代码与驱动程序识别代码不相符, 计算机屏幕会出现消息框“请检查单片机电路或与计算机间通信线”, “确定”后退出应用软件。此时, 单片机电路与计算机间通信线有可能断线或信号适配器工作不正常, 提示使用者检查。
过程通信监测可以有效地避免由于通信中断而产生的失控状态的进一步扩大, 操作者可及时发现故障, 及时解决。
2 计算机故障诊断程序设计
计算机故障诊断程序采用VB6.0编程。计算机与下位机间的通信检测是通过2个定时器控件 (Timer) Timer2 (Timer2.Interval=2 000) 、 Timer3 (Timer3.Interval=1 500) 完成的。窗体启动时, Timer2.Enabled = True。Timer2事件产生时, 发送能使信号适配器进入“身份识别子程序”的控制代码 (FEH) 且ERORX = 1、Timer3.Enabled = True。
下位机接收到控制代码后, 回送一个“身份识别码”。计算机若在Timer3时间内接收到正确的“身份识别码” (即Timer3事件产生时ERORX 已被置 0) 时, 程序正常运行;若在Timer3时间内没接收到正确的“身份识别码” (即Timer3事件产生时ERORX=1) 时, Timer2.Enabled = False并出现消息框“请检查信号适配器或与计算机间通信线”, 此时通信中断。点击“确定”后, 退出应用软件。计算机故障诊断程序流程如图2所示。
3 AT89C51故障诊断程序设计
本系统中的单片机采用的是ATMEL公司的AT89C51。AT89C51与8051芯片一样, 具有32个I/O口、128 B RAM、2个16位定时器/计数器、1个全双工串口、5个中断源等, 同时具有4 KB FLASH EPROM。4 KB FLASH EPROM可以满足小容量的程序要求。
故障诊断程序用C51语言编写, 从实时性角度考虑, 下位机的通信方式采用串口中断方式。这样, 下位机程序就包括了下位机主程序和下位机串口中断服务程序。主程序用于定时器T1初始化、串行口初始化和中断初始化。振荡器频率fosc=11.059 2 MHz时, 首先设定:SCON=0x50 (串行口采用操作模式1) ;PCON=0x80 (PCON中SMOD=1) ;TMOD=0x21 (TMOD中高位C/T=0) 、TCON.6=1 (定时器1工作于操作模式2) ;TH1=TL1=0xfd (8位自动重装载值=FDH) 。
主程序为main () , 串口中断服务程序为SioInt () 。
主程序main () 流程如图3所示。在该程序中, NAMEI (位变量、=0) 为进入身份识别子程序标志、 NAMEY (位变量、!=0) 为退出身份识别子程序标志。
串口中断服务程序主要是数据接收后的处理程序。串口中断服务程序流程如图4所示。中断程序中, “0xfe”为进入身份识别子程序的控制代码, 由计算机控制发送。
4结语
本文所介绍的计算机与单片机间串口通信故障诊断程序方法简单可靠, 曾用于“可编程序控制器虚拟教学实验系统”、“多媒体集中控制系统”、“多媒体语言学习系统”的设计中, 效果很好。
在编写单片机程序时, 若有WatchDog电路, 应注意定时时间的设定。
摘要:文章提出了计算机与单片机的串口通信故障诊断程序的设计思路, 以VB6.0、AT89C51为例介绍了计算机与单片机间串口通信故障诊断程序的设计方法。该程序可警示系统出现的串口通信问题, 避免了不必要的麻烦。
关键词:串口通信,故障诊断程序,VB6.0,AT89C51
参考文献
[1]范逸之, 陈立元.Visual Basic与RS232串行通信控制[M].北京:清华大学出版社, 2002.
[2]马忠梅, 籍顺心, 张凯.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社, 1999.
[3]刘畅, 江道辉.利用SPComm控件实现PC机与单片机串口通讯[J].微计算机信息, 2005 (12) :89~91, 141.
PDA与单片机串口通信的实现 篇2
硬件结构
1. 掌上电脑
市场上较多见的掌上电脑是Palm系列产品,它使用的操作系统为Palm OS。Palm OS是一种32位的嵌入式操作系统,是一套开放性极强的系统,开发者向用户免费提供Palm OS的开发工具,允许用户利用该工具,在Palm OS系统的基础上方便地编写、修改相关软件。该系统是专门为掌上电脑编写的操作系统,编写时充分考虑了掌上电脑内存相对较小的情况,本身所占内存极小,基于Palm OS编写的应用程序所占空间也很小,通常只有几十KB。而且基于Palm OS的掌上电脑,虽然只有几兆的存储空间,却可以存储众多的应用程序。支持Palm OS产品的另一大特点是系统耗电量极小,以Palm Ⅲx为例,在正常情况下2节7号碱性电池,可使用2个月。Palm提供了串行通讯接口和红外线传输接口,利用它可以方便地与其它外部设备通讯、传输数据。本系统设计方案采用是PALM公司的Palm IV掌上电脑。
2.串行通信的硬件连接
RS-232信号的电平和单片机串口信号的电平不一致,必须进行二者之间的电平转换。在此使用的集成电平转换芯片MAX232为RS-232C/TTL电平转换芯片。它只使用单+5V为其工作,配接4个1μF电解电容即可完成RS-232电平与TTL电平之间的转换。转换完毕的串口信号TXD、RXD直接和AT89C51串行口连接。硬件连接如图1所示。
由于RS-232C并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。在设计本系统中使用DB-9连接器连接,作为掌上电脑与MAX232芯片串行接口的连接器,它提供异步通信的9个信号。DB-9连接器引脚功能和结构如图2所示。
软件编程
89C51微处理器与掌上电脑通信软件的实现由两个模块组成:微处理器的通信软件和掌上电脑的通信软件。
1. 单片机通信软件的设计
AT89C51与8051系列单片机是兼容的。所以编程、仿真和调试都可采用8051的开发工具。AT89C51单片机通信程序采用ASM51汇编环境下编写,在MCS-51单片机仿真调试软件下调试成功。
AT89C51单片机通过中断方式接收掌上电脑发送过来的字符,并回送确认信号给掌上电脑。程序协议:波特率设置为T1方式2工作,计数常数为F3H,SMOD=1,波特率为9600b/s;
串行口初始化为方式1,允许接收;中断服务程序入口地址为0023H。图3为程序流程框图。
2.掌上电脑串口通信软件设计
目前针对Palm环境的开发工具主要有CodeWarror C、JAVA、AppForgePersonal(Basic)等等。由于Palm平台与微机硬件、软件平台有着本质的差异,为了减少开发人员的培训费用,提高开发速度,我们采用CodeWarror C语言作为系统开发工具,只要熟悉C语言的编程者,都能在极短时间内熟练掌握CodeWarror C编程。
掌上电脑串口通信的实现遵循以下原则来管理串行口:打开和关闭串行口;读写缓冲区数据;查询缓冲区有字节数并读入内存;设置选项。
在本刊的网站上给出了单片机通信软件及掌上电脑串口通信实现的源程序,供读者参考。
3.通信协议
89C51微处理器与掌上电脑的通信协议读者可以采用自定义的协议,在定义通信协议时要注意考虑信号传输的可靠性。也可以采用TCP/IP的协议形式,一是可以提高传输信号的可靠性,二是可以方便以后系统的功能扩展,但编程相对复杂。限于篇幅关系,这里不再作详细介绍。
计算机串口通信 篇3
2013年6月9日21时 (北京时) , 南宁市城区气象观测站值班员在进行正点地面观测数据维护时发现该时次的要素栏全部为空白, 上传数据文件中, 分钟数据文件和状态数据文件正常形成, 而地面气象要素数据上传文件无法形成, 经过手工卸载“常规数据卸载”, 仍无法解决。在继续进一步检查其他数据文件时, 发现气压 (P) 、气温 (T) 、相对湿度 (U) 、风 (W) 、降水量 (R) 、正点地面气象要素数据文件 (Z) 均正常, 而逐分钟地面数据文件 (RTD) 则缺少21时01分、21时02分数据。在22时也出现了同样的情况。
2 数据处理
当务之急是形成21时、22时正确上传数据文件, 处理方法:打开“自动气象站数据质量控制软件”打开“Z5943206”文件, 点选“09日21时”一行数据, 从软件的“文件”栏中选“数据导入”, 找到“AWS_59432_20130609.RTD”, 选中点“确定”, 保存“Z5943206”文件;从“Aws Data QCFile”文件夹中的“Z5943206”复制覆盖到“Aws Source”文件夹中的“Z5943206”。打开地面气象测报业务软件中“整点地面观测数据维护”, 此时要素栏就有数据了, 人工挑选并修改小时、日极值, 保存后即可形成正确的小时上传数据文件。
3 故障判断过程
开始判断为计算机操作系统错误引起, 故重启计算机, 但重启后, 发现自动气象站监控软件中启动系统时初始化自动站进度加载到30%时无法继续, 经过多次重启计算机, 均无法正常启动监控软件。经分析, 出现此类现象可能是由于通信设备故障、参数设置造成、计算机与采集器时间不一致造成。首先检查自动站参数设置, 设置并无错误;遂关闭监控软件, 利用超级终端建立与自动站采集器的连接, 发现仍能接收到自动站分钟数据, 且经过分析, 数据均为正确, 而利用发送指令测试传感器时, 却接收不到返回的信息。考虑到短时间内可能无法排除故障, 就将通信线的RS232接口接到自动站备份计算机, 发现监控软件恢复正常采集数据。此时, 排除自动站通信线路问题, 故障确定为计算机本身的故障。
4 故障原因分析
经事后检查分析判断, 主要原因为计算机维护时, 卸掉通信线缆和计算机的接地线未恢复, 雷电流由通信线缆入侵时造成计算机主板RS232串行口损坏。受低涡切变线及弱冷空气共同影响, 9日20时至10日08时, 本市普降暴雨, 局部大暴雨, 并伴有强雷电、短时大风, 这是2013年入汛以来南宁市强度最强、雷电活动最为活跃的一次强降水天气过程。计算机RS-232串行口用于ASCII码字符的传输, 在用于普通的通信时, 只需用到3个引脚即可:3 TXD发送数据;2 RXD接收数据;5 GND地线。而该本文里提到损坏的正是主板3 TXD发送数据针脚部分。2 RXD接收数据针脚是完好的, 在不关闭自动气象站监控软件的前提下, 是不影响分钟数据的采集, 但监控软件卸载常规定时数据需要读取采集器时间, 由于3TXD发送数据部分损坏, 导致主控计算机无法读取识别采集器时间, 无法卸载需要的数据文件, 导致写入上传数据文件为空白。因为重启计算机打开监控软件时, 同样需要计算机与自动站采集器进行对时, 同样道理, 计算机读取采集器时间无法进行, 无法进行下一步操作, 则会出现“警告!打开自动站失败”的提示。这就是利用超级终端仍能接收数据, 却无法打开自动气象站监控软件的原因。经过计算机生产厂家的售后服务人员更换主板后, 故障排除。
5 结论
自动气象站的防雷工作, 关系到地面气象观测数据质量、数据传输及时率, 气象台站应高度重视。自动站室内部分、电源、信号防雷设施必须与建筑物接地可靠连接, 维护设备临时拆卸的防雷接地线, 必须及时恢复, 定时自查值班室的防雷接地情况。
参考文献
[1]高国明.自动气象站与气象宽带网防雷技术要点[J].广西气象.2006, 27.
计算机串口通信 篇4
关键词:Modbus RTU,LabVIEW,PLC
中图分类号: TP336 文献标识码:A 文章编号:1674-098X(2015)07(c)-0000-00
1.引言
LabVIEW是美国国家仪器有限公司提供的一套软件开发平台,广泛应用于数据采集、监控、自动化测试测量领域[1]。
西门子S7-200系列PLC具有紧凑的设计、丰富的扩展能力、极高的可靠性、便捷的操作性和强大的指令系统,广泛的应用于各种工业领域中。
Modbus是一种串行通信协议,它已经成为工业领域的通信协议标准,并且是现在工业电子设备之间常用的连接方式。Modbus传输协议定义了控制器可以识别和使用的信息结构,而无须考虑通信网络的拓扑结构[2]。
Modbus具有两种串行传输模式:ASCII和RTU。它们定义了数据如何打包、解码的不同方式。本文阐述的主要内容是以Modbus RTU为基础实现的LabVIEW与S7-200系列PLC之间的串口数据通信。
2.系统架构
本文以某企业数据采集与监控系统项目为背景。该项目中,上位机为工控机运行LabVIEW软件,完成各个分系统的数据汇总和人机界面等功能;下位机PLC作为客户端,负责向上位机提供采集的数据,同时接收上位机控制指令。
S7-200PLC的通信口是RS-485串行接口,工控机是RS-232串行接口,之间通过RS485/RS232转换模块连接。
3.软件实现
本方案,PLC作为Modbus RTU的从站,通过自由口通信模式实现。
3.1配置RTU从站
Modbus RTU从站功能是通过指令库中预先编好的程序功能实现的。从站指令库只支持CPU上的通信端口0(Port0)。
从站指令库包括初始化程序MBUS_INIT和响应主站请求子程序MBUS_SLAVE。
图1 MBUS_INIT子程序
MBUS_INIT子程序可以用SM0.1调用,本方案配置如图1所示,Mode 置1,Addr取2, Baud设为9600, Parity置2, Delay取默认值0, MaxIQ取默认值128, MaxAI 为32,MaxHold为1000, HoldStart设为“&VB0”,使用库存储器命令为Modbus从站协议指令所要求的V存储器分配一个起始地址。 Done 成功初始化后置1,Error在Done位为1时有效。
图2 MBUS_SLAVE子程序
MBUS_SLAVE指令用于响应主站的请求,必须在每个循环周期都执行,用SM0.0调用,如图2所示。
本方案,工控机端软件采用LabVIEW 编写,实现通信设置、数据处理等功能。
3.2Modbus RTU从站指令
上位机用到的Modbus从站协议功能:
3--读单个/多个保持寄存器。功能3返回V存储器的内容。保持寄存器在Modbus下是字类型,在一个请求中最多可读120个字。
6--写单个保持寄存器。功能6写一个单个保持寄存器的值到S7--200的V存储区。
16--写多个保持寄存器。功能16写多个保持寄存器到S7--200的V区。在一个请求中最多可写120字。
3.3创建VISA串口通信
首先需要调用VISA Configure Serial Port完成串口参数的设置,包括串口资源分配、波特率、数据位、停止位、校验位等。串口参数根据PLC设置的串口参数配置。串口号选择与实际硬件连接的串口号。如图3所示。
图3 串口参数配置
初始化后,就可使用该串口进行数据收发。发送数据使用VISA Write,接收数据使用VISA Read。
在接收数据之前需要使用VISA Bytes at Serial Port查询当前串口接收缓冲区中的数据字节数,使VISA Read要读取的字节数等于缓冲区中的数据字节数。
数据收发格式:
<1> 写PLC数据格式:
发送:串口号+PLC地址+功能码+寄存器起始地址+寄存器数量+字节计数+设置内容+CRC校验
响应:串口号+PLC地址+功能码+寄存器起始地址+寄存器数量+CRC校验
<2> 读PLC数据格式:
发送:串口号+PLC地址+功能码+寄存器起始地址+读取数量+CRC校验
响应:串口号+PLC地址+功能码+字节计数+输入状态+ CRC校验
图4 读PLC程序
如图4所示,为上位机读取PLC的地址为2,数据地址为VB100至VB109数据的LabVIEW程序。
3.4数据通信
本文主要闡述的是上位机LabVIEW软件如何读写S7-200 PLC中V区的数据。PLC把上位机需要的所有数据先存储到V区,在上位机需要时发送给上位机。上位机通过写PLC的V区,待PLC响应V区数据时进而控制PLC。
4.总结
在大规模、复杂的工业应用中,常常会用到不同的软、硬件平台,如何实现不同平台的数据通信,是经常需要解决的问题。本文针对LabVIEW和西门子S7-200系列PLC这两种被广泛使用的软、硬件件平台之间的数据通信问题,阐述了基于Modbus RTU协议的串口通信解决方案和具体的实现步骤。
参考文献:
[1] Elliott C, et al. National instruments LabVIEW: a programming environment for laboratory automation and measurement[J] . Journal of the Association for Laboratory Automation, 2007, 12( 1) : 17 -24.
USB虚拟串口通信实现 篇5
本文中的智能家居控制系统采用基于USB的虚拟串口同中心汇聚节点通信,中心汇聚节点采用意法半导体公司STM8S103系列微处理器,实现数据的接收与发送。上位机系统控制软件在Windows环境下通过VC++6.0编程开发,基于USB的虚拟串口具有传输数据稳定、安装简便、即插即用等特点[2]。
1 控制系统总体设计
系统总体结构如图1所示,主要由3部分组成,基于PC机的上位机系统控制软件、中心汇聚节点和各家电子设备节点。中心汇聚节点和各家电子设备节点均搭载433无线通信模块。各家电子设备节点可以根据自身设备的状态信息,整合成一定格式的数据帧,经433无线模块将数据信息传送给中心汇聚节点,而后通过基于USB的虚拟串口将数据转发给上位机系统控制软件,上位机软件实时显示家电子设备的状态信息[3]。同样,当用户需要控制和管理家电设备时,控制指令经虚拟串口和433无线模块将指令下发至相应家电设备,根据指令执行相应操作[4]。
2 虚拟串口硬件电路设计
2.1 芯片简介
CH341是一种高度集成的USB总线转接芯片,通过USB总线提供异步串口、打印口、并口以及常用的2线和4线等同步串行接口。在异步串口方式下,CH341提供串口发送使能、串口接收就绪等交互式的速率控制信号以及常用的MODEM联络信号,用于为计算机扩展异步串口,或者将普通的串口设备直接升级到USB总线。具备USB全速接口,兼容USB V2.0,外围器件简单,只需晶振和电容。完全兼容计算机端Windows操作系统下的串口应用程序。硬件全双工串口,内置收发缓冲区,支持通讯速率50 bit·s-1~2 Mbit·s-1和5、6、7或者8位数据位、奇校验、偶校验、空白、标志以及无校验、串口发送使能、串口接收就绪等传输速率控制信号和MODEM联络信号。
2.2 串口硬件电路设计
USB转虚拟串口部分电路主要由CH341和STM8S103构成,其电路原理如图2所示,设备采用USB总线供电方式,时钟电路由12 MHz晶振搭配2个20 pF电容构成,将CH341芯片的SDA和SCL引脚悬空,从而使其工作于异步串行口模式,采用常用的三线式串口通信方式,将CH341芯片的RXD、TXD、GND引脚分别于单片机STM8S103的TXD、RXD和GND引脚相连。在USB接口的电源端连接一个磁珠,以减少PC机与设备的干扰,同时在电源端增加去耦和旁路电容,以提高设备的抗干扰能力[2]。
3 上位机系统软件设计
3.1 USB转虚拟串口驱动安装
当完成硬件连接后,为实现正常的串口通信,还需为PC机安装相应的驱动程序。从互联网上可下载相应芯片的驱动程序,因本设计选用USB总线转接芯片为CH341,故下载并安装对应的CH341SER驱动程序,该驱动程序支持Windows 98//XP/Win7 32位/64位等操作系统。该虚拟串口实现仿真标准串口,完全兼容计算机端Windows操作系统环境下的串口应用程序,用户可以像访问标准串口设备一样对该虚拟串口进行通信,但实质其数据通信则是通过USB总线完成。待安装完驱动程序后,便可以对该设备进行基于串口的上位机应用程序开发[2]。
3.2 系统控制软件设计
上位机控制软件在VC++6.0环境下开发,采用VC++6.0提供的MSComm控件进行应用程序设计。MSCOM控件提供了完善的数据接收与发送功能[2],支持事件驱动和查询两种通信模式。事件驱动方式下,当有串口发生事件或错误时便响应OnComm事件处理程序;查询模式下,则通过定期查询MSComm控件的ComEvent属性变化来进行数据处理。考虑到控制系统的实时响应能力,上位机应用软件采用事件驱动方式,即当串口有数据接收时便响应OnComm事件,然后在OnComm事件处理函数中加入相应的通信处理代码。系统控制软件操作界面如图3所示。
3.2.1 通信参数设置
为保证控制系统能成功进行串口通信,系统控制软件与汇聚节点设备应设置相同的波特率、数据位等通信参数[5],此外因为PC机为USB总线转接芯片CH341分配的虚拟串口是不确定的,为此设计了通信参数设置对话框来对虚拟串口的通信参数进行设置,界面如图4所示。
3.2.2 通信数据处理
上位机系统控制软件主要负责用户控制指令的发送与接收,同时及时更新显示当前家用电子设备的状态信息。应用软件主要包含系统初始化程序、串口接收与发送程序和数据处理与显示程序3部分。初始化程序主要负责系统的串口通信参数配置;串口接收与发送程序则负责将数据组合成数据帧,并发送或接收汇聚节点数据帧[6];数据处理与显示程序则根据不同的数据帧进行相应处理,并及时更新对应家电子设备的控制界面,程序流程如图5所示。
4 实验验证
为进一步验证USB转虚拟串口通信在具体系统应用中的可靠性和稳定性[7],按照图1搭建测试系统,在PC机上安装好对应的USB转虚拟串口驱动程序,打开上位机系统控制软件,选择对应的串口,设置与中心汇聚节点相匹配的串口通信参数,在应用软件中选择加湿器操作界面,改变界面状态以发送控制指令,查看对应的加湿器是否执行相应的操作;通过手动改变加湿器的状态,查看上位机系统控制软件中加湿器界面状态是否及时更新,测试结果如图6所示,实验测试表明系统响应速度快、稳定性强,USB转虚拟串口通信能够满足实际控制系统的通信需求。
5 结束语
本文设计了基于USB虚拟串口通信技术的串口通信模块,介绍了其设计方法与原理,开发了基于虚拟串口通信的上位机系统控制软件,并将其应用于智能家居控制系统。采用USB虚拟串口解决了传统串口逐渐消失、扩展性差、安装繁琐等问题[2],实验测试表明基于USB的虚拟串口具有传输速率稳定、即插即用等特点。
摘要:以一种高度集成的USB总线转接芯片CH341为核心,设计并实现了基于USB接口的PC机与下位机的虚拟串口通信。上位机在Windows环境下利用MSComm控件实现与下位机通信,介绍了USB转虚拟串口的实现方法,并基于该虚拟串口编写了智能家居控制应用软件。实验测试表明,采用虚拟串口实现上位机与单片机通信,具有结构简单、速度快和易于软件开发等特点,能满足于各种串口通信场合。
关键词:VC++6.0,USB,虚拟串口,CH341,智能家居
参考文献
[1]成芳芳.基于USB虚拟串口技术的漏电保护的研究[D].天津:河北工业大学,2011.
[2]宁辉,孙学艳,刘建,等.VB6.0环境下基于USB的虚拟串口通讯实现[J].现代电子技术,2012,35(6):45-48.
[3]韦立明.基于USB通信设备类的虚拟串口研究与设计[D].西安:西安电子科技大学,2012.
[4]涂亮,段红光.基于433无线收发模块的物联网智能家居系统设计[J].电视技术,2012,36(6):44-46
[5]刘杰,章韵,陈建新.利用433 MHz射频通信技术实现智能家居系统[J].计算机应用,2012,32(S2):68-72.
[6]MUHAMMAD R A,MAMUN B I R,MOHD A M A.A review of smart homes-past,present and future[J].IEEE Transactions on Communication Cricuit,2012,42(6):1190-1203.
WinCE下的串口通信 篇6
在远程监控和工业自动化领域系统中,串口通信因其具有连接简单,使用方便,可靠性高的优点,因而得到了越来越广泛的应用。在工业现场或者是巡检的过程中,一般会用到嵌入式的设备,Win CE是微软推出的一个32位的,多线程实时操作系统,可以完美支持嵌入式设备。Win CE以其良好的性能得到了用户的认可。同时,在监控和自动化领域中,无线发射和接受因其布置简单,易于维护,被越来越多的用户接受。
2 系统实现
2.1 系统组成
系统采用2个XBee模块和1个PDA。一个XBee发送数据,一个接受数据,2片XBee之间通过无线进行传输,接受的XBee通过串口与PDA相连接,PDA与接收XBee模块通信,读取其中的数据并显示,也可向其中写入数据。
2.2 XBee无线模块
XBee是Digi公司推出的一种由电池供电的长寿命的无线传感器,易于连接到Drop———in Net Working网络应用或Zig Bee网络中。Zig Bee技术使低成本、低功耗的设备网络得以与自配置和自修复的无线Mesh网络相连接。基于XBee传感器,使用者可以在Zig Bee网络从多个结点方便地收集实时数据。
2.3 Win CE下串口通信简介
在Win CE下运行的程序,一般是在Windows环境下开发的,然后下载到嵌入式设备中。系统中是在Windows环境下用EVC去开发应用软件,然后下载到PDA中去。串口在Win CE中属于流接口设备,可以像对文件一样对串口进行打开,关闭,读写等操作。Win CE下的串口函数和Windows下的串口函数基本相同,但在以下一些方面有所不同:1.Win CE只支持Unicode;2.Win CE中有一些自己特有的控件,可以方便编程。3.EVC不支持重叠I/O操作。
2.4 Win CE下串口通信基本方法
在Win CE下开发串口通信包含下面一些步骤:
1)打开端口并进行初始化。在EVC中把设备当做文件来处理,故使用Create File来打开端口。如果打开成功,则会返回打开串口的句柄。成功打开一个端口之后,需要对端口进行初始化。调用串口通信函数Setup Comm设置COM4的发送和接受缓冲区的大小。分配好缓冲区后调用Get Comm Timeouts函数对读写串口进行超时设置。然后调用Get Comm State函数获取当前串口的默认参数并返回一个DCB结构体地址,通过给这个DCB结构体各成员赋值来重新设定串口状态。最后调用Purge Comm函数清空串口的发送接收缓冲区。
2)对串口进行读写操作。成功配置好串口参数后即可调用函数Read File和Write File对串口进行读写操作。在通信的过程中可能出现通信错误导致程序无法继续进行,一般需要调用Clear Comm Error清除这些错误。
3)关闭串口。使用完串口后必须关闭串口。串口不能像文件一样被共享,不释放别的应用程序就不能使用它。关闭串口只需使用Close Handle即可。
2.5 串口与XBee通信模型
在串口通讯当中,要做到通信模型吞吐量大,实时性强,能处理并发事件,这就要求使用多线程技术。在主程序中创建2个线程,一个用于读串口,一个用于写。其通信的模型图如图1所示:在EVC中创建一个工程,在主程序中增加两个线程,即创建一个读进程,一个写进程。用Create Thread创建好进程后,读线程和写线程都处于挂起状态,主进程通过不停的查询串口状态,得到相应的事件,根据返回的事件唤醒相应的进程。当唤醒读进程后,读进程会调用回调函数接受串口中的数据,对数据进行必要的处理后,进行输出显示。也可以向系统中写入数据,例如像其中一个XBee模块中写入API指令,就可以控制另一XBee模块,这就可以实现远程控制。各线程间以时间同步对象来实现同步,形成主进程与读写进程的协调一致。Win CE系统是可抢占式多线程处理操作系统,故在创建线程的时候,可以给线程规定一个优先级,根据任务时间紧迫性的高低给任务定义一个数值来表示优先级的高低,调度时选择高者先执行,优先级相等时轮流执行,并且优先级低的线程运行时,优先级高的线程到达后会马上执行优先级高的线程,这就保证了运行过程中的实时性和高效性。
3 结束语
该文介绍了在Win CE下用EVC编程实现XBee与PDA之间的串口通信,该方法简单易行,系统稳定,完全实现了系统间的串口通信。该系统可以应用到监控系统及工业现场当中。系统中利用多线程技术处理数据的接受和发送,提高了系统的实时性和吞吐量,达到了预期的目标,并有很大的实用价值。
参考文献
[1]刘伟,刘光斌,余志勇.Windows 95多线程通信应用程序设计[J].计算机系统应用,1999.
[2]Charles Petzold.Windows CE程序设计[M].北京:北京大型出版社,1999.
[3]陈淑珍,石波.基于Windows多线程环境下的串口通信[J].武汉大学学报(自科版),2000.
[4]李现勇.Visual C++串口通信与工程实践[M].北京:人民邮电出版社,2005.
远程维护系统串口通信协议研究 篇7
1 分析并建立串口通讯协议
1.1 分析
整体上来看, 串口通讯协议设计主要是在面向连接服务的基础之上的。任何装备对于通信协议的标准都是不同的, 这是因为各个研制装备的单位往往都会结合自身的需求以及实际设计型号来制定的, 对于信息帧结构也有较多不同的种类, 同时在通讯协议中, 各个部分内容当中位数也有一定的差异, 对数据进行编码的方式自然也不一样。所以, 并不能实现不同装备之间信息共享的操作。另外, 还有一部分装备并没有设置信息接口, 导致设备数据无法进行传输, 自然就无法实现远程控制设备。
1.2 建立
结合装备运行的实际情况, 制定通讯协议需要令其能够实现对远程设备进行控制以及维护的功能, 还要在此基础之上确保空间充足, 以便设备进行功能扩展, 在通讯协议当中, 还需要拥有控制设备、监视参数、设置参数等有一定关联的内容。对现有装备所拥有的通讯协议进行分析和设计的基础之上, 构建出能够满足装备的实际情况的一个通讯协议规范, 它可以比较严格地对信息帧格式和其他的帧格式之间位数展开规定, 按照协议, 可以将其分成五类不同的帧结构, 不同的帧结构设计类型都会和硬件间优化融合综合起来进行考虑。
2 设计分析五种帧结构
2.1 握手类
这种帧结构直接将设备和接口连接起来, 信息接口会定时传送询问帧到设备当中, 假如此时装备处于开启状态, 装备就会将回应帧传输给接口, 在接口收到回应帧之后, 双帧联动, 就能够实现数据的传输, 达到远程控制的目的。
2.2 控制类
这种帧结构将控制功能的实现作为主要目的, 它可以对设备进行诸如开机或者关机等控制操作, 在进入到这种状态下的时候, 接口需要先向整个设备输送控制帧, 在设备收到之后, 就可以立刻执行这些控制类帧当中的指定命令, 并且发送回应帧给接口, 待接口收到之后, 就可以标记这项操作任务已经完成了。
2.3 检测类
这种帧结构能够很好地实现检测类的相关功能, 正确利用检测帧, 我们能够对设备的各项系统参数以及运转状态展开系统的检测, 在被控制的设备收到接口所传输的监测帧之后, 结合信息帧当中的请求, 向信息接口传输拥有监测内容的对应帧。在设备接收了这一对应帧之后就会在短时间内立刻进行信息整合, 与此同时对其进行分析, 保证数据信息高度的安全以及稳定。
2.4 维护类
这种帧结构针对的是拥有维护性能的设备所适用的, 它能够对受到控制的设备参数进行必要的设置, 进而实现远程维护设备。其具体的操作流程如下:信息接口先向对应设备传输要进行读取的设备参数的信息帧, 设备收到了信息帧后, 结合信息帧当中所涵盖的内容, 传输响应帧到接口当中, 这一过程当中, 响应帧当中包括信息帧当中全部消息内容, 在接口收到了响应帧之后, 结合响应帧当中的消息, 对消息进行适当的修改以及设置, 全部完成之后, 可以向设备传输维护类的帧, 在设备收到维护帧后, 就可以依照维护帧当中的一些信息来对设备进行适当的维护以及设置操作。
2.5 补充类
通常来说这种帧结构都是在设备以及接口间进行信息帧传输的过程当中, 结合传输的信息帧长度、帧结构以及数据的字节数来进行精准判断。不过, 假如数据长度太大, 不能通过一帧来进行传输的时候, 就需要借助补充帧结构的作用。先发送并没有进行校验的帧, 随后自动传送, 在接口收到包含在补充信息帧当中的命令后, 就可以标记这次数据通讯活动完毕。
3 传输数据和远程维护系统具体实现
3.1 传输数据的流程
微机传输请求信息, 到达设备之后, 被控制的设备会先对信息帧进行解码处理, 结合协议当中的有关规范, 在存储器当中适当地抽取需要的消息, 再通过ARM来进行适当的处理, 结合规定当中的格式, 借助串口, 通过信息帧的形式来发送需要的数据信息, 到达微机之后, 微机接收信息帧, 借助其中远程维护软件和协议当中所规定的格式来解码信息帧, 从中提取有效的信息, 在相应的区域当中显示指定的数据信息。
3.2 实现远程维护系统
整体上来说, 远程维护控制这一系统的主要结构包括远程维护中心、网络组成软件以及设备接口信息终端这样的三个部分所组成, 它可以很好地实现对各个被控制的设备进行监视以及维护的目的, 通过信息之间的相互传输以及对彼此信息进行破解的过程来实现信息分析, 进而能够及时且有效地实现对被控设备进行远程监控的目的, 继而对已经有的问题进行适当的预警和提示, 继而实现远程维护设备和远程控制设备的最终目的, 这一系统的组成可以用图1 来展示。
4 结语
设计串口通讯协议, 可以起到规范化通讯协议, 并统一提供理论支持的作用, 可以将装备当中的串口通讯协议进行统一, 与此同时, 还给装备远程维护的控制系统打造了比较理想的理论平台, 针对装备使用和发挥正常效能来说拥有比较现实的意义和价值。
参考文献
[1]杨光, 雷志雄.远程维护控制系统串口通信协议研究[J].电子技术, 2009 (01) .
[2]张海滨.浅谈远程维护控制系统的串口通信协议[J].硅谷, 2010 (24) .
[3]何先波, 钟乐海, 芦东昕.远程串口调试通信协议在嵌入式软件调试器设计中的应用[J].西华师范大学学报:自然科学版, 2004 (01) .
[4]耿铁柱.基于GPRS的控制与保护的远程监控系统的研究[D].沈阳工业大学, 2012.
基于VC++环境的串口通信 篇8
在导航设备及测试仪器中, 显控计算机 (一般都基于Windows平台) 经常需要与下层DSP设备模块通过串口进行通信。串口通信方便易行, 应用广泛。一般情况下, 显控计算机通过RS232总线进行通信.RS232的通信方式是双工的。每次通信都是由显控计算机通过串口向DSP设备模块命令, DSP设备模块在接收到正确的命令后作出应答.在Win32下, 可以使用两种编程方式实现串口通信, 其一是使用Active X控件, 这种方法程序简单, 但欠灵活.其二是调用Windows的API函数, 这种方法可以清楚地掌握串口通信的机制, 并且自由灵活。本文使用API串口通信。串口的操作可以有两种操作方式:同步操作方式和重叠操作方式 (又称为异步操作方式) 。同步操作时, API函数会阻塞直到操作完成以后才能返回 (在多线程方式中, 虽然不会阻塞主线程, 但是仍然会阻塞监听线程) ;而重叠操作方式, API函数会立即返回, 操作在后台进行, 避免线程的阻塞.无论哪种操作方式, 一般都通过四个步骤来完成: (1) 打开串口; (2) 配置串口; (3) 读写串口; (4) 关闭串口。
1 打开串口
Win32系统把文件的概念进行了扩展.无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台, 都是用API函数Create File来打开或创建的。该函数的原型为:
·lp File Name:将要打开的串口逻辑名, 如“COM1”;
·dw Desired Access:指定串口访问的类型, 可以是读取、写入或二者并列;
·dw Share Mode:指定共享属性, 由于串口不能共享, 该参数必须置为0;
·lp Security Attributes:引用安全性属性结构, 缺省值为NULL;
·dw Creation Distribution:创建标志, 对串口操作该参数必须置为OPEN_EXISTING;
·dw Flags And Attributes:属性描述, 用于指定该串口是否进行异步操作, 该值为FILE_FLAG_OVERLAPPED, 表示使用异步的I/O;该值为0, 表示同步I/O操作;
·h Template File:对串口而言该参数必须置为NULL;
重叠I/O打开串口的示例:
2 配置串口
在打开串口设备句柄后, 常需要对串口进行一些初始化配置工作.这需要通过一个DCB结构来进行。DCB结构包含了诸如波特率、数据位数、奇偶校验和停止位数等信息。在查询或配置串口的属性时, 都要用DCB结构来作为缓冲区。一般用Create File打开串口后, 可以调用Get Comm State函数来获取串口的初始配置.要修改串口的配置, 应该先修改DCB结构, 然后再调用Set Comm State函数设置串口。DCB结构包含了串口的各项参数设置, 下面仅介绍几个该结构常用的变量。
typedef struct_DCB{………
//波特率, 指定通信设备的传输速率。这个成员可以是实际波特率值或者下面的常量值之一:
DWORD Baud Rate;
DWORD f Parity;//指定奇偶校验使能。若此成员为1, 允许奇偶校验检查
BYTE Byte Size;//通信字节位数, 4—8
BYTE Parity;//指定奇偶校验方法。此成员可以有下列值:
//EVENPARITY偶校验NOPARITY无校验
//MARKPARITY标记校验ODDPARITY奇校验
BYTE Stop Bits;//指定停止位的位数.此成员可以有下列值:
//ONESTOPBIT 1位停止位TWOSTOPBITS 2位停止位
//ONE5STOPBITS 1.5位停止位
………
}DCB;
Get Comm State函数可以获得COM口的设备控制块, 从而获得相关参数:
BOOL Get Comm State (
HANDLE h File, //标识通讯端口的句柄
LPDCB lp DCB//指向一个设备控制块 (DCB结构) 的指针
) ;
Set Comm State函数设置COM口的设备控制块:
BOOL Set Comm State (
HANDLE h File,
LPDCB lp DCB
) ;
除了在BCD中的设置外, 程序一般还需要设置I/O缓冲区的大小和超时.Windows用I/O缓冲区来暂存串口输入和输出的数据。如果通信的速率较高, 则应该设置较大的缓冲区。调用Setup Comm函数可以设置串行口的输入和输出缓冲区的大小。
BOOL Setup Comm (
HANDLE h File, //通信设备的句柄
DWORD dw In Queue, //输入缓冲区的大小 (字节数)
DWORD dw Out Queue//输出缓冲区的大小 (字节数)
) ;
在用Read File和Write File读写串行口时, 需要考虑超时问题.超时的作用是在指定的时间内没有读入或发送指定数量的字符, Read File或Write File的操作仍然会结束。要查询当前的超时设置应调用Get Comm Timeouts函数, 该函数会填充一个COMMTIMEOUTS结构, 调用Set Comm Timeouts可以用某一个COMMTIMEOUTS结构的内容来设置超时。读写串口的超时有两种:间隔超时和总超时。间隔超时是指在接收时两个字符之间的最大时延, 总超时是指读写操作总共花费的最大时间, 写操作只支持总超时, 而读操作两种超时均支持。用COMMTIMEOUTS结构可以规定读写操作的超时, COMMTIMEOUTS结构的定义为:
typedef struct_COMMTIMEOUTS{
DWORD Read Interval Timeout;//读间隔超时
DWORD Read Total Timeout Multiplier;//读时间系数
DWORD Read Total Timeout Constant;//读时间常量
DWORD Write Total Timeout Multiplier;//写时间系数
DWORD Write Total Timeout Constant;//写时间常量
}COMMTIMEOUTS, *LPCOMMTIMEOUTS;
COMMTIMEOUTS结构的成员都以毫秒为单位, 总超时的计算公式是:
总超时=时间系数×要求读/写的字符数+时间常量
例如要读入10个字符, 那么读操作的总超时的计算公式为:
读总超时=Read Total Timeout Multiplier×10+Read Total Timeout Constant
可以看出:间隔超时和总超时的设置是不相关的, 这可以方便通信程序灵活地设置各种超时。如果所有写超时参数均为0, 那么就不使用写超时。如果Read Interval Timeout为0, 那么就不使用读间隔超时。如果Read Total Timeout Multiplier和Read Total Timeout Constant都为0, 则不使用读总超时。如果读间隔超时被设置成MAXDWORD并且读时间系数和读时间常量都为0, 那么在读一次输入缓冲区的内容后读操作就立即返回, 而不管是否读入了要求的字符。在用重叠方式读写串口时, 虽然Read File和Write File在完成操作以前就可能返回, 但超时仍然是起作用的。在这种情况下, 超时规定的是操作的完成时间, 而不是Read File和Write File的返回时间。
配置串口的示例:
Setup Comm (h Com, 1024, 1024) ;//输入缓冲区和输出缓冲区的大小都是1024
COMMTIMEOUTS Time Outs;
//设定读超时
Time Outs.Read Interval Timeout=1000;
Time Outs.Read Total Timeout Multiplier=500;
Time Outs.Read Total Timeout Constant=5000;
//设定写超时
Time Outs.Write Total Timeout Multiplier=500;
Time Outs.Write Total Timeout Constant=2000;
Set Comm Timeouts (h Com, &Time Outs) ;//设置超时
DCB dcb;
Get Comm State (h Com, &dcb) ;
dcb.Baud Rate=9600;//波特率为9600
dcb.Byte Size=8;//每个字节有8位
dcb.Parity=NOPARITY;//无奇偶校验位
dcb.Stop Bits=TWOSTOPBITS;//两个停止位
Set Comm State (h Com, &dcb) ;
Purge Comm (h Com, PURGE_TXCLEAR|PURGE_RXCLEAR) ;
在读写串口之前, 还要用Purge Comm () 函数清空缓冲区, 该函数原型:
BOOL Purge Comm (
HANDLE h File, //串口句柄
DWORD dw Flags//需要完成的操作
) ;
参数dw Flags指定要完成的操作, 可以是下列值的组合:
PURGE_TXABORT中断所有写操作并立即返回, 即使写操作还没有完成。
PURGE_RXABORT中断所有读操作并立即返回, 即使读操作还没有完成。
PURGE_TXCLEAR清除输出缓冲区
PURGE_RXCLEAR清除输入缓冲区
3 读写串口
使用Read File和Write File读写串口, 下面是两个函数的声明:BOOL Read File (HANDLE h File, //串口的句柄
在用Read File和Write File读写串口时, 既可以同步执行, 也可以重叠执行。在同步执行时, 函数直到操作完成后才返回。这意味着同步执行时线程会被阻塞, 从而导致效率下降。在重叠执行时, 即使操作还未完成, 这两个函数也会立即返回, 费时的I/O操作在后台进行。Read File和Write File函数是同步还是异步由Create File函数决定, 如果在调用Create File创建句柄时指定FILE_FLAG_OVERLAPPED标志, 那么调用Read File和Write File对该句柄进行的操作就应该是重叠的;如果未指定重叠标志, 则读写操作应该是同步的。Read File和Write File函数的同步或者异步应该和Create File函数相一致。Read File函数只要在串口输入缓冲区中读入指定数量的字符, 就算完成操作。而Write File函数不但要把指定数量的字符拷入到输出缓冲区, 而且要等这些字符从串行口送出去后才算完成操作。如果操作成功, 这两个函数都返回TRUE。需要注意的是, 当Read File和Write File返回FALSE时, 不一定就是操作失败, 线程应该调用Get Last Error函数分析返回的结果。例如, 在重叠操作时如果操作还未完成函数就返回, 那么函数就返回FALSE, 而且Get Last Error函数返回ERROR_IO_PENDING, 这说明重叠操作还未完成。而较多使用异步重叠操作方式。有两种方法可以等待操作完成:一种方法是用象Wait For Single Object这样的等待函数来等待OVERLAPPED结构的h Event成员;另一种方法是调用Get Overlapped Result函数等待, 后面将演示说明。下面先简单介绍一下OVERLAPPED结构和Get Overlapped Result函数:OVERLAPPED结构OVERLAPPED结构包含了重叠I/O的一些信息, 定义如下:
typedef struct_OVERLAPPED{
DWORD Internal;
DWORD Internal High;
DWORD Offset;
DWORD Offset High;
HANDLE h Event;
}OVERLAPPED;
在使用Read File和Write File重叠操作时, 线程需要创建OVERLAPPED结构以供这两个函数使用。线程通过OVERLAPPED结构获得当前的操作状态, 该结构最重要的成员是h Event.h Event是读写事件。当串口使用异步通讯时, 函数返回时操作可能还没有完成, 程序可以通过检查该事件得知是否读写完毕。当调用Read File, Write File函数的时候, 该成员会自动被置为无信号状态;当重叠操作完成后, 该成员变量会自动被置为有信号状态。
该函数返回重叠操作的结果, 用来判断异步操作是否完成, 它是通过判断OVERLAPPED结构中的h Event是否被置位来实现的。
异步读串口的示例:
对以上代码再作简要说明:在使用Read File函数进行读操作前, 应先使用Clear Comm Error函数清除错误.Clear Comm Error函数的原型如下:
该函数获得通信错误并报告串口的当前状态, 同时, 该函数清除串口的错误标志以便继续输入、输出操作。参数lp Stat指向一个COMSTAT结构, 该结构返回串口状态信息。COMSTAT结构COMSTAT结构包含串口的信息, 结构定义如下:
这里只用到了cb In Que成员变量, 该成员变量的值代表输入缓冲区的字节数。最后用Purge Comm函数清空串口的输入输出缓冲区。
异步写串口的示例:
4 关闭串口
利用API函数关闭串口非常简单, 只需使用Create File函数返回的句柄作为参数调用Close Handle即可:
BOOL Close Handle (
HANDLE h Object;//handle to object to close
)
5 结语
在具体开发过程中要用到多线程方式, 让接收模块用一个守护线程来把串口实时的监控起来, 当有数据收到时候就告知其他应用线程, 这时还要用到事件类来维护应用线程和守护线程之间的同步通信方式。还有一个问题就是接收过程中时序不确定性, 可能是由于对串口硬件本身通信机制没有彻底把握清楚, 所以在接收函数中需要加适当的延时, 这个延时的大小就需要建立一个辅助文件来打印下所接受的数据, 进而随着时延变化观察分析所接收的数据是否符合预期后, 确定相应时延。这些是应用串口通信过程中所得到的体会。
摘要:面对日益增多的导航设备显控软件应用的状况, 基于VC++环境的串口通信及界面设计是最为方便、高效、快捷、可靠的方式, 而且VC++环境是基于Windows系统下的C/C++编程环境, 可以灵活地调用Windows系统很多API函数, 以达到方便性、高效性、快捷性、可靠性的目的。
关键词:串口,通信,高效性,可靠性
参考文献
[1]李现勇.Visual C++串口通信技术与工程实践[M].北京:人民邮电出版社, 2009.
[2]张筠莉, 刘书智.Visual C++实践与提高:串口应用与工程应用篇[M].北京:中国铁道出版社, 2011.
[3]周韧研.Visual C++串口通信开发入门与编程实践[M].北京:电子工业出版社, 2006.
[4]刘书智.Visual C++串口通信与工程应用实践[M].北京:中国铁道出版社, 2007.
基于串口通信的控制系统设计 篇9
1 VB环境下的串口通信
1.1串口通信
在VB环境中,利用串口可以实现计算机设备之间的相互通信。通常情况下,主要有2种通信方式:①利用Windows提供的API函数;②利用VB提供的MSComm控件。虽然前者实现方法简单,但设计过程相对复杂,工作量比较大,对程序员有较高的要求。尽管后者实现过程比较复杂,但由于微软对其处理过程进行了封装,并向用户提供了方便的接口,因此,使用操作比较简单,只需简单地嵌入就能完成复杂的串口通信任务,设计工作量比较小,效率较高,是程序设计比较理想的方法。
1.2 MSComm控件
MSComm是一种串行通信控件,它提供事件驱动和检查CommE vent属性两种处理通信的方式。在VB 6.0系统中,通过部件设置可以将该控件添加到工具箱中,以便在设计界面中引用,通过属性设置和操作实现串口数据的发送和接收。
在数据传输和控制应用中,MSComm控件常用的属性有以下几点:①Comm Port,设置并返回通信端口号;②Settings,以字符串的形式设置并返回波特率、奇偶校验、数据位和停止位;③Port Open,设置并返回通信端口的状态——打开或关闭;④Input,从接收缓冲区返回并删除字符;⑤Output,向传输缓冲区写一个字符串。
2串口通信的信号连接
在台式计算机后部面板上,通常有一两个串行通信接口,其外部形状为梯形公插头结构,根据插针的数量可以分为25针和9针2种。前者多见于早期的AT架构计算机。目前,ATX架构计算机的串口均采用9针接口,其结构如图1所示。
9针串口各引脚的功能分别为:载波检测(DCD)、接收数据(RXD)、发送数据(TXD)、数据终端准备好(DTR)、信号地(GND)、数据准备好(DSR)、发送请求(RTS)、发送清除(CTS)、振铃指示(RI)。
通常情况下,在计算机之间进行一般的数据传输时,如果没有特别要求,只要正确连接2,3,5引脚便可。其连接方法是:2台计算机对应串口的2,3引脚相互交叉,5引脚直接连通,具体如图2所示。
3控制系统设计
3.1设计方法
在设计控制系统时,可以通过串口实现计算机之间的相互控制,其具体方法是:①从市场上购买一对如图1所示的9针串口梯形母插头,按照图2所示的连接方法用信号线连接2个插头;②选择2台需要互联的计算机的空闲串口,用做好的串口连线连接;③选择其中一台计算机作为主控机,另一台作为被控机;④在主控机上安装并运行主控程序,选择连接的串行端口,由对应的串口向被控机发送控制指令;⑤在被控机上安装并运行被控程序,选择连接的串行端口,经由对应的串口等待并接收来自主控机的控制指令;⑥当被控机串口接收到主控机发来的控制指令后,根据预设的指令功能执行控制操作,实现系统控制。
3.2主控端程序设计
假设需要通过主控机对被控机完成下列3项控制功能:打开媒体播放器、打开记事本、关闭计算机,则主控机的控制指令可以通过2台计算机的串口实现传递。因此,要先通过用户界面选择所使用的串行端口号,设计界面如图3所示。
为了实现串行通信的数据传输和端口控制,程序设计时需要在界面中添加一个MSComm控件,通过界面选择通信用“串口号”,通过“打开串口”按钮,打开对应的串行端口。设MSComm控件的实例名为MSComm1,选择的串口号为1,则相应的设置语句为:MSComm1.CommP ort=1,MSComm1.PortO pen=True.
在图3所示的样例中,如果要“打开媒体播放器”,则点击相应的按钮,通过执行下列语句便可实现控制指令由主控机向被控机的发送:MSComm1.Output="MediaP layer".
3.3被控端程序设计
被控端程序与主控端程序一样,运行时也要通过MSComm控件对端口进行初始化操作——选择端口、打开端口,然后定时检测对应串口的工作状态。
为了实现对端口状态的检测,需要增加一个定时器控件,定时检测相应串口是否有新的数据到达,以便及时处理。定时时间可根据用户需要设置。
设程序中添加的定时器控件实例名为Timer1,则相应的被控程序部分代码如下:
在该程序运行的过程中,当接收到来自串口的一组数据时,系统便自动分析判断。如果是一条预设的控制指令,则执行对应的功能,否则不予处理。在本例中,如果接收到的是一个字符串“Media Player”,则程序通过shell语句直接调用,并执行本机中的wmplayer.exe程序,打开媒体播放器。
3.4控制测试
按照上述方法,用串行线连接好主控计算机和被控计算机相应的串口1端口,打开2台计算机,在主控计算机上运行测试程序,进入图3所示的控制界面,点击“打开串口”按钮。此时,便建立了2台计算机的通信连接。然后点击“打开媒体播放器”按钮,此时,在被控计算机上便可自动播放Windows系统自带的媒体播放程序。同样,在图3界面中点击“打开记事本”按钮,也可以迅速控制被控计算机运行记事本程序,实现预期的控制效果。
多次试验表明,该程序运行稳定、可靠,在远程控制系统设计中既简单又实用,具有较高的应用价值。
3.5说明
采用串口通信实现计算机控制的关键是正确设置串口通信控件MSComm。在具体工作中,需要重点注意以下几个方面的问题:①根据控制信号的物理连接,正确选择并打开相应的串行端口。②针对不同的终端设备,采用控件的Settings属性正确设置数据传输的波特率、奇偶校验、数据位、停止位。在缺省的情况下,控件按默认参数自动设置。③当系统需要通过串口传输大量数据时,为了保证在缓冲区过载时数据不会丢失,需要通过控MSComm件的Handshaking属性设置相应的通信协议(即握手协议),通过控件的OnC omm事件捕获并处理相关的通信事件,检查设备连接和通信是否正确,确保控制系统的稳定、可靠。此时,图2所示连接的串行线已经不能满足需要,还需要正确连接RTS、CTS、DSR、DTR等信号线。
4结束语
由此实例可知,利用串口通信的数据传输功能可以方便地实现计算机之间的系统控制。由于该方法硬件连接简单,软件设计灵活,可靠性高,因此,将其应用于工业、家用电器、办公等自动化和嵌入式应用中,可以快速实现数据采集和设备控制,具有广阔的应用前景。
参考文献
[1]杜正杰,王卫锋.基于串口实现DCS数据的安全采集[J].测控技术,2014,33(3):45-48.
[2]刘建河,赵玉丹,张玉强.基于LABVIEW串口通信的电机控制技术[J].制造业自动化,2013,35(11):135-137.
[3]李志伟,铁跃焕,杨茂兴.基于串行指令的红外探测远程控制系统设计[J].计算机工程与设计,2014,35(4):1486-1490.
【计算机串口通信】推荐阅读:
计算机通信网光纤通信08-02
计算机信息通信科技07-13
计算机PLC通信09-20
【计算机通信专业简历】06-28
计算机通信求职简历表格12-18
计算机网络电话通信05-10
计算机维护通信网络08-02
计算机通信网络安全09-03
计算机通信网络技术12-03
新时期计算机网络通信06-07