- Pay Service 추가

main
CJY 2026-02-03 18:00:31 +09:00
parent 3d823f93bd
commit cc1a3d434e
30 changed files with 4308 additions and 739 deletions

Binary file not shown.

Binary file not shown.

View File

@ -23,6 +23,13 @@ namespace INT89DB_26
Step2_6208, Step2_6208,
} }
public enum E_Step3
{
Step1,
Step2,
Step3,
};
public enum FeedbackStatus public enum FeedbackStatus
{ {
None, None,
@ -30,6 +37,24 @@ namespace INT89DB_26
Negative, Negative,
}; };
public enum E_DataType
{
None,
History,
Inspection,
Others,
}
public enum E_UpdateCheck
{
Fail,
Success,
NotUsbMomery,
NotUpdateFolder,
NotFile,
TooManyFiles,
};
public enum E_FormStore public enum E_FormStore
{ {
FormNone = 0, FormNone = 0,
@ -74,11 +99,13 @@ namespace INT89DB_26
public enum UserGroup public enum UserGroup
{ {
None = 0, None = 0,
Level1Operator, Level1 = 1,
Level2Engineer, Level2 = 2,
Level3Manager, Level3 = 3,
Level4Developer, Admin = 4,
LogOff, Developer = 5,
NotLogin = 6,
LogOut = 7,
}; };
public enum JudgmentStatus public enum JudgmentStatus
@ -117,7 +144,7 @@ namespace INT89DB_26
f2_Level3 = 2, f2_Level3 = 2,
} }
public enum CommunicationMode public enum E_CommMode
{ {
f0_None = 0, f0_None = 0,
f1_STD1 = 1, f1_STD1 = 1,
@ -125,6 +152,200 @@ namespace INT89DB_26
f98_FB_Board = 98, f98_FB_Board = 98,
f99_Modbus = 99, f99_Modbus = 99,
} }
public enum E_TrackingOperation
{
None,
PowerOn,
BootingComplete,
EquipmentStart,
EquipmentStop,
Login,
Logout,
Calibration,
Zero,
Clear,
UserEditor,
Update,
FunctionUpdate,
DataBackup,
GroupEditor,
Initialization,
BP_PassOnce,
BP_NgOnce,
BP_PassON,
BP_PassOFF,
BP_NgON,
BP_NgOFF,
SP_Once,
SP_ON,
SP_OFF,
MainCut,
ProductCopy,
ProductPaste,
ProductAllPaste,
Motor_EEPROM,
Motor_AlarmReset,
Motor_Origin,
Motor_OneStep,
Motor_JOGCW,
Motor_JOGCCW,
TryEthernetStart,
TryEthernetStop,
EthernetConnect,
EthernetDisconnect,
// Modbus Clear
MB_Clear,
MB_EquipmentStart,
MB_EquipmentStop,
}
public enum TrackingParameter
{
ProductNumber,
WeightOverRange,
WeightPassRange,
WeightUnderRange,
WeightTareRange,
WeightOverRangeLimit,
WeightUnderRangeLimit,
WeightLimitEnable,
BP_Individual,
BP_All,
BP_Direction,
BP_Mode,
SP_Mode,
SP_Time,
SP_Count,
LK_Mode,
LK_Time,
ChangeTime,
ChangeName,
ChangeLOT,
JudgmentFilter,
JudgmentDelayTime,
JudgmentTurnDelayTime,
JudgmentCount,
JudgmentSpeed,
Sorter1DelayTime,
Sorter1RunTime,
Sorter2DelayTime,
Sorter2RunTime,
Sorter3DelayTime,
Sorter3RunTime,
Sorter4DelayTime,
Sorter4RunTime,
EntryGateDelayTime,
EntryGateRunTime,
DischargeStopperDelayTime,
DischargeStopperRunTime,
Stopper2DelayTime,
Stopper2RunTime,
ForcedZeroDelayTime,
DynamicCorrection1,
DynamicCorrection2,
DynamicCorrection3,
DynamicCorrection4,
DynamicCorrection5,
DynamicCorrection6,
DynamicCorrection7,
DynamicCorrection8,
DynamicCorrection9,
DynamicCorrection10,
DynamicCorrection11,
DynamicCorrection12,
DynamicCorrection13,
DynamicCorrection14,
DynamicCorrection15,
DynamicCorrection16,
AutoZeroTime,
AutoZeroRange,
AutoZeroVariance,
AutoZeroMode,
Com3Baudrate,
Com3Mode,
TCPOpMode,
TCPComMode,
TCPLocalPort,
TCPLocalIPConfig,
TCPLocalIPAddress,
TCPLocalSubnetMask,
TCPLocalGateway,
TCPServerIPAddress,
TCPServerPort,
Mod_StartAddr,
CalMaxWeight,
CalBalWeight,
CalDigit,
EtcEmptyWeight,
EtcTurnDelay,
EtcTurnOperation,
EtcChattering,
EtcBuzzerRunTime,
EtcRelayRunTime,
EtcDecimalpoint,
MotorOriginOffset,
MotorOriginSpeed,
MotorSpeed,
MotorAcceleration,
MotorDeceleration,
MotorPosition1,
Level1Name,
Level2Name,
Level3Name,
AutoLogout,
DataStoragePeriod,
// Modbus
MB_WeightOverRange,
MB_WeightPassRange,
MB_WeightUnderRange,
MB_WeightTareRange,
MB_ProductNumber,
MB_WeightOverRangeLimit,
MB_WeightUnderRangeLimit,
}
public enum TrackingAlarm
{
None,
a1_EntrySensorError,
a2_LoadcellError,
a3_PressureError,
a4_,
a5_,
a6_,
a7_Sorter2Error,
a8_EmergencyStop,
a9_,
a10_ServoAlarm,
a11_,
a12_ServoTorqueAlarm,
a13_,
a14_Sorter1Error,
a15_ProductDischargeError,
a16_ProductJamError,
}
#endregion #endregion
} }
@ -363,6 +584,8 @@ namespace INT89DB_26
public class SystemConfigurationItem public class SystemConfigurationItem
{ {
#region Field #region Field
private bool m_IsPart11;
private bool m_IsModbus;
private bool m_IsDataBackup; private bool m_IsDataBackup;
private bool m_IsBypassMode; private bool m_IsBypassMode;
private bool m_IsWeightViewForward; private bool m_IsWeightViewForward;
@ -379,6 +602,7 @@ namespace INT89DB_26
private int m_Serial3BaudRate; private int m_Serial3BaudRate;
private int m_Serial3Mode; private int m_Serial3Mode;
private int m_InverterQTY; private int m_InverterQTY;
private int m_StoragePeriod;
private string m_Unit; private string m_Unit;
private string m_SerialNumber; private string m_SerialNumber;
@ -410,6 +634,16 @@ namespace INT89DB_26
#endregion #endregion
#region Property #region Property
public bool IsModbus
{
get { return this.m_IsModbus; }
set { this.m_IsModbus = value; }
}
public bool IsPart11
{
get { return this.m_IsPart11; }
set { this.m_IsPart11 = value; }
}
public bool IsDataBackup public bool IsDataBackup
{ {
get { return this.m_IsDataBackup; } get { return this.m_IsDataBackup; }
@ -486,6 +720,11 @@ namespace INT89DB_26
get { return this.m_InverterQTY; } get { return this.m_InverterQTY; }
set { this.m_InverterQTY = value; } set { this.m_InverterQTY = value; }
} }
public int StoragePeriod
{
get { return this.m_StoragePeriod; }
set { this.m_StoragePeriod = value; }
}
public string Unit public string Unit
{ {
@ -590,6 +829,8 @@ namespace INT89DB_26
#region Method #region Method
public void Initialization() public void Initialization()
{ {
this.IsPart11 = false;
this.IsModbus = false;
this.IsDataBackup = false; this.IsDataBackup = false;
this.IsBypassMode = false; this.IsBypassMode = false;
this.IsWeightViewForward = true; this.IsWeightViewForward = true;
@ -606,14 +847,15 @@ namespace INT89DB_26
this.Serial3BaudRate = 9600; this.Serial3BaudRate = 9600;
this.Serial3Mode = 0; this.Serial3Mode = 0;
this.InverterQTY = 2; this.InverterQTY = 2;
this.StoragePeriod = 12;
this.Unit = "g"; this.Unit = "g";
this.SerialNumber = "26A0000"; this.SerialNumber = "26B0000";
this.Language = DataStore.E_LanguageID.Korean; this.Language = DataStore.E_LanguageID.Korean;
this.CurrentForm = DataStore.E_FormStore.FormMainDisplay; this.CurrentForm = DataStore.E_FormStore.FormMainDisplay;
this.CurrentUser = new User(); this.CurrentUser = new User();
this.CurrentUser.Group = DataStore.UserGroup.LogOff; this.CurrentUser.Group = DataStore.UserGroup.LogOut;
this.EthernetLocalPort = 5001; this.EthernetLocalPort = 5001;
this.EthernetServerPort = 5002; this.EthernetServerPort = 5002;
@ -638,8 +880,8 @@ namespace INT89DB_26
{ {
public bool IsDataBackup; public bool IsDataBackup;
public bool DummyBool5; public bool DummyBool5;
public bool DummyBool6; public bool IsPart11;
public bool DummyBool7; public bool IsModbus;
public bool IsFeedbackBoard; public bool IsFeedbackBoard;
public bool IsFeedback; public bool IsFeedback;
public bool IsLogin; public bool IsLogin;
@ -716,7 +958,7 @@ namespace INT89DB_26
public int FeedbackCorrectionRate; public int FeedbackCorrectionRate;
public int FeedbackPulseWidth; public int FeedbackPulseWidth;
public int DummyInt3; public int StoragePeriod;
public int DummyInt4; public int DummyInt4;
public int DummyInt5; public int DummyInt5;
public int DummyInt6; public int DummyInt6;
@ -1422,7 +1664,7 @@ namespace INT89DB_26
this.DeveloperUser = new User(); this.DeveloperUser = new User();
this.DeveloperUser.ID = "Intech"; this.DeveloperUser.ID = "Intech";
this.DeveloperUser.Password = "20090810"; this.DeveloperUser.Password = "20090810";
this.DeveloperUser.Group = DataStore.UserGroup.Level4Developer; this.DeveloperUser.Group = DataStore.UserGroup.Developer;
} }
public User FindUser(string id) public User FindUser(string id)
@ -2213,4 +2455,201 @@ namespace INT89DB_26
public string DummyString3; public string DummyString3;
} }
#endregion #endregion
#region HistoryData
public class HistoryData
{
#region Field
private string m_Type;
private DateTime m_Time;
private string m_LoginID;
private Object m_Event;
private string m_Detail;
private string m_BeforeData;
private string m_AfterData;
#endregion
#region Constructor
public HistoryData()
{
}
#endregion
#region Property
public string Type
{
get { return this.m_Type; }
set { this.m_Type = value; }
}
public DateTime Time
{
get { return this.m_Time; }
set { this.m_Time = value; }
}
public string LoginID
{
get { return this.m_LoginID; }
set { this.m_LoginID = value; }
}
public Object Event
{
get { return this.m_Event; }
set { this.m_Event = value; }
}
public string Detail
{
get { return this.m_Detail; }
set { this.m_Detail = value; }
}
public string BeforeData
{
get { return this.m_BeforeData; }
set { this.m_BeforeData = value; }
}
public string AfterData
{
get { return this.m_AfterData; }
set { this.m_AfterData = value; }
}
#endregion
#region Method
private void Initialize()
{
this.Type = "";
this.Time = new DateTime();
this.LoginID = "-";
this.Event = new object();
this.Detail = "";
this.AfterData = "";
this.BeforeData = "";
}
#endregion
}
#endregion
#region DataBackupYear
public class DataBackupYear
{
#region Field
private string m_Year;
public List<DataBackupMonth> Months;
#endregion
#region Constructor
public DataBackupYear(string year)
{
this.Initialize();
this.Year = year;
}
#endregion
#region Property
public string Year
{
get { return this.m_Year; }
private set { this.m_Year = value; }
}
#endregion
#region Method
private void Initialize()
{
this.Year = "";
this.Months = new List<DataBackupMonth>();
}
#endregion
}
#endregion
#region DataBackupMonth
public class DataBackupMonth
{
#region Field
private string m_Month;
public List<string> Days;
#endregion
#region Constructor
public DataBackupMonth(string month)
{
this.Initialize();
this.Month = month;
}
#endregion
#region Property
public string Month
{
get { return this.m_Month; }
private set { this.m_Month = value; }
}
#endregion
#region Method
private void Initialize()
{
this.Month = "";
this.Days = new List<string>();
}
#endregion
}
#endregion
#region FileHeaderItem
public class FileHeaderItem
{
#region Field
private int m_EquipmentColumns;
private int m_EquipmentType;
private string m_LoginId;
private string m_SerialNumber;
private DateTime m_TimeStamp;
#endregion
#region Constructor
public FileHeaderItem()
{
}
#endregion
#region Property
public int EquipmentColumns
{
get { return this.m_EquipmentColumns; }
set { this.m_EquipmentColumns = value; }
}
public int EquipmentType
{
get { return this.m_EquipmentType; }
set { this.m_EquipmentType = value; }
}
public string LoginId
{
get { return this.m_LoginId; }
set { this.m_LoginId = value; }
}
public string SerialNumber
{
get { return this.m_SerialNumber; }
set { this.m_SerialNumber = value; }
}
public DateTime TimeStamp
{
get { return this.m_TimeStamp; }
set { this.m_TimeStamp = value; }
}
#endregion
#region Method
#endregion
}
#endregion
} }

View File

@ -1888,6 +1888,281 @@ namespace INT89DB_26.DialogForms
break; break;
} }
} }
public DialogFormMessage(int errCode, DataStore.E_LanguageID language, DataStore.E_FormStore screen)
{
InitializeComponent();
this.labelErrorCode.Text = "";
this.labelMessage1.Text = "";
this.labelMessage2.Text = "";
int screenNum = (int)screen;
switch (screen)
{
case DataStore.E_FormStore.FormProgramUpdate:
if (language == DataStore.E_LanguageID.Korean)
{
this.buttonOK.Text = "OK";
#region 한글
switch (errCode)
{
case 1:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_01";
this.labelMessage1.Text = "파일명이 올바르지 않습니다";
this.labelMessage2.Text = "";
break;
case 2:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_02";
this.labelMessage1.Text = "시리얼 번호가 올바르지 않습니다";
this.labelMessage2.Text = "";
break;
case 3:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_03";
this.labelMessage1.Text = "파일을 찾을 수 없습니다";
this.labelMessage2.Text = "";
break;
case 4:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_04";
this.labelMessage1.Text = "파일 상태에 문제가 있습니다";
this.labelMessage2.Text = "";
break;
case 5:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_05";
this.labelMessage1.Text = "파일의 시리얼 번호가 현재 장비와 일치하지 않습니다";
this.labelMessage2.Text = "";
break;
case 6:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_06";
this.labelMessage1.Text = "UID가 일치하지 않습니다";
this.labelMessage2.Text = "";
break;
case 7:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_07";
this.labelMessage1.Text = "키 타입이 올바르지 않습니다";
this.labelMessage2.Text = "";
break;
default:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_99";
this.labelMessage1.Text = "제조사에 문의하세요";
this.labelMessage2.Text = "";
break;
}
#endregion
}
else if (language == DataStore.E_LanguageID.English)
{
this.buttonOK.Text = "OK";
#region 영문
switch (errCode)
{
case 1:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_01";
this.labelMessage1.Text = "The file name is incorrect";
this.labelMessage2.Text = "";
break;
case 2:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_02";
this.labelMessage1.Text = "Serial number is incorrect";
this.labelMessage2.Text = "";
break;
case 3:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_03";
this.labelMessage1.Text = "file not found";
this.labelMessage2.Text = "";
break;
case 4:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_04";
this.labelMessage1.Text = "There is a problem with the file status";
this.labelMessage2.Text = "";
break;
case 5:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_05";
this.labelMessage1.Text = "The serial number in the file";
this.labelMessage2.Text = "does not match your current device";
break;
case 6:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_06";
this.labelMessage1.Text = "UID does not match";
this.labelMessage2.Text = "";
break;
case 7:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_07";
this.labelMessage1.Text = "Key type is incorrect";
this.labelMessage2.Text = "";
break;
default:
this.labelErrorCode.Text = "Error" + screenNum.ToString() + "_99";
this.labelMessage1.Text = "Please contact a manufacturer";
break;
}
#endregion
}
else if (language == DataStore.E_LanguageID.Chinese)
{
this.buttonOK.Text = "确认";
#region 중문
switch (errCode)
{
case 1:
this.labelErrorCode.Text = "错误" + screenNum.ToString() + "_01";
this.labelMessage1.Text = "文件名不正确";
this.labelMessage2.Text = "";
break;
case 2:
this.labelErrorCode.Text = "错误" + screenNum.ToString() + "_02";
this.labelMessage1.Text = "序列号不正确";
this.labelMessage2.Text = "";
break;
case 3:
this.labelErrorCode.Text = "错误" + screenNum.ToString() + "_03";
this.labelMessage1.Text = "文件未找到";
this.labelMessage2.Text = "";
break;
case 4:
this.labelErrorCode.Text = "错误" + screenNum.ToString() + "_04";
this.labelMessage1.Text = "文件状态有问题";
this.labelMessage2.Text = "";
break;
case 5:
this.labelErrorCode.Text = "错误" + screenNum.ToString() + "_05";
this.labelMessage1.Text = "文件中的序列号与您当前的设备不匹配";
this.labelMessage2.Text = "";
break;
case 6:
this.labelErrorCode.Text = "错误" + screenNum.ToString() + "_06";
this.labelMessage1.Text = "UID 不匹配";
this.labelMessage2.Text = "";
break;
case 7:
this.labelErrorCode.Text = "错误" + screenNum.ToString() + "_07";
this.labelMessage1.Text = "密钥类型不正确";
this.labelMessage2.Text = "";
break;
default:
this.labelErrorCode.Text = "错误" + screenNum.ToString() + "_99";
this.labelMessage1.Text = "请联系厂商";
this.labelMessage2.Text = "";
break;
}
#endregion
}
else if (language == DataStore.E_LanguageID.Czech)
{
}
else if (language == DataStore.E_LanguageID.Russian)
{
this.buttonOK.Text = "OK";
#region 러시아어
switch (errCode)
{
case 1:
this.labelErrorCode.Text = "Ошибка" + screenNum.ToString() + "_01";
this.labelMessage1.Text = "Имя файла неверно";
this.labelMessage2.Text = "";
break;
case 2:
this.labelErrorCode.Text = "Ошибка" + screenNum.ToString() + "_02";
this.labelMessage1.Text = "Серийный номер неверен";
this.labelMessage2.Text = "";
break;
case 3:
this.labelErrorCode.Text = "Ошибка" + screenNum.ToString() + "_03";
this.labelMessage1.Text = "файл не найден";
this.labelMessage2.Text = "";
break;
case 4:
this.labelErrorCode.Text = "Ошибка" + screenNum.ToString() + "_04";
this.labelMessage1.Text = "Возникла проблема со статусом файла";
this.labelMessage2.Text = "";
break;
case 5:
this.labelErrorCode.Text = "Ошибка" + screenNum.ToString() + "_05";
this.labelMessage1.Text = "Серийный номер в файле не";
this.labelMessage2.Text = "соответствует вашему текущему устройству";
break;
case 6:
this.labelErrorCode.Text = "Ошибка" + screenNum.ToString() + "_06";
this.labelMessage1.Text = "UID не соответствует";
this.labelMessage2.Text = "";
break;
case 7:
this.labelErrorCode.Text = "Ошибка" + screenNum.ToString() + "_07";
this.labelMessage1.Text = "Тип ключа неверен";
this.labelMessage2.Text = "";
break;
default:
this.labelErrorCode.Text = "Ошибка" + screenNum.ToString() + "_99";
this.labelMessage1.Text = "Свяжитесь с производителем";
this.labelMessage2.Text = "";
break;
}
#endregion
}
else if (language == DataStore.E_LanguageID.German)
{
this.buttonOK.Text = "Bestätigen";
#region 독일어
switch (errCode)
{
case 1:
this.labelErrorCode.Text = "Fehler" + screenNum.ToString() + "_01";
this.labelMessage1.Text = "Der Dateiname ist falsch";
this.labelMessage2.Text = "";
break;
case 2:
this.labelErrorCode.Text = "Fehler" + screenNum.ToString() + "_02";
this.labelMessage1.Text = "Die Seriennummer ist falsch";
this.labelMessage2.Text = "";
break;
case 3:
this.labelErrorCode.Text = "Fehler" + screenNum.ToString() + "_03";
this.labelMessage1.Text = "Datei nicht gefunden";
this.labelMessage2.Text = "";
break;
case 4:
this.labelErrorCode.Text = "Fehler" + screenNum.ToString() + "_04";
this.labelMessage1.Text = "Es liegt ein Problem mit dem Dateistatus vor";
this.labelMessage2.Text = "";
break;
case 5:
this.labelErrorCode.Text = "Fehler" + screenNum.ToString() + "_05";
this.labelMessage1.Text = "Die Seriennummer in der Datei stimmt";
this.labelMessage2.Text = "nicht mit Ihrem aktuellen Gerät überein";
break;
case 6:
this.labelErrorCode.Text = "Fehler" + screenNum.ToString() + "_06";
this.labelMessage1.Text = "UID stimmt nicht überein";
this.labelMessage2.Text = "";
break;
case 7:
this.labelErrorCode.Text = "Fehler" + screenNum.ToString() + "_07";
this.labelMessage1.Text = "Der Schlüsseltyp ist falsch";
this.labelMessage2.Text = "";
break;
default:
this.labelErrorCode.Text = "Fehler" + screenNum.ToString() + "_99";
this.labelMessage1.Text = "Hersteller kontaktieren";
this.labelMessage2.Text = "";
break;
}
#endregion
}
else
{
}
break;
default:
break;
}
}
public DialogFormMessage(DataStore.MessageBoxIcon icon, string code, string message1, string message2, int autoClose_sec) public DialogFormMessage(DataStore.MessageBoxIcon icon, string code, string message1, string message2, int autoClose_sec)
{ {
InitializeComponent(); InitializeComponent();
@ -1938,7 +2213,7 @@ namespace INT89DB_26.DialogForms
#endregion #endregion
#region Method #region Method
private void InitializeContnrol() private void InitializeControl()
{ {
int x = 0, y = 0; int x = 0, y = 0;
@ -1956,7 +2231,7 @@ namespace INT89DB_26.DialogForms
{ {
base.OnLoad(e); base.OnLoad(e);
this.InitializeContnrol(); this.InitializeControl();
} }
#endregion #endregion

View File

@ -104,7 +104,7 @@ namespace INT89DB_26.Forms
{ {
this.comboBoxTCPOperationMode.Items.Clear(); this.comboBoxTCPOperationMode.Items.Clear();
this.comboBoxTCPOperationMode.SelectedIndexChanged -= new EventHandler(this.comboBoxOperationMode_SelectedIndexChanged); this.comboBoxTCPOperationMode.SelectedIndexChanged -= new EventHandler(this.comboBoxOperationMode_SelectedIndexChanged);
this.comboBoxTCPOperationMode.Items.Add("-"); this.comboBoxTCPOperationMode.Items.Add("None");
this.comboBoxTCPOperationMode.Items.Add("Server"); this.comboBoxTCPOperationMode.Items.Add("Server");
this.comboBoxTCPOperationMode.Items.Add("Client"); this.comboBoxTCPOperationMode.Items.Add("Client");
this.comboBoxTCPOperationMode.SelectedIndex = 0; this.comboBoxTCPOperationMode.SelectedIndex = 0;
@ -112,10 +112,11 @@ namespace INT89DB_26.Forms
this.comboBoxTCPMode.Items.Clear(); this.comboBoxTCPMode.Items.Clear();
this.comboBoxTCPMode.SelectedIndexChanged -= new EventHandler(this.comboBoxMode_SelectedIndexChanged); this.comboBoxTCPMode.SelectedIndexChanged -= new EventHandler(this.comboBoxMode_SelectedIndexChanged);
this.comboBoxTCPMode.Items.Add("-"); this.comboBoxTCPMode.Items.Add("None");
this.comboBoxTCPMode.Items.Add("STD1"); // index : 1 this.comboBoxTCPMode.Items.Add("STD1"); // index : 1
this.comboBoxTCPMode.Items.Add("STD2"); // index : 2 this.comboBoxTCPMode.Items.Add("STD2"); // index : 2
this.comboBoxTCPMode.Items.Add("Modbus"); // index : 99 if (this.ParentForm.SystemConfig.IsModbus == true)
this.comboBoxTCPMode.Items.Add("Modbus");
this.comboBoxTCPMode.SelectedIndex = 0; this.comboBoxTCPMode.SelectedIndex = 0;
this.comboBoxTCPMode.SelectedIndexChanged += new EventHandler(this.comboBoxMode_SelectedIndexChanged); this.comboBoxTCPMode.SelectedIndexChanged += new EventHandler(this.comboBoxMode_SelectedIndexChanged);
@ -130,7 +131,7 @@ namespace INT89DB_26.Forms
this.comboBoxSerial3Mode.Items.Clear(); this.comboBoxSerial3Mode.Items.Clear();
this.comboBoxSerial3Mode.SelectedIndexChanged -= new EventHandler(this.comboBoxSerial3Mode_SelectedIndexChanged); this.comboBoxSerial3Mode.SelectedIndexChanged -= new EventHandler(this.comboBoxSerial3Mode_SelectedIndexChanged);
this.comboBoxSerial3Mode.Items.Add("-"); this.comboBoxSerial3Mode.Items.Add("None");
this.comboBoxSerial3Mode.Items.Add("STD1"); // index : 1 this.comboBoxSerial3Mode.Items.Add("STD1"); // index : 1
this.comboBoxSerial3Mode.Items.Add("STD2"); // index : 2 this.comboBoxSerial3Mode.Items.Add("STD2"); // index : 2
if (this.ParentForm.SystemConfig.IsFeedbackBoard == true) if (this.ParentForm.SystemConfig.IsFeedbackBoard == true)
@ -184,6 +185,32 @@ namespace INT89DB_26.Forms
//#endregion //#endregion
} }
public void RefreshComboBoxSerial3FeedbackBoard(bool bValue)
{
this.comboBoxSerial3Mode.SelectedIndexChanged -= new EventHandler(this.comboBoxSerial3Mode_SelectedIndexChanged);
if (bValue == true)
{
this.comboBoxSerial3Mode.Items.Add("FB_Board"); // index : 98
this.comboBoxSerial3Mode.SelectedItem = "FB_Board";
if (this.ParentForm.SystemConfig.IsFeedback == true)
{
this.comboBoxSerial3BaudRate.Enabled = false;
this.comboBoxSerial3Mode.Enabled = false;
}
}
else
{
this.comboBoxSerial3Mode.Items.Remove("FB_Board"); // index : 98
this.comboBoxSerial3Mode.SelectedIndex = 0;
this.comboBoxSerial3BaudRate.Enabled = true;
this.comboBoxSerial3Mode.Enabled = true;
}
this.comboBoxSerial3Mode.SelectedIndexChanged += new EventHandler(this.comboBoxSerial3Mode_SelectedIndexChanged);
}
private void EthernetStart() private void EthernetStart()
{ {
this.buttonEthernetStart.Enabled = true; this.buttonEthernetStart.Enabled = true;
@ -238,16 +265,19 @@ namespace INT89DB_26.Forms
this.comboBoxSerial3Mode.SelectedIndexChanged -= new EventHandler(this.comboBoxSerial3Mode_SelectedIndexChanged); this.comboBoxSerial3Mode.SelectedIndexChanged -= new EventHandler(this.comboBoxSerial3Mode_SelectedIndexChanged);
switch (this.ParentForm.SystemConfig.Serial3Mode) switch (this.ParentForm.SystemConfig.Serial3Mode)
{ {
case (int)DataStore.CommunicationMode.f1_STD1: case (int)DataStore.E_CommMode.f1_STD1:
this.comboBoxSerial3Mode.SelectedItem = "STD1"; this.comboBoxSerial3Mode.SelectedItem = "STD1";
break; break;
case (int)DataStore.CommunicationMode.f2_STD2: case (int)DataStore.E_CommMode.f2_STD2:
this.comboBoxSerial3Mode.SelectedItem = "STD2"; this.comboBoxSerial3Mode.SelectedItem = "STD2";
break; break;
case (int)DataStore.CommunicationMode.f98_FB_Board: case (int)DataStore.E_CommMode.f98_FB_Board:
this.comboBoxSerial3Mode.SelectedItem = "FB_Board"; this.comboBoxSerial3Mode.SelectedItem = "FB_Board";
this.comboBoxSerial3BaudRate.Enabled = false; if (this.ParentForm.SystemConfig.IsFeedback == true)
this.comboBoxSerial3Mode.Enabled = false; {
this.comboBoxSerial3BaudRate.Enabled = false;
this.comboBoxSerial3Mode.Enabled = false;
}
break; break;
default: default:
break; break;
@ -272,7 +302,7 @@ namespace INT89DB_26.Forms
this.comboBoxTCPOperationMode.SelectedIndexChanged -= new EventHandler(this.comboBoxOperationMode_SelectedIndexChanged); this.comboBoxTCPOperationMode.SelectedIndexChanged -= new EventHandler(this.comboBoxOperationMode_SelectedIndexChanged);
// 통신모드 // 통신모드
if (this.ParentForm.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f99_Modbus) if (this.ParentForm.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f99_Modbus)
this.comboBoxTCPMode.SelectedItem = "Modbus"; this.comboBoxTCPMode.SelectedItem = "Modbus";
else else
this.comboBoxTCPMode.SelectedIndex = this.ParentForm.SystemConfig.EthernetMode; this.comboBoxTCPMode.SelectedIndex = this.ParentForm.SystemConfig.EthernetMode;
@ -354,12 +384,12 @@ namespace INT89DB_26.Forms
} }
private void UpdateProtocolDescriptionEthernet() private void UpdateProtocolDescriptionEthernet()
{ {
if (this.comboBoxTCPMode.SelectedIndex == (int)DataStore.CommunicationMode.f1_STD1) if (this.comboBoxTCPMode.SelectedIndex == (int)DataStore.E_CommMode.f1_STD1)
{ {
this.labelProtocolDescriptionEthernet_1.Text = "STX[1],ID[5],NO[4],LANE[2],GRD[1],"; this.labelProtocolDescriptionEthernet_1.Text = "STX[1],ID[5],NO[4],LANE[2],GRD[1],";
this.labelProtocolDescriptionEthernet_2.Text = "WEIGHT[6],ETX[1]"; this.labelProtocolDescriptionEthernet_2.Text = "WEIGHT[6],ETX[1]";
} }
else if (this.comboBoxTCPMode.SelectedIndex == (int)DataStore.CommunicationMode.f2_STD2) else if (this.comboBoxTCPMode.SelectedIndex == (int)DataStore.E_CommMode.f2_STD2)
{ {
this.labelProtocolDescriptionEthernet_1.Text = "STX[1],ID[5],NO[4],LANE[2],SIGN[1],"; this.labelProtocolDescriptionEthernet_1.Text = "STX[1],ID[5],NO[4],LANE[2],SIGN[1],";
@ -521,9 +551,9 @@ namespace INT89DB_26.Forms
{ {
string data = ""; string data = "";
if (this.ParentForm.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f1_STD1) if (this.ParentForm.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f1_STD1)
data = this.ParentForm.Protocol_STD1(this.ParentForm.SystemConfig, this.ParentForm.CollectionWeightData[0], 1); data = this.ParentForm.Protocol_STD1(this.ParentForm.SystemConfig, this.ParentForm.CollectionWeightData[0], 1);
else if (this.ParentForm.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f2_STD2) else if (this.ParentForm.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f2_STD2)
data = this.ParentForm.Protocol_STD2(this.ParentForm.SystemConfig, this.ParentForm.CollectionWeightData[0], 1); data = this.ParentForm.Protocol_STD2(this.ParentForm.SystemConfig, this.ParentForm.CollectionWeightData[0], 1);
switch (this.ParentForm.SystemConfig.EthernetOperationMode) switch (this.ParentForm.SystemConfig.EthernetOperationMode)
@ -617,13 +647,13 @@ namespace INT89DB_26.Forms
this.ParentForm.SystemConfig.EthernetMode = 0; this.ParentForm.SystemConfig.EthernetMode = 0;
break; break;
case "STD1": case "STD1":
this.ParentForm.SystemConfig.EthernetMode = (int)DataStore.CommunicationMode.f1_STD1; this.ParentForm.SystemConfig.EthernetMode = (int)DataStore.E_CommMode.f1_STD1;
break; break;
case "STD2": case "STD2":
this.ParentForm.SystemConfig.EthernetMode = (int)DataStore.CommunicationMode.f2_STD2; this.ParentForm.SystemConfig.EthernetMode = (int)DataStore.E_CommMode.f2_STD2;
break; break;
case "Modbus": case "Modbus":
this.ParentForm.SystemConfig.EthernetMode = (int)DataStore.CommunicationMode.f99_Modbus; this.ParentForm.SystemConfig.EthernetMode = (int)DataStore.E_CommMode.f99_Modbus;
break; break;
default: default:
break; break;
@ -1074,13 +1104,13 @@ namespace INT89DB_26.Forms
this.ParentForm.SystemConfig.Serial3Mode = 0; this.ParentForm.SystemConfig.Serial3Mode = 0;
break; break;
case "STD1": case "STD1":
this.ParentForm.SystemConfig.Serial3Mode = (int)DataStore.CommunicationMode.f1_STD1; this.ParentForm.SystemConfig.Serial3Mode = (int)DataStore.E_CommMode.f1_STD1;
break; break;
case "STD2": case "STD2":
this.ParentForm.SystemConfig.Serial3Mode = (int)DataStore.CommunicationMode.f2_STD2; this.ParentForm.SystemConfig.Serial3Mode = (int)DataStore.E_CommMode.f2_STD2;
break; break;
case "FB_Board": case "FB_Board":
this.ParentForm.SystemConfig.Serial3Mode = (int)DataStore.CommunicationMode.f98_FB_Board; this.ParentForm.SystemConfig.Serial3Mode = (int)DataStore.E_CommMode.f98_FB_Board;
break; break;
default: default:
break; break;
@ -1104,11 +1134,11 @@ namespace INT89DB_26.Forms
} }
private void buttonSerialSend_Click(object sender, EventArgs e) private void buttonSerialSend_Click(object sender, EventArgs e)
{ {
if (this.ParentForm.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f1_STD1) if (this.ParentForm.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f1_STD1)
this.ParentForm.SerialPort3_Write(this.ParentForm.Protocol_STD1_NotStxEtx(this.ParentForm.SystemConfig, this.ParentForm.CollectionWeightData[0], 1)); this.ParentForm.SerialPort3_Write(this.ParentForm.Protocol_STD1_NotStxEtx(this.ParentForm.SystemConfig, this.ParentForm.CollectionWeightData[0], 1));
else if (this.ParentForm.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f2_STD2) else if (this.ParentForm.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f2_STD2)
this.ParentForm.SerialPort3_Write(this.ParentForm.Protocol_STD2_NotStxEtx(this.ParentForm.SystemConfig, this.ParentForm.CollectionWeightData[0], 1)); this.ParentForm.SerialPort3_Write(this.ParentForm.Protocol_STD2_NotStxEtx(this.ParentForm.SystemConfig, this.ParentForm.CollectionWeightData[0], 1));
else if (this.ParentForm.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f98_FB_Board) else if (this.ParentForm.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f98_FB_Board)
this.ParentForm.SerialPort3_FbBoardTestSend(1); this.ParentForm.SerialPort3_FbBoardTestSend(1);
} }

View File

@ -114,8 +114,8 @@ namespace INT89DB_26.Forms
structItem.IsDataBackup = this.ParentForm.SystemConfig.IsDataBackup; structItem.IsDataBackup = this.ParentForm.SystemConfig.IsDataBackup;
structItem.DummyBool5 = false; structItem.DummyBool5 = false;
structItem.DummyBool6 = false; structItem.IsPart11 = false;
structItem.DummyBool7 = false; structItem.IsModbus = false;
structItem.IsFeedbackBoard = false; structItem.IsFeedbackBoard = false;
structItem.IsFeedback = false; structItem.IsFeedback = false;
structItem.IsLogin = this.ParentForm.SystemConfig.IsLogin; structItem.IsLogin = this.ParentForm.SystemConfig.IsLogin;

View File

@ -107,7 +107,7 @@ namespace INT89DB_26.Forms
} }
private void DefaultSetting() private void DefaultSetting()
{ {
this.labelDisplayVer.Text = "8.6.0"; this.labelDisplayVer.Text = "8.7.0";
this.labelSerialNo.Text = this.ParentForm.SystemConfig.SerialNumber; this.labelSerialNo.Text = this.ParentForm.SystemConfig.SerialNumber;
this.CollectionControlVerLabel = new Collection<SmartLabel>(); this.CollectionControlVerLabel = new Collection<SmartLabel>();
@ -296,7 +296,7 @@ namespace INT89DB_26.Forms
#region Event Handler #region Event Handler
private void labelSerialNo_Click(object sender, EventArgs e) private void labelSerialNo_Click(object sender, EventArgs e)
{ {
if (this.ParentForm.SystemConfig.CurrentUser.Group == DataStore.UserGroup.Level4Developer) if (this.ParentForm.SystemConfig.CurrentUser.Group == DataStore.UserGroup.Developer)
{ {
this.textBoxSerialNo.Visible = true; this.textBoxSerialNo.Visible = true;
this.textBoxSerialNo.BringToFront(); this.textBoxSerialNo.BringToFront();

View File

@ -43,7 +43,16 @@ namespace INT89DB_26.Forms
private string m_PathSystemFileFolder1; private string m_PathSystemFileFolder1;
private string m_PathSystemFileFolder2; private string m_PathSystemFileFolder2;
private string m_PathDataBackupFolder; private string m_PathDataBackupFolder;
private string m_PathDataStatisticsFolder;
private string m_PathProgramSaveFolder; private string m_PathProgramSaveFolder;
private string m_PathDataFolder;
private string m_PathDataHistoryFolder;
private string m_PathDataInspectionFolder;
private string m_PathDataOthersFolder;
private string m_PathEncryptionFolder;
private string m_PathHeaderFolder;
private string m_PathDataLogFolder;
private static string m_PathBinFolder;
// 로그온 색상 // 로그온 색상
public Color ColorLogOff; public Color ColorLogOff;
@ -171,6 +180,51 @@ namespace INT89DB_26.Forms
get { return this.m_PathProgramSaveFolder; } get { return this.m_PathProgramSaveFolder; }
set { this.m_PathProgramSaveFolder = value; } set { this.m_PathProgramSaveFolder = value; }
} }
public string PathDataStatisticsFolder
{
get { return this.m_PathDataStatisticsFolder; }
private set { this.m_PathDataStatisticsFolder = value; }
}
public string PathDataFolder
{
get { return this.m_PathDataFolder; }
private set { this.m_PathDataFolder = value; }
}
public string PathDataHistoryFolder
{
get { return this.m_PathDataHistoryFolder; }
private set { this.m_PathDataHistoryFolder = value; }
}
public string PathDataInspectionFolder
{
get { return this.m_PathDataInspectionFolder; }
private set { this.m_PathDataInspectionFolder = value; }
}
public string PathDataOthersFolder
{
get { return this.m_PathDataOthersFolder; }
private set { this.m_PathDataOthersFolder = value; }
}
public string PathEncryptionFolder
{
get { return this.m_PathEncryptionFolder; }
set { this.m_PathEncryptionFolder = value; }
}
public string PathHeaderFolder
{
get { return this.m_PathHeaderFolder; }
private set { this.m_PathHeaderFolder = value; }
}
public string PathDataLogFolder
{
get { return this.m_PathDataLogFolder; }
set { this.m_PathDataLogFolder = value; }
}
public static string PathBinFolder
{
get { return m_PathBinFolder; }
private set { m_PathBinFolder = value; }
}
public DataStore.EquipmentStatus EquipmentStatus public DataStore.EquipmentStatus EquipmentStatus
{ {
@ -293,6 +347,16 @@ namespace INT89DB_26.Forms
this.PathSystemFileFolder2 = this.PathLaunchFolder + "SystemFile2\\"; this.PathSystemFileFolder2 = this.PathLaunchFolder + "SystemFile2\\";
this.PathDataBackupFolder = this.PathLaunchFolder + "DataBackup\\"; this.PathDataBackupFolder = this.PathLaunchFolder + "DataBackup\\";
this.PathProgramSaveFolder = this.PathLaunchFolder + "Program\\"; this.PathProgramSaveFolder = this.PathLaunchFolder + "Program\\";
this.PathDataStatisticsFolder = this.PathLaunchFolder + "DataStatistics\\";
this.PathDataFolder = this.PathLaunchFolder + "Data\\";
this.PathDataHistoryFolder = this.PathDataFolder + "History\\";
this.PathDataInspectionFolder = this.PathDataFolder + "Inspection\\";
this.PathDataOthersFolder = this.PathDataFolder + "Others\\";
this.PathEncryptionFolder = this.PathLaunchFolder + "Encryption\\";
this.PathHeaderFolder = this.PathLaunchFolder + "Header\\";
this.PathDataLogFolder = this.PathLaunchFolder + "Log\\";
PathBinFolder = this.PathLaunchFolder + "Bin\\";
this.EquipmentStatus = DataStore.EquipmentStatus.Stop; this.EquipmentStatus = DataStore.EquipmentStatus.Stop;
this.BufferSmartUart = 1000000; // 1MB this.BufferSmartUart = 1000000; // 1MB
this.ColorLogOff = Color.Red; this.ColorLogOff = Color.Red;
@ -1125,19 +1189,19 @@ namespace INT89DB_26.Forms
#endregion #endregion
// CH3 // CH3
if (this.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f1_STD1) // OPT1 if (this.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f1_STD1) // OPT1
this.SerialPort3_Write(this.Protocol_STD1_NotStxEtx(this.SystemConfig, this.CollectionWeightData[0], 1)); this.SerialPort3_Write(this.Protocol_STD1_NotStxEtx(this.SystemConfig, this.CollectionWeightData[0], 1));
else if (this.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f2_STD2) // OPT2 else if (this.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f2_STD2) // OPT2
this.SerialPort3_Write(this.Protocol_STD2_NotStxEtx(this.SystemConfig, this.CollectionWeightData[0], 1)); this.SerialPort3_Write(this.Protocol_STD2_NotStxEtx(this.SystemConfig, this.CollectionWeightData[0], 1));
// Ethernet // Ethernet
if (this.SystemConfig.IsEthernetEnable == true) if (this.SystemConfig.IsEthernetEnable == true)
{ {
if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f1_STD1) // OPT1 if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f1_STD1) // OPT1
this.EthernetWrite(this.Protocol_STD1(this.SystemConfig, this.CollectionWeightData[0], 1)); this.EthernetWrite(this.Protocol_STD1(this.SystemConfig, this.CollectionWeightData[0], 1));
else if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f2_STD2) // OPT2 else if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f2_STD2) // OPT2
this.EthernetWrite(this.Protocol_STD2(this.SystemConfig, this.CollectionWeightData[0], 1)); this.EthernetWrite(this.Protocol_STD2(this.SystemConfig, this.CollectionWeightData[0], 1));
else if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f99_Modbus) // Modbus else if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f99_Modbus) // Modbus
{ {
this.Update30000ModbusData(0); this.Update30000ModbusData(0);
if (this.SystemConfig.EthernetOperationMode == 2) // Client if (this.SystemConfig.EthernetOperationMode == 2) // Client
@ -1185,19 +1249,19 @@ namespace INT89DB_26.Forms
#endregion #endregion
// CH3 // CH3
if (this.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f1_STD1) // OPT1 if (this.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f1_STD1) // OPT1
this.SerialPort3_Write(this.Protocol_STD1_NotStxEtx(this.SystemConfig, this.CollectionWeightData[1], 2)); this.SerialPort3_Write(this.Protocol_STD1_NotStxEtx(this.SystemConfig, this.CollectionWeightData[1], 2));
else if (this.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f2_STD2) // OPT2 else if (this.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f2_STD2) // OPT2
this.SerialPort3_Write(this.Protocol_STD2_NotStxEtx(this.SystemConfig, this.CollectionWeightData[1], 2)); this.SerialPort3_Write(this.Protocol_STD2_NotStxEtx(this.SystemConfig, this.CollectionWeightData[1], 2));
// Ethernet // Ethernet
if (this.SystemConfig.IsEthernetEnable == true) if (this.SystemConfig.IsEthernetEnable == true)
{ {
if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f1_STD1) // OPT1 if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f1_STD1) // OPT1
this.EthernetWrite(this.Protocol_STD1(this.SystemConfig, this.CollectionWeightData[1], 2)); this.EthernetWrite(this.Protocol_STD1(this.SystemConfig, this.CollectionWeightData[1], 2));
else if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f2_STD2) // OPT2 else if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f2_STD2) // OPT2
this.EthernetWrite(this.Protocol_STD2(this.SystemConfig, this.CollectionWeightData[1], 2)); this.EthernetWrite(this.Protocol_STD2(this.SystemConfig, this.CollectionWeightData[1], 2));
else if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f99_Modbus) // Modbus else if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f99_Modbus) // Modbus
{ {
this.Update30000ModbusData(1); this.Update30000ModbusData(1);
if (this.SystemConfig.EthernetOperationMode == 2) // Client if (this.SystemConfig.EthernetOperationMode == 2) // Client
@ -1245,19 +1309,19 @@ namespace INT89DB_26.Forms
#endregion #endregion
// CH3 // CH3
if (this.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f1_STD1) // OPT1 if (this.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f1_STD1) // OPT1
this.SerialPort3_Write(this.Protocol_STD1_NotStxEtx(this.SystemConfig, this.CollectionWeightData[2], 3)); this.SerialPort3_Write(this.Protocol_STD1_NotStxEtx(this.SystemConfig, this.CollectionWeightData[2], 3));
else if (this.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f2_STD2) // OPT2 else if (this.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f2_STD2) // OPT2
this.SerialPort3_Write(this.Protocol_STD2_NotStxEtx(this.SystemConfig, this.CollectionWeightData[2], 3)); this.SerialPort3_Write(this.Protocol_STD2_NotStxEtx(this.SystemConfig, this.CollectionWeightData[2], 3));
// Ethernet // Ethernet
if (this.SystemConfig.IsEthernetEnable == true) if (this.SystemConfig.IsEthernetEnable == true)
{ {
if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f1_STD1) // OPT1 if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f1_STD1) // OPT1
this.EthernetWrite(this.Protocol_STD1(this.SystemConfig, this.CollectionWeightData[2], 3)); this.EthernetWrite(this.Protocol_STD1(this.SystemConfig, this.CollectionWeightData[2], 3));
else if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f2_STD2) // OPT2 else if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f2_STD2) // OPT2
this.EthernetWrite(this.Protocol_STD2(this.SystemConfig, this.CollectionWeightData[2], 3)); this.EthernetWrite(this.Protocol_STD2(this.SystemConfig, this.CollectionWeightData[2], 3));
else if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f99_Modbus) // Modbus else if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f99_Modbus) // Modbus
{ {
this.Update30000ModbusData(2); this.Update30000ModbusData(2);
if (this.SystemConfig.EthernetOperationMode == 2) // Client if (this.SystemConfig.EthernetOperationMode == 2) // Client
@ -1305,19 +1369,19 @@ namespace INT89DB_26.Forms
#endregion #endregion
// CH3 // CH3
if (this.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f1_STD1) // OPT1 if (this.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f1_STD1) // OPT1
this.SerialPort3_Write(this.Protocol_STD1_NotStxEtx(this.SystemConfig, this.CollectionWeightData[3], 4)); this.SerialPort3_Write(this.Protocol_STD1_NotStxEtx(this.SystemConfig, this.CollectionWeightData[3], 4));
else if (this.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f2_STD2) // OPT2 else if (this.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f2_STD2) // OPT2
this.SerialPort3_Write(this.Protocol_STD2_NotStxEtx(this.SystemConfig, this.CollectionWeightData[3], 4)); this.SerialPort3_Write(this.Protocol_STD2_NotStxEtx(this.SystemConfig, this.CollectionWeightData[3], 4));
// Ethernet // Ethernet
if (this.SystemConfig.IsEthernetEnable == true) if (this.SystemConfig.IsEthernetEnable == true)
{ {
if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f1_STD1) // OPT1 if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f1_STD1) // OPT1
this.EthernetWrite(this.Protocol_STD1(this.SystemConfig, this.CollectionWeightData[3], 4)); this.EthernetWrite(this.Protocol_STD1(this.SystemConfig, this.CollectionWeightData[3], 4));
else if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f2_STD2) // OPT2 else if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f2_STD2) // OPT2
this.EthernetWrite(this.Protocol_STD2(this.SystemConfig, this.CollectionWeightData[3], 4)); this.EthernetWrite(this.Protocol_STD2(this.SystemConfig, this.CollectionWeightData[3], 4));
else if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f99_Modbus) // Modbus else if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f99_Modbus) // Modbus
{ {
this.Update30000ModbusData(3); this.Update30000ModbusData(3);
if (this.SystemConfig.EthernetOperationMode == 2) // Client if (this.SystemConfig.EthernetOperationMode == 2) // Client
@ -1365,19 +1429,19 @@ namespace INT89DB_26.Forms
#endregion #endregion
// CH3 // CH3
if (this.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f1_STD1) // OPT1 if (this.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f1_STD1) // OPT1
this.SerialPort3_Write(this.Protocol_STD1_NotStxEtx(this.SystemConfig, this.CollectionWeightData[4], 5)); this.SerialPort3_Write(this.Protocol_STD1_NotStxEtx(this.SystemConfig, this.CollectionWeightData[4], 5));
else if (this.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f2_STD2) // OPT2 else if (this.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f2_STD2) // OPT2
this.SerialPort3_Write(this.Protocol_STD2_NotStxEtx(this.SystemConfig, this.CollectionWeightData[4], 5)); this.SerialPort3_Write(this.Protocol_STD2_NotStxEtx(this.SystemConfig, this.CollectionWeightData[4], 5));
// Ethernet // Ethernet
if (this.SystemConfig.IsEthernetEnable == true) if (this.SystemConfig.IsEthernetEnable == true)
{ {
if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f1_STD1) // OPT1 if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f1_STD1) // OPT1
this.EthernetWrite(this.Protocol_STD1(this.SystemConfig, this.CollectionWeightData[4], 5)); this.EthernetWrite(this.Protocol_STD1(this.SystemConfig, this.CollectionWeightData[4], 5));
else if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f2_STD2) // OPT2 else if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f2_STD2) // OPT2
this.EthernetWrite(this.Protocol_STD2(this.SystemConfig, this.CollectionWeightData[4], 5)); this.EthernetWrite(this.Protocol_STD2(this.SystemConfig, this.CollectionWeightData[4], 5));
else if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f99_Modbus) // Modbus else if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f99_Modbus) // Modbus
{ {
this.Update30000ModbusData(4); this.Update30000ModbusData(4);
if (this.SystemConfig.EthernetOperationMode == 2) // Client if (this.SystemConfig.EthernetOperationMode == 2) // Client
@ -1425,19 +1489,19 @@ namespace INT89DB_26.Forms
#endregion #endregion
// CH3 // CH3
if (this.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f1_STD1) // OPT1 if (this.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f1_STD1) // OPT1
this.SerialPort3_Write(this.Protocol_STD1_NotStxEtx(this.SystemConfig, this.CollectionWeightData[4], 5)); this.SerialPort3_Write(this.Protocol_STD1_NotStxEtx(this.SystemConfig, this.CollectionWeightData[4], 5));
else if (this.SystemConfig.Serial3Mode == (int)DataStore.CommunicationMode.f2_STD2) // OPT2 else if (this.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f2_STD2) // OPT2
this.SerialPort3_Write(this.Protocol_STD2_NotStxEtx(this.SystemConfig, this.CollectionWeightData[4], 5)); this.SerialPort3_Write(this.Protocol_STD2_NotStxEtx(this.SystemConfig, this.CollectionWeightData[4], 5));
// Ethernet // Ethernet
if (this.SystemConfig.IsEthernetEnable == true) if (this.SystemConfig.IsEthernetEnable == true)
{ {
if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f1_STD1) // OPT1 if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f1_STD1) // OPT1
this.EthernetWrite(this.Protocol_STD1(this.SystemConfig, this.CollectionWeightData[4], 5)); this.EthernetWrite(this.Protocol_STD1(this.SystemConfig, this.CollectionWeightData[4], 5));
else if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f2_STD2) // OPT2 else if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f2_STD2) // OPT2
this.EthernetWrite(this.Protocol_STD2(this.SystemConfig, this.CollectionWeightData[4], 5)); this.EthernetWrite(this.Protocol_STD2(this.SystemConfig, this.CollectionWeightData[4], 5));
else if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f99_Modbus) // Modbus else if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f99_Modbus) // Modbus
{ {
this.Update30000ModbusData(5); this.Update30000ModbusData(5);
if (this.SystemConfig.EthernetOperationMode == 2) // Client if (this.SystemConfig.EthernetOperationMode == 2) // Client
@ -1492,7 +1556,7 @@ namespace INT89DB_26.Forms
} }
#endregion #endregion
if (this.SystemConfig.EthernetMode == (int)DataStore.CommunicationMode.f99_Modbus) // Modbus if (this.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f99_Modbus) // Modbus
{ {
for (int i = 0; i < this.SystemConfig.EquipmentColumns; i++) for (int i = 0; i < this.SystemConfig.EquipmentColumns; i++)
this.Update30000ModbusData(i); this.Update30000ModbusData(i);
@ -4381,7 +4445,7 @@ namespace INT89DB_26.Forms
return ret; return ret;
} }
private void SerialPort3_FbBoardBooting() public void SerialPort3_FbBoardBooting()
{ {
string value = ""; string value = "";
@ -4788,6 +4852,9 @@ namespace INT89DB_26.Forms
} }
private void Update30000UpdateData(int index) private void Update30000UpdateData(int index)
{ {
if (this.SystemConfig.IsModbus == false)
return;
if (this.CollectionWeightData[index].UpdateCount > 65535) if (this.CollectionWeightData[index].UpdateCount > 65535)
this.CollectionWeightData[index].UpdateCount = 0; this.CollectionWeightData[index].UpdateCount = 0;
else else
@ -4797,6 +4864,9 @@ namespace INT89DB_26.Forms
} }
public void Update30000ModbusData() public void Update30000ModbusData()
{ {
if (this.SystemConfig.IsModbus == false)
return;
for (int i = 0; i < this.SystemConfig.EquipmentColumns; i++) for (int i = 0; i < this.SystemConfig.EquipmentColumns; i++)
this.Update30000UpdateData(i); this.Update30000UpdateData(i);
@ -4815,10 +4885,15 @@ namespace INT89DB_26.Forms
} }
public void Update30000ModbusData(int index) public void Update30000ModbusData(int index)
{ {
if (this.SystemConfig.IsModbus == false)
return;
double weightData = Helper.StringToWeight(this.CollectionWeightData[index].WeightString, this.SystemConfig.DecimalPlaces);
this.Update30000UpdateData(index); this.Update30000UpdateData(index);
this.Current30000ModbusData.ModbusLaneData[index].Grade = this.Grade(this.CollectionWeightData[index].JudgmentStatus); this.Current30000ModbusData.ModbusLaneData[index].Grade = this.Grade(this.CollectionWeightData[index].JudgmentStatus);
this.Current30000ModbusData.ModbusLaneData[index].WeightDouble = this.CollectionWeightData[index].Weight; this.Current30000ModbusData.ModbusLaneData[index].WeightDouble = weightData;
this.Current30000ModbusData.ModbusLaneData[index].UnderCount = (UInt32)this.CollectionWeightData[index].UnderCount; this.Current30000ModbusData.ModbusLaneData[index].UnderCount = (UInt32)this.CollectionWeightData[index].UnderCount;
this.Current30000ModbusData.ModbusLaneData[index].PassCount = (UInt32)this.CollectionWeightData[index].PassCount; this.Current30000ModbusData.ModbusLaneData[index].PassCount = (UInt32)this.CollectionWeightData[index].PassCount;
this.Current30000ModbusData.ModbusLaneData[index].OverCount = (UInt32)this.CollectionWeightData[index].OverCount; this.Current30000ModbusData.ModbusLaneData[index].OverCount = (UInt32)this.CollectionWeightData[index].OverCount;
@ -5267,8 +5342,8 @@ namespace INT89DB_26.Forms
#region StructItem1 #region StructItem1
structItem1.IsDataBackup = this.SystemConfig.IsDataBackup; structItem1.IsDataBackup = this.SystemConfig.IsDataBackup;
structItem1.DummyBool5 = false; structItem1.DummyBool5 = false;
structItem1.DummyBool6 = false; structItem1.IsPart11 = this.SystemConfig.IsPart11;
structItem1.DummyBool7 = false; structItem1.IsModbus = this.SystemConfig.IsModbus;
structItem1.IsFeedbackBoard = this.SystemConfig.IsFeedbackBoard; structItem1.IsFeedbackBoard = this.SystemConfig.IsFeedbackBoard;
structItem1.IsFeedback = this.SystemConfig.IsFeedback; structItem1.IsFeedback = this.SystemConfig.IsFeedback;
structItem1.IsLogin = this.SystemConfig.IsLogin; structItem1.IsLogin = this.SystemConfig.IsLogin;
@ -5332,7 +5407,7 @@ namespace INT89DB_26.Forms
structItem2.FeedbackCorrectionRate = this.SystemConfig.FeedbackCorrectionRate; structItem2.FeedbackCorrectionRate = this.SystemConfig.FeedbackCorrectionRate;
structItem2.FeedbackPulseWidth = this.SystemConfig.FeedbackPulseWidth; structItem2.FeedbackPulseWidth = this.SystemConfig.FeedbackPulseWidth;
structItem2.DummyInt3 = 0; structItem2.StoragePeriod = this.SystemConfig.StoragePeriod;
structItem2.DummyInt4 = 0; structItem2.DummyInt4 = 0;
structItem2.DummyInt5 = 0; structItem2.DummyInt5 = 0;
structItem2.DummyInt6 = 0; structItem2.DummyInt6 = 0;
@ -5390,8 +5465,8 @@ namespace INT89DB_26.Forms
#region StructItem1 #region StructItem1
structItem1.IsDataBackup = item.IsDataBackup; structItem1.IsDataBackup = item.IsDataBackup;
structItem1.DummyBool5 = false; structItem1.DummyBool5 = false;
structItem1.DummyBool6 = false; structItem1.IsPart11 = item.IsPart11;
structItem1.DummyBool7 = false; structItem1.IsModbus = item.IsModbus;
structItem1.IsFeedbackBoard = item.IsFeedbackBoard; structItem1.IsFeedbackBoard = item.IsFeedbackBoard;
structItem1.IsFeedback = item.IsFeedback; structItem1.IsFeedback = item.IsFeedback;
structItem1.IsLogin = item.IsLogin; structItem1.IsLogin = item.IsLogin;
@ -5455,7 +5530,7 @@ namespace INT89DB_26.Forms
structItem2.FeedbackCorrectionRate = item.FeedbackCorrectionRate; structItem2.FeedbackCorrectionRate = item.FeedbackCorrectionRate;
structItem2.FeedbackPulseWidth = item.FeedbackPulseWidth; structItem2.FeedbackPulseWidth = item.FeedbackPulseWidth;
structItem2.DummyInt3 = 0; structItem2.StoragePeriod = item.StoragePeriod;
structItem2.DummyInt4 = 0; structItem2.DummyInt4 = 0;
structItem2.DummyInt5 = 0; structItem2.DummyInt5 = 0;
structItem2.DummyInt6 = 0; structItem2.DummyInt6 = 0;
@ -5517,6 +5592,8 @@ namespace INT89DB_26.Forms
structItem1 = (StructSystemConfigurationItem1)this.smartFileIO.ReadStructure(0, typeof(StructSystemConfigurationItem1)); structItem1 = (StructSystemConfigurationItem1)this.smartFileIO.ReadStructure(0, typeof(StructSystemConfigurationItem1));
#region StructItem1 #region StructItem1
this.SystemConfig.IsPart11 = structItem1.IsPart11;
this.SystemConfig.IsModbus = structItem1.IsModbus;
this.SystemConfig.IsFeedback = structItem1.IsFeedback; this.SystemConfig.IsFeedback = structItem1.IsFeedback;
this.SystemConfig.IsDataBackup = structItem1.IsDataBackup; this.SystemConfig.IsDataBackup = structItem1.IsDataBackup;
this.SystemConfig.IsWeightViewForward = structItem1.IsWeightViewForward; this.SystemConfig.IsWeightViewForward = structItem1.IsWeightViewForward;
@ -5577,6 +5654,7 @@ namespace INT89DB_26.Forms
#region StructItem2 #region StructItem2
this.SystemConfig.FeedbackCorrectionRate = structItem2.FeedbackCorrectionRate; this.SystemConfig.FeedbackCorrectionRate = structItem2.FeedbackCorrectionRate;
this.SystemConfig.FeedbackPulseWidth = structItem2.FeedbackPulseWidth; this.SystemConfig.FeedbackPulseWidth = structItem2.FeedbackPulseWidth;
this.SystemConfig.StoragePeriod = structItem2.StoragePeriod;
#endregion #endregion
} }
catch catch
@ -6262,13 +6340,13 @@ namespace INT89DB_26.Forms
feedbackWeight = averageWeight - passRange; feedbackWeight = averageWeight - passRange;
this.CollectionFeedbackStatus[lane - 1].FeedbackWeight = feedbackWeight; this.CollectionFeedbackStatus[lane - 1].FeedbackWeight = feedbackWeight;
this.CollectionFeedbackStatus[lane - 1].ClearData();
this.CollectionFeedbackStatus[lane - 1].IsFbCalComplete = true;
if (this.CollectionFeedbackStatus[lane - 1].UpdateFeedbackData > 65535) if (this.CollectionFeedbackStatus[lane - 1].UpdateFeedbackData > 65535)
this.CollectionFeedbackStatus[lane - 1].UpdateFeedbackData = 0; this.CollectionFeedbackStatus[lane - 1].UpdateFeedbackData = 0;
else else
this.CollectionFeedbackStatus[lane - 1].UpdateFeedbackData++; this.CollectionFeedbackStatus[lane - 1].UpdateFeedbackData++;
this.CollectionFeedbackStatus[lane - 1].ClearData();
this.CollectionFeedbackStatus[lane - 1].IsFbCalComplete = true;
if (this.SystemConfig.IsFeedbackBoard == true) if (this.SystemConfig.IsFeedbackBoard == true)
this.SerialPort3_Write(this.Protocol_STD3_NotStxEtx(this.SystemConfig, this.CollectionFeedbackStatus[lane - 1], lane)); this.SerialPort3_Write(this.Protocol_STD3_NotStxEtx(this.SystemConfig, this.CollectionFeedbackStatus[lane - 1], lane));
@ -6311,7 +6389,7 @@ namespace INT89DB_26.Forms
structItem.ID = "L1"; structItem.ID = "L1";
structItem.Password = "1111"; structItem.Password = "1111";
structItem.Group = DataStore.UserGroup.Level1Operator; structItem.Group = DataStore.UserGroup.Level1;
structItem.Dummy1 = ""; structItem.Dummy1 = "";
structItem.Dummy2 = ""; structItem.Dummy2 = "";
@ -6428,7 +6506,7 @@ namespace INT89DB_26.Forms
structItem.ID = "L2"; structItem.ID = "L2";
structItem.Password = "2222"; structItem.Password = "2222";
structItem.Group = DataStore.UserGroup.Level2Engineer; structItem.Group = DataStore.UserGroup.Level2;
structItem.Dummy1 = ""; structItem.Dummy1 = "";
structItem.Dummy2 = ""; structItem.Dummy2 = "";
@ -6545,7 +6623,7 @@ namespace INT89DB_26.Forms
structItem.ID = "L3"; structItem.ID = "L3";
structItem.Password = "3333"; structItem.Password = "3333";
structItem.Group = DataStore.UserGroup.Level3Manager; structItem.Group = DataStore.UserGroup.Level3;
structItem.Dummy1 = ""; structItem.Dummy1 = "";
structItem.Dummy2 = ""; structItem.Dummy2 = "";
@ -6842,6 +6920,376 @@ namespace INT89DB_26.Forms
} }
#endregion #endregion
#region Backup
public List<string> GetSeletedNodeList(TreeView tree)
{
int yearCNT, monthCNT, dayCNT;
List<string> listSelectedFile = new List<string>();
yearCNT = tree.Nodes.Count;
if (yearCNT != 0)
{
for (int i = 0; i < yearCNT; i++)
{
monthCNT = tree.Nodes[i].Nodes.Count;
if (monthCNT != 0)
{
for (int j = 0; j < monthCNT; j++)
{
dayCNT = tree.Nodes[i].Nodes[j].Nodes.Count;
if (dayCNT != 0)
{
for (int k = 0; k < dayCNT; k++)
{
//if (tree.Nodes[i].Nodes[j].Nodes[k].Checked == true)
//{
//listSelectedFile.Add(tree.Nodes[i].Nodes[j].Nodes[k].Text);
listSelectedFile.Add(string.Format("{0}\\{1}\\{2}", tree.Nodes[i].Text, tree.Nodes[i].Nodes[j].Text, tree.Nodes[i].Nodes[j].Nodes[k].Text));
//}
}
}
}
}
}
}
return listSelectedFile;
}
private void DeleteLogFile(string path, DataStore.E_DataType type)
{
string dataFolderPath = "";
switch (type)
{
case DataStore.E_DataType.None:
break;
case DataStore.E_DataType.History:
dataFolderPath = this.PathDataHistoryFolder;
break;
case DataStore.E_DataType.Inspection:
dataFolderPath = this.PathDataInspectionFolder;
break;
case DataStore.E_DataType.Others:
dataFolderPath = this.PathDataOthersFolder;
break;
default:
break;
}
foreach (string Folder in Directory.GetDirectories(path))
{
this.DeleteLogFile(Folder, type); //재귀함수 호출
if (Directory.GetDirectories(Folder).Count() == 0 && Directory.GetFiles(Folder).Count() == 0 && Folder != dataFolderPath)
Directory.Delete(Folder, true);
}
foreach (string file in Directory.GetFiles(path))
{
FileInfo fi = new FileInfo(file);
if (DateTime.ParseExact(fi.Name.Substring(1, 8), "yyyyMMdd", null) < DateTime.Now.AddMonths(-1 * this.SystemConfig.StoragePeriod))
fi.Delete();
}
}
#endregion
#region Tracking Inspection data
private void GetTrackingInspectionFolderPath(ref string folder, ref string fileName)
{
DateTime time = DateTime.Now;
if (this.SystemConfig.IsPart11 == false)
{
folder = this.PathDataBackupFolder;
fileName = string.Format("{0:yyyyMMdd}-{1}.csv", time, this.SystemConfig.ProductNumber);
}
else
{
folder = string.Format("{0}{1}\\{2}\\", this.PathDataInspectionFolder, time.Year, time.Month);
fileName = string.Format("I{0:yyyyMMdd}-{1}.csv", time, this.SystemConfig.ProductNumber);
}
}
private void TrackingInspectionData(Collection<WeightData> items)
{
bool fileCheck = false, directoryCheck = false;
string fullFilePath = "", folderPath = "", fileName = "";
StreamWriter sw;
if (this.SystemConfig.IsDataBackup == true)
{
this.GetTrackingInspectionFolderPath(ref folderPath, ref fileName);
fullFilePath = string.Format("{0}{1}", folderPath, fileName);
DirectoryInfo di = new DirectoryInfo(folderPath);
directoryCheck = di.Exists;
// 폴더 체크
if (directoryCheck == false)
di.Create();
FileInfo fileInfo = new FileInfo(fullFilePath);
fileCheck = fileInfo.Exists;
sw = new StreamWriter(fullFilePath, true, Encoding.UTF8);
if (fileCheck == false)
{
this.RemoveInspectionDataFile();
sw.Write("Date");
sw.Write(",");
sw.Write("Time");
sw.Write(",");
sw.Write("P_No");
sw.Write(",");
sw.Write("Name");
sw.Write(",");
sw.Write("Lot");
sw.Write(",");
sw.Write("UnderRange");
sw.Write(",");
sw.Write("PassRange");
sw.Write(",");
sw.Write("OverRange");
sw.Write(",");
sw.Write("TareRange");
for (int i = 0; i < this.SystemConfig.EquipmentColumns; i++)
{
sw.Write(",");
sw.Write(string.Format("#{0}_Weight", i + 1));
sw.Write(",");
sw.Write(string.Format("#{0}_Grade", i + 1));
}
sw.WriteLine();
}
sw.Write(string.Format("{0:yyyy-MM-dd}", DateTime.Now));
sw.Write(",");
sw.Write(string.Format("{0:HH:mm:ss}", DateTime.Now));
sw.Write(",");
sw.Write(this.CurrentProductItem.Number);
sw.Write(",");
sw.Write(this.CurrentProductItem.Name);
sw.Write(",");
sw.Write(this.CurrentProductItem.LotNo);
sw.Write(",");
sw.Write(Helper.StringToDecimalPlaces(this.CurrentProductItem.UnderRange, this.SystemConfig.DecimalPlaces));
sw.Write(",");
sw.Write(Helper.StringToDecimalPlaces(this.CurrentProductItem.PassRange, this.SystemConfig.DecimalPlaces));
sw.Write(",");
sw.Write(Helper.StringToDecimalPlaces(this.CurrentProductItem.OverRange, this.SystemConfig.DecimalPlaces));
sw.Write(",");
sw.Write(Helper.StringToDecimalPlaces(this.CurrentProductItem.TareRange, this.SystemConfig.DecimalPlaces));
for (int i = 0; i < this.SystemConfig.EquipmentColumns; i++)
{
sw.Write(",");
sw.Write(Helper.DoubleToString(items[i].Weight, this.SystemConfig.DecimalPlaces));
sw.Write(",");
sw.Write(items[i].JudgmentStatus);
}
sw.WriteLine();
sw.Close();
}
}
private void RemoveInspectionDataFile()
{
bool directoryCheck = false;
try
{
if (this.SystemConfig.IsPart11 == true)
this.DeleteLogFile(this.PathDataInspectionFolder, DataStore.E_DataType.Inspection);
else
{
string dday = string.Format("{0:yyyyMMdd}", DateTime.Now.AddDays(-180)) + ".csv";
DirectoryInfo dir = new DirectoryInfo(this.PathDataInspectionFolder);
directoryCheck = dir.Exists;
// 폴더 체크
if (directoryCheck == false)
dir.Create();
FileInfo[] files = dir.GetFiles();
foreach (FileInfo subfile in files)
{
if (subfile.Name.StartsWith("20")) // 날짜 비교하여 180일 지난화일은 삭제함
{
if (subfile.Name.CompareTo(dday) < 0)
{
subfile.Delete();
}
}
}
}
}
catch
{
}
}
#endregion
#region Tracking History data
public void SetTrackingHistoryData(DataStore.E_TrackingOperation type, string detail)
{
if (this.SystemConfig.IsPart11 == false)
return;
HistoryData data = new HistoryData();
data.Type = "Operation";
data.Time = DateTime.Now;
data.LoginID = this.SystemConfig.CurrentUser.ID;
data.Event = type.ToString();
data.Detail = detail;
data.BeforeData = "";
data.AfterData = "";
this.TrackingHistoryData(data);
}
public void SetTrackingHistoryData(DataStore.E_TrackingOperation eventType, string detail, string loginID)
{
if (this.SystemConfig.IsPart11 == false)
return;
HistoryData data = new HistoryData();
data.Type = "Operation";
data.Time = DateTime.Now;
data.LoginID = loginID;
data.Event = eventType.ToString();
data.Detail = detail;
data.BeforeData = "";
data.AfterData = "";
this.TrackingHistoryData(data);
}
public void SetTrackingHistoryData(DataStore.TrackingAlarm type, string detail)
{
HistoryData data = new HistoryData();
data.Type = "Alarm";
data.Time = DateTime.Now;
data.LoginID = this.SystemConfig.CurrentUser.ID;
data.Event = type.ToString();
data.Detail = detail;
data.BeforeData = "";
data.AfterData = "";
this.TrackingHistoryData(data);
}
public void SetTrackingHistoryData(DataStore.TrackingParameter type, string detail, string before, string after)
{
if (before == after)
return;
HistoryData data = new HistoryData();
data.Type = "Parameter";
data.Time = DateTime.Now;
data.LoginID = this.SystemConfig.CurrentUser.ID;
data.Event = type.ToString();
data.Detail = detail;
data.BeforeData = before;
data.AfterData = after;
this.TrackingHistoryData(data);
}
private void TrackingHistoryData(HistoryData data)
{
bool fileCheck = false, directoryCheck = false;
string fullFilePath = "", folderPath = "", fileName = "";
StreamWriter sw;
DateTime time = DateTime.Now;
if (this.SystemConfig.IsPart11 == true)
{
folderPath = string.Format("{0}{1}\\{2}\\", this.PathDataHistoryFolder, time.Year, time.Month);
fileName = string.Format("H{0:yyyyMMdd}.csv", time);
fullFilePath = string.Format("{0}{1}", folderPath, fileName);
DirectoryInfo di = new DirectoryInfo(folderPath);
directoryCheck = di.Exists;
// 폴더 체크
if (directoryCheck == false)
di.Create();
FileInfo fileInfo = new FileInfo(fullFilePath);
fileCheck = fileInfo.Exists;
sw = new StreamWriter(fullFilePath, true, Encoding.UTF8);
if (fileCheck == false)
{
this.RemoveHistoryDataFile();
sw.Write("Date");
sw.Write(",");
sw.Write("Time");
sw.Write(",");
sw.Write("LoginID");
sw.Write(",");
sw.Write("Event");
sw.Write(",");
sw.Write("Detail");
sw.Write(",");
sw.Write("Before");
sw.Write(",");
sw.Write("After");
sw.Write(",");
sw.Write("Type");
sw.WriteLine();
}
sw.Write(string.Format("{0:yyyy-MM-dd}", DateTime.Now));
sw.Write(",");
sw.Write(string.Format("{0:HH:mm:ss}", DateTime.Now));
sw.Write(",");
sw.Write(data.LoginID);
sw.Write(",");
sw.Write(data.Event.ToString());
sw.Write(",");
sw.Write(data.Detail);
sw.Write(",");
sw.Write(data.BeforeData);
sw.Write(",");
sw.Write(data.AfterData);
sw.Write(",");
sw.Write(data.Type);
sw.WriteLine();
sw.Close();
}
}
private void RemoveHistoryDataFile()
{
try
{
this.DeleteLogFile(this.PathDataHistoryFolder, DataStore.E_DataType.History);
}
catch
{
}
}
#endregion
#region Tracking Others data
private void RemoveOthersDataFile()
{
try
{
this.DeleteLogFile(this.PathDataOthersFolder, DataStore.E_DataType.Others);
}
catch
{
}
}
#endregion
#endregion #endregion
#region Override Member #region Override Member
@ -6955,7 +7403,7 @@ namespace INT89DB_26.Forms
switch (this.SystemConfig.EthernetMode) switch (this.SystemConfig.EthernetMode)
{ {
case (int)DataStore.CommunicationMode.f99_Modbus: case (int)DataStore.E_CommMode.f99_Modbus:
#region Modbus TCP #region Modbus TCP
if (this.smartTCPMultiServer.ClientInfoList != null) if (this.smartTCPMultiServer.ClientInfoList != null)
{ {

View File

@ -320,7 +320,7 @@ namespace INT89DB_26.Forms
this.labelUserID.Visible = false; this.labelUserID.Visible = false;
this.labelUserLevel.Visible = false; this.labelUserLevel.Visible = false;
this.ParentForm.SystemConfig.CurrentUser.Group = DataStore.UserGroup.Level3Manager; this.ParentForm.SystemConfig.CurrentUser.Group = DataStore.UserGroup.Level3;
} }
// Ethernet // Ethernet
@ -366,7 +366,7 @@ namespace INT89DB_26.Forms
switch (user.Group) switch (user.Group)
{ {
case DataStore.UserGroup.Level1Operator: case DataStore.UserGroup.Level1:
id = user.ID; id = user.ID;
if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese) if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese)
group = "级别1"; group = "级别1";
@ -391,7 +391,7 @@ namespace INT89DB_26.Forms
colorButtonText = this.ColorButtonAccessFalse; colorButtonText = this.ColorButtonAccessFalse;
break; break;
case DataStore.UserGroup.Level2Engineer: case DataStore.UserGroup.Level2:
id = user.ID; id = user.ID;
if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese) if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese)
group = "级别2"; group = "级别2";
@ -416,7 +416,7 @@ namespace INT89DB_26.Forms
colorButtonText = this.ColorButtonAccessTrue; colorButtonText = this.ColorButtonAccessTrue;
break; break;
case DataStore.UserGroup.Level3Manager: case DataStore.UserGroup.Level3:
id = user.ID; id = user.ID;
if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese) if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese)
group = "级别3"; group = "级别3";
@ -441,7 +441,7 @@ namespace INT89DB_26.Forms
colorButtonText = this.ColorButtonAccessTrue; colorButtonText = this.ColorButtonAccessTrue;
break; break;
case DataStore.UserGroup.Level4Developer: case DataStore.UserGroup.Developer:
id = user.ID; id = user.ID;
if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese) if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese)
group = "级别4"; group = "级别4";
@ -466,7 +466,7 @@ namespace INT89DB_26.Forms
colorButtonText = this.ColorButtonAccessTrue; colorButtonText = this.ColorButtonAccessTrue;
break; break;
case DataStore.UserGroup.LogOff: case DataStore.UserGroup.LogOut:
id = ""; id = "";
if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese) if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese)
group = "关闭"; group = "关闭";
@ -1273,6 +1273,18 @@ namespace INT89DB_26.Forms
} }
else else
{ {
if (this.ParentForm.SystemConfig.IsFeedback == true)
{
if (myKeyPad.doubleValue < Helper.StringToWeight(this.ParentForm.CurrentFeedbackItem.LowLimit, this.ParentForm.SystemConfig.DecimalPlaces)
|| (myKeyPad.doubleValue > Helper.StringToWeight(this.ParentForm.CurrentFeedbackItem.HighLimit, this.ParentForm.SystemConfig.DecimalPlaces)))
{
// 입력범위를 확인하세요
DialogFormMessage myMsg = new DialogFormMessage(1, this.ParentForm.SystemConfig.Language, "");
myMsg.ShowDialog();
return;
}
}
this.UpdatePassRangeChange(myKeyPad.StringValue); this.UpdatePassRangeChange(myKeyPad.StringValue);
this.ParentForm.Update30000ModbusData(); this.ParentForm.Update30000ModbusData();
@ -1349,7 +1361,7 @@ namespace INT89DB_26.Forms
} }
private void buttonUser_Click(object sender, EventArgs e) private void buttonUser_Click(object sender, EventArgs e)
{ {
if (this.ParentForm.SystemConfig.CurrentUser.Group == DataStore.UserGroup.LogOff) if (this.ParentForm.SystemConfig.CurrentUser.Group == DataStore.UserGroup.LogOut)
{ {
DialogFormLogOn logOn = new DialogFormLogOn(this.ParentForm); DialogFormLogOn logOn = new DialogFormLogOn(this.ParentForm);
if (logOn.ShowDialog() == DialogResult.OK) if (logOn.ShowDialog() == DialogResult.OK)
@ -1367,7 +1379,7 @@ namespace INT89DB_26.Forms
DialogFormYesNo msg = new DialogFormYesNo(this.ParentForm.SystemConfig.Language, 12); DialogFormYesNo msg = new DialogFormYesNo(this.ParentForm.SystemConfig.Language, 12);
if (msg.ShowDialog() == DialogResult.Yes) if (msg.ShowDialog() == DialogResult.Yes)
{ {
this.ParentForm.SystemConfig.CurrentUser.Group = DataStore.UserGroup.LogOff; this.ParentForm.SystemConfig.CurrentUser.Group = DataStore.UserGroup.LogOut;
this.buttonUser.ButtonUp(); this.buttonUser.ButtonUp();
this.DisplayRefresh(); this.DisplayRefresh();

View File

@ -28,6 +28,7 @@
/// </summary> /// </summary>
private void InitializeComponent() private void InitializeComponent()
{ {
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMenu)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMenu));
this.smartForm1 = new SmartX.SmartForm(); this.smartForm1 = new SmartX.SmartForm();
this.buttonBack = new SmartX.SmartButton(); this.buttonBack = new SmartX.SmartButton();
@ -50,6 +51,7 @@
this.buttonFunction = new SmartX.SmartButton(); this.buttonFunction = new SmartX.SmartButton();
this.buttonCommunication = new SmartX.SmartButton(); this.buttonCommunication = new SmartX.SmartButton();
this.buttonOptionSetting = new SmartX.SmartButton(); this.buttonOptionSetting = new SmartX.SmartButton();
this.smartTimerScanUSB = new SmartX.SmartTimer(this.components);
((System.ComponentModel.ISupportInitialize)(this.smartForm1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.smartForm1)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
// //
@ -634,6 +636,15 @@
this.buttonOptionSetting.Visible = false; this.buttonOptionSetting.Visible = false;
this.buttonOptionSetting.Click += new System.EventHandler(this.buttonMenu_Click); this.buttonOptionSetting.Click += new System.EventHandler(this.buttonMenu_Click);
// //
// smartTimerScanUSB
//
this.smartTimerScanUSB.EndTime = ((long)(100000000000));
this.smartTimerScanUSB.Interval = 100;
this.smartTimerScanUSB.IntervalSeries = null;
this.smartTimerScanUSB.NowMillisecond = ((long)(0));
this.smartTimerScanUSB.StartTime = ((long)(0));
this.smartTimerScanUSB.Tick += new System.EventHandler(this.smartTimerScanUSB_Tick);
//
// FormMenu // FormMenu
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
@ -691,5 +702,6 @@
private SmartX.SmartButton buttonFunction; private SmartX.SmartButton buttonFunction;
private SmartX.SmartButton buttonCommunication; private SmartX.SmartButton buttonCommunication;
private SmartX.SmartButton buttonOptionSetting; private SmartX.SmartButton buttonOptionSetting;
private SmartX.SmartTimer smartTimerScanUSB;
} }
} }

View File

@ -6,6 +6,7 @@ using System.Data;
using System.Drawing; using System.Drawing;
using System.Text; using System.Text;
using System.Windows.Forms; using System.Windows.Forms;
using System.IO;
using INT89DB_26.DialogForms; using INT89DB_26.DialogForms;
using INT89DB_26_ImageDll; using INT89DB_26_ImageDll;
@ -16,6 +17,8 @@ namespace INT89DB_26.Forms
{ {
#region Field #region Field
private FormMain m_ParentForm; private FormMain m_ParentForm;
public bool IsConnectedUSB;
#endregion #endregion
#region Costructor #region Costructor
@ -155,6 +158,8 @@ namespace INT89DB_26.Forms
} }
private void DefaultSetting() private void DefaultSetting()
{ {
this.IsConnectedUSB = false;
if (this.ParentForm.SystemConfig.IsLogin == false) if (this.ParentForm.SystemConfig.IsLogin == false)
{ {
this.labelUserID.Visible = false; this.labelUserID.Visible = false;
@ -171,7 +176,7 @@ namespace INT89DB_26.Forms
switch (user.Group) switch (user.Group)
{ {
case DataStore.UserGroup.Level1Operator: case DataStore.UserGroup.Level1:
id = user.ID; id = user.ID;
if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese) if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese)
group = "级别1"; group = "级别1";
@ -197,7 +202,7 @@ namespace INT89DB_26.Forms
this.buttonOptionSetting.Visible = false; this.buttonOptionSetting.Visible = false;
break; break;
case DataStore.UserGroup.Level2Engineer: case DataStore.UserGroup.Level2:
id = user.ID; id = user.ID;
if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese) if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese)
group = "级别2"; group = "级别2";
@ -222,7 +227,7 @@ namespace INT89DB_26.Forms
this.buttonEquipmentTest.Visible = false; this.buttonEquipmentTest.Visible = false;
this.buttonOptionSetting.Visible = false; this.buttonOptionSetting.Visible = false;
break; break;
case DataStore.UserGroup.Level3Manager: case DataStore.UserGroup.Level3:
id = user.ID; id = user.ID;
if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese) if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese)
group = "级别3"; group = "级别3";
@ -247,7 +252,7 @@ namespace INT89DB_26.Forms
this.buttonEquipmentTest.Visible = false; this.buttonEquipmentTest.Visible = false;
this.buttonOptionSetting.Visible = false; this.buttonOptionSetting.Visible = false;
break; break;
case DataStore.UserGroup.Level4Developer: case DataStore.UserGroup.Developer:
id = user.ID; id = user.ID;
if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese) if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese)
group = "级别4"; group = "级别4";
@ -272,7 +277,7 @@ namespace INT89DB_26.Forms
this.buttonEquipmentTest.Visible = true; this.buttonEquipmentTest.Visible = true;
this.buttonOptionSetting.Visible = true; this.buttonOptionSetting.Visible = true;
break; break;
case DataStore.UserGroup.LogOff: case DataStore.UserGroup.LogOut:
break; break;
default: default:
break; break;
@ -291,13 +296,15 @@ namespace INT89DB_26.Forms
this.UpdateDisplayUser(this.ParentForm.SystemConfig.CurrentUser); this.UpdateDisplayUser(this.ParentForm.SystemConfig.CurrentUser);
else else
{ {
this.ParentForm.SystemConfig.CurrentUser.Group = DataStore.UserGroup.Level3Manager; this.ParentForm.SystemConfig.CurrentUser.Group = DataStore.UserGroup.Level3;
this.buttonEquipmentTest.Visible = false; this.buttonEquipmentTest.Visible = false;
this.buttonOptionSetting.Visible = false; this.buttonOptionSetting.Visible = false;
} }
this.ParentForm.TransferData(CommunicationCommand.ModeMenu, CommunicationID.MainBoard); this.ParentForm.TransferData(CommunicationCommand.ModeMenu, CommunicationID.MainBoard);
this.ParentForm.SystemConfig.CurrentForm = DataStore.E_FormStore.FormMenu; this.ParentForm.SystemConfig.CurrentForm = DataStore.E_FormStore.FormMenu;
this.smartTimerScanUSB.Start();
} }
#endregion #endregion
@ -377,10 +384,8 @@ namespace INT89DB_26.Forms
else if (button == this.buttonUpdate) else if (button == this.buttonUpdate)
{ {
#region 업데이트 #region 업데이트
DialogFormYesNo myDlg = new DialogFormYesNo(this.ParentForm.SystemConfig.Language, 3); ((FormMain)(Owner)).smartForm.Show((int)DataStore.E_FormStore.FormProgramUpdate);
DialogResult dr = myDlg.ShowDialog(); this.ParentForm.ChildFormProgramUpdate.DisplayRefresh();
if (dr == DialogResult.Yes)
this.ParentForm.ChildFormProgramUpdate.DisplayRefresh();
#endregion #endregion
} }
else if (button == this.buttonEquipmentSetting) else if (button == this.buttonEquipmentSetting)
@ -439,7 +444,7 @@ namespace INT89DB_26.Forms
if (pass.ShowDialog() == DialogResult.OK) if (pass.ShowDialog() == DialogResult.OK)
{ {
this.ParentForm.SystemConfig.CurrentUser.Group = DataStore.UserGroup.Level4Developer; this.ParentForm.SystemConfig.CurrentUser.Group = DataStore.UserGroup.Developer;
if (this.buttonEquipmentTest.Visible != true) if (this.buttonEquipmentTest.Visible != true)
this.buttonEquipmentTest.Visible = true; this.buttonEquipmentTest.Visible = true;
@ -448,6 +453,29 @@ namespace INT89DB_26.Forms
} }
} }
} }
private void smartTimerScanUSB_Tick(object sender, EventArgs e)
{
bool isBeforeConnectedUSB = this.IsConnectedUSB;
DirectoryInfo info = new DirectoryInfo("하드 디스크\\");
if (info.Exists == true)
this.IsConnectedUSB = true;
else
this.IsConnectedUSB = false;
if (isBeforeConnectedUSB != this.IsConnectedUSB)
{
if (this.ParentForm.ChildFormProgramUpdate != null)
this.ParentForm.ChildFormProgramUpdate.EnableBackupButton(this.IsConnectedUSB);
//if (this.ParentForm.ChildFormDataBackup != null)
// this.ParentForm.ChildFormDataBackup.EnableBackupButton(this.IsConnectedUSB);
//if (this.ParentForm.ChildFormDataBackup_Part11 != null)
// this.ParentForm.ChildFormDataBackup_Part11.EnableBackupButton(this.IsConnectedUSB);
}
}
#endregion #endregion
} }
} }

