Plant Simulation软件支持COM,可以利用COM通过其他软件控制仿真进程,或将仿真集成到其他应用中,如Excel、Python等。具体定义可参见百度百科

创建连接

在不同的语言中有不同的创建连接的方法,具体方法参考官方文档。这里以Python为例说明:

用了Python中的comtypes库,详情参照https://pypi.org/project/comtypes/

# 获取文件路径
def get_path(madel_name):
    path = os.getcwd() + "\\" + madel_name
    return path

# 打开模型
def open_model(madel_name="testModel.spp"):
    com_obj = com.CreateObject("Tecnomatix.PlantSimulation.RemoteControl.13.1")  # 打开仿真软件
    com_obj.setVisible(False)  # 当为False时,仿真界面不可见;当为True时,仿真界面可见
    com_obj.loadModel(get_path(madel_name))  # 根据路径打开模型
    return com_obj

COM接口函数

在外部程序中,可用过一些接口函数控制仿真的运行。可用函数如下,具体功能及用法参照帮助文档(按F1所搜COM,在Related Topics中选择Functions of the COM Interface)。

可用函数:loadModel,  newModel,  saveModel,  closeModel,  startSimulation,  stopSimulation,  resetSimulation,  isSimulationRunning,  setVisible,  setValue,  getValue,  setPathContext,  executeSimTalk,  quit

COM接口事件

触发事件在不同应用中有不同的使用方法和事件名称,具体使用参照应用文档。

接口模块化(Python与Plant Simulaiton接口)

通过COM将Python与Plant Simulation连接可实现一些只有仿真无法实现或不便于实现的功能,但是每次使用重新编程的工作造成了大量的时间浪费。所以我将接口程序做成一个独立模块,便于程序复用。以下将Python与Plant Simulation接口模块简称为Py2PS模块。

Py2PS模块使用Python 3.5 和 Plant Simulation 13.1 进行编写,暂时只支持 Plant Simulation 13.1 。使用方法如下,源代码见文章最后下载文件:

简介

Py2PS模块主要分为两部分:Plant Simulation部分(COMInterface.lib)和Python部分(ConnModel.pyc),COMInterface.lib负责对仿真的输入输出数据进行汇总,ConnModel.pyc负责建立COM连接,并控制仿真进程。Py2PS模块支持通过Python控制任意模型,对原模型运行无影响,无需任何程序修改。

使用方法

  1. 将模型文件、ConnModel.pyc文件和python主程序文件放入同一个文件夹下。
  2. 在Python中安装comtypes库。
  3. 将COMInterface.lib导入模型文件中,并将模块(IOInterface)放入模型root目录下。
  4. 打开IOInterface并按照格式填入需要的输入输出参数路径,目前支持整型、浮点型、字符型三种数据类型。
  5. 在Python中导入ConnModel库,即可实现与模型的互通。

ConnModel库(Python库)函数说明

  • open_model(madel_name=”testModel.spp”, visible=False)   # 打开模型, madel_name:模型名称, visible:是否可见
  • close_model(com_object)  # 关闭模型, com_object:Plant Simulation的COM对象
  • run_model(plant_sim, input_dict, root=”.Models.Frame”, timeout=0.2)  # 运行模型, plant_sim:Plant Simulation的COM对象, input_dict:输入参数值(字典型数据), root:根目录路径, timeout:超时时间。

实例如下:

import ConnModel

input_dict = {}  # 定义数据字典
# input_dict['加工时间'] = 50
# input_dict['开始时间'] = 0
plant_sim = ConnModel.open_model(madel_name="testModel.spp")  # 打开模型
result = ConnModel.run_model(plant_sim, input_dict)  # 运行模型
ConnModel.close_model(plant_sim)  # 关闭模型
print(str(result))

文件下载

模块文件下载:PY2PS

测试模型下载:TestModel

2 对 “COM(Component Object Model)组件的使用”的想法;

  1. 没有ConnModel的源码,我对com.PumpEvents(0.1)不太理解,即使接收到事件,超时也报警
    我想实现,程序开始就一直监听事件,接收事件并处理事件,同时plant程序关闭时,自动停止监听,结束python程序

    1. 超时报警可以用try去处理
      try:
      com.PumpEvents(timeout)
      except Exception:
      pass
      comtypes这个库并不能自动停止监听,只能用循环加判断的方式确定是否可以结束监听

发表评论