前言:中文期刊网精心挑选了通信软件范文供你参考和学习,希望我们的参考范文能激发你的文章创作灵感,欢迎阅读。
通信软件范文1
【关键词】 PowerPC DSP 双口存储器 故障管理
PowerPC处理能力强,性能优异、体积小、重量轻、散热量小,在航空航天、石油、水利、交通运输、工业控制、数控采集等领域获得了广泛的应用。DSP它不仅具有可编程性,而且实时运行速度可达每秒数以千万条复杂指令程序,远远超过通用微处理器。将PowerPC和FPGA结合的相控阵雷达波束控制系统能够充分利用PowerPC的高性能处理能力和FPGA的定制电路设计能力,同时兼顾功耗、成本、设计周期等因素,是对体积要求小、负载要求轻、计算能力要求高的相控阵雷达波束控制系统的有效解决方法。
一、总线通信系统架构
总线通信系统由一个CPU(PowerPC)模块、一个DSP模块以及电源模块组成。CPU模块采用PowerPC750处理器,同时集成了网卡和大容量FLASH,具有高速的数据采集及处理、仿真任务调度以及数据存储等功能。DSP模块采用TMS320F240系列芯片,通过局部总线,与外界设备通过RS422、ARINC429等数据交换总线相连。用户通过PowerPC发送和接收任务数据,PowerPC再通过双口存储器与DSP相连接,进行数据交换,DSP则负责RS422串行通信总线和ARINC429总线通信的控制管理、数据接收和发送等,以上整个系统完成了总线的通信功能。主处理器为P2020通用嵌入式双核处理器,从处理器为XC7K325T FPGA,主处理器基本功能是根据天线波束指向要求,计算各天线单元移相器所要求的波控码,传输至每一个移相器,控制每一个移相器相位状态的转换。从处理器主要完成波控码值的分发,可以通过并行或者串行的方式,以减少码值分发的时间。
二、总线通信系统软件设计
软件设计层次结构包括Bootrom、VxWorks操作系统、应用程序三个部分。BootRom:主要用于操作系统映像、应用程序的加载,运行在目标机上,可以通过网络RJ45接口、串行RS232接口与宿主计算机板卡建立连接这种方式,把操作系统的映像、应用程序更新到系统的FLASH存储设备中,同时提供相关的功能,设置BOOTROM的启动方式、启动参数、自身更新BootRom程序。Vxworks操作系统:主要提供嵌入式系统所需要的任务调度、同步机制、中断处理、文件管理等基本功能、与目标机相关的设备驱动。嵌入式VxWorks操作系统内核和相关组件是由WindRiver公司提供的,在波控软件设计中,需提供与操作系统相关的硬件驱动程序。应用程序:应用程序为运行在VxWorks操作系统之上的波控程序。
三、总线通信系统软件设计
1、总线通信系统软件概述。总线通信系统软件由驱动软件和控制软件组成,是实现RS422串行通信和ARINC429总线通信的专用软件。其中,驱动软件实现DSP与主机应用软件间的接口控制与数据传递,它可提供各类消息数据的读、写支持,对DSP内程序的调度。控制软件负责RS422串行通信和ARINC429总线通信的控制、数据接收和发送等。
2、驱动软件。驱动软件运行在PowerPC模块上,是应用软件与控制软件的接口软件,为实现应用软件的管理功能,驱动软件控制DSP模块的初始化、启动、停止、自测试,监控DSP模块状态,控制DSP模块和主机的数据交换。当DSP在处在停止状态,调用DSP_Bit进行DSP自检测,调用DSP_Initialize进行DSP初始化。驱动软件按其功能分为:模块控制程序、RS422控制程序、ARINC429总线控制程序、操作信息控制程序。模块控制程序的主要功能是启动DSP模块上的初始化程序,使DSP初始化,然后启动DSP上的启动程序使DSP开始工作,还可以停止DSP运行以及启动DSP上的BIT程序进行自检测。RS422控制程序的主要功能包括对RS422各通道进行初始化(各通道的接收/发送数据缓冲区划分,每个数据块的新数据、错误、中断等标志字的设置,波特率、奇偶校验位、数据位和停止位的设置),接着从双口存储器读DSP端RS422接收到的消息,并将要通过RS422发送的消息数据写入双口存储器,最终由DSP上的RS422进行数据发送。
通信软件范文2
关键词:嵌入式 网络终端 通信软件设计
中图分类号:TP311 文献标识码:A 文章编号:1003-9082(2015)11-0001-01
前言
嵌入式网络终端的通信软件设计,是以计算机技术为基础,将可用于通信系统的软件以嵌入式的方式与通信系统融合,实现通信系统的智能化和技术化,满足当下人们的通信需求。随着计算机技术、信息技术、网络技术的发展,嵌入式网络终端系统得到了前所未有的发展和进步,其在通信系统的应用,更是促进了网络通信系统的发展,对传统通信行业带来了巨大的冲击。本文着重分析了嵌入式系统的构成,并就其系统程序进行了相关阐述,最后分析了利用嵌入式网络终端如何实现通信软件设计。
一、入式系统分析
嵌入式系统的核心是应用,通过利用嵌入式硬件,对应用体系中的相关功能加以改制,形成以嵌入式硬件为核心的计算机系统。嵌入式系统具有较强的可靠性和稳定性,能够满足系统的成本、功耗、体积等多方面的要求,在信息领域和通信领域得到了较为广泛的应用。嵌入式系统由以下几个部分构成:硬件设备、驱动设备、应用软件设备。起重硬件设备包括嵌入式处理器以及嵌入式的设备,驱动设备主要指的是嵌入式系统软件。应用软件则是具体的系统软件,是嵌入式系统与嵌入对象之间实现的功能[1]。
嵌入式网络终端构成:
1.网络终端核心板:这一设备是嵌入式网络终端的核心部分,主要采用了S3C6410微处理器,具有较强的多媒体处理功能,并且具备256M存储器,可以实现信息存储功能;
2.电源模块:主要以直流电源供电模式为主,并且配备电源适配器,保证系统电源稳定性;
3.串口模块:串口模块是实现设备连接的关键部位,是嵌入式网络终端实现其功能的重要组成部分,方便用户利用交叉串口线与PC机进行通讯连接;
4.以太网模块:以太网模块能够更好地适应10/100M网络,并可以与路由或是交换机实现自由连接;
5.音频输入、输出模块:嵌入式网络终端应用的音频输入输出模块具有高度集成的性能,主要应用于移动设备和移动通信领域,采用了双重编码解码操作,更加有利于信息的传输;
6.系统模块:系统模块主要包括LED、PWN形式的蜂鸣器、利用调试的接口、线路串口、音频输入、输出口、红外接收口等,实现数据传输的方便性。
二、基于嵌入式网络终端的通信软件设计
本文对嵌入式网络终端的通信软件设计的研究,以网络聊天软件设计与实现为例,通过分析网络即时消息的传播系统设计,我们可以更加直观地看出嵌入式网络终端是如何实现通信软件设计的[2]。
1.网络聊天软件设计分析
网络聊天软件的设计,就是即时通信的一种现实表现形式,在设计过程中,主要包括用户界面模块、通信模块、好友管理模块。网络聊天软件的设计,是嵌入式网络终端的一种具体应用,它方便了信息的传输,通过友好性界面的设计,实现了即时通信目标。嵌入式模块在网络聊天中的具体应用,主要是将应用程序的数据包通过传输层协议送到IP网络上,并且利用TCP/IP协议传输层协议,将数据进行传播。在数据传输过程中,需要利用UDP端口。UDP端口更加适用于一次性小批量数据传输,可以在很大程度上缩减数据包封包和传输的延迟时间,完成信息的即时传播。
2.基于嵌入式网络终端通信模块设计与功能实现
网络聊天的通信模块采用Socket套接字编程,并且由UDP进行数据传输和接收。在传输和接受过程中,数据发送以定向模式进行传输,具体实现步骤如下:(1)UDP协议启动函数程序,在数据传输过程中,利用IPV4的地址,将程序进行套接字类型转化,并且利用UDP协议进行表示,将程序编码翻译过来,实现数字传输目标;(2)Bind函数绑定个人计算机的IP地址和终端,采用网络数据的异步接收方法,将数据信息进行接收,并且进行回调方法将数据再传输出去;(3)数据信息到了传输目的地后,依旧靠UDP协议进行信息翻译,从而实现双方的通信交流。嵌入式网络终端模块进行信息传输过程中,具有一定的指向性,设备中的聊天系统可以通过广播进行数据发送,通知好友,与好友进行聊天。在实际应用过程中,可以先进性Soket数据设置,使套接字允许发送广播信息,并且根据异步接收方法,进行数据设置和调整,满足数据传输需要。网络聊天通信软件的设计和实施,主要得益于嵌入式系统的串口模块、以太网口模块、音频输入输出模块的功能,完成数据、信息的传播和接收,从而实现通信目标[3]。
结束语
随着我国社会经济的发展和进步,人们对通信的要求越来越高,如何加强嵌入式系统在通信软件中的应用,满足人们的通信需求,将是嵌入式系统应用于通信软件中的日后发展方向。对此,在日后的应用过程中,我们应该注重嵌入式系统的改进,使之与通信软件更好地融合,从而实现二者共同发展目标。
参考文献
[1]何花. 基于嵌入式网络终端的通信软件设计[D].福建师范大学,2012.
[2]何花,王平,施文灶,徐世武. 基于WINCE5.0的通信软件设计[J]. 电子测量技术,2010,11:117-123.
通信软件范文3
1 多站远程无线控制系统组成
多站远程无线控制系统是以计算机作为中心控制站,用多个信号源作为下位机,通过无线模块进行数据通信的。系统中的上位机作为数据接收和数据处理的中心站,当下位机实时采集到上位机发送的数据后,便可进行简单的数据处理并向上位机回送数据。
上位机无线通讯接口使用串行端口与无线数传模块相连,数字信号通过天线调制后送到下位机的一台外置无线模块,然后通过串口送入单片机进行处理。系统组成框图如图1所示。
2 串行通讯控件
利用VB开发通信程序主要有两种方法,一是利用VB本身提供的控件(CONTRALS),另一种是利用WINDOWS API应用程序接口。在实际应用中,用VB 控件实现通讯的方法比调用SDK的API动态连接库的方法更加方便和快捷,而且可以用较少的代码实现相同的功能,这就是用VB 控件实现通讯的优点所在,下面主要介绍一下利用VB 控件实现无线通讯的方法。
VB控件工具箱中提供了一个使用非常方便的串行通讯控件MSComm,它提供了使用RS-232串行通讯上层开发的所有细则。通过它完成串行通讯既可以使用查询方式,又可以使用事件驱动方式。控件的一些重要属性及其说明如表1所列。
表1 MSComm控件的属性说明
属 性设定值说 明
ComPort1串口号,如果串口1已所用,改用串口2InBufferSize1024接收缓冲区大小InputLen0从接收缓冲区读取的字节数,0表示全部读取InputMode1接收数据的类型,0表示文本类型,1表示二进制类型OutBufferSize1024发送缓冲区大小RThreshold1设定接收几个字符时触发OnComm事件,0表示不产生事件,1表示每接收一个字符就产生一事件SThreshold0设定在触发OnComm事件前,发送缓冲区所允许的最少的字符数,0表示发数据时不产生事件,1表示当发送缓冲区空时产生OnComm事件Settings1200,n,8,1串口的参数设置,依次为波特率、奇偶校验(n-无校验,e-偶校验,o-奇校验)、数据位数、停止位数3 应用实例
本系统的通讯网络并非点对点的通讯,而是采用一点对多点的广播式通讯方式。由于无线通讯可能会有空间的噪声干扰,因此,需要采取一些抗干扰措施。首先是身份识别码,因为给下位机编码可以保证网络通讯的有序性,因此,每个站都应有身份码。其次是包头识别码,由于在发送了传输命令之后,下位机开始以打包的形式传输数据,因而每一包都有一个包头和包尾识别码,假如识别码有误,则表明该次传输为不正常数据。因此,应使用1200波特率、无奇偶校验位、8 个数据位、1 个停止位的较稳定状态。
上位机向下位机发送的参数有站号、状态(开机、关机)、频率、重复周期、脉宽、天线转速、天线扫描方式、天线状态、天线角度等。发送命令有手动方式和自动方式两种。自动方式是由定时器自动完成的。为了及时知道分站的状态和运行情况,还应设计定时查询和即时查询。
在无线通讯过程中,除了规定合理的协议之外,为了保证通讯的正确性,在数据发送时还应适当地增加延时,特别是当速度较慢的计算机向速度较快的计算机发送数据时,更应适当增加延时。
由于该项目的软件源代码较长,故只给出和串口通讯有关的程序片段供大家参考。笔者在工作中实践了三种通讯方式,即查询方式、事件驱动方式、事件驱动转查询方式。这三种方式各有利弊,其中查询方式具有方便可靠的特点,可利用协议或设定时钟来进入和退出查询状态,但它不是资源的有效利用方式;事件触发方式对于定长通讯非常有效,但其定长通讯在有些场合不适用;而事件驱动转查询方式既有事件驱动的特点又有转查询方式的特点,可以说是汇集了前二者之长,故可有效利用资源。下面着重介绍事件驱动转查询方式。
由于在通讯中,RTS电平可置高或置低,如果用事件驱动,计算机就会进入中断,资源就没有有效利用,所以在程序中添加了一个接收函数。为了保证程序的可靠性和灵活性,可以运用设置身份码等方法来保证各个子站互不干扰,具体实现过程的主程序流程图如图2所示。
除以上处理外,还可以使用以下方法来增加系统的可靠性、灵活性和效率。
(1)设置身份码和目的地址
每个数传模块均有表示其唯一身份的身份码,身份码长为两个字节共十六位。第一字节表示组码,第二字节表示组内识别码,身份码可用D7H?F5H?XXH?YYH设置,可设置于模块内的EEROM中,掉电后不丢失。在数据传送前,应设置目的地址,以便确定由哪个来接收数据。采用此方法可以有效地防止干扰。
(2)使用动态数组
接收字节数据时,必须使用动态数组。一个动态数组被声明后,可以利用Input属性将串行端口输入缓冲区内的数据指定到该动态数组中。被接收到的数据的实际大小必须利用Lbound及Ubound才能取得最大及最小索引值,同时也只有这样,才能利用程序将内部的值一一显示出来。另外,利用最大和最小索引值还可以判断是否为一次成功接收。
(3)最优化TimeDelay
在每次传输指令后,一定要等待一段时间才可能从串行端口的输入缓冲区中取得信号源传回的数据,这个时间有多久是项目的关键,太长了效率太低,太短了,数据有可能接收不全,所以有必要进行最佳化测试。具体代码如下:
Public Declare Function GetTickCount Lib ″ker-nel32″ ()?As Long
Dim Buf$
Dim T1&?T2&
Comm1.Output=Trim(Ucase(txtsend..Text)) & vbcr
T1=GetTickCount?()
Do
Buf=Buf & Comm1.Input
Loop Unitl Instr(1,Buf,vbCr)>0
T2=GetTickCount()
LblTime.Caption=CStr(T2-T1) & “ms”
该程序中使用GetTickCount来取得系统自开机后每千分之一秒更新的Tick值,在接收的前后加上取Tick值的叙述,自然就可以得到传输的时间了。从测试的结果来看,传输单个数据的时间为100ms,10个群组的时间约为500ms。
(4) 增加程序的效率
利用下面的程序可在无线通讯受到干扰或对方设备电源没有打开等原因造成对方数据不能上传时,避免程序一直在等待。如果在规定时间内还没等到规定的字节数时就跳出循环,并出现一个重新发送对话框。此时如果还是不对,就弹出一个对话框“请检查系统!"。具体程序如下:
Public Sub ReceiveData()
′On Error Resume Next
Dim start, dend As Integer
Dim byin() As Byte
Dim byindata(11) As Byte
Dim I%? buf$
′根据事件分发处理
Do While frmMSCommDemo.MSComm1.CommEvent = 2
Exit Do
Loop
Timedelay 850 ′适当延时
byin = frmMSCommDemo.MSComm1.Input
′接收串行端口内的数据至动态数组中
dend = UBound(byin) ′得到最大值
start = LBound(byin) ′得到最小值
If dend < 5 Then
MsgBox RadarNoOut & “信号源出现系统
故障,请求检修!”? vbOKOnly
Exit Sub
End If
′接收串行端口内的数据至动态数组中
′ReDim Preserve byin(11) As Byte
If byindata(0) = &H55 And byindata(1) = &HAA
Then ′包头正确,接收到包头进行数据处理
.
.
.
End sub
′延时程序
Sub Timedelay(TT As Long)
Dim t As Long ′声明一个长整数,记录计数值
t = GetTickCount() ′取得系统计数值
Do ′开始循环
DoEvents
If GetTickCount - t < 0 Then t = GetTick-Count ′归零
Loop Until GetTickCount - t >= TT ′计算延迟是否到达
End Sub
4 结论
根据本系统的研制经验,利用MSCOMM控件开发无线通信要把握好以下三条:
(1) 收发之间应延时适当,这需要在测试中不断地调试,以达到最佳效果。
通信软件范文4
关键词: TCP/IP;TCP协议; UDP协议;Winsock;远程监测
中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2013)04-0731-06
Design of TCP and UDP Communication Test Software
TU Jin-long
(Nanjing Communications Institute of Technology, Nanjing 211188, China)
Abstract: TCP and UDP are two protocols of TCP/IP transmission layer protocol. They use IP routing function to send packets to destinations, thus provide network services for applications and application layer protocols. TCP and UDP both have their advantages and disadvantages, the mai n difference between them lies in the connection state. Applications choose accord to the actual usage. Winsock can be used to write client and server applications without the need of knowing details of the TCP/IP. By setting Winsock attributes and call its control methods, connection to remote computers and two-way data exchange can be easily achieved.
Key words: TCP/IP; TCP protocol; UDP protocol; Winsock; remote monitoring
根据国家有关标准,各地应加强对客运车辆燃料消耗量检测和监督管理,加快淘汰、更新高耗能的老旧营运车辆。但迄今为止,我国客运行业的能耗统计一直采用手工填写统计报表的方式,不仅投入的人力物力大、数据误差大,而且不能实时了解能耗情况。为此,需要研发一种客车能耗远程监测系统,以便实时快速地采集客车运营过程中的有关信息,实现全自动的客车能耗数据分析、处理、评估,从而改变现行的由人工按月或年度填写报表的统计方式,提高工作效率及数据的准确性,为管理部门对高能耗高污染车辆实施强制淘汰或报废提供数据支持。
随着计算机技术及网络技术的不断发展,人们的生活和工作越来越离不开网络,尤其是网络远程控制技术已经广泛地应用于网络自动化管理、实时监控等方面。针对移动运行的客车,要实时获取有关数据,就需要凭借无线网络将采集到的数据传到监控中心。在众多的网络通信中,以TCP/IP协议最为流行,为了测试远程无线通信在具有防火墙的系统中的有效性,针对应用的特殊性,以及为了顺利进行软硬件的配接,需要先编写一个测试通信链路的TCP和UDP通信测试软件。
TCP和UDP是TCP/IP体系结构中的两个传输层协议,它们使用IP路由功能把数据包发送到目的地,从而为应用程序及应用层协议提供网络服务。TCP提供的是面向连接的可靠的端到端传送服务,它可以在低层不可靠的情况下(如出现分组传输的丢失、乱序等)提供可靠的传输机制。而UDP提供的是无连接的、不可靠的传输服务,在数据传输之前,不需要建立连接,而且收方收到UDP数据报文之后,也不需要给出任何应答信息。显然,UDP减少了很多的为保证可靠传输而附加的额外开销,因而它的效率高[1]。因此,TCP与UDP各有其优缺点,要根据实际应用进行选择。
1 TCP和UDP测试软件的设计
使用TCP和UDP通信的方法有多种,在VB开发平台上使用Winsock控件来设计软件可以说是最方便的。Winsock即Windows Sockets规范的简称,是目前最流行的网络通信应用程序接口之一。Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。
Winsock控件对用户是不可见的,但它提供了访问TCP/IP网络的捷径,使用它可以通过UDP协议或TCP协议方便地连接到远程的机器并进行数据交换。用Winsock控件编写客户和服务器应用程序,不需要了解TCP/IP或调用底层Winsock API的具体细节。通过设置Winsock控件的属性和调用该控件的方法,可以很容易地连接到远程计算机并进行双向的数据交换。
使用WinSock控件时,首先要确定的是使用TCP还是UDP协议,它们之间主要的区别在于连接状态。
1.1 TCP测试软件设计
TCP协议是面向连接的协议,在数据传输前就建立好了点到点的连接。TCP网络程序工作原理如图1所示[2]。
图1 TCP网络程序工作原理
基于 TCP/IP 协议网络通信主要模式就是客户机/服务器模式(Client/Server 模式,简称 C/S),即客户端提出请求,服务器在监听时接收到请求后就提供请求服务。远程控制是基于 C/S 模式来实现的,所以程序分为服务器和客户端程序。客户端和服务器端连接成功后,通过信息交换取得相应的服务。因此,在进行编程时,服务器端程序应设置Winsock控件的LocalPort属性和调用 Listen 方法来监听,客户机端程序则要设置 Winsock 控件的 RemoteHost 和 RemotePort 属性、调用 Connect 方法请求连接[3]。一旦建立了连接,两台计算机之间就可以发送和接受数据了。要发送数据,调用SendData方法。当接受数据时,产生DataArrival事件。在DataArrival事件中调用GetData方法来接收数据。
在VB6开发平台上可以方便地使用Winsock控件来设计网络通信软件,为了测试的方便,将客户端和服务器端的软件设计在同一软件中,通过标签来选择是客户端还是服务器端,或是UDP测试,也可以在同一台电脑中运行软件完成测试。在设计阶段,添加好必要的窗体和按钮、文本框并设置所需的名称、属性后,在窗体中放置Winsock控件,在属性窗口里的协议,选择sckTCPProtocol,也可以在代码里配置协议,例如:
Winsock1.Protocol=sckTCPProtocol
1.1.1服务器端程序
为了能接受多个连接请求,需要创建新的控件实例,调用新的实例中的接受方法。下面是创建一个服务器端程序的主要内容:
1)设置端口并侦听(监听)。双击“开始侦听”按钮,在代码中加入要设置的LocalPort,并开始监听,代码如下:
Private Sub cmdListen_Click()
If TCP_Server(0).State sckClosed Then TCP_Server(0).Close
TCP_Server(0).LocalPort = txtLocalPort(2).Text
TCP_Server(0).Listen
End Sub
2)监听连接请求。监听方法在控件中被调用,每个连接请求到来时,代码会测试看它的索引(Index)是否为0(监听控件的值),根据其值是否为0执行不同的操作。代码如下:
Private Sub TCP_Server_ConnectionRequest(Index As Integer, ByVal requestID As Long)
Dim i As Long
If Index = 0 Then '主Winsock——Winsock(0)发生消息
i = 1
If maxConnext > 0 Then
While i
i = i + 1
DoEvents
Wend
End If
If i
TCP_Server(i).LocalPort = txtLocalPort(2).Text
TCP_Server(i).Accept requestID
nowconnext(i) = True 'Winsock(i)被占用
Else
If maxConnext > 50 Then
MsgBox "已经达到最大用户数!", vbExclamation + vbOKOnly, "提示"
Exit Sub
End If
maxConnext = maxConnext + 1
Load TCP_Server(maxConnext)
TCP_Server(maxConnext).LocalPort = txtLocalPort(2).Text
TCP_Server(maxConnext).Accept requestID
ReDim Preserve nowconnext(maxConnext + 1)
nowconnext(maxConnext) = True
ReDim Preserve saveServerData(maxConnext + 1)
ReDim Preserve saveServerIndex(maxConnext + 1)
i = maxConnext
End If
End If
End Sub
3)服务器端发送数据。若选中发送回车符,则在代码中增加发送回车符,若选中发送换行符,则在代码中增加发送换行符。若是广播,则逐个发送,否则需要选择发送目标。主要代码如下:
Private Sub cmdSend3_Click()
Dim i As Integer
Dim sendresult As Long
Dim sendsrc() As Byte
Dim sendsrclen As Long
Dim sendmess(1 To 1024) As Byte
Dim outByte() As Byte
If Me.ckHex(2).Value = 1 Then '十六进制发送
sendsrclen = Len(txtSend(2).Text) / 2 - 1
ReDim sendsrc(0 To sendsrclen)
For i = 0 To sendsrclen
sendsrc(i) = Val("&H" & Mid(txtSend(0).Text, i * 2 + 1, 2))
Next
Else
outByte = StrConv(txtSend(2).Text, vbFromUnicode)
sendsrc = outByte
sendsrclen = UBound(outByte)
End If
If chkGB.Value = 1 Then
For i = 1 To maxConnext
If TCP_Server(i).State = sckConnected Then
TCP_Server(i).SendData sendsrc
End If
DoEvents
Next
Else
Dim findSerVer As Boolean
For i = 1 To maxConnext
If saveServerIndex(i) = Val(Combo1.Text) Then
findSerVer = True
Exit For
End If
Next
If i > 0 And findSerVer = True Then
If TCP_Server(i).State = sckConnected Then
TCP_Server(i).SendData sendsrc
End If
Else
MsgBox "请选择发送目标!", , "提示:"
End If
End If
End Sub
4)服务器端接收数据,数据到达后,先调用TCP_Server控件的getdata方法,将接收的数据以vbstring数据类型,存放在strdata变量之中,然后再加到txtReceive(2)控件之中。主要代码如下:
Private Sub TCP_Server_dataarrival(Index As Integer, ByVal bytestotal As Long)
Dim strdata As String
TCP_Server(Index).GetData strdata, vbString
txtReceive(2).Text = txtReceive(2).Text & Index & ":" & TCP_Server(Index).RemoteHostIP & ":" & TCP_Server(Index).RemotePort & ":" & strdata & vbCr
End Sub
以上是创建一个服务器端程序的主要内容,为了方便使用,还可适当增加一些辅助的功能,运行后的服务器端界面如图2所示。
图2 TCP协议服务器端测试软件运行界面
1.1.2 客户端程序
1)设置远程主机端口并连接。双击“建立连接”按钮,在代码中指定远程主机的ip地址,并调用TCP_Client控件的connect方法,来初始化与主机的连接请求,代码如下:
Private Sub cmdConnect_Click()
On Error GoTo connectErr
If Tcp_Client.State sckClosed Then Tcp_Client.Close
Tcp_Client.RemoteHost = txtRemoteHost(1).Text
Tcp_Client.RemotePort = txtRemotePort(1).Text
Tcp_Client.Connect
TimerConnect.Enabled = True
Exit Sub
connectErr:
StatusBar1.Panels.Item(2).Text = "未能成功连接。" & Err.Number
End Sub
2)客户端发送数据。若选中发送回车符,则在代码中增加发送回车符,若选中发送换行符,则在代码中增加发送换行符。主要代码如下:
Private Sub cmdSend2_Click()
Dim i As Integer
Dim sendresult As Long
Dim sendsrc() As Byte
Dim sendsrclen As Long
Dim sendmess(1 To 1024) As Byte
Dim outByte() As Byte
On Error Resume Next
If Me.ckHex(1).Value = 1 Then '十六进制发送
sendsrclen = Len(txtSend(1).Text) / 2 - 1
ReDim sendsrc(0 To sendsrclen)
For i = 0 To sendsrclen
sendsrc(i) = Val("&H" & Mid(txtSend(0).Text, i * 2 + 1, 2))
Next
Else
outByte = StrConv(txtSend(1).Text, vbFromUnicode)
sendsrc = outByte
sendsrclen = UBound(outByte)
End If
If chk13(1).Value = 1 Then
sendsrclen = sendsrclen + 1
ReDim Preserve sendsrc(0 To sendsrclen)
sendsrc(sendsrclen) = 13
End If
If chk10(1).Value = 1 Then
sendsrclen = sendsrclen + 1
ReDim Preserve sendsrc(0 To sendsrclen)
sendsrc(sendsrclen) = 10
End If
If Tcp_Client.State = sckConnected Then
Tcp_Client.SendData sendsrc
Else
MsgBox "请先建立连接!", , "提示:"
End If
End Sub
3)客户端接收数据,先调用TCP_Client控件的getdata方法,将接收的数据以vbstring数据类型存放strdata变量之中,然后将strdata变量的内容,加到txtReceive(1)控件之中。主要代码如下:
Private Sub TCP_Client_dataarrival(ByVal bytestotal As Long)
Dim strdata As String
Tcp_Client.GetData strdata, vbString
txtReceive(1).Text = txtReceive(1).Text & strdata
End Sub
本部分是创建一个客户端程序的主要内容,运行后的界面如图3所示。
1.2 UDP测试软件
UDP是无连接的协议。与TCP操作不同,计算机并不建立一个连接。并且,UDP应用程序可以是用在客户端,也可以用在服务器端。使用UDP协议,在两个Winsock控制间进行数据的发送,在连接的两端必须完成以下三步:
1)设置RemoteHost属性;
2)设置RemotePort属性;
3)申请Bind方法。
通过使用方法Bind,则可将该Winsock捆绑到一个本地端口,以便该Winsock使用该端口来进行类似TCP的“监听”功能,并防止其它应用使用该端口。
使用UDP协议传送数据,首先设置客户计算机的LocalPort属性。而作为服务器的计算机仅需要设置RemoteHost属性为客户计算机的IP地址或域名,并将其RemotePort属性设置成客户计算机上的LocalPort属性。主要代码如下:
WinsockUDP.RemoteHost = txtRemoteHost(0).Text
WinsockUDP.RemotePort = txtRemotePort(0).Text
WinsockUDP.LocalPort = txtLocalPort(0).Text
WinsockUDP.Bind txtLocalPort(0)
然后就可通过SendData方法来开始信息发送,客户计算机则可在其DataArrial事件中使用方法GetData来获取发送的信息,发送和接收数据的代码与TCP通信的代码类似。UDP测试程序运行后的界面如图4所示。
图4 UDP协议测试软件运行界面
2 结束语
TCP和UDP是TCP/IP体系结构中的两个传输层协议,它们使用IP路由功能把数据包发送到目的地,从而为应用程序及应用层
协议提供网络服务。TCP提供的是面向连接的可靠的端到端传送服务,而UDP提供的是无连接的传输服务,在数据传输之前,不需要建立连接,因而它的效率高。TCP与UDP各有其优缺点,它们之间主要的区别在于连接状态,应用时要根据实际应用进行选择。
使用TCP和UDP通信的方法有多种,在VB开发平台上使用Winsock控件来设计软件可以说是最方便的。用Winsock控件编写客户和服务器应用程序,不需要了解TCP/IP的具体细节。通过设置Winsock控件的属性和调用该控件的方法,可以很容易地连接到远程计算机并进行双向的数据交换。
参考文献:
[1] 天津电气传动设计研究所.电气传动自动化技术手册[M].北京:机械工业出版社,2011.
通信软件范文5
以“软”碰“硬”
实际上,微软非常重视统一通信市场,在研发和市场营销方面均投入了很多的资源,并给Office Communications Server(OCS)取了一个更短的名字――Lync,也聚集了更多的合作伙伴。微软准备在统一通信领域和思科、Avaya和IBM等硬件厂商打一场硬仗。
Lync 2010虽然是OCS的继任者,不过与OCS有很大不同。Lync 2010使用同一个用户界面来管理多种通信,包括即时通信、语音呼叫、视频呼叫、视频会议、Web会议,还新增了即时动态、通讯录名片变更和720p高清视频通话等功能。
对企业来说,Lync 2010的诱惑是:它有能力取代传统的PBX(程控交换机)和会议系统,可以为公司节省可观的硬件和许可成本。但企业在考虑Lync 2010时不能只看到其优点。虽然它使沟通更容易,更节省成本,但也会造成工作人员分心,并且语音和视频也会消耗掉企业大部分网络带宽。
Lync 2010除了为人们的沟通方式带来革命性的变化外,企业IT部门还期待通过Lync 2010改进基础设施,消除传统的PBX系统以节省时间和资金。孙建东表示:“在Lync 2010正式前,我们在全球已经有60多个客户做过了先期的体验,有100多个客户做了技术体验。在中国也已经有5个客户率先把Lync 2010在他们的公司中。”
改变沟通方式
Lync 2010继承了即时通信、在线状态、音频、视频、网络会议和话音功能。通过Lync 2010人们可以根据时机情况选择最合适的方式进行沟通。Lync 2010支持用户所熟悉和常用的应用程序,包括Microsoft Office、Microsoft SharePoint和Microsoft Exchange等。
孙建东对记者说:“在微软我们已经不用电话了,这对我们来说是额外的成本节省。现在每个人都有一个耳机,我平常在23层办公,但有时候我到20层跟我的团队一起办公,我要做的事情就是把电脑搬下去。扩展性强是基于软件的解决方案带来的最大好处。”
中国人寿再保险股份有限公司副总经理成小平说:“我们对微软系统做了全面的了解,它的有些功能确实很适合我们的需求。2005年,我们就部署了OCS,它把即时通信以及在线感知、快速沟通、人员状态情况集成到OA系统中。那时开始,大家就觉得使用起来比较顺手。今天Lync 2010更吸引人的地方,就是它可以实现多点沟通。”
通信软件范文6
关键词:模拟I2C总线多主机系统通用软件包
引言
I2C是由Philips公司推出的芯片间串行传输总线。它以规范严谨、使用简单灵活、支持的器件繁多等特点而被广泛应用。对于不具备I2C接口的主器件(通常指MCU),可利用普通的I/O口来模拟I2C总线,但由于无法解决多主竞争问题而只能应用在单主机系统中。本文提供了一种解决方案,可将模拟I2C总线应用在多主机系统中,实现模拟I2C的多主通信。
1模拟I2C多主通信的设计原理
在I2C总线系统中,可以有多个主器件节点。当多个主器件节点都企图控制总线时,就会出现多主竞争。这时就需要进行仲裁,裁决的结果只允许其中一个主器件节点成为主控器。而硬件I2C系统之所以支持多主系统,是因为其具有的三个特性:①接口的线“与”逻辑功能;②内部冲突检测电路;③I2C中断和状态处理程序。这使其能够自动完成多主竞争时的时钟同步与总线仲裁,无须用户介入。而在模拟I2C系统中,如果能通过软硬件设计模拟出上述的三个特性,就等于解决了竞争仲裁与同步问题,那么模拟I2C总线就完全可以应用于多主机系统中。
首先,经过理论分析与实验验证,得知并联在一起的MCU的普通I/O口线本身就具有线“与”特性。其次,为了避免主节点在总线繁忙时启动总线而引起的冲突,需要增加一条握手线,即BUSY线来代表总线的忙/闲状态。因为数据线(SDA)和时钟线(SCL)上的信号是变化的,所以不能用它们充当BUSY线。另外,当多个MCU都检测到总线空闲,同时企图控制总线时,将形成多主竞争状态,同样会引起冲突。这时就需要引入时间片,用划分的时间片来决定竞争时各MCU占用I2C总线的优先次序。结合SDA的线“与”特性,检测SDA上是否已经存在启动信号(即SDA是否为0),如果直到相应的时间片结束都没有检测到SDA上的启动信号,自己就可以控制总线。最后,由于模拟系统中没有硬件I2C中断,MCU作为从器件时不知何时开始接收总线上的数据,所以,需要提供一根I2C中断信号线,使MCU在中断程序中处于从接收状态,中断线可以与BUSY线合用。
通过上述分析,利用三根信号线就能模拟出硬件I2C的竞争仲裁过程,实现模拟I2C的多主通信。
2系统连接示意图
三线模拟I2C总线系统的连接框图如图1所示。
模拟I2C多主系统中,要参与竞争的主器件节点采用三级连接方式,如MCU(A)、MCU(B)、MCU(C);对于器件节点如24C64等,因不具备主动控制I2C总线的能力,不会参与总线的竞争,所以仍可采用通用的两线连接方式。三线模拟I2C总线中的时钟线SCL和数据线SDA可由MCU的任意两个I/O口线模拟;BUSY线因还要充当中断信号线,则必须与MCU的外部中断引脚INT0或INT1连接。
3时序分析及流程设计
在检测到BUSY=0(忙)时,不会出现竞争;但当检测到BUSY=1(闲)到将BUSY设为0,需要的典型时间为3个机器周期。在这段时间内,别的MCU仍会检测到BUSY=1,也认为总线空闲到企图占用,这时就出现了竞争与冲突。竞争的时间范围为2×3个机器周期。仲裁的方法是为每一个MCU分配一个仲裁时间片,在规定的时间片内MCU反复检测总线中的数据线SDA是否有信号,直到时间片结束。如果没有信号就可马上占用I2C总线,发送起始信号;如果有信号则表示有别的高优先级的MCU要占用,该MCU退出竞争。仲裁时序图如图2所示。
将BUSY设为0后的一段时间规定为仲裁时间。仲裁时间长度为(N-1)×Δt。N为I2C总线上参与竞争的MCU个数;Δt为一个时间片的长度,典型值为4个机器周期。按优先级顺序给MCU分配不同个数的时间片。仲裁时序如图2所示:假设MCU(A)优先级最高,它不必进行时间片测试,在检测到总线空闲时直接发送起始位;MCU(B)优先级为次高,在检测到总线空闲后,它需要等待检测一个时间片周期Δt,在Δt期间内SDA线上没有变化,即等待确认比它高优先级的MCU(A)不使用总线后,MCU(B)才能占用总线,发送起始信号;MCU(C)优先级最低,它需要测试等待周期2Δt,只有当MCU(A)、MCU(B)都不占用总线时(SDA一直保持为1),MCU(C)才能占用总线发送起始信号。
在实际应用中,还要注意BUSY线所用的中断脚INT0/INT1需初始化为开中断,并设定为下跳沿触发。当各MCU需控制总线进行主发送或主接收时,需先关掉INT0/INT1需初始化为开中断,并设定为下跳沿触发。当各MCU要控制总线进行主发送或主接收时,需先关掉INT0/INT1中断,再检测BUSY线是否为空闲(=1)。若是空闲就将BUSY设为0,进行竞争仲裁,流程图如图3所示。如果在仲裁时间片内SDA始终为1,说明没有高优先级的MCU要占据总线,自己可以发动起始信号控制总线,直到通信结束后,再释放BUSY线将其置为1。此时其它的MCU就只能作为从器件。如果在仲裁时间片内检测到SDA=0,则表明I2C总线已被占用,立刻将自己的BUSY设为1,并打开中断转为从接收,其流程图如图4所示。在中断程序中接收寻址字节,以判明是否呼叫自己。若是,就进行相应的读写操作;若不是,就放弃退出中断程序。注意:为了使总线上的MCU都能检测到I2C上的起始信号,并使从器件能够同步接收,SDA=0的时间要维持一定的宽度,至少应大于9个机器周期。