CODESYS 中众多功能块的实例化 (IEC61131)

agh*_*ghd 3 plc real-time instantiation codesys iec61131-3

我使用 CODESYS 制作了一个功能块来执行电能计量。该功能块的输入是电流和电压,输出是能量。现在,我们需要有 1000 个该功能块的实例来运行我们拥有的 1000 米的代码。编写(可能还有复制和粘贴)这些实例似乎并不是最有趣的工作。想知道是否有人有更聪明的方法来进行如此众多的实例化。

例如,以下是 2 个实例的代码(在 CODESYS 中)的样子:

meter_instance1(CURRENT:=I1, VOTAGE:=V2);
Energy1:= meter_instance1.ENERGY;

meter_instance2(CURRENT:=I2, VOTAGE:=V2);
Energy2:= meter_instance2.ENERGY;
Run Code Online (Sandbox Code Playgroud)

我们希望有 1000 个实例。任何想法都会受到高度赞赏。

小智 5

只需创建一个功能块数组:

aEnergyMeter : array [0..999] of FB_EnergyMeter;
Run Code Online (Sandbox Code Playgroud)

还制作电压和电流的数组:

aVoltage : array [0..999] of INT; //if you use INT as type

aCurrent : array [0..999] of INT;
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样使用它:

aEnergyMeter[0](CURRENT:= aCurrent[0], VOLTAGE := aVoltage[0]);
Run Code Online (Sandbox Code Playgroud)

当您使用具有相同大小的不同数组时,我更愿意定义一些全局常量:

VAR GLOBAL CONSTANT
firstDevice : UINT := 0;

lastDevice : UINT := 999;

END_VAR
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样定义数组:

aEnergyMeter : array [firstDevice..lastDevice] of FB_EnergyMeter;
Run Code Online (Sandbox Code Playgroud)