View File

@ -7867,6 +7867,9 @@
EAAAAABJRU5ErkJggg== EAAAAABJRU5ErkJggg==
</value> </value>
</data> </data>
<metadata name="smartTimerScanUSB.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<metadata name="$this.FormFactorShadowProperty" xml:space="preserve"> <metadata name="$this.FormFactorShadowProperty" xml:space="preserve">
<value>WEBPAD</value> <value>WEBPAD</value>
</metadata> </metadata>

View File

@ -128,7 +128,7 @@
this.labelTitle.BackPictureBox2 = null; this.labelTitle.BackPictureBox2 = null;
this.labelTitle.BorderColor = System.Drawing.Color.Black; this.labelTitle.BorderColor = System.Drawing.Color.Black;
this.labelTitle.BorderStyle = System.Windows.Forms.BorderStyle.None; this.labelTitle.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.labelTitle.Font = new System.Drawing.Font("New Gulim", 23F, System.Drawing.FontStyle.Bold); this.labelTitle.Font = new System.Drawing.Font("새굴림", 23F, System.Drawing.FontStyle.Bold);
this.labelTitle.ForeColor = System.Drawing.Color.White; this.labelTitle.ForeColor = System.Drawing.Color.White;
this.labelTitle.InitVisible = true; this.labelTitle.InitVisible = true;
this.labelTitle.LineSpacing = 0F; this.labelTitle.LineSpacing = 0F;
@ -155,16 +155,17 @@
this.labelTitleFeedback.BackPictureBox2 = null; this.labelTitleFeedback.BackPictureBox2 = null;
this.labelTitleFeedback.BorderColor = System.Drawing.Color.Black; this.labelTitleFeedback.BorderColor = System.Drawing.Color.Black;
this.labelTitleFeedback.BorderStyle = System.Windows.Forms.BorderStyle.None; this.labelTitleFeedback.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.labelTitleFeedback.Font = new System.Drawing.Font("New Gulim", 13F, System.Drawing.FontStyle.Bold); this.labelTitleFeedback.Font = new System.Drawing.Font("새굴림", 13F, System.Drawing.FontStyle.Bold);
this.labelTitleFeedback.InitVisible = true; this.labelTitleFeedback.InitVisible = true;
this.labelTitleFeedback.LineSpacing = 0F; this.labelTitleFeedback.LineSpacing = 0F;
this.labelTitleFeedback.Location = new System.Drawing.Point(248, 219); this.labelTitleFeedback.Location = new System.Drawing.Point(260, 195);
this.labelTitleFeedback.Name = "labelTitleFeedback"; this.labelTitleFeedback.Name = "labelTitleFeedback";
this.labelTitleFeedback.Size = new System.Drawing.Size(160, 30); this.labelTitleFeedback.Size = new System.Drawing.Size(160, 30);
this.labelTitleFeedback.TabIndex = 169; this.labelTitleFeedback.TabIndex = 169;
this.labelTitleFeedback.Text = "Feedback"; this.labelTitleFeedback.Text = "Feedback";
this.labelTitleFeedback.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; this.labelTitleFeedback.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle;
this.labelTitleFeedback.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; this.labelTitleFeedback.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle;
this.labelTitleFeedback.Visible = false;
this.labelTitleFeedback.Wordwrap = false; this.labelTitleFeedback.Wordwrap = false;
// //
// buttonFeedback // buttonFeedback
@ -179,7 +180,7 @@
this.buttonFeedback.DownImage = ((System.Drawing.Image)(resources.GetObject("buttonFeedback.DownImage"))); this.buttonFeedback.DownImage = ((System.Drawing.Image)(resources.GetObject("buttonFeedback.DownImage")));
this.buttonFeedback.GroupID = 0; this.buttonFeedback.GroupID = 0;
this.buttonFeedback.InitVisible = true; this.buttonFeedback.InitVisible = true;
this.buttonFeedback.Location = new System.Drawing.Point(414, 219); this.buttonFeedback.Location = new System.Drawing.Point(426, 195);
this.buttonFeedback.Mode = SmartX.SmartButton.BUTTONMODE.PUSH; this.buttonFeedback.Mode = SmartX.SmartButton.BUTTONMODE.PUSH;
this.buttonFeedback.Name = "buttonFeedback"; this.buttonFeedback.Name = "buttonFeedback";
this.buttonFeedback.NestedClickEventPrevent = false; this.buttonFeedback.NestedClickEventPrevent = false;
@ -196,6 +197,7 @@
this.buttonFeedback.TextLocation = new System.Drawing.Point(0, 0); this.buttonFeedback.TextLocation = new System.Drawing.Point(0, 0);
this.buttonFeedback.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle; this.buttonFeedback.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle;
this.buttonFeedback.UpImage = ((System.Drawing.Image)(resources.GetObject("buttonFeedback.UpImage"))); this.buttonFeedback.UpImage = ((System.Drawing.Image)(resources.GetObject("buttonFeedback.UpImage")));
this.buttonFeedback.Visible = false;
this.buttonFeedback.Click += new System.EventHandler(this.buttonFeedback_Click); this.buttonFeedback.Click += new System.EventHandler(this.buttonFeedback_Click);
// //
// buttonFeedbackBoard // buttonFeedbackBoard
@ -210,7 +212,7 @@
this.buttonFeedbackBoard.DownImage = ((System.Drawing.Image)(resources.GetObject("buttonFeedbackBoard.DownImage"))); this.buttonFeedbackBoard.DownImage = ((System.Drawing.Image)(resources.GetObject("buttonFeedbackBoard.DownImage")));
this.buttonFeedbackBoard.GroupID = 0; this.buttonFeedbackBoard.GroupID = 0;
this.buttonFeedbackBoard.InitVisible = true; this.buttonFeedbackBoard.InitVisible = true;
this.buttonFeedbackBoard.Location = new System.Drawing.Point(414, 255); this.buttonFeedbackBoard.Location = new System.Drawing.Point(426, 231);
this.buttonFeedbackBoard.Mode = SmartX.SmartButton.BUTTONMODE.PUSH; this.buttonFeedbackBoard.Mode = SmartX.SmartButton.BUTTONMODE.PUSH;
this.buttonFeedbackBoard.Name = "buttonFeedbackBoard"; this.buttonFeedbackBoard.Name = "buttonFeedbackBoard";
this.buttonFeedbackBoard.NestedClickEventPrevent = false; this.buttonFeedbackBoard.NestedClickEventPrevent = false;
@ -236,10 +238,10 @@
this.labelTitleFeedbackBoard.BackPictureBox2 = null; this.labelTitleFeedbackBoard.BackPictureBox2 = null;
this.labelTitleFeedbackBoard.BorderColor = System.Drawing.Color.Black; this.labelTitleFeedbackBoard.BorderColor = System.Drawing.Color.Black;
this.labelTitleFeedbackBoard.BorderStyle = System.Windows.Forms.BorderStyle.None; this.labelTitleFeedbackBoard.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.labelTitleFeedbackBoard.Font = new System.Drawing.Font("New Gulim", 13F, System.Drawing.FontStyle.Bold); this.labelTitleFeedbackBoard.Font = new System.Drawing.Font("새굴림", 13F, System.Drawing.FontStyle.Bold);
this.labelTitleFeedbackBoard.InitVisible = true; this.labelTitleFeedbackBoard.InitVisible = true;
this.labelTitleFeedbackBoard.LineSpacing = 0F; this.labelTitleFeedbackBoard.LineSpacing = 0F;
this.labelTitleFeedbackBoard.Location = new System.Drawing.Point(248, 255); this.labelTitleFeedbackBoard.Location = new System.Drawing.Point(260, 231);
this.labelTitleFeedbackBoard.Name = "labelTitleFeedbackBoard"; this.labelTitleFeedbackBoard.Name = "labelTitleFeedbackBoard";
this.labelTitleFeedbackBoard.Size = new System.Drawing.Size(160, 30); this.labelTitleFeedbackBoard.Size = new System.Drawing.Size(160, 30);
this.labelTitleFeedbackBoard.TabIndex = 173; this.labelTitleFeedbackBoard.TabIndex = 173;
@ -256,7 +258,7 @@
this.labelBuadrateWarning2.BackPictureBox2 = null; this.labelBuadrateWarning2.BackPictureBox2 = null;
this.labelBuadrateWarning2.BorderColor = System.Drawing.Color.Black; this.labelBuadrateWarning2.BorderColor = System.Drawing.Color.Black;
this.labelBuadrateWarning2.BorderStyle = System.Windows.Forms.BorderStyle.None; this.labelBuadrateWarning2.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.labelBuadrateWarning2.Font = new System.Drawing.Font("New Gulim", 11F, System.Drawing.FontStyle.Bold); this.labelBuadrateWarning2.Font = new System.Drawing.Font("새굴림", 11F, System.Drawing.FontStyle.Bold);
this.labelBuadrateWarning2.ForeColor = System.Drawing.Color.Red; this.labelBuadrateWarning2.ForeColor = System.Drawing.Color.Red;
this.labelBuadrateWarning2.InitVisible = true; this.labelBuadrateWarning2.InitVisible = true;
this.labelBuadrateWarning2.LineSpacing = 0F; this.labelBuadrateWarning2.LineSpacing = 0F;
@ -277,7 +279,7 @@
this.labelBuadrateWarning.BackPictureBox2 = null; this.labelBuadrateWarning.BackPictureBox2 = null;
this.labelBuadrateWarning.BorderColor = System.Drawing.Color.Black; this.labelBuadrateWarning.BorderColor = System.Drawing.Color.Black;
this.labelBuadrateWarning.BorderStyle = System.Windows.Forms.BorderStyle.None; this.labelBuadrateWarning.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.labelBuadrateWarning.Font = new System.Drawing.Font("New Gulim", 11F, System.Drawing.FontStyle.Bold); this.labelBuadrateWarning.Font = new System.Drawing.Font("새굴림", 11F, System.Drawing.FontStyle.Bold);
this.labelBuadrateWarning.ForeColor = System.Drawing.Color.Red; this.labelBuadrateWarning.ForeColor = System.Drawing.Color.Red;
this.labelBuadrateWarning.InitVisible = true; this.labelBuadrateWarning.InitVisible = true;
this.labelBuadrateWarning.LineSpacing = 0F; this.labelBuadrateWarning.LineSpacing = 0F;
@ -288,6 +290,7 @@
this.labelBuadrateWarning.Text = "※ 설정 변경 후, 전원을 껐다 켜야 합니다"; this.labelBuadrateWarning.Text = "※ 설정 변경 후, 전원을 껐다 켜야 합니다";
this.labelBuadrateWarning.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; this.labelBuadrateWarning.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle;
this.labelBuadrateWarning.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; this.labelBuadrateWarning.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle;
this.labelBuadrateWarning.Visible = false;
this.labelBuadrateWarning.Wordwrap = false; this.labelBuadrateWarning.Wordwrap = false;
// //
// FormOptionSetting // FormOptionSetting

