RJ45 5 - Novexx yazıcıyı, C# ile sorgulama

 


Youtube ta izle...

Sorgulama derken yazıcıya örneğin içinde kaç tane iş var ? Online mısın Offline mısın ? Error var mı ? Hangi error oluştu ? gibi sorgulamalar yapabiliriz, o da bize cevap verir.. Yazıcı, server (veya slave) olduğundan biz birşey sormadan bize cevap vermez.. Yazıcı ekranında ONLINE görünüyorsa, çalışıyor bir sıkıntı yok demektir. Operatör, yazıcıyı OFFLINE a veya STOP konumuna alırsa yazıcı durur, baskı yapmaz..

Yukarıdaki yazıcı ekran görüntüsündeki gibi yazıcı etiket basarken, ekranda basılacak etiket sayısı ile ilgili bilgiler verir.. Job count yollanan iş sayısını, Rest count ise bir işteki kalan etiket sayısını gösterir. Yazıcıya yolladığımız easyplug text dosyası sonunda #QX komutu vardır, X etiketin kaç adet basılacağı bilgisidir. Diyelim ki üç adet aynı etiketten basmak istiyoruz, bunu iki şekilde yapabiliriz. Birincisi; sonunda #Q1 yazan dosyayı üç kez yazıcıya yollarız, böylece üç job (iş) yollamış oluruz.. İkinci yöntem; sonunda #Q3 yazan dosyayı bir kez yollarız, bu durumda bir job yollamış oluruz.. Yani etiket basmak için yolladığımız her dosyaya job diyoruz. 

Bir job içinde #Q3 yazıp yazıcıya yolladık diyelim , yazıcı ekranında, etiketler basılırken job değeri 1, Rest count değeri ise sırayla 3, 2, 1 olur, ardından Job ve Rest count 0 olur.

Job count ve Rest count değerlerini farklı komutlarla ayrı ayrı sorgulayabiliriz.. Örneğin eğer her zaman #Q1 ile job yollarsak, Rest count hep 1 olacağından sadece basılacak job sayısını sorgulamak yeterli olacaktır. 


Offline mode u aktifleştirme

Yazıcıya, OFFLINE veya error durumunda network ten ulaşamayız, örneğin ping atınca veya sorgu komutu yollayınca cevap vermez.. Bağlantı kopar yani.. Bu durumu bir parametreyi ayarlayarak düzeltebiliriz.. Yazıcı menüsünde INTERFACE PARA > EASYPLUGINTERPR > Offline mode parametresini Interface enabled yapmamız gerekiyor, artık yazıcı offline da olsa error de verse network bağlantısı kopmayacaktır. 


Yazıcı kontrol paneli kullanımı

Menüye girmek için önce Online (soldan 2.) tuşuna basarak yazıcıyı OFFLINE konumuna alırız, sonra Prog/Esc (soldan 4.) tuşu ile menüye gireriz. Menüyü bir dolaptaki çekmecelere benzetebiliriz, her çekmecede gruplanmış parametreler bulunur.   Çekmece içinde başka bir çekmece bulunabilir. Soldan 1. ve 3. tuşlar menüde aşağı yukarı gezmek içindir. Online tuşu bilgisayardaki Enter tuşu gibidir, menüde bir çekmecenin içine girmek için Online a basarız. Bir parametreyi değiştirdikten sonra Online tuşu ile onaylarız, değişmesini istemiyorsak Esc tuşuna basarız. 

Örneğin Offline mode parametresini değiştirmek için soldan sağa tuşları 1,2,3,4 diye numaralandırırsak, yazıcı OFFLINE dayken , sırayla bu tuşlara basalım :  

4-1-1-2-2-1-1-1-1

Doğru yaptıysak şuan ekran böyle olmalı : 


Şimdi Online tuşu ile içine girelim, 1. veya 3. tuş ile seçimimizi yapalım, onaylamak için Online yani Enter a basalım. Menüden ana ekrana dönmek için 4. tuş Esc ye birkaç kez basalım. OFFLINE dan ONLINE a dönmek için Online tuşuna basalım. 

Ek bilgi olarak, diyelim yazıcıya üç etiket yolladık, ilk etiket basılırken Online tuşuna bastık, yazıcı stopped (durma) a geçer ve yazıcı durur.. Ekranda "Press feed to start" yazar Feed (soldan 3.) tuşuna basılarak yazmaya devam edilir.

Yazıcı modelleri arasındaki bir farktan bahsetmek isterim. 64-06, XLP gibi masaüstü yazıcılara iş yollarsak hemen etiketi basmaya başlar, ALX, XPA gibi Yaz & Yapıştır yazıcılarda iş yollasak da etiket hemen basılmaz, yazıcıya yollanan her etiket hafızada kuyrukta bekletilir, ta ki bağlı fotosel veya PLC den Start sinyali geldiğinde etiket tek tek basılır... Yani her sinyal geldiğinde bir etiket basılır.. Hafızada iş yok ise Start sinyali gelse de bir şey basılmaz..


Error Durumu

Yazıcı bir hata verirse, yazma işi durur ve aşağıdaki gibi bir ekran karşınıza çıkar..


Türkçesi, etiket bitti demek, 5002 ise teknik servisi aradığınızda söylemeniz gereken hata kodudur.. Etiket bitti diye de servis aranmaz tabi yeni etiket rulosu takılır :) Hata giderildikten sonra Online tuşuna ve gerekirse Feed tuşuna basılarak işleme devam edilir. Error demişken hassas bir şekilde basılan etiketleri yazılımla takip ediyorsak SYSTEM PARAMETER > Error reprint içindeki değer Off yapılmalıdır. Böylece etiket basılırken bir hata oluşursa etiketin, kontrolümüz dışında tekrar basılması engellenir..


