ITC81DB_V8/ITC81DB/Barcode.cs

221 lines
6.8 KiB
C#
Raw Permalink Normal View History

2023-07-11 01:56:01 +00:00
using System;
using System.Linq;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Text;
namespace ITC81DB
{
#region Enum
public enum BarcodeStatus
{
None,
Normal,
NoRead,
NoMatch,
}
#endregion
public class BarcodeShortCut
{
public static readonly string MinAngle = "5362";
public static readonly string MaxAngle = "5363";
public static readonly string Frequency = "5364";
public static readonly string ReadingPhaseTimeout = "78";
public static readonly string Timeout = "79";
public static readonly string ReadingConditions = "5250";
}
public class Barcode
{
#region Field
public static byte[] EnterHostMode = { 0x1B, 0x5B, 0x43 };
public static byte[] EnterTerminalMode = { 0x1B, 0x5D, 0x42 };
public static byte[] EnterProgrammingMode = { 0x1B, 0x63, 0x4D, 0xB0, 0x30 };
public static byte[] ExitProgrammingMode = { 0x1B, 0x64, 0x4D, 0xB0, 0x30 };
public static byte[] ExitTerminalMode = { 0x1B, 0x49, 0x41, 0x20 };
public static byte[] ExitHostMode = { 0x1B, 0x5B, 0x41 };
public static byte[] AutoExitCommandMode = { 0x1B, 0x5B, 0x41 };
public static byte[] SavePermanently = { 0x45, 0x20, 0x50, 0x0D, 0x0A };
private bool m_IsCommandMode; // 현재 커맨드 모드인지 확인
private int m_SaveValue; // 설정한 값 저장 변수
private string m_SaveGettingShortCut; // 설정한 Getting ShortCut 변수
private string m_SaveSettingShortCut; // 설정한 Setting ShortCut 변수
private Queue<string> QueueBarcode;
private Collection<string> CollectionLotNo;
#endregion
#region Constructor
public Barcode(Collection<ProductItem> items, int productCount)
{
this.DefaultSetting(productCount);
for (int i = 0; i < productCount; i++)
this.CollectionLotNo[i] = items[i].LotNo;
}
#endregion
#region Property
public bool IsCommandMode
{
get { return this.m_IsCommandMode; }
set { this.m_IsCommandMode = value; }
}
public int SaveValue
{
get { return this.m_SaveValue; }
set { this.m_SaveValue = value; }
}
public string SaveGettingShortCut
{
get { return this.m_SaveGettingShortCut; }
set { this.m_SaveGettingShortCut = value; }
}
public string SaveSettingShortCut
{
get { return this.m_SaveSettingShortCut; }
set { this.m_SaveSettingShortCut = value; }
}
public int GetQueueCount
{
get
{
return this.QueueBarcode.Count;
}
}
#endregion
#region Method
private void DefaultSetting(int barcodeCount)
{
this.IsCommandMode = false;
this.QueueBarcode = new Queue<string>();
this.CollectionLotNo = new Collection<string>();
for (int i = 0; i < barcodeCount; i++)
this.CollectionLotNo.Add("");
}
public void SetLotNo(Collection<ProductItem> items, int productCount)
{
for (int i = 0; i < productCount; i++)
this.CollectionLotNo[i] = items[i].LotNo;
}
public void SetData(string data)
{
//value = this.DecisionLength(data);
this.QueueBarcode.Enqueue(data);
}
public BarcodeStatus GetData(ref int productNo)
{
string value = "";
BarcodeStatus ret = BarcodeStatus.None;
if (this.QueueBarcode.Count > 0)
{
value = this.QueueBarcode.Peek();
if (value.Length > 14)
value = value.Substring(value.Length - 14, 14);
if (value == "NoRead")
{
productNo = 991;
return ret = BarcodeStatus.NoRead;
}
else
{
for (int i = 0; i < this.CollectionLotNo.Count; i++)
{
if (this.CollectionLotNo[i] == value)
{
productNo = i + 1;
return ret = BarcodeStatus.Normal;
}
}
productNo = 992;
return ret = BarcodeStatus.NoMatch;
}
}
productNo = 0;
return ret = BarcodeStatus.None;
}
public BarcodeStatus GetData(ref int productNo, int startIndex, int endIndex)
{
string value = "";
BarcodeStatus ret = BarcodeStatus.None;
if (this.QueueBarcode.Count > 0)
{
value = this.QueueBarcode.Peek();
if (value == "NoRead")
{
productNo = 991;
return ret = BarcodeStatus.NoRead;
}
else
{
int length = endIndex - startIndex + 1;
if(value.Length >= length)
value = value.Substring(startIndex, length);
if (value.Length > 14)
value = value.Substring(value.Length - 14, 14);
for (int i = 0; i < this.CollectionLotNo.Count; i++)
{
if (this.CollectionLotNo[i] == value)
{
productNo = i + 1;
return ret = BarcodeStatus.Normal;
}
}
productNo = 992;
return ret = BarcodeStatus.NoMatch;
}
}
productNo = 0;
return ret = BarcodeStatus.None;
}
/// <summary>
/// 바코드 길이를 14 이하로 결정
/// </summary>
/// <param name="barcode"></param>
/// <returns>string</returns>
private string DecisionLength(string barcode)
{
if (barcode.Length > 14)
return barcode.Substring(barcode.Length - 14, 14);
else
return barcode;
}
public string BarcodePeek()
{
string ret = "";
if (this.QueueBarcode.Count > 0)
ret = this.QueueBarcode.Peek();
return ret;
}
public void BarcodeDequeue()
{
if (this.QueueBarcode.Count > 0)
this.QueueBarcode.Dequeue();
}
public void Clear()
{
this.QueueBarcode.Clear();
}
#endregion
}
}