应答器系统.docx

上传人:b****8 文档编号:29466136 上传时间:2023-07-23 格式:DOCX 页数:41 大小:242.21KB
下载 相关 举报
应答器系统.docx_第1页
第1页 / 共41页
应答器系统.docx_第2页
第2页 / 共41页
应答器系统.docx_第3页
第3页 / 共41页
应答器系统.docx_第4页
第4页 / 共41页
应答器系统.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

应答器系统.docx

《应答器系统.docx》由会员分享,可在线阅读,更多相关《应答器系统.docx(41页珍藏版)》请在冰豆网上搜索。

应答器系统.docx

应答器系统

1简介

1.1.文档目的

本文根据《软件结构设计规范》制定TDY型应答器传输模块(TDY-BTM)的软件模块详细设计,包括模块功能介绍,全局变量定义及介绍和函数详细设计等。

从系统功能和与其他设备交互的角度出发,针对软件框架结构设计编写详模块计规范,作为软件测试执行的依据。

1.2.范围

本文档覆盖如下模块的详细设计:

文件名

分类

模块功能说明

main.c

通信模块

总调度框架

TGMQ_A.c

安全模块

A路报文缓冲区

TGMQ_B.c

安全模块

B路报文缓冲区

tickApp.c

通信调度

系统时标管理

LocalClock.c

通信模块

本地时钟维护

RcvQA.c

通信模块

CAN1接收队列

RcvQB.c

通信模块

CAN2接收队列

CombQ.c

安全模块

A\B两路报文合并之后存放报文的队列

config.c

 

配置文件

A_CODE.c

安全模块

双代码比较之A代码

B_CODE.c

安全模块

双代码比较之B代码

v2crc.c

安全模块

B接口协议中CRC32C的

CRC16.c

安全模块

CRC16

General.c

通用

字节合并等通用

Libc.c

通用

数组拷贝操作等

ADC_App.c

驱动模块

数模转换驱动及应用

CANMultint2.c

驱动模块

CAN总线驱动

IATC_App.c

通信模块

主通信处理单元

Fpga.c

驱动模块

FPGA驱动

RS232App.c

通信模块

前面板串口Log功能

UARTQ.c

通信调度

串口Log发送缓存

MAX6625.c

驱动模块

温度传感器驱动

1.3.术语和缩写词

本文档所使用的缩略词与术语参见BTS_SA_01_008《缩略词与术语汇总》。

1.4.参考文档

序号

标识

文档名

版本

遵从等级

R1

50126:

1999

铁路应用-可靠性、可用性、可维修性和安全性规范及示例

1999版

遵从

R2

EN50128:

2001

铁路应用-通信、信号和处理系统—信号的安全相关电子处理系统

2001版

遵从

R3

EN50128:

2003

铁路应用-通信、信号、处理系统-信号用安全相关电子系统

2003版

遵从

R4

SASHBK/SS/P0

设计院安全保障体系文件-安全策略

V1.0

遵从

R5

BTS_SA_03_001

系统需求规范

V0.1

遵从

R6

应答器技术条件(暂行)

科技运函[2004]114

参考

R7

UNISIGSubset036

ERTMS/ETCS-Class1FFFISforEurobalise

Issue2.4.1

参考

R8

BTS_SA_01_001

系统定义

V0.2.0

参考

R9

BTS_SA_01_003

配置管理计划

V0.1.0

参考

R10

BTS_SA_01_006

质量管理计划

V0.1.0

参考

R11

BTS_SA_01_004

验证与确认计划

V0.1.0

参考

R12

BTS_SA_01_008

缩略词与术语汇总

V0.1.0

参考

R13

BTS_SA_01_007

软件质量保障计划

V0.1.0

参考

R14

BTS_SA_03_001

系统需求规范

V0.1.0

参考

R15

BTS_SA_04_001

系统结构设计规范

V0.1.0

参考

R16

BTS_SA_03_001

系统需求规范

V0.1.0

参考

R17

BTS_SA_01_008

缩略词与术语汇总

V0.1.0

参考

R18

BTS_SA_04_011

软件需求规范

V0.1.0

参考

R19

BTS_SA_04_016

软件架构设计规范

