Bir word içerisindeki bitin durumu öğrenme

egerkagan

Üye
Katılım
19 Haz 2015
Mesajlar
20
Puanları
1
Yaş
32
Merhabalar,

Simatic managerda bir adet fonksiyon blok oluşturuyorum. Blok için 1 adet word değişkeni isticem. Girilen word değişkeninin bit durumuna göre de çıkış vericem. Fakat fonksiyon blok değişkeni #degisken şeklinde olduğundan fonksiyon blokta bitlere bölemiyorum. Yani blok için durum adında bi değişken oluşturdum. PLC programcısı da o durum değişkenine mw100 atasın. Ben o mw100 içindeki m100.6 aktifse başka biti, m100.5 aktifse başka bişeyi aktif edicem. Ama 2si de aynı anda aktif olabilir mesela. Böyle bişeyi FB'de nasıl yapabilirim?
 
Merhaba;

Tia Portal V15'te şu şekilde yaptım, buradaki mantığa göre Simatic Manager'da da yapabilirsin.

Giriş kısmına word değişkenini koyarak, çıkış kısımlarında da tek tek aktif bitleri görebilirsin.
 

Ekli dosyalar

  • WORD_TO_BOOL.rar
    259.6 KB · Görüntüleme: 70
Son düzenleme:
Merhaba;

Tia Portal V15'te şu şekilde yaptım, buradaki mantığa göre Simatic Manager'da da yapabilirsin.

Giriş kısmına word değişkenini koyarak, çıkış kısımlarında da tek tek aktif bitleri görebilirsin.

V15 yüklü değil bende, V14 ve V13 var. Buna göre çevirip atma şansınız var mı?
 
V13 ile açabilirsiniz.
 

Ekli dosyalar

  • Word_to_Bool.rar
    997.7 KB · Görüntüleme: 33
upload_2018-6-22_14-9-59.png


Evet istediğim tam olarak bu. Ama simatic managerda çalışmadı malesef. Ne olarak değiştirmem gerekir acaba? #IN_WORD.%X0 komutu simaticte hata veriyor.
 
FUNCTION "WordToBits" : Void
TITLE = DECONSTRUCT A WORD TO BITS
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : WB
FAMILY : TOOLS
VERSION : 0.1
//Deconstruct a word to bits
VAR_INPUT
IN : Word; // Word needing to be deconstructed into bits
END_VAR

VAR_OUTPUT
bit00 : Bool; // Bit 00 of WORD
bit01 : Bool; // Bit 01 of WORD
bit02 : Bool; // Bit 02 of WORD
bit03 : Bool; // Bit 03 of WORD
bit04 : Bool; // Bit 04 of WORD
bit05 : Bool; // Bit 05 of WORD
bit06 : Bool; // Bit 06 of WORD
bit07 : Bool; // Bit 07 of WORD
bit08 : Bool; // Bit 08 of WORD
bit09 : Bool; // Bit 09 of WORD
bit10 : Bool; // Bit 10 of WORD
bit11 : Bool; // Bit 11 of WORD
bit12 : Bool; // Bit 12 of WORD
bit13 : Bool; // Bit 13 of WORD
bit14 : Bool; // Bit 14 of WORD
bit15 : Bool; // Bit 15 of WORD
END_VAR


BEGIN
// Disassemble a word into bits
#bit00 := #IN.%X0;
#bit01 := #IN.%X1;
#bit02 := #IN.%X2;
#bit03 := #IN.%X3;
#bit04 := #IN.%X4;
#bit05 := #IN.%X5;
#bit06 := #IN.%X6;
#bit07 := #IN.%X7;
#bit08 := #IN.%X8;
#bit09 := #IN.%X9;
#bit10 := #IN.%X10;
#bit11 := #IN.%X11;
#bit12 := #IN.%X12;
#bit13 := #IN.%X13;
#bit14 := #IN.%X14;
#bit15 := #IN.%X15;
END_FUNCTION
 
var
i:integer;
sayi:word;
bit_value:array[1..16] of booelan;

begin
for i:=0 to 15 do
begin
if (((sayi>>i)and $0001)=$0001)then
bit_value[i+1]:=true
else
bit_value[i+1]:=false;
end;
end.

word bilgisini bit bit booelan tür diziye yüklüyor, oradan indeksleme kullanarak istediğin bite erişebilirsin. örneğin 5. biti bir ise
if (bit_value[5]=true) then.. gibi bir erişim apabilirsin
 
var
i:integer;
sayi:word;
bit_value:array[1..16] of booelan;

begin
for i:=0 to 15 do
begin
if (((sayi>>i)and $0001)=$0001)then
bit_value[i+1]:=true
else
bit_value[i+1]:=false;
end;
end.

word bilgisini bit bit booelan tür diziye yüklüyor, oradan indeksleme kullanarak istediğin bite erişebilirsin. örneğin 5. biti bir ise
if (bit_value[5]=true) then.. gibi bir erişim apabilirsin


Ben FByi ladder da yazıyorum. Bu yazdığınız kodu ladder olan fbye nasıl ekleyebilirim?
 

Yeni mesajlar

Forum istatistikleri

Konular
129,719
Mesajlar
929,232
Kullanıcılar
452,436
Son üye
hekici

Yeni konular

Geri
Üst