RJ45 2 - Novexx barkod yazıcıya, S7-1200 plc ile etiket yazdırma
Aslında burada anlattığım konu, yazıcı markasından bağımsızdır. Bir önceki RJ45 yazısında Ascii TCP protokolünden bahsetmiştim.. Yazıcıya a b c gibi bildiğimiz ascii karakterler yollayacağız, yani yazıcı markasına göre yazıcı dili değişmekte fakat sonuçta yöntem değişmemektedir. Bu işi yaparken ethernet kablosuyla veya TCP/IP ile çalışacağız. Ama birazdan değineceğim Byte Array gönderme yöntemiyle, S7-1200 e ek modül takarak RS232 ile de yazıcıya etiket bilgisi yollanabilir, sadece plc de kullanılan blok komut değişecektir. Ama ek modül kullanmaya gerek yok. Ethernet portu zaten bu plc de mevcut ve onu kullanacağız. TCP/IP haberleşmede blok komut olarak TSEND_C ile bu işi gerçekleştireceğiz.
Yazıcımız yok diyelim, bu durum burada anlatacağım plc programını yapmanıza engel değil. PC de çalışan Hercules isimli bir program, yazıcı yerine geçebiliyor. Yazıcı yerine bu programı kullanacağız. Ama gerçek bir plc ye ihtiyaç var, malesef bazı işlerde PLCSIM çalışmıyor..
Öncelikle hangi iki cihazı haberleştireceksek, cihazlar aynı ip grubuna ve aynı subnet mask a sahip olmalıdır.. Subnet mask, türkçede alt ağ maskesi diye geçiyor..
Şimdi, PLC ve PC mizi aynı ip grubuna dahil edelim..
Örneğin plc şuan 192.168.0.1 olduğundan PC nin ip sini ayarlayalım. Windows 10 ayarlarına girelim --> Ağ ve İnternet --> Ethernet --> Bağdaştırıcı seçeneklerini değiştir e tıklayalım.. Açılan pencerede network kartımızın tanımlı olduğu Ethernet ikonuna sağ tık yaparak Özellikler e tıklayalım..
Açılan pencerede, resimdeki TCP/IPv4 ü seçip Özelliklere tıklayalım.. Açılan penceri aşağıdaki gibi düzenleyelim ve Tamam a tıklayalım :
PLC 192.168.0.1, PC 192.168.0.182 olmuş oldu. 182 yerine 1 hariç başka bir sayı yazabilirsiniz, 1 yazamazsınız çünkü o adres PLC ye ait.. Ethernet kablosuyla PLC ve PC yi birbirine bağlayalım.
Hercules programını internetten indirelim. Bu programı ilk çalıştırdığınızda Windows, bağlantıya izin verilsin mi gibi soru soracaktır, izin vermeniz gerekir. İzni kontrol edebileceğiniz yere gitmek için Windows başlangıç ikonunun yanındaki arama ikonuna tıklayın "firewall" yazın, "Güvenlik duvarı ve ağ koruması" na tıklayın. Çıkan pencerede alt sıralarda "Gelişmiş ayarlar" a tıklayın. Sol tarafta "Gelen Kuralları" na tıklayın, aşağıdaki gibi hercules_3-2-8 için yeşil tik görmeniz gerekiyor. Burada hercules için kırmızı bir kural görürseniz, PLC den Hercules e bilgi yollayamayız. Kırmızı kuralı silip, Hercules i yeniden çalıştırın ve izin verin. Yada Hercules için bağlantılara izin veren yeni kural oluşturun.
Hercules in yazıcı gibi davranması için server (sunucu) olması gerekiyor. Bunun için programı açınca üst tarafta TCP Server tab ını seçin.. Bu durumda S7-1200, client (istemci) olmuş oluyor. Sağ tarafta Port kısmına 9100 yazın ve Listen a tıklayın. Yazıcımız çalışır durumdadır, PLC den gelen bilgileri gösterecektir..
Listen butonu tıklayınca, buton, Close butonuna dönecektir.. Böylece kalsın şuan için.. Close a tıklamayın..
PLC den yollamayı String olarak veya Byte Array olarak yapabiliyoruz. Yalnız String değişkeninde sınırlama var maksimum 254 karakter alabiliyor. Burada Byte Array ile yollamayı anlatacağım.
Tia Portalda Data Blok oluşturup, 500 byte lık bir array oluşturalım :
Merak etmeyin fazla olan yada bilgi yazılmayan byte lar yazıcıya veya Hercules e gitmeyecektir. Hercules in böyle de bir faydası var, plc den ne yolladığınızı görebiliyorsunuz.. DB1 e sağ tık yapıp Properties e tıklayalım ve "Optimized block access" tikini kaldıralım. Üst sırada Compile butonuna tıklayalım.
Byte lara 3. kolondaki Offset değerleri atanmış olacaktır..
Yeni bir watch table oluşturalım, ve bu pencereyi float yapalım. DB1 den Static_1[0] olan satırı seçelim ve mouse ile çekerek watch table ın ilk satırına taşıyalım. Display format ı character olarak değiştirelim. Watch table da ilk satırı seçince iki satır arasında, aşağıdaki gibi mavi bir nokta belirecektir.
#!A1#DC#IMSR100/40#RX0#ERN/1//0#R0/0
#T5#J5#YN102/0/35///AGIRLIK: KG#G#Q1#G
#T5#J5#YN102/0/35///AGIRLIK: KG#G#Q1#G
AGIRLIK: dan sonraki 2 byte boş kalsın, oraya değişken bilgi yazacağız...
DB1 de Retain tikine basalım ki bilgiler plc den silinmesin.. PLC ye online olalım ve DB1 i plc ye yükleyelim
DB1 e gelip, gözlük e tıklayınca bilgilerin DB1 e yazıldığı görülecektir..
Yalnız Static_1[0] , ilk satırda watch table da # vardı, DB1 de ilk satırda 16#23 yazıyor. Aslında ikisi de aynı şey, 16#23 , 16 lık tabanda yani hex 23, # nin ascii kodudur.. Ascii tabloda desimal 35, hex 23... Watch table da display format ı karakter yapmıştık hatırlarsanız.
DB1 in daha anlaşılır olması için, watch table da Modify value kolonunu seçip kopyala yapalım, DB1 e gelip Static_1[0] hizasındaki Start value hücresine yapıştır yapalım ve DB1 dowload yapıp kaydedelim.
Network 1 i seçelim, sağda Communication -> Open User Communication altında TSEND_C ye çift tık yapalım. Gelen DB penceresine OK diyelim.
Resimde işaretlediğim, komutun üstündeki mavi takım çantasına tıklayalım..
Alttaki pencere açılmadıysa açalım. Aşağıdaki gibi düzenliyelim. Sağda Partner, Unspecified olacak, Connection data kısmında <new> seçeceğiz. Yazıcı niyetine PC nin ip sini ve altta port numarasını girelim..
Sol taraftan DB1 i tutup çekerek, komut üstünde data bacağına bırakalım.
Network 1 i böyle yapalım :
Network 2 yi böyle yapalım :
I0.0 girişini aktif yapalım, pasif yapalım. I0.3 ü aktif yapalım.. AGIRLIK:12KG olarak yazıcıya pardon Hercules e bilgi geldi, etiket basıldı farzedin.. I0.3 ü pasif yapalım.
Şimdi de I0.1 girişini aktif yapalım, pasif yapalım. I0.3 ü aktif yapalım.. AGIRLIK:34KG olarak yazıcıya pardon Hercules e geldi, yine etiket basıldı farzedin..
İşlem tamamdır.. Plc ile Printer da basayım dedim sizin için, üstüne de komut anlamlarını yazıyorum..
Erol Bey merhaba. Rongta rp411 model yazıcıyı s7 1200 ile haberleştirmeye çalışıyorum fakat yazıcıdan herhangi bir çıktı alamadım. Rongta için kullanılan dil ile hercules programına, ascii kodlarını sorunsuz gönderebiliyorum fakat yazıcı herhangi bir tepki vermiyor. Yardımcı olabilirseniz çok sevinirim.
YanıtlaSilMerhaba, yazıcının kendi etiket yazılımı ile göndermeyi denediniz mi ? Gönderdiğiniz komutlar eksik olabilir. Bu video daki gibi selftest sayfası bastınız mı ? https://www.youtube.com/watch?v=KYleffn9Eyk ip adresleri orada gözüküyor.. Yazıcı da hem ethernet hem wifi var gözüküyor. Bildiğim bir yazıcı değil ama ya eksik/yanlış komut gönderiyorsunuz, veya yazıcı arızalı olabilir.. Bakmak lazım.
SilBu video daki gibi NiceLabel ile denediniz mi ? Bağlantıyı kontrol için bir de tool isminde bir yazılım var.. https://www.youtube.com/watch?v=p5qjeDb8RQI
SilMerhaba. Kodun sonuna eklediğimiz bir enter(ascii olarak $L'ye karşılık geliyor) ile durumu çözdük. Galiba enter olmadan son satırı algılamıyordu.
Silİlginiz ve hızlı dönüşünüz için teşekkürler.
Güzel çalışma gerçekten. Hiç s7 1200 'deki veriyi excel yazdırmayı denediniz mi ? Bu ara bunun üzerinde çalışıyorum. Desteğinizi beklerim.
Silİletişim : candemirhalil@gmail.com
Kepserverex opc yazılımı ile yapabilirsiniz, youtube da yapanlar var.. Ben seri porttan gelen bilgiyi excele göndermiştim https://erolcum.blogspot.com/2023/03/vba-mscomm-seri-port-ile-veri-loglama.html
Sil