SYSMAC STUDIO EĞİTİMİ -4
ST Programlama nedir ? Motion komutları nelerdir ? Tarih ve Zaman komutları nelerdir ? Bu ve benzeri sorulara cevap aradığımız bu yazımızda Sysmac Studio’ya dair detayları sizlerle paylaşıyoruz.
SYSMAC STUDIO EĞİTİM NOTLARI
ST Programlama :
Bu ekranda yazılan programda ;
Mavi renk : Program durumlarını ve işlemlerinin kontrol akışını simgeler.(If , Else , True vb.)
Yeşil renk : Kullanıcı yorumlarının rengidir.
Koyu Kırmızı Rengi : Text String değişkenleridir.
Siyah Renk : Kullanıcı fonksiyonları , kullanıcı değişkenleri ve kullanıcı fonksiyon bloklarını simgeler.
Açık Mavi Rengi : Global değişkenleri simgeler.
ST Programlamanın faydaları ise ;
Kullanıcı tarafından kolay okunabilir kod yapısı , harici text programı düzenleyebilme , daha az kodlama yapma , daha az programlama süresi , InLine ST ile Ladder ST’nin bir arada kullanılması gösterilebilir.
ST (Structured Text) : Yapılandırılmış Veri
Bu programlama türünde ;
‘ := ’ işareti bir değer yada ifadeyi bir değişkene atama için kullanılır.
WORD Değişken atamaları binary ve decimal olarak yapılabilir.
Ör : ValueInt := 125; ValueHex := 16#7D;
Her kod ‘ ; ’ işareti ile bitirilmelidir.
Syntax Kuralları ne derseniz ?
-En başta değişken isimlerinde büyük/küçük harf ayrımı yapmayan bir editör var karşınızda.Pratik olarak siz tek bir kural kullanmalısınız.Ör : Tüm değişkenlerin vb. ilk harfleri büyük olması gibi.
ST Programlama İşleçleri :
( ) : İşlem önceliğini belirlemek için kullanılır.
** : Üs Alma
NOT : Tersleme , Tersini alma
*: Çarpma
/ : Bölme
+ : Toplama
– : Çıkarma
MOD : Kalanı Bulma
<, >, <=, >= : Karşılaştırma
= : Eşit Koşulu
<> : Eşit olmama koşulu
& , AND : Lojik AND
XOR : Lojik Ters OR
OR : Lojik OR
Koşullu İfadelere bir bakalım :
IF…THEN – END_IF
IF…THEN- ELSE…END_IF
IF…THEN-ELSIF…THEN…END_IF
Dallanma ifadesi ;
CASE…OF…END_CASE
Koşullu Döngü ise ;
FOR..(BY)…DO..END_FOR
WHILE_DO…END_WHILE
REPEAT….UNTIL..END_REPEAT
EXIT
Fonksiyon Bloğu ST İçinde Kullanımı ; Ör :
P_On2(
Axis := MC_Axis001,
Enable := BB,
Status => ok2,
Busy => NotReady,
Error => Alarm ,
ErrorID => ErrID ) ;
Burada dikkat etmemiz gereken konu = fonksiyon blok içerisindeki pinlerin atamasını görmekteyiz.
Örneklere bakalım :
Lojik bir koşul için örnek ST Programı :
MotorRun := (Enable OR ConveyorON) AND MotorStopped AND NOT Alarm;

