Python通过COM接口读取VISSIM节点油耗及排放结果失败如何解决
VISSIM节点油耗/排放结果Python获取方案
前置配置
首先你需要先在VISSIM GUI中开启对应统计项:
- 进入
Evaluation > Results > Node Results,勾选启用功能 - 在指标配置页勾选你需要的燃油消耗、CO、NOx、VOC四个统计项,保存模型后再运行COM调用
错误代码原因说明
你之前的代码报错核心有两个问题:
- 节点结果属于仿真输出属性,不属于
Vissim.Net下的静态网络对象属性,不能直接从Net.Nodes/Net.Movements调用 - 代码存在语法问题:属性名未加闭合引号、参数未包裹为字符串
正确实现代码
第一步:基础依赖导入与VISSIM连接
import win32com.client as com import pandas as pd # 连接VISSIM实例,版本根据你安装的调整,比如2024就是24.0 Vissim = com.Dispatch("Vissim.Vissim.24.0") # 加载你的VISSIM模型 Vissim.LoadModel(r"你的模型路径.inpx", False) # 配置仿真运行次数为1次 Vissim.Simulation.SetAttValue("NumRuns", 1)
第二步:运行仿真并提取结果
# 启动仿真 Vissim.Simulation.RunContinuous() # 获取节点结果集 node_results = Vissim.Evaluation.Results.NodeResults # 获取所有节点编号 all_node_keys = [node.GetAttValue("No") for node in Vissim.Net.Nodes.GetAll()] # 存储结果的列表 result_list = [] for node_key in all_node_keys: # 按编号获取对应节点的结果对象 current_node_res = node_results.ItemByKey(node_key) # 提取需要的指标 res_item = { "节点编号": node_key, "燃油消耗": current_node_res.AttValue('FuelConsumption(Avg,Avg)'), "CO排放": current_node_res.AttValue('EmissionsCO(Avg,Avg)'), "NOx排放": current_node_res.AttValue('EmissionsNOx(Avg,Avg)'), "VOC排放": current_node_res.AttValue('EmissionsVOC(Avg,Avg)') } result_list.append(res_item) # 打印结果 for item in result_list: print(item)
第三步:导出到Excel
# 转DataFrame后导出 df = pd.DataFrame(result_list) df.to_excel(r"导出路径/节点排放结果.xlsx", index=False)
补充:如果你需要提取节点下各转向运动的排放/油耗结果,将上述代码中的
Vissim.Evaluation.Results.NodeResults替换为Vissim.Evaluation.Results.MovementResults,属性名不需要修改。
常见异常排查
- 若返回空值:确认仿真运行完成、节点结果统计已开启、对应指标已勾选
- 若提示属性不存在:确认VISSIM版本对应的属性名拼写正确,不同版本属性名可能存在细微差异,可在COM帮助文档的
Node Result Attributes章节查询对应版本的属性名 - 若提示对象不存在:确认你查询的节点/转向编号在VISSIM模型中真实存在
内容的提问来源于stack exchange,提问作者Khadeja Hanif
相关产品推荐
相关产品推荐

