在仿真建模时最常见的函数调用方法是直接调用(直接写函数名称及参数)。但是有些情况下,直接调用的方法可能会导致许多不必要的麻烦。

例如:在某项目中,不同部分的控制方法分别存放在了不同的Frame中,这就导致了跨Frame调用函数的情况,存放一些基础功能的Frame中这些情况尤为常见。如果原函数的Frame路径发生了变化,那么需要修改所有调用原函数的程序,增加了大量的工作量。

上述为直接调用方法的一些缺点,针对这个问题,就可以使用间接调用的方法。

如上图,利用全局变量记录其他位置的方法的路径,然后根据路径调用。这样如果方法位置发生了改变,仅需将变量中的路径改变,不需对程序做任何修改。

但是变量中记录的仅仅是一个路径,数据类型为object,直接写变量名并不能调用对应的函数,所以配合execute函数进行操作

execute可执行路径对应的函数,并传递参数。如上图,m_GetRout 数据类型为 object 值为 .Models.Frame.AGVManeger.CreateRouting, 调用时使用 m_GetRout.execute 可调用 m_GetRout 对应的函数,括号中为对应函数需要的传入值。

注:类似于 execute 函数在 Simtalk 1.0 中可用小括号代替,如:m_GetRout.execute(param1,param2,param3)等价于(m_GetRout)(param1,param2,param3)

execute还可直接执行代码,如下图

补充说明:

execute可以执行路径对应的方法,那么获取方法的路径的函数,在SimTalk 1.0 中为 ref(Method) 在SimTalk 2.0 中为 &Method 。这样仅会输出方法路径,并不会调用方法。

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注