xe8不能正常调用access_Vissim-Com接口调用简易基础教程

4293ffa4f658ed26b885a440b33a2484.png

封面:望月けい

写在前面:本Com接口教程基于VISSIM4.3版本,编码语言使用Matlab,主要为感应信号控制及实时数据输出作服务。本文旨在帮助为实现一定简单功能,对阅读全英文教程有一定困难的用户。详细Com介绍应参照VISSIM目录下Vissim_Com文件。欢迎指正。

目录:

1.建立COM联结的大致步骤

2.使用Matlab为VISSIM-COM编程的相关知识与具体步骤

4.测量结果的实时简单展示

建立COM联结的大致步骤

1. 在VISSIM GUI中建立完整路网(包括道路,信号灯,车辆输入,检测器)

b6cee799b0f21329d79489f06d837fa2.png
图1 完整路网

2. 对路网中相关内容进行设置(如信号控制,评价指标)

34cd29bc318ecfdfbc732784a41d36dd.png
图2 信号控制设置(注意Type选择Fixed time)

4a193f29958a36c9a427f4dce0ead8dc.png
图3 评价指标的激活

ca8c385d737a50386bb8e14d1a445d17.png
图4 数据采集器的设置(注意采集时间间隔设置)

25ee484e2e437e26806b768ecbc5fc05.png
图5 数据采集器的设置2(选择采集器所需要采集的指标)

513e20288ad0b6db1c4456209960db70.png
图6 行程时间的设置(注意采集时间间隔的设置)

2032b2c3386e57aff19721b98af1b01e.png
图7 排队时间设置(注意采集时间间隔的设置)

86a1251fee3cbedf80301953ba5f43c8.png
图8 延误测量的设置(注意采集时间间隔的设置)

3. 在Matlab中利用编码联结路网,并对参数进一步设置

4. 利用Matlab或Vap/VisVap对信号进行控制

5. 利用Matlab实时输出检测器返回的数据

使用Matlab为VISSIM-COM编程的相关知识与具体步骤

1. 编码前所需要了解的内容

1) Com接口所支持的编码语言基础语法

2) 层级式引用

VISSIM-COM的开发是基于严格的层级模式,对Vissim中对象的引用需要对应层次图自上而下,层次图如下:

2dd3051f4c0bfdef67f5fd07e5e9bd3d.png
图9 VISSIM-COM 层级模型

具体用法例如:当需要对Link做引用时,需要从VISSIM这一层开始向下填写,完整引用写法为:

Link_1 = Vissim.Net.Link;    %将Link赋值给Link_1,便于之后调用    

2. 具体步骤

1) 建立新的脚本文件,通过命令清空命令行与窗口

clear all;    %关闭命令行  
close all;    %关闭窗口  

2) 建立与VISSIM的连接

Vissim = actxserver('Vissim.vissim')    %建立连接  

3) 加载已经建立好的路网

%% loading the traffic network  
access_path = pwd;                       %identify current floder 
Vissim.LoadNet([access_path 'COM_TEST.inp']);        
Vissim.LoadLayout([access_path 'test.ini']);  

4) 仿真参数设置

%% simulation setting  
sim = Vissim.Simulation;  
period_time = 6000;                         
sim.set('Period',period_time);              %set period time   
step_time = 1;  
sim.set('Resolution',step_time);            %set step time  

提示:此处开始使用set语句,具体使用方法为:

a) 对对象性质赋值:

对象.set('性质名',变量); 

b) 对对象属性赋值:

对象.set('AttValue','属性名',变量);

属性表如下:

1eb39d6498e382d3ccd64d85663d13e0.png

解释:设置仿真时长及仿真步长,此处设置仿真时长为6000s,仿真步长为1

5) 车辆输入设置

%% traffic generation  
VehicleInput = Vissim.Net.VehicleInputs;  
vehin_1 = VehicleInput.GetVehicleInputByNumber(1);  
vehin_1.set('AttValue','Volume',500);       %主路车辆输入设置为500  
vehin_2 = VehicleInput.GetVehicleInputByNumber(2);  
vehin_2.set('AttValue','Volume',50);        %支路车辆输入设置为50  

解释:通过GetVehicleInputByNumber语句调用主路与支路车辆输入量,通过set语句设置输入量大小

6) 信号控制设置

%% set traffic signal control  
scs = Vissim.Net.SignalControllers;  
sc = scs.GetSignalControllerByNumber(1);  
cycle_time = 46;  
sc.set('AttValue','CycleTime', cycle_time);     %set cycle time  
sgs = sc.SignalGroups;              %create signal group objects  
sg_1 = sgs.GetSignalGroupByNumber(1);          
sg_2 = sgs.GetSignalGroupByNumber(2);  
sg_1.set('AttValue','State',3);  
sg_2.set('AttValue','State',1);        %set red signal for sg_2  

解释:设置CycleTime(周期时长),并设置两条路上信号灯的初始信号颜色

信号灯状态赋值表如下:

376279c75852a566449aa50b96298a3e.png

7) 建立评价指标

%% evaluation while running
eval = Vissim.Evaluation;  
eval.set('AttValue','DATACOLLECTION',1); %active data collection  
eval.set('AttValue','TRAVELTIME',1);     %active travel time  
eval.set('AttValue','QUEUELENGTH',1);    %active queuelength  
eval.set('AttValue','DELAY',1);          %active delay  
eval.set('AttValue','SCDETRECORD',1);    %active sc  

解释:即将所有设置好的检测内容打开

8) 检测器设置

%% detectors setting  
% 1、检测器结果引用  
dets = sc.Detectors;                        
det_1 = dets.GetDetectorByNumber(1);  
det_2 = dets.GetDetectorByNumber(2);  
  			
% 2、数据采集器结果引用 
dats = Vissim.Net.DataCollections;  
dat_1 = dats.GetDataCollectionByNumber(1);  
dat_2 = dats.GetDataCollectionByNumber(2);  

% 3、行程时间结果引用   
TravelTime = Vissim.Net.TravelTimes.GetTravelTimeByNumber(1);  

% 4、排队长度结果引用  
QueueCounter = Vissim.Net.QueueCounters.GetQueueCounterByNumber(1);  
 
% 5、延误结果引用  
Del = Vissim.Net.Delays.GetDelayByNumber(1);  

9) 结果的输出

SUM = dat_2.GetResult('NVEHICLES','SUM',0);  
Speed = dat_2.GetResult('SPEED','MEAN',0);  
Occupancy = dat_2.GetResult('OCCUPANCYRATE','SUM',0);  
Q_Length = QueueCounter.GetResult(i,'MAX');  
T_Time = TravelTime.GetResult(i,'TRAVELTIME','',0);  
Delay = Del.GetResult(i,'DELAY','',0);  
NStops = Del.GetResult(i,'NSTOPS','',0););  
fprintf('%5.2f,%5.2f,%5.2f,%5.2f,%5.2f,%5.2f,%5.2f',SUM,Speed,Occupancy,T_Time,Q_Length,Delay,NStops);  

解释:通过GetResult语句进行赋值后,得到数据,并利用fprintf / disp进行结果的输出

GetRsult语句语法及参数的设置参照如下:

对象.GetResult(时间点,'参数名','','车辆类别');  

提示:车辆类别若填0则表示所有车辆,否则为车辆1,车辆2……;参数名的设置如下表:

4928bb6d16f266b8d61db3319e8e08b0.png

测量结果的实时简单展示

aa8bcf2da3d312ff2a9f1569d87cb81a.png

同样你也可以使用其他语言,比如Python进行实现这一简单应用:

2b1d10b64fbfddb9c448fe717f9b35b6.png
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值