机器人串口通信

2024-11-02

机器人串口通信(精选7篇)

机器人串口通信 篇1

ABB公司工业机器人控制器IRC5集成了RS-232协议定义的串口模块, 使用者运用机器人语言RAPID编程对其进行控制。但由于工业机器人系统和机器人编程语言的特殊性, 很难灵活地应用控制器的串口, 导致数据不能及时被读取。为了改善机器人控制器的串口通信性能, 笔者设计了一个以STM32单片机为核心的通信中继系统, 该系统利用开关信号触发控制器中断, 通过中断处理函数来读取串口数据, 并且在控制器不能及时响应中断时将数据储存, 从而提高通信实时性和可靠性。

1 机器人控制器相关资源简介

1.1 控制器串口

ABB工业机器人系统由机器人控制器IRC5和机械臂组成, ABB公司开发了机器人语言RAPID和虚拟环境Robot Studio对机器人任务进行编程和模拟[1]。构建一个简单任务用于串口通信有以下步骤:

(1) 在Robot Studio环境下建立一个虚拟机器人工作站; (2) 配置系统串口的属性; (3) 通过编辑器编写调试RAPID程序; (4) 将虚拟工作站载入机器人控制器。

1.2 控制器中断

机器人控制器在三种情况下可以对中断进行响应:1) 当程序从当前指令向下跳转时;2) 当在执行等待指令时;3) 当在执行机器人移动指令时。除了在某些特殊情况 (比如机器人控制器正在执行工艺参数处理这类实时性要求比较高的程序段或者中断被屏蔽[3]) 下, 控制器能非常快的响应中断。当控制器无法对中断进行响应时, 中断将以队列的形式排序等待响应, 控制器满足响应中断条件后, 将从队列的第一个位置开始遍历, 依次响应等待的中断。

定制一个外部I/O中断步骤如下:1) 配置控制器I/O单元和I/O信号;2) 在RAPID程序中关联信号和中断服务函数, 并设置触发方式[2]。RAPID程序如下:

!定义中断变量

VAR intnum sig1int;

!关联I/O和中断服务函数

CONNECT sig1int WITH iroutine1;

!设置中断触发方式为上升沿触发

ISignal DI di1, 1, sig1int;

程序中, sig1int为中断标志, 在与中断服务函数关联后, 用于存放中断服务函数iroutine1的首地址, 它必须被定义为全局变量。数字信号di1在工作站配置中被定义, 当di1处于上升沿时, 中断将被触发, 控制器在满足中断条件的情况下, 执行中断服务函数iroutine1。控制器通过挂载在其Devicenet总线上的信号板来接收外部I/O信号, di1映射在信号板的输入端子X3的1口上。

2 优化系统设计

2.1 硬件平台

经过对机器人控制器相关资源分析, 对通信中继系统的功能提出以下几点要求:1) 能够确认数据源和机器人控制器的收发状态;2) 在机器人控制器不能及时响应中断来读取数据时能将数据源的数据暂存;3) 在控制器可以接收数据时对数据进行重发。针对要求1) , 笔者受TCP/IP协议面向连接的通信方式启发, 在进行通信前通过主机发送请求/从机应答的方式来确认机器人控制器可以接收数据[4]。在硬件上, 这个方案通过单片机I/O口和控制器I/O板的接线来实现。

STM32F103是一款32位单片机, 核心主频达到72MHz, 拥有丰富的片上资源:高速I/O接口、通用同步异步收发器 (USART) 、IIC总线, 快速的中断响应, 满足本中继系统的要求, 因此选用其作为系统的控制核心。本系统的硬件结构如图1所示。STM32F103的同步异步收发器USART1、USART2通过I/O复用分别与外部数据源和控制器的串口连接。储存器选用容量为2K的EEPROM储存器AT24C02来实现, 通过IIC总线接口与STM32F103通信, 它的作用是在数据源产生了数据而控制器无法响应中断时将数据暂存[5]。分配两个STM32F103普通I/O口分别通过硬接线连接到信号板X3端子1口和X1端子的1口, 前者是单片机控制信号接线, 用于触发控制器中断, 后者是控制器用于应答单片机的信号接线。需要注意的是, 上述两个硬接线需要通过电压限位和升压器件连接, 因为控制器电平和单片机电平存在很大差异。

