二次开发之前,应首先解决修改时间的问题,具体操作见
https://blog.csdn.net/qq_38439669/article/details/106736422

好了,进入正题
1、利用时间修改工具打开Vissim ,启动Vissim:

vissim=actxserver('VISSIM.vissim.430');%启动vissim
current_path='C:\Users\Desktop\simulation';
vissim.LoadNet([current_path,'\simulatonpm.inp']);%创建Vissim实例,导入路网
vissim.LoadLayout([current_path,'\simulation.ini']);%导入背景
sim=vissim.Simulation;%设置仿真属性
sim.Period=3600;%设置仿真时间
sim.Speed=20;%设置仿真速度
vnet=vissim.Net;%获取路网属性

2、获取路网车辆输入

vehicles_in=vnet.VehicleInputs;
for i=1:vehicles_in.countvehicle_in(i)=vehicles_in.GetVehicleInputByNumber(i); %获取车辆输入
end
for i=1:vehicles_in.countvehicle_in(i).set('AttValue','VOLUME',volume(i)); %为各路段赋予车辆流量
end

3、获取路段属性

for i=1:links.countif isempty(links.GetLinkByNumber(i))break;endlink(i)=links.GetLinkByNumber(i);
end

4、获取信号控制机

scs=vnet.SignalControllers;
for i=1:scs.countsc(i)=scs.GetSignalControllerByNumber(i);
end
for i=1:scs.count-1sc(i).set('AttValue','offset',round(C*double(o(i)))); %为各信号控制机设置初始偏移量
end
for i=1:scs.countsc(i).set('AttValue','cycletime',C); %为各信号机设置信号周期
end
sc(1).SignalGroups.GetSignalGroupByNumber(1).set('Attvalue','Amber',3);    %为第一个信号机第一个 信号灯设置黄灯时间
sc(1).SignalGroups.GetSignalGroupByNumber(1).set('Attvalue','Redend',4);%为第一个信号机第一个 信号灯设置红灯时间
sc(1).SignalGroups.GetSignalGroupByNumber(1).set('Attvalue','Greenend',36);%为第一个信号机第一个 信号灯设置绿灯时间
%具体的可根据需要修改sc(16).SignalGroups.GetSignalGroupByNumber(1).set('AttValue','Type',2);%将第16控制机的第一相位设置为常绿
sc(16).SignalGroups.GetSignalGroupByNumber(2).set('AttValue','Type',3)%将第16控制机的第二相位设置为常红
%1表示定周期;2表示常绿;3表示常红

5、获取停车信号

stops=vnet.stopsigns;for i=1:14stop(i)=stops.GetStopSignByNumber(i);stop(i).set('AttValue1','TIMEDIST',30,2);%为公交设置停车分布2end%小编的vissim车辆种类含义:10表示小汽车;30表示公交

6、获取评价指标(单步仿真评价指标)

eval=vissim.Evaluation;
eval.set('AttValue','DATACOLLECTION',1);%激活评价指标
eval.set('Attvalue','TRAVELTIME',1);
eval.set('AttValue','DELAY',1);for i=1:sim.Period
%获取行程时间评价结果sim.RunSingleStep;%单步仿真time_evals=vnet.traveltimes;for i=1:time_evals.counttime_eval(i)=time_evals.GetTravelTimeByNumber(i).GetResult(600,'TRAVELTIME',0); end%获取平均速度评价结果dats=vnet.Datacollection;for i=1:dats.countspeed_dat(i)=dats.GetDataCollectionByNumber(i).GetResult('600','SPEED','MEAN');end%获取平均延误评价结果delays=vnet.Delays;for i=1:delays.countdelay(i)=delays.GetDelayByNumber(i).GetResult('600','DELAY'); end
%其他评价指标类似
end

7、多次仿真评价结果

eval=vissim.Evaluation;
eval.set('AttValue','DATACOLLECTION',1);
eval.set('Attvalue','TRAVELTIME',1);
eval.set('AttValue','DELAY',1);for i=35:50randseed=i;sim.set('RandomSeed',randseed);sim.RunContinuous;%连续仿真sim.Stop;adr1=[current_path,'\simulatonpm.mes'];speed_mean(i-34)=importdata(adr1);%从文件导入数据adr2=[current_path,'\simulatonpm.rsz'];traveltime{i-34}=importdata(adr2);adr3=[current_path,'\simulatonpm.vlz'];dlay{i-34}=importdata(adr3);
end

授人以鱼不如授人以渔,利用matlab进行vissim二次开发具体操作可根据下图指示:
1、首先打开并运行一个vissim程序。

运行结果如下所示

2、点击vissim变量打开属性框,我们可以看到vissim下面的子属性通过加’.'的方式获得,例如:(注意区分大小写)


3、对照vissim二次开发操作手册书写代码,例如:

注意,查看某属性的值与为该属性赋值分别为:

net.SignalControllers.GetSignalControllerByNumber(1).AttValue('cycletime')%查看信号控制机1的当前信号周期
net.SignalControllers.GetSignalControllerByNumber(1).set('AttValue','cycletime',120)%设置信号控制机1 的周期为120
net.SignalControllers.GetSignalControllerByNumber(1).AttValue('cycletime')%查看设置后的信号周期

运行结果为:

另外,附上vissim开发手册与二次开发手册(中文版)下载地址:
https://download.csdn.net/download/qq_38439669/12521618
好了,利用matlab进行vissim二次开发的操作大概都在这了。

