tia portal fb

yani fb.nin kendisini döndürmek istiyorum :)
 
Zaten Multi Instance olan bir FB'yi neden array olarak kullanmak istiyorsunuz açıkçası anlamadım. FOR döngüsü içerisinde FB her bir stepte bir kez çağırılır isterseniz FB girişlerini ve Çıkışlarını diziye atarsınız ya da diziden alırsınız olur biter. Yani FB nin dizi olması ya da olmaması burada bir şey değiştirmez aksine boşa hafıza kullanmış olursunuz. Çünkü FB zaten Multi instance dır ve zaten Multi Instance olan bir yapıyı tekrardan çoklamanın mantığı yoktur. Bu teori CodeSys içinde aynen geçerlidir. FB tipleri bir YAPI dır (Structure) ve Siemens'de "YAPI" tipi bir dizi oluşturamazsınız. Çünkü STRUCTURE kompleks bir veri tipidir.


Siemens CodeSys gibi TON yapısı kullanmaz. Ya yazılımsal Timerları kullanmalısınız (Legacy) ya da IEC Timer kullanabilirsiniz. Yukarıda bahsettiğim yöntemle tek bir multi instance timer bloğu ve değerlerini diziden alarak-vererek çoklayabilirsiniz.
 
örnek teşkil etmesi açısından :
VAR
PI_C: ARRAY [1..100] OF PI;
END_VAR

FOR x:=1 TO PumpNo DO
PI_C[X](
Enable:= Scada_Pump_Obj.SW0_ScdCmd ,
P:=Ctrl_P_Gain ,
I:=Ctrl_I_Gain ,
PV:=PI_PV[X] ,
SP:=PI_SP ,
Reset_I:= AnyCmd_P ,
Low_Limit:=Ctrl_Low_Limit ,
High_Limit:=Ctrl_High_Limit ,
I_Lim_Scaled_Per:=Ctrl_Lim_Scaled_Per ,
I_time:=t#3.0s ,
MV=>PI_MV[X] );

StartCon[X]:= PI_MV[X]>96 AND Scada_Pump_Obj.SW0_ScdCmd AND Rem[X] AND Drv[X].SW2_StopRun;

StartCon[7]:= StartCon[X] OR StartCon[7];

StopCon[X]:= PI_MV[X]<40 AND Scada_Pump_Obj.SW0_ScdCmd AND Rem[X] AND Drv[X].SW2_StopRun;

StopCon[7]:= StopCon[X] OR StopCon[7];

END_FOR;
 

Forum istatistikleri

Konular
129,838
Mesajlar
930,674
Kullanıcılar
452,675
Son üye
xzscorpionn

Yeni konular

Geri
Üst