VISSIM的VAP基本使用方法


VAP,全称vehicle actuated programming,是微观交通仿真软件VISSIM中的车辆感应控制编程模块

  • 用途:在VISSIM软件中与检测器、信号灯、路径决策、期望车速分布等模块协同使用,实现交通仿真中的车辆感应控制、停车泊位管理、可变车道控制、可变限速控制等功能。
  • 使用:预先准备三个文件,并直接在VISSIM软件中调用;文件① vap216.dll,在VISSIM安装目录下的Exe文件中;文件② xx.pua,描述配时方案中的绿灯间隔时间与相位切换次序;文件③ xx.vap,描述交通系统的控制逻辑与灯态控制方式。


目录

1. 基本案例

2. 编辑PUA文件

2.1 借鉴PUA文件

2.2 编辑PUA文件

3. 编辑VAP文件

3.1 借鉴VAP文件

3.2 编辑VAP文件

3.2.1 VAP程序头部格式

3.2.2 VAP主程序编辑

4. 备注


1. 基本案例

下面以主次路相交的交叉口为基本场景,建立半感应控制的信号切换逻辑,其中主路一般为绿灯,当次路检测到有车时才会自动切换至次路,因此在VISSIM中预设两相位基础方案。


2. 编辑PUA文件

2.1 借鉴PUA文件

选取VISSIM软件自带的VAP案例,如下图:

(VISSIM安装路径:VISSIM4.3\Example\Training\VAP_PedSignal_E\ped.pua)

$SIGNAL_GROUPS
$
A    1
B    2

$STAGES
$
Stage_1          A
red		         B
Stage_2          B
red              A

$STARTING_STAGE
$
Stage_1

$INTERSTAGE1
Length [s]             : 5
From Stage             : 1
To Stage               : 2
$
A  -127  0
B    5  127

$INTERSTAGE2
Length [s]             : 5
From Stage             : 2
To Stage               : 1
$
A    5  127
B  -127  0

$END


2.2 编辑PUA文件

PUA文件的模式较为固定,主要按照以下六个部分在记事本软件中分别进行编辑:SIGNAL_GROUPS、IGM、STAGES、STARTING_STAGE、INTERSTAGE、END。

其中,“$”表示文本注释,在两个“$”之间的语句不起作用、而是为编辑者直观地展示各个模块。

1)定义灯组名称:$SIGNAL_GROUPS

在PUA文件中需要预先定义各个灯组的名称、用于后续灯组之间的切换,在两相位控制程序下,将主路和次路的两个灯组分别命名为SG1、SG2。

$SIGNAL_GROUPS
$
SG1  1
SG2  2

2)定义灯组之间的绿灯切换矩阵:$IGM,全称INTERGREEN MATRIX

为各个灯组设置绿灯时间间隔矩阵,绿灯间隔时间即是两个灯组的绿灯结束与绿灯开启的间隔。其中,同一灯组或者同时启亮与关闭的灯组赋值为-127,不同灯组之间的绿灯间隔时间可自定义,本文以5s为例。

$IGM
$
      SG1  SG2
SG1  -127   5
SG2    5  -127

3)定义各个阶段启亮与关闭的灯组:$STAGES

VISSIM可实现基于灯组的信号控制方式,在信号控制时依照灯组的启亮顺序将多个灯组划分为多个阶段。在本文中将两个灯组划分为两个阶段,第一阶段主路启亮、第二阶段次路启亮。

$STAGES
$
Stage_1  SG1  # 多个灯组时用“,”隔开
red      SG2
Stage_2  SG2
red      SG1

4)定义开始阶段:$STARTING_STAGE

设置默认启亮的第一阶段

$STARTING_STAGE
$
Stage_1

5)定义相位切换规则:$INTERSTAGE

根据划分的各个阶段,设置任意两个阶段之间的切换规则,以阶段1切换至阶段2为例程序如下,存在多个阶段切换时,需要重复设置切换规则。

$INTERSTAGE
INTERSTAGE_number: 1  # 阶段切换编号
length[s]        : 5  # 尽量与绿灯间隔矩阵保持一致
from Stage       : 1  # 从阶段切换至阶段2
to stage         : 2
$
SG1  -127  0     # -127与0表示阶段1在执行切换规则之前为绿灯
SG2    5  127    #  5与127表示阶段2在执行切换规则5s后变为绿灯

6)结束:$END

PUA文件运行结束的标志。

$END

最终完整版PUA文件,如下:

$SIGNAL_GROUPS
$
SG1          1
SG2          2

$IGM
$
       SG1  SG2
SG1   -127   5
SG2     5  -127

