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

(以单个十字交叉路口为例)

Vissim中的交通流是基于car-following模型。本次实现以Vissim 8.0 学生版为例。

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

此处在路网对象栏中设置

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

在路网编辑器中 按住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

十、问题汇总

  1. 学生版的功能有限,其中的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中红绿灯信号控制机只有如下功能

十一、附注

  1. 更多信息参考Vissim的帮助文档。
  2. Preccan 8.5 有vissim插件可以与Vissim 10.00-0.3之间进行联合仿真。这两个软件的仿真同样是通过COM进行连接的。如果Vissim的COM组件没有进行授权,则会报如下错误。

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

Vissim和Matlab联合仿真的实现方法相关推荐

  1. psim matlab,电力电子系统的PSIM MATLAB联合仿真方法

    电力电子系统的PSIM+MATLAB联合仿真方法 李洁,王伟,李晓妮,钟彦儒 西安理工大学,陕西西安金花南路5号 710048 电子邮箱:lijie@http://www.doczj.com/doc/ ...

  2. STK与MATLAB联合仿真方法及应用研究

    STK与MATLAB联合仿真方法及应用研究 常建松,林晓辉 摘要:卫星工具软件STK(Satellite Tool Kit)是进行卫星系统分析和仿真的有效工具.其重要模块STK/Connect可提供用 ...

  3. hfss和matlab,hfss和MATLAB联合仿真

    hfss中仿真太费时间,而且是在做优化,能否进行hfss和matlab联合仿真,利用模拟退火算法缩短仿真时间? 可能我的问题描述的不是特别清楚,我不是想要具体的解决方案,只希望有相关资料的人能提供给小 ...

  4. SUMO与matlab联合仿真

    SUMO与matlab联合仿真 参考https://zhuanlan.zhihu.com/p/582181618 设置过程中出现过两次错误 1是 Error: unable to open file ...

  5. PSIM与matlab联合仿真实战

    最近查阅网上资料,看到一篇PSIM与matlab联合仿真模拟光伏各种故障的论文,打算自己试一试. 首先开发环境是:matlab 2018a和PSIM 9.0.在网上下载了对应的版本后,按照运行步骤一步 ...

  6. ADAMS/MATLAB联合仿真机械臂重力补偿问题

    1 背景与重力补偿基本算法 现在有一个大型机械臂,要做一个缩比同构的小机械臂作为主控端来控制从端大机械臂.小臂的各个连杆可能比较重,要求用户在带着小臂运动的时候尽量感觉不到小臂各连杆的重量,并且在松手 ...

  7. modelsim和matlab联合仿真,Modelsim与Matlab联合仿真

    正 文 Modelsim与Matlab联合仿真(2009/11/12 16:28) 评 论 4楼 cheney1982 发表于 2009/11/14 10:23 回复 啥博客啊?编辑了我半天怎么换个行 ...

  8. matlab 向量_COMSOL与MATLAB联合仿真+RBF神经网络预测输出

    数值仿真软件 COMSOL 一是款功能强大的多物理场仿真软件,包含电磁学.流体流动等领域,可以解决电阻抗成像的正问题.这里简单给大家介绍一个电阻抗成像数值仿真的案例: 1. 首先,打开软件新建一个空白 ...

  9. saber与matlab联合仿真

    saber与matlab联合仿真实现(saber2012-matlab2010b) saber与matlab联合仿真时,saber作为主仿真器,调用matlab的模型,反之不可. (1)点击图片中的图 ...

最新文章

  1. 涂抹mysql 完整_涂抹mysql笔记-管理mysql服务
  2. 查看imooc服务器文件
  3. 联想电脑怎么进入Android,联想电脑怎么连接手机
  4. shell中trap捕捉到信号的处理
  5. 【数据分析实例】数据领域的兄弟们的数据分析
  6. android assets文件夹资源的访问
  7. 漫步最优化一——引言
  8. ASP.NET中Url重写后,打不开真正的Html页面
  9. Windows下memcached.exe的安装与配置
  10. springboot如何使用外部tomcat容器
  11. Android杂谈--ListView之BaseAdapter的使用一(转)
  12. Linux基础命令---cp
  13. python和循环语句_Python 小白零基础入门 -- 条件语句和循环语句
  14. ERROR Request failed with status code 404 :at createError (node_modules\axios\lib\core\createError.
  15. JavaScript 代码的加入
  16. Centos 6.3下使用源码安装Mysql 5.5
  17. linux 系统运维小工具
  18. Canal | 工作原理、安装部署、使用第三方插件与SpringBoot完美整合
  19. ROS激光雷达导航调试记录
  20. 基于python网络爬虫的个性化音乐播放器

热门文章

  1. 这几个网站的使用技巧,值得反复读,反复练~
  2. Windows的hosts文件所在位置
  3. c++并发编程实战 第一章
  4. gridview发布后,编辑改为edit 原因是未安装 dotNetFx40LP_Full_x86_x64zh-Hans中文语言包...
  5. GDPR全文翻译(一)
  6. fatal error LNK1120: 1个无法解析的外部命令
  7. python连接MySQL数据库的示例代码
  8. oracle配置文件(profile文件)
  9. 100多年前人们心中的2018年:部分预测已成现实
  10. seo引流怎么做?SEO引流方法有哪些?如何做好seo引流