Siemens Simatic S7 SCL Programlama Dili

Merhaba arkadaşlar uzun süre aradan sonra kaldığım yerden bu dile çalışmaya tekrar karar verdim. Ancak kafama takılan şeyler var. Bunlardan ilki yaptığımız programı nerede ve nasıl simule edebileceğimiz.
Siemensin mevcut PLC Sim programı ile simulasyon yapabilirsiniz.
 
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.
arkadaşlar ıkı tane byte degerını scl de nasıl ınt olarak yazabilirim.
VAR_INPUT
IN1:BYTE;
IN2:BYTE;
END_vAR
VAR_OUTPUT
IN3:INT;(WORD)
END_VAR
BEGIN
IN3:=IN1+IN2;(TOPLAMA YAPMADAN MB0 VE MB1 YAZMAK İSTIYORUM INT DEGERDEN DE GORMEK İSTİYORUM)
 
merhaba;ALARM DURUMLARI için kullandıgım bir kod. sanırım işinize yarayacaktır.

ayrıca bold işaretli kısmı araştırın."AT" komutu kullanımı.

iyi çalışmalar.



Kod:
VAR_INPUT
// Input Parameters 
myBit0_0                 :BOOL;
myBit0_1                 :BOOL;
myBit0_2                 :BOOL;
myBit0_3                 :BOOL;
myBit0_4                 :BOOL;
myBit0_5                 :BOOL;
myBit0_6                 :BOOL;
myBit0_7                 :BOOL;        
//        
myBit1_0                 :BOOL;
myBit1_1                 :BOOL;
myBit1_2                 :BOOL;
myBit1_3                 :BOOL;
myBit1_4                 :BOOL;
myBit1_5                 :BOOL;
myBit1_6                 :BOOL;
myBit1_7                 :BOOL;  
END_VAR


VAR_OUTPUT
 // Output Parameters 
QWord :WORD;                                                                                                                                                  


                                    
END_VAR
                   
VAR
MY_WORD : WORD :=16#0;
[B]BIT AT MY_WORD : STRUCT   [/B]
[B]Bit0_0                 :BOOL:=false;[/B]
[B]Bit0_1                 :BOOL:=false;[/B]
[B]Bit0_2                 :BOOL:=false;[/B]
[B]Bit0_3                 :BOOL:=false;[/B]
[B]Bit0_4                 :BOOL:=false;[/B]
[B]Bit0_5                 :BOOL:=false;[/B]
[B]Bit0_6                 :BOOL:=false;[/B]
[B]Bit0_7                 :BOOL:=false;        [/B]
[B]//        [/B]
[B]Bit1_0                 :BOOL:=false;[/B]
[B]Bit1_1                 :BOOL:=false;[/B]
[B]Bit1_2                 :BOOL:=false;[/B]
[B]Bit1_3                 :BOOL:=false;[/B]
[B]Bit1_4                 :BOOL:=false;[/B]
[B]Bit1_5                 :BOOL:=false;[/B]
[B]Bit1_6                 :BOOL:=false;[/B]
[B]Bit1_7                 :BOOL:=false;  [/B]
[B]END_STRUCT;[/B]
END_VAR


//SWAP ISLEMI LAZIM DEGILSE KULLANMAYIN ASAGISINI
BIT.Bit0_0    := myBit1_0;
BIT.Bit0_1    := myBit1_1;
BIT.Bit0_2    := myBit1_2;
BIT.Bit0_3    := myBit1_3;
BIT.Bit0_4    := myBit1_4;
BIT.Bit0_5    := myBit1_5;
BIT.Bit0_6    := myBit1_6;
BIT.Bit0_7    := myBit1_7;
//
BIT.Bit1_0    := myBit0_0;
BIT.Bit1_1    := myBit0_1;
BIT.Bit1_2    := myBit0_2;
BIT.Bit1_3    := myBit0_3;
BIT.Bit1_4    := myBit0_4;
BIT.Bit1_5    := myBit0_5;
BIT.Bit1_6    := myBit0_6;
BIT.Bit1_7    := myBit0_7;
//
QWord := MY_WORD;


    
END_FUNCTION_BLOCK




