首页 > 文章中心 > 异步通信

异步通信

异步通信

异步通信范文第1篇

关键词:数字信号处理器;多通道缓冲串行接口;串行通信

中图分类号:TP273 文献标识码:A

Implementation of Asynchronous Serial

Communication between PC and DSP

CHENGZhi-cheng JIN Shi-qun

(The School of Instrument Science and Opto-electronic Engineering,Hefei Univeristy of Technology,Hefei 230009,China)

Abstract: The United States TI's TMS320C5410 DSP chip is an example, introduced structural features of multi-channel buffer synchronous serial interface (McBSP) DSP chip , users often face against the DSP system and PC real-time exchange of data communication interface standard is not compatible with the problem,berween a new serial communication design program to achieve full-duplex communication between a synchronous serial port of DSP's McBSP and PCSerial RS-232 asynchronous .

Keywords: DSP;McBSP;serial communication

1绪言

在DSP应用系统中,实现DSP与PC机的异步串行通信必须要对其接口进行设计。与并行接口相比,串行接口的最大特点便是器件引脚数目得以减少,降低了接口设计复杂性。多数DSP芯片提供的是同步串口,在实际的应用中,也需要DSP 能够与外设进行异步串行数据传输,本文即针对这种应用,研究并实现了一种简单、可靠的异步串口扩展方法。

2扩展方案提出

综合在DSP应用系统中扩展异步串行接口的方案,其基本方法和优缺点分析如下:

(1)利用DSP 的McBSP和 DMA来实现,在不扩展其他硬件的情况下,用软件实现异步数据传输格式。这种方法的优点在于硬件简单,但软件复杂,加大CPU 的负担,所以不适合通信数据量大的场合;

(2)在 DSP 的并行总线上扩展 UART 芯片(比如TI 公司的TL16C552),用硬件来实现异步数据传输,其优点是软件实现简单,缺点是在总线上还要扩展其他设备的情况下,使目标系统复杂化;

(3)利用DSP 的McBSP 同步串行接口,在扩展适当硬件的情况下,将同步数据变换为UART 异步数据格式进行传输,这样就充分利用了DSP 的片上资源,使硬件系统尽量简单化。

综合考虑硬件连接和软件编程的方便性,本文采用第三种方案,应用MAX3232串行异步收发器与DSP的McBSP口直接连接,硬件上无需任何其它器件,同时由于异步数据发送和接收由MAX3232以硬件方式实现,所以软件编程而言,只需要考虑DSP与MAX3232之间的同步数据通信,就能以最简单的硬件连接和软件编程来实现同步到异步的串行数据格式转换。

3硬件设计

TMS320C5410有三个多通道缓冲串行通信接口(McBSP),每个接口有7个引脚,除数据收发引脚(DX、DR)外,还包括发送时钟(CLKX)、接收时钟(CLKR)、发送帧同步(FSX)、接收帧同步(FSR)和外部输入时钟(CLKS)等引脚,分别用于传输数据、时钟和帧同步信号,实现同步串行通信[1]。McBSP内部结构如图1所示。

将同步串口用于异步串行通信时,硬件连接方式如图2所示:

图2中DR引脚与FSR引脚始终连接在一起,作为DSP的串行通信输入端。对于McBSP而言,不论外部如何连接,始终认为工作在同步方式下,DR与FSR相连,则是将数据线上的电平跳变直接引入到FSR端,当FSR检测到数据线上的第一个下跳沿时,McBSP认为帧同步信号到来,然后根据设定的帧结构,由DR引脚读取数据。

异步通信的帧格式[2](如图3所示)中,每一字符由四部分组成:起始位、数据位、奇偶校验位(可以省略)和停止位。起始位(0)信号只占一位,用来通知接受设备一个待接收的字符开始到达。线路上在不传送字符时应保持为1。接收端不断检测线路的状态,若连续为1后又检测到一个0,就知道发来一个新字符,应马上准备接收。起始位后面紧接着是数据位,它可以是5位(D0一D4)、6位、7位或8位(D0一D7)。奇偶检验位(D8)只占一位,但在字符中也可以规定不用奇偶校验位,则这一位就可省去。也可利用这一位(1/0)来确定这一帧中的字符所代表信息的性质(地址/数据等)。

停止位用来表征字符的结束,它一定是高电位(逻辑1)。停止位可以是1位、1.5位或2位。接收端收到停止位后,知道上一字符已传送完毕,同时,也为接收下一字符做好准备只要再接收到0,就是新字符的起始位。

4软件设计

程序设计的重点是对McBSP的相关寄存器进行配置,表1给出了McBSP相关寄存器重点位的设置方式。

考虑到系统软件的可移植性和可读性,软件采用C语言编写,同时利用DSP开发软件CCS所提供的DSP/BIOS中的芯片支持库函数(CSL)。软件包括初始化程序和中断服务程序,下面是McBSP工作于SPI模式下(主/从模式)初始化程序流程图见图4。