View File

@ -133,10 +133,10 @@ namespace INT89DB_26.Forms
private void buttonSave_Click(object sender, EventArgs e) private void buttonSave_Click(object sender, EventArgs e)
{ {
// 피드백시스템 사용 유무 // 피드백시스템 사용 유무
if (this.buttonFeedback.ButtonStatus == SmartButton.BUTSTATUS.DOWN) //if (this.buttonFeedback.ButtonStatus == SmartButton.BUTSTATUS.DOWN)
this.ParentForm.SystemConfig.IsFeedback = true; // this.ParentForm.SystemConfig.IsFeedback = true;
else //else
this.ParentForm.SystemConfig.IsFeedback = false; // this.ParentForm.SystemConfig.IsFeedback = false;
// 피드백 보드 사용 유무 // 피드백 보드 사용 유무
if (this.buttonFeedbackBoard.ButtonStatus == SmartButton.BUTSTATUS.DOWN) if (this.buttonFeedbackBoard.ButtonStatus == SmartButton.BUTSTATUS.DOWN)
@ -145,6 +145,9 @@ namespace INT89DB_26.Forms
this.ParentForm.SystemConfig.Serial3BaudRate = 38400; this.ParentForm.SystemConfig.Serial3BaudRate = 38400;
this.ParentForm.SystemConfig.Serial3Mode = 98; this.ParentForm.SystemConfig.Serial3Mode = 98;
this.ParentForm.SerialPort3_Open();
this.ParentForm.SerialPort3_FbBoardBooting();
} }
else else
{ {
@ -156,10 +159,12 @@ namespace INT89DB_26.Forms
this.ParentForm.SaveSystemConfigurationFile(this.ParentForm.SystemConfig); this.ParentForm.SaveSystemConfigurationFile(this.ParentForm.SystemConfig);
this.buttonSave.Visible = false; this.ParentForm.ChildFormMainDisplay.UpdateDisplayFeedbackVisible();
this.buttonBack.Visible = false; this.ParentForm.ChildFormCommunication.RefreshComboBoxSerial3FeedbackBoard(this.ParentForm.SystemConfig.IsFeedbackBoard);
this.Enabled = false; this.buttonSave.Visible = false;
//this.Enabled = false;
} }
private void buttonBack_Click(object sender, EventArgs e) private void buttonBack_Click(object sender, EventArgs e)
{ {

View File

@ -165,53 +165,52 @@
XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS
fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+ fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+
tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/ tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/
6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAAOwwAADsMBx2+oZAAACrZJREFUeF7t1jERgAAQ 6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAAOwwAADsMBx2+oZAAACmpJREFUeF7t1jERgEAQ
wLC3w4gENIMjsAAzAhjpmLtMVdBZtwUAgNB8EwAAfxgsAICYwQIAiBksAICYwQIAiBksAICYwQIAiBks ALGz8yUSXjM4AgtQY2LLzERE5tgLAICQYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhg
AICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIA AQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEywAABi
iBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICY ggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIA
wQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBks iAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEAxAQL
AICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAICYwQIA ACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABAT
iBksAICYwQIAiBksAICYwQIAiBksAICYwQIAiBksAIDY3OcOAEBonusAACBksAAAYgYLACBmsAAAYgYL LACAmGABAMQECwAgJlgAADHBAgCIzXufAACE5nsuAABCggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJ
ACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAA FgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAg
YgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBm JlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywA
sAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYL gJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEyw
ACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAA AABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAx
YgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBm wQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEA
sAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYL xAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIF
ACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAA ABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJ
YgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBm FgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAg
sAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYL JlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywA
ACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAA gJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEyw
YgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBm AABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAx
sAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYL wQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEA
ACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAA xAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIF
YgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBm ABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJ
sAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYL FgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAg
ACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAA JlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywA
YgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBm gJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEyw
sAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYL AABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAx
ACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAA wQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEA
YgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBm xAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIF
sAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYL ABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJ
ACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAA FgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAg
YgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBm JlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywA
sAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYL gJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEyw
ACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAA AABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAx
YgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBm wQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEA
sAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYL xAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIF
ACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAA ABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJ
YgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBm FgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAg
sAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYL JlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywA
ACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAA gJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEyw
YgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBm AABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAx
sAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYLACBmsAAAYgYL wQIAiAkWAEBs3vsEACA0x14AAIQECwAgJlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEAxAQLACAm
ACBmsAAAYgYLACBmsAAAYnOfOwAAoVm3BQCAkMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZ WAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACA
LACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMEC mGABAMQECwAgJlgAADHBAgCICRYAQEywAABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAA
AIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACA AGKCBQAQEywAgJhgAQDEBAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHB
mMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZ AgCICRYAQEywAABiggUAEBMsAICYYAEAxAQLACAmWAAAMcECAIgJFgBATLAAAGKCBQAQEywAgJhgAQDE
LACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMEC BAsAICZYAAAxwQIAiAkWAEBMsAAAYoIFABATLACAmGABAMQECwAgJlgAADHBAgCICRYAQEywAABiggUA
AIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACAmMECAIgZLACA EBMsAICYYAEApPb6AaoZKCzs3dg8AAAAAElFTkSuQmCC
mMECAIgZLACAmMECAIgZLACAmMECAIgZLACA2AuqGSgslGsrFQAAAABJRU5ErkJggg==
</value> </value>
</data> </data>
<data name="buttonSave.DownImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="buttonSave.DownImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -261,127 +260,118 @@
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 RK5CYII=
qYDB+w+UMKybBYCE8QCY1X1hbABMo9GsrKx0dnZ6+xNwrl5O+bl5bffuNTU03GlqamtrAzzYEgINDfCV
MQ6HA0IOJM2DYe6no/2kpMtL+0gHOQqsYzSokKHDsBIzlEG38rHFg/Gsrq6uvS8MDLy6vr6elZVl6WiG
+9z8PyIiIoYHBzs7Oro6O/v6+gYHB0dGRvRDDusPg1IK7GsGJAdj/24CVAbCeMDawKYf41nflz4YeB6N
umDdDxQIvu7FxcXTU1Pj4+OjqCYmJqanp8EdF3BrDDSWgIuwfUBvfD+BsASN5QPgIgOeDVQY2/r6+ubm
5sbGRnp6uqOH/cEvY/wCfdvb2xcXF+fm5kCnE/MPFnJYKfVNe8WPFEgGBjyYizCeTT1todrZ2ampqfEN
8H7vxz7n7E75Bfq2tLTQ0V4Tdn408A/gAf4xGIe+3ts+vqewZG3AA5yDYWxtbW1vb+/s7Gxvb9fU1GA/
i3nvJ1lnbU74BfoWFhbOzc1hdTuoF8HiATDYvSP9jQJk1R8v/eV+mGQb1Q6q3d3dvb295eXlzMxMzD+G
SMDcvF1CQkh5eXnt7e0L6PcwQYBhGAb5Rz+m9QWG8sOEBZUBw+7u7s7OjkAg4PP5PT092dnZRFIwWD/f
hgTMztXSL8CHFEIKCSEZ/rDw/1ukEBKJRPTyI+AdTQ6P/P+Q/hduxlC8cQiQfwAAAABJRU5ErkJggg==
</value> </value>
</data> </data>
<data name="buttonSave.UpImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="buttonSave.UpImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -431,56 +421,50 @@
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
AAAASUVORK5CYII=
</value> </value>
</data> </data>
<data name="buttonBack.DownImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="buttonBack.DownImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -530,122 +514,113 @@
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 Kml+s4BQAAAAAElFTkSuQmCC
yOGfGp1Oa80DYHYsQtgAmMFg2N7eHh0dDY/GXAsK86+qqBwaHOzr6env6xsaGgI8SBcCGxrgfJvH44Fj
AlA0Lf0S6pqWdpubjnRr6+u/KOsyAFIORoJ4dnZ2di8KAQP/ure3V1ZW5urndO3Pzr9LSkqam5kZHRkZ
Gx2dnJycmZmZn5+3TjlwbIpMpSwpZy6sAAlpDSybX4FsAS4L3If0DeTjR3j2LLIGA9fhrIs3f0EBE4mu
ra1dW11dWlpagAV2Hjc3N8FyEqlyIETIOGDTlC8UUqBBcbNkndGGZx8Wwra3t3dwcLC/v19UVOQX4n3+
zZio2Mjh4WESibS5uQk2b5H4ICmHTKVAytl8qF8u62KN8CAhQngOrHQI6+joqKOjIzIm/MKXfW573YiK
jRwYGGDA5wrI+tEmPoAHxMemHda6MHz8nUKKtQ0PCA6CcXh4aDKZjo6OTCZTR0cH8rWYC1/JuuXxTVRs
ZE1NzebmJjJvB/NF0HkAjFqtRj5IZKAAVfXLZd3dL5OYYB3BOj4+Pjk54XA4paWlSHxskYCDwwPxeFxl
ZeXw8DCRSKTRaCDBEAyb+mOd09YCTfnHhCSVDcPx8fHR0ZFIJBIKhePj4+Xl5VhcPOg/P4cE7BXkGhUT
gcPj8Hic7RcL/9XC4XE4HDYsCoPyc7jc8v9D+l+jvSppCa2XDgAAAABJRU5ErkJggg==
</value> </value>
</data> </data>
<data name="buttonBack.UpImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="buttonBack.UpImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -695,47 +670,43 @@
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 rkJggg==
qUgmk4nFYqFQCD7I4HfNL4dAIBAKhSKRSCwWy2QytVqt0+nq6+tnb4uZd0tWwp71NDr16tWrEokEQRDw
ySWTyeDvxF8amUwGfuXS6XRPnz6tqqqa3R9YCcQPB5LzCnJra2t/+eUXcD1QFIX/c/uigL1qaWmprq5m
5NHB6yecEoid6RRa9j7WIWZeQS58b+EX5WjxUdYhJiufse9gamLqXxeu/L9K/wGLaHt9OROFfQAAAABJ
RU5ErkJggg==
</value> </value>
</data> </data>
<data name="pictureBoxFormIcon.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="pictureBoxFormIcon.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -785,25 +756,23 @@
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
</value> </value>
</data> </data>
<data name="buttonFeedback.DownImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="buttonFeedback.DownImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -853,21 +822,20 @@
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
LuQH1nf5VNJV3VWF0AAAAABJRU5ErkJggg==
</value> </value>
</data> </data>
<data name="buttonFeedback.UpImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="buttonFeedback.UpImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -917,23 +885,23 @@
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
/QMHPJEbQSo3sQAAAABJRU5ErkJggg== RK5CYII=
</value> </value>
</data> </data>
<data name="buttonFeedbackBoard.DownImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="buttonFeedbackBoard.DownImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -983,21 +951,20 @@
XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS XTesb3QPLh88M+QwdP6m681Lt7xuXbu94vbgcOjwnZHokdE77DtTd1PuvriXeW/h/sYH6AdFD6UeVjxS
fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+ fNTws+7PbaOWo6fHXMf6Hwc/vj/OGn/2S8Yv7ycKnpCfVEyqTDZPmU2dmnafvvF05dOJZ+nPFmYKf5X+
tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/ tfa5zvMffnP8rX82YnbiBf/Fp99LXsq/PPRq2aueuYC5R69TXy/MF72Rf3P4LeNt37vwd5MLWe+x7ys/
6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAAOvQAADr0BR/uQrQAAAx5JREFUaEPt2d9LmlEY 6H7o/ujz8cGn1E+f/gUDmPP8usTo0wAAAAlwSFlzAAAOvQAADr0BR/uQrQAAAwNJREFUaEPtmd9LU2EY
B/D9AyYkhlGUiRGKovDSqGUDGyNaTIhYUGSMZRdeJHQzk2CMNqOikF66qhnW8iLo1YlllIPIdvMOy20N x/sHdOCYTBTdDpOxsbHBMDRnoBJikiBSoDiJnBdeKOwmFSHCUqYoQ/FKU9TcheC2DvMHukCc3Rj+qJQp
i8RR7ZCudw3OReCFcPbjjHeSBfNi+S49fG885yCHz/sceeS9sc694X/jdzNu36nPd+rzfPUsnCw4vziz yULX0OUq8CLoIljfeuNwUEcMYue0cw4fDs95znvxvp/3ec/7wrm2yr/L98rniXoWvywC+jM9ezbr/OTk
kLjTHrOPH41bohZ9WN8cbL5x/qQcGGuba/PxeRfj8jCexZPF2fjs9PH01WfqeMr22WaJWjrDnbVbtZpX gIhz/HR8MDTYGey0BCxVm1V8lLWyvjITmXFH3XSUnjubm4pMjZ2MJZ/Rk1HHRwdMNQQairaKzC/MfJS1
Gi5irW6uToLJmdjMXHzOHrNPgImRo5Grz/Dh8MCnga7dLs22RuFWVJPVXMRa2VwZPBgcPRodOxobOhzq vL48Eh6ZOJ2YjkxjbofCQ32hvuRjP7Z3fehq3G80b5t1Hl3BcAEfZS2tL3UfdfeH+gdCA73HvR3BjrbD
j/abIqarT2+kV7+rrw/VK71KqU2q6ldxEWs5sGyKmPoifaaIqWevp/Vja9OHpqtP4/vGmq0ahUchtUlL tuTTethq2beU7JTovXqVQ2XoMPBR1oJ/AX21Hdpwbz5ort2rrXxXmXwq3lYUbhXqaB1M5dhytFYtH2XN
+0rlBjkXsZYCS4Y9Q/detz6sb9lpqQ/VE0EiC3lLqNZUVS+qyp+Uix6Jqjqq8liXJ4+VQfJYGeQaY+l2 ++etB9amgyZ8Vmt2azC3pk0TB7w2GVYM6mfqvEd58gdydb1alBUfUVYCiLISIIVlVe9Wu6KujfMNgKDl
dBRD0ZCmIU0xlHHfyC6RgCQBqQ1pUzeTgEzdc0GuK5b1wIoQgklIMRTFUCABEELWAyteRb+GI+Zg9xv3 fQvzajg8DEp3SpkMGiPDbnMFqSqr56gnFoud/ziHJhD+HsYjkuQtYlyTp5NMe2hCBr6YzBWkpCyUDDRB
jQghEpDpX/Un1xJLG9LCJAQJwNaONqQNn4URQrodHYvFfsxpLBKQqXWEgzkohsJYNKRBAtCQTl3NRSwa EFM7CALfAtCBCsLjb1e/LvIIhCsLY8bImToiEB2oMsQIsDZhE3f2WyHKggKM/EISwA5AQGSRpdoebEdG
0gih9HmQACABWCx8Vc1Rcx7rAix2HmMRQSJ8FsZ8eaxL51ks1ih3sfzf/Aih1M4A59w1xJMUQ8EkxFcy lBU3T2QhwNok+kRZcfOMLMaRcGX5vvowcvbJgHBhGZIkvmLYDciSFKIsjBkj/+sHnuSxIUIWKTohymKO
F7H+8gcez+t2dDAJcdHlIhbbOrCdQXrrwGJhXJiEOYpFBAlz1AyTEJcMDWlskdqUpmJpQ1rcteYoFr5f DszJ4PLRgZEF4AjtBSoLYI/D+EnJAOKCfShly4JKmBWuLIAiwhmdyELAVBmAlMuLFEnc2cmLpLCsf48o
jpgDYzliDrbKcCmlX9Lc/bvzT5LHyiB5rAySx8og/wWWN+BtD7fj9xR123XqdbVyWZmFeJUyp0wyLCkx KwFEWQkgykqA/0KW1++tC9SR/xTF28XGVaN+Qc8BXr3GqaHsVHZbtuyeLL82n4+y6DW67E0Z5hYTi+6q
lQjbhJWtlVzE8mx4Gt41EMGfD1bmlElt0ornFVnIs4qyx2WihyLBfQH/Nl9yV8JFLPeGWx1QyxfkUpsU HCrlUyUHPFHmPsyV35dL70glNyXULYqPsjxrHqPfqJ3VQhPpLiaWA+7KpFVSSbEkzZQGqHJeynKvujXP
H1fYJsxCHggFzQJ+HZ9H8HgET3KHk1iudZfspUw8KC42FBfeKyy4WYCPm91wFIt6TYmfios6ivi3fj9V NYpuRZY1K+N2Rvr1dNJdbuGpLNdLl+KxIrM+U3Ljz6zyAaqc+gn5VNJVTZ7e1wAAAABJRU5ErkJggg==
LuQH1nf5VNJV3VWF0AAAAABJRU5ErkJggg==
</value> </value>
</data> </data>
<data name="buttonFeedbackBoard.UpImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="buttonFeedbackBoard.UpImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -1047,23 +1014,23 @@
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
/QMHPJEbQSo3sQAAAABJRU5ErkJggg== RK5CYII=
</value> </value>
</data> </data>
<metadata name="$this.FormFactorShadowProperty" xml:space="preserve"> <metadata name="$this.FormFactorShadowProperty" xml:space="preserve">

View File

@ -30,13 +30,17 @@
{ {
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormProgramUpdate)); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormProgramUpdate));
this.smartForm1 = new SmartX.SmartForm(); this.smartForm1 = new SmartX.SmartForm();
this.labelUpdateWait2 = new SmartX.SmartLabel(); this.labelMessage2 = new SmartX.SmartLabel();
this.labelUpdateRestart = new SmartX.SmartLabel(); this.labelMessage1 = new SmartX.SmartLabel();
this.labelUpdateWait = new SmartX.SmartLabel(); this.progressBarUpdate = new SmartX.SmartProgressBar();
this.progressBarUpdateBar = new SmartX.SmartProgressBar();
this.timerUpdate = new System.Windows.Forms.Timer(); this.timerUpdate = new System.Windows.Forms.Timer();
this.labelTitle = new SmartX.SmartLabel(); this.labelTitle = new SmartX.SmartLabel();
this.pictureBoxFormIcon = new System.Windows.Forms.PictureBox(); this.pictureBoxFormIcon = new System.Windows.Forms.PictureBox();
this.buttonBack = new SmartX.SmartButton();
this.buttonLCD = new SmartX.SmartButton();
this.buttonServiceUpdate = new SmartX.SmartButton();
this.labelUpdateContents = new SmartX.SmartLabel();
this.labelTitleUpdate = new SmartX.SmartLabel();
((System.ComponentModel.ISupportInitialize)(this.smartForm1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.smartForm1)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
// //
@ -55,93 +59,71 @@
this.smartForm1.SpecialFunctionClickPointSize = 100; this.smartForm1.SpecialFunctionClickPointSize = 100;
this.smartForm1.SuspendLayoutInterval = 0; this.smartForm1.SuspendLayoutInterval = 0;
// //
// labelUpdateWait2 // labelMessage2
// //
this.labelUpdateWait2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(246)))), ((int)(((byte)(228)))), ((int)(((byte)(180))))); this.labelMessage2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(246)))), ((int)(((byte)(228)))), ((int)(((byte)(180)))));
this.labelUpdateWait2.BackPictureBox = this.smartForm1; this.labelMessage2.BackPictureBox = this.smartForm1;
this.labelUpdateWait2.BackPictureBox1 = null; this.labelMessage2.BackPictureBox1 = null;
this.labelUpdateWait2.BackPictureBox2 = null; this.labelMessage2.BackPictureBox2 = null;
this.labelUpdateWait2.BorderColor = System.Drawing.Color.Black; this.labelMessage2.BorderColor = System.Drawing.Color.Black;
this.labelUpdateWait2.BorderStyle = System.Windows.Forms.BorderStyle.None; this.labelMessage2.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.labelUpdateWait2.Font = new System.Drawing.Font("New Gulim", 18F, System.Drawing.FontStyle.Bold); this.labelMessage2.Font = new System.Drawing.Font("새굴림", 18F, System.Drawing.FontStyle.Bold);
this.labelUpdateWait2.ForeColor = System.Drawing.Color.Black; this.labelMessage2.ForeColor = System.Drawing.Color.Black;
this.labelUpdateWait2.InitVisible = true; this.labelMessage2.InitVisible = true;
this.labelUpdateWait2.LineSpacing = 0F; this.labelMessage2.LineSpacing = 0F;
this.labelUpdateWait2.Location = new System.Drawing.Point(108, 242); this.labelMessage2.Location = new System.Drawing.Point(107, 221);
this.labelUpdateWait2.Name = "labelUpdateWait2"; this.labelMessage2.Name = "labelMessage2";
this.labelUpdateWait2.Size = new System.Drawing.Size(600, 31); this.labelMessage2.Size = new System.Drawing.Size(600, 31);
this.labelUpdateWait2.TabIndex = 158; this.labelMessage2.TabIndex = 158;
this.labelUpdateWait2.Text = "USB를 본체에서 분리하지 마십시오"; this.labelMessage2.Text = "USB를 본체에서 분리하지 마십시오";
this.labelUpdateWait2.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; this.labelMessage2.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle;
this.labelUpdateWait2.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; this.labelMessage2.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle;
this.labelUpdateWait2.Visible = false; this.labelMessage2.Visible = false;
this.labelUpdateWait2.Wordwrap = false; this.labelMessage2.Wordwrap = false;
// //
// labelUpdateRestart // labelMessage1
// //
this.labelUpdateRestart.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(128)))), ((int)(((byte)(192)))), ((int)(((byte)(255))))); this.labelMessage1.BackColor = System.Drawing.Color.DarkGray;
this.labelUpdateRestart.BackPictureBox = null; this.labelMessage1.BackPictureBox = this.smartForm1;
this.labelUpdateRestart.BackPictureBox1 = null; this.labelMessage1.BackPictureBox1 = null;
this.labelUpdateRestart.BackPictureBox2 = null; this.labelMessage1.BackPictureBox2 = null;
this.labelUpdateRestart.BorderColor = System.Drawing.Color.Black; this.labelMessage1.BorderColor = System.Drawing.Color.Black;
this.labelUpdateRestart.BorderStyle = System.Windows.Forms.BorderStyle.None; this.labelMessage1.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.labelUpdateRestart.Font = new System.Drawing.Font("New Gulim", 18F, System.Drawing.FontStyle.Bold); this.labelMessage1.Font = new System.Drawing.Font("새굴림", 18F, System.Drawing.FontStyle.Bold);
this.labelUpdateRestart.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(0)))), ((int)(((byte)(0))))); this.labelMessage1.InitVisible = true;
this.labelUpdateRestart.InitVisible = true; this.labelMessage1.LineSpacing = 0F;
this.labelUpdateRestart.LineSpacing = 0F; this.labelMessage1.Location = new System.Drawing.Point(107, 184);
this.labelUpdateRestart.Location = new System.Drawing.Point(56, 279); this.labelMessage1.Name = "labelMessage1";
this.labelUpdateRestart.Name = "labelUpdateRestart"; this.labelMessage1.Size = new System.Drawing.Size(600, 31);
this.labelUpdateRestart.Size = new System.Drawing.Size(700, 32); this.labelMessage1.TabIndex = 157;
this.labelUpdateRestart.TabIndex = 159; this.labelMessage1.Text = "업데이트 중...";
this.labelUpdateRestart.Text = "전원을 끄고 다시 켜주세요"; this.labelMessage1.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle;
this.labelUpdateRestart.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; this.labelMessage1.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle;
this.labelUpdateRestart.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; this.labelMessage1.Wordwrap = false;
this.labelUpdateRestart.Visible = false;
this.labelUpdateRestart.Wordwrap = false;
// //
// labelUpdateWait // progressBarUpdate
// //
this.labelUpdateWait.BackColor = System.Drawing.Color.DarkGray; this.progressBarUpdate.AutoColorSet = true;
this.labelUpdateWait.BackPictureBox = this.smartForm1; this.progressBarUpdate.BackColor = System.Drawing.Color.Silver;
this.labelUpdateWait.BackPictureBox1 = null; this.progressBarUpdate.BarBackColor1 = System.Drawing.Color.White;
this.labelUpdateWait.BackPictureBox2 = null; this.progressBarUpdate.BarBackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
this.labelUpdateWait.BorderColor = System.Drawing.Color.Black; this.progressBarUpdate.BarColor1 = System.Drawing.Color.Cyan;
this.labelUpdateWait.BorderStyle = System.Windows.Forms.BorderStyle.None; this.progressBarUpdate.BarColor2 = System.Drawing.Color.Teal;
this.labelUpdateWait.Font = new System.Drawing.Font("New Gulim", 18F, System.Drawing.FontStyle.Bold); this.progressBarUpdate.BarStyle = SmartX.SmartProgressBar.BARTYPE.Normal;
this.labelUpdateWait.InitVisible = true; this.progressBarUpdate.Direction = SmartX.SmartProgressBar.DIR.Horizontal;
this.labelUpdateWait.LineSpacing = 0F; this.progressBarUpdate.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Regular);
this.labelUpdateWait.Location = new System.Drawing.Point(108, 205); this.progressBarUpdate.InitVisible = true;
this.labelUpdateWait.Name = "labelUpdateWait"; this.progressBarUpdate.Location = new System.Drawing.Point(112, 296);
this.labelUpdateWait.Size = new System.Drawing.Size(600, 31); this.progressBarUpdate.Maximum = 100;
this.labelUpdateWait.TabIndex = 157; this.progressBarUpdate.Minimum = 0;
this.labelUpdateWait.Text = "업데이트 중..."; this.progressBarUpdate.Name = "progressBarUpdate";
this.labelUpdateWait.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle; this.progressBarUpdate.OutlineColor = System.Drawing.Color.Black;
this.labelUpdateWait.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle; this.progressBarUpdate.PercentageText = true;
this.labelUpdateWait.Wordwrap = false; this.progressBarUpdate.RoundedCorners = true;
// this.progressBarUpdate.Size = new System.Drawing.Size(585, 53);
// progressBarUpdateBar this.progressBarUpdate.TabIndex = 156;
// this.progressBarUpdate.TextAutoRotation = true;
this.progressBarUpdateBar.AutoColorSet = true; this.progressBarUpdate.Value = 10;
this.progressBarUpdateBar.BackColor = System.Drawing.Color.Silver;
this.progressBarUpdateBar.BarBackColor1 = System.Drawing.Color.White;
this.progressBarUpdateBar.BarBackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
this.progressBarUpdateBar.BarColor1 = System.Drawing.Color.Cyan;
this.progressBarUpdateBar.BarColor2 = System.Drawing.Color.Teal;
this.progressBarUpdateBar.BarStyle = SmartX.SmartProgressBar.BARTYPE.Normal;
this.progressBarUpdateBar.Direction = SmartX.SmartProgressBar.DIR.Horizontal;
this.progressBarUpdateBar.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Regular);
this.progressBarUpdateBar.InitVisible = true;
this.progressBarUpdateBar.Location = new System.Drawing.Point(114, 351);
this.progressBarUpdateBar.Maximum = 100;
this.progressBarUpdateBar.Minimum = 0;
this.progressBarUpdateBar.Name = "progressBarUpdateBar";
this.progressBarUpdateBar.OutlineColor = System.Drawing.Color.Black;
this.progressBarUpdateBar.PercentageText = true;
this.progressBarUpdateBar.RoundedCorners = true;
this.progressBarUpdateBar.Size = new System.Drawing.Size(585, 53);
this.progressBarUpdateBar.TabIndex = 156;
this.progressBarUpdateBar.TextAutoRotation = true;
this.progressBarUpdateBar.Value = 10;
// //
// timerUpdate // timerUpdate
// //
@ -154,7 +136,7 @@
this.labelTitle.BackPictureBox2 = null; this.labelTitle.BackPictureBox2 = null;
this.labelTitle.BorderColor = System.Drawing.Color.Black; this.labelTitle.BorderColor = System.Drawing.Color.Black;
this.labelTitle.BorderStyle = System.Windows.Forms.BorderStyle.None; this.labelTitle.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.labelTitle.Font = new System.Drawing.Font("New Gulim", 23F, System.Drawing.FontStyle.Bold); this.labelTitle.Font = new System.Drawing.Font("새굴림", 23F, System.Drawing.FontStyle.Bold);
this.labelTitle.ForeColor = System.Drawing.Color.White; this.labelTitle.ForeColor = System.Drawing.Color.White;
this.labelTitle.InitVisible = true; this.labelTitle.InitVisible = true;
this.labelTitle.LineSpacing = 0F; this.labelTitle.LineSpacing = 0F;
@ -174,18 +156,162 @@
this.pictureBoxFormIcon.Name = "pictureBoxFormIcon"; this.pictureBoxFormIcon.Name = "pictureBoxFormIcon";
this.pictureBoxFormIcon.Size = new System.Drawing.Size(47, 45); this.pictureBoxFormIcon.Size = new System.Drawing.Size(47, 45);
// //
// buttonBack
//
this.buttonBack.BackPictureBox = null;
this.buttonBack.BackPictureBox1 = null;
this.buttonBack.BackPictureBox2 = null;
this.buttonBack.ButtonColor = System.Drawing.Color.Gray;
this.buttonBack.ButtonImageAutoSize = true;
this.buttonBack.ColorKeySamplePosition = new System.Drawing.Point(0, 0);
this.buttonBack.DisableImage = null;
this.buttonBack.DownImage = ((System.Drawing.Image)(resources.GetObject("buttonBack.DownImage")));
this.buttonBack.GroupID = 0;
this.buttonBack.InitVisible = true;
this.buttonBack.Location = new System.Drawing.Point(720, 525);
this.buttonBack.Mode = SmartX.SmartButton.BUTTONMODE.NORMAL;
this.buttonBack.Name = "buttonBack";
this.buttonBack.NestedClickEventPrevent = false;
this.buttonBack.OutlinePixel = 1;
this.buttonBack.RepeatInterval = 200;
this.buttonBack.RepeatIntervalAccelerate = null;
this.buttonBack.SafeInterval = 200;
this.buttonBack.Size = new System.Drawing.Size(70, 70);
this.buttonBack.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE;
this.buttonBack.TabIndex = 238;
this.buttonBack.TextColor = System.Drawing.Color.Black;
this.buttonBack.TextDownColor = System.Drawing.Color.White;
this.buttonBack.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle;
this.buttonBack.TextLocation = new System.Drawing.Point(0, 0);
this.buttonBack.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle;
this.buttonBack.UpImage = ((System.Drawing.Image)(resources.GetObject("buttonBack.UpImage")));
this.buttonBack.Click += new System.EventHandler(this.buttonBack_Click);
//
// buttonLCD
//
this.buttonLCD.BackPictureBox = null;
this.buttonLCD.BackPictureBox1 = null;
this.buttonLCD.BackPictureBox2 = null;
this.buttonLCD.ButtonColor = System.Drawing.Color.Silver;
this.buttonLCD.ButtonImageAutoSize = true;
this.buttonLCD.ColorKeySamplePosition = new System.Drawing.Point(0, 0);
this.buttonLCD.DisableImage = null;
this.buttonLCD.DownImage = null;
this.buttonLCD.Font = new System.Drawing.Font("새굴림", 13F, System.Drawing.FontStyle.Bold);
this.buttonLCD.GroupID = 0;
this.buttonLCD.InitVisible = true;
this.buttonLCD.Location = new System.Drawing.Point(205, 371);
this.buttonLCD.Mode = SmartX.SmartButton.BUTTONMODE.NORMAL;
this.buttonLCD.Name = "buttonLCD";
this.buttonLCD.NestedClickEventPrevent = false;
this.buttonLCD.OutlinePixel = 1;
this.buttonLCD.RepeatInterval = 200;
this.buttonLCD.RepeatIntervalAccelerate = null;
this.buttonLCD.SafeInterval = 200;
this.buttonLCD.Size = new System.Drawing.Size(180, 50);
this.buttonLCD.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE;
this.buttonLCD.TabIndex = 239;
this.buttonLCD.Text = "LCD Update";
this.buttonLCD.TextColor = System.Drawing.Color.Black;
this.buttonLCD.TextDownColor = System.Drawing.Color.White;
this.buttonLCD.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle;
this.buttonLCD.TextLocation = new System.Drawing.Point(0, 0);
this.buttonLCD.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle;
this.buttonLCD.UpImage = null;
this.buttonLCD.Click += new System.EventHandler(this.buttonLCD_Click);
//
// buttonServiceUpdate
//
this.buttonServiceUpdate.BackPictureBox = null;
this.buttonServiceUpdate.BackPictureBox1 = null;
this.buttonServiceUpdate.BackPictureBox2 = null;
this.buttonServiceUpdate.ButtonColor = System.Drawing.Color.Silver;
this.buttonServiceUpdate.ButtonImageAutoSize = true;
this.buttonServiceUpdate.ColorKeySamplePosition = new System.Drawing.Point(0, 0);
this.buttonServiceUpdate.DisableImage = null;
this.buttonServiceUpdate.DownImage = null;
this.buttonServiceUpdate.Font = new System.Drawing.Font("새굴림", 13F, System.Drawing.FontStyle.Bold);
this.buttonServiceUpdate.GroupID = 0;
this.buttonServiceUpdate.InitVisible = true;
this.buttonServiceUpdate.Location = new System.Drawing.Point(409, 371);
this.buttonServiceUpdate.Mode = SmartX.SmartButton.BUTTONMODE.NORMAL;
this.buttonServiceUpdate.Name = "buttonServiceUpdate";
this.buttonServiceUpdate.NestedClickEventPrevent = false;
this.buttonServiceUpdate.OutlinePixel = 1;
this.buttonServiceUpdate.RepeatInterval = 200;
this.buttonServiceUpdate.RepeatIntervalAccelerate = null;
this.buttonServiceUpdate.SafeInterval = 200;
this.buttonServiceUpdate.Size = new System.Drawing.Size(180, 50);
this.buttonServiceUpdate.SpecialFunction = SmartX.SmartButton.SPECIALFUNC.NONE;
this.buttonServiceUpdate.TabIndex = 240;
this.buttonServiceUpdate.Text = "Service Update";
this.buttonServiceUpdate.TextColor = System.Drawing.Color.Black;
this.buttonServiceUpdate.TextDownColor = System.Drawing.Color.White;
this.buttonServiceUpdate.TextHAlign = SmartX.SmartButton.TextHorAlign.Middle;
this.buttonServiceUpdate.TextLocation = new System.Drawing.Point(0, 0);
this.buttonServiceUpdate.TextVAlign = SmartX.SmartButton.TextVerAlign.Middle;
this.buttonServiceUpdate.UpImage = null;
this.buttonServiceUpdate.Click += new System.EventHandler(this.buttonServiceUpdate_Click);
//
// labelUpdateContents
//
this.labelUpdateContents.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(30)))), ((int)(((byte)(30)))));
this.labelUpdateContents.BackPictureBox = this.smartForm1;
this.labelUpdateContents.BackPictureBox1 = null;
this.labelUpdateContents.BackPictureBox2 = null;
this.labelUpdateContents.BorderColor = System.Drawing.Color.Black;
this.labelUpdateContents.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.labelUpdateContents.Font = new System.Drawing.Font("새굴림", 12F, System.Drawing.FontStyle.Bold);
this.labelUpdateContents.ForeColor = System.Drawing.Color.Black;
this.labelUpdateContents.InitVisible = true;
this.labelUpdateContents.LineSpacing = 0F;
this.labelUpdateContents.Location = new System.Drawing.Point(337, 258);
this.labelUpdateContents.Name = "labelUpdateContents";
this.labelUpdateContents.Size = new System.Drawing.Size(360, 30);
this.labelUpdateContents.TabIndex = 251;
this.labelUpdateContents.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle;
this.labelUpdateContents.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle;
this.labelUpdateContents.Visible = false;
this.labelUpdateContents.Wordwrap = false;
//
// labelTitleUpdate
//
this.labelTitleUpdate.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(30)))), ((int)(((byte)(30)))));
this.labelTitleUpdate.BackPictureBox = this.smartForm1;
this.labelTitleUpdate.BackPictureBox1 = null;
this.labelTitleUpdate.BackPictureBox2 = null;
this.labelTitleUpdate.BorderColor = System.Drawing.Color.Black;
this.labelTitleUpdate.BorderStyle = System.Windows.Forms.BorderStyle.None;
this.labelTitleUpdate.Font = new System.Drawing.Font("새굴림", 12F, System.Drawing.FontStyle.Bold);
this.labelTitleUpdate.ForeColor = System.Drawing.Color.Black;
this.labelTitleUpdate.InitVisible = true;
this.labelTitleUpdate.LineSpacing = 0F;
this.labelTitleUpdate.Location = new System.Drawing.Point(161, 258);
this.labelTitleUpdate.Name = "labelTitleUpdate";
this.labelTitleUpdate.Size = new System.Drawing.Size(153, 30);
this.labelTitleUpdate.TabIndex = 250;
this.labelTitleUpdate.Text = "Update : ";
this.labelTitleUpdate.TextHAlign = SmartX.SmartLabel.TextHorAlign.Middle;
this.labelTitleUpdate.TextVAlign = SmartX.SmartLabel.TextVerAlign.Middle;
this.labelTitleUpdate.Visible = false;
this.labelTitleUpdate.Wordwrap = false;
//
// FormProgramUpdate // FormProgramUpdate
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.AutoScroll = true; this.AutoScroll = true;
this.ClientSize = new System.Drawing.Size(800, 600); this.ClientSize = new System.Drawing.Size(800, 600);
this.Controls.Add(this.labelUpdateContents);
this.Controls.Add(this.labelTitleUpdate);
this.Controls.Add(this.buttonServiceUpdate);
this.Controls.Add(this.buttonLCD);
this.Controls.Add(this.buttonBack);
this.Controls.Add(this.labelTitle); this.Controls.Add(this.labelTitle);
this.Controls.Add(this.pictureBoxFormIcon); this.Controls.Add(this.pictureBoxFormIcon);
this.Controls.Add(this.labelUpdateWait2); this.Controls.Add(this.labelMessage2);
this.Controls.Add(this.labelUpdateRestart); this.Controls.Add(this.labelMessage1);
this.Controls.Add(this.labelUpdateWait); this.Controls.Add(this.progressBarUpdate);
this.Controls.Add(this.progressBarUpdateBar);
this.Controls.Add(this.smartForm1); this.Controls.Add(this.smartForm1);
this.Name = "FormProgramUpdate"; this.Name = "FormProgramUpdate";
this.Text = "FormProgramUpdate"; this.Text = "FormProgramUpdate";
@ -197,12 +323,16 @@
#endregion #endregion
private SmartX.SmartForm smartForm1; private SmartX.SmartForm smartForm1;
public SmartX.SmartLabel labelUpdateWait2; public SmartX.SmartLabel labelMessage2;
public SmartX.SmartLabel labelUpdateRestart; public SmartX.SmartLabel labelMessage1;
public SmartX.SmartLabel labelUpdateWait; public SmartX.SmartProgressBar progressBarUpdate;
public SmartX.SmartProgressBar progressBarUpdateBar;
private System.Windows.Forms.Timer timerUpdate; private System.Windows.Forms.Timer timerUpdate;
private SmartX.SmartLabel labelTitle; private SmartX.SmartLabel labelTitle;
private System.Windows.Forms.PictureBox pictureBoxFormIcon; private System.Windows.Forms.PictureBox pictureBoxFormIcon;
private SmartX.SmartButton buttonBack;
private SmartX.SmartButton buttonLCD;
private SmartX.SmartButton buttonServiceUpdate;
public SmartX.SmartLabel labelUpdateContents;
public SmartX.SmartLabel labelTitleUpdate;
} }
} }