Koşullu Atama için örnek ST Programı :
IF Enable THEN
IF Alarm THEN
Status :=100 ;
ELSE
Status := 0;
END_IF;
END_IF;
Dallanma Yapısı için Örnek ST Programı :
CASE Status OF
10 : Setpoint :=100;
20 : Setpoint :=340;
30 : Setpoint :=500;
END_CASE;
Yükselen ve Düşen Kenar için Örnek ST Programı :
Fonksiyon blok örnek tanımlama : Rising_edge=R_TRIG ; Falling_edge=F_TRIG
Rising_edge (clk := Enable);
Falling_edge (clk := Enable);
Örn ;
IF Rising_edge.q THEN
Valve := TRUE;
END_IF;
IF Falling_edge.q THEN
Valve := FALSE;
END_IF;
Timer ve Counter için Örnek ST Programı :
Timer için : Timer_1(In :=Enable, PT := t#100ms ,Q =>Valve);
Counter için : Counter_1(CU:Count , Reset:=ResetCTU , PV :=100 , Q =>Valve);
Özel Data Tiplerine göz atalım ;
Bunlar ; Array , Structure , Enumeration , Union olarak 4’e ayrılırlar.
Arraylar için ;
Tanımlanabilir maksimum element sayısına bakacak olursak ; 65535 olduğunu görürüz.Arraylar diziler anlamına gelmektedir.
Kullanım Örneği :
DataArray için : ARRAY [0…9] OF INT
FB_Array için : ARRAY [0…19] OF MC_Power
Structure için ;
Structure ; bir veya daha fazla veriyi benzer veya farklı data tipleri ile tek bir değişkenmiş gibi kullanmayı sağlar.
Data tipi olarakta ; Temel tip -> Structure Tanımlama || Data Tip -> Program içerisinde değişkeni Structure olarak belirtme işlemleridir.
Not : Struct dizilerini oluşturmak mümkündür.
Örnek : Motor ismini Struct olarak tanımladınız ve bu data tipine de MyMotor adını verdiğinizi varsayarak ;
MyMotor.State := TRUE ;
MyMotor.Velocity := 1500 ;
MyMotor.Current := 2.5;
Örneği incelenebilir.
Enumaration :
Enumaration ile değişkenlere bir isim atayabilirsiniz.
Örnek kullanım : Enumeration #Üye
Yani color isimli bir enumaration oluşturup buna ‘red’,’yellow’ , ‘green’ isimli alt üyeleri ekleyebilirsiniz.
Union :
Burası ise bir word değişkeni , bit , byte olarak kullanmaya yardımcı olur.
Dışardan bir WordDatası -> ByteData , WordData , BoolData olarak kullanılabilir.
Structure olarak Temel tipi Union olarak seçerseniz aslında bir union oluşturmuş olacaksınız.
Burda data tipi ‘data’ olarak seçildikten sonra ismi MyData olarak belirlenecektir.
Ardından bitlere ulaşmak için : MyData.bit(1) // Word olarak ulaşmak için : MyData.asWORD olacaktır.
Fonksiyon ve Fonksiyon Blokları (FB) :
Fonksiyon bloğu kendi içerisinde LD veya ST ile yazılmış algoritma bulundurur ve global değişken içerir.Input(giriş) değişkenlerini alır ve Output(çıkış) üretir.
Fonksiyon (FUN) :
FUN kendi içerisinde LD veya ST ile yazılmış algoritma bulundurur ve lokal değişkenler içerir.
FUN input değişkenini işler ve genellikle 1 adet geri dönüş üretir.
Fonksiyon Blok & FUN arasındaki farklar :
Fonksiyon isim gerektirmez ve Fonksiyon bloğuna isim verilmelidir.
Fonksiyon hafızada yer tutmaz ve fonksiyon bloğu hafızada yer kaplar.
Fonksiyon basit işlemlerde kullanılabilir ve fonksiyon bloğu iç durumlarını hafızada tutması gereken komutlar ile kullanılmalıdır.
Fonksiyon Bloğu / FUN parametreleri için ; giriş çıkışlar parametre olabilir.Bunlarda Lokal değişkenlere atanacaktır.
Opsiyonel olarak bir giriş hem input hemde output olabilir.
Tarih ve Zaman Komutları :
ADD_TIME : İki zamanı birbirine ekler.
SUB_TIME : Bir zamandan diğerini çıkarır.
MULTIME : Zamanı belirlenen sayı ile çarpar.
DIVTIME : Zamanı belirlenen sayıya böler.
ADD_TOD_TIME : Gün içerisindeki zamana zaman ekler.
SUB_TOD_TIME : Gün içerisindeki zamandan zaman çıkarır.
SUB_TOD_TOD : Diğer bir günün zamanından zaman çıkarır.
ADD_DT_TIME : Zaman ve güne zaman ekler.
SUB_DATE_DATE : Diğer bir günden gün çıkarır.
SUB_DT_DT : Diğer bir günden ve zamandan gün ve zaman çıkarır.
SUB_DT_TIME : Gün ve zamandan zaman çıkarma
CONCAT_DATE_TOD : Günü ve zamanı birleştirir.
DT_TO_TOD : Gün ve zamandan günün zamanını alır.
DT_TO_DATE : Gün ve zamandan günü alır.
DtToSec : Gün ve zamanı saniyelere çevirir.
DateToSec : Günü saniyelere çevirir.
TodToSec : Günün zamanını saniyelere çevirir.
TimeToSec : Zamanı saniyelere çevirir.
TimeToNanoSec : Zamanı nanosaniyelere çevirir.
SecToDt : Saniyeleri gün ve zamana çevirir.
SecToDate : Saniyelere güne çevirir.
SecToTod : Saniyeleri günün zamanına çevirir.
SecToTime : Saniyeleri zamana çevirir.
NanoSecToTime : Nanosaniyeleri zamana çevirir.
DtToDateStruct : Gün ve zamanı , yıl , ay , gün , saat , dakikalar , saniyeler ve nanosaniyelere çevirir.
DateStructToDt : Gün ve zaman içerisine nanosaniyeleri , saniyeleri , dakikaları , saatleri , günleri , ayları ve yılları ekler.
ChkLeapYear : Belirtilen yılan kalan yıl olup olmadığını kontrol eder.
GetDaysOfMonth : Belirtilen ay içerisindeki günlerin sayısını alır.
DaysToMonth : Günleri aya çevirmek için kullanılır.
GetDayOfWeek : Haftanın günlerini alır.
GetWeekOfYear : Belirtilen ay, yıl vb. içerisinden haftayı alır.
Örnek : Makine Çalışma Süresini Hesaplamak
Kullanılacak Komutlar : GetTime ve SUB_DT_DT
DT sabiini şu şekilde set edelim : DT#2011-3-28-6:00:00
Çözüm :
On Time (Rising Edge) : DT#2011-3-28-13:0:0:000000
OFF Time (Falling Edge) : DT#2011-3-2-:17:30:0:00000
Aradaki zaman çalışma süresidir.
Hareket Kontrol Programlamanın Temelleri :
Eksen Nedir ;
İlgili ifade servo, sanal ve enkoder olabilir.sAXIS_REF data tipi ile kullanılır.
Servo Eksen : Servo sürücü slaveleri EtherCAT tarafından kullanılan eksenlerdir.Güncel servo sürücülere atanabilirler.Bir servomotor bir eksende kullanılır.
Sanal Servo Ekseni : MC fonksiyon modülü içerisinde olabilecek sanal eksenlerdir.Aktüel servo sürücülerle kullanılmazlar.Örnek : Senkronize kullanım için master eksen olarak kullanılırlar.
Enkoder Eksenleri : Enkoder eksenleri EtherCAT Slave enkoder giriş terminali kullanır.Enkoder eksenleri aktüel enkoder giriş terminallerine atanır.
Gerçek Enkoderler : Enkoder işlemleri için asıl olarak kullanılırlar.Örneğin ; enkoder yokken debugging yapmak için kullanılırlar.
-NJ/NX Hareket Kontrol Programlama ST ve Ladder dili ile gerçekleştirilebilir.
-Hareket komutları Primary Periodic Task içerisinde işletilmelidir.
PLC (Primary Task) ||MC ||Other Tasks
Not : Primary Task (Ana görev daima MC motorları ile senkronize şekildedir.)
Not : MC ; Primary Task’ın bir parçasıdır.
Eksen Durumları :
Disabled : Eksen enerjili değildir ve herhangi bir komutu uygulayamaz.
Standstill : Eksen enerjili hareket için hazır konumdadır.
Stopping : Eksen durma hareketini gerçekleştiriyordur ta ki Standstill durumuna geçene kadar.
ErrorStop : Bu durumda eksen hata nedeniyle duruyordur.
Homing : Bu durumda eksen Home işlemini gerçekleştiriyordur.
Discrete Motion : Bu durumda eksen diğer eksenlere bağlı olmadan kendi hareket profilini işler.Basit olarak noktadan noktaya pozisyonlama örneği verilebilir.
Continuous Motion : Bu durumda eksen sonsuz hareket etmektedir.Mesela hız kontrolü yapılırken.
Synchronized Motion : Bu durumda eksen elektronik olarak bir master’a bağlı olarak senkron hareket etmektedir.Gear , Cam vb.
Motion Function Block Execution :
EXECUTE (Rising Edge BOOL) :
Bu Fonksiyon bloğu aşağıdaki koşullar oluşana kadar harekete devam edecektir.
Verilen komut tamamlanana kadar , başka bir hareket komutu çalıştırılıp mevcut komutu kesene kadardır.
Komut Execute girişinin yükselen kenarında tekrar işletilir.
Giriş değişkenleri yükselen giriş ile tekrar güncellenir.
Örnek : MC_Move_Relative
Temel Yapısı ise = Execute |FB| Done –Busy – Aborted – Error – Active
Done : İşlem normal bir şekilde tamamlandığında veya komut koşulları gerçekleştiğinde aktif olur.
Aborted : Eğer mevcut komut işletilirken başka bir komut tarafından işlem kesilirse bu çıkış aktif olur.
Error : Eğer giriş parametrelerinden biri aralık dışı bir değer olarak ayarlandıysa hata çıkışı aktif olur.
Busy : FB komutu işlemeye başladığı an aktif olur ve komut tamamlanana kadar aktif kalır ta ki hareket tamamlanana ve kesilene kadar.
Active : FB Servo eksenine komut vermeye hazır olduğu durumda bu çıkış aktif olur.
ENABLE (Enable BOOL)
Bu fonksiyon blokları Enable girişi geldiği sürece her kontrol döngüsünde tetiklenir ve işletilir.
Enable girişi aktif olduğu sürece giriş değişkenleri her döngüde güncellenir.
Örnek : MC_Power (Bu fonksiyon servo motoru enerjilendirir.)
Status = Enable ve (G5 Power Stage Status)
Enable Tipi FB’ların Temel Yapısı :
Status : Verilen komut işletilebilir olduğu sürece Enable giriş aktif iken bu çıkışta aktif olur.
Aborted : Eğer mevcut komut işletilirken başka bir komut tarafından işlem kesilirse bu çıkış aktif olur.
Error : Eğer giriş parametrelerinden biri aralık dışı bir değer olarak ayarlandıysa hata çıkışı aktif olur.
Busy : Fonksiyon bloğu komutu işlenmeye başladığı an aktif olur ve komut tamamlanana kadar aktif kalır ta ki hareket tamamlanana ve ya kesilene kadar.
Hareket Komutunu İşletme Sıralaması :
Spesifik fonksiyon bloğu çalıştığında Motion fonksiyonlar Master Controle istek yapar.FB çalışması ise IEC program yapısına bağlıdır.
BufferMode : Buffered **
Buffering Modes : Aborting
Buffering Modes : Buffering
Blending :
Blending mode; kullanıldığında bir hareket komutundan diğerine geçişteki hız profilini belirler.
Aborting / Buffered / Blending Low / Blending Previous / Blending Next / Blending High ->>> Motion FB [BufferMode]
Blending Low : Fonksiyon bloğu 1 ile fonksiyon bloğu 2 arasındaki en düşük hızdır.
Blending Next : Fonksiyon bloğu 2’nin hızıdır.
Blending High : Fonksiyon bloğu 1 ve fonksiyon bloğu 2 arasındaki en yüksek hızdır.
Blending Previous : Fonksiyon bloğu 1’in hızıdır.
Hareket Kontrol Fonksiyonları :
Tek Eksen Kontrol Blokları ;
Bağımsız olanlar ;
MC_Home — MC_Move/Relative/Absolute – MC_MoveZero – MC_MoveFeed – MC_Stop
Sürekli olanlar;
MC_MoveJog – MC_MoveVelocity – MC_Torque
Senkronize olanlar ;
MC_CombineAxes – MC_GearOut –MC_Phasing – MC_MoveLink – MC_GearIn –MC_GearInPo –MC_CamIn – MC_CamOut
Diğerleri ;
MC_Power – MC_SetPosition –MC_TouchProbe – MC_ZoneSwitch –MC_SetOverride
MC_Power : Tanımlama ; Servoyu aktif etmek için kullanılır.
MC_Reset : Tanımlama ; Sürücüdeki mevcut hata durumunu resetler.
MC_Home : Tanımlama ; MC_Home bloğu ile eksen ayarlarında yapılan Homing ayarları kullanılarak Home işlemi yapılır.
MC_SetPosition : Tanımlama ; Eksenin o anki hedef pozisyon değerini istenilen değer ile değiştirir.
MC_Move : Tanımlama ; Relative(Bağıl) ya da absolute (Mutlak) pozisyonlama
MC_Move : Fonksiyon detayları ; relative ya da absolute olarak ayarlanan Velocity , Acceleration ve Jerk parametrelerine göre pozisyonlama yapar.
Jerk değeri sıfırdan farklı girildiğinde kalkış ve duruşlar daha yumuşak olur, bir nevi S rampası gibi çalışır.
MC_MoveFeed: Tanımlama : The MC_MoveFeed bloğu ile dışarıdan gelen bir tetikleme sinyali belirlenen mesafe kadar pozisyonlama yapılmasını sağlar.Bu çalışma eksenin absolute pozisyonlama , relative pozisyonlama , hız kontrolünde uygulanabilir.
MC_MoveFeed Giriş Parametreleri :
Execute : Bool : True or False
WindowOnly : Bool : True or False
FirstPosition: LREAL : Full Range
LastPosition : LREAL : Full Range
ReferenceType : ENUM MC_REFERENCE_TYPE : 1 : mcFeedBack
Position : LREAL : Full Range
Velocity : LREAL : Positive Number
Acceleration : LREAL : Non-negative Number
Deceleration : LREAL : Non-negativee Number
Jerk : LREAL : Non-negative Number
Direction : ENUM MC_DIRECTION : 0->mcPositiveDirection , 1->mcShortestWay ,
2->mcNegativeDirection , 3-> mcCurrentDirection
MoveMode : ENUM MC_MODE_MODE : 0->mcAbsolute , 1-> mcRelative , 2 ->mcVelocity
FeedDistance : LREAL : Full Range
FeedVelocity : LREAL : Positive Number
MC_MoveFeed : Çıkış Parametreleri
Done : İşlem tamamlandığında TRUE olur
Busy : Çalışma TRUE olarak değiştiğinde TRUE olur
Active : İşlem çalışmaya başladığında TRUE olur
InFeed : İnterrupt girişi tarafından besleme başladığında çalışır.
CommandAborted : Çalıştırılamadığı durumlar altında çalıştırma işlemi yapılmaya çalıştığında TRUE olur.Ya da işlem kesildiğinde TRUE olur.
Error : Hata meydana geldiğinde TRUE olur.
MC_MoveFeed : Giriş /Çıkış parametreleri
Axis : AXIS_REF : Axisi tanımlar.
TriggerInput : TRIGGER_REF : Trigger durumunu set eder.
TriggerVariable : BOOL : TRUE ya da FALSE
TRIGGER_REF :
Trigger Mode : ENUM MC_TRIGGER_MODE : 0->mcDrive , 1->mcController ; 0->Sürücü modu ,
1->Kontrolör modu
LatchID : ENUM MC_TRIGGER_LATCHID : 0->ımLatch1 , 1->ımLatch2 ; 0->Latch1 , 1->Latch2
InputDriver : ENUM MC_TRIGGER_INPUT_DRIVER : 0->mcEncoderMark , 1->mcEXT ; 0->Faz-z-sinyali , 1->Harici giriş
MC_MoveFeed : Fonksiyon Detayları
Eksen çalışma moduna göre absolute , relative ve ya hız modunda çalışmaya başlar.
Absolute veya relative modlar için target pozisyon değeri ulaşılacak pozisyon değeridir.
Harici tetikleme girişi geldiğinde (touchprobe) bir önceki pozisyon değeri iptal edilir ve belirlenen feed pozisyon değeri relative olarak işletilir.
Eğer WindowOnly girişi aktif edilirse daha sonra FirstPosition ile LastPosition değerleri tetikleme sinyalinin aktif olacağı aralığı belirlemek için kullanılır.Belirlenen aralıkta gelen ilk tetikleme sinyali ile Feed mesafesi alınacaktır.
MC_MoveVelocity : Tanımlama
MC_MoveVelocity bloğu servo pozisyon kontroldeyken hız kontrolü yapmayı sağlar.
MC_Stop : Tanımlama : Duruşa geçme işlemidir.
MC_TouchProbe : Tanımlama : Eksenin register girişindeki pozisyonu kaydeder.
G5 EtherCAT sürücü üzerinden dahili olarak iki adet bağımsız hızlı register girişi bulunur.NJ Serisinin genel amaçlı inputları da register için kullanılabilir ama hareket kontrolünde tavsiye edilen sürücünün girişlerini kullanmaktır.
MC_TouchProbe komutunda eğer Window değişkeni TRUE yapılırsa sadece belirlenen aralıkta register girişini kullanma sağlanabilir.İstenirse işlem sonrası eksen stop konumuna alınabilir.Bunun için StopMode seçeneği değiştirilir.
MC_Torque : Tanımlama : MC_TorqueControl fonksiyon bloğu sürücünün tork kontrol modunu kullanarak motorun torkunu kontrol eder.
MC_Torque hedef torka ulaşmak için bir tork rampası uygular.
MC_Torque eksen hızını limitlendirmek için ise Velocity girişindeki değeri kullanır.
Senkronize Hareket :
Senkronize hareketlerde Master-Slave ilişkisi bulunmaktadır.
Slave hareket profili Master’ın profiline göre işletilir.
Mekanikten örnek vermek gerekirse ;
Dişli Mekanizması (Gearing) : Master ve Slave arasında sabit bir oran bulunur.
Cam Mekanizması : Slave pozisyonu Master pozisyonunu geometrik olarak takip eder.
MC_GearIn : Tanımlama : Master ve Slave arasında sanal bir dişli oranını belirler.
Slave Eksenin Aldığı yol = Master Eksenin aldığı yol x Numaretör Oranı/Denominatör Oranı
Master komut referansı aşağıdaki gibi olabilir.
Mevcut enkoder pozisyonu (enkoder değeri)
Bir önceki cyce’daki komut değeri (profil değeri)
Master’dan : Aktüel pozisyon + Son komut pozisyonu + Komut pozisyonu -> Dişli : Numerator/Denominator -> Slave’e : Komut pozisyonu bilgisi
MC_GearInPos : Tanımlama : Master ve Slave belli pozisyonlara ulaştığında belirlenen oran ile birbirlerine bağlanırlar.
MC_GearOut : Tanımlama : Birbirine gear ile bağlı iki ekseni ayırmak için kullanılır.
MC_MoveLink : Slave eksen Master eksene S rampası ile bağlanır.Böylece master’a belli bir mesafenin ardından senkron olur.
Genellikle slave belli bir hızdaki master’a senkron olup bir süre beraber hareket eder ve sonra senkrondan çıkar.Örnek olarak uçan testere uygulaması verilebilir.
Master-Slave hız eşleşmesini sağlarken aşağıdaki kurallar dikkate alınırlar :
Master Acc Distance = 2 x Slave Acc Distance
Master Dec Distance = 2 x Slave Dec Distance
Master Ct. Speed Distance = Slave Ct. Speed Distance
Uçan Testere Uygulama Örneği aşamaları :
Slave’in Master’ı yakalaması için rampalanır. (ACC Dist)
Senkronda hız sabit tutulur (Ct. Dist)
Slave senkrondan çıkmak için durur (DEC Dist)
Master 0 noktasına gelmeden slave geri döner ve başlangıç pozisyonunu alır.
SYSMAC STUDIO EĞİTİM NOTLARI İNCELEME 2 :
Bugün ki yazımızda Sysmac Studio Eğitim Notları İnceleme adlı yazımızı sizlerle paylaştık.Bu yazımızla Sysmac Studio’ya dair genel bir tablo çizmiş olduk aslında.Sysmac Studio’ya dair diğer yazılarımızda buluşmak dileğiyle.
İyi Çalışmalar.