V0.1.0

参考

R20

BTS_SA_04_065

BTMCPU软件概要设计

V0.1.0

参考

2软件描述与结构

2.1.软件设计原则

本软件为嵌入式软件,采用分层次、分模块的设计思想,不使用操作系统,程序循环处理数据。

设计语言为C语言(嵌入少量汇编代码),编码符合《信号安全系统C语言编写规范》。

2.2.软件描述

(1)软件采用层次化设计,将硬件底层程序和上层应用程序分开。

硬件底层程序指的是对CPU各个寄存器、硬件资源、中断向量等的操作;应用程序指与需求相关的软件部分。

采用层次化设计的目的是,使各层相对独立、耦合性低,便于模块化设计,便于多人协同开发,便于在不同硬件平台上移植。

(2)软件采用模块化设计,将不同功能的代码分为不同模块,分别管理,利于维护,利于团队协作开发,利于代码的移植和替换。

模块化的实体,即代码文件。

每个模块为一个.c文件和.h文件的组合,且两个文件的文件名相同,仅后缀不同。

每个模块中的代码只与本模块的功能有关,.h文件的内容为结构体、联合体定义,变量声明,函数声明;.c文件的内容为函数实现原型,变量定义,头文件包含。

本与其他模块的接口形式为函数或全局变量,均在.h文件中进行声明。

模块内部的变量、函数不允许在.h文件中被声明,以免被其他模块误调用。

main模块是比较特殊的模块,此模块没有.h文件,仅有.c文件。

其中的main函数,为整个软件的入口,并作为整个软件的时序调度。

由于不采用操作系统,因此软件调度设计为前后台形式,即在main函数里用一个限循环周期性的进行各个任务调度。

各个任务有各自的触发条件,若条件满足,则被调用;若不满足,则挂起不执行。

通过调用CheckTGMQA及FailSafeFunc_A进行安全防护。

2.3.函数WriteTGMQA()

2.3.1.描述

报文队列A的写入函数。

向报文队列A写入预存储的数据。

2.3.2.数据结构

2.3.2.1.输人项

(1)全局变量

TGMQABufApp;/*报文队列A*/

(2)输入参数

UINT8*constBuf;/*存储着预写入数据的缓存区的首地址*/

UINT16length;/*预写入长度*/

2.3.2.2.输出项

(1)返回值

UINT16len;/*实际写入长度*/

2.3.3.流程

图10报文队列A的写入流程

2.3.4.接口设计

2.3.4.1.调用本函数的函数

函数声明

函数说明

所在文件

staticinterruptvoidxint1_isr(void)

外部中断1的处理函数

fpga.c

staticinterruptvoidxint6_isr(void)

外部中断6的处理函数

fpga.c

2.3.4.2.被本函数调用的函数

函数声明

函数说明

所在文件

ENTER_CRITICAL()

关中断操作函数

EXIT_CRITICAL()

开中断操作函数

voidCheckTGMQA(void)

报文队列A的合法性检查函数

TGMQ_A.c

voidFailSafeFunc_A(char*file,intline)

故障异常处理函数

A_CODE.c

2.3.5.异常处理

若队列为满或输入参数buf为NULL,或输入参数length为0,则返回读取长度为0.

2.3.6.安全防护处理

通过调用CheckTGMQA及FailSafeFunc_A进行安全防护。

2.4.函数CheckTGMQAEmpty()

2.4.1.描述

检查报文队列A是否为空的函数。

2.4.2.数据结构

2.4.2.1.输人项

(1)全局变量

TGMQABufApp;/*报文队列A*/

2.4.2.2.输出项

(1)返回值

UINT16ret;/*返回1:

队列为空;返回0:

队列不空*/

2.4.3.流程

图11报文队列A判空流程图

2.4.4.接口设计

2.4.4.1.调用本函数的函数

函数声明

函数说明

所在文件

UINT8CombTGMAandB(void)

对两路报文进行合并,并写入到发送报文发送队列(CAN)中的函数

IATC_App.c

2.4.4.2.被本函数调用的函数

函数声明

函数说明

所在文件

ENTER_CRITICAL()

关中断操作函数

EXIT_CRITICAL()

开中断操作函数