根据流程图,调用CSL的McBSP配置库函数即可完成McBSP的初始化:

MCBSP_Handle hport0;

MCBSP_Config PortConfig = {/*定义寄存器设置结构*/

0x1800, /*设置串口控制器1的值*/

0x0000, /*设置串口控制器2的值*/

0x0040, /*设置接收控制寄存器的值*/

};

hport0 = MCBSP_open (0,MCBSP_OPEN_RESET); /*打开一个McBSP串口*/

MCSP_config (hport0, &PortConfig); /*按结构设置McBSP的各寄存器*/

5结语

本文介绍的这种C5402 DSP同步串口McBSP与PC机异步串口RS-232进行通信的方法,应用到本院信号处理实验室的DSP系统中,结果表明该方法具有硬件结构简单、通信线少高速可靠、可全双工通信的特点。

参考文献:

[1]梁晓雯,裴小平.TMS320C54X系列DSP的CPU与外设[M].北京.清华大学出版社.2006.

[2]曹志刚,钱亚生.现代通信原理[M].北京.清华大学出版社.2003.

异步通信范文第2篇

C是与RCM2200配套使用的软件开发语言,它拥有丰富的库函数以便程序员编程时调用,结果表明,运用该语言能实现基于RCM2200以太网与异步串口之间的成功通信。

关键词 嵌入式系统;RCM2200;UDP报文;串口通信

1 引言

目前,嵌入式技术已经广泛渗入并应用到各领域,涉及到多种传统及现代技术,形成了前所未有的多学科、多领域的交叉与融合。由Z-World公司推出的RCM2200[1]是一款低成本的嵌入式微控制器核心模块,它采用Dynamic C®[2]这一专门为Z-World产品创建的集成的C 编译器、编辑器、链接器、装载器和调试器,便于实现快速开发应用,加快产品投放到市场。

UDP协议[3][4]是比较著名的传输层协议之一,它与TCP协议一样是基于IP协议的,但与TCP不同的是它不需要协议层提供质量保证,因此,在需要实时数据传输的情况下应用比较广泛。并且,因为不提供质量保证,服务器没有必要一直处于等待状态,从而大大减轻了服务器的负担。在某些情况下,还可以根据需要给UDP报文加上一些质量保证控制,有很大的灵活度。

在不远的将来,将设备与网络相连将成为一种趋势。在诸如GPS串口数据网络收发以及某些语音传输、实时监控等多种场合,实现以太网与异步串口数据之间的通信是非常必要的。本文介绍了一种基于RCM2200嵌入式微控制器核心模块利用UDP报文实现网络与串口互通的方法,可以迅速实现将串口与网络相连接。

2 系统原理及功能

RCM2200采用Rabbit半导体公司推出的高性能8位器件-Rabbit2000型微处理器;带RJ-45插口的内置10Base-T端口简化了网络连接,便于开发带以太网接口的监控、通讯设备;配备有4个串行口,方便扩展联接;拥有26根并行的I/O引线以及16根可设置的I/O引线,无须扩展即可完成一般的I/O任务;拥有256K Flash,128K SRAM, 用于代码存储和数据存储;时间、日期、看门狗、定时器等一应俱全;且其采用双列直插式引脚,尺寸仅为59 x 41 x 22 mm。这种结构促进了嵌

入式系统的快速开发,并可实现集成的以太网连接。

RCM2200系统的基本框架结构如图1所示。

图1 RCM2200系统结构

RCM2200采用Dynamic C®语言进行软件开发,与标准C语言相比,Dynamic C的改进和差异在于使得在功能强大的嵌入式系统上进行实时

编程变得非常容易。 语言的扩展包括多任务和优

先多任务的构造,当供电失败时,能够保护写入变量, 能够写入到中断程序中去。标准C函数库,特定板的驱动,芯片设备,以及其他的性能以源代码的形式包含在Dynamic C中。完全支持汇编语言,在对时间要求较高的应用中,汇编代码可以方便的与C代码混用。

在该开发系统中将RCM2200的以太网接口与当地局域网相连,选择一个串口与计算机的串口相连。由以太网发送UDP报文给RCM2200微控制器核心模块经过处理后通过串口发送给计算机,由计算机串口发送数据给RCM2200微控制器核心模块经过处理后通过其上的网络口发送UDP报文给以太网,从而实现基于RCM2200以太网和串口之间的通信。

3 UDP协议的实现

UDP协议是比较著名的传输层协议之一,它使用IP作为网络层协议,为应用程序发送和接收数据报。但是,它提供无连接服务,是不可靠传输。因此,UDP报文主要用于需要实时数据传输的情况,一次传输少量的数据。在某些对实时性要求很高的场合,利用UDP报文进行数据传输是非常必要的,但往往要采用一些可靠性方案,以防止有漏传、误传的现象发生。