View File

@ -10,6 +10,8 @@ using System.IO;
using INT89DB_26.DialogForms; using INT89DB_26.DialogForms;
using INT89DB_26_ImageDll; using INT89DB_26_ImageDll;
using INT89DB_26.Part11_UserManager;
using libPayService;
namespace INT89DB_26.Forms namespace INT89DB_26.Forms
{ {
@ -17,6 +19,9 @@ namespace INT89DB_26.Forms
{ {
#region Field #region Field
private FormMain m_ParentForm; private FormMain m_ParentForm;
private DataStore.E_Step3 UpdateStep;
private bool IsUpdate = false;
private int Check; private int Check;
@ -24,6 +29,7 @@ namespace INT89DB_26.Forms
private string UpdateFilePath = ""; private string UpdateFilePath = "";
private string OldFilePath = ""; private string OldFilePath = "";
private string RemoveFolderPath = ""; private string RemoveFolderPath = "";
private string KeyFolderPath = "";
private List<string> DllName = new List<string>(); private List<string> DllName = new List<string>();
private List<long> LongOldDllFileLastWriteTime = new List<long>(); private List<long> LongOldDllFileLastWriteTime = new List<long>();
@ -36,6 +42,9 @@ namespace INT89DB_26.Forms
InitializeComponent(); InitializeComponent();
this.ParentForm = parent; this.ParentForm = parent;
this.InitializeDesign();
this.DefaultSetting();
} }
#endregion #endregion
@ -60,17 +69,15 @@ namespace INT89DB_26.Forms
{ {
this.labelTitle.Text = "Update"; this.labelTitle.Text = "Update";
this.labelUpdateWait.Text = "Wait a minute..."; this.labelMessage1.Text = "Wait a minute...";
this.labelUpdateWait2.Text = "Do not disconnect the USB from the body"; this.labelMessage2.Text = "Do not disconnect the USB from the body";
this.labelUpdateRestart.Text = "Turn OFF the power and then turn ON the power";
} }
else if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese) else if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Chinese)
{ {
this.labelTitle.Text = "更新"; this.labelTitle.Text = "更新";
this.labelUpdateWait.Text = "请稍等..."; this.labelMessage1.Text = "请稍等...";
this.labelUpdateWait2.Text = "请勿断开USB"; this.labelMessage2.Text = "请勿断开USB";
this.labelUpdateRestart.Text = "关掉电源,然后在打开电源";
} }
else if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Czech) else if (this.ParentForm.SystemConfig.Language == DataStore.E_LanguageID.Czech)
{ {
@ -81,16 +88,13 @@ namespace INT89DB_26.Forms
} }
} }
private void DefaultSetting()
public void DisplayRefresh()
{ {
this.CheckError(); PayService.ServiceDataEvent += PayService_ServiceDataEvent;
this.DecideUpdatePath();
} }
private void DecideUpdatePath()
public void CheckError()
{ {
FileInfo[] newFiles;
if (Directory.Exists("Hard Disk\\") == true) if (Directory.Exists("Hard Disk\\") == true)
this.USBPath = "Hard Disk\\"; this.USBPath = "Hard Disk\\";
else if (Directory.Exists("하드 디스크\\") == true) else if (Directory.Exists("하드 디스크\\") == true)
@ -99,61 +103,191 @@ namespace INT89DB_26.Forms
this.USBPath = "하드 디스크\\"; this.USBPath = "하드 디스크\\";
this.UpdateFilePath = this.USBPath + "UpdateFiles\\"; this.UpdateFilePath = this.USBPath + "UpdateFiles\\";
this.KeyFolderPath = this.USBPath + "KEY\\";
this.OldFilePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\";
if (this.OldFilePath.StartsWith("\\F") == true)
this.RemoveFolderPath = "Flash Disk\\RemoveFile\\";
else
this.RemoveFolderPath = "SD Card\\RemoveFile\\";
}
private void InitialStatus()
{
this.UpdateStep = DataStore.E_Step3.Step1;
this.UpdateLabelStatus(this.UpdateStep, this.ParentForm.SystemConfig.Language);
this.buttonLCD.Enabled = true;
this.buttonServiceUpdate.Enabled = true;
this.labelMessage2.ForeColor = Color.Black;
this.labelMessage2.Visible = true;
this.buttonBack.Enabled = true;
}
private void FinishStatusNeededReBoot()
{
this.ParentForm.Enabled = false;
this.UpdateStep = DataStore.E_Step3.Step3;
this.UpdateLabelStatus(this.UpdateStep, this.ParentForm.SystemConfig.Language);
}
public void EnableBackupButton(bool enable)
{
this.buttonLCD.Enabled = enable;
this.buttonServiceUpdate.Enabled = enable;
if (enable == true)
{
this.buttonLCD.TextColor = Color.Black;
this.buttonServiceUpdate.TextColor = Color.Black;
}
else
{
this.buttonLCD.TextColor = Color.DimGray;
this.buttonServiceUpdate.TextColor = Color.DimGray;
}
this.Refresh();
}
private void ProgramUpdateCheck(DialogResult result)
{
PayService service = new PayService();
DataStore.E_UpdateCheck check = DataStore.E_UpdateCheck.Fail;
if (result == DialogResult.Yes)
{
check = this.CheckError();
if (check == DataStore.E_UpdateCheck.Success)
{
this.buttonLCD.TextColor = Color.DimGray;
this.buttonLCD.Enabled = false;
this.buttonServiceUpdate.TextColor = Color.DimGray;
this.buttonServiceUpdate.Enabled = false;
this.UpdateStep = DataStore.E_Step3.Step2;
this.UpdateLabelStatus(this.UpdateStep, this.ParentForm.SystemConfig.Language);
if (this.IsUpdate == true)
this.ProgramUpdate();
else
{
FileInfo[] newFiles;
DirectoryInfo directoryFolder = new DirectoryInfo(this.KeyFolderPath);
if (directoryFolder.Exists == false)
directoryFolder.Create();
newFiles = directoryFolder.GetFiles();
//Console.Write("{0}, {1} \n", this.KeyFolderPath + newFiles[0].ToString(), newFiles.Length);
ErrorLog_e ret = service.PayServiceOpen(this.KeyFolderPath + newFiles[0].ToString(), this.ParentForm.SystemConfig.SerialNumber);
if (ret != ErrorLog_e.NONE)
{
DialogFormMessage message = new DialogFormMessage((int)ret, this.ParentForm.SystemConfig.Language,
this.ParentForm.SystemConfig.CurrentForm);
message.ShowDialog();
this.InitialStatus();
}
}
}
else if (check == DataStore.E_UpdateCheck.NotUsbMomery)
{
DialogFormMessage message = new DialogFormMessage(5, this.ParentForm.SystemConfig.Language);
message.ShowDialog();
this.IsUpdate = false;
}
else if (check == DataStore.E_UpdateCheck.NotUpdateFolder)
{
DialogFormMessage message = new DialogFormMessage(9, this.ParentForm.SystemConfig.Language);
message.ShowDialog();
this.IsUpdate = false;
}
else if (check == DataStore.E_UpdateCheck.NotFile)
{
DialogFormMessage message = new DialogFormMessage(7, this.ParentForm.SystemConfig.Language);
message.ShowDialog();
this.IsUpdate = false;
}
else if (check == DataStore.E_UpdateCheck.TooManyFiles)
{
DialogFormMessage message = new DialogFormMessage(8, this.ParentForm.SystemConfig.Language);
message.ShowDialog();
this.IsUpdate = false;
}
}
}
public DataStore.E_UpdateCheck CheckError()
{
DataStore.E_UpdateCheck ret = DataStore.E_UpdateCheck.Fail;
FileInfo[] newFiles;
DirectoryInfo info = new DirectoryInfo(this.USBPath); DirectoryInfo info = new DirectoryInfo(this.USBPath);
DirectoryInfo directoryFolderUpdateFiles = new DirectoryInfo(this.UpdateFilePath); DirectoryInfo dirFolderSource;
if (this.IsUpdate == true)
dirFolderSource = new DirectoryInfo(this.UpdateFilePath);
else
dirFolderSource = new DirectoryInfo(this.KeyFolderPath);
// USB 장착 유무 확인 // USB 장착 유무 확인
if (info.Exists == true) if (info.Exists == true)
{ {
// USB에 UpdateFiles 유무 확인 // USB에 UpdateFiles 유무 확인
if (directoryFolderUpdateFiles.Exists == true) if (dirFolderSource.Exists == true)
{ {
newFiles = directoryFolderUpdateFiles.GetFiles(); newFiles = dirFolderSource.GetFiles();
if (newFiles.Length == 0) if (newFiles.Length == 0)
{ {
// USB에 업데이트 파일이 없습니다 ret = DataStore.E_UpdateCheck.NotFile;
DialogFormMessage message = new DialogFormMessage(7, this.ParentForm.SystemConfig.Language, "");
message.ShowDialog();
return;
} }
else else
{ {
((FormMain)(Owner)).smartForm.Show((int)DataStore.E_FormStore.FormProgramUpdate); if (this.IsUpdate == false)
{
if (newFiles.Length == 1)
ret = DataStore.E_UpdateCheck.Success;
else
ret = DataStore.E_UpdateCheck.TooManyFiles;
}
else
ret = DataStore.E_UpdateCheck.Success;
} }
} }
else else
{ {
// USB에 업데이트 폴더가 없습니다 ret = DataStore.E_UpdateCheck.NotUpdateFolder;
DialogFormMessage message = new DialogFormMessage(9, this.ParentForm.SystemConfig.Language, "");
message.ShowDialog();
return;
} }
} }
else else
{ {
// USB메모리가 장착되지 않았습니다 ret = DataStore.E_UpdateCheck.NotUsbMomery;
DialogFormMessage message = new DialogFormMessage(5, this.ParentForm.SystemConfig.Language, "");
message.ShowDialog();
return;
} }
return ret;
} }
private void ProgramUpdate() private void ProgramUpdate()
{ {
this.buttonBack.Enabled = false;
FileInfo[] newFiles; FileInfo[] newFiles;
DirectoryInfo directoryFolderUpdateFiles = new DirectoryInfo(this.UpdateFilePath); DirectoryInfo directoryFolderUpdateFiles = new DirectoryInfo(this.UpdateFilePath);
if (directoryFolderUpdateFiles.Exists == false)
directoryFolderUpdateFiles.Create();
newFiles = directoryFolderUpdateFiles.GetFiles(); newFiles = directoryFolderUpdateFiles.GetFiles();
this.progressBarUpdateBar.Value += 20; this.progressBarUpdate.Value += 20;
this.TreatmentRemoveOldFile(); this.TreatmentRemoveOldFile();
this.progressBarUpdate.Value += 20;
this.TreatmentCopyNewFile(newFiles); this.TreatmentCopyNewFile(newFiles);
this.progressBarUpdateBar.Value += 100; this.progressBarUpdate.Value += 100;
this.ParentForm.SetTrackingHistoryData(DataStore.E_TrackingOperation.Update, "LCD");
this.FinishStatusNeededReBoot();
} }
private void TreatmentRemoveOldFile() private void TreatmentRemoveOldFile()
{ {
bool removeFolderCheck = false; bool removeFolderCheck = false;
@ -168,45 +302,287 @@ namespace INT89DB_26.Forms
directoryFolderRemove.Create(); directoryFolderRemove.Create();
foreach (FileInfo subFile in oldFiles) foreach (FileInfo subFile in oldFiles)
subFile.MoveTo(RemoveFolderPath + DateTime.Now.ToString("yyyyMMddHHmmss") + subFile.Name.ToString()); subFile.MoveTo(this.RemoveFolderPath + DateTime.Now.ToString("yyyyMMddHHmmss") + subFile.Name.ToString());
this.progressBarUpdateBar.Value += 20; this.progressBarUpdate.Value += 20;
} }
private void TreatmentCopyNewFile(FileInfo[] newFile) private void TreatmentCopyNewFile(FileInfo[] newFile)
{ {
// 새 파일 복사 // 새 파일 복사
foreach (FileInfo subFile in newFile) foreach (FileInfo subFile in newFile)
subFile.CopyTo(this.OldFilePath + subFile.Name.ToString()); subFile.CopyTo(this.OldFilePath + subFile.Name.ToString());
this.progressBarUpdateBar.Value += 20; this.progressBarUpdate.Value += 20;
} }
#endregion
#region Override Member private void UpdateLabelStatus(DataStore.E_Step3 step, DataStore.E_LanguageID language)
protected override void OnLoad(EventArgs e)
{ {
base.OnLoad(e); switch (step)
{
case DataStore.E_Step3.Step1:
#region Step1
switch (language)
{
case DataStore.E_LanguageID.Korean:
this.labelMessage1.Text = "USB를 본체에 삽입 하십시오";
this.labelMessage2.Text = "업데이트 할 항목을 선택해 주십시오";
break;
case DataStore.E_LanguageID.English:
this.labelMessage1.Text = "Please insert usb into the device";
this.labelMessage2.Text = "Please select an item to update";
break;
case DataStore.E_LanguageID.Chinese:
this.labelMessage1.Text = "请将usb插入设备中。";
this.labelMessage2.Text = "请选择一个项目来更新";
break;
case DataStore.E_LanguageID.German:
this.labelMessage1.Font = new Font("새굴림", 18, FontStyle.Bold);
this.labelMessage1.Text = "USB nicht vom Gerät trennen";
this.labelMessage2.Font = new Font("새굴림", 18, FontStyle.Bold);
this.labelMessage2.Text = "Drücken Sie nach dem USB-Anschluss die untere Taste";
break;
default:
break;
}
#endregion
break;
case DataStore.E_Step3.Step2:
#region Step2
switch (language)
{
case DataStore.E_LanguageID.Korean:
this.labelMessage1.Text = "업데이트 중...";
this.labelMessage2.Text = "USB를 본체에서 분리하지 마십시오";
break;
case DataStore.E_LanguageID.English:
this.labelMessage1.Text = "Updating...";
this.labelMessage2.Text = "Do not remove the USB from the device";
break;
case DataStore.E_LanguageID.Chinese:
this.labelMessage1.Text = "更新中...";
this.labelMessage2.Text = "请勿断开USB";
break;
case DataStore.E_LanguageID.German:
this.labelMessage1.Font = new Font("새굴림", 18, FontStyle.Bold);
this.labelMessage1.Text = "Aktualisierung….";
this.labelMessage2.Font = new Font("새굴림", 18, FontStyle.Bold);
this.labelMessage2.Text = "USB nicht vom Gerät trennen";
break;
default:
break;
}
#endregion
break;
case DataStore.E_Step3.Step3:
#region Step3
this.labelMessage2.ForeColor = Color.Red;
switch (language)
{
case DataStore.E_LanguageID.Korean:
this.labelMessage1.Text = "프로그램 업데이트 완료";
this.labelMessage2.Text = "전원을 끄고 다시 켜주세요";
break;
case DataStore.E_LanguageID.English:
this.labelMessage1.Text = "Program update complete";
this.labelMessage2.Text = "Reset the system";
break;
case DataStore.E_LanguageID.Chinese:
this.labelMessage1.Text = "系统更新完成";
this.labelMessage2.Text = "关掉电源,然后在打开电源";
break;
case DataStore.E_LanguageID.German:
this.labelMessage1.Font = new Font("새굴림", 18, FontStyle.Bold);
this.labelMessage1.Text = "Programmaktualisierung abgeschlossen";
this.labelMessage2.Font = new Font("새굴림", 18, FontStyle.Bold);
this.labelMessage2.Text = "Mit dem Hauptschalter aus- und einschalten";
break;
default:
break;
}
#endregion
break;
default:
break;
}
this.InitializeDesign(); this.Refresh();
}
private void PayService_ServiceDataEvent(SERVICE_ITEMS_e item, SERVICE_MODE_e value)
{
//Console.Write("{0} = {1} \n", item.ToString(), value.ToString());
this.progressBarUpdate.Value = 50;
DirectoryInfo directoryFolderUpdateFiles = new DirectoryInfo(this.UpdateFilePath); switch (item)
if (directoryFolderUpdateFiles.Exists == false) {
directoryFolderUpdateFiles.Create(); case SERVICE_ITEMS_e.MODBUS:
#region Modbus
switch (value)
{
case SERVICE_MODE_e.DISABLE:
if (this.ParentForm.SystemConfig.IsModbus == true)
{
this.ParentForm.SystemConfig.IsModbus = false;
this.Check = 0; if (this.ParentForm.SystemConfig.Serial3Mode == (int)DataStore.E_CommMode.f99_Modbus)
this.ParentForm.SystemConfig.Serial3Mode = 0;
if (this.ParentForm.SystemConfig.EthernetMode == (int)DataStore.E_CommMode.f99_Modbus)
this.ParentForm.SystemConfig.EthernetMode = 0;
this.UpdateFilePath = this.USBPath + "UpdateFiles\\"; this.ParentForm.SaveSystemConfigurationFile(this.ParentForm.SystemConfig);
this.OldFilePath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\";
if (this.OldFilePath.StartsWith("\\F") == true) //this.ParentForm.CenterConfiSerial.ChangeCommunicationMode();
this.RemoveFolderPath = "Flash Disk\\RemoveFile\\"; //this.ParentForm.CenterConfiEthernet.ChangeCommunicationMode();
this.labelUpdateContents.Text += "Modbus OFF";
this.ParentForm.SetTrackingHistoryData(DataStore.E_TrackingOperation.FunctionUpdate, "Modbus_OFF");
}
break;
case SERVICE_MODE_e.ENABLE:
if (this.ParentForm.SystemConfig.IsModbus == false)
{
this.ParentForm.SystemConfig.IsModbus = true;
this.ParentForm.SaveSystemConfigurationFile(this.ParentForm.SystemConfig);
//this.ParentForm.CenterConfiSerial.ChangeCommunicationMode();
//this.ParentForm.CenterConfiEthernet.ChangeCommunicationMode();
this.labelUpdateContents.Text += "Modbus ON";
this.ParentForm.SetTrackingHistoryData(DataStore.E_TrackingOperation.FunctionUpdate, "Modbus_ON");
}
break;
default:
break;
}
#endregion
break;
case SERVICE_ITEMS_e.PART11:
// Part11 추가 시 활성화
#region Part11
//switch (value)
//{
// case SERVICE_MODE_e.DISABLE:
// if (this.ParentForm.SystemConfig.IsPart11 == true)
// {
// this.ParentForm.SystemConfig.IsPart11 = false;
// this.ParentForm.SystemConfig.IsLogin = false;
// //this.ParentForm.SystemConfig.IsDataStatistics = false;
// this.ParentForm.SystemConfig.IsDataBackup = false;
// if (this.ParentForm.SystemConfig.StoragePeriod > 12)
// this.ParentForm.SystemConfig.StoragePeriod = 12;
// // Delete user list
// try
// {
// UserManager.UserManager_UserAllDel();
// }
// catch
// {
// }
// this.ParentForm.SaveSystemConfigurationFile(this.ParentForm.SystemConfig);
// if (this.labelUpdateContents.Text.Length != 0)
// this.labelUpdateContents.Text += ", ";
// this.labelUpdateContents.Text += "Part11 OFF";
// this.ParentForm.SetTrackingHistoryData(DataStore.E_TrackingOperation.FunctionUpdate, "Part11_OFF");
// }
// break;
// case SERVICE_MODE_e.ENABLE:
// if (this.ParentForm.SystemConfig.IsPart11 == false)
// {
// this.ParentForm.SystemConfig.IsLogin = true;
// this.ParentForm.SystemConfig.IsPart11 = true;
// //this.ParentForm.SystemConfig.IsDataStatistics = true;
// this.ParentForm.SystemConfig.IsDataBackup = true;
// if (this.ParentForm.SystemConfig.StoragePeriod <= 12)
// this.ParentForm.SystemConfig.StoragePeriod = 24;
// this.ParentForm.SaveSystemConfigurationFile(this.ParentForm.SystemConfig);
// if (this.labelUpdateContents.Text.Length != 0)
// this.labelUpdateContents.Text += ", ";
// this.labelUpdateContents.Text += "Part11 ON";
// this.ParentForm.SetTrackingHistoryData(DataStore.E_TrackingOperation.FunctionUpdate, "Part11_ON");
// }
// break;
// default:
// break;
//}
this.buttonBack.Enabled = false;
#endregion
break;
case SERVICE_ITEMS_e.FEEDBACK:
#region Feedback
switch (value)
{
case SERVICE_MODE_e.DISABLE:
if (this.ParentForm.SystemConfig.IsFeedback == true)
{
this.ParentForm.SystemConfig.IsFeedback = false;
this.ParentForm.SaveSystemConfigurationFile(this.ParentForm.SystemConfig);
if (this.labelUpdateContents.Text.Length != 0)
this.labelUpdateContents.Text += ", ";
this.labelUpdateContents.Text += "Feedback OFF";
this.ParentForm.SetTrackingHistoryData(DataStore.E_TrackingOperation.FunctionUpdate, "Feedback_OFF");
}
break;
case SERVICE_MODE_e.ENABLE:
if (this.ParentForm.SystemConfig.IsFeedback == false)
{
this.ParentForm.SystemConfig.IsFeedback = true;
this.ParentForm.SaveSystemConfigurationFile(this.ParentForm.SystemConfig);
if (this.labelUpdateContents.Text.Length != 0)
this.labelUpdateContents.Text += ", ";
this.labelUpdateContents.Text += "Feedback ON";
this.ParentForm.SetTrackingHistoryData(DataStore.E_TrackingOperation.FunctionUpdate, "Feedback_ON");
}
break;
default:
break;
}
this.FinishStatusNeededReBoot();
this.progressBarUpdate.Value += 100;
this.buttonBack.Enabled = false;
#endregion
break;
default:
break;
}
this.labelTitleUpdate.Visible = true;
this.labelUpdateContents.Visible = true;
}
public void DisplayRefresh()
{
this.ParentForm.SystemConfig.CurrentForm = DataStore.E_FormStore.FormProgramUpdate;
this.InitialStatus();
this.progressBarUpdate.Value = 0;
// USB 체크
DirectoryInfo info = new DirectoryInfo("하드 디스크\\");
if (info.Exists == true)
{
this.buttonLCD.TextColor = Color.Black;
this.buttonLCD.Enabled = true;
this.buttonServiceUpdate.TextColor = Color.Black;
this.buttonServiceUpdate.Enabled = true;
}
else else
this.RemoveFolderPath = "SD Card\\RemoveFile\\"; {
this.buttonLCD.TextColor = Color.DimGray;
this.timerUpdate.Interval = 1000; this.buttonLCD.Enabled = false;
this.timerUpdate.Tick += new EventHandler(timerUpdate_Tick); this.buttonServiceUpdate.TextColor = Color.DimGray;
this.timerUpdate.Enabled = true; this.buttonServiceUpdate.Enabled = false;
}
} }
#endregion #endregion
@ -216,16 +592,47 @@ namespace INT89DB_26.Forms
this.Check += 1; this.Check += 1;
if (this.Check == 3) if (this.Check == 3)
{ {
this.ParentForm.ChildFormProgramUpdate.ProgramUpdate(); this.ProgramUpdate();
} }
if (this.progressBarUpdateBar.Value == 100) if (this.progressBarUpdate.Value == 100)
{ {
this.labelUpdateWait.Visible = false; this.labelMessage1.Visible = false;
this.labelUpdateWait2.Visible = false; this.labelMessage2.Visible = false;
this.labelUpdateRestart.Visible = true;
} }
} }
private void buttonLCD_Click(object sender, EventArgs e)
{
DialogFormYesNo myDlg = new DialogFormYesNo(this.ParentForm.SystemConfig.Language, 3);
DialogResult dr = myDlg.ShowDialog();
if (dr == DialogResult.Yes)
this.IsUpdate = true;
myDlg.Close();
this.Refresh();
this.labelMessage2.Visible = true;
this.ProgramUpdateCheck(dr);
}
private void buttonServiceUpdate_Click(object sender, EventArgs e)
{
DialogFormYesNo myDlg = new DialogFormYesNo(this.ParentForm.SystemConfig.Language, 3);
DialogResult dr = myDlg.ShowDialog();
myDlg.Close();
PayService service = new PayService();
this.labelMessage2.Visible = true;
this.ProgramUpdateCheck(dr);
}
private void buttonBack_Click(object sender, EventArgs e)
{
this.ParentForm.ChildFormMenu.DisplayRefresh();
((FormMain)(Owner)).smartForm.Show((int)DataStore.E_FormStore.FormMenu);
}
#endregion #endregion
} }
} }