voidCheckTGMQA(void)

报文队列A的合法性检查函数

TGMQ_A.c

2.4.5.安全防护处理

通过调用CheckTGMQA进行安全防护。

2.5.函数DelTGMQAFirst()

2.5.1.描述

删除报文队列A的队首元素的函数。

2.5.2.数据结构

2.5.2.1.输人项

(1)全局变量

TGMQABufApp;/*报文队列A*/

2.5.2.2.输出项

(1)返回值

UINT16ret;/*返回值1:

成功删除;返回值0:

队列已为空,需删除*/

2.5.3.流程

图12删除报文队列A队首流程图

2.5.4.接口设计

2.5.4.1.调用本函数的函数

函数声明

函数说明

所在文件

staticinterruptvoidxint1_isr(void)

外部中断1的处理函数

fpga.c

staticinterruptvoidxint6_isr(void)

外部中断6的处理函数

fpga.c

2.5.4.2.被本函数调用的函数

函数声明

函数说明

所在文件

ENTER_CRITICAL()

关中断操作函数

EXIT_CRITICAL()

开中断操作函数

voidCheckTGMQA(void)

报文队列A的合法性检查函数

TGMQ_A.c

2.5.5.异常处理

若队列已经为空,返回0。

2.5.6.安全防护处理

通过调用CheckTGMQA进行安全防护。

3TGMQ_B模块详细设计

该模块为报文队列B的操作模块。

报文队列B作为循环队列,存储从FPGA1接收到的报文。

对报文队列B的操作包括:

检查报文队列B的合法性、清空报文队列B、读取报文队列B、向报文队列B写入内容、从报文队列B预取数据、检查队列空、删除队首数据。

3.1.全局变量

3.2.宏、数据结构及全局变量

3.2.1.宏定义

#defineTGMQB_BUF_SIZE150U/*报文队列B缓存区最大长度*/

#defineTGMQB_MAX_NUM8U/*报文队列B容量*/

3.2.2.数据结构

typedefstructtag_TGMQBCycBuf

{

UINT8Buf[TGMQB_MAX_NUM][TGMQB_BUF_SIZE];/*定义存储空间为MAX_NUM*BUF_SIZE字节*/

UINT16OccupySize[TGMQB_MAX_NUM];/*记录存储的每一个报文的长度*/

UINT16mQueueLength;/*存储报文的个数*/

UINT16mReadPoint;/*队列尾*/

UINT16mWritePoint;/*队列头*/

}TGMQBCycBuf,*pTGMQBCycBuf;

3.2.3.全局变量

TGMQBCycBufTGMQBBufApp;/*该全局变量作为循环队列,存储从FPGA1接收到的报文。

*/

3.3.函数CheckTGMQB()

3.3.1.描述

报文队列B的合法性检查函数。

对队列长度合法性、写入点合法性、读出点合法性、队列首尾逻辑关系与数据长度的逻辑合法性进行判断,以确保报文队列B的逻辑合法性。

3.3.2.数据结构

3.3.2.1.输人项

(1)全局变量

TGMQBBufApp;/*报文队列B*/

3.3.2.2.输出项

3.3.3.

3.3.4.流程

图13报文队列B合法性检查流程

3.3.5.接口设计

3.3.5.1.调用本函数的函数

函数声明

函数说明

所在文件

UINT16ReadTGMQB(UINT8*constBuf,UINT16length)

报文队列B的读取函数

TGMQ_B.c

UINT16PrefetchTGMQB(UINT8*constBuf,UINT16length)

报文队列B的预读取函数

TGMQ_B.c

UINT16WriteTGMQB(UINT8*constBuf,UINT16length)

报文队列B的写入函数

TGMQ_B.c

UINT16CheckTGMQBEmpty(void)

检查报文队列B是否为空

TGMQ_B.c

UINT16DelTGMQBFirst(void)

删除报文队列B队首

TGMQ_B.c

3.3.5.2.被本函数调用的函数

函数声明

函数说明

所在文件

ENTER_CRITICAL()

关中断操作函数

EXIT_CRITICAL()

开中断操作函数

voidFailSafeFunc_B(char*file,intline)

异常处理函数

B_CODE.c

