Vissim和Matlab联合仿真的实现方法

Vissim和Matlab联合仿真的实现方法

姓名:王一鸣      学号:20181214212       学院:微电子学院

转自: https://blog.csdn.net/weijimin1/article/details/88345180

【嵌牛导读】:本文介绍了使用Vissim 8.0学生版与Matlab对单个路况的联合仿真

【嵌牛鼻子】:Vissim  Matlab

【嵌牛提问】:如何通过vissim与MATLAB进行联合仿真?

【嵌牛正文】:

一、建立路段及路段之间的连接器

此处在路网对象栏中设置


注:所有的路网对象只有选中为深颜色时,才可以在路网编辑器中添加对应的路网对象。

在路网编辑器中 按住Ctrl键+鼠标右键 往道路行驶方向拖动鼠标,则可以新建一个路段。松开鼠标右键后会弹出路径的属性框。在其中可以设置路段的宽度、车道数等属性信息。


当路网为浅灰色时,则路网编辑器中则隐藏对应的网络对象。


路口中间的右转、直行、左转都是采用连接器进行连接。为了使连接更加平滑,连接器属性中的中间点应当多设置一些。在连接器的的属性中需要设置连接器的起点路段和终点路段。


二、设置车辆类型

此处在菜单 列表->私人交通->车辆组成 中设置,在弹出的框中设置车辆的属性


三、设置车辆的输入

在弹出的框内设置车辆输入的属性




四、新建信号控制机

在菜单栏中 信号控制->信号控制机 弹出如下框


右键选择上述长条框,单击编辑 弹出如下框


点击其中的 编辑信号控制机 按钮


在弹出的 界面中

设置信号灯组 , 绿间隔矩阵, 信号配时方案


注:信号灯组的解释,对于4相位的交叉路口配时方案,东西直行为一个信号灯组,东西左转为一个信号灯组,南北直行为一个信号灯组,南北左转为一个信号灯组,总共4个信号灯组。

信号配时方案的界面如下所示,其中的绿灯、红灯的时间可以通过鼠标拖动对应颜色的边沿进行调整。其中信号灯组1中的绿色的条中的1 23 表示信号灯组1绿灯时间是从第1秒至第23秒。信号灯组二的绿灯时间是从第27秒至第47秒。

注意:不同灯组的绿灯时间在竖直方向不能有重叠,否则会导致绿灯冲突。


五、设置信号灯

在路网对象栏中选中 信号灯头,如下图所示


在路网编辑中需要放置信号灯头的位置按住 ctrl + 鼠标右键,松开鼠标右键,会弹出 信号灯的属性框


注:该信号灯属性框中,需要跟步骤四中的信号控制机进行关联,关联其中的信号灯控制器和信号灯组。


六、设置排队计数器

在路网对象中选中排队计数器,将交叉路口每个车道停止线处添加一个排队计数器。

在菜单栏中 评估->配置 弹出的对话框中选中 结果特征属性 在对应的表格中将 排队计数器 打勾 ,点击更多来 定义排队。


七、仿真

点击 菜单栏 中的 仿真-> 连续 就可以开始进行仿真。在 仿真->参数  中可以设置仿真精度、仿真时间等仿真相关的参数。




八、查看结果

在菜单栏中 评估-> 窗口->信号配时表 可以看到实时运行的信号控制机的对应的信号时间表。如上图中的红色框内。


在菜单栏中 评估-> 结果列表中查看到各种运行结果信息。


以下为排队的结果(评估-> 结果列表->排队结果)



九、Vissim COM与Matlab 的联合仿真

Vissim com组件的自带案例的位置在C:\USERS\PUBLIC\DOCUMENTS\PTV VISION\PTV VISSIM 8\EXAMPLES TRAINING\COM\BASIC COMMANDS\ COM Basic Commands.m

         由于上述m文件名的命名不符合matlab中m文件的命名规则,matlab m文件名不能含有空格。建议复制上述文件,修改一下文件名。


Vissim com组件详细信息参考一下 Vissim 软件菜单栏中 帮助->com帮助


Vissim COM Matlab 联合仿真的实现流程


%%建立Vissim COM接口,COM接口的名称Vissim的版本相关

%% Connecting the COM Server => Open a new Vissim Window:

% Vissim = actxserver('Vissim.Vissim-64.800');

Vissim = actxserver('Vissim.Vissim-32.800'); % Vissim 8 - 32 bit


%% 加载交通网络,如下标红的文件是使用Vissim 软件建立的项目文件

Path_of_COM_Basic_Commands_network = cd; %'C:\Users\Public\Documents\PTV Vision\PTV Vissim 8\Examples Training\COM\Basic Commands';


%% Load a Vissim Network:

Filename                = fullfile(Path_of_COM_Basic_Commands_network, 'COM Basic Commands.inpx');

flag_read_additionally  = false; % you can read network(elements) additionally, in this case set "flag_read_additionally" to true

Vissim.LoadNet(Filename, flag_read_additionally);


%% Load a Layout:

Filename = fullfile(Path_of_COM_Basic_Commands_network, 'COM Basic Commands.layx');

Vissim.LoadLayout(Filename);


%%设置信号控制机  ,SC_number与Vissim设置的信号控制机的编号相关

% Set a signal controller program:

SC_number = 1; % SC = SignalController

SignalController = Vissim.Net.SignalControllers.ItemByKey(SC_number);

new_signal_programm_number = 2; 

set(SignalController, 'AttValue', 'ProgNo', new_signal_programm_number);


%%设置仿真参数

Random_Seed = 42;

