plc notlari

calismalar mitsubishi’nin FX3U-16MT/DSS plc’si icin yapildi.

projede kullandiklarim:

  • modbus icin FX3U-232ADP-MB modulu(rs232 uzerinden)
  • RFID okuyucu icin FX3U-485-BD modulu (rs485 uzerinden)
  • input expander olarak FX2N-16EX
  • output expander olarak FX2N-16EYT

bit değişkenleri:

  • x : giriş : adreslemesi 8’lik – fiziksel giriş
  • y : çıkış : adreslemesi 8’lik – fiziksel çıkış
  • m : iç röle : adreslemesi 10’luk. bunlara yardımcı röle de deniyor. – dahili bit
  • s : durum : adreslemesi 10’luk – step röle

word değişkenleri 16 veya 32 bit’lik :

  • t : zaman sayıcı : ileri zaman sayıcılardır. 1/10/100 ms’liktirler – timer – timer’lar 1msn’lik, 10msn’lik, 100msn’lik olabiliyorlar.
  • c : sayıcı : ileri/geri sayıcılar – counter – önündeki şart her açılıp kapandığında değerini 1 arttırır.
  • d : veri saklayıcı : verileri depolayan bellek. – data memory
  • z,v : index saklayıcı : x,y,m,t,c,d değişkenlerinin indirekt adreslemeleri için kullanılıyor. pointer gibi olabilir.

değişken tipleri :

  • p : işaretleyici : dallanma komutunun atlama hedefi
  • i : kesme işaretleyici : kesme sırasında interrupt’ın atlayıp gideceği yer.
  • n : ana kontrol : ana kontrol sinyali ??? – nesting ???
  • k : 10’dalık sabit
  • h : 16’lık sabit

iç röleler – yardımcı röleler – dahili röleler – internal relays

  • normalde açık ve normalde kapalı olabilirler.
  • dış dünya ile bir bağlantıları yoktur bunların. geçici hafıza birimleridir bunlar aslında.
  • bunlar sanal röleler. software röle diye de geçiyor bunlar. lojik operation’larda kullanılmak için.
  • bunların önlerine açık ya da kapalı kontak konularak kullanılabiliyor.
  • 2 tiptirler. enerji kesildiğinde konumlarını koruyanlar ve koruyamayanlar.

standart roleler:

  • M8000 = PLC çalışma modundayken bu röle daima “1” olarak ayarlıdır.
  • M8001 = PLC çalışma modundayken bu röle daima “0” olarak ayarlıdır.
  • M8002 = Başlatma darbesi (Çalışma modunun etkinleştirilmesinin ardından bu röle bir program döngüsü için “1” olarak ayarlanır)
  • M8004 = Hata rölesi
  • M8005 = Düşük pil gerilimi
  • M8013 = Saat sinyali darbesi: 1 saniye
  • M8031 = Pil korumalı olarak kaydedilmemiş tüm değişkenleri siler (veri kaydediciler hariç)
  • M8034 = Çıkışları devre dışı bırakır, PLC çıkışları kapalı olarak kalır ancak program çalışmaya devam eder.

youtube video’lari icin buraya

zaman sayıcıları – counter’lar, set edilen değere ulaşınca kontak verirler.


rising pulse veya falling pulse eklenince giriş sadece pulse olarak çalışıyor.

  • mesela rising pulse’ın ucuna set y0 bağlanmışsa, rising pulse high olduğu anda y0 high oluyor.
  • mesela rising pulse’ın ucuna reset y0 bağlanmışsa, rising pulse high olduğu anda y0 low oluyor.
  • mesela falling pulse’ın ucuna set y0 bağlanmışsa, rising pulse low anda y0 high oluyor.
  • mesela falling pulse’ın ucuna reset y0 bağlanmışsa, rising pulse low olduğu anda y0 low oluyor.

timer’lardaki 50 değeri 5 sn demek. timer değeri : t0 k50 (burdaki k harfi constant demek)


çıkış tarafında pulse oluşturmak için pls y. 1 kereligine pulse verip sonra LOW oluyor.


sm413 ismindeki girişler clock pulse uretirler.
pulse aralığını değiştirme istenirse girişin ismi değiştirilmeli. bunların hangilerinin ne olduğuna help’ten bakilabilir. special relay/register help başlığı altında.


movp ile mov arasındaki fark :

  • x0 — mov d0 d1 denildiğinde, x0 high olduğunda d0’ın her değeri devamlı olarak d1’e aktarılıyor.
  • x0 — movp d0 d1 denildiğinde, x0 high olduğu anda d0’ın değeri d1’e aktarılıyor. d0’ın diğer değerleri aktarılmıyor. yani anlık aktarım yok. sadece x0 değeri high olduğu anda 1 kereliğine aktarım yapılıyor.

counter :
girise SM413. çıkışa C0 K5. 5’e kadar sayar. counter’ların resetlenmesi mecburidir. belirlenen değerinden fazla sayamaz. image003