View File

@ -276,6 +276,248 @@
IuLOxLfp6rmLy7jLf6z7kyHYGcBcqMv4XCYbfJHs6u7U/VqFvL4y3DMmikyHedxkAyamxklo6euX1zMv IuLOxLfp6rmLy7jLf6z7kyHYGcBcqMv4XCYbfJHs6u7U/VqFvL4y3DMmikyHedxkAyamxklo6euX1zMv
dfB29g1NgQcjinlpk+fJoi8S3Q3PpvFKg5hd2hAoxe90dfSFujWB7x6jrOZY2/wvXBs7clP+AE97kRBm dfB29g1NgQcjinlpk+fJoi8S3Q3PpvFKg5hd2hAoxe90dfSFujWB7x6jrOZY2/wvXBs7clP+AE97kRBm
/EAaAAAAAElFTkSuQmCC /EAaAAAAAElFTkSuQmCC
</value>
</data>
<data name="buttonBack.DownImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
Kml+s4BQAAAAAElFTkSuQmCC
</value>
</data>
<data name="buttonBack.UpImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
rkJggg==
</value> </value>
</data> </data>
<metadata name="$this.FormFactorShadowProperty" xml:space="preserve"> <metadata name="$this.FormFactorShadowProperty" xml:space="preserve">

