Siemens Simatic S7 SCL Programlama Dili

Arkadaşlar merhaba,

Benim sormak istediğim scl dilinde FB içerisinde kendi oluşturduğumuz bir çıkışı programın içerisinde olasılıklara göre bir kaç yerde kullanabilir miyiz? benim yaptığım örnek aşağıdaki gibidir. CapYok çıkışını iki yerde kullandım. simulasyonda gayet güzel çalışıyor ancak gerçekte nasıl olacak onu bilmiyorum. yardımlarınız için şimdiden teşekkürler.

FOR #i := #MinPulse TO (#MaxPulse - 1) DO
IF #QShiftArray[#PulseValue_CapControl] = True THEN
// triggerdan geçen şişeyi kapak sensörü gördüyse Kapak Varsa
IF #CapSensor = True THEN
#CapVar := True;
ELSE
#CapVar := false;
END_IF;
// triggerdan geçen şişeyi kapak sensörü görmediyse Kapak Yoksa
IF #CapSensor = False THEN
#CapYok := TRUE;
ELSE
#CapYok := False;
END_IF;
END_IF;
// triggerdan şişe geçmeden kapak sensörü şişeyi gördüyse
IF #QShiftArray[#PulseValue_CapControl] = False THEN
IF #CapSensor = True THEN
#CapYok := TRUE;
#CapVar := False;
ELSE
#CapYok := False;
END_IF;
END_IF;
END_FOR;
 
// Assemble bits to a word
#OUT.%X0 := #bit00;
#OUT.%X1 := #bit01;
#OUT.%X2 := #bit02;
#OUT.%X3 := #bit03;
#OUT.%X4 := #bit04;
#OUT.%X5 := #bit05;
#OUT.%X6 := #bit06;
#OUT.%X7 := #bit07;
#OUT.%X8 := #bit08;
#OUT.%X9 := #bit09;
#OUT.%X10 := #bit10;
#OUT.%X11 := #bit11;
#OUT.%X12 := #bit12;
#OUT.%X13 := #bit13;
#OUT.%X14 := #bit14;
#OUT.%X15 := #bit15;

Belki işinize yarar ben 16 adet alarmı bunda rahatlıkla okuyorum.
 
Merhabalar.
Case komutuyla basit bir fc bloğu yazdım .Girilen sayısal değerin karşığındaki çıkışın 1 olmasını istiyorum.
çıkışları resetlemek için out1:=0....out4:0; yazdım bunu yerine daha kolay ne kullana bilirim.
Teşekkürler




VAR_INPUT
G: INT;
END_VAR
VAR_OUTPUT
out1:BOOL;
out2:BOOL;
out3:BOOL;
out4:BOOL;
END_VAR

out1:=0;
out2:=0;
out3:=0;
out4:=0;


CASE G OF
1 :
out1:=TRUE;
2 :
out2:=TRUE;
3 :
out3:=TRUE;
4:
out4:=TRUE;
END_CASE;
END_FUNCTION
 
Merhabalar.
Case komutuyla basit bir fc bloğu yazdım .Girilen sayısal değerin karşığındaki çıkışın 1 olmasını istiyorum.
çıkışları resetlemek için out1:=0....out4:0; yazdım bunu yerine daha kolay ne kullana bilirim.
Teşekkürler




VAR_INPUT
G: INT;
END_VAR
VAR_OUTPUT
out1:BOOL;
out2:BOOL;
out3:BOOL;
out4:BOOL;
END_VAR

out1:=0;
out2:=0;
out3:=0;
out4:=0;


CASE G OF
1 :
out1:=TRUE;
2 :
out2:=TRUE;
3 :
out3:=TRUE;
4:
out4:=TRUE;
END_CASE;
END_FUNCTION

CASE yerine if else kullanabilirsin. Girişe göre bir karar vermen gerektiği için bu iki karar yapısından birini kullanmak zorundasın.
 
Aslında Case gayet kolay sıkıntı girilen değer değiştiğinde bir önceki değerin çıkışının setli kalması. Case yerine if else de kullansak aynı sorun devam edecek Bunu 4 çıkış değil de örneğin 100 çıkışlı olduğunu düşünün resetlemek için 100 tane reset yazmak gerek Çıkışı bir alana yazıp o alandan bit olarak çağırmak gerek diye düşünüyrum SCL yazmaya yeni başladım bunu beceremedim.Teşekkür ederim ilginize
 
SCL diline uzağım.
Genel program mantığı ile bir fikir verebilirim.

Out isminde 5 elemanlı bir dizi değişken array oluşturulur.
Case komutunun her bir basamağında önce dizi değişken out sıfırlanıp ardından istenen ( örneğin out1) değişken aktif edilir.

SCL dili buna imkan tanıyor olmalı.
 
uzun süredir TIA açmadım ama seri bitleri true false yapabildiğin bir komut vardı adını hatırlamadığım. o komutu kullanarak istediğin uzunluktaki hafıza alanını her case içerisinde false yapabilirsin.
 
uzun süredir TIA açmadım ama seri bitleri true false yapabildiğin bir komut vardı adını hatırlamadığım. o komutu kullanarak istediğin uzunluktaki hafıza alanını her case içerisinde false yapabilirsin.
Bahsettiginiz komut bu olabilirmi?

RESET(S_BIT := M0.0,

N := 10);

In the example the instruction resets 10 bits in the range from M0.0 to M1.1.

https://support.industry.siemens.com/tf/ww/en/posts/scl-bit-commands/68744?page=2&pageSize=10
 
Son düzenleme:

Forum istatistikleri

Konular
130,139
Mesajlar
933,513
Kullanıcılar
453,214
Son üye
Zulfunver

Yeni konular

Geri
Üst