博文不易,欢迎关注‘一个交通人’

利用matlab进行Vissim二次开发,史上最详细相关推荐

  1. python接入Vissim二次开发,源码

    python接入Vissim二次开发,源码,刚开始学习,为了写论文,一样的朋友可以一块研究代码 代码地址 DQN VISSIM4.3 tensorflow1.2.0 https://github.co ...

  2. ESP8266 Non-OS SDK 开发之旅 基础篇① 初识 Non-OS SDK,史上超级详细手把手教小白20分钟快速搭建SDK软件开发环境,完成第一个例子Hello World!

    文章目录 1.前言 2. SDK概述 2.1 SDK使用流程 2.2 ESP8266 HDK -- 硬件开发工具 2.3 ESP8266 SDK -- 软件开发工具包 2.3.1 Non-OS SDK ...

  3. NX二次开发-UFUN获取工程图详细信息UF_DRAW_ask_drawing_info

    NX二次开发-UFUN获取工程图详细信息UF_DRAW_ask_drawing_info NX9+VS2012#include <uf.h> #include <uf_draw.h& ...

  4. Matlab重复测量的方差分析,两因素重复测量方差分析,史上最详细SPSS教程!

    原标题:两因素重复测量方差分析,史上最详细SPSS教程! 一.问题与数据 研究者想知道短期(2周)高强度锻炼是否会减少C反应蛋白(C-Reactive Protein, CRP)的浓度. 研究者招募了 ...

  5. Matlab系列之二维图形(上)

    Matlab系列之二维图形(上) 简要 绘制基础 plot 文字标注 (1) 添加图形标题 (2)添加坐标轴标注 (3)图例 (4)文本注释 示例 程序 结果 线型.点型和颜色 坐标轴设置 示例 结果 ...

  6. GitChat·大数据 | 史上最详细的Hadoop环境搭建

    GitChat 作者:鸣宇淳 原文: 史上最详细的Hadoop环境搭建 关注公众号:GitChat 技术杂谈,一本正经的讲技术 [不要错过文末彩蛋] 前言 Hadoop在大数据技术体系中的地位至关重要 ...

  7. 史上最详细全中文 Cisco 3560交换机使用手册

    史上最详细全中文 Cisco 3560交换机使用手册 (末尾送交换机安全技术) 目 录 CISCO Catalyst 3560-E系列交换机的功能应用及安全解决方案 3 一.Cisco? Cataly ...

  8. Kafka史上最详细原理总结(一)

    Kafka史上最详细原理总结 一.概念理解 (1)产生背景 (2)Kafka的特性 (3)Kafka场景应用 (4)Kafka一些重要设计思想 二.消息队列通信的模式 (1)点对点模式 (2)发布订阅 ...

  9. 史上最详细的LXR安装介绍

    史上最详细的LXR安装介绍(Ubuntu14.04+Apache2.4.7) 简介: LXR (Linux Cross Reference)是一个通过交叉索引方便用户查看项目源代码的工具.项目地址:h ...

  10. 史上最详细sql注入wp

    文章目录 sql注入wp(史上最详细) 前言 什么是SQL注入? SQL注入的原理 常见的注入方式 常见绕过技巧 常见防控SQL注入的方法 手工查询语句 Basic Challenges Less-1 ...

最新文章

  1. 优酷路由宝刷梅林_优酷路由宝刷breed(不死)教程
  2. 蓝桥杯 错误票据 (stringstream的使用)
  3. '$.browser.msie' 为空或不是对象
  4. VDP文件级恢复需要在用VDP备份的机器上浏览
  5. OpenJDK织机和结构化并发
  6. opencv如何把一个矩阵不同列分离开_学习OPEN_CV
  7. 简洁css竖型tab选项卡(用)
  8. stmcubemx 脉冲计数_STM32CubeMX:ETR外部脉冲计数器
  9. git的历史版本拉分支、回撤revert、回退reset
  10. 如何将数据库删除干净
  11. AngularJs中input uib-typeahead 搜索加自动补全 注意点
  12. 计算机培训机构年终总结范文,2020老师培训年终工作总结范文5篇
  13. (附源码)springboot金融新闻信息服务系统 毕业设计651450
  14. 导出 Excel 表格
  15. 【论文阅读】DenseCLIP: Language-Guided Dense Prediction with Context-Aware Prompting
  16. 换算rem的宽度和高度不生效 chrome字体最小为12px
  17. 机器学习——【2】史上最全“特征工程“介绍
  18. 专访架构师周爱民:谈企业软件架构设计 1
  19. Python爬虫自学系列(七) -- 项目实战篇(一)
  20. 慎独,是自律的最高层次

热门文章

  1. mysql执行计划(explain)
  2. STM8S——Analog/digital converter (ADC)
  3. libsqlite3.dylib找不到
  4. IIS下发布关于Excel导入导出时遇到的问题集锦
  5. cvThreshold() 阈值化
  6. Python图像处理(1)
  7. extern 的使用方法介绍
  8. nginx处理域名后面多一个点
  9. java怎样将多个list写入txt中并且不覆盖原有数据_深入理解JVM,Java程序猿必备修炼之路...
  10. 比较贵的计算机配置,什么电脑配置好 几款配置比较豪华的笔记本电脑推荐【图文】...