set(Vissim.Simulation, 'AttValue', 'RandSeed', Random_Seed);


% To start a simulation you can run a single step:

Vissim.Simulation.RunSingleStep;

% Or run the simulation continuous (it stops at breakpoint or end of simulation)

End_of_simulation = 600; % simulation second [s]

set(Vissim.Simulation, 'AttValue', 'SimPeriod', End_of_simulation);

Sim_break_at = 200; % simulation second [s]

set(Vissim.Simulation, 'AttValue', 'SimBreakAt', Sim_break_at);

% Set maximum speed:

set(Vissim.Simulation, 'AttValue', 'UseMaxSimSpeed', true);

% Hint: to change the speed use: set(Vissim.Simulation, 'AttValue', 'SimSpeed', 10); % 10 => 10 Sim. sec. / s

Vissim.Simulation.RunContinuous;


%%设置红绿灯的颜色  ,设置信号控制机SC_number下的信号灯组SG_number的红绿灯的颜色

SC_number = 1; % SC = SignalController

SG_number = 1; % SG = SignalGroup

SignalController = Vissim.Net.SignalControllers.ItemByKey(SC_number);

SignalGroup = SignalController.SGs.ItemByKey(SG_number);

new_state = 'GREEN'; %possible values e.g. 'GREEN', 'RED', 'AMBER', 'REDAMBER'

set(SignalGroup, 'AttValue', 'SigState', new_state);


%% 获取排队长度,QC_number为排队计数器的编号

% Queue length

% Syntax to get the data:

%   get(QueueCounter, 'AttValue', 'QLen(sub_attribut_1, sub_attribut_2)');

QC_number = 1;

maxQ = get(Vissim.Net.QueueCounters.ItemByKey(QC_number),'AttValue', 'QLenMax(Avg, Avg)');

disp(['Average maximum Queue length of all simulations and time intervals of Queue Counter #',num2str(QC_number),':',32,num2str(maxQ)]) % char(32) is whitespace


%% 获取车辆的行程时间

% Get the results of Vehicle Travel Time Measurements:

Veh_TT_measurement_number = 2;

Veh_TT_measurement = Vissim.Net.VehicleTravelTimeMeasurements.ItemByKey(Veh_TT_measurement_number);

TT      = get(Veh_TT_measurement, 'AttValue', 'TravTm(Avg,Avg,All)');

No_Veh  = get(Veh_TT_measurement, 'AttValue', 'Vehs  (Avg,Avg,All)');

disp(['Average travel time all time intervals of all simulation of all vehicle classes:',32,num2str(TT),32,'(number of vehicles:',32,num2str(No_Veh),')']) % char(32) is whitespace


%% 获取数据采集器相关信息

% Data Collection

DC_measurement_number = 1;

DC_measurement = Vissim.Net.DataCollectionMeasurements.ItemByKey(DC_measurement_number);

No_Veh          = get(DC_measurement, 'AttValue', 'Vehs        (Avg,1,All)'); % number of vehicles

Speed           = get(DC_measurement, 'AttValue', 'Speed       (Avg,1,All)'); % Speed of vehicles

Acceleration    = get(DC_measurement, 'AttValue', 'Acceleration(Avg,1,All)'); % Acceleration of vehicles

Length          = get(DC_measurement, 'AttValue', 'Length      (Avg,1,All)'); % Length of vehicles

disp(['Data Collection #',num2str(DC_measurement_number),': Average values of all Simulations runs of 1st time interval of all vehicle classes:'])

disp(['#vehicles:',32,num2str(No_Veh),'; Speed:',32,num2str(Speed),'; Acceleration:',32,num2str(Acceleration),'; Length:',32,num2str(Length)]) % char(32) is whitespace




十、问题汇总

学生版的功能有限,其中的COM接口并未开放,运行Vissim自带的Com Basic Command.m示例matlab程序时报错如下错误。

>> vissim_com_matlab

错误使用 actxserver (line 93)

创建服务器失败。ProgID 'Vissim.Vissim-64.800' 无效。


出错 vissim_com_matlab (line 31)

Vissim = actxserver('Vissim.Vissim-64.800');


>> vissim_com_matlab

错误使用 actxserver (line 93)

创建服务器失败。ProgID 'Vissim.Vissim-32.800' 无效。


出错 vissim_com_matlab (line 32)

Vissim = actxserver('Vissim.Vissim-32.800'); % Vissim 8 - 32 bit


>>

原因:参看Vissim 学生版的许可文件,可以看出其COM接口并未开放许可,



学生版的Vissim中的红绿灯信号控制机的功能开发受限制。


完整版的红绿灯信号控制机包含



学生版的Vissim中红绿灯信号控制机只有如下功能


十一、附注

更多信息参考Vissim的帮助文档。

Preccan 8.5 有vissim插件可以与Vissim 10.00-0.3之间进行联合仿真。这两个软件的仿真同样是通过COM进行连接的。如果Vissim的COM组件没有进行授权,则会报如下错误。


Presecan的能在Vissim中显示的对象见下图,其中没有红绿灯的设置。


————————————————

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容

  • Java语言基础(二) 表达式和运算符: 算术运算符: 元代表多少个操作数,一元表示一个操作数; 一元运算符:++...
    张小龙_aba0阅读 190评论 0 0
  • 外汇智能交易系统有哪些? 外汇EA自动交易系统随着计算机技术的高速发展和互联网的广泛应用,近年来出现了新的外汇交易...
    张敢敢_1533阅读 338评论 0 2
  • 夜莺2517阅读 127,717评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,887评论 1 6
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,532评论 28 53