Siemens Simatic S7 SCL Programlama Dili

Merhabalar, forumda biraz aradım ancak göremediğim için bu konu altına yazıyorum. SCL' de yeni sayılırım ve bir şey sormak istiyorum bir simülasyon kodu yazıyorum, operator istediği miktarı girip start komutu verince tanktaki ilk seviye üzerinden operatörün girdiği miktar yüzde olarak çıkarılıp yeni seviye atanacak ve bu arada bir for döngüsü kullanıp simüle ederek seviyenin azaldığını göstermem ve bu döngü içinde bir adet bit setlemem lazım. döngüden çıkınca bit tekrar bool=0 oluyor.
kodu yazdım ancak for döngüsü içinde, operatör miktarı girdikten sonra saydırmaya başlamadan önce bir time delay yaparak araya süre eklemek istiyorum hemen saymaya başlamaması için. standart bir timer fonksiyonu mu kullanmalıyım acaba?
yardımcı olabilir misiniz?
 
Yazımızda endüstrinin can damarı sayılabilecek PLC’yi inceleyeceğiz.
KNX Standardı, küçük bir rezidansın içerisindeki aydınlatma, perde panjur, klima kontrolünden, Dünya’nın en büyük havalimanlarındaki aydınlatma otomasyonu gibi çözümler için tercih edilen bir Dünya standardıdır.
ilk çalışmam ufak bişey ama sizlerle paylaşmak istedim inş daha önce verilmemiştir
verilen sayının üssünü bulma.
in: sayının kendisi
us: alıncak üssü
Kod:
FUNCTION FC50:VOID  
VAR_INPUT     
      IN :INT;
  us:INT;
   END_VAR

VAR
    b:INT;
    s:INT;
    l:dINT;
 END_VAR    

VAR_OUTPUT 
    sonc:dint; 
END_VAR  

BEGIN 
sonc:=0;
s:=in;
l:=1;
FOR b:=1 TO us BY 1 DO  
 l:=l*s;
END_FOR;
sonc:=l;
END_FUNCTION
9lrxf.jpg
 
Moderatör tarafında düzenlendi:
Plc'nin ilk byte'nı kullandım arzu edilirse değişkenler word yapılıp 16 bitlikte yapılabilir
Kod:
FUNCTION FC50:void
VAR_INPUT
    f:BOOL;
    END_VAR


VAR_OUTPUT
e:byte;
end_var
 
VAR_TEMP
    byt:byte;
    flag:BOOL;
    temp1:BOOL;
    temp2:BOOL;
      k:INT;
      result:byte;
      s:S5TIME;
      start:BOOL;
      cik:BOOL;   
 END_VAR    

BEGIN     


IF f=true THEN 
    k:=0;
    END_IF; 


IF k>=7 THEN
    k:=k; flag:=1;
ELSIF k=0 THEN
    flag:=0;
END_IF;


byt:=1;
  result:=0;
start:=false;
 IF start=0 & cik=0 THEN // timer kısır döngü
    start:=1;
END_IF; 

/////////////////// zaman gecikmesini timer döngüsü ile elde ediyoruz ///////////
s:= S_ODT(T_NO:=t5, S:=start, TV:= t#200ms, q:=cik);




IF cik=1 THEN  // sayıların sıçrama yapmaması için düşen ve yükselen kenar kontrolü 
 temp1:=1; start:=0; 
ELSIF cik=0 & start=0 THEN
  temp2:=1;
  END_IF;


  IF temp1=1 & temp2=1 & k<=7 & flag=0 THEN 
   e := SHL (IN:=byt, N:=k); // byt daki sayıyı k kadar sola ötele (in ve e) byte yada word olabilir çıkışa göre 
    k:=k+1;    temp1:=0;
    temp2:=0;
END_IF;


IF temp1=1 & temp2=1 & flag=1 THEN // sağa ötelenmesi gerekirken yine sola öteleniyor sonra bit sağa kaydırılıyor
   e := SHL (IN:=byt, N:=k);
    k:=k-1;    temp1:=0;
    temp2:=0;
     END_IF;
END_FUNCTION
 
scl ile igili oluşturulmuş kitab haline getirilen bilgi varsa satın almak istiyorum
 
//Basit birsey yapmak istedim olmusmu arkadaslar db blok meselesi yapmadım yardımcı olurmusunuz
FUNCTION_BLOCK FB100


VAR_INPUT
START:BOOL;
STOP:BOOL;
END_VAR


VAR_OUTPUT
MOTOR:BOOL;
END_VAR

BEGIN
IF START=1 AND STOP=0 THEN
MOTOR:=1;
END_IF;
IF STOP=1 THEN
MOTOR:=0;
START:=0;
END_IF;

END_FUNCTION_BLOCK
 
scl ile fuzzy yazan arkadaş var mı ?? basit bir örnek olsa da paylaşırsanız sevinirim. yüksek lisans tezim için yazmam lazım. yardımcı olursanız sevinirim.
 
scl ile fuzzy yazan arkadaş var mı ?? basit bir örnek olsa da paylaşırsanız sevinirim. yüksek lisans tezim için yazmam lazım. yardımcı olursanız sevinirim.

PLC tarafında hiç kullanmadım ama yardımcı olması açısından C# ile yapılmış örnek kaynak kodu da içeren projeler linki ekliyorum, fikir verir diye ümit ederim. (Projeleri C# ta açıp kodları incelemen gerek)
Introduction to C# and Fuzzy Logic - CodeProject

Fuzzinator: A Fuzzy Logic Controller - CodeProject
 
Arkadaşlar merhaba,

Uzun zamandır Step7 SCL v5.3 kullanıyorum. Tia v12 update3 gecmeye karar verdim. Step7 de çalıştırdığım bazı SCL komutlarını çalıştıramaz oldum.

#_byte:=IB[0];

Tia'da SCL bir function block içerisine bu kodu yazdığımda IB(Input Byte) kısmında uyarı veriyor . IB'nin bir tag olarakk tanımlı olmadığını söylüyor. Muhtemelen basit birşey arayüze yeniyim.

Mesela aynı şekilde bir Merkeri herhangi bir iç değişkene atamıyorum aynı uyarıyı veriyor.

#_bit:=M0.0;


Kolay gelsin.
 

Forum istatistikleri

Konular
128,126
Mesajlar
915,254
Kullanıcılar
449,841
Son üye
nazoyata

Yeni konular

Geri
Üst