新闻资讯

西门子S7-1200模块6ES7231-4HF32-0XB0

发布时间:2024-10-12 15:54  点击:1次

一个困扰我多年的问题:FB,FC 内部的output变量,在块内是否可读?

虽然我写了很多程序,但对FB,FC内部对output管脚的输出变量进行读取操作,一致没有高清。虽然经常滥用,也没出现过问题。


请教各位这个output的变量能读取吗?下面是一位大神的回复。但是我心里还是不确定,特来论坛请教各位。谢谢。


是的,您正确地指出了在FB(功能块)内部读取输出变量可能导致逻辑上的问题。在西门子PLC的功能块编程中,输出变量通常在块的逻辑执行结束时被赋值,并且它们的值是为了传递到功能块外部而设计的。输出变量在功能块内部不是用来保存状态的,它们不保留上一次调用FB时的值。

如果您在FB内部读取一个输出变量,您可能会得到一个不确定的值,因为在逻辑流程中,输出变量的值可能还没有被更新或者是上一次操作的残留值。这可能会导致不可预测的行为,特别是如果输出变量的值依赖于块内部的一系列计算和条件。

因此,佳实践是在FB内部使用局部变量或静态变量来进行计算和保存状态。局部变量仅在FB的当前调用中有效,而静态变量则在FB的调用之间保持它们的值。这样,您可以确保您在FB内部使用的值是可控和可预测的。

总的来说,为了避免逻辑错误和不确定性,应避免在功能块内部读取输出变量。相反,应该使用其他类型的变量来处理内部逻辑,并在逻辑处理完成后,将终结果赋值给输出变量。这样做可以确保功能块的行为是清晰和一致的。

我认为主要还是因为直接读取out会容易产生时序问题导致程序无法按照预定方式执行。

以一个测试程序为例,在程序块中编写两组启保停指令,同时1组在启保停程序前用输出复位启动命令,另1组在启保停程序后用输出复位启动命令。以下是三组不同方式的执行结果。

第1组:使用FB块,输出变量定义在output区域。


第2组:使用FC块,输出变量定义在inout区域。


第3组:使用FC块,输出变量定义在out区域。

第3种状态便是你文中描述的“输出变量在功能块内部不是用来保存状态的,它们不保留上一次调用FB时的值。如果您在FB内部读取一个输出变量,您可能会得到一个不确定的值,因为在逻辑流程中,输出变量的值可能还没有被更新或者是上一次操作的残留值。”

在考虑好时序与逻辑的影响或者对逻辑与时序要求不高时,读取out变量处理逻辑时是没问题的,在高实时性场合需要审慎考虑逻辑。

希望以上测试能对你有所帮助。


上海工智达电气技术有限公司

销售经理:
田子龙(先生)
电话:
15221760199
手机:
15221760199
地址:
上海市松江区科技园区平原街880弄65号201
邮件:
271463402@qq.com
我们发布的其他新闻 更多
6es7231新闻
拨打电话
微信咨询
请卖家联系我