3.1 客户机/服务器程序设计模式

客户机/服务器的程序设计模式在网络程序设计中被大量的应用。这种设计模式将整个系统分为两大部分——服务器部分和客户机部分。客户机向服务器提出请求,服务器对请求作相应的处理将结果返回给客户机。

根据不同的实际情况,客户机/服务器的通信存在对称和非对称两种方式。在对称的方式下,通信的每一方都可能扮演主从角色;在非对称的方式下,一方不可改变的认为是主机,而另一方则是从机。无论是对称的或是非对称的,当服务被提供时必然存在客户进程和服务进程。基于UDP协议的通信既可采用对称方式也可采用非对称方式。

3.2 数据报套接字

套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

UDP协议支持数据报套接字。这种套接字可以采用客户/服务器模式,以全双工方式工作,接收发送可以同时进行,但并不保证数据传输的可靠性、有序性和无重复性,需要由程序员负责管理数据报的排序和可靠性。

3.3 使用Dynamic C实现UDP报文的传输

Dynamic C提供了许多支持TCP/IP协议的库函数。其中,DCRTCP.LIB是最主要的函数库。

下面将简要介绍UDP协议下的基本通信流程。

3.3.1 调用本地初始化函数

void sock_init(void)

该函数将使用默认配置初始化本地信息包驱动器以及DCRTCP.LIB函数库。该函数必须在其他网络库函数被使用前进行调用。

3.3.2 打开数据报套接字

int udp_open( *s, lport, remote_IP, port, *data_handler ())

其中的参数解释如下:

s : 指向UDP套接字的指针;

lport : 本地协议端口;

remote_IP : 可接受的远地主机IP地址,如果该项为-1,则支持广播通信;

port : 可接受的远地进程协议端口,如果该项为-1,则为广播数据报;

data_handler() : 如果接收到数据则调用该函数;

该函数的返回值,如果成功返回非零,否则返回零值。

3.3.3 接收远地主机发送的数据报

int udp_recv( *s, *buf_recv, recv_len)

当套接字初始化后用该函数扫描接收缓冲区,,察看是否有数据报到达。其中,

buf_recv : 指向用于存放已到达数据报的数组的指针;

recv_len : 存放数据报的数组的大小。

如果接收到数据报则返回数据报的长度;否则返回-1。

3.3.4 发送数据报给远地主机

int udp_send( *s, *buf_send, send_len )

调用该函数发送数据报给远地主机。如果成功返回该数据报的长度,否则返回-1。

buf_send : 指向待发送数据报的指针;

send_len : 待发送数据报的长度。

3.3.5 网络信息处理函

int tcp_tick( *s )

该函数将察看网络连接状态,检查数据报的到达情况,处理新到数据报并重传丢失的数据报。若出现网络连接被复位及套接字已关闭的情况或参量s为NULL,则返回值为零;否则返回非零值。

3.3.6 关闭套接字

void sock_close( *s )

当数据传送工作完成或传送过程中发生错误时,可调用该函数关闭套接字

4

串口通信的实现

4.1 RS232电平与TTL电平的转换

PC机的串行接口是符合EIA RS-232C规范的外部总线标准接口,而RCM2200配备有四个串行接口,都是采用TTL电平,因此两者之间必须进行电平转换。以RCM2200的串行口C(位于核心模块的J4插槽上)为例,电平转换如图2所示。

图2 RS232与TTL电平转换图

4.2 使用Dynamic C实现串口数据的传输

Dynamic C提供了一些与计算机串行口进行通信的函数可供用户程序调用,下面简要介绍其中的一部分。

4.2.1 打开串行接口

int serXopen( bard )

bard : 长整型,每秒钟传送的比特数。

该函数用于打开RCM2200的串行接口,由于RCM2200核心模块拥有四个串行口,故X可根据需要取为A\B\C\D其中一个。在调用该函数之前,还必须先定义串行口的输入输出缓冲区大小,通常情况下设定为2n-1,否则就采用默认值31,但在编译时会给出警告。该函数的返回值:成功则为1,否则为0。

4.2.2 读取PC机串行口数据

int serXgetc()

/* X = A|B|C|D */

程序可以调用该函数查询串行口是否有字符来到,如果有,返回该字符值;否则,返回值-1。

4.2.3 发送数据到PC机串行口

int serXputs( *s )

int serXwrite( s, length ) /* X = A|B|C|D */

这两个函数均可用于发送字符串给计算机的串行口,返回成功发送的字符数。

s : 待发送字符串的首地址;

length : 待发送字符串的长度。

4.2.4 关闭串行口

void serXclose()

/* X = A|B|C|D */

该函数用于关闭已经打开的串行口。

5

实现以太网与串口之间的通信

5.1

定义网络以及串口初始化数据

在程序的开头,必须使用#define定义一些初

始化数据,比如:RCM2200所使用的本地IP地址以及端口,与之通信的远地IP地址以及端口以及串口输入输出缓冲区的大小等等。