2.2 软件设计

系统的软件由通信中继系统程序和控制器程序组成, 通信中继系统程序主要包括读串口模块、写EEPROM模块、中断服务函数模块;控制器程序包括机器人任务模块、中断服务函数模块;通过如图2的流程对程序进行组织。图中, 通信中继系统通过USART1的TXNE事件中断服务函数从数据源读取数据, 发送写数据请求是通过拉高I/O电平, 使控制器产生中断来实现。在控制器的中断服务函数中, 控制器首先拉高X1端子1口的电平来应答, 然后调用读指令读取数据并清空中断队列。单片机在控制器应答之后进入中断, 执行服务函数将EEPROM内储存的数据发送的同时, 清空EEPROM。在软件上完成主机发送请求/从机应答的通信方式。

3 实验结果

为了对本系统的功能进行验证, 以PC作为数据源, 利用串口调试助手进行了两次简单实验:通过串口调试助手间隔1000毫秒循环发送字符A, 机器人控制器在接收到数据后又将数据发回。实验在机器人控制器执行简单路径控制的情况下进行。第一次实验直接将PC和机器人控制器通过串口直接连接, 控制器利用轮询读取数据;第二次实验利用串口通信中继系统将PC和机器人控制器连接, 控制器利用中断读取数据。实验结果如图4所示, 图3 (a) 为第一次实验的情况, 调试助手发出的字节和收到的字节存在较大差异, 数据丢失严重, 图4 (b) 为第二次实验的情况, 发出的字节虽然也少于丢失的字节。

4 结束语

本通信中继系统在不增加机器人控制器硬件平台复杂性的情况下, 通过在机器人工作站中添加中断的方式, 达到了提高机器人系统串口通信实时性和可靠性的目的。对实验结果中出现的数据丢失现象, 笔者分析是由于单片机的中断服务函数对EEPROM执行读操作的同时, 数据源发送的新数据无法写入。可通过在本系统中加入两片EEPROM, 同时利用DMA的方式对数据源的数据进行传输, 实现双缓冲结构, 进一步保证通信质量。

摘要:通过对ABB公司的工业机器人控制器IRC5和机器人编程语言RAPID进行分析, 设计了一种提高机器人控制器串口通信效率的中继通信系统。本系统以STM32F103单片机为核心, 利用其产生数字I/O信号触发机器人控制器中断来读取数据, 并且实现了数据的暂存, 提高了机器人控制器串口通信的实时性和可靠性。

关键词:ABB机器人,异步串口通信,单片机,中继系统

参考文献

[1]廖旋, 肖继学, 殷巧, 等.Visual C++中串行通信方法的实时性研究[J].西华大学学报 (自然科学版) , 2012, 31 (6) :65-68+72.

[2]吴先亮, 刘春生.基于多线程的串口通信软件的设计与实现[J].控制工程, 2004, 11 (2) :171-174.

[3]蔡干杰, 黄跃.PLC以太网在工业机器人中的应用[J].南方农机, 2015, 46 (1) :59+61.

[4]崔勇.农业机器人的研究与应用浅探[J].南方农机, 2008, 39 (1) :35-37.

[5]蔡自兴, 任孝平, 邹磊.分布式多机器人通信仿真系统[J].智能系统学报, 2009, 4 (4) :309-313.

USB虚拟串口通信实现 篇2

本文中的智能家居控制系统采用基于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.

机器人串口通信 篇3

关键词:Windows CE,串口通信,应用

引言