3.3.6.异常处理

见安全防护处理。

3.3.7.安全防护处理

若报文队列B检查非法,系统导向安全侧。

3.4.函数EmptyTGMQB()

3.4.1.描述

报文队列B的清空函数。

3.4.2.数据结构

3.4.2.1.输人项

(1)全局变量

TGMQBBufApp;/*报文队列B*/

3.4.2.2.输出项

3.4.3.

3.4.4.流程

将报文队列B重置,初始化写入点与读取点为TGMQB_MAX_NUM-1U。

3.4.5.接口设计

3.4.5.1.调用本函数的函数

函数声明

函数说明

所在文件

voidCLEAR_BTM_STATUSB(void)

清空BTM的B侧状态的函数

LKJC0App.c

3.4.5.2.被本函数调用的函数

函数声明

函数说明

所在文件

ENTER_CRITICAL()

关中断操作函数

EXIT_CRITICAL()

开中断操作函数

3.4.6.异常处理

3.4.7.安全防护处理

3.5.函数ReadTGMQB()

3.5.1.描述

报文队列B的读取函数。

从报文队列B的当前读取点读取其存储的数据。

3.5.2.数据结构

3.5.2.1.输人项

(1)全局变量

TGMQBBufApp;/*报文队列B*/

(2)输入参数

UINT8*constBuf;/*读出数据的存储缓存区首地址*/

UINT16length;/*读取长度*/

3.5.2.2.输出项

(1)输出参数

UINT8*constBuf;/*该缓存区内存储了读出的数据*/

(2)返回值

UINT16len;/*返回实际读取的数据长度*/

3.5.3.

3.5.4.流程

图14报文队列B的读取流程图

3.5.5.接口设计

3.5.5.1.调用本函数的函数

函数声明

函数说明

所在文件

UINT8CombTGMAandB(void)

对两路报文进行合并,并写入到发送报文发送队列(CAN)中的函数

IATC_App.c

3.5.5.2.被本函数调用的函数

函数声明

函数说明

所在文件

ENTER_CRITICAL()

关中断操作函数

EXIT_CRITICAL()

开中断操作函数

voidCheckTGMQB(void)

报文队列B的合法性检查函数

TGMQ_B.c

voidFailSafeFunc_B(char*file,intline)

故障异常处理函数

B_CODE.c

3.5.6.异常处理

若队列为空或输入参数buf为NULL,或输入参数length为0,则返回读取长度为0.

3.5.7.安全防护处理

通过调用CheckTGMQB及FailSafeFunc_B进行安全防护。

3.6.函数PrefetchTGMQB()

3.6.1.描述

报文队列B的预取函数。

该函数用于事先查看报文队列B中存储的内容,但不清空预读取的存储区的存储内容。

3.6.2.数据结构

3.6.2.1.输人项

(1)全局变量

TGMQBBufApp;/*报文队列B*/

(2)输入参数

UINT8*constBuf;/*预读出数据的存储缓存区首地址*/

UINT16length;/*读取长度*/

3.6.2.2.输出项

(1)输出参数

UINT8*constBuf;/*该缓存区内存储了读出的数据*/

(2)返回值

UINT16len;/*返回实际读取的数据长度*/

3.6.3.

3.6.4.流程

图15报文队列B的预读取流程图

3.6.5.接口设计

3.6.5.1.调用本函数的函数

函数声明

函数说明

所在文件

UINT8CombTGMAandB(void)

对两路报文进行合并,并写入到发送报文发送队列(CAN)中的函数

IATC_App.c

3.6.5.2.被本函数调用的函数

函数声明

函数说明

所在文件

ENTER_CRITICAL()

关中断操作函数

EXIT_CRITICAL()

开中断操作函数

voidCheckTGMQB(void)

报文队列B的合法性检查函数

TGMQ_B.c

voidFailSafeFunc_B(char*file,intline)

故障异常处理函数

B_CODE.c

3.6.6.异常处理

若队列为空或输入参数buf为NULL,或输入参数length为0,则返回读取长度为0.

3.6.7.安全防护处理

通过调用CheckTGMQB及FailSafeFunc_B进行安全防护。

3.7.函数WriteTGMQB()