5.2 主程序

在主程序中调用PC机串口发送字符串给RCM2200经过处理后再由RCM2200发送UDP报文给以太网以及RCM2200接收以太网发送来的UDP报文后再送给计算机的串行口两个子程序。

main()

{

sock_init(); //初始化网络库函数

: //打开串行口及网络套接字

for(;;;)

{

tcp_tick(NULL);//察看套接字状态

init_comm();//网络发报文串口接收

comm_init();//串口发数据网络接收

}

}

5.3网络发报文串口接收

子程序init_comm() 使用库函数udp_recv查询RCM2200以太网接口是否有UDP报文来到,如果没有则返回主程序,否则将UDP报文存放到buf_init数组中,然后调用serCputs(buf_init)通过RCM2200的串行口C发送到计算机的串行口。值得一提的是,当RCM2200接收到了一次报文之后,它将自动关闭接收报文的套接字,因此,如果还想接受下一次发送的报文,必须再次调用函数udp_open打开该套接字。

5.4串口发字符串网络接收

子程序 comm_init()调用函数serCgetc()用于查询计算机的串行口是否有数据到来,如果没有则返回主程序,否则将接收到的字符存储到buf_comm数组中,直到检测到结束符到来,将字符串以UDP报文的形式通过函数udp_send发送给以太网。如果发送成功,则返回主程序等待下一次数据的到来,否则关闭该套接字后重新打开再返回主程序等待。

5.5程序调试结果

在该程序的调试过程中,利用Visual C++语言编写了一个接收和发送UDP报文的程序用于以太网的计算机上,另外还使用了从网上下载的串口调试帮助软件,结果表明,该程序能实现基于RCM2200以太网与异步串口之间的成功通信。

结论

RCM2200是为了促进嵌入式系统的快速开发和实现集成的以太网连接而设计的。集成的以太网口允许用户通过使用经济的网络软件进行瞬间的本地连接或全球范围的连接。另外,RCM2200还提供了四个串行口用于和其他设备的串行口进行数据交换。

RCM2200使用Dynamic C软件开发环境,支持C语言、汇编语言,拥有丰富的库函数可供用户调用,并具有单步编译、断点设置、单步执行、代码分解、监视表达式等优秀性能。

使用Dynamic C接收和发送UDP报文时,由于网络对该报文的传输不提供质量保证,在每完成一次操作后,必须及时检查套接字的状态,避免发生误传、漏传以及套接字关闭等现象。在发送和接收串口数据时,要注意使RCM2200的串口数据传输波特率与PC机保持一致,这样,才能保证正确传输。

参考文献

【1】Z-World, Inc. RabbitCore RCM2200 User’s Manual 2001年

【2】Z-World, Inc. Dynamic C premier User’s Manual

1999年

异步通信范文第3篇

关键词:gm8125;atmega128单片机;串口;iic总线

中图分类号:tp368文献标识码:a文章编号:10053824(2013)04006003

0引言

随着单片机在工业控制领域的应用越来越广泛,在很多场合需要用单片机对现场的信息进行采集与处理,并与上位机进行通信,这往往会遇到单片机串口不足的问题,所以需要对串口进行扩展。

在本文中需要完成把atmega128的2个异步串行口扩展成每一个串行口的五收一发的电路,所以此单片机不能独立地满足要求[1],需要专门的串口扩展芯片和单片机一起来完成所需要的功能,本文采用gm8125串口扩展芯片进行设计。

1gm8125芯片

1.1gm8125芯片简介

gm8125可以将一个全双工的标准串口扩展成5个标准的串口,各串口波特率可调,支持10位和11位2种数据帧长度,有效地解决了串口不足的问题。并能通过外部引脚控制串口的扩展模式:单通道工作模式和多通道工作模式,即可以指定一个子串口和母串口以相同的波特率单一地工作,也可以让所有子串口在母串口波特率基础上分频同时工作[2]。

本文所述gm8125芯片工作在多通道模式下,子串口能主动响应从机发送的数据,并由母串口发给atmega128,同时返回子串口地址,通过对接收地址脚sradd02的查询确定是哪个字串rxd15发来的数据。

1.2gm8125芯片初始化

2.1硬件设计要求

2.2软件设计要求

3具体设计

3.1硬件设计

4总结

经过对基于此设计的实际产品进行测试,硬件设计和软件设计能实现并满足需求,通信良好,扩展性好,可通过iic总线挂载一定数量的此设计与主机进行通信。此设计抗干扰能力好,适用于短距离通信。如果要进行长距离和大数据量通信时应考虑其他的通信方式,比如can总线[6]。

参考文献:

[1]徐益民,范红刚,苏凤武.零基础学avr单片机[m].北京:机械工业出版社,2011:205219.

[2]李云溪,韩涛,项剑峰.基于单片机的gps定位系统设计[j].四川兵工学报,2011,33(11):111113.