在通信和实时监控系统中,串行通信因其具有连接简单、使用灵活方便、数据传输可靠等优点得到了广泛的应用。Windows CE(简称Win CE)是微软推出的一个32位、多任务、多线程的完全抢占式的实时操作系统。Win CE系统以其良好的性能得到越来越普遍的推广[1]。

(1)Win CE下的串行通信简介

串口在Win CE下属于流接口设备,它是串行设备接口的常规I/O驱动程序调用和与通信相关的具体函数的结合。串行设备被视为用于打开、关闭、读写串口的常规、可安装的流设备。Win CE的通信函数和其它大多数Windows的通信函数相同。但仍有几点区别:

a.Win CE设备资源很少,存储器、显示器都很小,接口也比较少,而且根据实际情况变化很大;

b.Win CE只支持Unicode;

c.Win CE还有一些专门设计的控件,比如Command Bar;

d.Win CE不支持直接对串口的寄存器进行编程;

e.通信端口不能像文件一样被共享。

(2)Win CE下的串行通信基本方法

a.打开和关闭串口

在所有的流设备驱动程序中,均使用方法Create File来打开串行端口设备。如果打开串口成功,将返回打开串口的句柄。下面的代码是以读写方式打开串口COM3。

Windows CE规定,当引用一个流接口设备驱动程序时,应用程序使用三字符名,其后跟端口号和一个冒号。例如“COM3:”就表示串行端口3驱动程序。宏_T可以将字符串“COM3:”转成Unicode编码。

关闭串口可以调用Close Handle(m_h Comm)。释放串口资源。

b.配置串口

首先打开串口后,调用Setup Comm函数给串口分配一定大小的发送缓冲区和接收缓冲区;之后调用Get Comm Timeouts函数对读写串口进行超时设置;然后调用Get Comm State函数获得当前串口配置,然后根据需要修改DCB成员,用Set Comm State函数设置新的串口配置,最后调用Purge Comm函数清空串口的发送接收缓冲区。代码如下:

c.读写串口

调用Read File和Write File函数对串口进行读写。在通信过程中可能会发生错误,对有些错误通信将无法进行下去,必须调用Clear Comm Error函数清除这些错误[2]。这个函数还可以返回错误代码和当前通信状态缓冲区的内容。

Win CE不支持重叠I/O,如果在主线程进行大量读写串口操作时,有可能使整个程序陷入缓慢的串口等待中去,因此一般都采用多线程来进行读写串口操作。

d.通信事件

Comm Thread监视线程函数,在此线程函数中不停的调用Wait Comm Event()等待通信事件,当有串口事件发生时去判断是哪一种串口事件,如果是接收事件发生则调用Set ReadTo Port,如果实际发送事件发生则调用Set Write To Port,最后调用Wait For Multiple Objects,通过返回值来决定唤醒读还是写串口线程如果同时读写事件同时发生,则优先响应读串口线程。

1 串行通信的模型设计

1.1 多线程技术

在Windows CE中,线程以时间片为单位来运行,按一定的优先级将时间片段分配给各个线程,各个线程在各自的时间片段内共享。所有高优先级的线程都将在低优先级的线程之前运行。在可以调度被设定为特定优先级的线程之前,所有拥有高优先级的线程都必须被阻塞。同等优先级的线程以循环方式来调度。如果高优先级的线程停止阻塞,而低优先级的线程目前正在运行,则低优先级的线程会立刻被挂起,同时去调度高优先级的线程。低优先级的线程永远不会抢占高优先级的线程。这种方法能很好地实现抢占式多任务的处理,提高数据传输的吞吐量和通信的实时性[3]。特殊情况:一种是线程具有优先级THREAD_PRIOR-ITY_TIME_CRITICAL,它永远不会被抢占;另一种就是低优先级的线程拥有高优先级的线程正在等待的资源,出现优先级倒置。

下面是一个创建线程和线程函数的例子:

Create Thread函数的许多参数在Windows CE下都不支持,所以被设为NULL或0。第三个参数指向线程函数的开始,第四个参数是Create Thread函数传到线程函数的唯一参数。Create Thread函数返回线程句柄,当这个句柄不需要时,调用Close Handle函数关闭它。在线程函数体可以进行串口的读或写操作。

