Initial commit
This commit is contained in:
282
Handler/Project/Device/SATOPrinterAPI.cs
Normal file
282
Handler/Project/Device/SATOPrinterAPI.cs
Normal file
@@ -0,0 +1,282 @@
|
||||
using arCtl;
|
||||
using SATOPrinterAPI;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Project.Device
|
||||
{
|
||||
public class SATOPrinterAPI : IDisposable
|
||||
{
|
||||
private bool disposed = false;
|
||||
Printer SATOPrinter = null;
|
||||
public string LastPrintZPL = string.Empty;
|
||||
public string qrData = string.Empty;
|
||||
public string PortName { get; set; }
|
||||
public int BaudRate { get; set; }
|
||||
public string baseZPL
|
||||
{
|
||||
get
|
||||
{
|
||||
var fi = new System.IO.FileInfo(AR.SETTING.Data.baseZPLFile);
|
||||
if (fi.Exists)
|
||||
{
|
||||
return System.IO.File.ReadAllText(fi.FullName, System.Text.Encoding.Default);
|
||||
}
|
||||
else return Properties.Settings.Default.ZPL7;
|
||||
}
|
||||
}
|
||||
|
||||
public SATOPrinterAPI()
|
||||
{
|
||||
SATOPrinter = new Printer();
|
||||
SATOPrinter.Timeout = 2500;
|
||||
SATOPrinter.Interface = Printer.InterfaceType.COM;
|
||||
SATOPrinter.ByteAvailable += SATOPrinter_ByteAvailable;
|
||||
}
|
||||
|
||||
|
||||
bool _isopen = false;
|
||||
public bool Open()
|
||||
{
|
||||
try
|
||||
{
|
||||
SATOPrinter.COMPort = this.PortName;
|
||||
SATOPrinter.COMSetting.Baudrate = this.BaudRate;
|
||||
SATOPrinter.Connect();
|
||||
_isopen = true;
|
||||
return _isopen;
|
||||
}
|
||||
catch { _isopen = false; return false; }
|
||||
|
||||
}
|
||||
private string ControlCharReplace(string data)
|
||||
{
|
||||
Dictionary<string, char> chrList = ControlCharList();
|
||||
foreach (string key in chrList.Keys)
|
||||
{
|
||||
data = data.Replace(key, chrList[key].ToString());
|
||||
}
|
||||
return data;
|
||||
}
|
||||
private Dictionary<string, char> ControlCharList()
|
||||
{
|
||||
Dictionary<string, char> ctr = new Dictionary<string, char>();
|
||||
ctr.Add("[NUL]", '\u0000');
|
||||
ctr.Add("[SOH]", '\u0001');
|
||||
ctr.Add("[STX]", '\u0002');
|
||||
ctr.Add("[ETX]", '\u0003');
|
||||
ctr.Add("[EOT]", '\u0004');
|
||||
ctr.Add("[ENQ]", '\u0005');
|
||||
ctr.Add("[ACK]", '\u0006');
|
||||
ctr.Add("[BEL]", '\u0007');
|
||||
ctr.Add("[BS]", '\u0008');
|
||||
ctr.Add("[HT]", '\u0009');
|
||||
ctr.Add("[LF]", '\u000A');
|
||||
ctr.Add("[VT]", '\u000B');
|
||||
ctr.Add("[FF]", '\u000C');
|
||||
ctr.Add("[CR]", '\u000D');
|
||||
ctr.Add("[SO]", '\u000E');
|
||||
ctr.Add("[SI]", '\u000F');
|
||||
ctr.Add("[DLE]", '\u0010');
|
||||
ctr.Add("[DC1]", '\u0011');
|
||||
ctr.Add("[DC2]", '\u0012');
|
||||
ctr.Add("[DC3]", '\u0013');
|
||||
ctr.Add("[DC4]", '\u0014');
|
||||
ctr.Add("[NAK]", '\u0015');
|
||||
ctr.Add("[SYN]", '\u0016');
|
||||
ctr.Add("[ETB]", '\u0017');
|
||||
ctr.Add("[CAN]", '\u0018');
|
||||
ctr.Add("[EM]", '\u0019');
|
||||
ctr.Add("[SUB]", '\u001A');
|
||||
ctr.Add("[ESC]", '\u001B');
|
||||
ctr.Add("[FS]", '\u001C');
|
||||
ctr.Add("[GS]", '\u001D');
|
||||
ctr.Add("[RS]", '\u001E');
|
||||
ctr.Add("[US]", '\u001F');
|
||||
ctr.Add("[DEL]", '\u007F');
|
||||
return ctr;
|
||||
}
|
||||
|
||||
|
||||
private bool Query(string cmd, out string errmsg)
|
||||
{
|
||||
errmsg = string.Empty;
|
||||
if (string.IsNullOrEmpty(cmd))
|
||||
{
|
||||
errmsg = "No Command";
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
byte[] cmddata = Utils.StringToByteArray(ControlCharReplace(cmd));
|
||||
byte[] receiveData = SATOPrinter.Query(cmddata);
|
||||
|
||||
if (receiveData != null)
|
||||
{
|
||||
errmsg = ControlCharConvert(Utils.ByteArrayToString(receiveData));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errmsg = ex.Message;
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
private string ControlCharConvert(string data)
|
||||
{
|
||||
Dictionary<char, string> chrList = ControlCharList().ToDictionary(x => x.Value, x => x.Key);
|
||||
foreach (char key in chrList.Keys)
|
||||
{
|
||||
data = data.Replace(key.ToString(), chrList[key]);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
~SATOPrinterAPI()
|
||||
{
|
||||
Dispose(disposing: false);
|
||||
}
|
||||
public void Dispose()
|
||||
{
|
||||
Dispose(disposing: true);
|
||||
// This object will be cleaned up by the Dispose method.
|
||||
// Therefore, you should call GC.SuppressFinalize to
|
||||
// take this object off the finalization queue
|
||||
// and prevent finalization code for this object
|
||||
// from executing a second time.
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
// Check to see if Dispose has already been called.
|
||||
if (!this.disposed)
|
||||
{
|
||||
// If disposing equals true, dispose all managed
|
||||
// and unmanaged resources.
|
||||
if (disposing)
|
||||
{
|
||||
// Dispose managed resources.
|
||||
//component.Dispose();
|
||||
|
||||
}
|
||||
SATOPrinter.Disconnect();
|
||||
// Note disposing has been done.
|
||||
disposed = true;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsOpen
|
||||
{
|
||||
get
|
||||
{
|
||||
|
||||
if (_isopen == false || SATOPrinter == null) return false;
|
||||
try
|
||||
{
|
||||
return true;// return SATOPrinter.IsBusy;
|
||||
//var prn = this.SATOPrinter.GetPrinterStatus();
|
||||
//return prn.IsOnline;
|
||||
}
|
||||
catch { return false; }
|
||||
|
||||
}
|
||||
}
|
||||
private void SATOPrinter_ByteAvailable(object sender, Printer.ByteAvailableEventArgs e)
|
||||
{
|
||||
byte[] rawData = e.Data;
|
||||
var msg = Utils.ByteArrayToString(rawData);// System.Text.Encoding.Default.GetString(rawData);
|
||||
PUB.log.Add($"SATO Recv : " + msg);
|
||||
}
|
||||
|
||||
|
||||
// private void SATOPrinter_ReceiveData_Raw(object sender, ReceiveDataEventArgs e)
|
||||
//{
|
||||
// PUB.log.Add($"SATO Recv(RAW) : " + e.StrValue);
|
||||
//}
|
||||
|
||||
//private void SATOPrinter_ReceiveData(object sender, ReceiveDataEventArgs e)
|
||||
//{
|
||||
// PUB.log.Add($"SATO Recv : " + e.StrValue);
|
||||
//}
|
||||
|
||||
public Boolean TestPrint(Boolean drawbox, string manu = "", string mfgdate = "")
|
||||
{
|
||||
var dtstr = DateTime.Now.ToShortDateString();
|
||||
var printcode = "103077807;Z577603504;105-35282-1105;15000;RC00004A219001W;20210612";
|
||||
var reel = new Class.Reel(printcode);
|
||||
//reel.id = "RLID" + DateTime.Now.ToString("MMHHmmssfff");
|
||||
reel.sid = "103000000";
|
||||
reel.partnum = "PARTNO".PadRight(20, '0'); //20자리
|
||||
|
||||
if (mfgdate == "") reel.mfg = dtstr;
|
||||
else reel.mfg = mfgdate;
|
||||
|
||||
reel.lot = "LOT000000000";
|
||||
if (manu == "") reel.manu = "ATK4EET1";
|
||||
else reel.manu = manu;
|
||||
|
||||
reel.qty = 15000;
|
||||
var rlt = Print(reel, true, drawbox);
|
||||
var fi = new System.IO.FileInfo(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "temp_zpl.txt"));
|
||||
System.IO.File.WriteAllText(fi.FullName, LastPrintZPL, System.Text.Encoding.Default);
|
||||
return rlt;
|
||||
}
|
||||
|
||||
|
||||
public Boolean Print(Class.Reel reel, Boolean display1drid, Boolean drawOUtBox)
|
||||
{
|
||||
string prtData;
|
||||
prtData = makeZPL_210908(reel, drawOUtBox, out qrData);
|
||||
|
||||
return Print(prtData);
|
||||
}
|
||||
|
||||
public bool Print(string _zpl)
|
||||
{
|
||||
this.LastPrintZPL = _zpl;
|
||||
//if (this.IsOpen == false) return false;
|
||||
try
|
||||
{
|
||||
byte[] cmddata = Utils.StringToByteArray(ControlCharReplace(_zpl));
|
||||
SATOPrinter.Send(cmddata);
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public string makeZPL_210908(Class.Reel reel, Boolean drawbox, out string qrData)
|
||||
{
|
||||
string m_strSend = string.Empty;
|
||||
qrData = string.Format("{0};{1};{2};{3};{4};{5};{6}", reel.sid, reel.lot, reel.manu, reel.qty, reel.id, reel.mfg, reel.partnum);
|
||||
|
||||
var reeid = reel.id;
|
||||
if (reeid.Length > 20)
|
||||
reeid = "..." + reeid.Substring(reeid.Length - 20);
|
||||
|
||||
m_strSend = this.baseZPL;
|
||||
m_strSend = m_strSend.Replace("{qrData}", qrData);
|
||||
m_strSend = m_strSend.Replace("{sid}", reel.sid);
|
||||
m_strSend = m_strSend.Replace("{lot}", reel.lot);
|
||||
m_strSend = m_strSend.Replace("{partnum}", reel.partnum);
|
||||
m_strSend = m_strSend.Replace("{rid}", reeid);
|
||||
m_strSend = m_strSend.Replace("{qty}", reel.qty.ToString());
|
||||
m_strSend = m_strSend.Replace("{mfg}", reel.mfg);
|
||||
m_strSend = m_strSend.Replace("{supply}", reel.manu);
|
||||
|
||||
//줄바꿈제거
|
||||
m_strSend = m_strSend.Replace("\r", "").Replace("\n", "");
|
||||
return m_strSend;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user