counter resetleme:
girişe herhangi bir giriş kontağı. çıkışa da rst C0 ile resetlemek istenen counter değişkeni. burada C0 ismindeki counter resetlenmiş olur. counter’ların resetlenmesi mecburidir. belirlenen değerinden fazla sayamaz. image004


comparator’ler, karşılaştırıcılar:
giriş yerine herhangi bir giriş. çıkıştan önce bir karşılaştırıcı ayarlanıyor. asagidaki durum, K2 sabiti (yani 2 değeri) C0’dan küçük ise Y1’i set et demek. image005

asagidakinde ise K2 sabiti (yani 2 değeri) C0’dan küçük veya eşit ise Y1’i set et demek. image006

bu yukarıdaki 2 örnek kontak içinde karşılaştırma diye geçiyor. bir de CMP komutu ile karşılaştırma diye bir şey var.

CMP komutu ile karşılaştırma : bu karşılaştırma türünde tek bir karşılaştırma ile 3 değer kontrol ediliyor. yani kontrol edilen 3 değerinde kullanıldığı durumlarda CMP ile karşılaştırma kullanışlıdır.

image007

  • M0 1. Parametre, 2. parametreden büyük olduğu zaman ON olur
  • M1 1. Parametre ve 2. Parametre birbirine eşit olduğuzaman ON olur.
  • M2 1. Parametre, 2. Parametreden küçük olduğu zaman ON olur.

yukarıdaki CMP ile karşılaştırma örneğinde M0,M1 ve M2 bitlerinin 3’ü de işgal ediliyor, edilmek zorunda.


increment pulse :
x4’ün her set edilmesinde d2 değişkeni 1 arttırılıyor. counter’dan farkı var bence. counter için max bir sayı giriliyor. counter o sayıya kadar sayıyor. bunda ise sanki son sayı yok gibi. image008

increment :
X0 set edildiği anda D0 increment etmeye başlar. D0 değeri takır takır artmaya başlar ta ki X0 sıfırlanana kadar. bunu engellemek için X0 yerine “Rising Pulse” veya “Falling Pulse” falan koymak gerekiyor

image009

aynı şekilde decrement olayı için de DEC komutu kullanılabiliyor.


branch’lar VEYA demek. yani hattı OR’luyorlar.


latch’ler ile ilgili olarak şu söylenebilir : M’lere benzer L’ler de. ama M’ler power off olduğunda statuslerini kaybederler yani false durumuna düşerlerken L’ler durumlarını korurlar ve power off olsa bile true olarak kalırlar.
hem M’lere hem de L’lere flag denilmesi daha mantıklı


D değişkenlerine değerler verilirken 0-199 arasındaki değerler power off olduğunda değerlerini koruyamıyorlarmış. ama 200-399 arasındaki değerler koruyabiliyorlarmış. bundan 16. vidyoda bahsediyor.

  1. vidyoda ise D200-D511 arasındaki değerlerin korunduğundan bahsetmiş. bunlar cihazdan cihaza da değişebilir bence.

veri saklayıcılardaki değerlerin negatif olarak gösterilmesi :
ikinin komplementi :
önce ikilik sayının tüm bitlerini tersle. sonra tüm ikilik sayıyı 1 ile topla.


ikilik sayılardaki işaret bitleri 0 ise +’dır, 1 ise –‘dir.


k ve h sabitleri :

  • k sabiti :

    • 16 bit veri kullanırken -32,768 ile +32,767 arasında ,
    • 32 bit veri kullanılırken -2,147,483,648 ile +2,147,483,647 arasında onluk
  • h sabiti :

    • 16 bit veri kullanırken 0 ile FFFF arasında ,
    • 32 bit veri kullanılırken 0 ile FFFFFFFF arasında onaltılık

ladder diyagram komut işletim sırası :

image010

PLC’nin ilk satırdan son satırdaki END komutuna kadar taramasına 1 tarama zamanı deniyor. PLC programlamasının yapıldığı programın altındaki barda “Scan Time” olarak görünen zaman bu süredir.


5 sn sonra kontak kapatmak :

image011


switch case yapısı ile input’lara göre output’ların ayarlanması:

image012


örnek konveyör – sensör uygulaması :

image013


timer’lar bitince counter’lar timer olarak kullanılabiliyor. counter’ların timer olarak kullanılması : image014


ALT komutu önündeki şart sağlanınca M0 switch eder. yani high ise low olur, low ise high olur. (alter: değiştir) image015


aşağıdaki durumlar ladder diyagramın baştan sona nasıl tarandığını göstermek için birer örnek: örnekte 1. satırda X0 HIGH (START) olunca konveyör (Y0) calışmaya başlıyor. 2. satırda fotosel’den (X2) gelen pulse 10 tane olunca C0 (KUTU SAYICI) HIGH oluyor. 3. satırda C0 counter’ı resetleniyor.

aşağıdaki ladder’da C0 counter’ı 10’a kadar sayıp resetlense bile Y0 konveyör’ü hiç durmaz. image016

