道路交通控制系统软件文档.docx
- 文档编号:16916005
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:28
- 大小:30.80KB
道路交通控制系统软件文档.docx
《道路交通控制系统软件文档.docx》由会员分享,可在线阅读,更多相关《道路交通控制系统软件文档.docx(28页珍藏版)》请在冰豆网上搜索。
道路交通控制系统软件文档
智能交通信号控制机
1.0版软件文档
监控系统总体方案
交通信号控制系统是用于城市交通路口信号灯控制,车流量检测等目的的系统。
本控制系统软件主要由两部分组成:
交通监控管理中心和交通信号控制机。
交通监控管理中心主要完成以下功能:
1.对每个交通路口形状参数设置。
根据路口形状结构,选择交通灯类型,交通灯组合方式,交通灯数量等。
2.控制参数设置。
将全年365天划分为工作日、星期六、星期日和特别日四类型。
将24小时划分为若干时段,确定每个时段内控制周期。
3.下载设置好的方案到现场信号控制机中。
4.接收由现场信号控制机发送回来的状态信息(报警、故障),并做相应的显示储存处理。
交通信号控制机主要完成以下功能:
1.适用于任何形式的交通路口信号控制,每个路口可带多盏不同方向的信号灯,包括人行指示,箭头指示等信号,可实现多相位控制。
2.控制机能自动检测到路口交通灯的损坏,并将此信息传输到交通监控中心。
3.城市各个交通道路的红绿灯控制方案,可以通过两种方式下载到信号控制机上。
可在交通监控中心编排好控制方案,通过调制解调器远程下载到各路口信号控制机上。
4.控制机可用于单点控制、区域协调控制。
在控制方法上有根据策略自动控制、感应控制和手动控制。
5.控制机可接收地埋线圈的感应信号,从而判断道路的车流量情况。
车流量信息传回监控中心后,可提示监控人员调用视频系统配合,进一步观察确认该地点的道路交通状况。
6.控制机具有故障自动诊断功能,对外围设备出现的故障,控制机能有相应的处理策略,并向控制中心报告。
监控系统控制管理中心软件设计
因为管理中心的软件和控制机的软件是两个独立的部分,因此本文档不涉及管理中心的软件文档。
监控系统信号控制机软件设计
系统组成
本控制机的软件主要由三个部分组成,第一部分是控制部分,第二部分是与控制中心的通信部分,第三部分是车流量和速度检测部分。
控制部分主要完成信号灯进行控制、信号灯是否损坏检查、环境参数测量、人行按钮控制等功能。
通信部分主要完成与控制中心的通信,包括控制机各种错误状态的上传,信号灯控制策略的下载。
车流量和速度检测部分主要完成道路上线圈所检测出来的车辆信号的处理,包括车流量的统计、车速的测量等。
下面详细介绍各个部分的程序结构。
各部分结构
控制部分
控制部分主要由以下线程组成:
1.Flash线程:
完成各闪烁灯的控制;平时处于睡眠状态,当有灯需要闪烁时,可以启动本线程,让其闪烁给定的时间。
2.Run线程:
完成运行LED灯的控制、门禁的检测、和遥控口令是否改变;它一直处于运行状态,500MS为一个周期,当程序出现错误,即LED灯不再受控制时,硬件将在16S内接管信号灯的控制,即黄闪。
3.ManualCon线程:
完成信号灯的手动控制;当接收到START键并且输入了正确的口令后,进入手动控制方式,停止灯控线程,启动黄闪,然后根据用户的输入判断是步进方式还是单方向控制,适当的停止灯控线程或者启动灯控线程,用户输入结束键时,停止手动控制线程,启动灯控线程。
4.LampCon线程:
完成信号灯的自动控制,除非有手动控制,否则信号灯一直由本线程控制,在每个周期内要判断数据库文件是否已经修改,修改了以后要重新读取控制策略,然后根据控制策略实现对信号灯的控制,在每个相位里如果有要闪烁的灯,则启动Flash线程。
在每个周期的每个相位还要启动学习测试线程对外部的电压、电流值进行学习测试。
5.TestStudy线程:
完成对信号灯电压、电流值的学习、测试。
在控制周期的每个相位启动本线程,完成学习测试以后自动挂起。
6.People线程:
人行按钮控制线程,完成四个装有人行按钮路口的交通灯控制。
平时是人行方向红灯,车行方向绿灯。
当有人要穿越车行道时,按下人行按钮,则人行灯变成绿灯,车行灯变成红灯,等人走过后,恢复成车行方向绿灯,人行方向红灯。
7.Flow线程:
流量与速度测试线程。
如果一个车道装有两个感应线圈,就可以测试流量和速度,装一个线圈可以测量车速。
(参考下面的流量和速度检测部分)
通信部分
通信部分由单独的一个程序来控制,它与控制部分通过文件或注册表进行同步,如果有消息要发送给控制中心,并且双方MODEM还没有连通,则用拨号网络发起连接,连接好以后用客户套节字接入控制中心,然后传输数据。
如果对方发送了0X55,则在控制机发送完成所要发送的消息后立即关闭MODEM和套节字。
流量和速度检测部分
流量和速度检测部分由Flow线程完成,当有车进入后面线圈(即车辆最先进入的线圈)时,由1MS的定时器检测到后面线圈一个下降沿,此时表示有一辆车经过,流量可以加一,每分钟向控制中心上传一次流量信息;同时表示有一辆车刚到达,可以启动记数器进行记时;当本辆车到达前面线圈(即车辆后进入的线圈)时,1MS定时器检测到前面线圈的一个下降沿,表示车辆已经到达了前面线圈,此时终止记数器,计算时间,由两个线圈之间的距离和这个时间即可计算出本车的速度。
然后上传给控制中心。
这样要求两个线圈之间的距离比较近,不能超过一辆车的长度。
重要的数据结构
通信程序中的数据结构
1.CStringm_IpAddress;//服务器端IP地址
2.UINTm_IpPort;//服务器端IP端口号
3.CStringm_Telephone;//服务器端的电话号码
4.CStringm_UserName;//登录服务器的用户名
5.CStringm_UserPassword;//登录服务器的用户口令
6.CStringm_UserDomain;//登录服务器的用户域名
7.intlen;//本次从套接字接收到的字节长度
8.CStringFileName;//控制文件名
9.CFileMsgFile;//将要发送的消息文件
10.intMsgLen;//消息长度
11.CFileRecFile;//接收文件
13.CStringFilePath;//控制文件路径
14.CStringMsgPath;//将要发送的消息文件路径
15.unsignedcharMsg[4096];//接收到的消息
16.CClientSocketsockClient;//客户端全局套接字
17.BOOLIsClient=false;//是否创建了客户端套接字
18.BOOLIsRec55=false;//是否接受到了0X55消息
19.HRASCONNhandle;//指定的拨号连接。
信号灯控制程序中的数据结构
1.各个读写端口地址类
classY
{
public:
Y();//构造函数
~Y();//析构函数
public:
unsignedshortISA_Address;//ISA总线基地址,1BYTE,工控机上可用的地址都可以
unsignedshortPost;//上电自检测,1BYTE,写一个数出去再读回来,一致则自检通过
unsignedshortSSR_R[30];//控制灯泡的读继电器,1BIT,1亮,0灭
unsignedshortSSR_W[30];//控制灯泡的写继电器,1BIT,1亮,0灭
unsignedshortDetector_R[24];//读车辆感测器信号数据,1BIT,"1"=无车,"0"=有车。
unsignedshortADC_Finish_D7_R;//A/D转换是否结束标记,D7BIT,1结束,0正在转换
unsignedshortADC_Result_R;//AD转换结果,1BYTE
unsignedshortADC_Select_W;//选择进行哪一路AD转换,D2D1D0三位,
//000时选择测试交通灯电流;
//001时选择测试交通灯电压;
//010选择测试噪音,
//011时选择测试空气污染。
unsignedshortADC_Begin_W;//开始AD转换,1BYTE,任意写一个值即可
unsignedshortOpen_D6_R;//门被打开读写位
unsignedshortMODEM_D7_W;//写MODEM断电复位数据D0,"1"=断电
unsignedshortManualKey_R;//高四位为遥控,低四位为手动
unsignedshortPeopleKey_R;//人行按钮键值,占低四位
unsignedshortHandAvai_D4_R;//手动控制键值有效
unsignedshortRemoteAvai_D5_R;//遥控键值有效
unsignedshortLED_Lamp_D1_W;//有灯坏LED指示
unsignedshortLED_Open_D0_W;//门被打开LED指示
unsignedshortLED_Conflict_D2_W;//交通信号冲突告警
unsignedshortLED_Power_D3_W;//电源电压过低指示
unsignedshortLED_RUN_D7_W;//运行灯
};
控制机利用Y类结构和外部各个寄存器或者端口进行通信,从而控制信号灯,AD转换和各个测试量,并进行线圈的检测.
2.灯组的控制结构
//枚举灯的类型
enumLAMPKIND{NONE=0,GREEN=1,RED,YELLOW,MANGREEN,MANRED,LEFT,RIGHT,UP};
structLampProperty
{
unsignedshortNumber;//灯组本身的序号
boolIsFlash;//是否为闪烁灯
LAMPKINDLampKind;//灯的类型
unsignedcharLampDir[3];//本组交通灯的方向,参考附录
unsignedshortStatus[24];//每个相位灯的状态
};//每组灯的结构
3.路口灯组的结构
classCross:
publicCObject
{
public:
Cross();
~Cross();
public:
CStringCrossName;//路口名称
unsignedshortTotalNum;//总的灯组个数
LampPropertyLamp[30];//一个路口30组灯
unsignedshortPhaseTime[5][24];//每种控制策略的24个相位
unsignedshortDaySegment[24];//一天24个时间段
charDayConMethod[24];//每个时间段的监控方法
};//每个交叉路口的结构
4.线圈组结构
structLOOPINDUCE
{
unsignedcharGroup;//本组的组号
BOOLHighToLow;//本组线圈是否有由高到低的跳变
unsignedintCount;//本组线圈车到达至车离开的计数值
BOOLIsCalu;//本车的速度是否已经计算过
unsignedcharFlow;//本组线圈的流量计数
unsignedcharBackLoop;//相对于路口来说后面的线圈
unsignedcharFrontLoop;//相对于路口来说前面的线圈
unsignedcharOldFrontLoop;//上一次前面线圈的状态
unsignedcharFrontLoopJump;//前面线圈是否有下降沿
unsignedcharBackFrontLen;//前后线圈之间的距离
CStringLoopName1;//线圈1的名字
CStringLoopName2;//线圈2的名字,一个车道最多2个线圈
};
5.路口线圈结构
classCLoopInduce
{
public:
CLoopInduce();
virtual~CLoopInduce();
structLOOPINDUCEInduce[12];//线圈组结构
CStringCrossName;//路口名称
};
6.一条消息的结构
structMESSAGE
{
uint16MsgLen;//每条消息的总长度
ucharBuffer[MAX_MSG_BUFFER];//每条消息的全部内容
};//消息结构
7.消息队列结构
classCMessage
{
public:
CMessage();
virtual~CMessage();
structMESSAGEMsg[MAX_MSG_QUEUE];//最大MAX_MSG_QUEUE条消息
uint16ReadPtr;//消息的读指针
uint16WritePtr;//消息的写指针
int16Send();//消息的发送
int16CMessage:
:
Receive(uint16type,uint16subtype,
uint16len,uchar*msg);//消息的接收
};//消息队列结构
各个文件说明
address.cpp\Address.h地址结构的定义
AddressDlg.cpp\AddressDlg.hISA基地值的设置对话框
Cross.cpp\Cross.h路口灯组状态的定义
DBFRoute.cpp\DBFRoute.h数据库文件路径的设置对话框
Flow.cpp流量和车速统计的线程
Frequency.cpp\Frequency.h黄闪频率的设置对话框
LoopInduce.cpp\LoopInduce.h线圈组状态的定义
ManualCon.cpp手动控制和遥控的线程
Message.cpp\Message.h消息队列的定义
People.cpp人行按钮控制的线程
Ratio.cpp\Ratio.h电压波动设置对话框
StartDlg.cpp\StartDlg.h程序启动时的对话框
Steady.cpp\Steady.h灯亮稳定时间设置对话框
WayDoc.cpp\wayDoc.h主要程序部分
WayView.cpp\wayView.h调试信息的输出和定时器的操作
算法或流程
自动控制时系统流程
1.判断文件是否被更新
2.文件被更新,则读文件
3.读系统时间,取得当前控制时段
4.由控制时段取得控制方式
5.控制方式是黄闪,则启动闪烁线程
6.对每一个相位,置所有灯为灭
7.对每一组灯,设置灯的状态
8.回读,检测读写是否一致
9.由灯闪,启动闪烁线程
10.对此相位进行学习测试
11.等待本相位时间结束
12.挂起闪烁线程
13.是否要求手动控制
14.要求手动控制,则挂起本线程
15.重复1
学习测试流程
1.取得当前相位
2.如果需要学习,选择学习电压值
3.等待本相位灯亮并且稳定下来
4.学习电流值,保存
5.挂起自己
6.如果学习完毕,要进行测试,取得电压学习值
7.电压值与学习值相比是否在电压波动范围内,
8.不在,告警
9.挂起自己
10.在,等待本相位灯亮并且稳定下来
11.得到电流测试值,
12.与学习值相比,电流变小超出范围,有灯坏
13.挂起自己
14.与学习值相比,电流变大超出范围,表示增加了信号灯,下一次需要学习
15.挂起自己
运行线程流程
1.写LED运行灯,
2.取得遥控口令
3.门是否被打开
4.等待500MS,
5.重复1
闪烁线程流程
1.对于30组灯,该闪烁的灯全亮
2.等待其亮指定的时间
3.是否要求闪烁结束
4.要求,则挂起线程
5.不要求,该闪烁的灯全灭
6.等待其灭指定的时间
7.重复1
降级运行
1.发送降级运行告警消息
2.灭掉所有的灯
3.对于所有的黄灯,全部设置为闪烁状态
4.启动闪烁线程
手动控制线程(包括遥控)
1.得到当前按钮值
2.是开始手动控制键,没有口令,则进入直接手动控制
3.是口令键,与要求的口令字相比,符合,继续
4.所有的口令字都相符,进入直接手动控制
5.为步进控制键,恢复灯控,等待其挂起,继续
6.为单方向控制方式,本方向亮绿灯,其他方向亮红灯
7.为结束键,恢复灯控线程,继续
人行按钮控制
1.置人行按钮控制的灯中,人行方向为红灯,车行方向为绿灯
2.得到人行按钮值
3.0号人行按钮,启动0号人行按钮控制线程
4.1号人行按钮,启动1号人行按钮控制线程
5.2号人行按钮,启动2号人行按钮控制线程
6.3号人行按钮,启动3号人行按钮控制线程
7.重复2
某一号人行按钮控制线程
1.车行方向黄闪,人行方向红灯
2.车行方向红灯,人行方向绿灯
3.等待行人放行完毕,
4.人行方向绿闪,车行方向红灯
5.人行方向红灯,车行方向绿灯
6.等待车行方向放行一定时间
流量和速度测试线程
1.用1MS定时器,检测车辆的到来和离去
2.当后线圈有车到来时,流量加一,取得此时系统时间
3.当车到达前线圈时,再次取得系统时间
4.两次系统时间之差,就是车通过前后线圈的时间
5.由两线圈之间的距离和上面计算的时间差,可以求出速度
6.速度上传给控制中心。
7.1分钟到时,将流量上传给控制中心
通信程序流程
1.有消息要发送,进行拨号
2.建立客户套接字,发送路口编号消息
3.发送要发送的消息
4.控制中心如果在5分钟内没有消息发送,则断开MODEM
5.如果一整天都没有消息要发送,则在某个时间接通控制中心,看其是否有消息要发送
附录A
交通控制系统数据文件说明
数据文件的设计
1.交通灯属性表:
lamp_attrib.dbf,以下假设为文件A
字段外部名
字段在文件中的名称
类型
长度
备注
交通灯名称
lamp_name
Char
12
信号灯的代号
所在组号
lamp_group
Char
2
组号为1,2,…
路口名称编号
lamp_wayid
Char
3
交通灯类型
lamp_kind
Char
2
表示红绿等灯
所在的方向
lamp_dir
Char
3
见以下注
注:
1.在交通灯的类别中,其值为:
0:
无灯,1:
绿灯,2:
红灯,3:
黄灯,4:
人行绿灯,5:
人行红灯,6、7、8、10:
转向绿灯;
2.交通灯所在的方向的值说明:
如XYZ:
X表示方向;Y表示是否为人行按钮控制的灯以及是哪个人行按钮控制;Z表示人行按钮控制的灯是车行方向的灯还是人行方向的灯;
X的值可以是A-P之间的任何一个字母;
Y的值可以是0、1、2、3、F;0、1、2、3分别表示是0、1、2、3号人行按钮,F表示该灯非人行按钮控制的灯;
Z的值可以是0、1、F;0代表该灯是车行方向的灯,1代表该灯是人行方向的灯,F代表该灯不时人行按钮控制的灯;
如AFF:
表示A方向,不是人按钮控制,而是路口遥控或手控时所需要的灯;
如B00,表示B方向,为0号人行按钮控制,车行方向的交通灯,
如C01,表示C方向,为0号人行按钮控制,人行方向的交通灯。
2.各星期或特殊日期的时间段表:
week_segment.dbf,以下假设为文件B
字段外部名
字段在文件中的名称
类型
长度
备注
星期或日期
week_id
char
4
星期1-7和特殊日值
时间段序号1
time_seg1
char
9
该时间段的起止时间值及控制类型
时间段序号2
time_seg2
char
9
如:
00000630A
。
。
。
。
。
。
。
。
。
。
。
。
时间段序号24
time_seg24
char
9
注:
1.星期时间,即为星期几为这个时间段的设置,‘1’表示为星期一,‘2’表示为星期二,同理,‘1234567’表示为星期一到七,特殊日表示为具体的日期值,如:
‘0501’表示为5月1日等
2。
此表中的时间序号记录为时间段的字符串,如:
00000630A,表示为0点0分到六点三十分,如果其值为00000000X,则表示为空,’A’说明见3
3。
此表中的信号控制类型是用单个字母来具体表示,即A:
稀疏,B:
正常,C:
松弛,D:
稠密,E:
拥挤,F:
黄闪
3.各相位时间段的周期表:
:
time_seg_cyc.dbf,以下假设为文件C
字段外部名
字段在文件中的名称
类型
长度
备注
交通控制类型
con_type
char
1
A,B,C,D,E,F
相位时间段1
time_id1
Char
5
以秒为单位
相位时间段2
time_id2
Char
5
。
。
。
。
。
。
。
。
。
。
。
。
相位时间段24
time_id24
Char
5
4.各组灯的状态表:
lamp_status.dbf,以下假设为文件D
字段外部名
字段在文件中的名称
类型
长度
备注
交通灯组号
lamp_group
Char
2
相位时间段1工作状态
time_cyc1
Char
1
相位时间段2工作状态
time_cyc2
Char
1
。
。
。
。
。
。
。
。
。
。
。
。
相位时间段24工作状态
time_cyc24
Char
1
注:
1.时间段工作状态值为:
0:
灭,1:
亮,2:
闪烁(此方式的时间间隔在控制机中固定),9表示为空
5.路口线圈的属性表:
loop_attrib.dbf
字段外部名
字段在文件中的名称
类型
长度
备注
线圈名称
loop_name
Char
12
路口名称编号
loop_wayid
Char
3
线圈组号
loop_group
Char
2
注:
1.同一个路口同一个车道的线圈编为同一组。
数据文件的配合使用:
1.查询文件A得到本路口名称
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 道路交通 控制系统 软件 文档