#1 TIA Portal ve Factory I/O ile Python: Sanal Ayıklama Uygulaması
Python Programlama ile Sanal Ayıklama Uygulaması
Proje Özeti
Bu projede, TIA Portal ve Factory I/O ortamları kullanılarak bir Sanal Ayıklama Uygulaması geliştirilmiştir. Görüntü işleme senaryosu, Python programlama dili ve OpenCV kütüphanesi kullanılarak gerçekleştirilmiştir. Simülasyon ortamları arasındaki veri alışverişi, NetToPLCSim aracılığıyla TIA Portal (PLCSIM) ve Factory I/O arasında sağlanmıştır. Geliştirilen sistemde, kamera görüntüsünden elde edilen renk bilgileri işlenerek ayıklama mekanizmalarının kontrolü sağlanmış ve sistemin senaryo doğrultusunda çalışması sağlanmıştır.
Senaryo
Factory I/O ortamında sahneye eklenen konveyör üzerinde yayıcı (Emitter) aracılığı ile mavi hammadde ve yeşil hammadde (Blue Raw Material, Green Raw Material) üretilecektir. Simülasyon çalışmaya başladığında “Start” butonuna basılınca konveyör hareket etmeye başlayacak, 1. kontrol noktasında kamera mavi hammadeyi görünce “Pusher-1” mavi hammaddeyi ileri itecek ve başlangıç konumuna dönecektir. 2. kontrol noktasında kamera yeşil hammaddeyi görünce “Pusher-2” yeşil hammaddeyi ileri itecek ve başlangıç konumuna dönecektir. Simülasyonun herhangi bir anında “Acil Stop” veya “Stop” butonuna basılınca konveyör hareketini durduracaktır. Tekrardan “Start” butonuna basılması durumunda sistem kaldığı yerden çalışmasını sürdürecektir.
İşlem Adımları
1. Factory I/O TIA Portal Template İndirme
Bu projede gerçekleştirilen senaryoda TIA Portal V20 ile PLCSIM üzerinden Factory I/O haberleşmektedir. Bu işlemin gerçekleşebilmesi için Factory I/O template dosyası gerekmektedir. Bunun için Factory I/O Template adresinden ilgili dosya edinilmiştir.
2. Factory I/O Template ile TIA Portal Programı Oluşturma
İndirilen bu template dosyası TIA Portal ile birlikte açılarak kullanılmıştır.

Template dosyası ayrıca TIA Portal arayüzü üzerinden “Open Project” menüsünden de açılabilmektedir.
Template dosyası TIA Portal arayüzünde açıldıktan sonra uygulanmak istenen senaryoya yönelik program hazırlanmıştır.
Aşağıdaki resimlerde belirtilen senaryoya yönelik LD (Ladder Diagram) programı gösterilmektedir.
Bu aşamada aşağıdaki PUT/GET izni verilmelidir.
“TIA Portal > Device Configuration > General > Connection mechanisms > Permit access with PUT/GET communication from remote partner” kutucuğu işaretlenerek izin verilebilmektedir.
Bu ayar yapıldıktan sonra PLC’ye sağ tıklayarak Compile > Hardware (rebuild all) seçeneği ile rebuild işlemi gerçekleştirilip proje PLCSIM’e (Download to device) seçeneği ile yüklenilmelidir.



3. PLCSIM - TIA Portal Haberleşmesi
Hazırlanan senaryoya uygun kod hazırlandıktan sonra derleme işlemi gerçekleştirilmiştir. Bu işlem adımı için “Edit > Compile” veya “Ctrl + B” kısayolu kullanılabilmektedir. Devamında üst menüde bulunan “Start Simülation” butonu ile PLCSIM’ başlatılmıştır.
Açılan ekranda “Start Search” yaparak bağlı olunan cihazlar listelenmektedir. Bu işlemi yaparken “PG/PC Interface : PLCSIM” seçeneğinin belirtildiği gibi olması gerekmektedir. Arama sonucunda PLCSIM PLC seçilerek program “Load” denilerek yüklenmiştir.

Devamında açılır listeden “Start Module” seçeneği seçilerek “Finish” butonuna basılarak işlem tamamlanmıştır.

Böylelikle TIA Portal ile PLCSIM haberleşmesi gerçekleştirilmiştir.
PLCSIM > SimView menüsünden manuel olarak eklediğiniz girişleri değiştirerek çıkışın nasıl etkilendiğini gözlemleyebilirsiniz.
4. NetToPLCSim Ayarları
Gerçekleştireceğimiz senaryoda görüntü işleme ile ilgili işlemler için “Python” kullanılacaktır. Python-TIA Portal haberleşmesini sağlamak için “NetToPLCSim” programı kullanılmıştır.
Program indirme bağlantısı: NetToPLCSim
Programı indirdikten sonra “Add” ile ekleme yapılır.

Gelen ekranda;

1 Numara: Eklenecek bağlantıya istenilen isim verilebilmektedir.
2 Numara: Network IP Adress’in en sağında bulunan “…” sembolüne tıklayarak kulllandığınız bilgisayara ait IP adresinin eklenmesi gerekmektedir.
3 Numara: PLCSim IP Adress’in en sağında bulunan “…” sembolüne tıklayarak PLCSIM’in IP adresinin eklenmesi gerekmektedir.
4 Numara: Burada belirtilen “2” sayısı “1” ile değiştirilmelidir. Siemens S7-1200 PLC için Rack / Slot numarası: 0 / 1 şeklinde olmalıdır.
Bağlantılar doğru gerçekleştirildiğinde “…” sembolüne tıklandığında IP adresleri ekranda listelenmektedir.
Belirtilen ayarlar yapıldıktan sonra ekran aşağıdaki gibi gözükmektedir. “Start Server” diyerek bağlantı başlatılmıştır.