1.2 事件同步对象

对于在系统中运行的多个线程,需要协调它们的活动,也就是实现同步。在Win CE中,采用的方法是使用同步对象。一个线程等待一个同步对象,当用信号通知该对象时,解除阻塞正在等待的线程并调度该线程。同步对象包括事件和互斥体。

事件对象就是一种有两种状态-有信号和无信号的同步对象。调用Create Event函数创建事件后,事件自动被置为信号状态。事件可以被命名,从而被不同进程共享。通常的做法是采用多线程,一旦发现串口有预定事件时,用消息通知主线程请求相应的处理,主线程接收到发送来的消息唤醒相应的线程处理程序。各线程间以事件同步对象来实现同步、形成监视串口与读写串口的协调一致[4]。

2 市场应用

2.1 定位GPS

在车载定位系统中,导航计算机需要接受多种传感器的数据输入,其中最常用到的就是GPS数据。程序采用多线程,主线程负责消息处理,另外还有读写两个附加线程,使用一个事件触发。读线程负责从串口读回GPS数据,写线程由事件触发[5]。

2.2 医疗监护

基于ARM的嵌入式多参数网络监护仪主要面向医院、社区和家庭,具有成本低、功耗小、数据存储量大、数据处理速度快、便于远程医疗、能同时实现实时多任务的操作等各项优势,是现代医疗监护进一步智能化、专业化、小型化、低功耗的发展新方向,困此具有很广阔的市场前景。

2.3 工业控制

Cybectec建立了Substation Modernization Platform(变电站现代化平台,SMP),它是一种基于Win CE用以解决互通性问题的智慧化网关设备。借助Win CE所提供的优越互通性,Cybectec创建出一种从多种数据源整合数据、监视变电站/发电厂运行状况、并与远程能源管理系统进行通信的设备。

2.4 食品安全

FMC Food Tech选择了Win CE作为LOG-TEC Momentum系统的操作系统,这是他们的新一代杀菌控制系统。

Win CE提供的更富有吸引力的一个特性,是它的实时回应能力。Win CE通过优先权来运行中断执行绪,并且以一种确定性的方式来处理输入资料,能对时间敏感的I/O刺激做出高速的响应和反应。Win CE带来的最大好处是它能把LOG-TEC Momentum连接到种类众多的I/O设备上。I/O的扩展能力对于食品加工行业来说是特别重要的,因为它必须对杀菌过程进行跟踪和记录,以保证消费者买回家的食品的安全和质量能满足严格的国家标准。

Win CE的另一个主要优势是系统进入了Windows环境,这使操作员操作起来更加容易了。每个人对Windows环境都已经很熟悉了[6]。

结束语

以上给出了在Windows CE下的串行通信的基本方法及流程。利用多线程技术保证了通信的实时性和数据的吞吐量。也介绍Windows CE程序在不同领域应用情况,具有很大的市场前景。

参考文献

[1]许南雁,郝继飞.WindowsCE环境下单片机串行通信的设计与实现[J].自动化技术与应用,2005.

[2]Charles Petzold.WindowsCE程序设计[M].北京:北京大学出版社.

[3]贾广雷,刘培玉,耿长欣.多线程技术及其在串口通信中的应用[J].计算机工程,2003.

[4]陈淑珍,石波.基于Windows多线程环境下的串口通信[J].武汉大学学报(自然版),2000.

[5]www.DigiTimes.com[EB/OL].

远程维护系统串口通信协议研究 篇4

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.

VxWorks下多串口通信设计 篇5

本嵌入式系统在传输距离远电缆较长时使用的是RS485广播方式,在近距离传输时使用的是RS422方式,实现数据容量较大的通信,用RS232实现VxWorks编译环境Tornado下的宿主机-目标机的连接、下载和调试.该多串口通信系统使用的主要硬件是盛博公司的基于PC104总线的SEM/MSP-8多串口卡.