$STAGES
$
stage_1  SG1
red      SG2
stage_2  SG2
red      SG1

$STARTING_STAGE
$
stage_1 

$INTERSTAGE
INTERSTAGE_number: 1
length [s]       : 5
from stage       : 1
to stage         : 2
$
SG1  -127  0
SG2    5  127

$INTERSTAGE
INTERSTAGE_number: 2
length [s]       : 5
from stage       : 2
to stage         : 1
$
SG2  -127  0
SG1    5  127

$END

3. 编辑VAP文件

3.1 借鉴VAP文件

选取VISSIM软件自带的VAP案例,如下图:

(VISSIM安装路径:VISSIM4.3\Example\Training\VAP_PedSignal_E\ped.vap)

PROGRAM ped;

/* SUBROUTINES */ 

/* PARAMETERS DEPENDENT ON SCJ-PROGRAM */ 
            
/* EXPRESSIONS */ 
            Min_Green_Stg1 := T_green( A ) >= T_green_min( A );
            Min_Green_Stg2 := T_green( B ) >= T_green_min( B );
            Ped_Demand := Occupancy( 2 ) > 0;

/* MAIN PROGRAM */ 

S00Z001:    IF Stage_active( 1 ) THEN
S01Z001:      IF Min_Green_Stg1 THEN
S02Z001:        IF Ped_Demand THEN
S03Z001:          Interstage( 1 , 2 )
                END
              END
            END;
S00Z003:    IF Stage_active( 2 ) THEN
S01Z003:      IF Min_Green_Stg2 THEN
S03Z003:        Interstage( 2 , 1 )
              END
            END
PROG_ENDE:    .
/*----------------------------------------------------------------------------*/

3.2 编辑VAP文件

VAP文件的模式较为固定,主要包括程序头部格式部分和后续主程序编辑部分。

其中,“/*”表示文本注释,在“/*  */”之间的语句不起作用、而是为编辑者直观地展示各个模块。

3.2.1 VAP程序头部格式

1)VAP程序名称

/* C:\Users\Administrator\Desktop\Main_branch\main_branch.vap */
PROGRAM main_branch;   # 程序名称

VAP_FREQUENCY 1;  # 调用vap程序时,各个参数的取值可能有多组,这里默认取第1组

2)程序相关参数

在CONST中为参数赋值单个数值;如果设置多个取值,可在ARRAYS中设置为数组形式;如果调用了子程序,可以在SUBROUTINES中设置子程序的名称与代码。定义主路的绿灯、最小绿和最大绿m_g、m_g_min、m_g_max;次路的最小和最大绿灯时间b_g_min、b_g_max;次路最大红灯等待时间w_max。

CONST 
            m_g = 30,
            m_g_min = 20,
            m_g_max = 60,
            b_g_min = 10,
            b_g_max = 20,
            w_max = 40;

/* ARRAYS */ 

/* SUBROUTINES */ 
# 例如
# SUBROUTINE busmodule_single;
# D01S00Z001: IF single_A_w THEN
# D01S01Z002:   ......

/* PARAMETERS DEPENDENT ON SCJ-PROGRAM */ 

3)自定义表达式

在EXPRESSION中汇总用到的表达式,如下即是一组判断条件,当(OccT( 21 ) >= w_max)或者(OccT( 23 ) >= w_max)成立时,次路进口道处机动车辆的停车等待时间过长,则t_wait为真;当(StgT(1) >= m_g) and (Det(21) or Det(23)),主路已超出基础绿灯时间且次路有车到达停车线,则Veh_wait为真。

21和23是次路上南北进口道停车线处的检测器编号;22和24是次路上南北进口道停车线前的检测器编号。

/* EXPRESSIONS */ 
            T_wait := (OccT(21) >= w_max) or (OccT(23) >= w_max);
            Veh_wait := (StgT(1) >= m_g) and (Det(21) or Det(23));
            Veh_arrive := (Det(22) or Det(24));

3.2.2 VAP主程序编辑

1)符号的优先级

优先级符号含义
6(  )括号
5NOT逻辑非
4AND  *  /  %  \逻辑与,乘,除,求余,整除
3OR  +  -逻辑或,加,减
2= <>  < <=  >  >=比较符号
1-负号

2)基本逻辑语句

符号含义
:=赋值
GOSUB运行子程序
GOTO改变程序流向
IF-THEN-ELSE-END条件语句
Start-Start_at-Stop-Reset定时器
WAIT_AT-UNTIL循环

3)常用函数