3.7.1.描述

报文队列B的写入函数。

向报文队列B写入预存储的数据。

3.7.2.数据结构

3.7.2.1.输人项

(1)全局变量

TGMQBBufApp;/*报文队列B*/

(2)输入参数

UINT8*constBuf;/*存储着预写入数据的缓存区的首地址*/

UINT16length;/*预写入长度*/

3.7.2.2.输出项

(1)返回值

UINT16len;/*实际写入长度*/

3.7.3.流程

图16报文队列B的写入流程

3.7.4.接口设计

3.7.4.1.调用本函数的函数

函数声明

函数说明

所在文件

staticinterruptvoidxint1_isr(void)

外部中断1的处理函数

fpga.c

staticinterruptvoidxint6_isr(void)

外部中断6的处理函数

fpga.c

3.7.4.2.被本函数调用的函数

函数声明

函数说明

所在文件

ENTER_CRITICAL()

关中断操作函数

EXIT_CRITICAL()

开中断操作函数

voidCheckTGMQB(void)

报文队列B的合法性检查函数

TGMQ_B.c

voidFailSafeFunc_B(char*file,intline)

故障异常处理函数

B_CODE.c

3.7.5.异常处理

若队列为满或输入参数buf为NULL,或输入参数length为0,则返回读取长度为0.

3.7.6.安全防护处理

通过调用CheckTGMQB及FailSafeFunc_B进行安全防护。

3.8.函数CheckTGMQBEmpty()

3.8.1.描述

检查报文队列B是否为空的函数。

3.8.2.数据结构

3.8.2.1.输人项

(1)全局变量

TGMQBBufApp;/*报文队列B*/

3.8.2.2.输出项

(1)返回值

UINT16ret;/*返回1:

队列为空;返回0:

队列不空*/

3.8.3.流程

图17报文队列B判空流程图

3.8.4.接口设计

3.8.4.1.调用本函数的函数

函数声明

函数说明

所在文件

UINT8CombTGMAandB(void)

对两路报文进行合并,并写入到发送报文发送队列(CAN)中的函数

IATC_App.c

3.8.4.2.被本函数调用的函数

函数声明

函数说明

所在文件

ENTER_CRITICAL()

关中断操作函数

EXIT_CRITICAL()

开中断操作函数

voidCheckTGMQB(void)

报文队列B的合法性检查函数

TGMQ_B.c

3.8.5.安全防护处理

通过调用CheckTGMQB进行安全防护。

3.9.函数DelTGMQBFirst()

3.9.1.描述

删除报文队列B的队首元素的函数。

3.9.2.数据结构

3.9.2.1.输人项

(1)全局变量

TGMQBBufApp;/*报文队列B*/

3.9.2.2.输出项

(1)返回值

UINT16ret;/*返回值1:

成功删除;返回值0:

队列已为空,需删除*/

3.9.3.流程

图18删除报文队列B队首流程

3.9.4.接口设计

3.9.4.1.调用本函数的函数

函数声明

函数说明

所在文件

staticinterruptvoidxint1_isr(void)

外部中断1的处理函数

fpga.c

staticinterruptvoidxint6_isr(void)

外部中断6的处理函数

fpga.c

3.9.4.2.被本函数调用的函数

函数声明

函数说明

所在文件

ENTER_CRITICAL()

关中断操作函数

EXIT_CRITICAL()

开中断操作函数

voidCheckTGMQB(void)

报文队列B的合法性检查函数

TGMQ_B.c

3.9.5.异常处理

若队列已经为空,返回0。

3.9.6.安全防护处理

通过调用CheckTGMQB进行安全防护。

4tickApp模块详细设计

该模块提供如下功能:

对系统时钟数进行维护、对FPGA的计时器进行维护、根据时钟数延迟对CAN通信进行判断。

4.1.宏、数据结构及全局变量

4.1.1.宏定义

4.1.2.数据结构

4.1.3.全局变量

staticvolatileUINT32sys_tick=0UL;/*用作系统时钟数,每10ms更新一次,将在497天时溢出,但此时ATP早已关机*/

staticvolatileUINT32timeSpan=TICK(FPGA_CLEAR_TIMER);/*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1