arkadaşlar ıkı tane byte degerını scl de nasıl ınt olarak yazabilirim.
VAR_INPUT
IN1:BYTE;
IN2:BYTE;
END_vAR
VAR_OUTPUT
IN3:INT;(WORD)
END_VAR
BEGIN
IN3:=IN1+IN2;(TOPLAMA YAPMADAN MB0 VE MB1 YAZMAK İSTIYORUM INT DEGERDEN DE GORMEK İSTİYORUM)
 
Kod:
[B]var[/B]
    my_word : [B]Word[/B] :=16#0;
         word_of [B]AT[/B] my_word :[B] Struct   [/B]
                                bytes0   :byte:=0;
                                bytes1   :byte:=0;
                              [B]End_struct;[/B]
[B]end_var[/B]

word_of.bytes0:=16#1;
word_of.bytes1:=16#2;
 
Son düzenleme:
SCL Diline daha yeni başaladım acabadword olarak değerinasıl tanımlıyoruz sayıcıdan cıkan değeri formule edip hesaplatmak istiyorum yazıyorum hata veriyor siteden buludğum basit bir örneğin üzerinden başaladım çalışmaya şu şekilde
Kod:
Function f_lin : real
title ='f_lin'
var_input
x : real;      //burada dword yazınca kabul etmiyor
a : real;
b : real;
end_var
var
end_var
f_lin := a + x + b;
end_function
 
Hata verir çünkü elmayla armut toplanmaz, yani a+x+b işleminde sonuç real olması isteniyor(öyle tanımlanmış) fakat arada Dword tanımlanmış değişken var dolayısıyla toplama yapmak için onu real a çevirmek gerek
(a+ DWORD_TO_REAL(x) + b) böylece armutuda elmaya çevirip hepsini aynı sepete koyabiliriz.
 
Kod bu şekilde de çalışıyor şimdi bu koddaki x değişkenini bir counter çıkışıyla kontrol etmek isityorum

Kod:
Function f_lin : real
title ='f_lin'
var_input
x : dword;
a : real;
b : real;
end_var
var
end_var
f_lin := (a+DWORD_TO_REAL(x)+ b);
end_function
 
merhaba arkadaşlar bende bu dile yeni başladım öncelikle var ve var_temp değişkenleri ne anlamam gerekiyor?ayrıca alta vermiş oldugum bir motor bloğu içerisindeki temp değişkenleri bundan ne anlamalıyım?



Kod:
VAR_TEMP
  // Temporary Variables
    ERR : INT; // Startup error 
    TOP_SI:    STRUCT      
        EV_CLASS :BYTE;
        EV_NUM   :BYTE;
        PRIORITY :BYTE;
        NUM      :BYTE;
        TYP2_3   :BYTE;
        TYP1     :BYTE;
        ZI1      :WORD;
        ZI2_3: DWORD;
    END_STRUCT;
    START_UP_SI:  STRUCT
        EV_CLASS :BYTE;
        EV_NUM   :BYTE;
        PRIORITY :BYTE;
        NUM      :BYTE;
        TYP2_3   :BYTE;
        TYP1     :BYTE;
        ZI1      :WORD;
        ZI2_3: DWORD;
    END_STRUCT;
TempBool    :BOOL;
Temp_Dir    :BOOL;
Temp_FB     :BOOL;
TempReal    :REAL;
END_VAR
 
Moderatör tarafında düzenlendi:
Arkadaşlar 2 sn de bir deger alarak, aldığı her değeri bir öncekinden çıkaracak ve sunucu bir değişkene atayacak. Ya ben uğraşıyorum ancak bu her iki sn. de olan saykılı beceremedim. Sizden ricam buna bir baka bilirmisiniz?
 
Arkadaşlar 2 sn de bir deger alarak, aldığı her değeri bir öncekinden çıkaracak ve sunucu bir değişkene atayacak. Ya ben uğraşıyorum ancak bu her iki sn. de olan saykılı beceremedim. Sizden ricam buna bir baka bilirmisiniz?

Ben mi yanlış anladım,siz 2.snlik kısmı yapamadınız değil mi? Diğer fark alma ve aktarma kısmı hazır sanırım.

iki saniyelik bir pulse üretin(normal bir TON ile 2 saniye saydırıp sonra kendisini resetleyerek olacak). Bu pulse çıkışının yükselen kenarında da fark alma işlemlerine başlayın.
 

Forum istatistikleri

Konular
128,217
Mesajlar
915,887
Kullanıcılar
450,002
Son üye
enginyayl

Yeni konular

Geri
Üst