aşağıdaki ladder’da ise C0 counter’ı 10’a kadar sayıp resetlenince Y0 konveyör’ü bir anlık duracaktır.
image017


plc’deki genişletme seçenekleri :

genişletme modülleri 3 kategoriye ayrılmış:

  • digital giriş ve çıkışları olan modüller. (kontrolörün sağ tarafına takılıyor.)
  • herhangi bir digital giriş ve çıkışı olmayan modüller. (kontrolörün sol tarafına takılıyor.)
  • arayüz ve iletişim adaptörleri (kontrolörün üst tarafına takılıyor.)

function block hazırlarken constant’lara değer atamak için örnekler:

  • BOOL = TRUE ve FALSE
  • Binary = 2#0110
  • Octal = 8#337
  • Decimal = K17 veya 135
  • Real değer = 2.34 veya E2.34
  • Character = “ASD” veya ‘ASD’
  • Time = T#1h veya T#1d2h3m2s5ms

aşağıdaki function block için, EN aktif olduğunda ENO da aktiftir diyemeyiz. ENO’nun aktif olması için s’nin ve EN’in aktif edilmesi gerekir. image018


image memory diye bir kavram var.

aşağdaki diyagramdaki, 2 tane Y03’ün bu şekilde 2 farklı girişe bağlanması normalde uygun değildir. ama bu şekilde bağlandığı takdirde X01 HIGH olduğunda Y03 HIGH olmaz. ama X01’den gelen veriyi image memory olarak hafızasına kaydeder. bu sayede Y04’u HIGH yapabilir. ama kendisi LOW’da kalır. ta ki X02 HIGH olana kadar. yani Y03 HIGH olmak için X01’i takmaz. X02’yi ciddiye alır. HIGH olmak için X01’i takmaz ama Y04’ü X01’den gelen HIGH komutu ile HIGH yapabilir. bu image memory sayesinde oluyor. ama bu şekilde diyagram çizmek uygun değil.

image019


2 girişe 1 çıkış bağlamaktansa aşağıdakini yapmak gerekir. image020


diyagramda soldaki gibi 2 yönde akım durumu varsa, sağdaki şekle çevirmek gerekiyor. image021


plc forumu buraya


CMP fonksiyonu – compare – karşılaştırma :

image022

bu fonksiyona girilebilecek olan datalar : image023

label name’i d olan data 3 elemanlı bir array. global değişkenlere aşağıdaki gibi giriliyor. image024

s1 ve s2 değişkenleri eşit ise sonuç değişkeni aşağıdaki gibi çıkıyor, sadece 1. indisli elemanı 1 çıkıyor. image025

s1, s2’den büyük ise sonuç değişkeni aşağıdaki gibi çıkıyor, sadece 0. indisli elemanı 1 çıkıyor. image026

bu fonksiyonun çıktılarına Y0,Y1 ve Y2 çıkışlarından erişilebiliyor. ama bu çıktıları aşağıdaki gibi bağlamamalı. bu şekilde bağlanırsa sonuç ne olursa olsun tüm Y’ler HIGH oluyor. image027

bunlar aşağıdaki şekilde bağlanmalılar. yani sonralarına birer tane output konulunca adam gibi sonuç veriyorlar. image028


ctud fonksiyonu : counter up/down

image029

  • CU : yukarı yönde saydırma pulse’ı
  • CD : aşağı yönde saydırma pulse’ı
  • CV : sayma sonucu
  • PV : LOAD’a basınca CV’ye yüklenecek olan değer – counter’ın dayanacağı son nokta değil bu. bundan daha ilerilere kadar sayabiliyor.
  • LOAD : CV’ye PV’deki değeri yükleten pulse
  • QU ve QD : counter’ın aşağı yönde mi yukarı yönde mi saydığını gösteren output – bunların çıkış vermeleri PV değerine göre değişiyor. yani PV’yi orijin kabul ederek çıkış veriyor bunlar.
  • RESET : CV değerini sıfırlayan pulse

tp_e fonksiyonu :

bir kontak açıldığında bunun sonucu dışarı pulse olarak verilmek istenirse kullanılıyor. image030

  • IN : MO ya da X0 gibi bir giriş kontağı – giriş işareti
  • PT : IN girişine verilen işaretin çıkışta kaç saniyelik bir pulse üreteceği.
  • Q : istenilen uzunluıktaki çıkış.
  • ET : pulse’ın FALSE olması için kalan süre.

TIMER_10_FB_M fonksiyonunun kullanımı :

image031

  • preset değeri : timer’ın varacağı son değer
  • Valueln değeri : timer’ın saymaya başlayacağı değer
  • Valueout değeri : timer’ın değerini anlık olarak gösteren değer
  • Status değeri : timer son varacağı değere (preset değerine) vardığında bu HIGH oluyor.

yukarıdaki timer 2’den başlıyor ve 10 sn’ye kadar sayıyor, yani toplam 8 sn sayıyor. 10. sn’de CIKIS değeri HIGH oluyor. Sayma değerleri SAYI_1’de anlık olarak görülüyor.