应答器系统.docx
《应答器系统.docx》由会员分享,可在线阅读,更多相关《应答器系统.docx(41页珍藏版)》请在冰豆网上搜索。
应答器系统
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);/*