[3]张华宇,谢风芹,王立滨.avr单片机开发入门与典型实例[m].北京:机械工业出版社,2011:222274.

[4]张成瑞,李见为,王刚.基于单片机和gm8125的多路串口收发器设计[j].电脑知识与技术,2011,7(10):24222424,2434.

[5]严雨,廉洁.avr单片机c语言应用100例[m].北京:电子工业出版社,2012:150200.

[6]来清民.手把手教你学can总线[m].北京:北京航空航天大学出版社,2010:100150.

作者简介:

异步通信范文第4篇

关键词:自适配通信环境;中间件;网络服务器系统;设计模式

中图分类号:TP393文献标识码:B

文章编号:1004-373X(2008)08-153-04オ

Design and Application of ACE Framework in Networked Game Server

TAO Dao,WAN Wanggen

(School of Communication and Information Engineering,Shanghai University,Shanghai,200072,China)オ

Abstract:Due to difference of hardware and diversity of communication system,developers of communication software have to face many problems.Those problems can be solved by using software design pattern and programmers are easier to develop highperformance communication software.This paper introduces the OO design pattern of ACE framework in communication and its advantage.It also puts forward an idea of networked server architecture and modularization design in software.At last this paper illustrates how we use the design pattern and the module of the ACE framework to design the basic communication module of our game networked game server software.

Keywords:adaptive communication environment;middleware;network server system;design patternオ

随着计算机网络的发展,特别是因特网的出现,数字娱乐和网络游戏产业得到了蓬勃的发展,异军突起的网络游戏成为中国网络产业中的先锋。而由于信息技术的进步,计算机、手机以及不同的传媒终端等不断涌现,如何将这些众多不同的终端通过互联网进行互联互动成为一大技术难点,而这些难点的突破取决于网络游戏服务器的开发。目前在各种服务器通信软件的设计和开发中,已经广泛地使用到软件设计模式。尤其在大型的服务器通信软件开发中常会采用模块化设计。当一个庞大的服务器系统执行任务时,往往要通过其中不同的模块进行协作完成,在这种情况下各机间的数据通信会变得异常繁琐和复杂。另外不同操作系统通信机制的不同也会影响通信软件的开发和效率,网络编程人员通常从底层进行开发,这大大增加了软件开发的难度和周期。针对以上存在的问题,ACE自适应通信构架给出了良好的解决方案,ACE能够跨越多种操作系统平台,可进行通用的网络编程任务,并结合软件设计模式[1],避免了通信软件根据不同环境需要重新开发的弱点,减少了软件开发的周期和资金,简化和强化了系统的设计实现。

1 ACE框架

ACE自适应通信环境(ADAPTIVE Communication Environment)[2]是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组丰富的可复用C++ Wrapper Facade(包装外观)和框架组件,可跨越多种平成通用的通信软件任务,其中包括:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步等。ACE体系结构[3]包括3个基本层次:操作系统适配层、C++包装层、框架组件层。操作系统适配层直接驻留在用C写成的本地OS API之上,将ACE中的其他层与OS API 相关联的平台专有特性屏蔽开来。由于ACE操作适配层所提供的抽象,极大地增强了ACE的可移植性和可维护性。C++包装层通过提供类型安全的C++接口简化通信应用程序的开发,各种应用可以有选择地继承、聚合或实例化其中的组件来使用这些包装。ACE还包括一个高级的网络编程框架,集成并增强较低层次的C++包装层,该框架支持并发分布式服务动态配置。

大多数的网络化应用可以通过ACE这样的可移植中间件进行开发,因为ACE封装并加强了本地操作系统机制,通过其组件可以移除底层操作系统API的繁琐和易错性创建可重用的网络程序。

2 网络游戏服务器系统框架的设计

在设计网络服务器的过程中,如何保证服务器的安全和最大限度地支持更多的客户端连接是摆在开发者面前一个重要的问题。为了解决这2大问题,根据经验,在开发游戏服务器的过程中,采用如下的服务器架构可有效解决上述2个问题。

2.1 支持Gate的游戏服务器架构

在该架构下,Client和Gate Server相连,而不是直接和Game Server相连。Gate Server主要负责转发客户端和Game Server之间的数据包,Game Server负责处理游戏的所有逻辑。如图1所示。

图1 支持Gate的服务器系统架构

采用该架构,有如下几个优点:客户端通过Gate Server和游戏服务器Game Server相连,Game Server IP对外不可见,这样Game Server更安全、更不易受攻击。一个Game Server同样也可以对应若干个Gate Server,当某个Gate Server受攻击或停机后,其他的Gate Server仍然照常运行,和其他Gate Server相连的客户端仍然可正常进行游戏;可支持更多的客户端连接。Gate Server把众多的客户端连接分散到多个Game Server中去,而不是独自来承担,从而可支持更多的客户端连接;Gate Server可分担一部分安全管理工作,减轻Game Server的压力。例如若某个客户端在一段时间内不发数据包,则把该客户端踢下线的工作可由Gate Server来完成。

