如何正确覆盖instanciation上的持久输入变量并调用派生的FUNCTION_BLOCK?

时间:2016-04-05 12:23:23

标签: codesys

我有一个输入变量c_timTransmissionRate,它通常使用持久变量列表进行初始化。然后,功能块TxRaw中的持久变量列表的默认值被实例化功能块'TXDbc'覆盖。这又是持久变量列表本身中特定于应用程序的重写。

在少数情况下,c_timTransmissionRate的值由运行时的实例化功能块TxTsc1动态提供。

我的问题是我目前总是在调试器中看到原始TIME#0ms值而不是持久变量列表中给出的值。

我当前代码的摘录:

FUNCTION_BLOCK TxRaw
 VAR_INPUT PERSISTENT CONSTANT
  c_timTransmissionRate : TIME := T#0ms;
 END_VAR
  (* instructions *)
END_FUNCTION_BLOCK

FUNCTION_BLOCK Tx
VAR
 tx : TxRaw;
END_VAR
  (* instructions *)
 tx();
  (* instructions *)
END_FUNCTION_BLOCK

FUNCTION_BLOCK TxTsc1 EXTENDS Tx
  (* instructions *)
  tx.c_timTransmissionRate := PI()*THUMB();
  SUPER^();
END_FUNCTION_BLOCK

FUNCTION BLOCK TxDbc EXTENDS Tx
VAR
 tx : TX := (c_timTransmissionRate := T#20ms);
END_VAR
  (* instructions *)
  SUPER^();
END_FUNCTION_BLOCK

0 个答案:

没有答案