View File

@ -869,6 +869,18 @@ namespace INT89DB_26.Forms
} }
else else
{ {
if (this.ParentForm.SystemConfig.IsFeedback == true)
{
if (myKeyPad.doubleValue < Helper.StringToWeight(this.ParentForm.CurrentFeedbackItem.LowLimit, this.ParentForm.SystemConfig.DecimalPlaces)
|| (myKeyPad.doubleValue > Helper.StringToWeight(this.ParentForm.CurrentFeedbackItem.HighLimit, this.ParentForm.SystemConfig.DecimalPlaces)))
{
// 입력범위를 확인하세요
DialogFormMessage myMsg = new DialogFormMessage(1, this.ParentForm.SystemConfig.Language, "");
myMsg.ShowDialog();
return;
}
}
this.buttonPass.Text = myKeyPad.StringValue; this.buttonPass.Text = myKeyPad.StringValue;
this.SelectedProductItem.PassRange = myKeyPad.StringValue.Replace(".", ""); this.SelectedProductItem.PassRange = myKeyPad.StringValue.Replace(".", "");

View File

@ -277,7 +277,7 @@ namespace INT89DB_26.Forms
{ {
this.ParentForm.CurrentCollectionUser.Level1Users[this.listBoxLevel1.SelectItemIndex].ID = this.textBoxID.Text; this.ParentForm.CurrentCollectionUser.Level1Users[this.listBoxLevel1.SelectItemIndex].ID = this.textBoxID.Text;
this.ParentForm.CurrentCollectionUser.Level1Users[this.listBoxLevel1.SelectItemIndex].Password = this.textBoxPassword.Text; this.ParentForm.CurrentCollectionUser.Level1Users[this.listBoxLevel1.SelectItemIndex].Password = this.textBoxPassword.Text;
this.ParentForm.CurrentCollectionUser.Level1Users[this.listBoxLevel1.SelectItemIndex].Group = DataStore.UserGroup.Level1Operator; this.ParentForm.CurrentCollectionUser.Level1Users[this.listBoxLevel1.SelectItemIndex].Group = DataStore.UserGroup.Level1;
this.ParentForm.SaveUserLevel1File(this.ParentForm.CurrentCollectionUser.Level1Users); this.ParentForm.SaveUserLevel1File(this.ParentForm.CurrentCollectionUser.Level1Users);
this.listBoxLevel1.Items[this.listBoxLevel1.SelectItemIndex] = this.textBoxID.Text; this.listBoxLevel1.Items[this.listBoxLevel1.SelectItemIndex] = this.textBoxID.Text;
@ -286,7 +286,7 @@ namespace INT89DB_26.Forms
{ {
this.ParentForm.CurrentCollectionUser.Level2Users[this.listBoxLevel2.SelectItemIndex].ID = this.textBoxID.Text; this.ParentForm.CurrentCollectionUser.Level2Users[this.listBoxLevel2.SelectItemIndex].ID = this.textBoxID.Text;
this.ParentForm.CurrentCollectionUser.Level2Users[this.listBoxLevel2.SelectItemIndex].Password = this.textBoxPassword.Text; this.ParentForm.CurrentCollectionUser.Level2Users[this.listBoxLevel2.SelectItemIndex].Password = this.textBoxPassword.Text;
this.ParentForm.CurrentCollectionUser.Level2Users[this.listBoxLevel2.SelectItemIndex].Group = DataStore.UserGroup.Level2Engineer; this.ParentForm.CurrentCollectionUser.Level2Users[this.listBoxLevel2.SelectItemIndex].Group = DataStore.UserGroup.Level2;
this.ParentForm.SaveUserLevel2File(this.ParentForm.CurrentCollectionUser.Level2Users); this.ParentForm.SaveUserLevel2File(this.ParentForm.CurrentCollectionUser.Level2Users);
this.listBoxLevel2.Items[this.listBoxLevel2.SelectItemIndex] = this.textBoxID.Text; this.listBoxLevel2.Items[this.listBoxLevel2.SelectItemIndex] = this.textBoxID.Text;
@ -295,7 +295,7 @@ namespace INT89DB_26.Forms
{ {
this.ParentForm.CurrentCollectionUser.Level3Users[this.listBoxLevel3.SelectItemIndex].ID = this.textBoxID.Text; this.ParentForm.CurrentCollectionUser.Level3Users[this.listBoxLevel3.SelectItemIndex].ID = this.textBoxID.Text;
this.ParentForm.CurrentCollectionUser.Level3Users[this.listBoxLevel3.SelectItemIndex].Password = this.textBoxPassword.Text; this.ParentForm.CurrentCollectionUser.Level3Users[this.listBoxLevel3.SelectItemIndex].Password = this.textBoxPassword.Text;
this.ParentForm.CurrentCollectionUser.Level3Users[this.listBoxLevel3.SelectItemIndex].Group = DataStore.UserGroup.Level3Manager; this.ParentForm.CurrentCollectionUser.Level3Users[this.listBoxLevel3.SelectItemIndex].Group = DataStore.UserGroup.Level3;
this.ParentForm.SaveUserLevel3File(this.ParentForm.CurrentCollectionUser.Level3Users); this.ParentForm.SaveUserLevel3File(this.ParentForm.CurrentCollectionUser.Level3Users);
this.listBoxLevel3.Items[this.listBoxLevel3.SelectItemIndex] = this.textBoxID.Text; this.listBoxLevel3.Items[this.listBoxLevel3.SelectItemIndex] = this.textBoxID.Text;

View File

@ -53,6 +53,10 @@
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\INT89DB_26_ImageDll\bin\Release\INT89DB_26_ImageDll.dll</HintPath> <HintPath>..\INT89DB_26_ImageDll\bin\Release\INT89DB_26_ImageDll.dll</HintPath>
</Reference> </Reference>
<Reference Include="libPayService, Version=1.0.8748.18817, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Document\DLL\libPayService.dll</HintPath>
</Reference>
<Reference Include="Microsoft.WindowsCE.Forms" /> <Reference Include="Microsoft.WindowsCE.Forms" />
<Reference Include="mscorlib" /> <Reference Include="mscorlib" />
<Reference Include="SmartXCommon, Version=3.2.4.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="SmartXCommon, Version=3.2.4.0, Culture=neutral, processorArchitecture=MSIL">
@ -284,6 +288,13 @@
<Compile Include="InModbus\Modbus_30000_LaneData.cs" /> <Compile Include="InModbus\Modbus_30000_LaneData.cs" />
<Compile Include="InModbus\Modbus_40000_Address.cs" /> <Compile Include="InModbus\Modbus_40000_Address.cs" />
<Compile Include="InModbus\Modbus_40000_Data.cs" /> <Compile Include="InModbus\Modbus_40000_Data.cs" />
<Compile Include="Part11_Encryption\Encryption.cs" />
<Compile Include="Part11_Encryption\Encryption.Define.cs" />
<Compile Include="Part11_Encryption\Encryption.Structure.cs" />
<Compile Include="Part11_UserManager\UserItem.cs" />
<Compile Include="Part11_UserManager\UserManager.cs" />
<Compile Include="Part11_UserManager\UserManager.Define.cs" />
<Compile Include="Part11_UserManager\UserManager.Structure.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Controls\ControlCalibration2.resx"> <EmbeddedResource Include="Controls\ControlCalibration2.resx">

View File

@ -0,0 +1,34 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace INT89DB_26.Part11_Encryption
{
public partial class Encryption
{
private const string PathDll = "SD Card\\Run\\DllAes128.dll";
private delegate void fnAesVersionCB(StringBuilder version);
private static fnAesVersionCB fnAesVersionCallBack;
public delegate void fnAesEncryptionCB(ref auth_encryption_status_t encryption_status);
public static fnAesEncryptionCB fnAesEncryptionCallBack;
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_AES_Register_VersionCB(fnAesVersionCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
public static extern void DLL_AES_Register_EncryptionCB(fnAesEncryptionCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_SAES_Getversion();
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
public static extern void DLL_AES_Activation();
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
public static extern int DLL_AES_Encryption(IntPtr inFileName, IntPtr outFileName, bool encrypt, bool compress);
}
}

View File

@ -0,0 +1,25 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace INT89DB_26.Part11_Encryption
{
public partial class Encryption
{
public const int MAX_FILE_NAME_LENGTH = 256;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct auth_encryption_status_t
{
public int status;
public int error_type;
public int error_index;
public int percentage;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_FILE_NAME_LENGTH)]
public string inFileName;
}
}
}

View File

@ -0,0 +1,62 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace INT89DB_26.Part11_Encryption
{
public partial class Encryption
{
public delegate void ObjectEventHandler(object data);
public static event ObjectEventHandler DllAesEncryption_Event;
public static event ObjectEventHandler DllAesEncryption_GetVersionDataEvent;
public static void InitializeEncryption()
{
// register callback
fnAesVersionCallBack = AesEncryption_VersionCallback;
DLL_AES_Register_VersionCB(fnAesVersionCallBack);
fnAesEncryptionCallBack = cbAesEncryption;
DLL_AES_Register_EncryptionCB(fnAesEncryptionCallBack);
// call the function
DLL_AES_Activation();
}
#region Aes_Fuction
public static void AesEncryption(string inFileName, string outFileName, bool encrypt, bool compress)
{
IntPtr pInFileName = Marshal.StringToBSTR(inFileName);
IntPtr pOutFileName = Marshal.StringToBSTR(outFileName);
DLL_AES_Encryption(pInFileName, pOutFileName, encrypt, compress);
}
public static void AesEncryption_GetVersion()
{
DLL_SAES_Getversion();
}
#endregion
#region Aes_Callback
public static void cbAesEncryption(ref auth_encryption_status_t encryption_status)
{
if (DllAesEncryption_Event != null)
DllAesEncryption_Event(encryption_status);
}
private static void AesEncryption_VersionCallback(StringBuilder version)
{
try
{
if (DllAesEncryption_GetVersionDataEvent != null)
DllAesEncryption_GetVersionDataEvent(version);
}
catch
{
}
}
#endregion
}
}

View File

@ -0,0 +1,439 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace INT89DB_26.Part11_UserManager
{
#region UserItem
public class UserItem
{
#region Field
private string m_ID;
private string m_Password;
private string m_ResetPW;
private int m_ExpireId;
private int m_ExpirePassword;
private bool m_IsLockAccount;
private bool m_IsLockPassword;
private DateTime m_DatePasswordRegister;
private DateTime m_DateIdLogin;
private DateTime m_DateIdExpire;
private DateTime m_DatePasswordExpire;
private DataStore.UserGroup m_Group;
private bool m_IsAdmin;
private int m_ActiveLevel;
private int m_IsFirstPassword;
#endregion
#region Constructor
public UserItem()
{
this.Initialize();
}
#endregion
#region Property
public string ID
{
get { return this.m_ID; }
set { this.m_ID = value; }
}
public string Password
{
get { return this.m_Password; }
set { this.m_Password = value; }
}
public string ResetPW
{
get { return this.m_ResetPW; }
private set { this.m_ResetPW = value; }
}
public int ExpireId
{
get { return this.m_ExpireId; }
set { this.m_ExpireId = value; }
}
public int ExpirePassword
{
get { return this.m_ExpirePassword; }
set { this.m_ExpirePassword = value; }
}
public bool IsLockAccount
{
get { return this.m_IsLockAccount; }
set { this.m_IsLockAccount = value; }
}
public bool IsLockPassword
{
get { return this.m_IsLockPassword; }
set { this.m_IsLockPassword = value; }
}
public DateTime DatePasswordRegister
{
get { return this.m_DatePasswordRegister; }
set { this.m_DatePasswordRegister = value; }
}
public DateTime DateIdLogin
{
get { return this.m_DateIdLogin; }
set { this.m_DateIdLogin = value; }
}
public DateTime DateIdExpire
{
get { return this.m_DateIdExpire; }
set { this.m_DateIdExpire = value; }
}
public DateTime DatePasswordExpire
{
get { return this.m_DatePasswordExpire; }
set { this.m_DatePasswordExpire = value; }
}
public DataStore.UserGroup Group
{
get { return this.m_Group; }
set { this.m_Group = value; }
}
public bool IsAdmin
{
get { return this.m_IsAdmin; }
set { this.m_IsAdmin = value; }
}
public int ActiveLevel
{
get { return this.m_ActiveLevel; }
set { this.m_ActiveLevel = value; }
}
public int IsFirstPassword
{
get { return this.m_IsFirstPassword; }
set { this.m_IsFirstPassword = value; }
}
#endregion
#region Method
private void Initialize()
{
this.ID = "-";
this.Password = "-";
this.ResetPW = "Password12!";
this.ExpireId = 0;
this.ExpirePassword = 0;
this.DatePasswordRegister = DateTime.Now;
this.DateIdLogin = DateTime.Now;
this.DateIdExpire = DateTime.Now;
this.DatePasswordExpire = DateTime.Now;
this.Group = DataStore.UserGroup.None;
this.IsAdmin = false;
this.ActiveLevel = 1;
this.IsFirstPassword = 1; //[1] 최초 비밀번호(비밀번호 변경창 띄우기), [0] 비밀번호 변경완료됨
}
public int GetPasswordExpiryDday()
{
int ret = 0;
DateTime timeNow = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
TimeSpan dayDiff;
if (this.Group == DataStore.UserGroup.Admin || this.Group == DataStore.UserGroup.Developer)
ret = 9999;
else
{
dayDiff = timeNow.Date - this.DatePasswordExpire.Date;
ret = dayDiff.Days;
}
return ret;
}
#endregion
}
#endregion
#region UserGroup
public class UserGroup
{
#region Field
private UserGroupItem m_Level1;
private UserGroupItem m_Level2;
private UserGroupItem m_Level3;
private UserGroupItem m_NotLogin;
#endregion
#region Constructor
public UserGroup()
{
this.Initialize();
}
#endregion
#region Property
public UserGroupItem Level1
{
get { return this.m_Level1; }
set { this.m_Level1 = value; }
}
public UserGroupItem Level2
{
get { return this.m_Level2; }
set { this.m_Level2 = value; }
}
public UserGroupItem Level3
{
get { return this.m_Level3; }
set { this.m_Level3 = value; }
}
public UserGroupItem NotLogin
{
get { return this.m_NotLogin; }
set { this.m_NotLogin = value; }
}
#endregion
#region Method
private void Initialize()
{
this.Level1 = new UserGroupItem();
this.Level2 = new UserGroupItem();
this.Level3 = new UserGroupItem();
this.NotLogin = new UserGroupItem();
}
#endregion
}
#endregion
#region UserGroupItem
public class UserGroupItem
{
#region Field
private bool m_IsMainDisplayProductNo;
private bool m_IsMainDisplayWeightSetting;
private bool m_IsMainDisplayClear;
private bool m_IsMainDisplaySubMenu;
private bool m_IsMenuInformation;
private bool m_IsMenuConfiguration;
private bool m_IsMenuCommunication;
private bool m_IsMenuCalibration;
private bool m_IsMenuSystem;
private bool m_IsMenuMotor;
private bool m_IsMenuIOTest;
private bool m_IsMenuEquipment;
private bool m_IsMenuUpdate;
private bool m_IsMenuInitialization;
private bool m_IsMenuTime;
private bool m_IsMenuDataBackup;
private bool m_IsMenuStatistics;
private bool m_IsMenuViewer;
private bool m_IsMenuUser;
private bool m_IsMenuUserGroupEditor;
#endregion
#region Constructor
public UserGroupItem()
{
this.Initialize();
}
#endregion
#region Property
public bool IsMainDisplayProductNo
{
get { return this.m_IsMainDisplayProductNo; }
set { this.m_IsMainDisplayProductNo = value; }
}
public bool IsMainDisplayWeightSetting
{
get { return this.m_IsMainDisplayWeightSetting; }
set { this.m_IsMainDisplayWeightSetting = value; }
}
public bool IsMainDisplayClear
{
get { return this.m_IsMainDisplayClear; }
set { this.m_IsMainDisplayClear = value; }
}
public bool IsMainDisplaySubMenu
{
get { return this.m_IsMainDisplaySubMenu; }
set { this.m_IsMainDisplaySubMenu = value; }
}
public bool IsMenuTime
{
get { return this.m_IsMenuTime; }
set { this.m_IsMenuTime = value; }
}
public bool IsMenuInformation
{
get { return this.m_IsMenuInformation; }
set { this.m_IsMenuInformation = value; }
}
public bool IsMenuDataBackup
{
get { return this.m_IsMenuDataBackup; }
set { this.m_IsMenuDataBackup = value; }
}
public bool IsMenuCalibration
{
get { return this.m_IsMenuCalibration; }
set { this.m_IsMenuCalibration = value; }
}
public bool IsMenuCommunication
{
get { return this.m_IsMenuCommunication; }
set { this.m_IsMenuCommunication = value; }
}
public bool IsMenuConfiguration
{
get { return this.m_IsMenuConfiguration; }
set { this.m_IsMenuConfiguration = value; }
}
public bool IsMenuSystem
{
get { return this.m_IsMenuSystem; }
set { this.m_IsMenuSystem = value; }
}
public bool IsMenuMotor
{
get { return this.m_IsMenuMotor; }
set { this.m_IsMenuMotor = value; }
}
public bool IsMenuUpdate
{
get { return this.m_IsMenuUpdate; }
set { this.m_IsMenuUpdate = value; }
}
public bool IsMenuInitialization
{
get { return this.m_IsMenuInitialization; }
set { this.m_IsMenuInitialization = value; }
}
public bool IsMenuEquipment
{
get { return this.m_IsMenuEquipment; }
set { this.m_IsMenuEquipment = value; }
}
public bool IsMenuIOTest
{
get { return this.m_IsMenuIOTest; }
set { this.m_IsMenuIOTest = value; }
}
public bool IsMenuStatistics
{
get { return this.m_IsMenuStatistics; }
set { this.m_IsMenuStatistics = value; }
}
public bool IsMenuUser
{
get { return this.m_IsMenuUser; }
set { this.m_IsMenuUser = value; }
}
public bool IsMenuViewer
{
get { return this.m_IsMenuViewer; }
set { this.m_IsMenuViewer = value; }
}
public bool IsMenuUserGroupEditor
{
get { return this.m_IsMenuUserGroupEditor; }
set { this.m_IsMenuUserGroupEditor = value; }
}
#endregion
#region Method
private void Initialize()
{
this.IsMainDisplayProductNo = false;
this.IsMainDisplayWeightSetting = false;
this.IsMainDisplayClear = false;
this.IsMainDisplaySubMenu = false;
this.IsMenuTime = false;
this.IsMenuInformation = true;
this.IsMenuDataBackup = false;
this.IsMenuCalibration = false;
this.IsMenuCommunication = false;
this.IsMenuConfiguration = false;
this.IsMenuSystem = false;
this.IsMenuMotor = false;
this.IsMenuUpdate = false;
this.IsMenuInitialization = false;
this.IsMenuEquipment = false;
this.IsMenuIOTest = false;
this.IsMenuStatistics = false;
this.IsMenuUser = true;
this.IsMenuUserGroupEditor = false;
this.IsMenuViewer = false;
}
#endregion
}
#endregion
#region StructUserGroupItem
[StructLayout(LayoutKind.Sequential)]
public struct StructUserGroupItem
{
public bool IsMainDisplayProductNo;
public bool IsMainDisplayWeightSetting;
public bool IsMainDisplayClear;
public bool IsMainDispalySubMenu;
public bool IsMenuTimeSetting;
public bool IsMenuInformation;
public bool IsMenuDataBackup;
public bool IsMenuCalibration;
public bool IsMenuCommunication;
public bool IsMenuConfiguration;
public bool IsMenuSystemSetting;
public bool IsMenuMotorSetting;
public bool IsMenuUpdate;
public bool IsMenuFactoryReset;
public bool IsMenuEquipmentSetting;
public bool IsMenuIOTest;
public bool IsMenuDataStatistics;
public bool IsMenuUserSetting;
public bool IsMenuUserGroupSetting;
public bool IsMenuDataViewer;
public bool Dummy1;
public bool Dummy2;
public bool Dummy3;
public bool Dummy4;
public bool Dummy5;
public bool Dummy6;
public bool Dummy7;
public bool Dummy8;
public bool Dummy9;
public bool Dummy10;
public bool Dummy11;
public bool Dummy12;
public bool Dummy13;
public bool Dummy14;
public bool Dummy15;
public bool Dummy16;
public bool Dummy17;
public bool Dummy18;
public bool Dummy19;
public bool Dummy20;
}
#endregion
}

View File

@ -0,0 +1,185 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace INT89DB_26.Part11_UserManager
{
public partial class UserManager
{
private const string PathDll = "SD Card\\Run\\DllUserMgr.dll";
private delegate void fnUserMgrVersionCB(StringBuilder version);
private static fnUserMgrVersionCB fnUserMgrVersionCallBack;
private delegate void fnUserMgrDebugCB(int level, StringBuilder pMessage);
private static fnUserMgrDebugCB fnUserMgrDebugCallBack;
private delegate void fnUserMgrNewUserCB(IntPtr pBuffer);
private static fnUserMgrNewUserCB fnUserMgrNewUserCallBack;
private delegate void fnUserMgrAddUserCB(ref UserMgr_user_add_t user_add);
private static fnUserMgrAddUserCB fnUserMgrAddUserCallBack;
private delegate void fnUserMgrModifyUserCB(ref UserMgr_user_modify_t user_mod);
private static fnUserMgrModifyUserCB fnUserMgrModifyUserCallBack;
private delegate void fnUserMgrModifyInfoCB(ref UserMgr_user_info_t user_info);
private static fnUserMgrModifyInfoCB fnUserMgrModifyInfoCallBack;
private delegate void fnUserMgrDelUserCB(ref UserMgr_user_del_t user_del);
private static fnUserMgrDelUserCB fnUserMgrDelUserCallBack;
private delegate void fnUserMgrUserLockCB(ref UserMgr_user_lock_t user_lock);
private static fnUserMgrUserLockCB fnUserMgrUserLockCallBack;
private delegate void fnUserMgrDefaultSettingCB(int status);
private static fnUserMgrDefaultSettingCB fnUserMgrDefaultSettingCallBack;
private delegate void fnUserMgrLoginCB(int status, IntPtr pBuffer);
private static fnUserMgrLoginCB fnUserMgrLoginCallBack;
private delegate void fnUserMgrLogoutCB(int status);
private static fnUserMgrLogoutCB fnUserMgrLogoutCallBack;
private delegate void fnUserMgrLoginTimeoutCB(ref UserMgr_login_timeout_t timeout);
private static fnUserMgrLoginTimeoutCB fnUserMgrLoginTimeoutCallBack;
private delegate void fnUserMgrGetListCB(ref UserMgr_user_list_t user_list);
private static fnUserMgrGetListCB fnUserMgrGetListCallBack;
private delegate void fnUserMgrGetListNameCB(ref UserMgr_user_list_name_t user_name);
private static fnUserMgrGetListNameCB fnUsermgrGetListNameCallBack;
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_VersionCB(fnUserMgrVersionCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_DebugCB(fnUserMgrDebugCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_NewStatusCB(fnUserMgrNewUserCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_AddStatusCB(fnUserMgrAddUserCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_ModifyUserCB(fnUserMgrModifyUserCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_ModifyStatusCB(fnUserMgrModifyInfoCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_DelStatusCB(fnUserMgrDelUserCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_UserLockCB(fnUserMgrUserLockCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_DefaultSettingCB(fnUserMgrDefaultSettingCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_LoginStausCB(fnUserMgrLoginCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_LogoutStausCB(fnUserMgrLogoutCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_LoginTimeoutCB(fnUserMgrLoginTimeoutCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_GetListCB(fnUserMgrGetListCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Register_GetListNameCB(fnUserMgrGetListNameCB func);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_HelloWorld();
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Getversion();
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Activation();
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern void DLL_UserMgr_Deactivation();
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserNew(IntPtr user_id, IntPtr user_pw, int fadmin, int expire_pw, int expire_account, int active_level, IntPtr menuId);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserAdd(IntPtr user_id, IntPtr user_pw, int fadmin, int expire_pw, int expire_account, int active_level, DateTime_t dateRegister, DateTime_t dateLogin);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserAddHistoryPW(IntPtr user_id, IntPtr user_pw);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserResetHistoryPW(IntPtr user_id);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserModify(IntPtr user_id, IntPtr user_pw, int fadmin, int expire_pw, int expire_account, int active_level, IntPtr menuId);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserModifyPW(IntPtr user_id, IntPtr user_pw);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserModifyPWDirect(IntPtr user_id, IntPtr user_pw);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserModifyID(IntPtr user_org_id, IntPtr user_new_id);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserResetPWDirect(IntPtr user_id, IntPtr user_pw);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserModifyOthers(IntPtr user_id, int fadmin, int expire_pw, int expire_account, int active_level);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserDel(IntPtr user_id);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserAllDel_Default();
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserLoginFailLockSet(IntPtr user_id);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserLockRelease(IntPtr user_id, bool lock_account, bool lock_password);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserLockGet(IntPtr user_id);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserLoginCB(IntPtr user_id, IntPtr user_pw);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserLoginDirect(IntPtr user_id, IntPtr user_pw, ref UserMgr_user_info_t user_info);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_UserLogout();
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_AutoLogoutTimeoutReset();
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_AutoLogoutTimeoutPause();
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_AutoLogoutSetTimeout(int timeout_min, int warning_timeout_sec);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_GetUserList(int index);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_GetUserListID(IntPtr user_id);
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_GetUserListName();
[DllImport(PathDll, CallingConvention = CallingConvention.Winapi)]
private static extern int DLL_UserMgr_SetFolder(IntPtr folder);
}
}

View File

@ -0,0 +1,379 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace INT89DB_26.Part11_UserManager
{
public partial class UserManager
{
#region Field
// fnUserMgrDebugCB
public const int USERMGR_DBG_NORMAL = 0x0001;
public const int USERMGR_DBG_THREAD = 0x0002;
public const int USERMGR_DBG_LIST = 0x0004;
// fnUserMgrLoginCB
public const int USERMGR_LOGIN_STATUS_OK = 0x00;
public const int USERMGR_LOGIN_STATUS_ID_FAIL = 0x01;
public const int USERMGR_LOGIN_STATUS_PW_FAIL = 0x02;
// fnUserMgrLogoutCB
public const int USERMGR_LOGOUT_STATUS_OK = 0x00;
public const int USERMGR_LOGOUT_STATUS_FAIL = 0x01;
// fnUserMgrDelUserCB
//public const int USERMGR_DEL_STATUS_OK = 0x00;
//public const int USERMGR_DEL_STATUS_NOK = 0x01;
// lock_status
public const int USERMGR_LOCK_STATUS_NONE = 0x00;
public const int USERMGR_LOCK_STATUS_EXPIRE = 0x01;
public const int USERMGR_ID_MIN_LENGTH = 6;
public const int UERRMGR_ID_MAX_LENGTH = 20;
public const int USERMGR_PW_MIN_LENGTH = 6;
public const int USERMGR_PW_MAX_LENGTH = 20;
public const int MAX_USER_ID_LENGTH = 32;
public const int MAX_USER_PW_LEGNTH = 32;
public const int MAX_USER_HISTORY_PW_COUNT = 3;
public const int INVALID_VALUE = -1;
public const int USERMGR_USER_ADMINISTRATOR = 1;
public const int USERMGR_USER_NORMAL = 0;
public const int EXPIRE_PERIOD_PASSWORD_NOT_SUPPORT = 0;
public const int MAX_EXPIRE_PERIOD_PASSWORD = 90;
public const int DEFAULT_PASSWORD_EXPIRE_PERIOD = 90; // Days password change
public const int EXPIRE_PERIOD_ACCOUNT_NOT_SUPPORT = 0;
public const int MAX_EXPIRE_PERIOD_ACCOUNT = 180;
public const int DEFAULT_ACCOUNT_LOCK_PERIOD = 180; // Days login
public const int MAX_LOGIN_AUTO_TIMEOUT = 90;
public const int DEFAULT_LOGIN_WARNING_TIMEOUT_SEC = 60; // 60 sec during login, auto logout warning time
public const int DEFAULT_LOGIN_AUTO_TIMEOUT_MIN = 30; // 30 min during login, auto logout timeout
public const int USER_MENU_ID_MAX = 30; // MenuID_t buffer Size
public const int MAX_ACTIVE_LEVEL = 10; // menu active level
public const int INVALID_ACTIVE_LEVEL = 0;
#endregion
#region Enum E_user_mgr_status
public enum E_user_mgr_status
{
USER_MGR_STATUS_OK = 0x00,
// error status
USER_MGR_STATUS_ID_NOT_FOUND, // 1 - not found the user id
USER_MGR_STATUS_ID_DUPLICATE, // 2 - duplicate on id
USER_MGR_STATUS_ID_LENGTH_UNDER, // 3 - under the minimum length of id
USER_MGR_STATUS_ID_LENGTH_OVER, // 4 - over the maximum length of id
USER_MGR_STATUS_ID_CONT_LETTER, // 5 - continue characters or duplicate characters of id
USER_MGR_STATUS_ID_INVALID_CHAR, // 6 - include the invalid character on id
USER_MGR_STATUS_ID_ACCOUNT_LOCK, // 7 - Account Lock
USER_MGR_STATUS_PW_DUPLICATE_HISTORY, // 8 - duplicate on password history
USER_MGR_STATUS_PW_LENGTH_UNDER, // 9 - under the minimum length of password
USER_MGR_STATUS_PW_LENGTH_OVER, // 10 - over the maximum length of password
USER_MGR_STATUS_PW_CONT_LETTER, // 11 - continue characters or duplicate characters of password
USER_MGR_STATUS_PW_INVALID_CHAR, // 12 - include the invalid character on password
USER_MGR_STATUS_PW_EACH_MIN_CHAR, // 13 - not include minimum characters on password
USER_MGR_STATUS_PW_NOT_SAME, // 14 - password error
USER_MGR_STATUS_PW_PASSWORD_LOCK, // 15 - Password Lock
USER_MGR_STATUS_OTHER_OVER_PASSWORD_PERIOD, // 16 - over maximum password expire period (days)
USER_MGR_STATUS_OTHER_OVER_ACCOUNT_PERIOD, // 17 - over maximum account expire period (days)
USER_MGR_STATUS_OTHER_OVER_LOGIN_TIMEOUT, // 18 - over maximum auto logout time (minute)
USER_MGR_STATUS_MAX,
};
#endregion
#region Enum E_user_mgr_menu_id
public enum E_user_mgr_menu_id
{
USER_MENU_ID_RESERVE_0 = 0x00,
USER_MENU_ID_RESERVE_1,
USER_MENU_ID_RESERVE_2,
USER_MENU_ID_RESERVE_3,
USER_MENU_ID_RESERVE_4,
USER_MENU_ID_RESERVE_5,
USER_MENU_ID_RESERVE_6,
USER_MENU_ID_RESERVE_7,
USER_MENU_ID_RESERVE_8,
USER_MENU_ID_RESERVE_9,
USER_MENU_ID_RESERVE_10,
USER_MENU_ID_RESERVE_11,
USER_MENU_ID_RESERVE_12,
USER_MENU_ID_RESERVE_13,
USER_MENU_ID_RESERVE_14,
USER_MENU_ID_RESERVE_15,
USER_MENU_ID_RESERVE_16,
USER_MENU_ID_RESERVE_17,
USER_MENU_ID_RESERVE_18,
USER_MENU_ID_RESERVE_19,
USER_MENU_ID_RESERVE_20,
USER_MENU_ID_RESERVE_21,
USER_MENU_ID_RESERVE_22,
USER_MENU_ID_RESERVE_23,
USER_MENU_ID_RESERVE_24,
USER_MENU_ID_RESERVE_25,
USER_MENU_ID_RESERVE_26,
USER_MENU_ID_RESERVE_27,
USER_MENU_ID_RESERVE_28,
USER_MENU_ID_RESERVE_29,
USER_MENU_ID_MAX,
};
#endregion
#region Struct MenuID_t
[StructLayout(LayoutKind.Sequential)]
public struct MenuID_t
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)E_user_mgr_menu_id.USER_MENU_ID_MAX)]
public bool[] fMenu;
}
#endregion
#region Struct DateTime_t
[StructLayout(LayoutKind.Sequential)]
public struct DateTime_t
{
[MarshalAs(UnmanagedType.U2)]
public UInt16 year;
[MarshalAs(UnmanagedType.U1)]
public byte month;
[MarshalAs(UnmanagedType.U1)]
public byte day;
[MarshalAs(UnmanagedType.U1)]
public byte hour;
[MarshalAs(UnmanagedType.U1)]
public byte minute;
[MarshalAs(UnmanagedType.U1)]
public byte second;
[MarshalAs(UnmanagedType.U1)]
public byte reserved;
public static int Size
{
get { return (int)(sizeof(UInt16) + 6); }
}
public void SetDate(UInt16 year, byte month, byte day)
{
this.year = year;
this.month = month;
this.day = day;
}
public void SetTime(byte hour, byte minute, byte second)
{
this.hour = hour;
this.minute = minute;
this.second = second;
}
public string GetDateTime()
{
string dateTime;
dateTime = string.Format("{0:D4}{1:D2}{2:D2}{3:D2}{4:D2}{5:D2}", year, month, day, hour, minute, second);
return dateTime;
}
}
#endregion
#region Struct UserMgr_user_info_t
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UserMgr_user_info_t
{
[MarshalAs(UnmanagedType.I4)]
public Int32 status; // user_new_add_status_e
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
public string user_id;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_PW_LEGNTH)]
public string user_pw;
[MarshalAs(UnmanagedType.I4)]
public Int32 fadmin;
[MarshalAs(UnmanagedType.I4)]
public Int32 password_expire_period; // password lock date
[MarshalAs(UnmanagedType.I4)]
public Int32 id_expire_period; // id lock date
[MarshalAs(UnmanagedType.I4)]
public Int32 id_flock_status; // user ID (account) lock status
[MarshalAs(UnmanagedType.I4)]
public Int32 password_flock_status; // password lock status (need to change password)
[MarshalAs(UnmanagedType.Struct)]
public DateTime_t password_register_date; // date/time when the user password was registered or changed
[MarshalAs(UnmanagedType.Struct)]
public DateTime_t id_login_date; // date/time when the user was login
[MarshalAs(UnmanagedType.Struct)]
public DateTime_t password_expire_date; // Password Expiration Date
[MarshalAs(UnmanagedType.Struct)]
public DateTime_t id_expire_date; // Account Expiration Date
[MarshalAs(UnmanagedType.Struct)]
public MenuID_t menuID; // flag of Menu IDs
[MarshalAs(UnmanagedType.I4)]
public Int32 active_level; // menu active level : max : MAX_ACTIVE_LEVEL
[MarshalAs(UnmanagedType.I4)]
public Int32 fFirstPW; // [1] First (request to modify), [0] Next (not request)
[MarshalAs(UnmanagedType.I4)]
public Int32 login_fail_count; // [1] First (request to modify), [0] Next (not request)
}
#endregion
#region Struct UserMgr_user_modify_t
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UserMgr_user_modify_t
{
public int status;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
public string user_id;
}
#endregion
#region Struct UserMgr_user_del_t
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UserMgr_user_del_t
{
public int status;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
public string user_id;
}
#endregion
#region Struct UserMgr_login_timeout_t
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UserMgr_login_timeout_t
{
public int remainder_time;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
public string user_id;
}
#endregion
#region Struct UserMgr_user_add_t
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UserMgr_user_add_t
{
public int status;
public int flock_status_account;
public int flock_status_password;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
public string user_id;
}
#endregion
#region Struct UserMgr_user_lock_t
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UserMgr_user_lock_t
{
public int flock_status_account;
public int flock_status_password;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
public string user_id;
}
#endregion
#region Struct UserMgr_user_list_t
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UserMgr_user_list_t
{
[MarshalAs(UnmanagedType.I4)]
public int status; // user_new_add_status_e
[MarshalAs(UnmanagedType.I4)]
public int total_count;
[MarshalAs(UnmanagedType.I4)]
public int index;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
public string user_id;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_PW_LEGNTH)]
public string user_pw;
[MarshalAs(UnmanagedType.I4)]
public Int32 fadmin;
[MarshalAs(UnmanagedType.I4)]
public Int32 password_expire_period; // password lock
[MarshalAs(UnmanagedType.I4)]
public Int32 id_expire_period; // account lock
[MarshalAs(UnmanagedType.I4)]
public Int32 id_flock_status; // user ID (account) lock
[MarshalAs(UnmanagedType.I4)]
public Int32 flock_status_password; // password lock (need to change password)
[MarshalAs(UnmanagedType.Struct)]
public DateTime_t password_register_date; // date/time when the user password was registered or changed
[MarshalAs(UnmanagedType.Struct)]
public DateTime_t id_login_date; // date/time when the user was login
[MarshalAs(UnmanagedType.Struct)]
public DateTime_t password_expire_date; // Password Expiration Date
[MarshalAs(UnmanagedType.Struct)]
public DateTime_t id_expire_date; // Account Expiration Date
[MarshalAs(UnmanagedType.I4)]
public Int32 active_level; // menu active level : max : MAX_ACTIVE_LEVEL
[MarshalAs(UnmanagedType.Struct)]
public MenuID_t menuID; // flag of Menu IDs
[MarshalAs(UnmanagedType.I4)]
public Int32 fFirstPW; // flag first password
}
#endregion
#region Struct UserMgr_user_list_name_t
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct UserMgr_user_list_name_t
{
public int total_count;
public int index;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_USER_ID_LENGTH)]
public string user_id;
}
#endregion
}
}

View File

@ -0,0 +1,415 @@
using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace INT89DB_26.Part11_UserManager
{
public partial class UserManager
{
public delegate void ObjectEventHandler(object data);
public static event ObjectEventHandler UserListNewDataEvent;
public static event ObjectEventHandler UserListAddDataEvent;
public static event ObjectEventHandler UserListModifyUserDataEvent;
public static event ObjectEventHandler UserListModifyInfoDataEvent;
public static event ObjectEventHandler UserListDeleteDataEvent;
public static event ObjectEventHandler UserListLockDataEvent;
public static event ObjectEventHandler UserListDefautSettingDataEvent;
public static event ObjectEventHandler UserListLoginTimeoutDataEvent;
public static event ObjectEventHandler UserListGetListDataEvent;
public static event ObjectEventHandler UserListGetListNameDataEvent;
public static event ObjectEventHandler UserListGetVersionDataEvent;
public delegate void IntObjectEventHandler(int status, object data);
public static event IntObjectEventHandler UserListLoginDataEvent;
public delegate void IntEventHandler(int status);
public static event IntEventHandler UserListLogoutDataEvent;
public static void IntializeUserManager(string folder)
{
// regisetr callback
fnUserMgrVersionCallBack = UserManager_VersionCallback;
DLL_UserMgr_Register_VersionCB(fnUserMgrVersionCallBack);
fnUserMgrDebugCallBack = UserManager_DebugCallback;
DLL_UserMgr_Register_DebugCB(fnUserMgrDebugCallBack);
fnUserMgrNewUserCallBack = UserManager_NewUserCallBack;
DLL_UserMgr_Register_NewStatusCB(fnUserMgrNewUserCallBack);
fnUserMgrAddUserCallBack = UserManager_AddUserCallBack;
DLL_UserMgr_Register_AddStatusCB(fnUserMgrAddUserCallBack);
fnUserMgrModifyUserCallBack = UserManager_ModifyUserCallBack;
DLL_UserMgr_Register_ModifyUserCB(fnUserMgrModifyUserCallBack);
fnUserMgrModifyInfoCallBack = UserManager_ModifyInfoCallBack;
DLL_UserMgr_Register_ModifyStatusCB(fnUserMgrModifyInfoCallBack);
fnUserMgrDelUserCallBack = UserManager_DelUserCallBack;
DLL_UserMgr_Register_DelStatusCB(fnUserMgrDelUserCallBack);
fnUserMgrUserLockCallBack = UserManager_LockCallBack;
DLL_UserMgr_Register_UserLockCB(fnUserMgrUserLockCallBack);
fnUserMgrDefaultSettingCallBack = UserManager_DefaultSettingCallBack;
DLL_UserMgr_Register_DefaultSettingCB(fnUserMgrDefaultSettingCallBack);
fnUserMgrLoginCallBack = UserManager_LoginCallBack;
DLL_UserMgr_Register_LoginStausCB(fnUserMgrLoginCallBack);
fnUserMgrLogoutCallBack = UserManager_LogoutCallBack;
DLL_UserMgr_Register_LogoutStausCB(fnUserMgrLogoutCallBack);
fnUserMgrLoginTimeoutCallBack = UserManager_LoginTimeoutCallBack;
DLL_UserMgr_Register_LoginTimeoutCB(fnUserMgrLoginTimeoutCallBack);
fnUserMgrGetListCallBack = UserManager_GetListCallBack;
DLL_UserMgr_Register_GetListCB(fnUserMgrGetListCallBack);
fnUsermgrGetListNameCallBack = UserManager_GetListNameCallBack;
DLL_UserMgr_Register_GetListNameCB(fnUsermgrGetListNameCallBack);
DLL_UserMgr_Activation();
IntPtr pFolder = Marshal.StringToBSTR(folder);
DLL_UserMgr_SetFolder(pFolder);
}
#region UM_FUNCTION
public static void UserManager_GetUserList(String data)
{
if (String.IsNullOrEmpty(data) == true)
DLL_UserMgr_GetUserListID(IntPtr.Zero);
else
{
IntPtr pID = Marshal.StringToBSTR(data);
DLL_UserMgr_GetUserListID(pID);
}
}
public static void UserManager_UserAdd(String sID, String sPW, int fAdmin, int expire_period_pw, int expire_period_account, int active_level, DateTime_t password_date, DateTime_t account_date)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
IntPtr pPW = Marshal.StringToBSTR(sPW.ToString());
DLL_UserMgr_UserAdd(pID, pPW, fAdmin, expire_period_pw, expire_period_account, active_level, password_date, account_date);
}
public static void UserManager_UserNew(String sID, String sPW, int fAdmin, int expire_period_pw, int expire_period_account, int active_level, MenuID_t menuId)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
IntPtr pPW = Marshal.StringToBSTR(sPW.ToString());
IntPtr pMenuId = Marshal.AllocHGlobal(Marshal.SizeOf(menuId));
Marshal.StructureToPtr(menuId, pMenuId, false);
DLL_UserMgr_UserNew(pID, pPW, fAdmin, expire_period_pw, expire_period_account, active_level, pMenuId);
}
public static void UserManager_UserAddHistoryPW(String sID, String sHistoryPW)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
IntPtr pPW = Marshal.StringToBSTR(sHistoryPW.ToString());
DLL_UserMgr_UserAddHistoryPW(pID, pPW);
}
public static void UserManager_UserResetHistoryPW(String sID)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
DLL_UserMgr_UserResetHistoryPW(pID);
}
public static void UserManager_UserModify(String sID, String sPW, int fAdmin, int expire_period_pw, int expire_period_account, int active_level, MenuID_t menuId)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
IntPtr pPW = Marshal.StringToBSTR(sPW.ToString());
IntPtr pMenuId = Marshal.AllocHGlobal(Marshal.SizeOf(menuId));
Marshal.StructureToPtr(menuId, pMenuId, false);
DLL_UserMgr_UserModify(pID, pPW, fAdmin, expire_period_pw, expire_period_account, active_level, pMenuId);
}
public static void UserManager_UserModifyPW(String sID, String sNewPW)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
IntPtr pPW = Marshal.StringToBSTR(sNewPW.ToString());
DLL_UserMgr_UserModifyPW(pID, pPW);
}
public static int UserManager_UserModifyPWDirect(String sID, String sNewPW)
{
int ret = 0;
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
IntPtr pPW = Marshal.StringToBSTR(sNewPW.ToString());
ret = DLL_UserMgr_UserModifyPWDirect(pID, pPW);
return ret;
}
public static int UserManager_UserResetPWDirect(String sID, String sNewPW)
{
int ret = 0;
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
IntPtr pPW = Marshal.StringToBSTR(sNewPW.ToString());
ret = DLL_UserMgr_UserResetPWDirect(pID, pPW);
return ret;
}
public static void UserManager_UserModifyID(String sID, String sNewID)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
IntPtr pNewID = Marshal.StringToBSTR(sNewID.ToString());
DLL_UserMgr_UserModifyID(pID, pNewID);
}
public static void UserManager_UserModifyOthers(String sID, int fadmin, int period_expire_pw, int period_expire_account, int active_level)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
DLL_UserMgr_UserModifyOthers(pID, fadmin, period_expire_pw, period_expire_account, active_level);
}
public static void UserManager_UserDel(String sID)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
DLL_UserMgr_UserDel(pID);
}
public static void UserManager_UserAllDel()
{
DLL_UserMgr_UserAllDel_Default();
}
public static void UserManager_UserLockRelease(String sID, bool lock_account, bool lock_password)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
DLL_UserMgr_UserLockRelease(pID, lock_account, lock_password);
}
public static void UserManager_UserLockGet(String sID)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
DLL_UserMgr_UserLockGet(pID);
}
public static void UserManager_UserLoginFailLockSet(String sID)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
DLL_UserMgr_UserLoginFailLockSet(pID);
}
public static void UserManager_UserLoginCB(String sID, String sPW)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
IntPtr pPW = Marshal.StringToBSTR(sPW.ToString());
DLL_UserMgr_UserLoginCB(pID, pPW);
}
public static void UserManager_UserLoginDirect(string sID, string sPW, ref UserMgr_user_info_t user_info)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
IntPtr pPW = Marshal.StringToBSTR(sPW.ToString());
DLL_UserMgr_UserLoginDirect(pID, pPW, ref user_info);
}
public static void UserManager_UserLogout()
{
DLL_UserMgr_UserLogout();
}
public static void UserManager_AutoLogoutTimeoutReset()
{
DLL_UserMgr_AutoLogoutTimeoutReset();
}
public static void UserManager_AutoLogoutTimeoutPause()
{
DLL_UserMgr_AutoLogoutTimeoutPause();
}
public static void UserManager_AutoLogoutSetTimeout(int timeout_min, int warning_timeout_sec)
{
DLL_UserMgr_AutoLogoutSetTimeout(timeout_min, warning_timeout_sec);
}
public static void UserManager_GetUserList(int index)
{
DLL_UserMgr_GetUserList(index);
}
public static void UserManager_GetUserListID(String sID)
{
IntPtr pID = Marshal.StringToBSTR(sID.ToString());
DLL_UserMgr_GetUserListID(pID);
}
public static void UserManager_GetUserListName()
{
DLL_UserMgr_GetUserListName();
}
public static void UserManager_GetVersion()
{
DLL_UserMgr_Getversion();
}
#endregion
#region UM_CALLBACK
private static void UserManager_GetListNameCallBack(ref UserMgr_user_list_name_t user_name)
{
try
{
if (UserListGetListNameDataEvent != null)
UserListGetListNameDataEvent(user_name);
}
catch
{
}
}
private static void UserManager_GetListCallBack(ref UserMgr_user_list_t user_list)
{
try
{
if (UserListGetListDataEvent != null)
UserListGetListDataEvent(user_list);
}
catch
{
}
}
private static void UserManager_LoginTimeoutCallBack(ref UserMgr_login_timeout_t timeout)
{
try
{
if (UserListLoginTimeoutDataEvent != null)
UserListLoginTimeoutDataEvent(timeout);
}
catch
{
}
}
private static void UserManager_LogoutCallBack(int status)
{
try
{
if (UserListLogoutDataEvent != null)
UserListLogoutDataEvent(status);
}
catch
{
}
}
private static void UserManager_LoginCallBack(int status, IntPtr pBuffer)
{
try
{
if (UserListLoginDataEvent != null)
UserListLoginDataEvent(status, pBuffer);
}
catch
{
}
}
private static void UserManager_LockCallBack(ref UserMgr_user_lock_t user_lock)
{
try
{
if (UserListLockDataEvent != null)
UserListLockDataEvent(user_lock);
}
catch
{
}
}
private static void UserManager_DefaultSettingCallBack(int status)
{
try
{
if (UserListDefautSettingDataEvent != null)
UserListDefautSettingDataEvent(status);
}
catch
{
}
}
private static void UserManager_DelUserCallBack(ref UserMgr_user_del_t user_del)
{
try
{
if (UserListDeleteDataEvent != null)
UserListDeleteDataEvent(user_del);
}
catch
{
}
}
private static void UserManager_ModifyUserCallBack(ref UserMgr_user_modify_t user_mod)
{
try
{
if (UserListModifyUserDataEvent != null)
UserListModifyUserDataEvent(user_mod);
}
catch
{
}
}
private static void UserManager_ModifyInfoCallBack(ref UserMgr_user_info_t user_info)
{
try
{
if (UserListModifyInfoDataEvent != null)
UserListModifyInfoDataEvent(user_info);
}
catch
{
}
}
private static void UserManager_AddUserCallBack(ref UserMgr_user_add_t user_add)
{
try
{
if (UserListAddDataEvent != null)
UserListAddDataEvent(user_add);
}
catch
{
}
}
private static void UserManager_NewUserCallBack(IntPtr pBuffer)
{
try
{
if (pBuffer != IntPtr.Zero)
{
UserMgr_user_info_t user_info = (UserMgr_user_info_t)Marshal.PtrToStructure(pBuffer, typeof(UserMgr_user_info_t));
if (UserListNewDataEvent != null)
UserListNewDataEvent(user_info);
}
}
catch
{
}
}
private static void UserManager_DebugCallback(int type, StringBuilder pMessage)
{
try
{
}
catch
{
}
}
private static void UserManager_VersionCallback(StringBuilder version)
{
try
{
if (UserListGetVersionDataEvent != null)
UserListGetVersionDataEvent(version);
}
catch
{
}
}
#endregion
}
}

View File

@ -13,6 +13,12 @@
멀티형 2~6열 컨베어 계량기 멀티형 2~6열 컨베어 계량기
*/ */
@ Ver 8.7.0 by CJY
- 2026.02.03
- Ver 8.6.0 Modify
- Framework : SmartX Framework V3.1.1(update: 2019.03.21)
- Pay Service 추가
@ Ver 8.6.0 by LSJ @ Ver 8.6.0 by LSJ
- 2026.01.13 - 2026.01.13
- Ver 8.5.0 Modify - Ver 8.5.0 Modify