2.2 软件功能模块划分

在设计服务器框架时,有一个基本原则,即框架和通信底层的具体实现需要分离,通信底层的具体实现不影响框架代码的修改。因为通信底层的具体实现有很多方式,不同操作系统平台的具体实现差别也很大。例如仅在Windows平台下就有基于Windows消息机制的、基于事件机制的、也有基于完成端口I/O模型的实现等。采用框架与通信底层相分离的原则,也有利于利用一些成熟的开发框架,比如使用的ACE框架。这样,当采用一种新的通信技术实现通信底层时,则可以不改变服务器框架,而只需要修改通信底层。在设计服务器时按照服务器框架与通信底层相分离的原则,将服务器框架设计为多个模块。并生成相应的动态链接库以供调用。软件模块框架如图2所示。

图2 软件模块框架

在软件模块划分中,通信底层由线程模块和通信模块组成,上层则由同步、联机管理和兴趣区管理等模块组成。其中同步模块是基于保守/乐观的同步算法构建的服务器同步子系统,客户端方面则可以使用航位推测法减少服务器的发包频率。兴趣区管理模块用于相关性信息过滤,通过订购玩家感兴趣的范围,可以有效减低网络带宽消耗和服务器负载。联机管理模块主要负责数据封包中的通信协议以及数据报的压缩和加密,在数据包中采用加密以增加服务器系统的安全性能,采用压缩以减少网络带宽消耗。

3 服务器系统通信底层的实现

3.1 线程模块的实现

在设计线程模块中使用ACE框架中的ACE _Task类和ACE _Message _Queue来实现主动对象模式[5],用于处理主动对象,实现多线程处理。传统的对象是被动的代码段,对象中的代码是在对他发出方法调用的线程中执行的,当方法被调用时,调用线程将阻塞,直至调用结束。而主动对象却不一样。这些对象具有自己的命令执行线程,主动对象的方法将在自己的执行线程中执行,不会阻塞调用方法。由于主动对象的方法调用不会阻塞,这样就提高了系统响应速度。

设计中主动对象继承ACE _Task,应用open进行初始化,并派生线程去循环判断方法队列中是否有方法对象,若队列不为空则将方法出队并执行。如图3所示。

在创建任务和主动对象时,从ACE _Task类派生子类,在子类派生之后,采取以下步骤:

(1) 实现服务初始化和终止方法:open()方法应该包含所有专属于任务的初始化代码;close()方法则包含相应的终止方法。

(2) 调用启用(Activation)方法:在主动对象实例化后,必须通过调用activate()启用他。在主动对象中创建的线程的数目,以及其他一些参数,需传递给activate()方法,activate()方法会使svc()方法成为所有他生成的线程的启动点。

(3) 实现服务专有的处理方法:在主动对象被启用后,各个新线程在svc()方法中启动。

图3 任务结构示意图

并发策略实现的程序流程如图4所示:

图4 线程模块执行流程图

3.2 通信模块的实现

3.2.1 反应器ACE Reactor和前摄器ACE Proactor

ACE Reactor(反应器)和Proactor(前摄器)是可扩展的面向对象多路分离器[4],他们分派应用专有的处理器,以响应多种类型的基于I/O、定时器、信号和同步的事件。

ACE _Reactor反应器应用于同步I/O操作,实现了事件的多路分离与分派,能够处理多个来源的I/O。使用反应器框架,需要执行3个步骤: 从ACE_Event_Handler派生一个和多个事件处理器类,并定义相应的事件处理行为;向ACE _Reactor类登记应用的事件处理对象;运行ACE _Reactor事件循环,事件发生时回调事件处理器中的事件处理函数。

ACE_Proactor应用于异步I/O操作,他与反应器不同的是首先等待事件的完成,然后回调完成后的事件处理。当初始化I/O读写后把读写交给系统完成,等待事件完成后前摄器会将执行I/O结果返回给对象,并且回调完成后的事件处理。 前摄式模型允许单个应用线程同时发起多个请求。这一设计允许单线程化应用并发的执行多个I/O操作,并且不会带来与传统的多线程化机制相关联的开销或设计复杂性。这样做大大减少了I/O处理时间。

3.2.2 利用前摄器实现高效异步I/O数据通信

在实现通信模块中使用的前摄器模式主要参与者有前摄发起器、完成处理器、异步操作、异步操作处理器、完成分派器[5]。其结构如图5所示:

图5 前摄器模式参与者