1 硬件设置

SEM/MSP-8采用2片TG16C554芯片,共有8个串口,Port1~4 RS232/RS422/RS485/TTL可选 ;Port5~8 RS-232/RS-485/TTL可选,根据需要可以扩展到12个串口.带有16 B的 FIFO,标准配置下可以达到115 200bps,+5 V电压,8个串口的基地址和中断选择上电时从EEPROM中读取数据配置,上电后可通过软件配置.首先进行多串口板上的跳线设置,JP1,JP1a,JP2,JP2a,分别为设置Port1~Port8工作在RS232/RS422/RS485方式.D、C、B、A为基址地址设置,根据实际,这里基址设为0x100, D、C、B、A对应值为1 011,其中1表示短接,0表示断开.2,3,4,5,…,15为中断号,要使用哪个中断就将其跳为1,最好加上中断匹配电阻(通过J8设置).在此用到5,6,11三级中断.JCK为频段范围跳线,跳上时串口的工作频率是原来不跳上时的1/4[2].

跳线设置见图1.

Port1~Port4,为RS422工作方式 ,中断级别为5;Port5、Port6为RS485,中断号为6;Port7设置为RS232,中断号为11;Port8备用.其中Port1~Port4与通信的另一端为一一对应的关系,RS485因为可以广播,一个串口上对应的通信另一端又带了几个RS485端.如图2所示.

2 软件设计

软件设计包括初始化设计,接收方软件设计和发送方软件设计,其中发送方软件设计分为RS232/RS422发送方设计和RS485发送方设计.使用模块化的设计方法,在开发期间应用了数据流程图[3].

2.1 初始化软件设计

EMM8在系统启动时会从板上的EEPROM中读取各个端口的基本配置信息,主要是端口映射地址及分配的中断号,这些信息可以在启动后编程修改,在此设置串口的基地址为0x300,还可以通过对EEPROM的读写,用来对串口板进行上电自检.ACE串行通信口有一个可编程波特率发生器,以1到(216-1)为除数因子将时钟(1.843 2 MHz)分频,分频输出值(即串口通信的波特率)=时钟频率/(除数因子×16).2个8位除数因子锁存寄存器以16位二进制格式存储除数因子.(DLM高8位,DLL锁存除数因子的低8位).

软件流程如图3所示.

具体对各个寄存器的操作见源代码注释:

sysOutByte(BASEADDRESS+0,0x80+i);/*BASEADDRESS为板上硬件跳线确定的地址,在此为0x100,0x80使能最高位,i为串口号 */

sysOutByte(BASEADDRESS+1,COMBASE[i]>>3);/*设置的串口地址 */

sysOutByte(BASEADDRESS+0,0x88+i); /*0x8+i*//*写入存放串口i-1的中断选择的内部寄存器*/

sysOutByte(BASEADDRESS+1,LOADINT);/*设置中断号*/

sysOutByte(COM7BASE+3,0x9b); /*设置

通信格式,8-E-1*/

sysOutByte(COM7BASE+0,0x02);/*高位为0,低位为2*/

sysOutByte(COM7BASE+1,0x0);/*设置波特率9 600*/

sysOutByte(COM7BASE+4,0x09); /*使能外部中断和/DTR*/

sysOutByte(COM7BASE+1,0x05); /*外部数据接收中断置有效*/

intConnect(INUMTOIVEC(INTVECGET(LANUCHINT)),(VOIDFUNCPTR)BombINT,0); /*挂接中断服务程序, */

sysIntEnablePIC(LANUCHINT); /*开中断*/

2.2 接收软件设计

VxWorks系统中,在中断服务程序里不能有printf打印、取信号量、接收消息等,因为这些操作可能引起任务的阻塞.但是可以发送信号量,发送消息,在中断服务程序中应该尽可能地使用简单的原语操作,以便节省开销,同时提高可靠性,最好就是一个SemGive.在此把接收到的字符加入到环形缓冲中rngBufPut();也可以发送消息通知任务接收.根据具体的情况,可以添加一些容错处理.比如,每次退出中断前将接收缓冲寄存器(RBR)读空,退出中断时加一定很小(指令级)的延时:

