首页 VISSIM_API_cn

VISSIM_API_cn

举报
开通vip

VISSIM_API_cn VISSIM 信号控制机 DLL接口 LK 2007-05-23 本文档说明了在仿真运行期间外部信号控制机是怎么样通过 VISSIM 全新的 DLL 接口来使用的(从 VISSIM4.10起可以使用)。 简介 VISSIM 中有两种可以直接使用信号控制机的类型,一种是定周期的,一种是 VAS。其他所有的信号控制机类型都是外部的,并且每一种都需要相应的程序文件来 支持。如果该程序文件是使用了老的 DDE 接口的可执行文件(.exe),在仿真执行期 间每个信号控制机都会创建一个.exe 的实例。如果我...

VISSIM_API_cn
VISSIM 信号控制机 DLL接口 LK 2007-05-23 本文档说明了在仿真运行期间外部信号控制机是怎么样通过 VISSIM 全新的 DLL 接口来使用的(从 VISSIM4.10起可以使用)。 简介 VISSIM 中有两种可以直接使用信号控制机的类型,一种是定周期的,一种是 VAS。其他所有的信号控制机类型都是外部的,并且每一种都需要相应的程序文件来 支持。如果该程序文件是使用了老的 DDE 接口的可执行文件(.exe),在仿真执行期 间每个信号控制机都会创建一个.exe 的实例。如果我们的程序文件是使用了最新 DLL 接口的动态链接库文件(.dll)。这就意味着在仿真运行期间,我们只需要加载一次 dll 文件就可以控制相关的信号控制机的逻辑和数据。 信号控制机的频率(通常为 1/S)是指每一仿真秒信号控制机刷新(通过控制机的 逻辑)的次数。在程序初始化时由外部信号控制机来设置。VISSIM 仿真的精度(每一 仿真秒的仿真时间步长)必须是信号控制机频率的倍数。非倍数的数值会引起运行时 的错误(例如:如果仿真精度为 10,信号控制机的频率为 2,VISSIM在 2个信号逻辑 中间会完成 5个时间仿真步长)。 在每个信号控制机的时间步长中,VISSIM 在当前仿真时间步长结束时都会和所有 信号控制机的 DLL 通信。首先,当前的信号灯状态和所有信号控制机的检测器数据都 将传送到相关的 DLL 文件中。第二步,DLL 文件被要求来计算稍后会回传到 VISSIM 的期望的信号灯的状态。根据控制机逻辑的参数设置,无论是信号状态立即响应还是 自动插入相应的转换状态(例如,当从绿灯变为红灯时,需要加入黄灯),都会像 VISSIM 中定义信号灯组参数一样。在下一仿真时间步长,VISSIM 中的车辆将会检测 到新的信号灯状态。 模块结构 VISSIM 信号控制 DLL 的源代码由控制与 VISSIM 通信的框架以及包含了感应控 制逻辑的主 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 组成。PTV 已经完成这个框架的 C(++)源代码,用户只需要编写 sc_dll_main.cpp 这个文件来实现与主函数的连接。当然,主函数也必须是以 C (++)源代码的形式存在。合适的主函数必须通过 sc_dll_main.cpp 来调用,同时 它也能从自身的 sc_dll_functions.cpp/.h 文件中调用数据读取函数。主函数 DLL 通信的具体技术细节是开放透明的。 (如果一个含有存在接口(例如,TCP/IP)的控制进程连接到 VISSINM,我们建议 用户在 VISSIM 数据格式和控制机数据格式间,创建一个信号控制 DLL 文件。在这种 情况下,信号控制 DLL和控制机进程间的通信操作需要在主函数中定义完成。) 控制 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 仿真一开始 VISSIM 就会加载当前路网文件中至少一个信号控制机的 DLL。 (DLL文件必须和 vissim.exe存放在同一 目录 工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录 下或在当前的数据路径中。) 随后按顺序进行的 SC初始化包含两个步骤: 第一,VISSIM 调用 SC_DLL_ReadDataFiles()函数。这个函数具有最多 2 个数 据文件名做为参数,该参数可以输入到 VISSIM的 SC对话框中。如果外部信号控制机 使用数据文件,例如,不是所有的程序都必须在 dll 中编写代码,一个需要读取这些数 据文件的主函数需要通过 SC_DLL_ReadDataFiles()调用。 第二,VISSIM 调用 SC_DLL_Init()函数。如果需要的话,主函数通过该函数来 初始化控制机的逻辑。如果信号控制机的频率不是默认值,SC_DLL_Init()将会调用 SC_SetFrequency()函数。 在 每 一 个 控 制 时 间 步 长 里 , VISSIM 都 会 为 每 一 个 SC 调 用 一 次 SC_DLL_Calculate()。通过这个函数,主函数被调用并通过信号控制机逻辑来执 行。通过 sc_dll_functions.cpp/.h 函数模块,主函数可以连接到检测器数据和获 得信号灯的信息(全部使用该 DLL 的 SC)。在同一模块里,还具有可以设置信号灯 新状态以及传送其它路网参数到 VISSIM 中功能的函数,以及运行错误信息显示函 数。从 SC_DLL_Calculate()中返回后,新的信号灯状态将被设置,其它需要从 DLL 传回 VISSIM的参数将被自动传回。 在运行仿真结束后,VISSIM 会为每一个 SC 调用一次 SC_DLL_Cleanup()。如果 需要,信号控制逻辑函数将退出。 如果在仿真期间,用户选择仿真 /保存 Snapshot, VISSIM 将会调用 SC_DLL_WriteSnapshotFile()函数。控制机的 DLL会在 snapshot文件中保存完整的 内部状态,使用原有的文件名(*.snp加 SC编号)。 如果用户在 VISSIM 菜单中选择仿真 /加载 Snapshot,VISSIM 将会先调用 SC_DLL_ReadDataFiles()函数后再调用 SC_DLL_ReadSnapshotFile()函数而不是 之前的 SC_DLL_Init()函数。 框架的执行 作为一种新的信号控制类型,VISSIM 的信号控制 DLL 只需要用户编写 sc_dll_main.cpp 和 lsa_rahm.h两个文件。框架中的其它模块不用更改。(PTV公 司在将来可能会对框架进行修改,但是从两方面同时进行修改的难度较大。当然,我 们始终欢迎广大的用户为我们提出宝贵的意见和建议。) lsa_rahm.h中需要修改的部分: • 定义 CONTROLLER_DLL_NAME为一个包含了新 DLL名称的字符串 sc_dll_main.cpp中需要添加的部分 • SC_DLL_ReadDataFiles()用来读取控制机的数据文件,该数据文件需要和 *.inp文件放置在同一目录下。 • SC_DLL_Init()用来初始化控制机(如果该初始化函数存在) • SC_SetFrequency()用来设置控制机的频率,当控制机的频率不同于默认值 时。它位于 SC_DLL_Init()函数中。所有外部信号控制机的频率需要一致(未 来可能会修改。) • SC_DLL_Calculate()用来计算每一个时间步长的信号逻辑。如果信号控制机 是网络控制类型,它可能只需要调用一次控制逻辑在每一个控制时间步长,但 是 SC_DLL_Calculate()为 VISSIM中 SC的调用由 DLL来控制。在这种情况 下,一些检测代码需要插入,如果这是一个新的控制时间步长,例如,在上次 调用 SC_DLL_Calculate()期间,比较 Sim_Time()当前返回值和分配到该值 的静态变量。 • SC_DLL_Cleanup()用来退出控制,清空分配的内存。 • SC_DLL_WriteSnapshotFile()用来将控制机的内部状态写入到 snapshot 文件 中 (*.snp) • SC_DLL_ReadSnapshotFile()用来读取之前写入 snapshot 文件 (*.snp)的控 制机数据。先调用初始化函数(如果存在)。 所有的说明都在源代码中使用###中标出。 项目属性: • SC_DLL_EXPORTS 为了编译 DLL 必须在预处理程序中定义(Microsoft Visual C++ 7.0 under Properties – C/C++ – Preprocessor – Preprocessor Definitions) • 英文的错误信息 lsa_ra_e.rc 德文的错误信息 lsa_rahm.rc 需要包含在项目 内(头文件都是 lsa_rahm.rh) 主函数的执行 在执行 SC_DLL_Calculate()期间,所有在 sc_dll_functions.h 头文件中的函 数都可以通过主函数来调用,例如,连接检测器数据和从 VISSIM 获得信号灯信息。 新的信号灯的状态也是从主函数通过函数 SG_SetState()来设置,并自动将 SC_DLL_Calculate()的返回值传回到 VISSIM。如果 SC 具有不同的周期时长, SC_SetCycleSecond()函数将被调用,以便使 VISSIM 获得当前的周期时间。通过 SC_WriteRecordValue()函数信号控制机/检测器的数据或信号时间表窗口都会被反 馈给 VISSIM。所有的 SC,信号灯组和检测器的编号做为 sc_dll_functions.cpp 中 的参数用于定义 VISSIM 中相关对象。如果控制机逻辑使用了不同的内部编号,主函 数必须自己来寻找对应关系。当所有的 VISSIM SC使用同一个控制机 DLL文件时,主 函数需要操作多个信号控制机的数据-除非每一个 VISSIM SC 都分配一个不同的 DLL。 如果函数 IsConsoleMode()返回值为 TRUE,主程序将不会在屏幕(对话框或窗 口)显示任何 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 。如果 VISSIM 运行在控制台模式下,例如,并行计算版本中,多 次运行或用户通过 COM来调用启动程序。 DLL 文件创建的输出文件名应该包含了函数的 ProcessSimRunID()返回值,如果 返回值不是 0。该代码由 VISSIM 生成,用来指示进程的 ID(在并行计算中)和仿真 运行的索引(在多运行模式下):100 * 进程 ID + 仿真运行索引 (从 1开始). VISSIM中的执行 通常一个新的信号控制 DLL 能过直接连接到 VISSIM 而不需要改变任何源代码。 在这种情况下,SC 的类型需要选择为“外部”。(请看文档 Signal GUI DLL Interface,来在 VISSIM附加的窗口中编辑控制机和信号灯组数据)。只有 PTV的开发 部门才可以在 VISSIM SC 列表中添加新的控制类型。如果信号控制 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 需要额外的数 据,而 VISSIM 现有框架中又不能直接提供的话,这就需要 PTV 开发人员来参与支持 开发。 每一个 VISSIM使用的信号控制 DLL都需要由一个或多个*.wtt文件组成(用户在 信号控制窗口中定义)。通常,我们只需要一个空白文件,但是如果需要额外的参数 (除了 VISSIM 中直接可用的信号灯组的状态和检测器的状态)从 DLL 中发送到信号 时间表或 SC/检测器记录中,用户就需要自定义一个*.wtt 文件。 External DriverModel.DLL for VISSIM ( 从 VISSIM 3.60版本可用) 外部驾驶员模型接口 =================================== VISSIM 运行期间,库文件 DriverModel.DLL 必须存在于 EXE 文件夹下。软件版 本中默认自带的 DriverModel.DLL 除了发送加速度/减速度和车道变化数据给 VISSIM 外,并没有其它功能。 对于每一种车辆类型,用户都可以在车辆类型对话框中的“外部驾驶员模型”标 签中选择不同的外部驾驶员模型。如果该选项被选中, VISSIM 将调用 DriverModel.DLL 中的函数来确定每种车辆类型的加速度/减速度和车道变化的情况。 位于 EXE 文件夹中的 DriverModelData 文件夹用来避免在 VISSIM 启动时产生警告信 息。 DriverModel.cpp: 该文件是 DriverModel.DLL 的主源文件。该文件的默认版本不会产生任何效果 (见上文)。请注意,用户需要在本地变量中保存 VISSIM 生成的数值(通过调用 DriverModelSetValue()),这是为了当 VISSIM 在每车辆每时间步长中使用 DriverModelExecuteCommand (DRIVER_COMMAND_MOVE_DRIVER)命令后调用函数 DriverModelGetValue()时,相关的数据可以传回到 VISSIM中。 该 源 文 件 是 用 户 需 要 编 写 自 己 驾 驶 员 模 型 函 数 的 地 方 。 在 函 数 DriverModelSetValue()中,驾驶行为决策需要的数据必须保存在附加的本地变量中。用 户通过 DriverModelExecuteCommand()调用外部驾驶员模型函数,这种情况下的 DRIVER_COMMAND_MOVE_DRIVER的返回值不为 1. 如果结果数值是由外部驾驶员 模型直接设置的,DriverModelGetValue()函数就不需要用户再来修改。 DriverModel.h: DriverModel.DLL的头文件(需要放置在 VISSIM中)。不能修改。 这里定义了驾驶员模型中 VISSIM的“类型”和“编号”常量值。 DriverModel.vcproj: DriverModel.DLL 的 Visual C++ 7.0项目文件。如果用户的 DriverModel.DLL文件 是由 Microsoft Visual C++创建生成的,该文件可能会有用。如果用户不使用项目文件 (或它不起作用),请不要忘记在编译 DriverModel.cpp 时在项目编译选项中预先定义 DRIVERMODEL_EXPORTS。 (LK 2005-03-23) External EmissionModel.DLL for VISSIM 排放模块接口 ===================================== (VISSIM许可中必须包含排放模块才可以使用) 对于每一种车辆类型,用户都可以在车辆类型对话框中的选择不同的排放模型 (标签“特殊的”下部)。如果该选项被选中,VISSIM 将会调用 EmissionModel.DLL 中的函数来计算用于车辆记录和路段评价的排放值。 EmissionModel.cpp: EmissionModel.DLL 的主源文件。这是一个给 VISSIM 发送常数(benzene 0.01 ... HV evaporation 0.12)的伪程序。通过###标出的部分就是用户需要添加修改自己排放模 型的地方。 EmissionModel.h: EmissionModel.DLL的头文件(需要放置在 VISSIM中)。不能修改。 这里定义了排放模型中 VISSIM的“类型”和“编号”常量值。 EmissionModel.vcproj: EmissionModel.DLL 的 Visual C++ 7.0项目文件。如果用户的 DriverModel.DLL文 件是由 Microsoft Visual C++创建生成的,该文件可能会有用。如果用户不使用项目文 件(或它不起作用),请不要忘记在编译 EmissionModel.cpp 时在项目编译选项中预先 定义 EMISSIONMODEL_EXPORTS。 (LK 2005-03-24) VISSIM Signal Controller GUI DLL Interface =================================== 外部的 GUI DLL 用于 SC 的“NEMA”和“外部的”信号控制类型。这种控制机 的所有数据只能在 DLL的 GUI中编辑并且只能保存在一个(或两个)独立的数据文件 中。在 VISSIM 中,用户只可以编辑 DLL 和信号控制机的名称(数据文件的名称将会 在“外部信号控制机”对话框中显示,但是用户不能在此修改)。这四个文件名全部 保存在*.INP文件中。 GUI DLL函数在下面的两种情况下被调用: A)当用户在“控制机(外部的)”标签中选择了“参数”选项。 B)仿真运行开始时 在情况 A下,用户想要编辑信号控制机的参数然后回到 VISSIM。流程如下: 1) VISSIM使用 SIGNALGUI_COMMAND_INIT_CONTROLLER和所选的信号控制机 编号作为参数来调用 SignalGUIExecuteCommand ()函数。DLL初始化控制机的数据 结构(尤其是该信号控制机信号灯组的配置)。 2) 通过多次调用 DLL函数 SignalGUISetValue(),VISSIM将 input文件名,路径和数 据文件名(如果之前未选择 DLL GUI则为空)传回到 DLL中。 3) VISSIM 使用 SIGNALGUI_COMMAND_READ_DATA_FILES 作为参数来调用 SignalGUIExecuteCommand ()函数。GUI DLL读取数据文件(如果存在)。 4) 通过多次调用 DLL函数 SignalGUISetValue(),VISSIM将定义好的信号灯组传回到 DLL中。(如果控制机类型为 NEMA,来自 VISSIM许可的 NEMA层将同样被传 回。) 5) VISSIM 使 用 SIGNALGUI_COMMAND_EDIT_SC_PARAMETERS 或 是 _SG_PARAMETERS作为参数来调用 SignalGUIExecuteCommand ()函数。 GUI DLL显示了一个对话框/窗口(可能是子对话框)。 用户可以在其中编辑信号控制的参数并通过“取消”或“确定”来关闭它。 如果点击了“确定”,DLL将保存所有的修改到数据文件。 DLL关闭对话框。 返回被调用的的函数 SignalGUIExecuteCommand ()。 6) VISSIM通过多次调用 DLL函数 SignalGUISetValue()来获得控制机的基本数据(周 期和数据文件的名称)和新的信号灯组配置:首先所有信号灯组的编号改变(它将 传送到所有涉及到旧编号的路网元素,例如,信号灯,红灯右转标志,优先规 则),然后新的信号灯组编号被创建,最后(可能会)改变所有信号灯组的名称。 在情况 B下,VISSIM需要将基本的信号控制数据回传到控制机 EXE中(通过 DDE 接口)。流程如下: 1)VISSIM 使用 SIGNALGUI_COMMAND_INIT_CONTROLLER 和所选的信号控制机 编号作为参数来调用 SignalGUIExecuteCommand ()函数。DLL初始化控制机的数据 结构(尤其是该信号控制机信号灯组的配置) 2)通过多次调用 DLL 函数 SignalGUISetValue(),VISSIM 将 input 文件名,路径和数 据文件名(如果之前未选择 DLL GUI则为空)传回到 DLL中。 3)VISSIM 使用 SIGNALGUI_COMMAND_READ_DATA_FILES 作为参数来调用 SignalGUIExecuteCommand ()函数。GUI DLL读取数据文件(如果存在)。 4)通过多次调用 DLL函数 SignalGUISetValue(),VISSIM将定义好的信号灯组传回到 DLL中。(如果控制机类型为 NEMA,来自 VISSIM许可的 NEMA层将同样被传 回。) 5)VISSIM 使用 SIGNALGUI_COMMAND_CHECK_SG_NUMBERS 作为参数调用 SignalGUIExecuteCommand()。如果 VISSIM 中信号灯组的配置和数据文件中的一 致,返回 1,否则返回 0。 6)如果返回 0,仿真终止并且会出现错误信息。返回为 1,VISSIM 将多次调用 DLL 中的 SignalGUIGetValue()函数,来获得信号控制机的数据并发送给控制 EXE:控制 机的周期,在 VISSIM 中定义的每个信号灯组的名称,黄灯时间,红黄灯时间,最 小绿灯时间,最小红灯时间和红灯清空时间。 GUI DLL 将会在需要的时间通过VISSIM来加载。它禁止在使用的实例之间连续的 加载。 GUI DLL 不需要在并行计算时同时和多个控制机进行数据交换,因为 VISSIM 将 在每次需要 GUI对话框或需要信号控制数据时调用 call _INIT_ 以及 _READ_DATA_函 数。
本文档为【VISSIM_API_cn】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_149004
暂无简介~
格式:pdf
大小:107KB
软件:PDF阅读器
页数:8
分类:工学
上传时间:2012-02-06
浏览量:288