其中,前摄发起器(服务器应用的主线程)是应用中任何发起异步操作的实体。他将完成处理器和完成分派器登记到异步操作处理器。完成处理器接口用于异步操作完成通知,异步操作则是被用于代表应用执行请求。当异步操作完成时,异步操作处理器将应用通知委托给完成分配器。异步操作是由异步操作处理器来运行直至完成的,该组件通常由操作系统实现。完成分派器负责在异步操作完成时回调应用的完成处理器。当异步操作处理器完成异步发起的操作时,完成分配器代表应用执行应用回调。该机制的实现交互图如图6所示:

图6 前摄器模式交互图

3.2.3 通信连接的建立

在具体通信模块中,所用到的ACE主要类有异步连接类、服务处理类、异步操作类和处理结果类。建立连接的过程为:创建异步主动连接和被动连接子类,在进行异步连接时,创建新的服务处理类,并将该服务类传递给异步连接类,这样,数据的传输就交给服务类去执行。实现服务处理子类中提供的挂钩方法,并通过创建ACE_Sock_Stream和异步读写流类来进行异步通信。在异步读写流初始化时将其注册到已创建的proactor中,并保存异步读写流类的句柄。最后数据传送的结果和状态交给处理结果类来处理。异步通信的初始化:

(1) 分别创建异步主动连接类的派生类和被动连接类的派生类

class TCommandChannelConnectorAceImpl : public ACE_Asynch_Connector< TCommandChannelAceImpl >

class TCommandChannelAcceptorAceImpl : public ACE_Asynch_Acceptor< TCommandChannelAceImpl >

(2) 创建主动连接类对象connector和被动连接类对象acceptor;

(3) 对于主动连接,调用connector.open(…),并将其注册到Proactor,由框架自动创建异步通信服务类,并且自动检测连接建立状态;

(4) 对于被动连接,调用acceptor.open(…),并将其注册到Proactor,由框架自动创建异步通信服务类,并且自动检测连接建立状态,处于等待侦听状态;

整个异步通信机制实现的流程如图7所示:

图7 异步通信的实现

3.2.4 ACE_Proactor完成多路分离

ACE_Proactor类负责驱动前摄器框架的完成处理。要让异步I/O完成事件处理得以发生,还需要运行前摄器的事件循环,其流程图如图8所示。

图8 Proactor事件循环流程

4 结 语

本文设计了一种适用于开发网络游戏的服务器端架构,并应用ACE框架组件和面向对象的设计模式完成服务器底层通信的开发。ACE作为一种免费开源的中间件,富含网络与系统编程的实用设计模式[6],具有跨平台等优越特性,能够适合任何通信软件的开发。尤其对于网络游戏服务器开发者而言,ACE无疑是一种值得借鉴的通信框架,具有良好的应用前景。

参 考 文 献

[1]Schmidt D C,Huston S D.Mastering Complexity with ACE and Patterns.C++ Network Programming,2001.

[2]Douglas C.Schmidt.ACE自适配通信环境中文技术文档[EB/OL].马维达,译./ace/.

[3]王继刚,顾国昌.构架与模式在通信系统软件中的应用研究[J].计算机应用,2003,23(11):4345.

[4] Schmidt D C,Huston S D.Systematic Reuse with ACE and Frameworks.C++ Network Programming,2002.

[5]Stephen D Huston,James C E Johnson,Umar Syyid.Practical Design Patterns for Network and Systems Programming\[Z\].The ACE Programmer′s Guide,2004.

[6]高鹏.通过设计模式构造的通信应用服务器框架[J].计算机科学,2004(2):89.

[7]陈琳.中间件技术的研究与实现\[J\].现代电子技术,2006,29(12):7678.[HJ0]

作者简介 陶 道 男,1983年出生,硕士研究生。主要研究方向为计算机通信网络、网络虚拟环境、网络游戏服务器。

异步通信范文第5篇