Status alanının “RUNNING” olduğu görülerek bir sonraki aşamaya geçilmiştir.
5. Factory I/O Sahnesi Oluşturma
Sürecin devamında Factory I/O ile hazırlanan senaryoya uygun sahne oluşturulmuştur. Hazırlanan senaryoya uygun bileşenler (emitter, belt conveyor, curved conveyor, pusher, electric switchboard, emergency stop, stop button, start button) sahneye uygun konumda yerleştirilmiştir.

Bileşenlerin dikey eksende (yukarı/aşağı) konumlandırılması için ‘V’ kısayol tuşu kullanılmaktadır.
6. Factory I/O Konfigürasyon
Factory I/O uygulamasında üst menüden “File>Drivers” menüsüne giderek sol üstte”DRIVER”ın hizasında yanında bulunan açılır listeden “Siemens S7-PLCSIM” seçilmiştir. Bu aşamada TIA Portal-PLCSIM üzerinden Factory I/O ile haberleşmesi tamamlanmıştır.

PLC kodunda tanımlanan değişkenler, “File > Drivers” menüsü üzerinden ilgili fiziksel giriş ve çıkış adresleri ile eşleştirilmiştir.

Bu işlem gerçekleştirildikten sonra sağ üstte bulunan “Connect” tuşuna basılarak TIA Portal’da hazırlanan kod PLCSIM aracılığıyla Factory I/O ile haberleştirilmiştir.
PLCSIM aracılığı ile bağlanılan PLC “Run” modunda olmalıdır
Factory I/O ortamında konveyörde hareket eden mavi ve yeşil hammaddeleri algılayarak işlem yapabilmek için Python programlama dili kullanılmıştır.
Bu adımla birlikte Factory I/O ve TIA Portal (PLCSIM) arasındaki simülasyon bağlantısı tamamlanmıştır. Artık senaryodaki görüntü işleme mantığını uygulamak üzere Python kodlama aşamasına geçilmiştir.
6. Python Programlama Adımları
6.1 Kullanılan Kütüphanelerin “Import” edilmesi
İlk olarak hazırlanan senaryonun çalıştırılabilmesi için gereken kodları barındıran kütüphaneler “Import” edilmiştir.
time kütüphanesi : Programda bulunan döngü zamanlamasını yönetmek için kullanılmıştır.
cv2 kütüphanesi : Görüntüyü HSV’ye çevirme, renk aralığına göre maske üretme, maskede piksel sayma vb. işlemlerini gerçekleştirmek için kullanılmışır.
numpy kütüphanesi : “mss” ile yakalanan ekran görüntüsünü diziye (np.array) çevirme, HSV eşik değerlerini dizi olarak tanımlama ve görüntü üzerinde dilimleme yapmak için kullanılmıştır
mss kütüphanesi : Factory I/O ortamında kamera bulunmadığı için ekranda belirlenen bölgelerin (ROI) yakalanmasını sağlamak için kullanılmıştır.
snap7 kütüphanesi : Siemens S7-1200 PLC ile Python üzerinden bağlanıp veri alışverişi yapmak için kullanılmıştır.
snap7.util : PLC byte’ı içindeki ilgili biti set etmek için kullanılmıştır.
6.2 Sistem Konfigürasyonu
Programda kullanılacak kütüphaneler eklendikten sonra bu aşamada program içerisinde kullanacağımız değişkenlerin tanımlaması yapılmıştır. Konfigürasyon tamamlandıktan sonra “plc.connect()” komutuyla bağlantı sağlanmıştır.
6.3 Algılama ve Karar Üretme
Bu aşamada ekrandan alınan ROI görüntülerinde HSV tabanlı renk analizi yapılarak mavi ve yeşil nesnelerin varlığına karar veren görüntü işleme aşaması yönetilmiştir.
6.4 PLC Bit Güncelleme
Bu kod bloğunda ilk önce hedef bitin bulunduğu “Byte” PLC’den okunmuş, ilgili bit manipüle edildikten sonra tekrar yazılarak aynı adresteki diğer bitlerin korunması sağlanmıştır. Snap7 kütüphanesi ve S7 protokolü verileri Byte (8-bit) tabanlı işler. Doğrudan yazma işleminde hedef byte içerisindeki diğer 7 bit sıfırlanabilmektedir.
6.5 Periyodik Durum Log
Bu kod bloğu ile ana döngüden bağımsız olarak, saniyede 2 kez durum verileri (piksel sayıları ve lojik sonuçlar) konsola yazdırılmıştır.
6.6 Debug Amaçlı Görüntü Gösterimi
Bu aşamada ham görüntüler ile birlikte elde edilen maskeler ekrana yansıtılmıştır. Aynı zamanda klavyeden “q” harfine basınca programın manuel olarak sonlandırılabilmesi sağlanmıştır.
6.7 Döngü Zamanlama Kontrolü
Bu kısımda düzenli veri akışı sağlamak adına, her işlem sonunda hesaplanan süre kadar bekleme uygulanmıştır.
6.8 Uygulama Sonlandırma Aşaması
Programın en sonunda uygulama kapatılırken tüm açık pencereler ve PLC bağlantısı güvenli bir şekilde kapatılarak kaynaklar serbest bırakılmıştır.
7. Python Programı
8. Sonuçlar
Gerçekleştirilen projeye dair yapılan çalışmanın video kayıtları aşağıdaki gibidir.
Factory I/O ortamında yazılan PLC programının konveyör, start, stop, acil stop butonlarının çalışması aşağıda gösterildiği gibi kontrol edilmiştir.
Gerçekleştirilen projenin simülasyonuna ait video kaydı aşağıdaki gibidir.