- 맵 에디터 메인폼 UI 개선 - AGV 캔버스 컨트롤 수정 - 설정 파일 업데이트 - 상태머신 AGV 로직 조정 - 자동 모드 화면 개선 - 메인폼 디자이너 및 로직 수정 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
625 lines
23 KiB
C#
625 lines
23 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.ComponentModel;
|
|
using System.Drawing.Design;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Management;
|
|
using System.IO.Ports;
|
|
using AR;
|
|
|
|
namespace Project
|
|
{
|
|
public class MyUITypeEditor : UITypeEditor
|
|
{
|
|
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
|
|
{
|
|
using (var f = new System.Windows.Forms.Form
|
|
{
|
|
WindowState = System.Windows.Forms.FormWindowState.Normal,
|
|
StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen,
|
|
Size = new System.Drawing.Size(800, 400),
|
|
MaximizeBox = false,
|
|
MinimizeBox = false,
|
|
Text = "Select Port",
|
|
FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog
|
|
})
|
|
{
|
|
var lst = new System.Windows.Forms.ListBox
|
|
{
|
|
Font = new System.Drawing.Font("Consolas", 15, System.Drawing.FontStyle.Bold),
|
|
Dock = System.Windows.Forms.DockStyle.Fill,
|
|
};
|
|
lst.DoubleClick += (s1, e1) =>
|
|
{
|
|
if (lst.SelectedItem != null) f.DialogResult = System.Windows.Forms.DialogResult.OK;
|
|
};
|
|
using (var searcher = new ManagementObjectSearcher("SELECT * FROM WIN32_SerialPort"))
|
|
{
|
|
var portnames = System.IO.Ports.SerialPort.GetPortNames().OrderBy(t => t);
|
|
var ports = searcher.Get().Cast<ManagementBaseObject>().ToList();
|
|
foreach (var port in portnames)
|
|
{
|
|
var desc = "";
|
|
var portInfo = ports.Where(t => t["DeviceId"].ToString() == port).FirstOrDefault();
|
|
if (portInfo != null) desc = portInfo["Caption"].ToString();
|
|
lst.Items.Add(string.Format("{0} - {1}", port, desc));
|
|
}
|
|
}
|
|
f.Controls.Add(lst);
|
|
if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
|
|
{
|
|
var name = lst.SelectedItem.ToString().Split('-');
|
|
return name[0].Trim();
|
|
}
|
|
else
|
|
{
|
|
return base.EditValue(context, provider, value);
|
|
}
|
|
}
|
|
|
|
}
|
|
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
|
|
{
|
|
return UITypeEditorEditStyle.Modal;
|
|
}
|
|
}
|
|
|
|
public class CSetting : AR.Setting
|
|
{
|
|
#region "log"
|
|
|
|
[Category("System Log"), DisplayName("Digital Input/Output"),
|
|
Description("입/출력 장치의 상태 변화를 기록 합니다.")]
|
|
public Boolean Log_IO { get; set; }
|
|
[Category("System Log"), DisplayName("Network Alive Check(Ping)"),
|
|
Description("서버와의 통신검사 로그를 기록 합니다")]
|
|
public Boolean Log_Ping { get; set; }
|
|
[Category("System Log"), DisplayName("S/M Step Change"),
|
|
Description("상태머신의 변화 상태를 기록 합니다.")]
|
|
public Boolean Log_StepChange { get; set; }
|
|
[Category("System Log"), DisplayName("Socket Recv Message"),
|
|
Description("서버 수신 메세지를 기록 합니다.")]
|
|
public Boolean LOg_SocketRecv { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region "Communication"
|
|
|
|
[Browsable(false), Category("Commnunication Setting"), DisplayName("XBee PortName"), Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
|
|
public string Port_XBE { get; set; }
|
|
|
|
[Browsable(false), Category("Commnunication Setting"), DisplayName("RFID PortName"), Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
|
|
public string Port_AGV { get; set; }
|
|
|
|
[Browsable(false), Category("Commnunication Setting"), DisplayName("Xbee ID"), Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
|
|
public byte XBE_ID { get; set; }
|
|
|
|
[Browsable(false), Category("Commnunication Setting"), DisplayName("BMS PortName"), Editor(typeof(MyUITypeEditor), typeof(UITypeEditor))]
|
|
public string Port_BAT { get; set; }
|
|
|
|
public int ChargerID { get; set; }
|
|
|
|
[Browsable(false)]
|
|
public int Baud_AGV { get; set; }
|
|
[Browsable(false)]
|
|
public int Baud_BAT { get; set; }
|
|
[Browsable(false)]
|
|
public int Baud_XBE { get; set; }
|
|
|
|
//public int QueryInterval_BAT { get; set; }
|
|
|
|
|
|
#endregion
|
|
|
|
#region "Debug"
|
|
[Category("Developer Setting"), DisplayName("Listening Port"),
|
|
Description("서버와의 통신을 위한 대기 포트(TCP) - 기본값 : 7979")]
|
|
public int listenPort { get; set; }
|
|
|
|
[Category("Developer Setting")]
|
|
public Boolean UseDebugMode { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region "Count Reset Setting"
|
|
|
|
[Category("Count Reset Setting"), DisplayName("A/M Clear Enable"),
|
|
Description("오전 초기화 여부\n작업수량을 초기화 하려면 True 로 설정하세요")]
|
|
public Boolean datetime_Check_1 { get; set; }
|
|
[Category("Count Reset Setting"), DisplayName("P/M Clear Enable"),
|
|
Description("오후 초기화 여부\n작업수량을 초기화 하려면 True 로 설정하세요")]
|
|
public Boolean datetime_Check_2 { get; set; }
|
|
[Category("Count Reset Setting"), DisplayName("A/M Clear Time(HH:mm)"),
|
|
Description("오전 초기화 시간(시:분)\n예) 09:00")]
|
|
public string datetime_Reset_1 { get; set; }
|
|
[Category("Count Reset Setting"), DisplayName("P/M Clear Time(HH:mm)"),
|
|
Description("오후 초기화 시간(시:분)\n예) 19:00")]
|
|
public string datetime_Reset_2 { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region "general"
|
|
|
|
|
|
|
|
|
|
[Category("General Setting"), DisplayName("Enable Popup Message"),
|
|
Description("오류 발생시 별도의 메세지 창으로 표시합니다. 사용하지 않을 경우에는 우측 상단의 결과창의 메세지를 확인합니다.")]
|
|
public Boolean ShowPopUpMessage { get; set; }
|
|
[Category("General Setting"), DisplayName("Asset Number"),
|
|
Description("자산번호(서버에 값 전송 시 사용됩니다)")]
|
|
public string Asset { get; set; }
|
|
|
|
[Category("General Setting"),
|
|
Description("데이터 자동 소거 기간(일) 비활성=0")]
|
|
public int AutoDeleteDay { get; set; }
|
|
[Category("General Setting"),
|
|
Description("데이터 자동 소거 조건(남은용량 %)")]
|
|
public int AutoDeleteThreshold { get; set; }
|
|
|
|
[Category("General Setting"), PasswordPropertyText(true)]
|
|
public string Password_Setup { get; set; }
|
|
|
|
[Category("General Setting"), Browsable(false)]
|
|
public string Language { get; set; }
|
|
|
|
[Browsable(false), Category("General Setting"), DisplayName("Full Screen Window State"),
|
|
Description("화면을 전체화면으로 사용 합니다.")]
|
|
public Boolean FullScreen { get; set; }
|
|
public bool DetectManualCharge { get; set; }
|
|
public Boolean StartLog { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region "TAGS"
|
|
[Browsable(false)]
|
|
public int TAGPOT { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGNOT { get; set; }
|
|
[Browsable(false)]
|
|
public int TAG_F2_F3 { get; set; }
|
|
[Browsable(false)]
|
|
public int TAG_QC_F1 { get; set; }
|
|
[Browsable(false)]
|
|
public int TAG_F1_F2 { get; set; }
|
|
[Browsable(false)]
|
|
public int TAG_F3_F4 { get; set; }
|
|
[Browsable(false)]
|
|
public int TAG_F4_F5 { get; set; }
|
|
[Browsable(false)]
|
|
public int TAG_QA_QC { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGQAB { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGQAA { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGQCB { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGQCA { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGF1A { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGF2A { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGF3A { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGF4A { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGF5A { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGF1B { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGF2B { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGF3B { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGF4B { get; set; }
|
|
[Browsable(false)]
|
|
public int TAGF5B { get; set; }
|
|
#endregion
|
|
|
|
#region "Charge"
|
|
[Browsable(false)]
|
|
public int chargerpos { get; set; }
|
|
[Browsable(false)]
|
|
public int ChargetWaitSec { get; set; }
|
|
[Browsable(false)]
|
|
public int ChargeEmergencyLevel { get; set; }
|
|
[Browsable(false)]
|
|
public int ChargeMaxLevel { get; set; }
|
|
[Browsable(false)]
|
|
public int ChargeStartLevel { get; set; }
|
|
[Browsable(false)]
|
|
public Boolean Enable_AutoCharge { get; set; }
|
|
[Browsable(false)]
|
|
public int ChargeRetryTerm { get; set; }
|
|
[Browsable(false)]
|
|
public int ChargeMaxTime { get; set; }
|
|
[Browsable(false)]
|
|
public int ChargeSearchTime { get; set; }
|
|
|
|
#endregion
|
|
|
|
#region "AGV"
|
|
|
|
public bool AutoModeOffAndClearPosition { get; set; }
|
|
|
|
[Browsable(false)]
|
|
public string musicfile { get; set; }
|
|
|
|
/// <summary>
|
|
/// FVI로 가능 방향이 Backward 인가?
|
|
/// Forward 방향이라면 false 를 한다
|
|
/// </summary>
|
|
[Browsable(false)]
|
|
public Boolean AGV_Direction_FVI_Backward { get; set; }
|
|
[Browsable(false)]
|
|
public Boolean Enable_Speak { get; set; }
|
|
|
|
//public Boolean Disable_BMS { get; set; }
|
|
//public Boolean Log_BMS_Tx { get; set; }
|
|
//public Boolean Log_BMS_Rx { get; set; }
|
|
//public double ChargeLimitLow { get; set; }
|
|
//public double ChargeLimitHigh { get; set; }
|
|
|
|
[Browsable(false)]
|
|
public string AGV_PANID { get; set; }
|
|
[Browsable(false)]
|
|
public string AGV_CHANNEL { get; set; }
|
|
[Browsable(false)]
|
|
public string AGV_ADDRESS { get; set; }
|
|
|
|
[Browsable(false)]
|
|
public int SCK { get; set; }
|
|
[Browsable(false)]
|
|
public int SSK { get; set; }
|
|
[Browsable(false)]
|
|
public int STT { get; set; }
|
|
[Browsable(false)]
|
|
public int SAD { get; set; }
|
|
|
|
[Browsable(false)]
|
|
public byte ZSpeed { get; set; }
|
|
[Browsable(false)]
|
|
public int SPD_L { get; set; }
|
|
[Browsable(false)]
|
|
public int SPD_M { get; set; }
|
|
[Browsable(false)]
|
|
public int SPD_H { get; set; }
|
|
[Browsable(false)]
|
|
public int SPD_DRIVE { get; set; }
|
|
[Browsable(false)]
|
|
public int SPD_S { get; set; }
|
|
[Browsable(false)]
|
|
public int SPD_R { get; set; }
|
|
|
|
[Browsable(false)]
|
|
public int PID_PH { get; set; }
|
|
[Browsable(false)]
|
|
public int PID_PM { get; set; }
|
|
[Browsable(false)]
|
|
public int PID_PL { get; set; }
|
|
[Browsable(false)]
|
|
public int PID_IH { get; set; }
|
|
[Browsable(false)]
|
|
public int PID_IM { get; set; }
|
|
[Browsable(false)]
|
|
public int PID_IL { get; set; }
|
|
[Browsable(false)]
|
|
public int PID_DH { get; set; }
|
|
[Browsable(false)]
|
|
public int PID_DM { get; set; }
|
|
[Browsable(false)]
|
|
public int PID_DL { get; set; }
|
|
[Browsable(false)]
|
|
public int PID_PS { get; set; }
|
|
[Browsable(false)]
|
|
public int PID_IS { get; set; }
|
|
[Browsable(false)]
|
|
public int PID_DS { get; set; }
|
|
|
|
public double WheelSpeedCharge { get; set; }
|
|
public byte HomePositionValue { get; set; }
|
|
public byte HomeKitNo { get; set; }
|
|
|
|
[Browsable(false)]
|
|
public Single interval_xbe { get; set; }
|
|
[Browsable(false)]
|
|
public int interval_bms { get; set; }
|
|
public int doorSoundTerm { get; set; }
|
|
|
|
[Browsable(false)]
|
|
public int musicvol { get; set; }
|
|
[Browsable(false)]
|
|
public bool Enable_Music { get; set; }
|
|
#endregion
|
|
|
|
[Browsable(false)]
|
|
public string LastMapFile { get; set; }
|
|
|
|
[Category("Report"), Browsable(false),
|
|
Description("상태기록시 장비 식별코드(4자리)"),
|
|
DisplayName("M/C ID")]
|
|
public string MCID { get; set; }
|
|
|
|
[Category("Report"),
|
|
Description("작업 기록을 장비기술(EE) Database 에 기록 합니다. 원격으로 장비 현황을 모니터링 할 수 있습니다"),
|
|
DisplayName("SAVE EE-DB")]
|
|
public Boolean Save_EEDatabase { get; set; }
|
|
[Category("Report"), Description("상태값을 전송하는 간격(초)")]
|
|
public int StatusInterval { get; set; }
|
|
|
|
|
|
[Category("AutoReboot"),
|
|
DisplayName("자동재부팅시간"),
|
|
Description("기본값 14:00:00~14:05:00 , 재부팅은 장비가 대기(IDLE)일 때에만 동작하며 지정 시간 범위를 벗어나면 동작하지 않습니다")]
|
|
public String AutoRebootTimeStart { get; set; }
|
|
[Category("AutoReboot")]
|
|
public string AUtoRebootLastTime { get; set; }
|
|
|
|
|
|
public bool SetAutoModeOn { get; set; }
|
|
public override void AfterLoad()
|
|
{
|
|
if (StatusInterval < 10) StatusInterval = 300; //5분간격
|
|
if (XBE_ID < 1) XBE_ID = 0xFF; //0은 acs 이므로 쓰지못하게한다.
|
|
if (SAD == 0) SAD = 999;
|
|
if (TAGF1A == 0)
|
|
{
|
|
TAGNOT = 9000;
|
|
|
|
TAGQAB = 9200;
|
|
TAGQCB = 9300;
|
|
TAGF1B = 9400;
|
|
TAGF2B = 9500;
|
|
TAGF3B = 9600;
|
|
TAGF4B = 9700;
|
|
TAGF5B = 9800;
|
|
|
|
TAGQAA = 9201;
|
|
TAGQCA = 9301;
|
|
TAGF1A = 9401;
|
|
TAGF2A = 9501;
|
|
TAGF3A = 9601;
|
|
TAGF4A = 9701;
|
|
TAGF5A = 9801;
|
|
|
|
TAGPOT = 9900;
|
|
|
|
TAG_QA_QC = 9250;
|
|
TAG_QC_F1 = 9350;
|
|
TAG_F1_F2 = 9450;
|
|
TAG_F2_F3 = 9550;
|
|
TAG_F3_F4 = 9650;
|
|
TAG_F4_F5 = 9750;
|
|
}
|
|
|
|
if (TAG_F4_F5 == 0)
|
|
{
|
|
TAG_F4_F5 = 9750;
|
|
TAGF5B = 9800;
|
|
TAGF5A = 9801;
|
|
}
|
|
|
|
if (SCK == 0) SCK = 10;
|
|
if (SSK == 0) SSK = 10;
|
|
if (STT == 0) STT = 30;
|
|
if (ChargerID == 0) ChargerID = 203;
|
|
if (ChargerID < 200) ChargerID += 200;
|
|
|
|
//자동충전요건
|
|
if (ChargetWaitSec == 0) ChargetWaitSec = 3;
|
|
if (ChargeStartLevel == 0) ChargeStartLevel = 85;
|
|
if (ChargeMaxLevel == 0) ChargeMaxLevel = 85;
|
|
if (ChargeEmergencyLevel == 0) ChargeEmergencyLevel = 30;
|
|
if (interval_bms == 0) interval_bms = 10;
|
|
|
|
//충전은 10분간격으로 재시도 한다
|
|
if (ChargeRetryTerm == 0) ChargeRetryTerm = 600;
|
|
if (doorSoundTerm == 0) doorSoundTerm = 15; //기본 15초
|
|
if (ChargeSearchTime == 0) ChargeSearchTime = 25;
|
|
//최대 충전진행 시간(기본 1시간)
|
|
if (ChargeMaxTime == 0) ChargeMaxTime = 3600;
|
|
// if (interval_iostate == 0 || interval_iostate == 255) interval_iostate = 100;
|
|
if (ZSpeed == 0) ZSpeed = 20;
|
|
if (interval_xbe == 0) interval_xbe = 5.0f;
|
|
if (HomePositionValue == 0) HomePositionValue = 4;
|
|
if (HomeKitNo == 0) HomeKitNo = 2;
|
|
if (datetime_Reset_1 == "") datetime_Reset_1 = "00:00";
|
|
if (datetime_Reset_2 == "") datetime_Reset_2 = "00:00";
|
|
|
|
if (SPD_H == 0)
|
|
{
|
|
SPD_DRIVE = 200;
|
|
SPD_H = 110;
|
|
SPD_M = 70;
|
|
SPD_L = 30;
|
|
SPD_S = 61;
|
|
SPD_R = 70;
|
|
}
|
|
|
|
if (PID_PH == 0)
|
|
{
|
|
PID_PH = 180; PID_PM = 240; PID_PL = 260;
|
|
PID_IH = 610; PID_IM = 640; PID_IL = 660;
|
|
PID_DH = 110; PID_DM = 140; PID_DL = 160;
|
|
PID_PS = 200; PID_IS = 620; PID_DS = 120;
|
|
}
|
|
|
|
if (WheelSpeedCharge == 0) WheelSpeedCharge = 10;
|
|
|
|
if (AutoDeleteThreshold == 0) AutoDeleteThreshold = 20;
|
|
if (Asset == "") Asset = "DEV_SPLIT";
|
|
if (listenPort == 0) listenPort = 7979;
|
|
if (Port_XBE == "") Port_XBE = "COM8";
|
|
|
|
if (Language.isEmpty()) Language = "Kor";
|
|
if (Password_Setup.isEmpty()) Password_Setup = "0000";
|
|
if (musicfile.isEmpty()) musicfile = UTIL.CurrentPath + "music.mp3";
|
|
if (musicvol == 0) musicvol = 50;
|
|
|
|
|
|
if (string.IsNullOrEmpty(Port_AGV)) Port_AGV = "COM1";
|
|
// if (string.IsNullOrEmpty(Port_PLC)) Port_PLC = "COM2";
|
|
if (string.IsNullOrEmpty(Port_XBE)) Port_XBE = "COM4";
|
|
if (string.IsNullOrEmpty(Port_BAT)) Port_BAT = "COM7";
|
|
|
|
if (Baud_AGV == 0) Baud_AGV = 57600;
|
|
//if (Baud_PLC == 0) Baud_PLC = 19200;
|
|
if (Baud_XBE == 0) Baud_XBE = 9600;
|
|
if (Baud_BAT == 0) Baud_BAT = 9600;
|
|
|
|
|
|
}
|
|
public override void AfterSave()
|
|
{
|
|
//throw new NotImplementedException();
|
|
}
|
|
|
|
public void CopyTo(CSetting dest)
|
|
{
|
|
//이곳의 모든 쓰기가능한 속성값을 대상에 써준다.
|
|
Type thClass = this.GetType();
|
|
foreach (var method in thClass.GetMethods())
|
|
{
|
|
//var parameters = method.GetParameters();
|
|
if (!method.Name.StartsWith("get_")) continue;
|
|
|
|
string keyname = method.Name.Substring(4);
|
|
string methodName = method.Name;
|
|
|
|
object odata = GetType().GetMethod(methodName).Invoke(this, null);
|
|
var wMethod = dest.GetType().GetMethod(Convert.ToString("set_") + keyname);
|
|
if (wMethod != null) wMethod.Invoke(dest, new object[] { odata });
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public class CounterSetting : AR.Setting, INotifyPropertyChanged
|
|
{
|
|
public DateTime CountReset { get; set; }
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
|
|
{
|
|
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
|
|
private int countUp1 = 0;
|
|
private int countUp2 = 0;
|
|
private int countUp3 = 0;
|
|
private int countUp4 = 0;
|
|
// private int countUp5 = 0;
|
|
private int countchgaerr = 0;
|
|
private int countchga = 0;
|
|
private int countchgm = 0;
|
|
//private int countdn = 0;
|
|
private int countqa = 0;
|
|
private int countqc = 0;
|
|
|
|
//메인카운터
|
|
public int CountUp1
|
|
{
|
|
get { return countUp1; }
|
|
set { if (value != countUp1) { countUp1 = value; NotifyPropertyChanged(); } }
|
|
}
|
|
public int CountUp2
|
|
{
|
|
get { return countUp2; }
|
|
set { if (value != countUp2) { countUp2 = value; NotifyPropertyChanged(); } }
|
|
}
|
|
public int CountUp3
|
|
{
|
|
get { return countUp3; }
|
|
set { if (value != countUp3) { countUp3 = value; NotifyPropertyChanged(); } }
|
|
}
|
|
public int CountUp4
|
|
{
|
|
get { return countUp4; }
|
|
set { if (value != countUp4) { countUp4 = value; NotifyPropertyChanged(); } }
|
|
}
|
|
//public int CountUp5
|
|
//{
|
|
// get { return countUp5; }
|
|
// set { if (value != countUp5) { countUp5 = value; NotifyPropertyChanged(); } }
|
|
//}
|
|
|
|
/// <summary>
|
|
/// 상차수량(FVI 1+2+3+4)
|
|
/// </summary>
|
|
public int CountUp
|
|
{
|
|
get
|
|
{
|
|
return CountUp1 + CountUp2 + CountUp3 + CountUp4;// + CountUp5;
|
|
}
|
|
}
|
|
|
|
public int CountChargeE
|
|
{
|
|
get { return this.countchgaerr; }
|
|
set { if (value != countchgaerr) { countchgaerr = value; NotifyPropertyChanged(); } }
|
|
}
|
|
public int CountChargeA
|
|
{
|
|
get { return this.countchga; }
|
|
set { if (value != countchga) { countchga = value; NotifyPropertyChanged(); } }
|
|
}
|
|
public int CountChargeM
|
|
{
|
|
get { return this.countchgm; }
|
|
set { if (value != countchgm) { countchgm = value; NotifyPropertyChanged(); } }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 하차수량(QC+QA)
|
|
/// </summary>
|
|
public int CountDn
|
|
{
|
|
get { return this.countqa + this.countqc; }
|
|
//set { if (value != countdn) { countdn = value; NotifyPropertyChanged(); } }
|
|
}
|
|
public int CountQA
|
|
{
|
|
get { return this.countqa; }
|
|
set { if (value != countqa) { countqa = value; NotifyPropertyChanged(); } }
|
|
}
|
|
public int CountQC
|
|
{
|
|
get { return this.countqc; }
|
|
set { if (value != countqc) { countqc = value; NotifyPropertyChanged(); } }
|
|
}
|
|
public void CountClear()
|
|
{
|
|
CountUp1 = 0;
|
|
CountUp2 = 0;
|
|
CountUp3 = 0;
|
|
CountUp4 = 0;
|
|
// CountUp5 = 0;
|
|
CountQC = 0;
|
|
CountQA = 0;
|
|
//CountQa2 = 0;
|
|
CountReset = DateTime.Now;
|
|
PUB.log.Add("Count Clear");
|
|
this.Save();
|
|
}
|
|
|
|
public CounterSetting()
|
|
{
|
|
this.filename = AR.UTIL.CurrentPath + "counter.xml";
|
|
}
|
|
public override void AfterLoad()
|
|
{
|
|
if (CountReset == null) CountReset = DateTime.Parse("1982-11-23");
|
|
}
|
|
public override void AfterSave()
|
|
{
|
|
//throw new NotImplementedException();
|
|
}
|
|
}
|
|
|
|
}
|