错误使用 Interface.859B5C7B_C2E8_49DD_9F47_B0255136F3CC/GetResult
The specified configuration is not defined within VISSIM.
: VISSIMCOM.HLP
ID: 20080
出错 ALINEA (第 98 行)
Vdownstream1(tc1)=datapoint_1.GetResult('NVEHICLES','SUM',0);
代码:%% Connecting the COM serverm =>Open a Vissim Window:clear all;clc;Vissim = actxserver('Vissim.Vissim.430');%% Load a Vissim Network:Path_of_COM_example_network=cd; %C:\Users\Hansome\Deskstop\快速路仿真;Vissim.LoadNet('C:\Users\86187\Desktop\毕业设计\新建文件夹\新建文件夹\ALINEA\ALINEA\快速路.inp'); %路网载入;Vissim.LoadLayout('C:\Users\86187\Desktop\毕业设计\新建文件夹\新建文件夹\ALINEA\ALINEA\vissim.ini'); %路网评价等相关设置载入;%% define some short names: vnet = Vissim.Net;sim = Vissim.Simulation;eval = Vissim.Evaluation;%信号机及其信号灯组:SignalController1=vnet.SignalControllers.GetSignalControllerByNumber(1);SignalController2=vnet.SignalControllers.GetSignalControllerByNumber(2);SignalGroup1=SignalController1.SignalGroups.GetSignalGroupByNumber(1);SignalGroup2=SignalController2.SignalGroups.GetSignalGroupByNumber(1);%排队长度检测器:Queuecounter1=vnet.Queuecounters.GetQueueCounterByNumber(1);Queuecounter2=vnet.Queuecounters.GetQueueCounterByNumber(2);%延误检测器,不一定使用:MainDelayaera=vnet.Delays.GetDelayByNumber(1);RampDelayaera_1=vnet.Delays.GetDelayByNumber(2);RampDelayaera_2=vnet.Delays.GetDelayByNumber(3);WaveDelayaera_1=vnet.Delays.GetDelayByNumber(4);WaveDelayaera_2=vnet.Delays.GetDelayByNumber(5);% 检测器定位(在vissim评价里进行分组后,一组的数据只需取第一个检测器即可):datapoints = vnet.Datacollections;%其值等于检测器的分组数目;datapoint_1 = datapoints.GetDataCollectionByNumber(1);%交织区1datapoint_5 = datapoints.GetDataCollectionByNumber(5);%交织区2datapoint_11 = datapoints.GetDataCollectionByNumber(11);datapoint_14 = datapoints.GetDataCollectionByNumber(14);datapoint_17 = datapoints.GetDataCollectionByNumber(17);datapoint_20 = datapoints.GetDataCollectionByNumber(20);datapoint_101 = datapoints.GetDataCollectionByNumber(101);%入口匝道1出口datapoint_102 = datapoints.GetDataCollectionByNumber(102);%入口匝道1入口datapoint_103 = datapoints.GetDataCollectionByNumber(103);%出口匝道1datapoint_201 = datapoints.GetDataCollectionByNumber(201);%入口匝道2出口datapoint_202 = datapoints.GetDataCollectionByNumber(202);%入口匝道2入口datapoint_203 = datapoints.GetDataCollectionByNumber(203);%出口匝道2%% 导入路网交通需求,并设置% 导入excel格式的路网需求,可通过改变excel中的数据进行设置demand = xlsread('交通需求.xls','Sheet1','B2:D25');for i=1:24 vehins = vnet.VehicleInputs; vehins.GetVehicleInputByNumber(i).set('AttValue','Volume',demand(i,1));% 主线需求endfor i=25:48 vehins = vnet.VehicleInputs; vehins.GetVehicleInputByNumber(i).set('AttValue','Volume',demand(i-24,2));% 入口匝道1需求endfor i=49:72 vehins = vnet.VehicleInputs; vehins.GetVehicleInputByNumber(i).set('AttValue','Volume',demand(i-48,3));% 入口匝道2需求end%可在VISSIM中手动设定交通需求,单这样做只需改变excel;%% Simulation settingsperiod_time = 7201;%经过多次试验发现,如果仿真周期最后一秒恰好是检测周期最后一秒,则最后一个数据无法返回,所以多设一秒;sim.set('Period',period_time);step_time = 1;sim.set('Resolution',step_time); %设置仿真步长,数值越大,仿真越平滑,仿真速度有所降低;sim.set('speed',0);R=[240,400,600,720,900,1200,1440];a=[13,7,4,3,2,1,0.5];%% ALINEA算法% ALINEA参数T=60;KR=60;OCCcrtical_1=0.45;OCCcrtical_2=0.45;%临界占有率 r_1=zeros(1,7200/T+1); r_2=zeros(1,7200/T+1); Vdownstream_1=zeros(1,7200/T); Vdownstream_2=zeros(1,7200/T); Vmain_1=zeros(1,7200/T); Vmain_2=zeros(1,7200/T); Vmain_3=zeros(1,7200/T); Vmain_4=zeros(1,7200/T); OCCdownstream_1=zeros(1,7200/T); OCCdownstream_2=zeros(1,7200/T); Vonrampout_1=zeros(1,7200/T); Vonrampin_1=zeros(1,7200/T); Vonrampout_2=zeros(1,7200/T); Vonrampin_2=zeros(1,7200/T); Vofframp_1=zeros(1,7200/T); Vofframp_2=zeros(1,7200/T); Queue_1=zeros(1,7200/T); Queue_2=zeros(1,7200/T); for tc=1:7200/T for tc1=1:T sim.RunSingleStep;%% 获取下一个控制周期交通状态:% 获取检测器的车流量: Vdownstream1(tc1)=datapoint_1.GetResult('NVEHICLES','SUM',0); Vdownstream2(tc1)=datapoint_5.GetResult('NVEHICLES','SUM',0); Vmain1(tc1)=datapoint_11.GetResult('NVEHICLES','SUM',0); Vmain2(tc1)=datapoint_14.GetResult('NVEHICLES','SUM',0); Vmain3(tc1)=datapoint_17.GetResult('NVEHICLES','SUM',0); Vmain4(tc1)=datapoint_20.GetResult('NVEHICLES','SUM',0); Vonrampout1(tc1)=datapoint_101.GetResult('NVEHICLES','SUM',0); Vonrampin1(tc1)=datapoint_102.GetResult('NVEHICLES','SUM',0); Vonrampout2(tc1)=datapoint_201.GetResult('NVEHICLES','SUM',0); Vonrampin2(tc1)=datapoint_202.GetResult('NVEHICLES','SUM',0); Vofframp1(tc1)=datapoint_103.GetResult('NVEHICLES','SUM',0); Vofframp2(tc1)=datapoint_203.GetResult('NVEHICLES','SUM',0); OCCdownstream1(tc1)=datapoint_1.GetResult('OCCUPANCYRATE','SUM',0);%round是四舍五入; OCCdownstream2(tc1)=datapoint_5.GetResult('OCCUPANCYRATE','SUM',0); Vdownstream_1(tc)=Vdownstream_1(tc)+Vdownstream1(tc1);%输出一个控制周期内的车辆数 Vdownstream_2(tc)=Vdownstream_2(tc)+Vdownstream2(tc1); OCCdownstream_1(tc)=OCCdownstream_1(tc)+OCCdownstream1(tc1); OCCdownstream_2(tc)=OCCdownstream_2(tc)+OCCdownstream2(tc1); Vmain_1(tc)=Vmain_1(tc)+Vmain1(tc1); Vmain_2(tc)=Vmain_2(tc)+Vmain2(tc1); Vmain_3(tc)=Vmain_3(tc)+Vmain3(tc1); Vmain_4(tc)=Vmain_4(tc)+Vmain4(tc1); Vonrampout_1(tc)=Vonrampout_1(tc)+Vonrampout1(tc1); Vonrampin_1(tc)=Vonrampin_1(tc)+Vonrampin1(tc1); Vonrampout_2(tc)=Vonrampout_2(tc)+Vonrampout2(tc1); Vonrampin_2(tc)=Vonrampin_2(tc)+Vonrampin2(tc1); Vofframp_1(tc)=Vofframp_1(tc)+Vofframp1(tc1); Vofframp_2(tc)=Vofframp_2(tc)+Vofframp2(tc1); end; % 获取检测器的占有率: OCC1(tc)=round(OCCdownstream_1(tc)/T);%round是四舍五入; OCC2(tc)=round(OCCdownstream_2(tc)/T); % 获取排队长度: for tc2=((tc-1)T+1):tcT Queue_1(tc)=Queue_1(tc)+Queuecounter1.GetResult(tc2,'MEAN')/T;%读出的排队长度单位是m; Queue_2(tc)=Queue_2(tc)+Queuecounter2.GetResult(tc2,'MEAN')/T; end%% ALINEA程序 if r_1(tc)>Vonrampin_1(tc)3600/T r_1(tc+1)=Vonrampin_1(tc)3600/T+KR(OCCcrtical_1100-OCC1(tc));%调节率小于入口匝道需求则基于需求进行调节 else if r_1(tc)<0 r_1(tc+1)=240+KR*(OCCcrtical_1100-OCC1(tc)); else r_1(tc+1)=r_1(tc)+KR*(OCCcrtical_1*100-OCC1(tc)); end end; if r_2(tc)>Vonrampin_2(tc)3600/T r_2(tc+1)=Vonrampin_2(tc)3600/T+KR(OCCcrtical_2100-OCC2(tc)); else if r_2(tc)<0 r_2(tc+1)=240+KR*(OCCcrtical_2*100-OCC2(tc)); else r_2(tc+1)=r_2(tc)+KR*(OCCcrtical_2*100-OCC2(tc)); end end;%% 改变信号灯控制:(不能直接定义灯色,只能通过改变周期、红绿灯结束时间来完成) if r_1(tc+1)>=1800 set(SignalGroup1,'AttValue','Type',2);% 信号灯1全绿 else set(SignalGroup1,'AttValue','Type',1); if r_1(tc+1)<0 cycletime_1=15; greenend_1=15; redend_1=13; else [,m_1] = min(abs(R-r_1(tc+1))); redend_1=a(1,m_1); if redend_1==0.5 redend_1=1; greenend_1=5; cycletime_1=5; end greenend_1=redend_1+2; cycletime_1=greenend_1; end set(SignalController1,'AttValue','Cycletime',cycletime_1); set(SignalGroup1,'AttValue','REDEND',redend_1); set(SignalGroup1,'AttValue','GREENEND',greenend_1); end if r_2(tc+1)>=1800 % 信号灯2 set(SignalGroup2,'AttValue','Type',2); else set(SignalGroup2,'AttValue','Type',1); if r_2(tc+1)<0 cycletime_2=15; greenend_2=15; redend_2=13; else [,m_2] = min(abs(R-r_2(tc+1))); redend_2=a(1,m_2); if redend_2==0.5 redend_2=1; greenend_2=5; cycletime_2=5; end greenend_2=redend_2+2; cycletime_2=greenend_2; end set(SignalController2,'AttValue','Cycletime',cycletime_2); set(SignalGroup2,'AttValue','REDEND',redend_2); set(SignalGroup2,'AttValue','GREENEND',greenend_2); end end sim.Stop;%% 仿真评价数据(延误、总行程时间、排队长度)读取并画图:%vissim仿真输出Evaluation = Evaluationfile('快速路.npe', [7,12], [9,12]);%导入vissim仿真评价数据Averagedelay=Evaluation(1);%单位sAveragespeed=Evaluation(2);%单位sTotaldelay=Evaluation(3);%单位hTTT=Evaluation(4);%单位h%作图x1=1:1:120; %仿真运行时间% 交织区1的占有率变化图figure(1);plot(x1,OCC1,'k');xlabel('t(min)');ylabel('Occ(%)');% 交织区2的占有率变化图figure(2);plot(x1,OCC2,'k');xlabel('t(min)'); %横坐标轴名ylabel('Occ(%)'); %纵坐标轴名% 入口匝道1排队长度变化图figure(3);plot(x1,Queue_1,'k');xlabel('t(min)');ylabel('Queue(m)');% 入口匝道2排队长度变化图figure(4);plot(x1,Queue_2,'k');xlabel('t(min)');ylabel('Queue(m)');% 交织区1交通量figure(5);plot(x1,60Vdownstream_1,'k');xlabel('t(min)');ylabel('Volumn(veh/h)');% 交织区2交通量figure(6);plot(x1,60Vdownstream_2,'k');xlabel('t(min)');ylabel('Volumn(veh/h)');figure(7)scatter(OCC1,60Vdownstream_1,'k');xlabel('Occ(%)');ylabel('Volumn(veh/h)');figure(8)scatter(OCC2,60*Vdownstream_2,'k');xlabel('Occ(%)');ylabel('Volumn(veh/h)');
该回答引用GPT:
你的错误提示是VISSIM没有定义指定的配置,可能是你在VISSIM中没有正确配置,请检查你的VISSIM配置是否正确。此外,你的代码中的datapoint_1.GetResult(NVEHICLES'SUM.0)也可能有问题,请检查你的代码是否正确。
如还有疑问,可以私信帮助解决。
该回答引用于gpt与OKX安生共同编写:
这个错误可能是由于您的VISSIM仿真配置与您的MATLAB代码中使用的VISSIM配置不匹配导致的。请确保您在MATLAB中使用的VISSIM配置与您在VISSIM中使用的配置相同。您可以尝试手动在VISSIM中打开仿真配置,并在MATLAB代码中使用完全相同的仿真配置。另外,请确保您的VISSIM版本与您使用的VISSIM COM库版本匹配。如果您使用的是旧版本的VISSIM COM库,则可能会导致此类错误。
参考GPT和自己的思路:根据报错信息,可能是因为你的VISSIM配置有误,导致VISSIMCOM接口无法获取数据。建议检查一下VISSIM的配置是否正确,并确保VISSIM程序已经打开并且模型已经加载。
另外,你也可以尝试查看VISSIM的日志文件,了解更多详细的错误信息。VISSIM日志文件默认保存在VISSIM安装目录下的“\logs”文件夹中,可以尝试打开该文件夹,查看最近的日志文件并查找相关的错误信息。
该回答引用ChatGPT
如有疑问,可以回复我!
这个问题可能是由于在使用 VISSIM 接口时配置错误所导致的。VISSIM 是一个交通流模拟软件,用于建模和分析交通流。这里有一些建议来解决您遇到的问题:
1、确保您使用的 VISSIM 版本与您的代码兼容。有时,新版软件可能会引入一些更改,导致与旧版代码的不兼容。
2、请检查 Interface.859B5C7B_C2E8_49DD_9F47_B0255136F3CC/GetResult 是否已在 VISSIM 代码中正确定义。您可能需要查看 VISSIM 的帮助文档(VISSIMCOM.HLP)以获取更多关于正确定义和使用接口的信息。
3、确保在 VISSIM 中正确定义了配置。如果您正在尝试访问一个未定义的配置,那么您需要创建一个新的配置或者使用一个已经定义的配置。
4、仔细检查您的代码中的 ALINEA 部分(位于第 98 行)。Vdownstream1(tc1) = datapoint_1.GetResult('NVEHICLES', 'SUM', 0) 这行代码似乎在尝试获取一个名为 "NVEHICLES" 的数据点的结果。请确保此数据点在 VISSIM 中已经被正确定义。
Interface.859B5C7B_C2E8_49DD_9F47_B0255136F3CC
这个接口存在么
参考GPT和自己的思路,这个错误提示显示,VISSIM中没有定义指定的配置,导致无法获取结果。可能是因为您在Matlab代码中指定了一个不存在的VISSIM配置或者VISSIM文件已经被更改了。
建议您检查VISSIM配置是否正确,并确保VISSIM文件没有被更改。您可以尝试重新打开VISSIM文件,并确保您的Matlab代码与VISSIM文件的路径一致。
如果问题仍然存在,您可以尝试查看VISSIM的日志文件,以了解更多有关问题的信息。您可以在VISSIM中打开“工具”菜单下的“设置”选项,然后选择“仿真参数”选项卡,将日志文件设置为“详细”,然后重新运行您的Matlab代码以生成新的日志文件。在日志文件中查找有关错误的详细信息,以确定出错的原因,并尝试解决问题。
该回答引用GPTᴼᴾᴱᴺᴬᴵ
这个错误可能是由于您的VISSIM仿真配置与您的MATLAB代码中使用的VISSIM配置不匹配导致的。请确保您在MATLAB中使用的VISSIM配置与您在VISSIM中使用的配置相同。您可以尝试手动在VISSIM中打开仿真配置,并在MATLAB代码中使用完全相同的仿真配置。另外,请确保您的VISSIM版本与您使用的VISSIM COM库版本匹配。如果您使用的是旧版本的VISSIM COM库,则可能会导致此类错误。
根据错误提示,您的代码调用了 VISSIM 的 Interface.859B5C7B_C2E8_49DD_9F47_B0255136F3CC/GetResult 接口并传递了一个未定义的参数。具体来说,出错的原因可能是VISSIM配置文件中没有定义正确的参数或接口名称。
您需要检查 VISSIM 配置文件中是否定义了正确的参数和接口名称。还需要确保您的代码中引用的 VISSIM 版本与系统中安装的版本相匹配。您可以查看 VISSIM 的帮助文档了解具体的接口定义和使用方法,这对您排查错误也会有很大帮助。
这个错误信息是因为你在获取数据时使用了未在 VISSIM 中定义的数据项。你需要确保你请求的数据项名称与 VISSIM 中定义的名称一致。你可以打开 VISSIM 并通过查询 VISSIM 帮助手册中的 “VehiInfList” 查看可用的数据项名称。
如果你已经确定了数据项名称,那么错误可能是因为在 VISSIM 中未定义数据项的默认配置。在这种情况下,你需要打开 VISSIM 网络,将数据项添加到网络中并配置数据项的默认设置,然后再次运行你的代码。