rds数据处理系统设计毕业论文(编辑修改稿)内容摘要:

P,这些信息在接收机上有控制按键需要用户操作,操作后也会有相应的图标显示在接收机显示器上,目前在基于软件的处理上要完成提取出各种信息并解析显示出来。 学士学位论文 信息电子技术学院 9 第 3章 软件介绍 系统设计主要使用的软件平台为 Microsoft Visual Studio 20xx,在系统功能测试时需要用到的辅助软件有 VSPM 以及软件调试助手。 Microsoft Visual Studio 20xx Visual Studio 是微软公司研发的开发环境,是目前最流行的 Windows 平台的应用程序 开发环境,本系统设计主要采用 C++语言编写,并利用 MFC 完成,需要自定义数据类以及调用 MFC 中的类,完成界面设计,从而完成整个系统的设计。 C++计算机编程语言 已经被人们广泛的使用,它支持数据抽象、 面向对象 程序设计 等多种程序设计风格。 面向对象的设计思想是在原来结构化 程序设计 方法基础上的一个质的飞跃, C++完美地体现了面向对象的各种特性:包括封装性、继承性以及多态性 【 11—17】。 MFC(Microsoft Foundation Classes 微软基础类),是微软公司提供的一个类库,以 C++类的形式封装了 Windows的 API,并且包含一个应用程序框架,随微软 Visual C++开发工具发布,其中的类包含了大量 Windows 句柄封装类和很多 Windows 的内建控件和组件的封装类。 该类库提供一组通用的可重用的类库以供开 发人员使用。 MFC 应用程序的总体结构通常由开发人员从 MFC 类派生的几个类和一个CWinApp 类对象 (应用程序对象 )组成,并且提供了 MFC AppWizard 自动生成框架。 本系统建立的工程是基于 MFC 对话框设计而成,主要需要自定义 RDS 数据类,此外还要用到 MFC 中的 CFile 类,它直接提供非缓冲的二进制磁盘输入 /输出设备,并直接地通过派生类支持文本文件和内存文件。 设计中主要用到 Open、 Store、Seek 等方法。 在做界面设计的时候可直接使用 MFC 中提供的控件,例如按钮控件、静态文本框控件以及串口通讯控件 等。 串口调试助手 串口调试助手是一种用来进行串口调试的工具,该软件可以自动识别串口,设置数据位、校验位和停止位,并可以 ASCII 码或十六进制的形式接收或发送数据或字符,还能将接收数据保存成文本文件,也能发送任意大小的文本文件,在测试系统接收数据功能时需利用此软件为解析程序发送 RDS 数据。 学士学位论文 信息电子技术学院 10 VSPM 虚拟串口 VSPM 虚拟串口软件可以将 TCP/IP 连接,并映射成本机的虚拟 COM 口,应用程序通过访问虚拟串口,就可以完成远程控制、数据传输等功能。 VSPM可以运行在 Client 模式、 Server 模式和 UDP 广播模式, Client 模式下, VSPM软件将主动向远程设备发起连接, Server 模式下, VSPM 软件监听串口服务器发起的连接, UDP 广播模式下, VSPM 将使用 UDP 广播数据包发送数据到网络。 设计中需要打开两个虚拟串口,分别设置为 C lient 模式和 Server 模式,在利用虚拟串口发送接收数据的时候, C lient 模式的虚拟 COM 口与串口调试助手相连接, Server 模式的虚拟 COM 口与解析程序相连接;在将解析后的文本信息语音化的时候, C lient 模式的虚拟 COM 口与解析程序相连接, Server 模式的虚 拟 COM 口与语音化程序相连接。 学士学位论文 信息电子技术学院 11 第 4章 系统程序设计 整个 RDS 数据数据处理系统是完全基于软件进行设计的,使用 C++编程语言,实现面向对象的程序设计。 系统概述 本系统主要针对 RDS(广播数据系统)数据结构开发出一个能对 RDS 数据进行处理的系统软件,根据 RDS 各个数据位解析出希望得到的信息,本系统由 RDS 数据接收、 RDS 数据解析、 RDS 数据音频转化、 RDS 数据存储等功能模块组成,通过串口接收 RDS 数据,然后对接收到的 RDS 数据进行存储并解析,并利用 MFC编 程设计出界面对解析后得到的信息进行显示,对必要的文本信息进行音频转化并播放出来,这样不仅可以满足人们的可视化需求,而且能够方便的播放出有用的文本信息,使用户获得丰富的视觉和听觉体验。 系统框图如图 图 RDS 数据处理系统 开始 结束 打开串口,接收 RDS 数据 将 RDS数据存储到缓冲区,并调整各信息位 MFC编程界面显示信息 控制信息 提出文本段信息 串口发送到文本转语音程序 播放语音 解析 RDS数据 学士学位论文 信息电子技术学院 12 RDS数据类定义 C++语言的精髓即面向对象程序设计,因而系统设计中首先要将处理的数据封装为一个个类,类中包括变量和函数两部分。 定义基类 首先要为 RDS 数据类设计一个基类,即 ——CRDSBase,类中声明包括 9 个成员变量以及三个函数。 9 个成员变量为: A_Block 、 check_codeA、 B_Block 、check_codeB、 C_Block 、 check_codeC、 D_Block 、 check_codeD 以及 k,前八个变量属于 unsigned 类型 ,分别代表四块数据的信息位和校验位, k 属于整型变量,用于表示 RDS 数据具体的组型。 由于每组数据的都符合这个基本结构,所以要定义这个基类,考虑到代码优化问题,再定义其余 32 种具体的数组类时可从基类派生得到,这样可以提高效率,节省代码空间。 基类的函数包括: 1).构造函数: CRDSBase(void)。 采用默认; 2).析构函数: ~ CRDSBase(void)。 采用默认; 3).调整信息位函数: void adjust_Base(unsigned char *buffer)。 需自定义,内存缓冲区是以字节为单位来存储接收到的 unsigned 型的数据的,通过左移、右移的基本操作调整信息位,这样就可明确各信息位在缓冲区的位置,方便提取操作; 4).判断数组类型函数: int DecideVersion(unsigned char *buffer)。 ,需自定义,( buffer[3]2)amp。 0x0f 对应的即为组型码, 4 位,范围是 015, 提取出来进行判断进入分支语句,每个分支于句再利用 ( buffer[3]1)amp。 0x01 判断版本类型,函数返回 k。 类定义语句存储到 中,函数定义语句存储到 中。 定义各组数据类 1 定义变量 RDS 数据一共有 32 种组型,每种组型的数据内容都差别,因而要为每种组型的 RDS 数据定义类,包括 RDS_0A、 RDS_0B、 RDS_1A、 RDS_1B、 ……RDS_15 A、RDS_15B 共 32 种,但目前在 RDS 数据规范中有明确定义的数据并不足 32 种。 各学士学位论文 信息电子技术学院 13 数据类中的变量包括 CString 类型、 unsigned char 等类型,依据需要存储的信息不同而定, CString 用于存储解析后的字符串信息, unsigned char 用于存储双字节字符。 具体内容根据 RDS 数据规范定义。 2 定义函数 1).构造函数: CRDSBase(void)。 采用默认; 2).析构函数: ~ CRDSBase(void)。 采用默认; 3).调整信息位函数:例如: void adjust_RDS_0A(unsigned char *buffer)。 ,需自定义,无返回值,针对具体数据组型调整方式不同,这里调整信息位属于二次调整,各位的信息进一步具体明确,便于对不同信息进行提取、判断或解析; 4).解析函数:例如: void CRDS_0A::translate_0A(unsigned char *buffer),需自定义, 针对不同组型其解析函数不同,参数为从缓冲区中读取的二进制数据,无返回值,解析后的文字信息分别存储在各自类的字符串变量里,简单的解析函数采用 switchcase 语句或 ifelse 语句结构即 可,其余解析方法在后面解析模块中进行具体说明。 类定义语句存储到各自的头文件中,函数定义语句存储到各自的源文件中。 模块设计 对 RDS 数据的处理包括接收、解析、显示、存储以及语音化,下面就按这五个功能对各个模块的设计进行说明。 接收模块 接收模块用以完成 RDS 数据的接收,包括通过已经存储好 RDS 数据文件的接收以及通过串口调试助手和虚拟串口的接收。 1. 从文件中接收数据主要通过软件设计,使用文件读取语句以及改变指针等操作完成,此时需要设置变量记录点击接收按钮的次数,由于一帧 RDS 数据占用13 个字节,因此每点击一次读取数据的按钮,从文件中读取的数据指针就应向后移动 13 个字节,这样每次读取的数据才不同。 2. 通过串口接收数据时需要用到 MFC 中最常用的串口通讯方法即使用MSComm 控件,该控件提供了一系列标准通信命令的接口,它允许建立串口连接,还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工 、事件驱动的、高效实用的通信程序。 使用该控件可以检测缓冲区中是否有数据,有数据的情况下然后触发 OnComm 消息,然后对数据进行处理。 学士学位论文 信息电子技术学院 14 接收 RDS 数据后 将其显示在界面上并存储到文档 中。 接收模块流程图如图 所示: 图 接收模块 读缓存消息 变量转换 将数据存入 BYTE型数组 将数组中数据写入 文档中 Y Y 缓冲区中数据 多于一个字符。 N N 接收 RDS数据到缓冲区 串口打开。 设置串口号及其工作状态 引发接收数据的OnComm事件 转化成 CString 型变量同时显示在编辑框中 学士学位论文 信息电子技术学院 15 解析模块 接收到的 RDS 数据为二进制形式的数据流,要解析这些数据应每次从文件中读取一帧数据到缓冲区中或从串口接收一帧数据存储到缓冲区,然后调整各信息位,提取组型码判断数组类型,依据不同组型再将数据读到定义的具体32 类数组中的一类,再次调整信息位,然后调用该类的解析方法进行解析,解析方法以及解析得到文字内容需要根据 RDS 数据规范来定 义,解析模块流程图如图 所示: 解析,调用 Translate_0A(unsigned char *buffer) 解析,调用 Translate_15B(unsigned char *buffer) 调整各信息位,调用 adjust_0A(unsigned char *buffer) 调整各信息位,调用 adjust_0A(unsigned char *buffer) …… …… 提取组型码判断组型,调用 DecideVersion() 0A组 15 B组 0B组 15A组 建立一个 char型数组 从文件 取一帧数据到缓冲区 调整各信息位,调用 adjust_Base(unsigned char *buffer) …… …… …… …… 学士学位论文 信息电子技术学院 16 图 解析模块 由于每组数据内容都有差别,相应的解析方法也就有一定差别,下面举出几组常用的数据,针对其解析方法进行说明:  0 组:基本调谐和开关信息。 0A 组和 0B 组帧结构如图 所示。 PI码包含国家识别码、区域识别码和节目基准号, TA、 PTY、 M/S 这些信息通过查找广播数据系统技术规范,使用 switchcase 语句或 if 语句即可解析; DI 码共 4 位,每个 0A 组只发送一位,由 C C0 确定确定这些位在 DI 码中的位置,且高位d3 先发; AF 可通过查表得到;显示 PS 用的四个双字节字符按照规范中附录 B规定的字符代码来发送,两个字节确定一个字符,这些字符在显示业务名中的位置亦由 C C0 确定,显示时字符的位置从左到右递增,解析时设置一个包含三个数据的 unsigned char 型数组 ps[2],前两个数据分别存储两个字节的 PS信息,最后的数据存储 0。 0B 组 C 块数据与 A 块相同,不用解析,也没有 AF信息,其余部分与 0A 组相同。 图 0A 组和 0B 组  1A 组:节目栏目号和慢标志码。 帧结构如图。 B 块的最后。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。