using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;
using System.Management;
using System.Data.SqlClient;
using System.Data;
using System.Threading.Tasks;
using System.Net.NetworkInformation;
using System.Net;
using System.Runtime.CompilerServices;
namespace Project
{
public static class Pub
{
public static string[] WaitMessage = new string[] { "", "", "", "", "", "", "", "", "", "", "" };
public static StdLabelPrint.LabelPrint PrinterL = null;
public static StdLabelPrint.LabelPrint PrinterR = null;
//공용변수(시간)
private static DateTime[] Var_dateTime;//총64개의 가변용 변수
public static void SetVarTime(eVarTime idx, DateTime value)
{
Pub.log.Add("VAR_TIME", "Set Time " + idx.ToString() + " : " + value.ToString("yyyy-MM-dd HH:mm:ss.fff"));
Var_dateTime[(int)idx] = value;
}
public static void SetVarTime(eVarTime idx) { SetVarTime(idx, DateTime.Now); }
public static DateTime GetVarTime(eVarTime idx) { return Var_dateTime[(int)idx]; }
public static TimeSpan GetVarRunTime(eVarTime idx) { return DateTime.Now - Var_dateTime[(int)idx]; }
public static arDev.AzinAxt.DIO dio; //Ajin
public static arDev.AzinAxt.MOT mot; //Ajin
public static arDev.RS232 remocon;
public static WatsonWebsocket.WatsonWsClient wsL;
public static WatsonWebsocket.WatsonWsClient wsR;
public static int uploadcount = 0;
public static DateTime BuzzerTime;
public static DateTime MGZRunTime;
public static CounterSetting counter;
public static Flag flag;
public static MessageWindow popup;
//interlock check
public static CInterLock LockPKX;
public static CInterLock LockPKZ;
public static CInterLock LockPKT;
public static CInterLock LockPLM;
public static CInterLock LockPLZ;
public static CInterLock LockPRM;
public static CInterLock LockPRZ;
public static CInterLock LockPRL; //printer -left
public static CInterLock LockPRR; //printer -right
public static CInterLock LockVS0; //visoin - 0
public static CInterLock LockVS1; //vision - 1
public static CInterLock LockVS2; //vision - 2
public static arDev.Joystick.JoystickRaw joystick;
///
/// database manager
///
//public static Manager.DatabaseManagerHistory dbmHistory; //트레이기록(날짜기준)
public static Manager.DatabaseManagerCount dbmCount; //수량기록(ID기준)
public static Manager.DatabaseManagerSIDHistory dbmSidHistory;
//public static Manager.DataBaseMSSQL dbSQL;
///
/// model manager
///
public static Manager.ModelManager mdm;
public static SystemSetting system;
public static UserSetting uSetting;
public static CSetting setting;
public static arUtil.Log logVision;
public static arUtil.Log log;
public static arUtil.Log logILStop;
public static arUtil.Log logDbg;
public static arUtil.Log logFlag;
public static arUtil.Log logILock;
public static arUtil.Log logWS;
public static arUtil.Log logKeyence;
// public static arUtil.Log logCV;
public static arUtil.Log logbarcode;
public static DataSet1.UsersDataTable userList;
public static DataSet1.MailRecipientDataTable mailList;
public static DataSet1.MailFormatDataTable mailForm;
public static DateTime LastInputTime = DateTime.Now;
public static CResult Result;
#region "runstep 1"
private static byte[] _runStepSeq = new byte[64];
//public static eRunStep getOtherStep(int idx) { return runStep(idx == 0 ? 1 : 0); }
private static DateTime[] _runStepSeqStartTime = new DateTime[] { DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now };
private static eRunStep[] _runstepn = new eRunStep[] { eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET };
private static eRunStep[] _runstepo = new eRunStep[] { eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET };
public static eRunStep runStep(int idx) { return _runstepo[idx]; }
public static eRunStep runStepNew(int idx) { return _runstepn[idx]; }
public static int runStepSeq(int idx)
{
return _runStepSeq[idx];
}
public static int runStepSeq(eRunSequence idx = eRunSequence.COMMON)
{
return _runStepSeq[(int)idx];
}
public static void setNewRunStep(int idx, eRunStep newStep)
{
if (_runstepn[idx] != newStep)
{
_runstepn[idx] = newStep;
}
}
public static void applyRunStep(int idx)
{
if (_runstepn[idx] != _runstepo[idx])
{
_runStepSeq[idx] = 0;
_runstepo[idx] = _runstepn[idx];
//상태머신의 작업 상태가 바뀌면 모든 SEQ번호를 초기화한다 - 201217
var StepSeqList = Enum.GetValues(typeof(eRunSequence));
foreach (var item in StepSeqList)
updateRunStepSeq((eRunSequence)item, -1);
}
}
public static void ClearRunStepSeqTime()
{
for (int i = 0; i < _runStepSeqStartTime.Length; i++)
_runStepSeqStartTime[i] = DateTime.Now;
}
public static TimeSpan getRunStepSeqtime(int idx)
{
return DateTime.Now - _runStepSeqStartTime[idx];
}
public static TimeSpan getRunStepSeqtime(eRunSequence idx)
{
return getRunStepSeqtime((int)idx);
}
public static void SetStepSeq(eRunSequence idx, byte value)
{
_runStepSeq[(int)idx] = value;
Pub.log.AddI(string.Format("Step [{2}] Sequence Jump {0} to {1}",
_runStepSeq[(int)idx],
value, idx));
}
public static void UpdaterunStepSeqStartTime(eRunSequence idx = eRunSequence.COMMON)
{
_runStepSeqStartTime[(int)idx] = DateTime.Now;
// Pub.log.Add("Update RunStep Start Time");
}
public static void updateRunStepSeq(eRunSequence idx = eRunSequence.COMMON, int newseq = -1)
{
//seq값을 지정하면 해당 값으로 사용하고 없다면 증가 시킨다.
if (newseq == -1)
{
_runStepSeq[(int)idx] += 1;
}
else
{
_runStepSeq[(int)idx] = (byte)newseq;
}
UpdaterunStepSeqStartTime(idx);
// Pub.log.Add(string.Format("스텝({0}) 시퀀스증가 신규값={1}", runStep, _runStepSeq));
}
public static void ResetRunStepSeq(eRunSequence idx = eRunSequence.COMMON)
{
_runStepSeq[(int)idx] = 1;
UpdaterunStepSeqStartTime(idx);
}
public static void ClearRunStep(int idx)
{
_runStepSeq[idx] = 0;
_runStepSeqStartTime[idx] = DateTime.Now;
_runstepn[idx] = eRunStep.NOTSET;
_runstepo[idx] = eRunStep.NOTSET;
}
#endregion
public static StateMachine sm; //상태머신분리 190529
public static Boolean isRunning
{
get
{
return (Pub.sm.Step == StateMachine.eSMStep.RUN);
}
}
public static void AddDebugLog(string div, string msg, Boolean iserr = false)
{
if (Pub.setting.Log_Debug == false) return;
if (iserr) Pub.logDbg.AddE(msg);
else Pub.logDbg.Add(div, msg);
}
public static void AddDebugLog(string msg, Boolean iserr = false)
{
Pub.logDbg.Add("NORMAL", msg, iserr);
}
public static void ApplyZplCode()
{
string zplfil = string.Empty;
if (Pub.setting.STDLabelFormat7)
{
zplfil = System.IO.Path.Combine(Util.CurrentPath, "zpl7.txt");
}
else
{
zplfil = System.IO.Path.Combine(Util.CurrentPath, "zpl.txt");
}
if (System.IO.File.Exists(zplfil))
{
Pub.PrinterL.baseZPL = System.IO.File.ReadAllText(zplfil, System.Text.Encoding.Default);
Pub.PrinterR.baseZPL = System.IO.File.ReadAllText(zplfil, System.Text.Encoding.Default);
}
else
{
Pub.log.AddAT("기본 ZPL파일이 없어 설정파일의 내용을 사용합니다");
if(Pub.setting.STDLabelFormat7)
{
Pub.PrinterL.baseZPL = Properties.Settings.Default.ZPL7;
Pub.PrinterR.baseZPL = Properties.Settings.Default.ZPL7;
}
else
{
Pub.PrinterL.baseZPL = Properties.Settings.Default.ZPL;
Pub.PrinterR.baseZPL = Properties.Settings.Default.ZPL;
}
//파일이 없으므로 파일을 생성하도록 한다
Pub.log.Add("기본 zpl 파일을 생성합니다. filename=" + zplfil);
System.IO.File.WriteAllText(zplfil, Pub.PrinterL.baseZPL, System.Text.Encoding.Default);
}
}
///
/// 전체 작업목록을 별도파일에 저장한다
///
///
///
///
public static void AddJobList(string seqdate, string seqno, string file)
{
//저장된 파일은 아래와같은 데이터를 가지고 있다
//sb.AppendLine("#Time\tSID\tRID\tRAW");
//해당 차수로 저장된 파일이 잇는지 체크한다.
var savepath = System.IO.Path.Combine(Pub.setting.Path_Data, "JobData", seqdate.Substring(0, 6), seqdate + "-" + seqno + ".txt");
var fi = new System.IO.FileInfo(savepath);
if (fi.Directory.Exists == false) fi.Directory.Create(); //폴더가 없다면 생성
//신규파일이므로, 해당 내용을 모두 옴겨놓는다(번호는 중요치않다)
List savedList = new List();
if (fi.Exists)
{
var oldlist = System.IO.File.ReadAllLines(fi.FullName, System.Text.Encoding.UTF8);
savedList.AddRange(oldlist);
}
//기존목록을 불러와서 없는 데이터만 추가해준다.
var newbuffer = System.IO.File.ReadAllLines(file, System.Text.Encoding.UTF8);
foreach (var line in newbuffer)
{
if (line.isEmpty() || line.StartsWith("#")) continue;
var buffer = line.Split('\t');
var raw = buffer[3].Trim();
if (savedList.Where(t => t == raw).Count() == 0)
savedList.Add(raw);
}
//전체목록을 저장한다
System.IO.File.WriteAllLines(fi.FullName, savedList.ToArray(), System.Text.Encoding.UTF8);
}
public static int RemoveCache(string basefile)
{
var fi = new System.IO.FileInfo(basefile);
//해당폴더에서 해당 차수의 파일 및 다른 확장자 모두를 삭제한다.
var fisearch = fi.Name.Replace(fi.Extension, ".*");
var delFiles = fi.Directory.GetFiles(fisearch, System.IO.SearchOption.TopDirectoryOnly);
if (delFiles.Count() < 1) return 0;
else
{
//파일을 삭제한다.
var cnt = 0;
try
{
foreach (var delFile in delFiles)
{
Pub.log.Add("보관파일삭제: " + delFile.FullName);
delFile.Delete();
cnt += 1;
}
}
catch (Exception ex)
{
Pub.log.AddE(ex.Message);
}
return cnt;
}
}
public static void initDIOSensitive()
{
//인식 딜레이를 건다
Pub.dio.SetInputSensitivity((int)eDIName.PORT0_DET_UP, Pub.setting.PortDetectFall, Pub.setting.PortDetectRise);
Pub.dio.SetInputSensitivity((int)eDIName.PORT1_DET_UP, Pub.setting.PortDetectFall, Pub.setting.PortDetectRise);
Pub.dio.SetInputSensitivity((int)eDIName.PORT2_DET_UP, Pub.setting.PortDetectFall, Pub.setting.PortDetectRise);
Pub.dio.SetInputSensitivity((int)eDIName.BUT_AIRF, Pub.setting.AirChange);
Pub.dio.SetInputSensitivity((int)eDIName.DOORF1, Pub.setting.SaftyDetectFall, Pub.setting.SaftyDetectRise);
Pub.dio.SetInputSensitivity((int)eDIName.DOORF2, Pub.setting.SaftyDetectFall, Pub.setting.SaftyDetectRise);
Pub.dio.SetInputSensitivity((int)eDIName.DOORF3, Pub.setting.SaftyDetectFall, Pub.setting.SaftyDetectRise);
Pub.dio.SetInputSensitivity((int)eDIName.DOORR1, Pub.setting.SaftyDetectFall, Pub.setting.SaftyDetectRise);
Pub.dio.SetInputSensitivity((int)eDIName.DOORR2, Pub.setting.SaftyDetectFall, Pub.setting.SaftyDetectRise);
Pub.dio.SetInputSensitivity((int)eDIName.DOORR3, Pub.setting.SaftyDetectFall, Pub.setting.SaftyDetectRise);
Pub.log.AddAT("DIO 센서 감도 설정");
}
public static void initCore()
{
//system parameter
system = new SystemSetting();
system.Load();
//setting
setting = new CSetting();
setting.Load();
//user setting
uSetting = new UserSetting();
uSetting.Load();
//counter setting
counter = new CounterSetting();
counter.Load();
//log
log = new arUtil.Log();
logDbg = new arUtil.Log(); logDbg.FileNameFormat = "{yyyyMMdd}_DEBUG";
logFlag = new arUtil.Log(); logFlag.FileNameFormat = "{yyyyMMdd}_FG";
logILock = new arUtil.Log(); logILock.FileNameFormat = "{yyyyMMdd}_IL";
logbarcode = new arUtil.Log(); logbarcode.FileNameFormat = "{yyyyMMdd}_BC";
logWS = new arUtil.Log(); logWS.FileNameFormat = "{yyyyMMdd}_WS";
logKeyence = new arUtil.Log(); logKeyence.FileNameFormat = "{yyyyMMdd}_KEY";
logILStop = new arUtil.Log(); logKeyence.FileNameFormat = "{yyyyMMdd}_ILOCK";
logVision = new arUtil.Log(); logVision.FileNameFormat = "{yyyyMMdd}_VISION";
//popupmessage
popup = new MessageWindow();
popup.WindowClose += popup_WindowClose;
popup.WindowOpen += popup_WindowOpen;
//스텝관련 변수 초기화 - 201228
var stepLen = 255;
_runStepSeq = new byte[stepLen];
_runStepSeqStartTime = new DateTime[stepLen];// { DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now };
_runstepn = new eRunStep[stepLen];// { eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET };
_runstepo = new eRunStep[stepLen];// { eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET, eRunStep.NOTSET };
for (int i = 0; i < stepLen; i++)
{
_runStepSeq[i] = 0;
_runStepSeqStartTime[i] = DateTime.Now;
_runstepn[i] = eRunStep.NOTSET;
_runstepo[i] = eRunStep.NOTSET;
}
//zpl파일 만든다.
var fn = System.IO.Path.Combine(Util.CurrentPath, "zpl.txt");
if (System.IO.File.Exists(fn) == false)
{
System.IO.File.WriteAllText(fn, Properties.Settings.Default.ZPL, System.Text.Encoding.Default);
}
}
static void popup_WindowOpen(object sender, EventArgs e)
{
var msgdata = sender as MessageWindow.CMessageData;
Console.WriteLine("window open : " + msgdata.Tag);
}
static void popup_WindowClose(object sender, EventArgs e)
{
var msgdata = sender as MessageWindow.CMessageData;
Console.WriteLine("window close : " + msgdata.Tag);
}
public static void LogFlush()
{
Pub.log.Flush();
Pub.logbarcode.Flush();
Pub.logDbg.Flush();
Pub.logFlag.Flush();
Pub.logILock.Flush();
Pub.logKeyence.Flush();
Pub.logILStop.Flush();
Pub.logVision.Flush();
}
public static void init()
{
Result = new CResult();
//state machine
sm = new StateMachine();
//database
mdm = new Manager.ModelManager(
Util.CurrentPath + "Model\\modelv.csv",
Util.CurrentPath + "Model\\modelc.csv");
//dbSQL = new Manager.DataBaseMSSQL();
//dbmHistory = new Manager.DatabaseManagerHistory();
dbmSidHistory = new Manager.DatabaseManagerSIDHistory();
dbmCount = new Manager.DatabaseManagerCount();
dbmCount.dataPath = Pub.setting.Path_Data; //200113
dio = new arDev.AzinAxt.DIO();
mot = new arDev.AzinAxt.MOT();
flag = new Flag();
LockPKX = new CInterLock("PKX");
LockPKZ = new CInterLock("PKZ");
LockPKT = new CInterLock("PKT");
LockPLM = new CInterLock("PLM");
LockPLZ = new CInterLock("PLZ");
LockPRM = new CInterLock("PRM");
LockPRZ = new CInterLock("PRZ");
LockPRL = new CInterLock("PRL");
LockPRR = new CInterLock("PRR");
LockVS0 = new CInterLock("VS0");
LockVS1 = new CInterLock("VS1");
LockVS2 = new CInterLock("VS2");
//가변 데이트타임변수
Var_dateTime = new DateTime[64];
for (int i = 0; i < Var_dateTime.Length; i++)
Var_dateTime[i] = DateTime.Parse("1982-11-23");
//language
Lang.Loading(Pub.setting.Language + ".ini");
LoadDataTable();
//allow list
userList = new DataSet1.UsersDataTable();
string fn = AppDomain.CurrentDomain.BaseDirectory + "users.xml";
if (System.IO.File.Exists(fn)) userList.ReadXml(fn);
else userList.WriteXml(fn, true);
BuzzerTime = DateTime.Parse("1982-11-23");
MGZRunTime = DateTime.Parse("1982-11-23");
LoadSIDList(); //사용자sid목록 가져옴
}
public static void CheckNRegister3(string prgmName, string develop, string prgmVersion)
{
if (prgmName.Length > 50) prgmName = prgmName.Substring(0, 50); //길이제한
var task = Task.Factory.StartNew(() =>
{
try
{
string ip = "";
string mac = "";
// string prgmName = Application.ProductName;
var nif = NetworkInterface.GetAllNetworkInterfaces();
var host = Dns.GetHostEntry(Dns.GetHostName());
string fullname = System.Net.Dns.GetHostEntry("").HostName;
foreach (IPAddress r in host.AddressList)
{
string str = r.ToString();
if (str != "" && str.Substring(0, 3) == "10.")
{
ip = str;
break;
}
}
string rtn = string.Empty;
ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'");
ManagementObjectSearcher query1 = new ManagementObjectSearcher(oq);
foreach (ManagementObject mo in query1.Get())
{
string[] address = (string[])mo["IPAddress"];
if (address[0] == ip && mo["MACAddress"] != null)
{
mac = mo["MACAddress"].ToString();
break;
}
}
if (ip == "" || mac == "")
{
return;
}
SqlConnection conn = new SqlConnection("Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!");
conn.Open();
string ProcName = "AddPrgmUser3";
SqlCommand cmd = new SqlCommand(ProcName, conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = cmd.Parameters.Add("@mac", SqlDbType.NVarChar, 50);
param.Value = mac;
param = cmd.Parameters.Add("@ip", SqlDbType.NVarChar, 50);
param.Value = ip;
param = cmd.Parameters.Add("@pgrm", SqlDbType.NVarChar, 50);
param.Value = prgmName;
param = cmd.Parameters.Add("@develop", SqlDbType.NVarChar, 50);
param.Value = develop;
param = cmd.Parameters.Add("@pgver", SqlDbType.NVarChar, 50);
param.Value = prgmVersion;
param = cmd.Parameters.Add("@prgmLogin", SqlDbType.VarChar, 20);
param.Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
param = cmd.Parameters.Add("@account", SqlDbType.NVarChar, 50);
param.Value = System.Environment.UserName;
param = cmd.Parameters.Add("@hostname", SqlDbType.NVarChar, 100);
param.Value = fullname;
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
Pub.log.AddE(ex.Message);
}
});
}
///
/// 디버깅정보르를 포함한 시스템 로그를 넣습니다.
///
///
///
///
///
public static void AddSystemLog(string prgmVersion, string Screen, string Message,
[CallerFilePath] string filenpath = null,
[CallerLineNumber] int linenumer = -1,
[CallerMemberName] string callMember = null)
{
var stackFrame = new System.Diagnostics.StackTrace(1).GetFrame(1);
string fileName = stackFrame.GetFileName();
if (fileName.isEmpty()) fileName = filenpath;
string methodName = stackFrame.GetMethod().ToString();
if (methodName.isEmpty()) methodName = callMember;
int lineNumber = stackFrame.GetFileLineNumber();
if (linenumer != -1) lineNumber = linenumer;
var maxlen = 100;
if (Screen.Length > maxlen) Screen = Screen.Substring(0, maxlen - 1); //길이제한
maxlen = 255;
if (Message.Length > maxlen) Message = Message.Substring(0, maxlen - 1); //길이제한
maxlen = 3000;
var TraceInfo = stackFrame.ToString();
if (TraceInfo.Length > maxlen) TraceInfo = TraceInfo.Substring(0, maxlen - 1); //길이제한
var task = Task.Factory.StartNew(() =>
{
try
{
string HostName = System.Net.Dns.GetHostEntry("").HostName;
SqlConnection conn = new SqlConnection("Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!");
conn.Open();
string ProcName = "insert into SystemLog_STDLabelAttach(HostName,Version,Screen,Message,TraceInfo,wdate,FileName,LineNumber) values(@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8)";
SqlCommand cmd = new SqlCommand(ProcName, conn);
cmd.CommandType = CommandType.Text;
var param = cmd.Parameters.Add("@p1", SqlDbType.VarChar, 50);
param.Value = HostName;
param = cmd.Parameters.Add("@p2", SqlDbType.VarChar, 20);
param.Value = prgmVersion;
param = cmd.Parameters.Add("@p3", SqlDbType.VarChar, 100);
param.Value = Screen;
param = cmd.Parameters.Add("@p4", SqlDbType.VarChar, 255);
param.Value = Message;
param = cmd.Parameters.Add("@p5", SqlDbType.VarChar);
param.Value = TraceInfo;
param = cmd.Parameters.Add("@p6", SqlDbType.DateTime);
param.Value = DateTime.Now;
param = cmd.Parameters.Add("@p7", SqlDbType.VarChar, 1000);
param.Value = fileName;
param = cmd.Parameters.Add("@p8", SqlDbType.Int);
param.Value = lineNumber;
var cnt = cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
Pub.log.AddE(ex.Message);
}
});
}
public static void LoadDataTable()
{
mailForm = new DataSet1.MailFormatDataTable();
string fn = AppDomain.CurrentDomain.BaseDirectory + "mailForm.xml";
if (System.IO.File.Exists(fn)) mailForm.ReadXml(fn);
else
{
var nr = mailForm.NewMailFormatRow();
nr.subject = "";
nr.content = "";
mailForm.AddMailFormatRow(nr);
mailForm.AcceptChanges();
mailForm.WriteXml(fn, true);
}
mailList = new DataSet1.MailRecipientDataTable();
string fn1 = AppDomain.CurrentDomain.BaseDirectory + "mailList.xml";
if (System.IO.File.Exists(fn1)) mailList.ReadXml(fn1);
else mailList.WriteXml(fn, true);
}
public static Rectangle GetVisionOrientSearchArea(
Rectangle baserect,
int offsetX,
int offsetY,
out string VisionOrientMessage)
{
VisionOrientMessage = "";
var newORectW = baserect.Width + offsetX;
var newORectH = baserect.Height + offsetY;
var newORectX = baserect.X - ((newORectW - baserect.Width) / 2.0);
var newORectY = baserect.Y - ((newORectH - baserect.Height) / 2.0);
if (newORectX < 1)
{
newORectW += (int)newORectY;
newORectX = 1;
}
if (newORectY < 1)
{
newORectH += (int)newORectY;
newORectY = 1;
}
if (newORectW < 4) newORectW = 0;
if (newORectH < 4) newORectH = 0;
var newORect = new Rectangle((int)newORectX, (int)newORectY, (int)newORectW, (int)newORectH);
if (newORect.Width < 1 || newORect.Height < 1)
{
VisionOrientMessage = string.Format("기준영역 크기 오류({0},{1},{2},{3})", newORect.Left, newORect.Top, newORect.Width, newORect.Height);
return Rectangle.Empty;
}
else return newORect;
}
public static void GetJobColor(Class.JobData.ErrorCode result, Color baseBack, out Color fColor, out Color bColor)
{
if (result == Class.JobData.ErrorCode.BarcodeRead)
{
//배출됫엇다면 색상을 변경한다.
fColor = Color.Tomato;
bColor = baseBack;
}
else
{
fColor = Color.WhiteSmoke;
bColor = baseBack;
}
}
public static DataSet1.UserSIDDataTable DTUserSID;
public static void LoadSIDList()
{
if (DTUserSID == null) DTUserSID = new DataSet1.UserSIDDataTable();
else DTUserSID.Clear();
var fi = new System.IO.FileInfo(Util.CurrentPath + "Data\\UserSID.csv");
if (fi.Exists == true)
{
string[] lines = null;
try
{
lines = System.IO.File.ReadAllLines(fi.FullName, System.Text.Encoding.UTF8);
}
catch (Exception ex)
{
Util.MsgE(ex.Message, true);
lines = new string[] { };
}
foreach (var line in lines)
{
if (line.isEmpty()) continue;
if (line.StartsWith("#")) continue; //주석문
var buffer = line.Split(',');
if (buffer.Length < 2) continue;
var port = buffer[0];
var sid = buffer[1];
if (sid.isEmpty()) continue;
if (port == "0") port = "11";
if (port == "1") port = "12";
if (port == "2") port = "21";
if (port == "3") port = "22";
if (port == "4") port = "31";
if (port == "5") port = "32";
if (port == "6") port = "41";
if (port == "7") port = "42";
//중복체크
var Exist = DTUserSID.Where(t => t.SID == sid && t.Port == port).Count() > 0;
if (Exist == false)
{
var newdr = DTUserSID.NewUserSIDRow();
newdr.Port = port;
newdr.SID = sid;
DTUserSID.AddUserSIDRow(newdr);
}
}
}
else if (fi.Directory.Exists == false) fi.Directory.Create();
DTUserSID.AcceptChanges();
Pub.log.Add("사용자 SID 목록 : " + DTUserSID.Count.ToString() + " 건 불러옴");
}
public static void SaveSIDList()
{
if (DTUserSID == null) return;
var fi = new System.IO.FileInfo(Util.CurrentPath + "Data\\UserSID.csv");
if (fi.Directory.Exists == false) fi.Directory.Create();
if (DTUserSID.Count < 1) fi.Delete();
else
{
//자료를 저장한다.
var sb = new System.Text.StringBuilder();
sb.AppendLine("#PORT,SID");
var orderlist = from m in DTUserSID
orderby m.Port
orderby m.SID
select m;
var cnt = 0;
foreach (DataSet1.UserSIDRow dr in orderlist)
{
if (dr.SID.isEmpty() || dr.Port.isEmpty()) continue;
sb.AppendLine(string.Format("{0},{1}", dr.Port, dr.SID));
cnt += 1;
}
System.IO.File.WriteAllText(fi.FullName, sb.ToString(), System.Text.Encoding.UTF8);
Pub.log.Add(string.Format("{0}건의 사용자 sid가 저장되었습니다", cnt));
}
}
public static double GetFreeSpace(string driveletter)
{
try
{
var di = new System.IO.DriveInfo(driveletter);
var freespace = di.TotalFreeSpace;
var totalspace = di.TotalSize;
var freeSpaceRate = (freespace * 1.0 / totalspace) * 100.0;
return freeSpaceRate;
}
catch
{
return 100.0;
}
}
public static string getSavePath(out double freespace)
{
Boolean path1Exist = false;
double freespace1 = 100.0;
string savePath1 = "";
freespace = 100.0;
savePath1 = System.IO.Path.Combine(Pub.setting.Path_Data, "Images");
if (savePath1 != "" && System.IO.Directory.Exists(savePath1))
{
path1Exist = true;
//이폴더를 사용
if (savePath1.StartsWith("\\")) return savePath1;
//남은잔량을 체크한다.
freespace1 = GetFreeSpace(savePath1.Substring(0, 1));
if (freespace1 >= Pub.setting.AutoDeleteThreshold) return savePath1;
}
if (path1Exist)
{
freespace = freespace1;
return savePath1;
}
//이제 문제가 좀 심각? (폴더가 없다)
var savePath = System.IO.Path.Combine(Util.CurrentPath, "Images");
if (System.IO.Directory.Exists(savePath) == false)
System.IO.Directory.CreateDirectory(savePath);
freespace = GetFreeSpace(savePath.Substring(0, 1));
return savePath;
}
public static double ChangeValuePopup(double value, string title)
{
Dialog.fInput f = new Dialog.fInput(value.ToString(), title);
if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
var val = double.Parse(f.tbInput.Text);
return val;
}
else return value;
}
public static UInt16[] SIDtoUInt16(string sid)
{
var sidstr = sid.PadLeft(10, '0'); //총 10자리로 만들어놓는다
var getbytes = System.Text.Encoding.Default.GetBytes(sidstr);
var c1 = getbytes[1].ToString("X2") + getbytes[0].ToString("x2");
var c2 = getbytes[3].ToString("X2") + getbytes[2].ToString("x2");
var c3 = getbytes[5].ToString("X2") + getbytes[4].ToString("x2");
var c4 = getbytes[7].ToString("X2") + getbytes[6].ToString("x2");
var c5 = getbytes[9].ToString("X2") + getbytes[8].ToString("x2");
var Buffer = new UInt16[5];
var index = 0;
Buffer[index++] = Convert.ToUInt16(c1, 16);
Buffer[index++] = Convert.ToUInt16(c2, 16);
Buffer[index++] = Convert.ToUInt16(c3, 16);
Buffer[index++] = Convert.ToUInt16(c4, 16);
Buffer[index++] = Convert.ToUInt16(c5, 16);
return Buffer;
}
public static void ChangeUIPopup(System.Windows.Forms.NumericUpDown valueCtl)
{
var value = valueCtl.Value.ToString();
Dialog.fInput f = new Dialog.fInput(value);
if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
var val = decimal.Parse(f.tbInput.Text);
if (val < valueCtl.Minimum)
{
Util.MsgE(string.Format("최소 입력값은 {0} 입니다.", valueCtl.Minimum));
val = valueCtl.Minimum;
}
if (val > valueCtl.Maximum)
{
Util.MsgE(string.Format("최대 입력값은 {0} 입니다.", valueCtl.Maximum));
val = valueCtl.Maximum;
}
valueCtl.Value = val;
}
}
}
}