RJ45 3 - Novexx yazıcıya, C# ile etiket yazdırma



Önceki yazıda bahsi geçen Hercules programındaki TCP Server tab ını, yazıcı niyetine nasıl kullandığımızı, PC deki ip ayarlarını, firewall ayarlamayı vs. anlatmıştım. 

Bizim yazıcıyı alıp yazılım yapanların, sık olarak karşılaştığı bir problem var. Program yazıcıya bağlantı (connect) kuruyor fakat tekrar bağlantı isteği gönderirse, yazıcı bağlantı kurmayı red ediyor. Bunun nedeni; yazıcı tek bağlantıya izin verir.. Ayrıca yazıcıya tekrar bağlanmak için önce mevcut bağlantı koparılmalıdır (disconnect). Bu yapının bir örneğini aşağıdaki basit kod ta görebilirsiniz. 

Aşağıdaki kod ile Zebra yazıcıya da ZPL dilinde veya Sato yazıcıya kendi dilinde etiket bilgisi gönderebilirsiniz.. Novexx yazıcımızın dili EasyPlug olarak geçiyor. Gelişmiş bir dildir, örneğin tasarımdaki farklı string değişkenleri toplayarak bir barkodun içine koyabilir. Sonraki yazıda ihtiyacınız olan EasyPlug etiket şablon dosyasını nasıl elde edebileceğinizi anlatacağım. Elbette bu konuda herzaman bize danışabilirsiniz, yardımcı oluruz..

Novexx yazıcıların bir özelliği de bir PC ye bağlı olmadan çalışabilmesidir. Etiket şablonu, usb stick (usb bellek) e konularak operatör tarafından makine ekranından veya bir plc tarafından çağrılabilmektedir.

Önce NuGet te bulunan SimpleTCP adındaki bir kütüphaneyle bir program yazdım fakat daha sonra bu iş için buna gerek olmadığını düşünüp sadece aşağıdaki basit kodu yazdım. Benim gibi acemiler için söylüyorum, büyük textbox ta multiline özelliğini true yapmanız gerekiyor. 

TextBox a yapıştırmanız için örnek 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..

C# ile program yazan arkadaşları bir konuda uyarmam gerekiyor. Diyelim yukarıdaki gibi bir easyplug etiket şablon dosyası var, ve bu kodu .exe nin içine gömdünüz... Hata yaptınız ! Nasıl mı ? Tasarımdaki küçük bir pozisyon değişikliği için Visual Studio ile projenin açılması gerekiyor, buna gerek yok.. Şablon dosyasını .txt olarak .exe nin bulunduğu klasöre koyarsanız, yazılımcıya ihtiyaç kalmadan şablonda basit değişiklikler yapılabilir. Şöyle ki mesela, yukarıdaki Test yazan satır sizin değişken bilgi koyacağınız konum olsun.. Test yerine @data@ yazalım..

#T5#J5#YN101/0B/82///@data@#G

.txt olarak şablon dosyasını kaydedersiniz.. C# ta txt dosyasını açıp, @data@ yı Find ve ardından yazdırmak istediğiniz bilgi ile Replace yapıp, yazıcıya yollarsınız..




using System.IO;
using System.Net.Sockets;

namespace tcpClientStd
{

    public partial class MainForm : Form
    {
        TcpClient client;
        StreamWriter sw;
        string error;
        
        public MainForm()
        {
            InitializeComponent();
        }
        
        void BtnConnectClick(object sender, EventArgs e)
        {
        try
            {
            if (client==null)            
                client = new TcpClient();
                client.Connect(txbIp.Text, Convert.ToInt16(txbPort.Text));     
            }
            catch (Exception ex)
            {
                error = "" + ex.Message;
                MessageBox.Show(error);
                return;
            }
        }


        void BtnSendClick(object sender, EventArgs e)
        {
        try
            {
                if(client.Connected)
                {
                    sw = new StreamWriter(client.GetStream());
                    sw.WriteLine(txbEasy.Text);
                    sw.Flush();
                }
            }
        
        catch (Exception)
            {
                MessageBox.Show("Önce Connect butonuna tıkla !");
                return;
            }
            
        }


        void BtnDisconnectClick(object sender, EventArgs e)
        {
        try    
            {
                if(client != null)
                {
                    client.Close();
                    client=null;    
                }
            }
            
        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