关键词:三相异步电动机  节能技术

        0 引言

        三相异步电动机是广泛使用的一种动力机械,每年的耗电量占我国总耗电量的50%以上。在满负荷工况条件下,电机的效率一般较高,通常在80%左右;然而,一旦负荷下降,电机的效率便随之显著下降。因为电机选型时是按最大可能负荷和最坏工况所需的功率而定的,多数电机在大部分运行时间的负荷率都在50%~60%,所以实际运行时的效率都是比较低的。因此,提高这部分电机的运行效率,有着巨大 经济 效益和社会效益。

        1 节能原理

        电机的效率是电机输出功率与输入功率的比值的百分数。因此供电机的电能即输入功率并不仅用来驱动电机即输出功率,还有一部分将成为电机固有的损耗。电机的主要损耗为铜耗和铁损,其中铜耗是由于电流流过电机绕组而产生,与电流的平方成正比;铁损是由于定子和转子铁芯中的磁化电流而产生,与供电电压成正比。其它损耗很小,可忽略。调压节电原理是当负荷下降时,可以适当降低电源电压以减少铁损,同时电流随之下降也减少了铜损及无谓的浪费,此时电机的效率将得到改善。电机负荷的检测通常采用功率因数法进行:电机负荷大,则它的功率因数大;电机负荷小,则它的功率因数小。

        2 技术难点及解决

        2.1 功率因数角的检测。通常情况下电流波形是完整的,通过检测电压和电流的过零点获得的相位差即是功率因数角。但本控制器由于采用了可控硅交流调压,当导通角较小时,电流波形出现断续。电流继续使电流过零检测失效。为此,我们采取电流与微电平比较来获取其正半周连续波形的部分,进而取得近似的相位差。

        2.2 电压和电流有效值的检测。一般按有效值的定义进行检测的电路需要用到模拟乘法器,因而电路比较复杂,成本也高。由于有效值和绝对平均值之间存在一定的对应关系,并且此处对检测精度要求不高,故我们先检测绝对平均值,再转化为有效值。

        2.3 强干扰下的系统加固。如果本电器工作在工厂的恶劣环境下,强电磁干扰会严重影响微机系统的正常工作,为此我们采取了多种保护措施:将数字电路部分单独安装在金属机壳中,以屏蔽空间电磁干扰;选用优质开关电源和传感器,以减少从线路串入的干扰;在微机电路中广泛采用串行接口芯片,以简化电路板布线;采用广泛使用的wdt电路,提高软件抗干扰能力。

        2.4 可控硅的移相触发电路。在三相交流调压电路中,一个很重要的指标是三相平衡问题。以前的三相交流调压常采用3个单相移相触发芯片设计(如ta785),要细心调试才能达到三相平衡。我们采用最新推出的三相移相触发芯片at787,简化了电路设计,使该电路免于繁杂的调试;同时还采用了可控硅的强触发技术,使其触发得更准确。

        3 硬件设计

        本控制器主要由3部分组成:可控硅及移相触发电路部分,接收控制板的控制信号,实施交流电压的调节;信号检测板部分,接收传感器的信号并进行处理,得到标准电压和电流的有效值及功率因数有送控制板;单片机控制板部分,接收信号检测板的信号,通过控制运算发出控制信号到移相触发电路,实施最佳功率因数控制,同时控制板还通过键盘显示面板对控制器参数进行修改,并显示控制器运行状态。

        例如:从同步变压器来的三相过零信号经c1、c2、c3电容耦合到6v的直流信号上送入18、2、1脚。tc787对其进行过零检测,经积分电容c4、c5、c6形成以过零点为起点的三角波,与由vr引入的触发控制信号比较,再经c7调制成触发脉冲,由12、9、10、7、8、11脚输出,由脉冲变压器驱动可控硅。

        此电路基于基本的绝对值电路,增加了滤波电容c1,将交流信号的绝对值变为平均值;合理设计r5的阻值,将平均值变为有效值。

        电压信号va和电流信号ia经与微电平信号ref比较,取得电压和电流信号的正半周;经rc滤波后由信号“或”电路,形成含有功率因数角的信号;由单片机去除其中的电压半周期,即得功率因数角。

        tlc0834是4路8位a/d转换器,采集1路电压和3路电流信号;tlc5615是10位串行d/a,将控制量变为模拟电压信号,去控制可控硅交流调压;x25045是含wdt和eeprom的多功能电路,负责单片机系统的安全监视和重要参数的保护;sn75176是rs485接口,实现连网监控。

        4 软件设计

        单片机软件采用c51语言编程,c51与汇编语言相比,有编程效率高、代码易维护等优点。程序主要由键盘与显示监控部分、串行接口芯片驱动部分和信号采集与实时控制部分组成。

        串行接口芯片驱动部分,主要是根据芯片厂商时序图,以单片机的i/o口模拟串行口,以实现对串行芯片的读写操作。本课题由于单片机i/o较多,各个芯片采用单独的i/o信号。

        信号采集与实时控制部分,以实时时钟为基准,采集电压电流信号对系统的安全进行监视。采集功率因数信号与最优值比较,以pi控制算法进行运算,适时发出控制指令,对电动机进行调压,使其运行于高效率状态。

        5 系统调试

        在系统调试过程中,我们发现并处理了如下几个问题。

        5.1 电动机可控硅交流调压的稳定性问题。由于电动机是大电感性负载,在按外三角接法时最好采用半控形式。其中的数据管发挥了吸收谐波的作用。要使用全控形式,最好采用内三角形式。该接法中各个绕组单独供电,绕组之间不会产生相互干扰。

        5.2 三相调压移相触发板的器件选择问题。3个积分电容的值必须相互一致,误差在1%以内,调制电容c7的值不能太大,耦合电容c1、c2、c3亦不能太大,不然会使电路不能长期运行,或出现三相的不平衡。

相关期刊更多

西部医学

统计源期刊 审核时间1个月内

四川省卫生厅

布依学研究

省级期刊 审核时间1个月内

贵州省布依学会

西部中医药

统计源期刊 审核时间1-3个月

甘肃省卫生和计划生育委员会