for(ii=0;ii<0x400;ii++){}

软件流程如图4.

2.3 发送软件设计

RS232,RS422,RS485因为具体的电气和线路特征不一样,收发数据各不相同.抽象到软件层面,RS232和RS422可以看成相同的处理.它们发送软件具体源代码如下:

void BombSend422(void) {

while(i

if((sysInByte(COMBASE[i]+5))&0x20) {

sysOutByte(COMBASE[i],SendData[i]);

i++;

j=0; }

j++;

if(j>10 000) break; }

RS485在发送时,要先切换工作方式,然后才发送数据,最后把工作方式切换为接收.需要特别指出的是,RS485接收端和发送端的通信握手很重要,在一对正负线(L+、L-)上,不能同时又有接收又有发送,否则有可能烧毁硬件或者造成硬件工作不规则,通过示波器会看到波形失真,可能影响到系统的整体性能甚至是致命的错误. 具体在发送过程中,还要判断发送移位寄存器是否为空的TEMT位,在它为空时才表示发送缓冲区的数据已经完全送出,并且在发送完毕后加一定的延时,将其电平转换准备接收,然后才切换为接收方式:

bb=sysInByte(COMBASE[i]+5);

if(bb&0x40) /*判断TEMT位*/

{ /*发送数据*/}

for(ii=0;ii<0x400;ii++){}/*延时*/

sysOutByte(COMBASE[i]+4,0x09); /* 设置为接收方式

软件流程如图5.

3 设计中的注意问题

(1)串行字符的接收打包问题

字符设备和块设备相比,块设备可以对整个消息帧进行发送和读取,在编程实现时会相对的方便.字符设备每次收发只能按单个字符进行,其中一个不正确的字符可能干扰到整个通信系统工作不正常,尤其是报文格式不定长的时候.为此,对字符设备组成的报文进行分析很重要,需要一些容错处理.通常在一帧报文或者一个命令格式上,头2个字节加上报头、命令字,末2个字节加上校验和、结束符.接收时,判定报文的总长度,再加上以上的打包字节,这样在一帧数据中间多了几个字符的情况下,可以抛弃此帧数据,而不会连续的影响到下几帧.或者在头几个字符不正确的时候,可以滤掉多余的字节或者乱码,得出后边的正确报文.

(2)硬件进行初始化

直接在应用程序中对硬件进行初始化,而没有在板级驱动包(BSP)中.当存在多个中断但是中断级别又相同时,可以根据各个串口的不同地址来识别.在发生较多中断的时候,要对某些口进行一些读空操作,以免阻塞.

(3)看门狗的使用

此处延时很短,只用到了指令级,毫秒级以上定时使用看门狗定时器比较好,尤其在一些对实时要求比较高的场合.因为在VxWorks中,看门狗定时器是作为系统时钟中断服务程序的一部分来维护的,通常与它相联系的函数以系统时钟中断级作为中断服务代码来执行.用wdStart()启动看门狗进入延时状态,一旦计时结束,它将调用一个有wdStart()指定的一个中断服务程序,与taskDelay()延时不同,该中断服务程序在任务的上下文之外执行.所以taskDelay()可能会存在一定误差.

4 结 束 语

风河公司的VxWorks实时操作系统可靠性高,比WindowsCE的实时性好,相对于开源的嵌入式Linux,VxWorks编译环境Tornado更加简单和人性化,它已经成功应用于火星探测器和其他实时的高可靠系统中.多串口通信嵌入式系统使用了RS485的广播,Tornado下实现宿主机-目标机的连接使用RS232,它的不足之处就是下载到目标机进行调试的速度比较慢.软件固化到Doc上后,经实践证明,整个系统响应时间快,工作稳定可靠,通信流畅,满足了预期的要求.

参考文献

[1]孔祥营,柏桂枝.嵌入式实时操作系统VxWorks及其开发环境Toanado[M],2002:21-27.

[2]朱德森.微型计算机(80486)原理及接口技术[M].2003:279-288.

基于串口通信的控制系统设计 篇6

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.

基于VC++实现串口通信的方法 篇7

关键词:串口通信,VC++,MFC,MSComm控件,通信函数

0 引 言

串行通信具有实现简单、使用灵活方便、数据传输可靠等优点,因而广泛应用于工业控制系统中,是计算机与外部设备进行数据通信时经常使用的方式之一,所以针对计算机与外部设备通信的上位机关于串口通信的开发,在项目开发过程中具有重要地位。本文选用VC++为上位机软件开发环境,因为VC++是一种面向对象的可视化开发工具,提供了良好的界面设计能力,在PC机的串口通信方面有很强的功能[1]。它具有功能强大、简便易用和代码执行速度快等特点,在通信软件的开发中成为越来越多开发人员的首选工具。本文着重介绍三种基于VC++关于串口通信实现的方法。

1 串口通信实现过程

在项目设计过程中,串口通信的实现过程一般为[2]:

1)按协议的设置初始化并打开串行口,即通知Windows本应用程序需要使用此串口,并对其他应用程序禁用此串口。

2)配置串口。

3)在串口上往返传输数据,并在传输过程中进行相关校验。

4)不再需要串口时,关闭使用的串口,即释放串口以供其他应用程序使用。

综上所述,串口编程的实现流程如图1所示,下面介绍基于VC++如何实现该流程。

2 基于VC++实现串口通信的三种方法

目前在串口通信中有很多开发软件提供了不同的开发函数,都能实现串口通信设计,下面三种方法着重介绍上位机串口通信配置的VC++实现。

2.1 运用MFC进行编程实现串口通信

Win32系统把文件的概念进行了扩展,无论是文件、通信设备、命名管道、邮件槽、磁盘还是控制台都被看作文件。因此,可以用MFC中的CFile类来实现对串口的操作,并且Win32中的I/O函数支持重叠式输入输出,提高了系统的时效性。Win32 API 包含了一系列访问通信资源的通信函数。通常,采用MFC进行串口通信编程的主要步骤如下[3]:

(1)在MainFrm.cpp中定义全局变量

HANDLE hCom; //准备打开的串口的句柄

(2)打开串口

Windows通信会话以调用CreateFile()函数打开串口为开始,通信程序在CreateFile( )处指定串口设备及相关的操作属性,并返回一个句柄,该句柄将被用于后续的通信操作。

(3)串口初始化(设置串口参数及进行串口超时设置)

在打开通信设备句柄后,通常要对串口进行初始化(即配置参数如波特率、数据位数、停止位数、奇偶校验以及握手协议和流控协议等),串口配置通过改变数据结构——设备控制块(DCB,Device Control Block)来实现[1]。结构DCB有近30个数据成员,对于采用3线方式的串行通信,只要设置好波特率、数据位、停止位、校验位等几个关键参数即可。

一种简捷的方法可以使得不了解DCB的详细内容也能设置好串行通信参数,即利用BuildCommDCB()函数来设置DCB,然后用函数SetCommState()配置串行通信接口。

(4)读写串口的API函数

串口打开后,可以对它进行读写操作。

(5)关闭串口的API函数

串口是非共享资源,所以打开某个串口后,一定要关闭。CreateFile()返回值非零,则表示调用成功。

2.2 运用MSComm控件进行编程实现串口通信

MSComm(Microsoft Communication Control) 通信控件是微软基于组件对象模型(COM)开发的一个事件驱动的全双工高级通信接口,作为主要用于串行通信编程的Active 控件, 其具有非常好的运行效率和稳定性。

(1)MSComm 控件的功能及原理[1]

MSComm 控件具有完善的串行数据的发送和接收功能, 不但包括了全部Windows API中关于串行通信的函数所具有的功能,还提供了更多的对象属性来满足不同用户的编程需要。该控件屏蔽了通信过程中的底层操作,用户只需通过设置并监视其属性和事件,即可完成串口编程,实现与被控制对象的串行通信、数据交换,并监视或响应在通信过程中可能发生的各种错误和事件。

(2)MSComm 控件的通信方式[5]

MSComm 控件提供两种通信方式:

a)事件驱动通信方式

事件驱动通信是处理串行端口交互作用的一种非常有效的方法。许多情况下,程序在事件发生时需要得到通知(比如在CD(Carrier Detect)或RTS(Request To Send)线上有一个字符到达或一个变化发生),此时,可以利用MSComm 控件的OnComm事件捕获并处理这些通信事件,OnComm 事件还可以检查和处理通信错误。在编程过程中,通过在OnComm 事件处理函数中加入相应处理代码,实现应有的功能。这种方式的优点是实时性强,可靠性高。

b)查询通信方式

查询方式是指通过在用户程序中定时或不定时地查询MSComm 控件的CommEvent 属性是否发生变化,来进行相应的处理。其实质还是事件驱动,只是在某些情况下,这种方式显得更为便捷。例如,在应用程序较小或处理器空闲时间较多时,这种方法就更可取。查询方式的优点是可控性好,且传输稳定,缺点是查询有时间间隔,在数据变化较快的情况下,对所有串口轮流查询,可能会出现数据丢失。虽然时间间隔越小,数据的实时性越高,但占用的系统资源也越多。

2.3 运用VC++运行库函数实现串口通信

利用VC++进行异步通信编程,其实是对UART内部寄存器的读出或写入操作。通过计算机串口进行串行通信之前,必须根据设备的有关通信参数,约定双方的通信方式,包括波特率的设置、奇偶位校验及停止位的设立,确定数据传输帧格式和UART操作方式,逐个对线路控制寄存器、波特率因子寄存器等寄存器写入,利用VC++运行库提供的通信函数_inp( )和_outp( )来实现串口通信[5]。

另外也可以运用第三方的通信类来编写串口通信,第三方编写的类有非常简洁明快的接口,程序更加灵活,再结合到VC++中运行效率更高。

3 结束语

VC++是一个非常优秀的用户开发平台,提供了多种方法对串口进行通信控制,使用户不必了解具体的硬件原理,简化了编程,使程序透明化,并且适应性好,可移植性高。采用MFC串口通信编程是最灵活、最常用并且功能强大的方法,适用于同各种不同的外设进行串行通信,但需要程序员对硬件工作原理有较深的了解;ActiveX控件编程容易实现,不需要处理烦琐的细节,但是灵活性较差;利用VC++运行库的标准通信函数实现串口编程原理简单,不足之处是实用性和灵活性较差。因此,在具体实践中要结合功能需要,综合考虑复杂程度、灵活性等因素,选择合适的方法,实现上位机串口通信。

参考文献

[1]龚建伟,熊光明.Visual C++/Turbo C串口通信编程实践[M].北京:电子工业出版社,2008.

[2]李现勇.Visual C++串口通信技术与工程实践[M].北京:人民邮电出版社,2006.

[3]王华,岳丽全,岳志高.MSComm控件在VC++6.0串口通信中的应用[J].长春工程学院学报:自然科学版,2009,10(1):72-73,91.

[4]李长林,高洁.Visual C++串口通信技术与典型实例[M].北京:清华大学出版社,2006.

[5]求是科技.Visual C++/Visual Basic串并口开发技术工程应用实例导航[M].北京:人民邮电出版社,2006.

[6]乌尼尔,董海军.Visual C++经典例程分析[M].北京:中国电力出版社,2004.

[7]齐舒创作室.Visual C++6.0开发技巧及实例剖析[M].北京:清华大学出版社,2006.

上一篇:电气安全下一篇:端正学风