转自: https://blog.csdn.net/weijimin1/article/details/88345180
【嵌牛导读】:本文介绍了使用Vissim 8.0学生版与Matlab对单个路况的联合仿真
【嵌牛鼻子】:Vissim Matlab
【嵌牛提问】:如何通过vissim与MATLAB进行联合仿真?
【嵌牛正文】:
此处在路网对象栏中设置
注:所有的路网对象只有选中为深颜色时,才可以在路网编辑器中添加对应的路网对象。
在路网编辑器中 按住Ctrl键+鼠标右键 往道路行驶方向拖动鼠标,则可以新建一个路段。松开鼠标右键后会d出路径的属性框。在其中可以设置路段的宽度、车道数等属性信息。
当路网为浅灰色时,则路网编辑器中则隐藏对应的网络对象。
路口中间的右转、直行、左转都是采用连接器进行连接。为了使连接更加平滑,连接器属性中的中间点应当多设置一些。在连接器的的属性中需要设置连接器的起点路段和终点路段。
此处在菜单 列表->私人交通->车辆组成 中设置,在d出的框中设置车辆的属性
在d出的框内设置车辆输入的属性
在菜单栏中 信号控制->信号控制机 d出如下框
右键选择上述长条框,单击编辑 d出如下框
点击其中的 编辑信号控制机 按钮
在d出的 界面中
设置信号灯组 , 绿间隔矩阵, 信号配时方案
注:信号灯组的解释,对于4相位的交叉路口配时方案,东西直行为一个信号灯组,东西左转为一个信号灯组,南北直行为一个信号灯组,南北左转为一个信号灯组,总共4个信号灯组。
信号配时方案的界面如下所示,其中的绿灯、红灯的时间可以通过鼠标拖动对应颜色的边沿进行调整。其中信号灯组1中的绿色的条中的1 23 表示信号灯组1绿灯时间是从第1秒至第23秒。信号灯组二的绿灯时间是从第27秒至第47秒。
注意:不同灯组的绿灯时间在竖直方向不能有重叠,否则会导致绿灯冲突。
在路网对象栏中选中 信号灯头,如下图所示
在路网编辑中需要放置信号灯头的位置按住 ctrl + 鼠标右键,松开鼠标右键,会d出 信号灯的属性框
注:该信号灯属性框中,需要跟步骤四中的信号控制机进行关联,关联其中的信号灯控制器和信号灯组。
在路网对象中选中排队计数器,将交叉路口每个车道停止线处添加一个排队计数器。
在菜单栏中 评估->配置 d出的对话框中选中 结果特征属性 在对应的表格中将 排队计数器 打勾 ,点击更多来 定义排队。
点击 菜单栏 中的 仿真->连续 就可以开始进行仿真。在 仿真->参数 中可以设置仿真精度、仿真时间等仿真相关的参数。
在菜单栏中 评估->窗口->信号配时表 可以看到实时运行的信号控制机的对应的信号时间表。如上图中的红色框内。
在菜单栏中 评估->结果列表中查看到各种运行结果信息。
以下为排队的结果(评估->结果列表->排队结果)
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中显示的对象见下图,其中没有红绿灯的设置。
————————————————
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)