[西门子] 西门子 TIA Portal 鸡肋功能 - 调用环境

[复制链接]
查看218 | 回复0 | 2024-10-22 08:33:59 | 显示全部楼层 |阅读模式

介绍:

应用场景:有一个控制电机启停的函数快 FB1,在主程序 OB1 中调用两次 FB1,并且分别对 FB1 赋值不同的实参从而控制两台电机。


在调试阶段,我们需要单独对每个电机进行调试,但当直接打开 FB1 进行监控时,仅仅是对函数块内部通用的程序的监控,并不能针对具体某一个背景数据块,此时的监控状态并不能反映特定的电机的实际状态。

基于这种应用,我们需要使用调用环境功能来监控特定电机的状态。

操作:

当函数快 FB1 已经打开并启用监视时,可以通过单击程序监视窗口右上角的“更改调用环境”按钮,或通过单击项目右侧的“测试”任务卡,在“调用环境”选项中单击“更改”按钮,进行调用环境的设置。


弹出“块的调用环境”对话框,包含以下内容。

1.“无”:未定义条件,显示扫描周期最后扫描的函数块程序状态;

2.“背景数据块”:通过下拉菜单选择背景数据块。当函数块和选定的背景数据块一起调用时,显示该选定的背景数据块下这个函数块的程序状态,仅限于单个实例,不适用多重实例;

3.“调用环境”:当函数块和特定的背景数据块一起调用或者从特定路径调用块时,显示特定路径下的特定背景数据块下这个函数块的程序状态,包含单个实例和多重实例,但不包含数组型多重实例;

4.“转换到‘手动调节’”:通过该按钮,转换“调用环境”中选定的数据到“手动调节调用环境”中进一步编辑。此后使用特定块调用某个块或从特定路径调用该块时,则仅显示该块的程序状态;

5.“手动调节调用环境”:激活转到“手动调整的调用路径”选项后,可以在这个区域中手动输入所需要的调用环境,但仅限于调用路径,不适用于单个实例或多重实例,故实际意义不大。

下图为选择块的调用环境“无”。


下图为选择块的调用环境“背景数据块”,只能选择单个实例。


下图为选择块的调用环境“调用环境”,包含调用路径、单个实例或多重实例,但不适用于数组型多重实例。


下图为选择块的调用环境“手动调节调用环境”,可以手动输入调用路径,格式允许为块名称或块编号,但不允许输入单个实例或多重实例。


当设置了断点调试时,调用环境不可用。


示例1:

主程序 OB1 中调用两个 FB1:

1.新建项目,并添加函数块 FB1。


2.在主程序 OB1 中,调用两个 FB1,连接不同的实参,并修改实参的值,使两个电机处于不同状态,1 号电机停止,2 号电机运行。


3.使用调用环境功能,对 FB1 中的变量进行定位监控。打开 FB1 块并启动监视,在右侧的“测试”选项卡中,单击“更改”按钮,弹出块的调用环境窗口。选择背景数据块“InstMotor1 [DB1]”。


4.监视到 1 号电机停止。


5.选择背景数据块“InstMotor2 [DB2]”。


6.监视到 2 号电机运行。


示例2:

主程序 OB1 中调用 FB2,FB2 中使用多重实例调用 FB1:

1.添加函数块 FB2,并在 FB2 中通过多重实例的方式调用 FB1。


2.在主程序 OB1 中调用 FB2,连接实参,并修改实参的值,使两个电机处于不同状态,3 号电机停止,4 号电机运行。


3.使用调用环境功能,对 FB1 中的变量进行定位监控。打开 FB1 块并启动监视,在右侧的“测试”选项卡中,单击“更改”按钮,弹出块的调用环境窗口。由于使用了多重实例的原因,此时选择背景数据块选项就不灵了。

这里需在调用环境选项中选择调用路径和多重实例“Motors1 (#instMotor2) - Main (InstMotors1)”,即 4 号电机。


4.监视到 4 号电机运行,且启动信号未复位。


5.如果在“块的调用环境”对话框中,点击“转换到‘手动调节’”,可以在“手动调节调用环境”中,手动输入调用路径,点击“确定”:


6.此时 FB1 中监控到的程序为手动输入调用路径中调用 FB1 的程序状态,手动调节调用环境并不能定位到特定的背景数据块。


问题:

1.除了调用环境功能以外,还有类似功能的监控程序的方法吗?有。

1.1双击程序段 1 中的 FB1 函数块,打开 FB1 函数块,点击启动监视按钮,监视到 1 号电机停止。


1.2.点中程序段 2 中的 FB1 函数块,单击右键,在弹出的快捷菜单中选择“打开并监视”,监视到 2 号电机运行。


以上方法适用于多重实例(非数组型),参见下面两张图。



2.数组型的多重实例能使用调用环境进行程序监控吗?不能。

应用场景如下,在函数块 FB3 中定义了 FB1 的数组型多重实例。


此时打开调用环境窗口,可以看到调用环境中的多重实例变成了一个泛型数组,并不能指定,实际操作中也确实不能进行特定的程序监控。


针对这样的应用,调试时,可以使用断点调试的方法来解决以上问题,我将在后面文章中详细介绍。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则