CSharp programı

Sorgulama programını test etmek için masaüstü yazıcı kullandım, etiketi hemen bastığı için baskı hızını, print speed parametresinden 2"/s olarak düşürdüm.. (4-1-2). Yazıcı tek bağlantı kabul eder, örneğin bağlantı varken tekrar bağlanmaya kalkarsanız, yazıcı sizi reddeder.. Önce mevcut bağlantıyı koparıp yeniden bağlanmalısınız.. Diğer konu da; neden sürekli bağlan, kopar yapıyoruz ki programın başında bir kez bağlanıp devam edebiliriz, derseniz, sonucu şöyle olacaktır; bağlantı herhangi bir nedenle koparsa bunu asla fark edemeyeceksiniz. Bu nedenle, aşağıdaki örnek programda kullanılan yöntem daha sağlıklı çalışacaktır.

EasyPlug dosyası, yani etiket şablon dosyamız :


#!A1#DC

#IMSR50/50

#ERN/1//0

#T5#J5#YN101/0B/82///Test#G

#Q3

#!A1 yazıcıya her yolladığımız bilginin başında olmak zorundadır yoksa yazıcı yolladığınız şeyi dikkate almaz.. Sondaki #Q3, bu etiketten 3 adet bas demektir, yani yazıcı ekranındaki Rest count bilgisi.. #IMSR50/50 bilgisi mm olarak sırayla etiketin genişliği ve yüksekliğidir. Örneğin A5 boyutunda etiket için #IMSR150/210 olacaktır. #T5#J5 mm olarak Test yazısının konumudur, etiketin sol alt köşesi 0,0 konumudur. Bu komutlarla ilgili daha detaylı bilgiler öğrenmek isterseniz EasyPlug manual i indirebilirsiniz..




using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Net.Sockets;

namespace readPrinterStatus
{

    public partial class MainForm : Form
    {
        TcpClient client;
        StreamWriter sw;
        StreamReader sr;
        string error;
        
        public MainForm()
        {
        
            InitializeComponent();
            
        }
        
        void BtnSendClick(object sender, EventArgs e)
        {
         try
            {
                if (client==null)            
                    client = new TcpClient();
                client.Connect("192.168.1.99", 9100);  // Yazıcı IP si ve Port numarası
                sw = new StreamWriter(client.GetStream());
                sw.WriteLine(txtSend.Text);
                sw.Flush();  
                client.Close();
                client=null;     //bağlantı kapatılmadan tekrar connect komutu verirsek yazıcı bağlanmayı reddeder..
            }
         catch (Exception ex)
            {
                error = "" + ex.Message;
                MessageBox.Show(error);
                return;
            }
        }
        
        void Timer1Tick(object sender, EventArgs e)
        {
        try
            {
                if (client==null)            
                    client = new TcpClient();
                client.Connect("192.168.1.99", 9100);  // Yazıcı IP si ve Port numarası
                sw = new StreamWriter(client.GetStream());
                sr = new StreamReader(client.GetStream());
                
                 sw.WriteLine("#!A1#!XM1009");  // Rest Count
                 sw.Flush();  
                 txtRestCount.Text = sr.ReadLine();
                  
                  sw.WriteLine("#!A1#!XM1007");  // Job Count
                  sw.Flush();  
                  txtJobCount.Text = sr.ReadLine();
                  
                  sw.WriteLine("#!A1#!XM1013");  // Online/Offline/Stopped/Error
                  sw.Flush();  
                  string data = sr.ReadLine();


                  if(data=="1")                             
                      {txtOnline.Text="ONLINE";
                      txtOnline.BackColor=Color.LightGreen;} // Yazıcı Online
                  else 
                      {txtOnline.Text="OFFLINE";
                      txtOnline.BackColor=Color.LightPink;} // Yazıcı offline, stopped veya error durumunda...
                  
                  client.Close();
                  client=null;     
                }
         catch (Exception ex)
            {
                error = "" + ex.Message;
                MessageBox.Show(error);
                return;
            }    
        }
        
        void BtnReadClick(object sender, EventArgs e)
        {
            if(timer1.Enabled) 
                {timer1.Stop();
                btnRead.BackColor=Color.LightGray;}
            else
                {timer1.Start();
                btnRead.BackColor=Color.LightGreen;}
            
        }
        
        void BtnDeleteClick(object sender, EventArgs e)
        {
        try
            {
                if (client==null)            
                    client = new TcpClient();
                 client.Connect("192.168.1.99", 9100);  // Yazıcı IP si ve Port numarası
                 sw = new StreamWriter(client.GetStream());
                 sw.WriteLine("#!A1#!CA"); // Clear All
                 sw.Flush();  
                 client.Close();
                 client=null;     //bağlantı kapatılmadan tekrar connect komutu verirsek yazıcı bağlanmayı reddeder..
            }
        catch (Exception ex)
            {
                error = "" + ex.Message;
                MessageBox.Show(error);
                return;
            }
        }
    }
}

Yorumlar

Bu blogdaki popüler yayınlar

VBA - Mscomm (seri port) ile veri loglama

RJ45 2 - Novexx barkod yazıcıya, S7-1200 plc ile etiket yazdırma

Uzak I/O modülü olarak PLC kullanmak