VAP程序中有一些自带函数可以直接使用,主要分为检测器类、信号灯组类、信号阶段类以及其他函数,下面列举了常用的几个函数及其含义。在VAP文件中可以使用函数全称或者缩写两种形式。

类别函数全称函数简写含义

检测器

类函数

Detection(1)Det(1)1号检测器的状态;如果检测到有车返回1,否则返回0
Headway(1)Hdw(1)1号检测器获取的车头时距,没有则返回
Occupancy(1)OccT(1)1号检测器上车辆的占用时长,没有则返回0
Presence(1)Call(1)1号检测器被激活则返回1,否则返回0
Veh_length(1)V_l(1)当前仿真秒,1号检测器上最后一辆车的长度

灯组/

阶段类函数

Intergreen(1, 2)IntG(1, 2)返回xxx.pua文件中灯组1和2的绿灯间隔时间
Interstage(1, 2)Is(1, 2)由阶段1切换到阶段2
Interstage_active(1, 2)IsA(1, 2)若阶段1到阶段2的绿灯间隔激活则返回1,否则返回0
Interstage_duration(1, 2)IsT(1, 2)返回阶段间隔的当前秒数,若是该间隔未激活返回0
Stage_active(1)StgA(1)若阶段1激活则返回1,否则返回0
Stage_duration(1)StgT(1)返回阶段1已经运行的持续时长,如果未激活则返回0
T_green(1)Tg(1)返回阶段1已运行的绿灯时长,如果不是绿灯则返回0
T_green_min(1)Tgmin(1)返回阶段1最小绿灯时间

4)控制逻辑与语句编号

首先,基于本场景建立信号控制逻辑图,其中主次路阶段分别为阶段1和2。在主路绿灯运行期间,主路未超出最小绿灯时间,则继续运行主路绿灯;主路大于等于最大绿灯时间,则结束主路绿灯,由阶段1切换至阶段2;主路绿灯在最小与最大绿灯之间时,如果次路检测到有车在排队等待,则有阶段1切换至阶段2。在次路绿灯运行期间,当超出既定的绿灯时间时,由阶段2切换至阶段1。

其次,为增加网格编号,横向为S、纵向为Z,依次确定判断框、计算框、连线所等所处的网格位置。以T_wait or Veh_wait为例,其编号为S02Z002。

 然后,在xxx.vap文件中,将控制流程图转换为编程语言。注意缩进、每一个语句前的行编号,在重复调用某一行的程序时,可使用“GOTO S...Z...”语句实现;每一个IF都对应一个THEN和END;程序结束处注意加上结尾语句。

PROG_ENDE:    .
/*----------------------------------------------------------------------------*/

最终,完整版VAP文件如下:

PROGRAM main_branch; /* C:\Users\Administrator\Desktop\Main_branch\main_branch.vap */

VAP_FREQUENCY 1;

CONST 
            m_g = 30,
            m_g_min = 20,
            m_g_max = 60,
            b_g_min = 10,
            b_g_max = 20,
            w_max = 40;

/* ARRAYS */ 

/* SUBROUTINES */ 

/* PARAMETERS DEPENDENT ON SCJ-PROGRAM */ 
            
/* EXPRESSIONS */ 
            T_wait := (OccT(21) >= w_max) or (OccT(23) >= w_max);
            Veh_wait := (StgT(1) >= m_g) and (Det(21) or Det(23));
            Veh_arrive := (Det(22) or Det(24));

/* MAIN PROGRAM */ 

S00Z001:    IF StgA( 1 ) THEN
S01Z001:      IF StgT( 1 ) >= m_g_min THEN
S02Z001:        IF StgT( 1 ) >= m_g_max THEN
S03Z002:          Interstage( 1 , 2 )
                ELSE
S02Z002:          IF T_wait or Veh_wait THEN
                    GOTO S03Z002
                  END
                END
              END
            END;
S00Z004:    IF StgA( 2 ) THEN
S01Z004:      IF StgT( 2 ) >= b_g_min THEN
S02Z004:        IF StgT( 2 ) >= b_g_max THEN
S03Z005:          Interstage( 2 , 1 )
                ELSE
S02Z005:          IF Veh_arrive THEN
                    GOTO S03Z005
                  END
                END
              END
            END
PROG_ENDE:    .
/*----------------------------------------------------------------------------*/

4. 备注

在编辑自定义的PUA文件和VAP文件时,建议在VISSIM案例中xxx.pua和xxx.vap文件基础上修改,不要新建txt文件。另外,在VISSIM设备运行下,可以直接使用 visvap.exe的可视化程序接口编辑VAP文件。
# 如有需要,可加qq: 1942726048@qq.com
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值