《RDS数据处理系统设计.pdf》由会员分享,可在线阅读,更多相关《RDS数据处理系统设计.pdf(38页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 i 摘要 与传统调频广播系统相比,RDS 广播系统具有如交通公告、广播寻呼等额外功能,适合传输对数据率要求不高的实时文字信息,提高了广播通信的频率利用率,该系统可广泛应用于车载移动多媒体中。本课题旨在依据广播数据系统技术规范使用 C+编程语言对 RDS 数据进行类封装,然后定义类对象,通过调用类方法将数据解析成对应的文本信息,使用虚拟串口及 MFC 中封装好的 CFile 类实现对 RDS 数据的接收以及将解析后的文字保存和发送,并利用微软提供的 SAPI 完成语音化模块,将解析得到的文字信息转换成语音信息进行播放。这样就形成了一套面向 RDS 数据处理的软件平台,实现对数据进行接收、解析、
2、显示、存储、语音化等一系列功能。关键词:RDS,串口通信,数据封装,语音化 ii Abstract Compared with the conventional FM radio system,RDS possesses the additional function such as traffic announcement,radio paging and so on.The system is suitable to transmit the real-time text messages whose data rate requirement is not high.which impr
3、oves the frequency efficiency of the broadcast communication.The system is widely applied in vehicle mobile multimedia.This design aims at packaging the RDS data according to the The Standard for RDS technique by means of C+programming language,then define an object for the class,translate the data
4、into corresponding text information by calling the methods for the class.Make use of the virtual serial port and CFile class in MFC to receive RDS data or store and send the text,and finish the phonic realization part through the SAPI supported by the Microsoft,convert the translated text into voice
5、 and broadcast them.In this way a software platform for RDS data processing system developed,which realizes those functions as data receiving,analyzing,showing,storing and phonic realizing.Keywords:RDS;serial communication;data packaging;phonic realization I 信息电子技术学院 目录 摘要.i Abstract.ii 第 1 章 绪论.1 1
6、.1 研究背景及意义.1 1.2 国内外研究现状.2 1.3 发展趋势及展望.2 1.4 本文主要内容及章节安排.2 第 2 章 RDS 数据.4 2.1 RDS 数据内容及帧结构.4 2.2 RDS 数据信息.6 第 3 章 软件介绍.9 3.1 Microsoft Visual Studio 2010.9 3.2 串口调试助手.9 3.3 VSPM 虚拟串口.10 第 4 章 系统程序设计.11 4.1 系统概述.11 4.2 RDS 数据类定义.12 4.2.1 定义基类.12 4.2.2 定义各组数据类.12 4.3 模块设计.13 4.3.1 接收模块.13 4.3.2 解析模块.1
7、5 4.3.3 显示模块.20 4.3.4 存储模块.26 4.3.5 语音模块.26 4.4 程序调试及运行结果.29 4.4.1 设置虚拟串口.29 4.4.2 运行程序.31 参 考 文 献.35 致 谢.错误!未定义书签。信息电子技术学院 1 第 1 章 绪论 当代社会信息技术高速发展,广播作为一种传输信息的手段为人们广泛接受和使用。然而提到“广播”二字,人们想到的都是音频信息,实际上并非如此,在传输声音的同时还可以利用很小的一段频率资源来传送文字等信息,这样就提高了频率利用率,也丰富了通信内容,这种技术的发展造就了 RDS 广播数据系统。1.1 研究背景及意义 广播数据系统(Radi
8、o Data System,RDS)是在现有调频广播系统的基础上进行了一定的改造,在频率范围为 87.5MHz 至 108MHz 的单声道广播信号或调频立体声基带频谱的上边界(57kHz2.4kHz)外增添一个副载波信道,传输速率为1187.5bps,因此十分适合传输对数据率要求不高的实时文字信息【1-4】。也就是说,在使用了 RDS 技术的调频广播中,除了传送一套立体声节目外,也可以同时传送听不见的广播数据,包括符号、数字和文字等内容,为广大静止的和移动的听众提供多种服务。因此,与传统的调频广播系统相比,RDS 广播系统拥有如:台名显示,标准时间、交通公告、天气预告、节目类型、交通信息广播等
9、附加功能【3】。目前,社会不断进步,信息技术更是时刻都在迅猛发展,人们对传播媒体的要求也越来越高,对通信业务的需求量也越来越大,人们希望在听到声音的同时还能看到相应的信息,这样看来,传统的调频广播已经无法满足这些需求,无线广播频谱资源也就显得弥足珍贵。因此,研究如何高效地利用有限的频谱资源为用户提供更多的服务具有非常重要的现实意义。RDS 技术的使用正是体现了高效利用频谱资源这一大特点。通过对 RDS 数据信息进行相应处理,可以将数据信息反映在显示屏上,使得用户对一些重要信息一目了然,这样就弥补了传统调频广播只有音频信号这一缺陷,并且这种技术不需建造众多的转发站,是一种高效的信息传送手段,具有
10、节省频率资源、时效性高、投资省、覆盖范围大等突出优点,并且具有明显的社会经济效益。信息电子技术学院 2 1.2 国内外研究现状 20 世纪 70 年代初期,联邦德国开发了一种为汽车驾驶人员服务的广播信息服务(ARI),ARI 附加在调频广播中,能够帮助识别各米波调频广播,解决了在驾车行程中由于调频发射机服务区比较小而经常需要重调收音机的问题。由于功能有限,远不能满足需要。不久,欧洲广播联盟组织成立,开发了广播数据系统(RDS),并于 1984 年公布了首份 RDS 系统的技术规范。经过 20 多年的发展,RDS 技术已经逐渐成熟,其在美国和欧洲被人们广泛地运用于手机终端、家庭影院和车载收音机等
11、设备中,然而我国的信息化建设尚未达到十分健全,RDS 还没有得到在应用上的推广【6,7】。RDS 具有很大的技术优势和商业价值,我国的相关技术人员也针对无线广播的现状进行了一定研究,随着各专家学者研究工作的不断深入,无线广播的各种价值和潜能也不断得到了开发和应用。我国信息化建设正在不断发展,信息化网络也正在不断完善,今后,融入多媒体信息技术,发挥娱乐性、方便性、商业性、经济性等优势,是无线数据广播的趋势和目标。目前,在我国高速公路广播中,希望利用 RDS 功能来增加终端用户需要的实用信息和功能,帮助用户收听各类节目以及对正在收听的节目提供补充信息,此外还能提供一些针对突发事件的临时播报功能。1
12、.3 发展趋势及展望 RDS 技术可以广泛应用于车载移动多媒体中,近年来,车载移动多媒体系统逐渐成为全球范围内一种新型的高技术产业,车载信息系统包括汽车电脑、智能导航仪、行车记录仪、车载多媒体等。RDS 主要用于信息公告、交通管制、自动调频和导航等功能。通过软件编程设计一套 RDS 数据处理系统,实现对 RDS 数据的接收、翻译、显示、音频转化等功能模块,并且各个功能模块可以独立封装,这样便于系统移植,对于将来想要在任何地方使用 RDS 的设备来说将是十分方便儿经济的【8】。1.4 本文主要内容及章节安排 本设计旨在开发一套面向 RDS 数据处理的软件平台,在充分理解并且掌握RDS 数据的基础
13、上实现对 RDS 数据的接收、解析、存储、封装、语音化等功能,最终尝试配合相关硬件实现 RDS 数据完整的处理链,RDS 数据处理系统功能如 信息电子技术学院 3 图 1.1 所示,设计所使用的软件开发平台为 Microsoft Visual Studio 2010,设计的核心内容即充分利用 C+语言编程的最大特点面向对象设计方法,也就是定义一些数据类,将其封装,并利用 MFC 中封装好的一些类及其方法对数据进行处理。图 1.1 RDS 数据处理系统功能图 论文章节安排如下:第一章:介绍 RDS 广播数据系统的发展历史及研究现状。第二章:介绍 RDS 数据,包括每种组数据的帧结构、各个信息位的
14、定义以及对应文字信息代表的内容。第三章:对系统设计所使用的软件开发环境 Microsoft Visual Studio 2010 及辅助测试软件(VSPM、串口调试助手)介绍。第四章:详细论述了程序设计的各个部分,首先对 RDS 数据进行类定义,包括变量及方法,然后对数据处理的各个功能模块进行设计并完成界面设计,最后进行系统功能测试并对结果进行分析。从虚拟串口或硬件接收机接收 RDS 数据 将二进制数据解析成相应文字或控制信息 显示文字信息 控制相应功能 播放文本信息 存储 查看 信息电子技术学院 4 第 2 章 RDS 数据 RDS 数据系统的设计即围绕 RDS 数据展开,1984 年,欧洲
15、广播联盟公布了首份 RDS 技术规范,其中定义了 RDS 数据。我国的 RDS 相应规范为 GB/T15770-1995广播数据系统(RDS)技术规范。2.1 RDS 数据内容及帧结构 要完成 RDS 数据处理系统的设计首先需要将 RDS 数据定义为一种类,用 C+语言定义这种数据类就要充分理解和掌握 RDS 数据的帧结构和数据内容。RDS 数据发送的基本单元称为组,RDS 数据共有 16 种类型:group 0A,group 0B,group 1A,group 1B group 15A,group 15B,共 32 种组。每一个组(group)由 4 个块(block)组成:A 块、B 块、
16、C 块和 D 块,每块有 26 位,其中前 16 位为有效位,后 10 位为校验位和偏移位,为消息提供误码校验和块、组同步【9,10】,因而一帧RDS 数据共有 106 位,数据帧结构如图 2.1 所示:信息电子技术学院 5 图 2.1 RDS 数据帧结构 RDS 数据内容包括电台类型、节目类型、交通公告、标准时间、天气预报等,同时提供了开放式数据接口,为特殊要求用户提供数据文本通道。RDS 数据各组块内容说明如下:1.A 块:PI 节目码(16 位)以及位校验码和偏移字(10 位),是快速寻找 RDS 数据头的依据,PI 码是根据特定地区,由 EBU 组织进行划分的,包括国家识别码、区域识别
17、码和节目基准号;1 group=104 bit ABlock(26bit)BBlock(26bit)CBlock(26bit)DBlock(26bit)组类型 其它(5bit)组行码(4Bit)节目类型 PTY(5bit)交通节目码 0-15 0=A 1=B 0-31 A3 A2 A1 A0 B0 TP PT4 PT3 PT2 PT1 PT0 校验码 偏置字 校验码 偏置字 校验码 偏置字 校验码 偏置字 PI 码 信息电子技术学院 6 2.B 块:Group type code(4bit),0-15 共 16 种;B0(1bit)表示类型版本:0 表示 A版,1 表示 B 版,版本 A 仅
18、A 数据是 PI 码,版本 B 中 A 块和 C 块数据均为 PI码;TP(1bit),标志是否收到交通信息通告;PTY(5bit)表示节目类型;剩余5bit,不同组型内容不尽相同;3.C 块和 D 块的具体内容也随 group 类型不同具有不同的安排,各组数据内容说明如下:1)0A 组:交通公告识别码 TA(1bit),音乐/语言切换 M/S(1bit),解码器识别码 DI(1bit),DI 段地址(2bit),可选频率表 AF(16bit),节目业务名称 PS(16bit)。2)0B 组:交通公告识别码 TA(1bit),音乐/语言切换 M/S(1bit),解码器识别码 DI(1bit),
19、DI 段地址(2bit),节目业务名称 PS(16bit)。3)1A 组:广播寻呼吗(5bit),慢标志码(16bit),节目栏信号 PIN(16bit),包括日(5bit),小时(5bit),分钟(6bit)。4)1B 组:空闲位(5bit),节目栏信号 PIN(16bit),包括日(5bit),小时(5bit),分钟(6bit)。5)2A 组:文本 A/B 标志(1bit),文本段地址(4bit),两块广播文本 RT(16bit)。6)2B 组:文本 A/B 标志(1bit),文本段地址(4bit),一块广播文本 RT(16bit)。7)4A 组:空闲位(3bit),约简儒略日码(17bi
20、t),小时码(5bit),分钟码(6bit),本地时间差(6bit),用于发送本地时间。8)5A 组:地址识别码(5bit),两块透明数据信道 TDC(16bit)。9)5B 组:地址识别码(5bit),一块透明数据信道 TDC(16bit)。10)6A 组和 6B 组:内部数据应用。11)7A 组:寻呼类型 A/B(1bit),寻呼段地址码(4bit),两块广播寻呼 RP(16bit)。12)8A 组:TMC 应用。13)9A 组:紧急报警系统 EWS(37bit)。14)10A 组:Program Type Name。15)13A 组:网络相关信息和 paging traffic。16)1
21、4A 和 14B:增强的其他相邻网络信息 EON。17)15A 组和 15B 组:包含交通公告的文本信息和交通报警,用于快速调谐和基本开关信息。18)3A 3B 4B 7B 8B 9B 10B 11B 12A 12B 和 13B 用于开放数据应用,目前在 RDS技术规范中没有明确定义。2.2 RDS 数据信息 接收到的RDS数据均为二进制的形式,依据RDS数据帧结构可以定义出RDS数 信息电子技术学院 7 据类,而要把不同组块中丰富的信息解析成文字及相应的控制信息需要掌握RDS数据信息,RDS数据信息表如表2.1:表2.1 RDS数据信息表 RDS 数据 信息介绍 节目识别码 PI 用于区别不
22、同国家或地区发射同一节目的代码。当接收机调谐到的节目接收状况欠佳时,可利用此消息使接收机自动搜索另一替代频率 节目业务名称 PS 1 个双字节或 2 个单字节字符,用于显示正在收听的广播节目的业务名称 节目类型 PTY 节目类型识别码,指明正在播出的节目类型,接收机按此识别码接收以及录制这一类型的节目 交通节目识别码TP 一个开关信号,通过接收机上的相应指示灯指明正在收听的节目业务是否是播放交通公告的节目 交通公告识别码TA 一个切换信号,指明是否正在广播交通公告。收到 TA 信息时,可利用这个信号从其他工作模式转到广播模式或实现增大音量等相似工作 切换频率 AF AF 表给出同一个或相邻接收
23、区内广播同一节目的各发射机的频率信息,接收机存储此表以减少搜索替换频率的时间 解码器识别码 DI 一个切换信号,指明广播节目处于 16 种工作模式中的哪一种或是哪几种的合成 音 乐/语 言 切 换M/S 一个双状态信号,指明正在广播的是音乐类还是语言类节目,听众可根据此信号调整收音机音量以达到最佳效果 节目栏目号 PIN 广播电台公布的节目开始时间,接收机利用该信号选定将要收听的节目。节目即使推迟,PIN 也保持不变,接收机可以使用这个信号自动接通电源或开始录音 广播文本 RT 根据一定编码规则的字符串,可在装有显示屏的接收机上显示 增强的其他网络信息 EON 此信息用于更新调谐节目业务之外的
24、其他节目业务的 PI、PIN、PTY、TA 和 AF 等信息。有 EON 功能的接收机既可收听调谐节目,也可收听相互参照的其他节目的交通公告 透 明 数 据 信 道TDC 有 32 个子信道的数据信道,用来传送单字节图形字符或者双字节图形字符或者计算机程序以及类似的不需要显示的数据 内部应用 IH 只有在广播组织内的编码数据信息的内部应用,通过各种广播公司决定其使用 时间和日期 CT 广播时间和日期码。听众并不直接使用这个信息,接收端将其转换成本地时间。在有 GPS 的汽车影音系统中,可以用广播时 信息电子技术学院 8 间和日期码以及 GPS 系统时间校正汽车影音系统时间 广播寻呼 RP 使用
25、现有广播系统作为传输系统进行广播寻呼 紧 急 报 警 系 统EWS 提供在紧急情况下使用的信息,接收端可自动调谐并且辨别该信息 交通信息道 TMC 传送交通信息的编码 定位和导航 LN 此特性给出有关发射台的位置信息,为导航和定位提供相应数据 数据解析后需要显示的信息有 PS、PI、PTY、CT,这些信息将直接显示在接收机的显示器上;数据控制信息有 AF、TA、TP,这些信息在接收机上有控制按键需要用户操作,操作后也会有相应的图标显示在接收机显示器上,目前在基于软件的处理上要完成提取出各种信息并解析显示出来。信息电子技术学院 9 第 3 章 软件介绍 系统设计主要使用的软件平台为 Micros
26、oft Visual Studio 2010,在系统功能测试时需要用到的辅助软件有 VSPM 以及软件调试助手。3.1 Microsoft Visual Studio 2010 Visual Studio 是微软公司研发的开发环境,是目前最流行的 Windows 平台的应用程序开发环境,本系统设计主要采用 C+语言编写,并利用 MFC 完成,需要自定义数据类以及调用 MFC 中的类,完成界面设计,从而完成整个系统的设计。C+计算机编程语言已经被人们广泛的使用,它支持数据抽象、面向对象程序设计等多种程序设计风格。面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃,C+完美地体现了面
27、向对象的各种特性:包括封装性、继承性以及多态性【1117】。MFC(Microsoft Foundation Classes 微软基础类),是微软公司提供的一个类库,以 C+类的形式封装了 Windows 的 API,并且包含一个应用程序框架,随微软 Visual C+开发工具发布,其中的类包含了大量 Windows 句柄封装类和很多 Windows 的内建控件和组件的封装类。该类库提供一组通用的可重用的类库以供开发人员使用。MFC 应用程序的总体结构通常由开发人员从 MFC 类派生的几个类和一个CWinApp 类对象(应用程序对象)组成,并且提供了 MFC AppWizard 自动生成框架。
28、本系统建立的工程是基于 MFC 对话框设计而成,主要需要自定义 RDS 数据类,此外还要用到 MFC 中的 CFile 类,它直接提供非缓冲的二进制磁盘输入/输出设备,并直接地通过派生类支持文本文件和内存文件。设计中主要用到 Open、Store、Seek 等方法。在做界面设计的时候可直接使用 MFC 中提供的控件,例如按钮控件、静态文本框控件以及串口通讯控件等。3.2 串口调试助手 串口调试助手是一种用来进行串口调试的工具,该软件可以自动识别串口,设置数据位、校验位和停止位,并可以 ASCII 码或十六进制的形式接收或发送数据或字符,还能将接收数据保存成文本文件,也能发送任意大小的文本文件,
29、在测试系统接收数据功能时需利用此软件为解析程序发送 RDS 数据。信息电子技术学院 1 0 3.3 VSPM 虚拟串口 VSPM 虚拟串口软件可以将 TCP/IP 连接,并映射成本机的虚拟 COM 口,应用程序通过访问虚拟串口,就可以完成远程控制、数据传输等功能。VSPM可以运行在 Client 模式、Server 模式和 UDP 广播模式,Client 模式下,VSPM软件将主动向远程设备发起连接,Server 模式下,VSPM 软件监听串口服务器发起的连接,UDP 广播模式下,VSPM 将使用 UDP 广播数据包发送数据到网络。设计中需要打开两个虚拟串口,分别设置为 Client 模式和
30、Server 模式,在利用虚拟串口发送接收数据的时候,Client 模式的虚拟 COM 口与串口调试助手相连接,Server 模式的虚拟 COM 口与解析程序相连接;在将解析后的文本信息语音化的时候,Client 模式的虚拟 COM 口与解析程序相连接,Server 模式的虚拟 COM 口与语音化程序相连接。信息电子技术学院 1 1 第 4 章 系统程序设计 整个 RDS 数据数据处理系统是完全基于软件进行设计的,使用 C+编程语言,实现面向对象的程序设计。4.1 系统概述 本系统主要针对 RDS(广播数据系统)数据结构开发出一个能对 RDS 数据进行处理的系统软件,根据 RDS 各个数据位解
31、析出希望得到的信息,本系统由 RDS 数据接收、RDS 数据解析、RDS 数据音频转化、RDS 数据存储等功能模块组成,通过串口接收 RDS 数据,然后对接收到的 RDS 数据进行存储并解析,并利用 MFC编程设计出界面对解析后得到的信息进行显示,对必要的文本信息进行音频转化并播放出来,这样不仅可以满足人们的可视化需求,而且能够方便的播放出有用的文本信息,使用户获得丰富的视觉和听觉体验。系统框图如图 4.1 图 4.1 RDS 数据处理系统 开始 结束 打开串口,接收RDS数据 将RDS数据存储到缓冲区,并调整各信息位 MFC编程界面显示信息 控制信息 提出文本段信息 串口发送到文本转语音程序
32、 播放语音 解析RDS数据 信息电子技术学院 1 2 4.2 RDS 数据类定义 C+语言的精髓即面向对象程序设计,因而系统设计中首先要将处理的数据封装为一个个类,类中包括变量和函数两部分。4.2.1 定义基类 1.定义变量 首先要为 RDS 数据类设计一个基类,即CRDSBase,类中声明包括 9 个成员变量以及三个函数。9 个成员变量为:A_Block、check_codeA、B_Block、check_codeB、C_Block、check_codeC、D_Block、check_codeD 以及 k,前八个变量属于 unsigned 类型,分别代表四块数据的信息位和校验位,k 属于整型
33、变量,用于表示 RDS 数据具体的组型。由于每组数据的都符合这个基本结构,所以要定义这个基类,考虑到代码优化问题,再定义其余 32 种具体的数组类时可从基类派生得到,这样可以提高效率,节省代码空间。2.定义函数 基类的函数包括:1).构造函数:CRDSBase(void);采用默认;2).析构函数:CRDSBase(void);采用默认;3).调整信息位函数:void adjust_Base(unsigned char*buffer);需自定义,内存缓冲区是以字节为单位来存储接收到的 unsigned 型的数据的,通过左移、右移的基本操作调整信息位,这样就可明确各信息位在缓冲区的位置,方便提取
34、操作;4).判断数组类型函数:int DecideVersion(unsigned char*buffer);,需自定义,(buffer32)&0 x0f 对应的即为组型码,4 位,范围是 0-15,提取出来进行判断进入分支语句,每个分支于句再利用(buffer31)&0 x01 判断版本类型,函数返回 k。类定义语句存储到 RDSBase.h 中,函数定义语句存储到 RDSBase.cpp 中。4.2.2 定义各组数据类 1 定义变量 RDS 数据一共有 32 种组型,每种组型的数据内容都差别,因而要为每种组型的 RDS 数据定义类,包括 RDS_0A、RDS_0B、RDS_1A、RDS_1
35、B、RDS_15A、RDS_15B 共 32 种,但目前在 RDS 数据规范中有明确定义的数据并不足 32 种。各数据类中的变量包括 CString 类型、unsigned char 等类型,依据需要存储的信息不 信息电子技术学院 1 3 同而定,CString 用于存储解析后的字符串信息,unsigned char 用于存储双字节字符。具体内容根据 RDS 数据规范定义。2 定义函数 1).构造函数:CRDSBase(void);采用默认;2).析构函数:CRDSBase(void);采用默认;3).调整信息位函数:例如:void adjust_RDS_0A(unsigned char*bu
36、ffer);,需自定义,无返回值,针对具体数据组型调整方式不同,这里调整信息位属于二次调整,各位的信息进一步具体明确,便于对不同信息进行提取、判断或解析;4).解析函数:例如:void CRDS_0A:translate_0A(unsigned char*buffer),需自定义,针对不同组型其解析函数不同,参数为从缓冲区中读取的二进制数据,无返回值,解析后的文字信息分别存储在各自类的字符串变量里,简单的解析函数采用 switch-case 语句或 if-else 语句结构即可,其余解析方法在后面解析模块中进行具体说明。类定义语句存储到各自的头文件中,函数定义语句存储到各自的源文件中。4.3
37、模块设计 对 RDS 数据的处理包括接收、解析、显示、存储以及语音化,下面就按这五个功能对各个模块的设计进行说明。4.3.1 接收模块 接收模块用以完成 RDS 数据的接收,包括通过已经存储好 RDS 数据文件的接收以及通过串口调试助手和虚拟串口的接收。1.从文件中接收数据主要通过软件设计,使用文件读取语句以及改变指针等操作完成,此时需要设置变量记录点击接收按钮的次数,由于一帧 RDS 数据占用13 个字节,因此每点击一次读取数据的按钮,从文件中读取的数据指针就应向后移动 13 个字节,这样每次读取的数据才不同。2.通过串口接收数据时需要用到 MFC 中最常用的串口通讯方法即使用MSComm
38、控件,该控件提供了一系列标准通信命令的接口,它允许建立串口连接,还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工、事件驱动的、高效实用的通信程序。使用该控件可以检测缓冲区中是否有数据,有数据的情况下然后触发 OnComm 消息,然后对数据进行处理。接收 RDS 数据后将其显示在界面上并存储到文档 data.txt 中。接收模块流程 信息电子技术学院 1 4 图如图 4.2 所示:图 4.2 接收模块 读缓存消息 变量转换 将数据存入BYTE型数组 将数组中数据写入data.txt文档中 Y Y 缓冲区中数据 多 于 一 个 字N N 接收R
39、DS数据到缓冲区 串口打开?设置串口号及其工作状态 引发接收数据的OnComm事件 转化成CString型变量同时显示在编辑框中 信息电子技术学院 1 5 4.3.2 解析模块 接收到的 RDS 数据为二进制形式的数据流,要解析这些数据应每次从文件中读取一帧数据到缓冲区中或从串口接收一帧数据存储到缓冲区,然后调整各信息位,提取组型码判断数组类型,依据不同组型再将数据读到定义的具体32 类数组中的一类,再次调整信息位,然后调用该类的解析方法进行解析,解析方法以及解析得到文字内容需要根据 RDS 数据规范来定义,解析模块流程图如图 4.3 所示:图 4.3 解析模块 解析,调用Translate_
40、0A(unsigned char*buffer)解析,调用Translate_15B(unsigned char*buffer)调整各信息位,调用adjust_0A(unsigned char*buffer)调整各信息位,调用adjust_0A(unsigned char*buffer)提取组型码判断组型,调用DecideVersion()0A组 15B0B 组 15A建立一个char型数组 从文件data.txt中读 取一帧数据到缓冲区 调整各信息位,调用adjust_Base(unsigned char*buffer)信息电子技术学院 1 6 由于每组数据内容都有差别,相应的解析方法也就有
41、一定差别,下面举出几组常用的数据,针对其解析方法进行说明:0 组:基本调谐和开关信息。0A 组和 0B 组帧结构如图 4.4 所示。PI 码包含国家识别码、区域识别码和节目基准号,TA、PTY、M/S 这些信息通过查找广播数据系统技术规范,使用 switch-case 语句或 if 语句即可解析;DI 码共 4 位,每个 0A 组只发送一位,由 C1、C0确定确定这些位在 DI 码中的位置,且高位d3先发;AF 可通过查表得到;显示 PS 用的四个双字节字符按照规范中附录 B规定的字符代码来发送,两个字节确定一个字符,这些字符在显示业务名中的位置亦由 C1、C0确定,显示时字符的位置从左到右递
42、增,解析时设置一个包含三个数据的 unsigned char 型数组 ps2,前两个数据分别存储两个字节的 PS信息,最后的数据存储 0。0B 组 C 块数据与 A 块相同,不用解析,也没有 AF信息,其余部分与 0A 组相同。图 4.4 0A 组和 0B 组 1A 组:节目栏目号和慢标志码。帧结构如图4.5所示。B 块的最后5位:B4B2:发射机网络组标号,把发射机网络指定成被寻呼者组码中的一个组码,不属于指定组码的寻呼不应被锁定于该发射网络,组标号的约定由表4.1所示;使用发 信息电子技术学院 1 7 射机网络组标号能同时使用14个网络来发送寻呼信息,这样可以在白天高峰期使用几个网络,在晚
43、间只使用一个网络;B1B0:节点期间的同步和识别;慢标志码:B15为联网启动码 LA,B14B12 为用途码,决定后12位信息代表的具体含义,这12位信息分别解析;PIN 码代表广播电台公布的节目开始日期和时间,包括日(031)、时(023)、分(059),解析时使用.Format(“%d”,day)直接将 unsigned 类型的数据传递进去即可得到十进制的显示。表4.2 发射网络组码 B4 B3 B2 组码 组码的数目 0 0 0 信道上无寻呼信息 0 0 1 0099 100 0 1 0 0039 40 0 1 1 4099 60 1 0 0 4069 30 1 0 1 7099 30
44、1 1 0 0019 20 1 1 1 2039 20 信息电子技术学院 1 8 图4.5 1A 组 2组:广播文本,数据结构如图4.6。B 块最后四位的地址码用于定位 C 块或 D块中的消息文本,共16种地址,一个 RT 段包含4个单字节字符或2个双字节字符,所以2A 组可以传送64个单字节字符或32个双字节字符的文本消息,而2B组包含2个单字节字符或一个双字节字符,所以可以传送32个单字节字符或16个双字节字符的文本消息,解析时用 Unsigned char 型数组来存储两块数据,每个数据8位,共32位,即一帧2A 数据对应两个双字节字符的 RT 信息,这是计算机识别出来的即为对应的字符,
45、接收一帧2组数据后则应检测下一帧是否为同组型数据,若相同,则解析后依据地址码组合文本信息;A/B 文本标志:对于某段,若标志位变化,则清除所有文本显示,将新接收的文本信息显示到对应的未显示的空闲位,表示未接收到更新消息的段或者字符,若未检测到变化,则将新接收的文本信息显示在现有的显示位置,那些未接收更新消息的段或字符保持不变。信息电子技术学院 1 9 图4.6 2A 和2B 组 4A 组:如图4.7,用于传送日期和时间,这里是约简儒略日(MJD)的形式,即指公元前4713年1月1日,协调世界时(UTC)中午12时开始所经历的天数,是一种不用年月的长期记日法,解析时需要将其转换为公历日期,转换公
46、式如下:25.365/)2.15078int(MJDY (4-1)6001.30)25.365int(1.14956intYMJDM (4-2)6001.30int(14956mMJDD (4-3)01514,1orMK (4-4)KYY (4-5)121KMM (4-6)17mod)2(MJDWD (4-7)D日;M月;Y年;WD星期。信息电子技术学院 2 0 图4.7 4A 组 4.3.3 显示模块 将 RDS 数据解析成文字信息后需要将其在所设计的 MFC 界面中显示出来,此部分包含利用 MFC 建立对话框进行界面设计,需要熟练使用基本控件,另外可以下载皮肤工具包进行界面美化。显示过程相
47、对简单,将解析后的字符串信息变量关联到编辑框变量上,然后更新数据即可得到显示。1.显示模块流程图如图 4.8 所示:信息电子技术学院 2 1 图 4.8 显示模块流程图 2.界面设计 绘制 MFC 界面相对简单,对于静态编辑框、控制编辑框和按钮等简单控件只需将其从工具栏中拖拽到界面即可,另外还要用到用于串口通信的控件 MSComm,需通过“右键插入 ActiveX 控件Microsoft Communication Control,version 6.0”完成。完成的界面绘制效果如图4.9所示:3.编辑控件 首先编辑 20 个静态编辑框内容,分别为属于本网络的“数据”、“国家”、“地区”、“交
48、通公告”、“节目类型”、“节目基准号”、“载波频率”、”组码”、“节目业务名称”、“语言/音乐”“播出方式”、“日期 时间”、“文本消息”、“儒略日”、“广播寻呼”、“透明数据信道”信息以及属于其他网络的“国家”、“地区”、“节目基准号”、“交通公告”信息,用以标示其后控制编辑框内容所属。其次要为相应的 20 个控制编辑框分别添加变量,通过将 RDS 数据解析后的字符串赋给相应的编辑框变量来传递要显示在编辑框中的消息内容,变量类型均为CString,即 RDS 数据解析后的文字内容。解析各组数据 得到对应组块中不同信息,返回值为CString型变量 为显示不同信息的编辑框添加变量,类型为CSt
49、ring 将函数返回值赋给编辑框变量 调用UpdateData(FALSE)更新编辑框中显示的信息 信息电子技术学院 2 2 图4.9 绘制的 MFC 界面 最后要为 MSComm 控件以及七个按钮添加相应的消息响应函数,每个按钮的消息响应均为 ON_BN_CLICKED,函数即为对应功能模块的设计。MSComm控 件:消 息 响 应 函 数 为OnCommMscomm1(),利 用m_mscomm.get_Input()语句读取缓冲区消息,存储在 VARIENT 类型的数组中,然后再存储到 COleSafeArray 类中,COleSafeArray 类适用于处理任意类型或维数的类,然后利用
50、 for 循环将类中的数据存储到 BYTE 型数组中,进而保存到文档 data.txt 中,另外将数组转换成 CString 型变量显示在编辑框中。“打开串口”和“关闭串口”按钮:实现工程和外界接口的打开和关闭,在接收RDS二进制数据的时候以及将解析后的文本信息发送到语音化程序的时候均需要打开串口,对应的函数为OnBnClickedOpenport(),在函数中需设置串口参数,通过定义MSComm类对象m_mscomm,并调用已封装好的函数完成,再通过“m_mscomm.put_RThreshold(1);”语句判断缓冲区的字符数是否大于1,当大于1 信息电子技术学院 2 3 的时候将触发On