From 8d0f0f8c8fc5cb51fa2bcef676906580f2466a02 Mon Sep 17 00:00:00 2001 From: chi Date: Mon, 26 May 2025 11:00:23 +0900 Subject: [PATCH] add emulator --- Emulator/AGVEmulator.sln | 25 + Emulator/AGVEmulator/AGVEmulator.csproj | 121 + Emulator/AGVEmulator/DevAGV.cs | 586 +++++ Emulator/AGVEmulator/DevCAL.cs | 64 + Emulator/AGVEmulator/DevPLC.cs | 298 +++ Emulator/AGVEmulator/Form1.Designer.cs | 1973 +++++++++++++++++ Emulator/AGVEmulator/Form1.cs | 1154 ++++++++++ Emulator/AGVEmulator/Form1.resx | 160 ++ Emulator/AGVEmulator/Program.cs | 34 + .../AGVEmulator/Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 63 + .../AGVEmulator/Properties/Resources.resx | 117 + .../Properties/Settings.Designer.cs | 26 + .../AGVEmulator/Properties/Settings.settings | 7 + Emulator/AGVEmulator/RS232.cs | 481 ++++ Emulator/AGVEmulator/UC/AgvViewer.Designer.cs | 37 + Emulator/AGVEmulator/UC/AgvViewer.cs | 272 +++ .../AGVEmulator/UC/SerialConn.Designer.cs | 162 ++ Emulator/AGVEmulator/UC/SerialConn.cs | 130 ++ Emulator/AGVEmulator/UC/SerialConn.resx | 120 + Emulator/AGVEmulator/app.config | 3 + Emulator/AGVEmulator/devBMS.cs | 228 ++ Emulator/AGVEmulator/packetFC.bin | Bin 0 -> 53 bytes Emulator/AGVEmulator/packetFD.bin | Bin 0 -> 68 bytes Emulator/ArLog.Net4.dll | Bin 0 -> 13312 bytes Emulator/ArSetting.Net4.dll | Bin 0 -> 22528 bytes Emulator/CarlosAg.ExcelXmlWriter.dll | Bin 0 -> 110592 bytes Emulator/Winsock Orcas.dll | Bin 0 -> 122880 bytes Emulator/arControl.Net4.dll | Bin 0 -> 286720 bytes Emulator/arFrameControl.dll | Bin 0 -> 46080 bytes 30 files changed, 6097 insertions(+) create mode 100644 Emulator/AGVEmulator.sln create mode 100644 Emulator/AGVEmulator/AGVEmulator.csproj create mode 100644 Emulator/AGVEmulator/DevAGV.cs create mode 100644 Emulator/AGVEmulator/DevCAL.cs create mode 100644 Emulator/AGVEmulator/DevPLC.cs create mode 100644 Emulator/AGVEmulator/Form1.Designer.cs create mode 100644 Emulator/AGVEmulator/Form1.cs create mode 100644 Emulator/AGVEmulator/Form1.resx create mode 100644 Emulator/AGVEmulator/Program.cs create mode 100644 Emulator/AGVEmulator/Properties/AssemblyInfo.cs create mode 100644 Emulator/AGVEmulator/Properties/Resources.Designer.cs create mode 100644 Emulator/AGVEmulator/Properties/Resources.resx create mode 100644 Emulator/AGVEmulator/Properties/Settings.Designer.cs create mode 100644 Emulator/AGVEmulator/Properties/Settings.settings create mode 100644 Emulator/AGVEmulator/RS232.cs create mode 100644 Emulator/AGVEmulator/UC/AgvViewer.Designer.cs create mode 100644 Emulator/AGVEmulator/UC/AgvViewer.cs create mode 100644 Emulator/AGVEmulator/UC/SerialConn.Designer.cs create mode 100644 Emulator/AGVEmulator/UC/SerialConn.cs create mode 100644 Emulator/AGVEmulator/UC/SerialConn.resx create mode 100644 Emulator/AGVEmulator/app.config create mode 100644 Emulator/AGVEmulator/devBMS.cs create mode 100644 Emulator/AGVEmulator/packetFC.bin create mode 100644 Emulator/AGVEmulator/packetFD.bin create mode 100644 Emulator/ArLog.Net4.dll create mode 100644 Emulator/ArSetting.Net4.dll create mode 100644 Emulator/CarlosAg.ExcelXmlWriter.dll create mode 100644 Emulator/Winsock Orcas.dll create mode 100644 Emulator/arControl.Net4.dll create mode 100644 Emulator/arFrameControl.dll diff --git a/Emulator/AGVEmulator.sln b/Emulator/AGVEmulator.sln new file mode 100644 index 0000000..a11e8bd --- /dev/null +++ b/Emulator/AGVEmulator.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33801.468 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AGVEmulator", "AGVEmulator\AGVEmulator.csproj", "{9312AB43-72F6-4365-A266-E767215FA7F5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9312AB43-72F6-4365-A266-E767215FA7F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9312AB43-72F6-4365-A266-E767215FA7F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9312AB43-72F6-4365-A266-E767215FA7F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9312AB43-72F6-4365-A266-E767215FA7F5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {6F494EC0-1316-409F-8C1A-D882BBF25D13} + EndGlobalSection +EndGlobal diff --git a/Emulator/AGVEmulator/AGVEmulator.csproj b/Emulator/AGVEmulator/AGVEmulator.csproj new file mode 100644 index 0000000..8b91560 --- /dev/null +++ b/Emulator/AGVEmulator/AGVEmulator.csproj @@ -0,0 +1,121 @@ + + + + + Debug + AnyCPU + {9312AB43-72F6-4365-A266-E767215FA7F5} + WinExe + AGVEmulator + AGVEmulator + v4.8 + 512 + true + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + + + + ..\arControl.Net4.dll + + + ..\arFrameControl.dll + + + ..\ArLog.Net4.dll + + + ..\ArSetting.Net4.dll + + + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + + + + UserControl + + + SerialConn.cs + + + Component + + + AgvViewer.cs + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SerialConn.cs + + + + PreserveNewest + + + PreserveNewest + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + \ No newline at end of file diff --git a/Emulator/AGVEmulator/DevAGV.cs b/Emulator/AGVEmulator/DevAGV.cs new file mode 100644 index 0000000..3838d88 --- /dev/null +++ b/Emulator/AGVEmulator/DevAGV.cs @@ -0,0 +1,586 @@ +using arCtl; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; + +namespace AGVEmulator +{ + class DevAGV : AR.Dev.RS232 + { + //######### private variable + byte runtime = 0; + + //######### public variable + public UInt16 system0 = 0; + public UInt16 system1 = 0; + public UInt16 error = 0; + public byte signal = 0; + public char sts_bunki = 'S'; + public char sts_speed = 'L'; + public char sts_dir = 'F'; + public char sts_sensor = '1'; + + + public enum eCommand : byte + { + LOAD = 0, //EEPROM 불러오기 + SAVE, //EEPROM 저장 + RESET, //초기화 + PINGCHK, + SET_PINMODE, //PINMODE 설정 + SET_DOUTPUT, //디지털출력설정(포트번호,값[1,0]) + SET_AOUTPUT, //아날로그출력설정(포트GET_SETTING = 50, //셋팅값 요청 + SET_FLAG, + SET_EEPROM, + SET_MANUALSPEED, + GET_SETTING = 50, + GUIDE_MOT = 90, //가이드커버(양쪽) 0=멈춤,1=UP,2=DN 아스키코드표 90=Z + SET_EEP_DIREV, + }; + + public enum DOName + { + PINO_GUIDEMOTOR_LDIR, + PINO_GUIDEMOTOR_LRUN, + PINO_GUIDEMOTOR_RDIR, + PINO_GUIDEMOTOR_RRUN, + PINO_EMPTY_26, + PINO_EMPTY_27, + PINO_EMPTY_28, + PINO_EMPTY_29, + } + + public enum DIName + { + PINI_EMG, + PINI_BTN_1, + PINI_BTN_2, + PINI_BTN_3, + PINI_BTN_4, + PINI_OVERLOADL, + PINI_OVERLOADR, + PINI_EMPTY_36, + PINI_EMPTY_37, + PINI_EMPTY_38, + PINI_BTN_ZUP, + PINI_BTN_ZDN, + PINI_LIMIT_LU, + PINI_LIMIT_LD, + PINI_LIMIT_RU, + PINI_LIMIT_RD, + PINI_STOP, + } + public enum eerror + { + Emergency = 0, + Overcurrent, + Charger_run_error, + Charger_pos_error, + line_out_error = 4, + + /// + /// 기동시 자석 감지 에러 + /// + runerror_by_no_magent_line, + /// + /// 호출제어기 통신 오류 + /// + controller_comm_error = 11, + /// + /// 도착경보기 통신 오류 + /// + arrive_ctl_comm_error, + + /// + /// 자동문제어기 통신 오류 + /// + door_ctl_comm_error, + + /// + /// 자동충전기 통신 오류 + /// + charger_comm_error, + + /// + /// 교차로 제어기 통신 오류 + /// + cross_ctrl_comm_error, + } + public enum esignal + { + front_gate_out = 0, + rear_sensor_out, + mark_sensor_1, + mark_sensor_2, + front_left_sensor, + front_right_sensor, + front_center_sensor, + charger_align_sensor, + } + public enum esystemflag0 + { + Memory_RW_State = 5, + EXT_IO_Conn_State, + RFID_Conn_State, + M5E_Module_Run_State = 8, + Front_Ultrasonic_Conn_State, + Front_Untrasonic_Sensor_State, + Side_Ultrasonic_Conn_State, + Side_Ultrasonic_Sensor_State = 12, + Front_Guide_Sensor_State, + Rear_Guide_Sensor_State, + Battery_Level_Check + } + public enum esystemflag1 + { + Side_Detect_Ignore = 3, + Melody_check, + Mark2_check, + Mark1_check, + gateout_check, + Battery_charging = 8, + re_Start, + + /// + /// 전방 감지 무시 + /// + front_detect_ignore, + + /// + /// 전방장애물감지상태 + /// + front_detect_check, + + /// + /// 전방감지 후 정지 상태 + /// + stop_by_front_detect = 12, + /// + /// 교차로 진입 후 정지 상태 + /// + stop_by_cross_in, + agv_stop, + agv_run + } + + public enum evaluetype + { + system0, + system1, + error, + signal, + } + public enum estsvaluetype + { + bunki, + speed, + direction, + sensor + } + public class ValueChangedArgs : EventArgs + { + public int Idx { get; set; } + public bool Value { get; set; } + public evaluetype vtype { get; set; } + public ValueChangedArgs(int idx, bool val, evaluetype isOut) + { + this.Idx = idx; + this.Value = val; + this.vtype = isOut; + } + } + public class StsValueChangedArgs : EventArgs + { + public char Value { get; set; } + public estsvaluetype vtype { get; set; } + public StsValueChangedArgs(estsvaluetype vType, char val) + { + this.Value = val; + this.vtype = vType; + } + } + + public class RequestStatusDataArgs : EventArgs + { + public UInt16 system0 { get; set; } = 0; + public UInt16 system1 { get; set; } = 0; + public char speed { get; set; } = 'L'; + public char direction { get; set; } = 'F'; + public char bunki { get; set; } = 'S'; + + public byte signal { get; set; } = 0; + public float volt { get; set; } = 0f; + public UInt16 error { get; set; } = 0; + public char sensor { get; set; } = '0'; + public RequestStatusDataArgs() + { + + } + } + public event EventHandler RequestStatusData; + public event EventHandler ValueChanged; + public event EventHandler StsValueChanged; + + public class commandargs : EventArgs + { + public string Command { get; set; } + public commandargs(string cmd) + { + this.Command = cmd; + } + } + public event EventHandler Command; + public class FrameData + { + public string Checksum { get; set; } + public byte stx { get; set; } + public byte etx { get; set; } + public string cmd { get; set; } + public string data { get; set; } + public FrameData(byte[] data) + { + this.stx = data[0]; + this.etx = data[data.Length - 1]; + this.Checksum = System.Text.Encoding.Default.GetString(data, data.Length - 3, 2); + this.data = System.Text.Encoding.Default.GetString(data, 1, data.Length - 4); + this.cmd = this.data.Substring(0, 3); + this.data = this.data.Substring(3); + } + } + + + #region SetAGV/SetSTS/SetBIT/GetBIT + Boolean GetBit(ref UInt16 _value, int idx) + { + var offset = (UInt16)(1 << idx); + return (_value & offset) != 0; + } + + Boolean GetBit(ref byte _value, int idx) + { + var offset = (byte)(1 << idx); + return (_value & offset) != 0; + } + + bool SetBit(ref UInt16 _value, int idx, Boolean value) + { + var oldvalue = GetBit(ref _value, idx); + if (value) + { + var offset = (UInt16)(1 << idx); + _value = (UInt16)(_value | offset); + } + else + { + var offset = (UInt16)(~(1 << idx)); + _value = (UInt16)(_value & offset); + } + return oldvalue != value; + } + bool SetBit(ref byte _value, int idx, Boolean value) + { + var oldvalue = GetBit(ref _value, idx); + if (value) + { + var offset = (byte)(1 << idx); + _value = (byte)(_value | offset); + } + else + { + var offset = (byte)(~(1 << idx)); + _value = (byte)(_value & offset); + } + return oldvalue != value; + } + public bool GetAGV(DevAGV.esystemflag1 flag) + { + var idx = (int)flag; + return GetBit(ref system1, idx); + } + public void SetAGV(DevAGV.esystemflag0 flag, bool value) + { + var idx = (int)flag; + if (SetBit(ref system0, idx, value)) + ValueChanged?.Invoke(this, new ValueChangedArgs(idx, value, evaluetype.system0)); + } + public void SetAGV(DevAGV.esystemflag1 flag, bool value) + { + var idx = (int)flag; + if (SetBit(ref system1, idx, value)) + ValueChanged?.Invoke(this, new ValueChangedArgs(idx, value, evaluetype.system1)); + } + public void SetAGV(DevAGV.eerror flag, bool value) + { + var idx = (int)flag; + if (SetBit(ref error, idx, value)) + ValueChanged?.Invoke(this, new ValueChangedArgs(idx, value, evaluetype.error)); + } + public void SetAGV(DevAGV.esignal flag, bool value) + { + var idx = (int)flag; + if (SetBit(ref signal, idx, value)) + ValueChanged?.Invoke(this, new ValueChangedArgs(idx, value, evaluetype.signal)); + } + + public void SetSTS(estsvaluetype target, char value) + { + //bool changed = false; + switch (target) + { + case estsvaluetype.sensor: + //changed = this.sts_sensor.Equals(value); + sts_sensor = value; + break; + case estsvaluetype.direction: + //changed = this.sts_dir.Equals(value); + sts_dir = value; + break; + case estsvaluetype.speed: + //changed = this.sts_speed.Equals(value); + sts_speed = value; + break; + case estsvaluetype.bunki: + //changed = this.sts_bunki.Equals(value); + sts_bunki = value; + break; + } + //if(changed) + { + StsValueChanged?.Invoke(this, new StsValueChangedArgs(target, value)); + } + } + #endregion + + public override bool ProcessRecvData(byte[] data) + { + //dd로 시작하고 34개의 데이터 + //STS258FFFF40000000LSF0000003A + //02 53 54 53 32 35 38 46 46 46 46 34 30 30 30 30 30 30 30 4C 53 46 30 30 30 30 30 30 33 41 03 + var frame = new FrameData(data); + + switch (frame.cmd) + { + case "CRN": //기동명령 + //sts_dir = frame.data[0]; + SetSTS(estsvaluetype.direction, frame.data[0]); + SetAGV(esystemflag1.agv_stop, false); + SetAGV(esystemflag1.agv_run, true); + break; + case "CST": //중지명령 + //(바로 중지한다) + if (frame.data.StartsWith("M")) + { + Command?.Invoke(this, new commandargs("stopmark")); + } + else + { + SetAGV(esystemflag1.agv_run, false); + SetAGV(esystemflag1.agv_stop, true); + } + + break; + case "CBR": //분기명령 + //FSL + SetSTS(estsvaluetype.direction, frame.data[0]); + SetSTS(estsvaluetype.bunki, frame.data[1]); + SetSTS(estsvaluetype.speed, frame.data[2]); + SetSTS(estsvaluetype.sensor, frame.data[3]); + break; + case "CRT"://수동제어 + sts_dir = frame.data[0]; + sts_bunki = frame.data[1]; + sts_speed = frame.data[2]; + sts_sensor = frame.data[3]; + SetAGV(esystemflag1.agv_stop, false); + SetAGV(esystemflag1.agv_run, true); + break; + case "ACK": //응답ok + RaiseMessage(MessageType.Normal, $">> {frame.cmd} DATA={frame.data}"); + break; + case "SFR": //reset + SetAGV(DevAGV.eerror.Emergency, false); + SetAGV(DevAGV.eerror.line_out_error, false); + SetAGV(DevAGV.eerror.Overcurrent, false); + SetAGV(DevAGV.esystemflag1.agv_run, false); + SetAGV(DevAGV.esystemflag1.agv_stop, true); + break; + case "CBT"://충전작업 + SetAGV(DevAGV.esystemflag1.Battery_charging, true); + var id = frame.data.Substring(2, 2); + var cmd = frame.data[4]; + var delaytime = int.Parse(frame.data.Substring(5)); + if (cmd == 'I') SetAGV(DevAGV.esystemflag1.Battery_charging, true); + else SetAGV(esystemflag1.Battery_charging, false); + break; + case "SSH": + case "SSM": + case "SSL": + case "SSS": + case "SHS": + case "SLS": + case "SPK": + case "SPM": + case "SPL": + case "SPS": + case "SIK": + case "SIM": + case "SIH": + case "SIL": + case "SIS": + case "SDK": + case "SDW": + case "SDL": + case "SDS": + case "SRS": + case "SCK": + case "SSK": + case "STT": + case "SSI": + case "SMD": + case "SSC": + case "SPN": + case "SPH": + case "SCH": + case "SDH": + case "SDM": + case "SLB": + SendCmd("ACK", frame.cmd); + break; + default: + RaiseMessage(MessageType.Normal, $"미처리명령 {frame.cmd} DATA={frame.data}"); + break; + } + + + + return true; + } + public void SendCmd(string cmd, string value) + { + + var barr = new List(); + barr.Add(0x02); + barr.AddRange(System.Text.Encoding.Default.GetBytes(cmd)); + barr.AddRange(System.Text.Encoding.Default.GetBytes(value)); + barr.Add((byte)'*'); + barr.Add((byte)'*'); + barr.Add(0x03); + var cmdstr = System.Text.Encoding.Default.GetString(barr.ToArray()); + RaiseMessage(MessageType.Normal, "Tx:" + barr.ToArray().HexString()); + WriteData(barr.ToArray()); + } + + public void SendTag(string tagno) + { + tagno = tagno.PadLeft(6, '0'); + if (tagno.Length > 6) tagno = tagno.Substring(0, 6); + var barr = new List(); + barr.Add(0x02); + barr.Add((byte)'T'); + barr.Add((byte)'A'); + barr.Add((byte)'G'); + barr.AddRange(System.Text.Encoding.Default.GetBytes(tagno)); + barr.Add((byte)'*'); + barr.Add((byte)'*'); + barr.Add(0x03); + var cmdstr = System.Text.Encoding.Default.GetString(barr.ToArray()); + RaiseMessage(MessageType.Normal, "Tx:" + barr.ToArray().HexString()); + WriteData(barr.ToArray()); + } + + public override void AutoSendData() + { + //if (_device.DtrEnable == false) return; + //STS258FFFF40000000LSF0000003A + //02 53 54 53 32 35 38 46 46 46 46 34 30 30 30 30 30 30 30 4C 53 46 30 30 30 30 30 30 33 41 03 + var sample = "02 53 54 53 32 35 38 46 46 46 46 34 30 30 30 30 30 30 30 4C 53 46 30 30 30 30 30 30 33 41 03"; + var barr = sample.Split(' ').ToList().Select(t => Convert.ToByte(t, 16)).ToArray(); + + //if (RequestStatusData != null) + //{ + //var p = new RequestStatusDataArgs(); + //RequestStatusData.Invoke(this, p); + + var voltstr = "255";// ((int)(p.volt * 10f)).ToString().PadRight(3, '0'); + var bufarr = System.Text.Encoding.Default.GetBytes(voltstr); + Array.Copy(bufarr, 0, barr, 4, bufarr.Length); + + bufarr = System.Text.Encoding.Default.GetBytes(system0.ToString("X2").PadLeft(4, '0')); + + Array.Copy(bufarr, 0, barr, 7, bufarr.Length); + + bufarr = System.Text.Encoding.Default.GetBytes(system1.ToString("X2").PadLeft(4, '0')); + Array.Copy(bufarr, 0, barr, 11, bufarr.Length); + + bufarr = System.Text.Encoding.Default.GetBytes(error.ToString("X2").PadLeft(4, '0')); + Array.Copy(bufarr, 0, barr, 15, bufarr.Length); + + + barr[19] = (byte)this.sts_speed; + barr[20] = (byte)this.sts_bunki; + barr[21] = (byte)this.sts_dir; + barr[22] = (byte)this.sts_sensor; + //bufarr = System.Text.Encoding.Default.GetBytes(p.sensor.ToString().PadLeft(2, '0')); + //Array.Copy(bufarr, 0, barr, 22, bufarr.Length); + bufarr = System.Text.Encoding.Default.GetBytes(signal.ToString("X2").PadLeft(2, '0')); + Array.Copy(bufarr, 0, barr, 23, bufarr.Length); + //barr[22] = (byte)'5'; + + barr[barr.Length - 3] = (byte)'*'; + barr[barr.Length - 2] = (byte)'*'; + + //} + + var cmdstr = System.Text.Encoding.Default.GetString(barr); + RaiseMessage(MessageType.Normal, "Tx:" + barr.ToArray().HexString()); + WriteData(barr.ToArray()); + } + + + protected override bool CustomParser(byte[] buf, out byte[] remainBuffer) + { + //DD A5 03 00 FF FD 77 0D + //remainBuffer = new byte[] { }; + List remain = new List(); + bool retval = false; + foreach (var b in buf) + { + if (retval) + { + remain.Add(b); + continue; + } + + + + if (b == 0x02) //stx + { + tempBuffer.Clear(); + tempBuffer.Add(b); + } + + else if (b == 0x03) //etx + { + tempBuffer.Add(b); + retval = true; + } + else + { + //데이터길이가 만족한 상태 + tempBuffer.Add(b); + var maxlen = 100; + if (tempBuffer.Count > maxlen) + { + RaiseMessage(MessageType.Error, $"buffer over({maxlen})"); + tempBuffer.Clear(); + } + } + + + } + remainBuffer = remain.ToArray(); + return retval; + } + } +} diff --git a/Emulator/AGVEmulator/DevCAL.cs b/Emulator/AGVEmulator/DevCAL.cs new file mode 100644 index 0000000..bcf0953 --- /dev/null +++ b/Emulator/AGVEmulator/DevCAL.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace AGVEmulator +{ + class DevCAL : AR.Dev.RS232 + { + public override bool ProcessRecvData(byte[] data) + { + var sample = "02 30 31 32 01 03"; + var barr = sample.Split(' ').ToList().Select(t => Convert.ToByte(t, 16)).ToArray(); + var sendstr = System.Text.Encoding.Default.GetString(barr); + //RaiseMessage(MessageType.Normal, "Tx:" + barr.HexString()); + //WriteData(barr); + return true; + } + + protected override bool CustomParser(byte[] buf, out byte[] remainBuffer) + { + + List remain = new List(); + bool retval = false; + foreach (var b in buf) + { + if (retval) + { + remain.Add(b); + continue; + } + + if (b == 0x02) //stx + { + tempBuffer.Clear(); + tempBuffer.Add(b); + } + else if (b == 0x03) //etx + { + tempBuffer.Add(b); + retval = true; + } + else + { + if (tempBuffer.Count > 0 && tempBuffer[0] == 0xDD) + { + tempBuffer.Add(b); + if (tempBuffer.Count > 10) + { + RaiseMessage(MessageType.Error, "buffer over"); + tempBuffer.Clear(); + retval = false; + } + } + else + { + //trash + } + } + } + remainBuffer = remain.ToArray(); + return retval; + } + } +} diff --git a/Emulator/AGVEmulator/DevPLC.cs b/Emulator/AGVEmulator/DevPLC.cs new file mode 100644 index 0000000..585b384 --- /dev/null +++ b/Emulator/AGVEmulator/DevPLC.cs @@ -0,0 +1,298 @@ +using System; +using static AGVEmulator.DevBMS; +using System.Collections.Generic; +using System.Linq; +using System.Diagnostics.Contracts; +using arCtl; +using System.Xml.Schema; +using System.Drawing; + +namespace AGVEmulator +{ + class DevPLC : AR.Dev.RS232 + { + byte runtime = 0; + + + public enum eCommand : byte + { + LOAD = 0, //EEPROM 불러오기 + SAVE, //EEPROM 저장 + RESET, //초기화 + PINGCHK, + SET_PINMODE, //PINMODE 설정 + SET_DOUTPUT, //디지털출력설정(포트번호,값[1,0]) + SET_AOUTPUT, //아날로그출력설정(포트GET_SETTING = 50, //셋팅값 요청 + SET_FLAG, + SET_EEPROM, + SET_MANUALSPEED, + GET_SETTING = 50, + GUIDE_MOT = 90, //가이드커버(양쪽) 0=멈춤,1=UP,2=DN 아스키코드표 90=Z + SET_EEP_DIREV, + }; + + public enum DOName + { + PINO_GUIDEMOTOR_LDIR, + PINO_GUIDEMOTOR_LRUN, + PINO_GUIDEMOTOR_RDIR, + PINO_GUIDEMOTOR_RRUN, + PINO_EMPTY_26, + PINO_EMPTY_27, + PINO_EMPTY_28, + PINO_EMPTY_29, + } + + public enum DIName + { + PINI_EMG, + PINI_BTN_1, + PINI_BTN_2, + PINI_BTN_3, + PINI_BTN_4, + PINI_OVERLOADL, + PINI_OVERLOADR, + PINI_EMPTY_36, + PINI_EMPTY_37, + PINI_EMPTY_38, + PINI_BTN_ZUP, + PINI_BTN_ZDN, + PINI_LIMIT_LU, + PINI_LIMIT_LD, + PINI_LIMIT_RU, + PINI_LIMIT_RD, + PINI_STOP, + } + + public class ValueChangedArgs : EventArgs + { + public int Idx { get; set; } + public bool Value { get; set; } + public bool IsOut { get; set; } + public ValueChangedArgs(int idx, bool val, bool isOut) + { + this.Idx = idx; + this.Value = val; + this.IsOut = isOut; + } + } + + public class RequestBatteryDataArgs : EventArgs + { + public UInt32 IOValue { get; set; } + public UInt32 FGValue { get; set; } + public RequestBatteryDataArgs() + { + this.IOValue = 0x00; + this.FGValue = 0xFF; + } + } + public event EventHandler RequestData; + public event EventHandler ValueChanged; + + public override bool ProcessRecvData(byte[] data) + { + //dd로 시작하고 34개의 데이터 + // var sample = "DD 03 00 1B 0A 65 00 00 21 63 29 04 00 00 2C 92 00 00 00 00 00 00 28 51 03 08 02 0B 69 0B 66 FC 9C 77"; + // var barr = sample.Split(' ').ToList().Select(t => Convert.ToByte(t, 16)).ToArray(); + var datalne = data[2]; + byte[] buffer = new byte[datalen]; + Array.Copy(data, 3, buffer, 0, buffer.Length); + + var cmd = (eCommand)buffer[0]; + if (cmd == eCommand.GUIDE_MOT) + { + var p1 = (char)buffer[1]; + var p2 = (char)buffer[2]; + + switch (p1) + { + case 'A': //all + if (p2 == 'P') + { + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LRUN, true, true)); + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RRUN, true, true)); + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LDIR, true, true)); + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RDIR, true, true)); + } + else if (p2 == 'N') + { + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LRUN, true, true)); + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RRUN, true, true)); + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LDIR, false, true)); + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RDIR, false, true)); + } + else if(p2 == 'S') + { + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LRUN, false, true)); + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RRUN, false, true)); + } + break; + case 'L': + if (p2 == 'P') + { + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LRUN, true, true)); + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LDIR, true, true)); + } + else if (p2 == 'N') + { + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LRUN, true, true)); + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LDIR, false, true)); + } + else if (p2 == 'S') + { + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_LRUN, false, true)); + } + break; + case 'R': + if (p2 == 'P') + { + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RRUN, true, true)); + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RDIR, true, true)); + } + else if (p2 == 'N') + { + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RRUN, true, true)); + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RDIR, false, true)); + } + else if (p2 == 'S') + { + ValueChanged?.Invoke(this, new ValueChangedArgs((int)DOName.PINO_GUIDEMOTOR_RRUN, false, true)); + } + break; + } + } + + + return true; + } + + public override void AutoSendData() + { + //if (_device.DtrEnable == false) return; + + List barr = new List(); + barr.Add((byte)'@'); + barr.Add((byte)'@'); + barr.Add(10); + barr.Add((byte)'I'); + + //입/출력포트 각 16접 데이터 입력 + UInt32 iovalue = 0; + //플래그 각 16접 데이터 입력 + UInt32 fgvalue = 0; + + + if (RequestData != null) + { + var p = new RequestBatteryDataArgs(); + RequestData.Invoke(this, p); + iovalue = p.IOValue; + fgvalue = p.FGValue; + } + + + var arr_volt = BitConverter.GetBytes(iovalue).ToArray(); + foreach (var b in arr_volt) + barr.Add(b); + + + arr_volt = BitConverter.GetBytes(fgvalue).ToArray(); + foreach (var b in arr_volt) + barr.Add(b); + + + if (runtime < 255) runtime += 1; + else runtime = 0; + barr.Add(runtime); + + //체크섬무시 + barr.Add((byte)'*'); + //barr.Add((byte)'*'); + + barr.Add(0x0D); + barr.Add(0x0A); + + RaiseMessage(MessageType.Normal, "Tx:" + barr.ToArray().HexString()); + WriteData(barr.ToArray()); + } + + bool findstx2 = false; + byte datalen = 0; + protected override bool CustomParser(byte[] buf, out byte[] remainBuffer) + { + //DD A5 03 00 FF FD 77 0D + //remainBuffer = new byte[] { }; + List remain = new List(); + bool retval = false; + foreach (var b in buf) + { + if (retval) + { + remain.Add(b); + continue; + } + + + if (findSTX == false) + { + if (b == '@') + { + tempBuffer.Clear(); + tempBuffer.Add(b); + findSTX = true; + findstx2 = false; + datalen = 0; + } + } + else if (findstx2 == false) + { + if (b == '@') + { + tempBuffer.Add(b); + findstx2 = true; + datalen = 0; + } + else + { + tempBuffer.Clear(); + findSTX = false; + findstx2 = false; + } + } + else if (datalen == 0) + { + tempBuffer.Add(b); + datalen = b; + } + else + { + //데이터길이가 만족한 상태 + tempBuffer.Add(b); + var maxlen = datalen + 3 + 3; + + if (tempBuffer.Count == maxlen) + { + if (tempBuffer[tempBuffer.Count - 1] == 0x0A && tempBuffer[tempBuffer.Count - 2] == 0x0D) + { + //무조건 맞는걸로 하자 체크섬은 체크하지 말자 + retval = true; + } + } + else if (tempBuffer.Count > maxlen) + { + RaiseMessage(MessageType.Error, $"buffer over({maxlen})"); + findstx2 = false; + findSTX = false; + datalen = 0; + tempBuffer.Clear(); + } + } + + + } + remainBuffer = remain.ToArray(); + return retval; + } + } +} diff --git a/Emulator/AGVEmulator/Form1.Designer.cs b/Emulator/AGVEmulator/Form1.Designer.cs new file mode 100644 index 0000000..c96319e --- /dev/null +++ b/Emulator/AGVEmulator/Form1.Designer.cs @@ -0,0 +1,1973 @@ + +namespace AGVEmulator +{ + partial class Form1 + { + /// + /// 필수 디자이너 변수입니다. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 사용 중인 모든 리소스를 정리합니다. + /// + /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form 디자이너에서 생성한 코드 + + /// + /// 디자이너 지원에 필요한 메서드입니다. + /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + arFrame.Control.ColorListItem colorListItem1 = new arFrame.Control.ColorListItem(); + arFrame.Control.ColorListItem colorListItem2 = new arFrame.Control.ColorListItem(); + arFrame.Control.ColorListItem colorListItem3 = new arFrame.Control.ColorListItem(); + arFrame.Control.ColorListItem colorListItem4 = new arFrame.Control.ColorListItem(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + AGVEmulator.UC.AgvViewer.ptdata ptdata1 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata2 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata3 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata4 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata5 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata6 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata7 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata8 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata9 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata10 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata11 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata12 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata13 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata14 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata15 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata16 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata17 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata18 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata19 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata20 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata21 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata22 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata23 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata24 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata25 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata26 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata27 = new AGVEmulator.UC.AgvViewer.ptdata(); + AGVEmulator.UC.AgvViewer.ptdata ptdata28 = new AGVEmulator.UC.AgvViewer.ptdata(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.rtBMS = new arCtl.LogTextBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.label6 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.trackBar1 = new System.Windows.Forms.TrackBar(); + this.rtAGV = new arCtl.LogTextBox(); + this.panel4 = new System.Windows.Forms.Panel(); + this.groupBox9 = new System.Windows.Forms.GroupBox(); + this.groupBox10 = new System.Windows.Forms.GroupBox(); + this.panel8 = new System.Windows.Forms.Panel(); + this.groupBox11 = new System.Windows.Forms.GroupBox(); + this.panel9 = new System.Windows.Forms.Panel(); + this.groupBox7 = new System.Windows.Forms.GroupBox(); + this.panel7 = new System.Windows.Forms.Panel(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.panel6 = new System.Windows.Forms.Panel(); + this.panel11 = new System.Windows.Forms.Panel(); + this.groupBox8 = new System.Windows.Forms.GroupBox(); + this.radioButton17 = new System.Windows.Forms.RadioButton(); + this.radioButton13 = new System.Windows.Forms.RadioButton(); + this.radioButton16 = new System.Windows.Forms.RadioButton(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.radioButton12 = new System.Windows.Forms.RadioButton(); + this.radioButton10 = new System.Windows.Forms.RadioButton(); + this.radioButton11 = new System.Windows.Forms.RadioButton(); + this.groupBox2 = new System.Windows.Forms.GroupBox(); + this.radioButton9 = new System.Windows.Forms.RadioButton(); + this.radioButton8 = new System.Windows.Forms.RadioButton(); + this.radioButton7 = new System.Windows.Forms.RadioButton(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this.radioButton14 = new System.Windows.Forms.RadioButton(); + this.radioButton15 = new System.Windows.Forms.RadioButton(); + this.panel13 = new System.Windows.Forms.Panel(); + this.chkSimulation = new System.Windows.Forms.CheckBox(); + this.checkBox3 = new System.Windows.Forms.CheckBox(); + this.panel10 = new System.Windows.Forms.Panel(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.button18 = new System.Windows.Forms.Button(); + this.button17 = new System.Windows.Forms.Button(); + this.button15 = new System.Windows.Forms.Button(); + this.button16 = new System.Windows.Forms.Button(); + this.button14 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this.rtCAL = new arCtl.LogTextBox(); + this.panel2 = new System.Windows.Forms.Panel(); + this.radioButton20 = new System.Windows.Forms.RadioButton(); + this.radioButton21 = new System.Windows.Forms.RadioButton(); + this.radioButton18 = new System.Windows.Forms.RadioButton(); + this.radioButton19 = new System.Windows.Forms.RadioButton(); + this.nudBMSKitNo = new System.Windows.Forms.NumericUpDown(); + this.label9 = new System.Windows.Forms.Label(); + this.radioButton6 = new System.Windows.Forms.RadioButton(); + this.radioButton5 = new System.Windows.Forms.RadioButton(); + this.radioButton4 = new System.Windows.Forms.RadioButton(); + this.radioButton3 = new System.Windows.Forms.RadioButton(); + this.radioButton2 = new System.Windows.Forms.RadioButton(); + this.radioButton1 = new System.Windows.Forms.RadioButton(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.rtPLC = new arCtl.LogTextBox(); + this.panel3 = new System.Windows.Forms.Panel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.gvdPLCInOut = new arFrame.Control.GridView(); + this.gvdPLCFlag = new arFrame.Control.GridView(); + this.label7 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.panel5 = new System.Windows.Forms.Panel(); + this.button11 = new System.Windows.Forms.Button(); + this.button12 = new System.Windows.Forms.Button(); + this.button13 = new System.Windows.Forms.Button(); + this.button10 = new System.Windows.Forms.Button(); + this.button9 = new System.Windows.Forms.Button(); + this.btPLCemg = new System.Windows.Forms.Button(); + this.button7 = new System.Windows.Forms.Button(); + this.checkBox2 = new System.Windows.Forms.CheckBox(); + this.button6 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.rtAGVPro = new arCtl.LogTextBox(); + this.panel12 = new System.Windows.Forms.Panel(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel8 = new System.Windows.Forms.ToolStripStatusLabel(); + this.sbAGV = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel6 = new System.Windows.Forms.ToolStripStatusLabel(); + this.sbPLC = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel4 = new System.Windows.Forms.ToolStripStatusLabel(); + this.sbBMS = new System.Windows.Forms.ToolStripStatusLabel(); + this.toolStripStatusLabel2 = new System.Windows.Forms.ToolStripStatusLabel(); + this.sbCAL = new System.Windows.Forms.ToolStripStatusLabel(); + this.btc1 = new System.Windows.Forms.Label(); + this.btc5 = new System.Windows.Forms.Label(); + this.btc6 = new System.Windows.Forms.Label(); + this.btc2 = new System.Windows.Forms.Label(); + this.btc7 = new System.Windows.Forms.Label(); + this.btc3 = new System.Windows.Forms.Label(); + this.btc8 = new System.Windows.Forms.Label(); + this.btc4 = new System.Windows.Forms.Label(); + this.agvViewer1 = new AGVEmulator.UC.AgvViewer(); + this.serAGV = new AGVEmulator.SerialConn(); + this.serPLC = new AGVEmulator.SerialConn(); + this.serBMS = new AGVEmulator.SerialConn(); + this.serCAL = new AGVEmulator.SerialConn(); + this.groupBox1.SuspendLayout(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit(); + this.panel4.SuspendLayout(); + this.groupBox9.SuspendLayout(); + this.groupBox10.SuspendLayout(); + this.groupBox11.SuspendLayout(); + this.groupBox7.SuspendLayout(); + this.groupBox6.SuspendLayout(); + this.panel11.SuspendLayout(); + this.groupBox8.SuspendLayout(); + this.groupBox4.SuspendLayout(); + this.groupBox2.SuspendLayout(); + this.groupBox5.SuspendLayout(); + this.panel13.SuspendLayout(); + this.panel10.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + this.groupBox3.SuspendLayout(); + this.panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudBMSKitNo)).BeginInit(); + this.panel3.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.panel5.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + this.panel12.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.toolStrip1.SuspendLayout(); + this.statusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.rtBMS); + this.groupBox1.Controls.Add(this.panel1); + this.groupBox1.Controls.Add(this.serBMS); + this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox1.Location = new System.Drawing.Point(3, 3); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(564, 610); + this.groupBox1.TabIndex = 0; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "BMS"; + // + // rtBMS + // + this.rtBMS.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(24)))), ((int)(((byte)(24)))), ((int)(((byte)(24))))); + this.rtBMS.ColorList = new arCtl.sLogMessageColor[0]; + this.rtBMS.DateFormat = "ss.fff"; + this.rtBMS.DefaultColor = System.Drawing.Color.LightGray; + this.rtBMS.Dock = System.Windows.Forms.DockStyle.Fill; + this.rtBMS.EnableDisplayTimer = false; + this.rtBMS.EnableGubunColor = true; + this.rtBMS.Font = new System.Drawing.Font("Consolas", 9F); + this.rtBMS.ListFormat = "[{0}] {1}"; + this.rtBMS.Location = new System.Drawing.Point(3, 204); + this.rtBMS.MaxListCount = ((ushort)(200)); + this.rtBMS.MaxTextLength = ((uint)(4000u)); + this.rtBMS.MessageInterval = 50; + this.rtBMS.Name = "rtBMS"; + this.rtBMS.Size = new System.Drawing.Size(558, 403); + this.rtBMS.TabIndex = 2; + this.rtBMS.Text = ""; + // + // panel1 + // + this.panel1.Controls.Add(this.btc8); + this.panel1.Controls.Add(this.btc4); + this.panel1.Controls.Add(this.btc7); + this.panel1.Controls.Add(this.btc3); + this.panel1.Controls.Add(this.btc6); + this.panel1.Controls.Add(this.btc2); + this.panel1.Controls.Add(this.btc5); + this.panel1.Controls.Add(this.btc1); + this.panel1.Controls.Add(this.checkBox1); + this.panel1.Controls.Add(this.label6); + this.panel1.Controls.Add(this.label5); + this.panel1.Controls.Add(this.label4); + this.panel1.Controls.Add(this.label3); + this.panel1.Controls.Add(this.label2); + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.trackBar1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(3, 101); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(558, 103); + this.panel1.TabIndex = 4; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Checked = true; + this.checkBox1.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox1.Location = new System.Drawing.Point(14, 77); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(70, 16); + this.checkBox1.TabIndex = 6; + this.checkBox1.Text = "decrese"; + this.checkBox1.UseVisualStyleBackColor = true; + // + // label6 + // + this.label6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.label6.ForeColor = System.Drawing.Color.White; + this.label6.Location = new System.Drawing.Point(14, 44); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(68, 24); + this.label6.TabIndex = 5; + this.label6.Text = "Curr"; + this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label5 + // + this.label5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.label5.ForeColor = System.Drawing.Color.White; + this.label5.Location = new System.Drawing.Point(189, 6); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(75, 24); + this.label5.TabIndex = 3; + this.label5.Text = "Curr"; + this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label4 + // + this.label4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.label4.ForeColor = System.Drawing.Color.White; + this.label4.Location = new System.Drawing.Point(213, 44); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(50, 24); + this.label4.TabIndex = 2; + this.label4.Text = "80"; + this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label3 + // + this.label3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.label3.ForeColor = System.Drawing.Color.White; + this.label3.Location = new System.Drawing.Point(123, 44); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(48, 24); + this.label3.TabIndex = 2; + this.label3.Text = "Curr"; + this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(177, 50); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(30, 12); + this.label2.TabIndex = 1; + this.label2.Text = "Max"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(88, 50); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(29, 12); + this.label1.TabIndex = 1; + this.label1.Text = "Curr"; + // + // trackBar1 + // + this.trackBar1.LargeChange = 10; + this.trackBar1.Location = new System.Drawing.Point(14, 6); + this.trackBar1.Maximum = 8000; + this.trackBar1.Name = "trackBar1"; + this.trackBar1.Size = new System.Drawing.Size(172, 45); + this.trackBar1.SmallChange = 5; + this.trackBar1.TabIndex = 0; + this.trackBar1.Value = 7000; + this.trackBar1.Scroll += new System.EventHandler(this.trackBar1_Scroll); + // + // rtAGV + // + this.rtAGV.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(24)))), ((int)(((byte)(24)))), ((int)(((byte)(24))))); + this.rtAGV.ColorList = new arCtl.sLogMessageColor[0]; + this.rtAGV.DateFormat = "ss.fff"; + this.rtAGV.DefaultColor = System.Drawing.Color.LightGray; + this.rtAGV.Dock = System.Windows.Forms.DockStyle.Fill; + this.rtAGV.EnableDisplayTimer = false; + this.rtAGV.EnableGubunColor = true; + this.rtAGV.Font = new System.Drawing.Font("Consolas", 8F); + this.rtAGV.ListFormat = "[{0}] {1}"; + this.rtAGV.Location = new System.Drawing.Point(3, 3); + this.rtAGV.MaxListCount = ((ushort)(200)); + this.rtAGV.MaxTextLength = ((uint)(4000u)); + this.rtAGV.MessageInterval = 50; + this.rtAGV.Name = "rtAGV"; + this.rtAGV.Size = new System.Drawing.Size(795, 210); + this.rtAGV.TabIndex = 2; + this.rtAGV.Text = ""; + // + // panel4 + // + this.panel4.Controls.Add(this.groupBox9); + this.panel4.Controls.Add(this.panel10); + this.panel4.Dock = System.Windows.Forms.DockStyle.Top; + this.panel4.Location = new System.Drawing.Point(3, 123); + this.panel4.Name = "panel4"; + this.panel4.Size = new System.Drawing.Size(1140, 280); + this.panel4.TabIndex = 3; + this.panel4.Paint += new System.Windows.Forms.PaintEventHandler(this.panel4_Paint); + // + // groupBox9 + // + this.groupBox9.Controls.Add(this.groupBox10); + this.groupBox9.Controls.Add(this.groupBox11); + this.groupBox9.Controls.Add(this.groupBox7); + this.groupBox9.Controls.Add(this.groupBox6); + this.groupBox9.Controls.Add(this.panel11); + this.groupBox9.Controls.Add(this.panel13); + this.groupBox9.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox9.Location = new System.Drawing.Point(0, 0); + this.groupBox9.Name = "groupBox9"; + this.groupBox9.Size = new System.Drawing.Size(982, 280); + this.groupBox9.TabIndex = 13; + this.groupBox9.TabStop = false; + this.groupBox9.Text = "Status"; + this.groupBox9.Enter += new System.EventHandler(this.groupBox9_Enter); + // + // groupBox10 + // + this.groupBox10.Controls.Add(this.panel8); + this.groupBox10.Dock = System.Windows.Forms.DockStyle.Left; + this.groupBox10.Location = new System.Drawing.Point(652, 44); + this.groupBox10.Name = "groupBox10"; + this.groupBox10.Size = new System.Drawing.Size(189, 233); + this.groupBox10.TabIndex = 12; + this.groupBox10.TabStop = false; + this.groupBox10.Text = "signal"; + // + // panel8 + // + this.panel8.AutoScroll = true; + this.panel8.AutoSize = true; + this.panel8.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel8.Location = new System.Drawing.Point(3, 17); + this.panel8.Name = "panel8"; + this.panel8.Size = new System.Drawing.Size(183, 213); + this.panel8.TabIndex = 1; + this.panel8.Tag = "sg"; + // + // groupBox11 + // + this.groupBox11.Controls.Add(this.panel9); + this.groupBox11.Dock = System.Windows.Forms.DockStyle.Left; + this.groupBox11.Location = new System.Drawing.Point(430, 44); + this.groupBox11.Name = "groupBox11"; + this.groupBox11.Size = new System.Drawing.Size(222, 233); + this.groupBox11.TabIndex = 12; + this.groupBox11.TabStop = false; + this.groupBox11.Text = "error"; + // + // panel9 + // + this.panel9.AutoScroll = true; + this.panel9.AutoSize = true; + this.panel9.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel9.Location = new System.Drawing.Point(3, 17); + this.panel9.Name = "panel9"; + this.panel9.Size = new System.Drawing.Size(216, 213); + this.panel9.TabIndex = 0; + this.panel9.Tag = "er"; + // + // groupBox7 + // + this.groupBox7.Controls.Add(this.panel7); + this.groupBox7.Dock = System.Windows.Forms.DockStyle.Left; + this.groupBox7.Location = new System.Drawing.Point(241, 44); + this.groupBox7.Name = "groupBox7"; + this.groupBox7.Size = new System.Drawing.Size(189, 233); + this.groupBox7.TabIndex = 12; + this.groupBox7.TabStop = false; + this.groupBox7.Text = "System 1"; + // + // panel7 + // + this.panel7.AutoScroll = true; + this.panel7.AutoSize = true; + this.panel7.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel7.Location = new System.Drawing.Point(3, 17); + this.panel7.Name = "panel7"; + this.panel7.Size = new System.Drawing.Size(183, 213); + this.panel7.TabIndex = 1; + this.panel7.Tag = "s1"; + // + // groupBox6 + // + this.groupBox6.Controls.Add(this.panel6); + this.groupBox6.Dock = System.Windows.Forms.DockStyle.Left; + this.groupBox6.Location = new System.Drawing.Point(3, 44); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(238, 233); + this.groupBox6.TabIndex = 12; + this.groupBox6.TabStop = false; + this.groupBox6.Text = "System 0"; + // + // panel6 + // + this.panel6.AutoScroll = true; + this.panel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel6.Location = new System.Drawing.Point(3, 17); + this.panel6.Name = "panel6"; + this.panel6.Size = new System.Drawing.Size(232, 213); + this.panel6.TabIndex = 0; + this.panel6.Tag = "s0"; + // + // panel11 + // + this.panel11.Controls.Add(this.groupBox8); + this.panel11.Controls.Add(this.groupBox4); + this.panel11.Controls.Add(this.groupBox2); + this.panel11.Controls.Add(this.groupBox5); + this.panel11.Dock = System.Windows.Forms.DockStyle.Right; + this.panel11.Location = new System.Drawing.Point(846, 44); + this.panel11.Name = "panel11"; + this.panel11.Padding = new System.Windows.Forms.Padding(5); + this.panel11.Size = new System.Drawing.Size(133, 233); + this.panel11.TabIndex = 13; + // + // groupBox8 + // + this.groupBox8.Controls.Add(this.radioButton17); + this.groupBox8.Controls.Add(this.radioButton13); + this.groupBox8.Controls.Add(this.radioButton16); + this.groupBox8.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox8.Location = new System.Drawing.Point(5, 149); + this.groupBox8.Name = "groupBox8"; + this.groupBox8.Size = new System.Drawing.Size(123, 48); + this.groupBox8.TabIndex = 12; + this.groupBox8.TabStop = false; + this.groupBox8.Text = "PBS"; + // + // radioButton17 + // + this.radioButton17.AutoSize = true; + this.radioButton17.Checked = true; + this.radioButton17.Location = new System.Drawing.Point(6, 20); + this.radioButton17.Name = "radioButton17"; + this.radioButton17.Size = new System.Drawing.Size(29, 16); + this.radioButton17.TabIndex = 10; + this.radioButton17.TabStop = true; + this.radioButton17.Text = "0"; + this.radioButton17.UseVisualStyleBackColor = true; + // + // radioButton13 + // + this.radioButton13.AutoSize = true; + this.radioButton13.Location = new System.Drawing.Point(76, 20); + this.radioButton13.Name = "radioButton13"; + this.radioButton13.Size = new System.Drawing.Size(29, 16); + this.radioButton13.TabIndex = 9; + this.radioButton13.Text = "2"; + this.radioButton13.UseVisualStyleBackColor = true; + // + // radioButton16 + // + this.radioButton16.AutoSize = true; + this.radioButton16.Location = new System.Drawing.Point(41, 20); + this.radioButton16.Name = "radioButton16"; + this.radioButton16.Size = new System.Drawing.Size(29, 16); + this.radioButton16.TabIndex = 9; + this.radioButton16.Text = "1"; + this.radioButton16.UseVisualStyleBackColor = true; + // + // groupBox4 + // + this.groupBox4.Controls.Add(this.radioButton12); + this.groupBox4.Controls.Add(this.radioButton10); + this.groupBox4.Controls.Add(this.radioButton11); + this.groupBox4.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox4.Location = new System.Drawing.Point(5, 101); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(123, 48); + this.groupBox4.TabIndex = 11; + this.groupBox4.TabStop = false; + this.groupBox4.Text = "속도"; + // + // radioButton12 + // + this.radioButton12.AutoSize = true; + this.radioButton12.Checked = true; + this.radioButton12.Location = new System.Drawing.Point(7, 20); + this.radioButton12.Name = "radioButton12"; + this.radioButton12.Size = new System.Drawing.Size(30, 16); + this.radioButton12.TabIndex = 10; + this.radioButton12.TabStop = true; + this.radioButton12.Text = "L"; + this.radioButton12.UseVisualStyleBackColor = true; + // + // radioButton10 + // + this.radioButton10.AutoSize = true; + this.radioButton10.Location = new System.Drawing.Point(83, 20); + this.radioButton10.Name = "radioButton10"; + this.radioButton10.Size = new System.Drawing.Size(31, 16); + this.radioButton10.TabIndex = 9; + this.radioButton10.Text = "H"; + this.radioButton10.UseVisualStyleBackColor = true; + // + // radioButton11 + // + this.radioButton11.AutoSize = true; + this.radioButton11.Location = new System.Drawing.Point(44, 20); + this.radioButton11.Name = "radioButton11"; + this.radioButton11.Size = new System.Drawing.Size(34, 16); + this.radioButton11.TabIndex = 9; + this.radioButton11.Text = "M"; + this.radioButton11.UseVisualStyleBackColor = true; + // + // groupBox2 + // + this.groupBox2.Controls.Add(this.radioButton9); + this.groupBox2.Controls.Add(this.radioButton8); + this.groupBox2.Controls.Add(this.radioButton7); + this.groupBox2.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox2.Location = new System.Drawing.Point(5, 53); + this.groupBox2.Name = "groupBox2"; + this.groupBox2.Size = new System.Drawing.Size(123, 48); + this.groupBox2.TabIndex = 10; + this.groupBox2.TabStop = false; + this.groupBox2.Text = "분기"; + // + // radioButton9 + // + this.radioButton9.AutoSize = true; + this.radioButton9.Location = new System.Drawing.Point(80, 20); + this.radioButton9.Name = "radioButton9"; + this.radioButton9.Size = new System.Drawing.Size(31, 16); + this.radioButton9.TabIndex = 9; + this.radioButton9.Text = "R"; + this.radioButton9.UseVisualStyleBackColor = true; + // + // radioButton8 + // + this.radioButton8.AutoSize = true; + this.radioButton8.Checked = true; + this.radioButton8.Location = new System.Drawing.Point(43, 20); + this.radioButton8.Name = "radioButton8"; + this.radioButton8.Size = new System.Drawing.Size(31, 16); + this.radioButton8.TabIndex = 9; + this.radioButton8.TabStop = true; + this.radioButton8.Text = "S"; + this.radioButton8.UseVisualStyleBackColor = true; + // + // radioButton7 + // + this.radioButton7.AutoSize = true; + this.radioButton7.Location = new System.Drawing.Point(7, 20); + this.radioButton7.Name = "radioButton7"; + this.radioButton7.Size = new System.Drawing.Size(30, 16); + this.radioButton7.TabIndex = 9; + this.radioButton7.Text = "L"; + this.radioButton7.UseVisualStyleBackColor = true; + // + // groupBox5 + // + this.groupBox5.Controls.Add(this.radioButton14); + this.groupBox5.Controls.Add(this.radioButton15); + this.groupBox5.Dock = System.Windows.Forms.DockStyle.Top; + this.groupBox5.Location = new System.Drawing.Point(5, 5); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(123, 48); + this.groupBox5.TabIndex = 11; + this.groupBox5.TabStop = false; + this.groupBox5.Text = "방향"; + // + // radioButton14 + // + this.radioButton14.AutoSize = true; + this.radioButton14.Location = new System.Drawing.Point(43, 20); + this.radioButton14.Name = "radioButton14"; + this.radioButton14.Size = new System.Drawing.Size(31, 16); + this.radioButton14.TabIndex = 9; + this.radioButton14.Text = "B"; + this.radioButton14.UseVisualStyleBackColor = true; + // + // radioButton15 + // + this.radioButton15.AutoSize = true; + this.radioButton15.Checked = true; + this.radioButton15.Location = new System.Drawing.Point(7, 20); + this.radioButton15.Name = "radioButton15"; + this.radioButton15.Size = new System.Drawing.Size(30, 16); + this.radioButton15.TabIndex = 9; + this.radioButton15.TabStop = true; + this.radioButton15.Text = "F"; + this.radioButton15.UseVisualStyleBackColor = true; + // + // panel13 + // + this.panel13.Controls.Add(this.chkSimulation); + this.panel13.Controls.Add(this.checkBox3); + this.panel13.Dock = System.Windows.Forms.DockStyle.Top; + this.panel13.Location = new System.Drawing.Point(3, 17); + this.panel13.Name = "panel13"; + this.panel13.Size = new System.Drawing.Size(976, 27); + this.panel13.TabIndex = 14; + // + // chkSimulation + // + this.chkSimulation.Checked = true; + this.chkSimulation.CheckState = System.Windows.Forms.CheckState.Checked; + this.chkSimulation.Dock = System.Windows.Forms.DockStyle.Left; + this.chkSimulation.Location = new System.Drawing.Point(122, 0); + this.chkSimulation.Name = "chkSimulation"; + this.chkSimulation.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.chkSimulation.Size = new System.Drawing.Size(122, 27); + this.chkSimulation.TabIndex = 9; + this.chkSimulation.Text = "Animation"; + this.chkSimulation.UseVisualStyleBackColor = true; + // + // checkBox3 + // + this.checkBox3.Checked = true; + this.checkBox3.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox3.Dock = System.Windows.Forms.DockStyle.Left; + this.checkBox3.Location = new System.Drawing.Point(0, 0); + this.checkBox3.Name = "checkBox3"; + this.checkBox3.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0); + this.checkBox3.Size = new System.Drawing.Size(122, 27); + this.checkBox3.TabIndex = 8; + this.checkBox3.Text = "Send Status"; + this.checkBox3.UseVisualStyleBackColor = true; + // + // panel10 + // + this.panel10.Controls.Add(this.numericUpDown1); + this.panel10.Controls.Add(this.button18); + this.panel10.Controls.Add(this.button17); + this.panel10.Controls.Add(this.button15); + this.panel10.Controls.Add(this.button16); + this.panel10.Controls.Add(this.button14); + this.panel10.Controls.Add(this.button5); + this.panel10.Controls.Add(this.button4); + this.panel10.Dock = System.Windows.Forms.DockStyle.Right; + this.panel10.Location = new System.Drawing.Point(982, 0); + this.panel10.Name = "panel10"; + this.panel10.Size = new System.Drawing.Size(158, 280); + this.panel10.TabIndex = 14; + // + // numericUpDown1 + // + this.numericUpDown1.Font = new System.Drawing.Font("굴림", 20F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.numericUpDown1.Location = new System.Drawing.Point(19, 220); + this.numericUpDown1.Maximum = new decimal(new int[] { + 9999999, + 0, + 0, + 0}); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(130, 38); + this.numericUpDown1.TabIndex = 9; + this.numericUpDown1.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.numericUpDown1.Value = new decimal(new int[] { + 9900, + 0, + 0, + 0}); + // + // button18 + // + this.button18.Location = new System.Drawing.Point(19, 187); + this.button18.Name = "button18"; + this.button18.Size = new System.Drawing.Size(130, 28); + this.button18.TabIndex = 8; + this.button18.Tag = "--"; + this.button18.Text = "TAG"; + this.button18.UseVisualStyleBackColor = true; + this.button18.Click += new System.EventHandler(this.button18_Click); + // + // button17 + // + this.button17.Location = new System.Drawing.Point(87, 68); + this.button17.Name = "button17"; + this.button17.Size = new System.Drawing.Size(62, 54); + this.button17.TabIndex = 7; + this.button17.Text = "reset"; + this.button17.UseVisualStyleBackColor = true; + this.button17.Click += new System.EventHandler(this.button17_Click); + // + // button15 + // + this.button15.Location = new System.Drawing.Point(87, 128); + this.button15.Name = "button15"; + this.button15.Size = new System.Drawing.Size(62, 54); + this.button15.TabIndex = 6; + this.button15.Tag = "--"; + this.button15.Text = "PBS Of"; + this.button15.UseVisualStyleBackColor = true; + this.button15.Click += new System.EventHandler(this.button15_Click); + // + // button16 + // + this.button16.Location = new System.Drawing.Point(19, 126); + this.button16.Name = "button16"; + this.button16.Size = new System.Drawing.Size(62, 54); + this.button16.TabIndex = 5; + this.button16.Tag = "--"; + this.button16.Text = "PBS On"; + this.button16.UseVisualStyleBackColor = true; + this.button16.Click += new System.EventHandler(this.button16_Click); + // + // button14 + // + this.button14.Location = new System.Drawing.Point(19, 66); + this.button14.Name = "button14"; + this.button14.Size = new System.Drawing.Size(62, 54); + this.button14.TabIndex = 3; + this.button14.Text = "emg"; + this.button14.UseVisualStyleBackColor = true; + this.button14.Click += new System.EventHandler(this.button14_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(19, 6); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(62, 54); + this.button5.TabIndex = 2; + this.button5.Text = "ACK"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(87, 6); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(62, 54); + this.button4.TabIndex = 1; + this.button4.Text = "NAK"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // groupBox3 + // + this.groupBox3.Controls.Add(this.rtCAL); + this.groupBox3.Controls.Add(this.panel2); + this.groupBox3.Controls.Add(this.serCAL); + this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill; + this.groupBox3.Location = new System.Drawing.Point(573, 3); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(564, 610); + this.groupBox3.TabIndex = 0; + this.groupBox3.TabStop = false; + this.groupBox3.Text = "Call button ( custom button)"; + // + // rtCAL + // + this.rtCAL.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(24)))), ((int)(((byte)(24)))), ((int)(((byte)(24))))); + this.rtCAL.ColorList = new arCtl.sLogMessageColor[0]; + this.rtCAL.DateFormat = "ss.fff"; + this.rtCAL.DefaultColor = System.Drawing.Color.LightGray; + this.rtCAL.Dock = System.Windows.Forms.DockStyle.Fill; + this.rtCAL.EnableDisplayTimer = false; + this.rtCAL.EnableGubunColor = true; + this.rtCAL.Font = new System.Drawing.Font("Consolas", 9F); + this.rtCAL.ListFormat = "[{0}] {1}"; + this.rtCAL.Location = new System.Drawing.Point(3, 204); + this.rtCAL.MaxListCount = ((ushort)(200)); + this.rtCAL.MaxTextLength = ((uint)(4000u)); + this.rtCAL.MessageInterval = 50; + this.rtCAL.Name = "rtCAL"; + this.rtCAL.Size = new System.Drawing.Size(558, 403); + this.rtCAL.TabIndex = 2; + this.rtCAL.Text = ""; + // + // panel2 + // + this.panel2.Controls.Add(this.radioButton20); + this.panel2.Controls.Add(this.radioButton21); + this.panel2.Controls.Add(this.radioButton18); + this.panel2.Controls.Add(this.radioButton19); + this.panel2.Controls.Add(this.nudBMSKitNo); + this.panel2.Controls.Add(this.label9); + this.panel2.Controls.Add(this.radioButton6); + this.panel2.Controls.Add(this.radioButton5); + this.panel2.Controls.Add(this.radioButton4); + this.panel2.Controls.Add(this.radioButton3); + this.panel2.Controls.Add(this.radioButton2); + this.panel2.Controls.Add(this.radioButton1); + this.panel2.Controls.Add(this.button3); + this.panel2.Controls.Add(this.button2); + this.panel2.Controls.Add(this.button1); + this.panel2.Dock = System.Windows.Forms.DockStyle.Top; + this.panel2.Location = new System.Drawing.Point(3, 101); + this.panel2.Name = "panel2"; + this.panel2.Size = new System.Drawing.Size(558, 103); + this.panel2.TabIndex = 3; + // + // radioButton20 + // + this.radioButton20.AutoSize = true; + this.radioButton20.Location = new System.Drawing.Point(331, 11); + this.radioButton20.Name = "radioButton20"; + this.radioButton20.Size = new System.Drawing.Size(29, 16); + this.radioButton20.TabIndex = 12; + this.radioButton20.Text = "9"; + this.radioButton20.UseVisualStyleBackColor = true; + this.radioButton20.Click += new System.EventHandler(this.radioButton20_Click); + // + // radioButton21 + // + this.radioButton21.AutoSize = true; + this.radioButton21.Checked = true; + this.radioButton21.Location = new System.Drawing.Point(296, 11); + this.radioButton21.Name = "radioButton21"; + this.radioButton21.Size = new System.Drawing.Size(29, 16); + this.radioButton21.TabIndex = 11; + this.radioButton21.TabStop = true; + this.radioButton21.Text = "8"; + this.radioButton21.UseVisualStyleBackColor = true; + this.radioButton21.Click += new System.EventHandler(this.radioButton20_Click); + // + // radioButton18 + // + this.radioButton18.AutoSize = true; + this.radioButton18.Location = new System.Drawing.Point(261, 11); + this.radioButton18.Name = "radioButton18"; + this.radioButton18.Size = new System.Drawing.Size(29, 16); + this.radioButton18.TabIndex = 10; + this.radioButton18.Text = "7"; + this.radioButton18.UseVisualStyleBackColor = true; + this.radioButton18.Click += new System.EventHandler(this.radioButton20_Click); + // + // radioButton19 + // + this.radioButton19.AutoSize = true; + this.radioButton19.Location = new System.Drawing.Point(226, 11); + this.radioButton19.Name = "radioButton19"; + this.radioButton19.Size = new System.Drawing.Size(29, 16); + this.radioButton19.TabIndex = 9; + this.radioButton19.Text = "6"; + this.radioButton19.UseVisualStyleBackColor = true; + this.radioButton19.Click += new System.EventHandler(this.radioButton20_Click); + // + // nudBMSKitNo + // + this.nudBMSKitNo.Font = new System.Drawing.Font("Microsoft Sans Serif", 50F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.nudBMSKitNo.Location = new System.Drawing.Point(435, 7); + this.nudBMSKitNo.Name = "nudBMSKitNo"; + this.nudBMSKitNo.Size = new System.Drawing.Size(120, 83); + this.nudBMSKitNo.TabIndex = 8; + this.nudBMSKitNo.Tag = "1"; + this.nudBMSKitNo.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.nudBMSKitNo.Value = new decimal(new int[] { + 8, + 0, + 0, + 0}); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(390, 16); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(39, 12); + this.label9.TabIndex = 7; + this.label9.Text = "Kit No"; + // + // radioButton6 + // + this.radioButton6.AutoSize = true; + this.radioButton6.Location = new System.Drawing.Point(191, 11); + this.radioButton6.Name = "radioButton6"; + this.radioButton6.Size = new System.Drawing.Size(29, 16); + this.radioButton6.TabIndex = 6; + this.radioButton6.Text = "5"; + this.radioButton6.UseVisualStyleBackColor = true; + this.radioButton6.Click += new System.EventHandler(this.radioButton20_Click); + // + // radioButton5 + // + this.radioButton5.AutoSize = true; + this.radioButton5.Location = new System.Drawing.Point(156, 11); + this.radioButton5.Name = "radioButton5"; + this.radioButton5.Size = new System.Drawing.Size(29, 16); + this.radioButton5.TabIndex = 5; + this.radioButton5.Text = "4"; + this.radioButton5.UseVisualStyleBackColor = true; + this.radioButton5.Click += new System.EventHandler(this.radioButton20_Click); + // + // radioButton4 + // + this.radioButton4.AutoSize = true; + this.radioButton4.Location = new System.Drawing.Point(121, 11); + this.radioButton4.Name = "radioButton4"; + this.radioButton4.Size = new System.Drawing.Size(29, 16); + this.radioButton4.TabIndex = 4; + this.radioButton4.Text = "3"; + this.radioButton4.UseVisualStyleBackColor = true; + this.radioButton4.Click += new System.EventHandler(this.radioButton20_Click); + // + // radioButton3 + // + this.radioButton3.AutoSize = true; + this.radioButton3.Location = new System.Drawing.Point(86, 11); + this.radioButton3.Name = "radioButton3"; + this.radioButton3.Size = new System.Drawing.Size(29, 16); + this.radioButton3.TabIndex = 3; + this.radioButton3.Text = "2"; + this.radioButton3.UseVisualStyleBackColor = true; + this.radioButton3.Click += new System.EventHandler(this.radioButton20_Click); + // + // radioButton2 + // + this.radioButton2.AutoSize = true; + this.radioButton2.Location = new System.Drawing.Point(51, 11); + this.radioButton2.Name = "radioButton2"; + this.radioButton2.Size = new System.Drawing.Size(29, 16); + this.radioButton2.TabIndex = 2; + this.radioButton2.Text = "1"; + this.radioButton2.UseVisualStyleBackColor = true; + this.radioButton2.Click += new System.EventHandler(this.radioButton20_Click); + // + // radioButton1 + // + this.radioButton1.AutoSize = true; + this.radioButton1.Location = new System.Drawing.Point(16, 11); + this.radioButton1.Name = "radioButton1"; + this.radioButton1.Size = new System.Drawing.Size(29, 16); + this.radioButton1.TabIndex = 1; + this.radioButton1.Text = "0"; + this.radioButton1.UseVisualStyleBackColor = true; + this.radioButton1.Click += new System.EventHandler(this.radioButton20_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(246, 34); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(96, 59); + this.button3.TabIndex = 0; + this.button3.Tag = "0"; + this.button3.Text = "Blue\r\n(Cancel)"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button1_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(131, 34); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(96, 59); + this.button2.TabIndex = 0; + this.button2.Tag = "2"; + this.button2.Text = "White\r\n(Spare)"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button1_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(16, 34); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(96, 59); + this.button1.TabIndex = 0; + this.button1.Tag = "1"; + this.button1.Text = "Green\r\n(Call)"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // rtPLC + // + this.rtPLC.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(24)))), ((int)(((byte)(24)))), ((int)(((byte)(24))))); + this.rtPLC.ColorList = new arCtl.sLogMessageColor[0]; + this.rtPLC.DateFormat = "ss.fff"; + this.rtPLC.DefaultColor = System.Drawing.Color.LightGray; + this.rtPLC.Dock = System.Windows.Forms.DockStyle.Fill; + this.rtPLC.EnableDisplayTimer = false; + this.rtPLC.EnableGubunColor = true; + this.rtPLC.Font = new System.Drawing.Font("Consolas", 9F); + this.rtPLC.ListFormat = "[{0}] {1}"; + this.rtPLC.Location = new System.Drawing.Point(0, 302); + this.rtPLC.MaxListCount = ((ushort)(200)); + this.rtPLC.MaxTextLength = ((uint)(4000u)); + this.rtPLC.MessageInterval = 50; + this.rtPLC.Name = "rtPLC"; + this.rtPLC.Size = new System.Drawing.Size(1146, 320); + this.rtPLC.TabIndex = 2; + this.rtPLC.Text = ""; + // + // panel3 + // + this.panel3.Controls.Add(this.tableLayoutPanel2); + this.panel3.Controls.Add(this.panel5); + this.panel3.Dock = System.Windows.Forms.DockStyle.Top; + this.panel3.Location = new System.Drawing.Point(0, 84); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(1146, 218); + this.panel3.TabIndex = 3; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.ColumnCount = 2; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 77.68595F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 22.31405F)); + this.tableLayoutPanel2.Controls.Add(this.gvdPLCInOut, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.gvdPLCFlag, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.label7, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.label8, 1, 0); + this.tableLayoutPanel2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 2; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(818, 218); + this.tableLayoutPanel2.TabIndex = 9; + // + // gvdPLCInOut + // + this.gvdPLCInOut.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100))))); + this.gvdPLCInOut.BorderSize = 1; + colorListItem1.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(30)))), ((int)(((byte)(30))))); + colorListItem1.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18))))); + colorListItem1.Remark = ""; + colorListItem2.BackColor1 = System.Drawing.Color.Orange; + colorListItem2.BackColor2 = System.Drawing.Color.DarkOrange; + colorListItem2.Remark = ""; + this.gvdPLCInOut.ColorList = new arFrame.Control.ColorListItem[] { + colorListItem1, + colorListItem2}; + this.gvdPLCInOut.Cursor = System.Windows.Forms.Cursors.Arrow; + this.gvdPLCInOut.Dock = System.Windows.Forms.DockStyle.Fill; + this.gvdPLCInOut.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.gvdPLCInOut.FontPin = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold); + this.gvdPLCInOut.ForeColor = System.Drawing.Color.White; + this.gvdPLCInOut.ForeColorPin = System.Drawing.Color.WhiteSmoke; + this.gvdPLCInOut.Location = new System.Drawing.Point(3, 23); + this.gvdPLCInOut.MatrixSize = new System.Drawing.Point(8, 3); + this.gvdPLCInOut.MenuBorderSize = 1; + this.gvdPLCInOut.MenuGap = 5; + this.gvdPLCInOut.MinimumSize = new System.Drawing.Size(100, 50); + this.gvdPLCInOut.Name = "gvdPLCInOut"; + this.gvdPLCInOut.Names = null; + this.gvdPLCInOut.ShadowColor = System.Drawing.Color.Black; + this.gvdPLCInOut.showDebugInfo = false; + this.gvdPLCInOut.ShowIndexString = true; + this.gvdPLCInOut.Size = new System.Drawing.Size(629, 192); + this.gvdPLCInOut.TabIndex = 12; + this.gvdPLCInOut.Tags = null; + this.gvdPLCInOut.Text = "gridView1"; + this.gvdPLCInOut.TextAttachToImage = true; + this.gvdPLCInOut.Titles = null; + this.gvdPLCInOut.Values = null; + // + // gvdPLCFlag + // + this.gvdPLCFlag.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100))))); + this.gvdPLCFlag.BorderSize = 1; + colorListItem3.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(30)))), ((int)(((byte)(30))))); + colorListItem3.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18))))); + colorListItem3.Remark = ""; + colorListItem4.BackColor1 = System.Drawing.Color.Orange; + colorListItem4.BackColor2 = System.Drawing.Color.DarkOrange; + colorListItem4.Remark = ""; + this.gvdPLCFlag.ColorList = new arFrame.Control.ColorListItem[] { + colorListItem3, + colorListItem4}; + this.gvdPLCFlag.Cursor = System.Windows.Forms.Cursors.Arrow; + this.gvdPLCFlag.Dock = System.Windows.Forms.DockStyle.Fill; + this.gvdPLCFlag.Font = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.gvdPLCFlag.FontPin = new System.Drawing.Font("Consolas", 8.25F, System.Drawing.FontStyle.Bold); + this.gvdPLCFlag.ForeColor = System.Drawing.Color.White; + this.gvdPLCFlag.ForeColorPin = System.Drawing.Color.WhiteSmoke; + this.gvdPLCFlag.Location = new System.Drawing.Point(638, 23); + this.gvdPLCFlag.MatrixSize = new System.Drawing.Point(8, 4); + this.gvdPLCFlag.MenuBorderSize = 1; + this.gvdPLCFlag.MenuGap = 5; + this.gvdPLCFlag.MinimumSize = new System.Drawing.Size(100, 50); + this.gvdPLCFlag.Name = "gvdPLCFlag"; + this.gvdPLCFlag.Names = null; + this.gvdPLCFlag.ShadowColor = System.Drawing.Color.Black; + this.gvdPLCFlag.showDebugInfo = false; + this.gvdPLCFlag.ShowIndexString = true; + this.gvdPLCFlag.Size = new System.Drawing.Size(177, 192); + this.gvdPLCFlag.TabIndex = 11; + this.gvdPLCFlag.Tags = null; + this.gvdPLCFlag.Text = "gridView1"; + this.gvdPLCFlag.TextAttachToImage = true; + this.gvdPLCFlag.Titles = null; + this.gvdPLCFlag.Values = null; + // + // label7 + // + this.label7.Dock = System.Windows.Forms.DockStyle.Fill; + this.label7.Location = new System.Drawing.Point(3, 0); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(629, 20); + this.label7.TabIndex = 13; + this.label7.Text = "I/O"; + this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // label8 + // + this.label8.Dock = System.Windows.Forms.DockStyle.Fill; + this.label8.Location = new System.Drawing.Point(638, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(177, 20); + this.label8.TabIndex = 13; + this.label8.Text = "FLAG"; + this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // panel5 + // + this.panel5.Controls.Add(this.button11); + this.panel5.Controls.Add(this.button12); + this.panel5.Controls.Add(this.button13); + this.panel5.Controls.Add(this.button10); + this.panel5.Controls.Add(this.button9); + this.panel5.Controls.Add(this.btPLCemg); + this.panel5.Controls.Add(this.button7); + this.panel5.Controls.Add(this.checkBox2); + this.panel5.Controls.Add(this.button6); + this.panel5.Controls.Add(this.button8); + this.panel5.Dock = System.Windows.Forms.DockStyle.Right; + this.panel5.Location = new System.Drawing.Point(818, 0); + this.panel5.Name = "panel5"; + this.panel5.Size = new System.Drawing.Size(328, 218); + this.panel5.TabIndex = 8; + // + // button11 + // + this.button11.Location = new System.Drawing.Point(178, 156); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(76, 54); + this.button11.TabIndex = 13; + this.button11.Text = "But #3"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // button12 + // + this.button12.Location = new System.Drawing.Point(178, 96); + this.button12.Name = "button12"; + this.button12.Size = new System.Drawing.Size(76, 54); + this.button12.TabIndex = 12; + this.button12.Text = "But #2"; + this.button12.UseVisualStyleBackColor = true; + this.button12.Click += new System.EventHandler(this.button12_Click); + // + // button13 + // + this.button13.Location = new System.Drawing.Point(178, 35); + this.button13.Name = "button13"; + this.button13.Size = new System.Drawing.Size(76, 54); + this.button13.TabIndex = 11; + this.button13.Text = "But #1"; + this.button13.UseVisualStyleBackColor = true; + this.button13.Click += new System.EventHandler(this.button13_Click); + // + // button10 + // + this.button10.Location = new System.Drawing.Point(96, 156); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(76, 54); + this.button10.TabIndex = 10; + this.button10.Text = "Limit - R"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(96, 96); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(76, 54); + this.button9.TabIndex = 9; + this.button9.Text = "Limit - L"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // btPLCemg + // + this.btPLCemg.Location = new System.Drawing.Point(96, 35); + this.btPLCemg.Name = "btPLCemg"; + this.btPLCemg.Size = new System.Drawing.Size(76, 54); + this.btPLCemg.TabIndex = 8; + this.btPLCemg.Text = "Emg"; + this.btPLCemg.UseVisualStyleBackColor = true; + this.btPLCemg.Click += new System.EventHandler(this.btPLCemg_Click); + // + // button7 + // + this.button7.Location = new System.Drawing.Point(14, 36); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(76, 54); + this.button7.TabIndex = 4; + this.button7.Text = "UP"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // checkBox2 + // + this.checkBox2.AutoSize = true; + this.checkBox2.Checked = true; + this.checkBox2.CheckState = System.Windows.Forms.CheckState.Checked; + this.checkBox2.Location = new System.Drawing.Point(15, 13); + this.checkBox2.Name = "checkBox2"; + this.checkBox2.Size = new System.Drawing.Size(81, 16); + this.checkBox2.TabIndex = 7; + this.checkBox2.Text = "I/O Status"; + this.checkBox2.UseVisualStyleBackColor = true; + // + // button6 + // + this.button6.Location = new System.Drawing.Point(14, 96); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(76, 54); + this.button6.TabIndex = 3; + this.button6.Text = "STOP"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(14, 156); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(76, 54); + this.button8.TabIndex = 5; + this.button8.Text = "DOWN"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Controls.Add(this.groupBox1, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.groupBox3, 1, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(1140, 616); + this.tableLayoutPanel1.TabIndex = 2; + // + // timer1 + // + this.timer1.Interval = 200; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage3); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 25); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(1154, 648); + this.tabControl1.TabIndex = 3; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.tableLayoutPanel3); + this.tabPage1.Controls.Add(this.panel4); + this.tabPage1.Controls.Add(this.panel12); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(1146, 622); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "AGV"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 339F)); + this.tableLayoutPanel3.Controls.Add(this.rtAGVPro, 1, 0); + this.tableLayoutPanel3.Controls.Add(this.rtAGV, 0, 0); + this.tableLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 403); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(1140, 216); + this.tableLayoutPanel3.TabIndex = 4; + // + // rtAGVPro + // + this.rtAGVPro.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(24)))), ((int)(((byte)(24)))), ((int)(((byte)(24))))); + this.rtAGVPro.ColorList = new arCtl.sLogMessageColor[0]; + this.rtAGVPro.DateFormat = "ss.fff"; + this.rtAGVPro.DefaultColor = System.Drawing.Color.LightGray; + this.rtAGVPro.Dock = System.Windows.Forms.DockStyle.Fill; + this.rtAGVPro.EnableDisplayTimer = false; + this.rtAGVPro.EnableGubunColor = true; + this.rtAGVPro.Font = new System.Drawing.Font("Consolas", 9F); + this.rtAGVPro.ListFormat = "[{0}] {1}"; + this.rtAGVPro.Location = new System.Drawing.Point(804, 3); + this.rtAGVPro.MaxListCount = ((ushort)(200)); + this.rtAGVPro.MaxTextLength = ((uint)(4000u)); + this.rtAGVPro.MessageInterval = 50; + this.rtAGVPro.Name = "rtAGVPro"; + this.rtAGVPro.Size = new System.Drawing.Size(333, 210); + this.rtAGVPro.TabIndex = 5; + this.rtAGVPro.Text = ""; + // + // panel12 + // + this.panel12.Controls.Add(this.agvViewer1); + this.panel12.Controls.Add(this.serAGV); + this.panel12.Dock = System.Windows.Forms.DockStyle.Top; + this.panel12.Location = new System.Drawing.Point(3, 3); + this.panel12.Name = "panel12"; + this.panel12.Size = new System.Drawing.Size(1140, 120); + this.panel12.TabIndex = 5; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.rtPLC); + this.tabPage3.Controls.Add(this.panel3); + this.tabPage3.Controls.Add(this.serPLC); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(1146, 622); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "PLC"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.tableLayoutPanel1); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(1146, 622); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "BMS & CALL"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // toolStrip1 + // + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripButton1, + this.toolStripButton2}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(1154, 25); + this.toolStrip1.TabIndex = 4; + this.toolStrip1.Text = "toolStrip1"; + // + // toolStripButton1 + // + this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image"))); + this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton1.Name = "toolStripButton1"; + this.toolStripButton1.Size = new System.Drawing.Size(74, 22); + this.toolStripButton1.Text = "All Open"; + this.toolStripButton1.Click += new System.EventHandler(this.toolStripButton1_Click); + // + // toolStripButton2 + // + this.toolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton2.Image"))); + this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton2.Name = "toolStripButton2"; + this.toolStripButton2.Size = new System.Drawing.Size(74, 22); + this.toolStripButton2.Text = "All Close"; + this.toolStripButton2.Click += new System.EventHandler(this.toolStripButton2_Click); + // + // statusStrip1 + // + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripStatusLabel8, + this.sbAGV, + this.toolStripStatusLabel6, + this.sbPLC, + this.toolStripStatusLabel4, + this.sbBMS, + this.toolStripStatusLabel2, + this.sbCAL}); + this.statusStrip1.Location = new System.Drawing.Point(0, 673); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(1154, 22); + this.statusStrip1.TabIndex = 5; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabel8 + // + this.toolStripStatusLabel8.Name = "toolStripStatusLabel8"; + this.toolStripStatusLabel8.Size = new System.Drawing.Size(31, 17); + this.toolStripStatusLabel8.Text = "AGV"; + // + // sbAGV + // + this.sbAGV.Name = "sbAGV"; + this.sbAGV.Size = new System.Drawing.Size(19, 17); + this.sbAGV.Text = "●"; + // + // toolStripStatusLabel6 + // + this.toolStripStatusLabel6.Name = "toolStripStatusLabel6"; + this.toolStripStatusLabel6.Size = new System.Drawing.Size(28, 17); + this.toolStripStatusLabel6.Text = "PLC"; + // + // sbPLC + // + this.sbPLC.Name = "sbPLC"; + this.sbPLC.Size = new System.Drawing.Size(19, 17); + this.sbPLC.Text = "●"; + // + // toolStripStatusLabel4 + // + this.toolStripStatusLabel4.Name = "toolStripStatusLabel4"; + this.toolStripStatusLabel4.Size = new System.Drawing.Size(32, 17); + this.toolStripStatusLabel4.Text = "BMS"; + // + // sbBMS + // + this.sbBMS.Name = "sbBMS"; + this.sbBMS.Size = new System.Drawing.Size(19, 17); + this.sbBMS.Text = "●"; + // + // toolStripStatusLabel2 + // + this.toolStripStatusLabel2.Name = "toolStripStatusLabel2"; + this.toolStripStatusLabel2.Size = new System.Drawing.Size(35, 17); + this.toolStripStatusLabel2.Text = "CALL"; + // + // sbCAL + // + this.sbCAL.Name = "sbCAL"; + this.sbCAL.Size = new System.Drawing.Size(19, 17); + this.sbCAL.Text = "●"; + // + // btc1 + // + this.btc1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btc1.ForeColor = System.Drawing.Color.White; + this.btc1.Location = new System.Drawing.Point(279, 7); + this.btc1.Name = "btc1"; + this.btc1.Size = new System.Drawing.Size(50, 24); + this.btc1.TabIndex = 7; + this.btc1.Text = "3338"; + this.btc1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // btc5 + // + this.btc5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btc5.ForeColor = System.Drawing.Color.White; + this.btc5.Location = new System.Drawing.Point(335, 7); + this.btc5.Name = "btc5"; + this.btc5.Size = new System.Drawing.Size(50, 24); + this.btc5.TabIndex = 7; + this.btc5.Text = "3338"; + this.btc5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // btc6 + // + this.btc6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btc6.ForeColor = System.Drawing.Color.White; + this.btc6.Location = new System.Drawing.Point(335, 27); + this.btc6.Name = "btc6"; + this.btc6.Size = new System.Drawing.Size(50, 24); + this.btc6.TabIndex = 8; + this.btc6.Text = "3338"; + this.btc6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // btc2 + // + this.btc2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btc2.ForeColor = System.Drawing.Color.White; + this.btc2.Location = new System.Drawing.Point(279, 27); + this.btc2.Name = "btc2"; + this.btc2.Size = new System.Drawing.Size(50, 24); + this.btc2.TabIndex = 9; + this.btc2.Text = "3338"; + this.btc2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // btc7 + // + this.btc7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btc7.ForeColor = System.Drawing.Color.White; + this.btc7.Location = new System.Drawing.Point(335, 50); + this.btc7.Name = "btc7"; + this.btc7.Size = new System.Drawing.Size(50, 24); + this.btc7.TabIndex = 10; + this.btc7.Text = "3338"; + this.btc7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // btc3 + // + this.btc3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btc3.ForeColor = System.Drawing.Color.White; + this.btc3.Location = new System.Drawing.Point(279, 50); + this.btc3.Name = "btc3"; + this.btc3.Size = new System.Drawing.Size(50, 24); + this.btc3.TabIndex = 11; + this.btc3.Text = "3338"; + this.btc3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // btc8 + // + this.btc8.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btc8.ForeColor = System.Drawing.Color.White; + this.btc8.Location = new System.Drawing.Point(335, 69); + this.btc8.Name = "btc8"; + this.btc8.Size = new System.Drawing.Size(50, 24); + this.btc8.TabIndex = 12; + this.btc8.Text = "3338"; + this.btc8.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // btc4 + // + this.btc4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64))))); + this.btc4.ForeColor = System.Drawing.Color.White; + this.btc4.Location = new System.Drawing.Point(279, 69); + this.btc4.Name = "btc4"; + this.btc4.Size = new System.Drawing.Size(50, 24); + this.btc4.TabIndex = 13; + this.btc4.Text = "3338"; + this.btc4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // agvViewer1 + // + this.agvViewer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.agvViewer1.FontMrk = new System.Drawing.Font("Arial Rounded MT Bold", 7F); + this.agvViewer1.FontTag = new System.Drawing.Font("Arial Rounded MT Bold", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.agvViewer1.lastmark = ""; + this.agvViewer1.lastmarkdir = ""; + this.agvViewer1.lasttag = ""; + this.agvViewer1.lasttagdir = ""; + ptdata1.active = false; + ptdata1.data = "NOT"; + ptdata1.pos = 30F; + ptdata2.active = false; + ptdata2.data = "QA"; + ptdata2.pos = 200F; + ptdata3.active = false; + ptdata3.data = "CHG"; + ptdata3.pos = 300F; + ptdata4.active = false; + ptdata4.data = "QC"; + ptdata4.pos = 400F; + ptdata5.active = false; + ptdata5.data = "#FVI-1"; + ptdata5.pos = 500F; + ptdata6.active = false; + ptdata6.data = "#FVI-2"; + ptdata6.pos = 600F; + ptdata7.active = false; + ptdata7.data = "#FVI-3"; + ptdata7.pos = 700F; + ptdata8.active = false; + ptdata8.data = "#FVI-4"; + ptdata8.pos = 800F; + ptdata9.active = false; + ptdata9.data = "#FVI-5"; + ptdata9.pos = 900F; + ptdata10.active = false; + ptdata10.data = "POT"; + ptdata10.pos = 970F; + this.agvViewer1.listMRK = new AGVEmulator.UC.AgvViewer.ptdata[] { + ptdata1, + ptdata2, + ptdata3, + ptdata4, + ptdata5, + ptdata6, + ptdata7, + ptdata8, + ptdata9, + ptdata10}; + ptdata11.active = false; + ptdata11.data = "9000"; + ptdata11.pos = 80F; + ptdata12.active = false; + ptdata12.data = "9001"; + ptdata12.pos = 120F; + ptdata13.active = false; + ptdata13.data = "9010"; + ptdata13.pos = 180F; + ptdata14.active = false; + ptdata14.data = "9011"; + ptdata14.pos = 220F; + ptdata15.active = false; + ptdata15.data = "9020"; + ptdata15.pos = 280F; + ptdata16.active = false; + ptdata16.data = "9021"; + ptdata16.pos = 320F; + ptdata17.active = false; + ptdata17.data = "9030"; + ptdata17.pos = 380F; + ptdata18.active = false; + ptdata18.data = "9031"; + ptdata18.pos = 420F; + ptdata19.active = false; + ptdata19.data = "9040"; + ptdata19.pos = 480F; + ptdata20.active = false; + ptdata20.data = "9041"; + ptdata20.pos = 520F; + ptdata21.active = false; + ptdata21.data = "9050"; + ptdata21.pos = 580F; + ptdata22.active = false; + ptdata22.data = "9051"; + ptdata22.pos = 620F; + ptdata23.active = false; + ptdata23.data = "9060"; + ptdata23.pos = 680F; + ptdata24.active = false; + ptdata24.data = "9061"; + ptdata24.pos = 720F; + ptdata25.active = false; + ptdata25.data = "9070"; + ptdata25.pos = 780F; + ptdata26.active = false; + ptdata26.data = "9071"; + ptdata26.pos = 820F; + ptdata27.active = false; + ptdata27.data = "9000"; + ptdata27.pos = 10F; + ptdata28.active = false; + ptdata28.data = "9001"; + ptdata28.pos = 50F; + this.agvViewer1.listTAG = new AGVEmulator.UC.AgvViewer.ptdata[] { + ptdata11, + ptdata12, + ptdata13, + ptdata14, + ptdata15, + ptdata16, + ptdata17, + ptdata18, + ptdata19, + ptdata20, + ptdata21, + ptdata22, + ptdata23, + ptdata24, + ptdata25, + ptdata26, + ptdata27, + ptdata28}; + this.agvViewer1.Location = new System.Drawing.Point(241, 0); + this.agvViewer1.Name = "agvViewer1"; + this.agvViewer1.Size = new System.Drawing.Size(899, 120); + this.agvViewer1.StopbyMark = false; + this.agvViewer1.TabIndex = 0; + this.agvViewer1.Text = "agvViewer1"; + this.agvViewer1.Click += new System.EventHandler(this.agvViewer1_Click); + this.agvViewer1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.agvViewer1_MouseDown); + // + // serAGV + // + this.serAGV.BaudRate = 9600; + this.serAGV.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.serAGV.dev = null; + this.serAGV.Dock = System.Windows.Forms.DockStyle.Left; + this.serAGV.Location = new System.Drawing.Point(0, 0); + this.serAGV.Name = "serAGV"; + this.serAGV.PortName = "COM20"; + this.serAGV.Size = new System.Drawing.Size(241, 120); + this.serAGV.TabIndex = 0; + this.serAGV.Load += new System.EventHandler(this.serAGV_Load); + // + // serPLC + // + this.serPLC.BaudRate = 9600; + this.serPLC.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.serPLC.dev = null; + this.serPLC.Dock = System.Windows.Forms.DockStyle.Top; + this.serPLC.Location = new System.Drawing.Point(0, 0); + this.serPLC.Name = "serPLC"; + this.serPLC.PortName = "COM30"; + this.serPLC.Size = new System.Drawing.Size(1146, 84); + this.serPLC.TabIndex = 1; + // + // serBMS + // + this.serBMS.BaudRate = 9600; + this.serBMS.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.serBMS.dev = null; + this.serBMS.Dock = System.Windows.Forms.DockStyle.Top; + this.serBMS.Location = new System.Drawing.Point(3, 17); + this.serBMS.Name = "serBMS"; + this.serBMS.PortName = "COM40"; + this.serBMS.Size = new System.Drawing.Size(558, 84); + this.serBMS.TabIndex = 1; + this.serBMS.Load += new System.EventHandler(this.serBMS_Load); + // + // serCAL + // + this.serCAL.BaudRate = 9600; + this.serCAL.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.serCAL.dev = null; + this.serCAL.Dock = System.Windows.Forms.DockStyle.Top; + this.serCAL.Location = new System.Drawing.Point(3, 17); + this.serCAL.Name = "serCAL"; + this.serCAL.PortName = "COM50"; + this.serCAL.Size = new System.Drawing.Size(558, 84); + this.serCAL.TabIndex = 1; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(1154, 695); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.toolStrip1); + this.Name = "Form1"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.groupBox1.ResumeLayout(false); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit(); + this.panel4.ResumeLayout(false); + this.groupBox9.ResumeLayout(false); + this.groupBox10.ResumeLayout(false); + this.groupBox10.PerformLayout(); + this.groupBox11.ResumeLayout(false); + this.groupBox11.PerformLayout(); + this.groupBox7.ResumeLayout(false); + this.groupBox7.PerformLayout(); + this.groupBox6.ResumeLayout(false); + this.panel11.ResumeLayout(false); + this.groupBox8.ResumeLayout(false); + this.groupBox8.PerformLayout(); + this.groupBox4.ResumeLayout(false); + this.groupBox4.PerformLayout(); + this.groupBox2.ResumeLayout(false); + this.groupBox2.PerformLayout(); + this.groupBox5.ResumeLayout(false); + this.groupBox5.PerformLayout(); + this.panel13.ResumeLayout(false); + this.panel10.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); + this.groupBox3.ResumeLayout(false); + this.panel2.ResumeLayout(false); + this.panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.nudBMSKitNo)).EndInit(); + this.panel3.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.panel5.ResumeLayout(false); + this.panel5.PerformLayout(); + this.tableLayoutPanel1.ResumeLayout(false); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tableLayoutPanel3.ResumeLayout(false); + this.panel12.ResumeLayout(false); + this.tabPage3.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.GroupBox groupBox3; + private SerialConn serAGV; + private SerialConn serBMS; + private SerialConn serCAL; + private SerialConn serPLC; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private arCtl.LogTextBox rtBMS; + private arCtl.LogTextBox rtAGV; + private arCtl.LogTextBox rtCAL; + private arCtl.LogTextBox rtPLC; + private System.Windows.Forms.Panel panel4; + private System.Windows.Forms.Panel panel2; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.TrackBar trackBar1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.RadioButton radioButton1; + private System.Windows.Forms.RadioButton radioButton6; + private System.Windows.Forms.RadioButton radioButton5; + private System.Windows.Forms.RadioButton radioButton4; + private System.Windows.Forms.RadioButton radioButton3; + private System.Windows.Forms.RadioButton radioButton2; + private System.Windows.Forms.CheckBox checkBox2; + private System.Windows.Forms.Timer timer1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.Panel panel5; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private arFrame.Control.GridView gvdPLCInOut; + private arFrame.Control.GridView gvdPLCFlag; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Button btPLCemg; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.Button button12; + private System.Windows.Forms.Button button13; + private System.Windows.Forms.CheckBox checkBox3; + private System.Windows.Forms.GroupBox groupBox2; + private System.Windows.Forms.RadioButton radioButton7; + private System.Windows.Forms.RadioButton radioButton9; + private System.Windows.Forms.RadioButton radioButton8; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.RadioButton radioButton14; + private System.Windows.Forms.RadioButton radioButton15; + private System.Windows.Forms.GroupBox groupBox4; + private System.Windows.Forms.RadioButton radioButton10; + private System.Windows.Forms.RadioButton radioButton11; + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.GroupBox groupBox7; + private System.Windows.Forms.GroupBox groupBox8; + private System.Windows.Forms.RadioButton radioButton13; + private System.Windows.Forms.RadioButton radioButton16; + private System.Windows.Forms.RadioButton radioButton12; + private System.Windows.Forms.RadioButton radioButton17; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private arCtl.LogTextBox rtAGVPro; + private System.Windows.Forms.GroupBox groupBox9; + private System.Windows.Forms.Panel panel6; + private System.Windows.Forms.Panel panel7; + private System.Windows.Forms.GroupBox groupBox10; + private System.Windows.Forms.Panel panel8; + private System.Windows.Forms.GroupBox groupBox11; + private System.Windows.Forms.Panel panel9; + private System.Windows.Forms.Panel panel10; + private System.Windows.Forms.Panel panel11; + private System.Windows.Forms.Button button14; + private System.Windows.Forms.Button button16; + private System.Windows.Forms.Button button15; + private System.Windows.Forms.Button button17; + private System.Windows.Forms.Button button18; + private System.Windows.Forms.NumericUpDown numericUpDown1; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.NumericUpDown nudBMSKitNo; + private System.Windows.Forms.Panel panel12; + private UC.AgvViewer agvViewer1; + private System.Windows.Forms.Panel panel13; + private System.Windows.Forms.CheckBox chkSimulation; + private System.Windows.Forms.RadioButton radioButton20; + private System.Windows.Forms.RadioButton radioButton21; + private System.Windows.Forms.RadioButton radioButton18; + private System.Windows.Forms.RadioButton radioButton19; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton toolStripButton1; + private System.Windows.Forms.ToolStripButton toolStripButton2; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel8; + private System.Windows.Forms.ToolStripStatusLabel sbAGV; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel6; + private System.Windows.Forms.ToolStripStatusLabel sbPLC; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel4; + private System.Windows.Forms.ToolStripStatusLabel sbBMS; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel2; + private System.Windows.Forms.ToolStripStatusLabel sbCAL; + private System.Windows.Forms.Label btc8; + private System.Windows.Forms.Label btc4; + private System.Windows.Forms.Label btc7; + private System.Windows.Forms.Label btc3; + private System.Windows.Forms.Label btc6; + private System.Windows.Forms.Label btc2; + private System.Windows.Forms.Label btc5; + private System.Windows.Forms.Label btc1; + } +} + diff --git a/Emulator/AGVEmulator/Form1.cs b/Emulator/AGVEmulator/Form1.cs new file mode 100644 index 0000000..3a62d6e --- /dev/null +++ b/Emulator/AGVEmulator/Form1.cs @@ -0,0 +1,1154 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Globalization; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Windows.Forms; +using System.Windows.Forms.VisualStyles; +using static AGVEmulator.DevAGV; + +namespace AGVEmulator +{ + public partial class Form1 : Form + { + arUtil.Log logPLC, logAGV, logBMS, logCAL; + DevBMS BMS; + DevAGV AGV; + DevPLC PLC; + DevCAL CAL; + + + float BMS_MaxA = 80f; + float BMS_Remain = 79f; + float BMS_CurA = 70f; + float BMS_Volt = 25.4f; + + UInt16[] cellvolt = new UInt16[] { 0, 0, 0, 0, 0, 0, 0, 0 }; + + + public Form1() + { + InitializeComponent(); + logPLC = new arUtil.Log(); + logAGV = new arUtil.Log(); + logBMS = new arUtil.Log(); + logCAL = new arUtil.Log(); + + logPLC.FileNameFormat = "{yyyyMMdd}_PLC"; + logAGV.FileNameFormat = "{yyyyMMdd}_AGV"; + logBMS.FileNameFormat = "{yyyyMMdd}_BMS"; + logCAL.FileNameFormat = "{yyyyMMdd}_CAL"; + + logPLC.RaiseMsg += (s1, e1, d1) => { this.rtPLC.AddMsg(s1, e1, d1); }; + logAGV.RaiseMsg += (s1, e1, d1) => + { + if (d1.StartsWith("Tx")) + this.rtAGV.AddMsg(s1, e1, d1); + else + this.rtAGVPro.AddMsg(s1, e1, d1); + }; + logBMS.RaiseMsg += (s1, e1, d1) => { this.rtBMS.AddMsg(s1, e1, d1); }; + logCAL.RaiseMsg += (s1, e1, d1) => { this.rtCAL.AddMsg(s1, e1, d1); }; + + + var logcolor = new arCtl.sLogMessageColor[] { + new arCtl.sLogMessageColor("NORM", Color.White), + new arCtl.sLogMessageColor("INF", Color.SkyBlue), + new arCtl.sLogMessageColor("WARN", Color.Tomato), + new arCtl.sLogMessageColor("ERR", Color.Red), + new arCtl.sLogMessageColor("RX", Color.Lime), + new arCtl.sLogMessageColor("TX", Color.Orange), + }; + + rtPLC.ColorList = logcolor; + rtAGV.ColorList = logcolor; + rtBMS.ColorList = logcolor; + rtCAL.ColorList = logcolor; + rtAGVPro.ColorList = logcolor; + + this.FormClosed += Form1_FormClosed; + + BMS = new DevBMS(); + AGV = new DevAGV(); + PLC = new DevPLC(); + CAL = new DevCAL(); + this.serAGV.dev = AGV; + this.serPLC.dev = PLC; + this.serBMS.dev = BMS; + this.serCAL.dev = CAL; + + BMS.Message += Bms_Message; + AGV.Message += Bms_Message; + PLC.Message += Bms_Message; + CAL.Message += Bms_Message; + + BMS.RequestBatteryData += Bms_RequestBatteryData; + BMS.RequestVoltageData += BMS_RequestVoltageData; + PLC.RequestData += Plc_RequestData; + PLC.ValueChanged += Plc_ValueChanged; + AGV.RequestStatusData += Agv_RequestStatusData; + AGV.ValueChanged += Agv_ValueChanged; + AGV.StsValueChanged += Agv_StsValueChanged; + AGV.Command += Agv_Command; + + } + + + + Random rnd; + private void Form1_Load(object sender, EventArgs e) + { + rnd = new Random(3000); + + serAGV.BaudRate = 57600; + serPLC.BaudRate = 57600; + trackBar1_Scroll(null, null); + timer1.Start(); + + //plc inout 이름 설정 + List titles = new List(); + List values = new List(); + for (int i = 0; i < 16; i++) + { + var pin = (DevPLC.DIName)i; + titles.Add(pin.ToString()); + values.Add(false); + } + for (int i = 0; i < 8; i++) + { + var pin = (DevPLC.DOName)i; + titles.Add(pin.ToString()); + values.Add(false); + } + this.gvdPLCInOut.setTitle(titles.ToArray()); + this.gvdPLCInOut.setValue(values.ToArray()); + + + titles.Clear(); + values.Clear(); + for (int i = 0; i < 32; i++) + { + titles.Add(i.ToString()); + values.Add(false); + } + this.gvdPLCFlag.setTitle(titles.ToArray()); + this.gvdPLCFlag.setValue(values.ToArray()); + this.gvdPLCInOut.ItemClick += GvdPLCInOut_ItemClick; + this.gvdPLCFlag.ItemClick += GvdPLCFlag_ItemClick; + this.gvdPLCFlag.ColorList = new arFrame.Control.ColorListItem[] { + new arFrame.Control.ColorListItem(){ BackColor1 = Color.DimGray, BackColor2 = Color.Gray }, + new arFrame.Control.ColorListItem(){ BackColor1 = Color.Green, BackColor2 = Color.Lime }, + new arFrame.Control.ColorListItem(){ BackColor1 = Color.Red, BackColor2 = Color.Tomato }, + }; + this.gvdPLCInOut.ColorList = this.gvdPLCFlag.ColorList; + + var arrs = Enum.GetNames(typeof(DevAGV.esystemflag0)); + foreach (var item in arrs) + { + var data = (DevAGV.esystemflag0)Enum.Parse(typeof(DevAGV.esystemflag0), item); + + var chk = new CheckBox(); + chk.Text = $"[{(int)data:00}] {item}"; + chk.AutoSize = true; + chk.Visible = true; + chk.Tag = (int)data; + chk.Dock = DockStyle.Top; + chk.CheckedChanged += Chk_CheckedChanged; + this.panel6.Controls.Add(chk); + chk.Checked = true; //기본값 rue + } + arrs = Enum.GetNames(typeof(DevAGV.esystemflag1)); + foreach (var item in arrs) + { + var data = (DevAGV.esystemflag1)Enum.Parse(typeof(DevAGV.esystemflag1), item); + + var chk = new CheckBox(); + chk.Text = $"[{(int)data:00}] {item}"; + chk.AutoSize = true; + chk.Visible = true; + chk.Tag = (int)data; + chk.Dock = DockStyle.Top; + chk.CheckedChanged += Chk_CheckedChanged; + this.panel7.Controls.Add(chk); + } + arrs = Enum.GetNames(typeof(DevAGV.esignal)); + foreach (var item in arrs) + { + var data = (DevAGV.esignal)Enum.Parse(typeof(DevAGV.esignal), item); + + var chk = new CheckBox(); + chk.Text = $"[{(int)data:00}] {item}"; + chk.AutoSize = true; + chk.Visible = true; + chk.Tag = (int)data; + chk.Dock = DockStyle.Top; + chk.CheckedChanged += Chk_CheckedChanged; + this.panel8.Controls.Add(chk); + } + arrs = Enum.GetNames(typeof(DevAGV.eerror)); + foreach (var item in arrs) + { + var data = (DevAGV.eerror)Enum.Parse(typeof(DevAGV.eerror), item); + + var chk = new CheckBox(); + chk.Text = $"[{(int)data:00}] {item}"; + chk.AutoSize = true; + chk.Visible = true; + chk.Tag = (int)data; + chk.Dock = DockStyle.Top; + chk.CheckedChanged += Chk_CheckedChanged; + this.panel9.Controls.Add(chk); + } + + //기본 중지상태로 변환 + AGV.SetAGV(DevAGV.esystemflag1.agv_stop, true); + + foreach (RadioButton rad in groupBox5.Controls) + { + rad.CheckedChanged += (s1, e1) => + { + if (rad.Checked) + { + AGV.sts_dir = rad.Text[0]; + } + }; + } + foreach (RadioButton rad in groupBox2.Controls) + { + rad.CheckedChanged += (s1, e1) => + { + if (rad.Checked) + { + AGV.sts_bunki = rad.Text[0]; + } + }; + } + foreach (RadioButton rad in groupBox4.Controls) + { + rad.CheckedChanged += (s1, e1) => + { + if (rad.Checked) + { + AGV.sts_speed = rad.Text[0]; + } + }; + } + foreach (RadioButton rad in groupBox8.Controls) + { + rad.CheckedChanged += (s1, e1) => + { + if (rad.Checked) + { + AGV.sts_sensor = rad.Text[0]; + } + }; + } + + MakeViewer(); + + + agvViewer1.TagTouched += AgvViewer1_TagTouched; + agvViewer1.MarkTouched += AgvViewer1_MarkTouched; + agvViewer1.Command += AgvViewer1_Command; + } + private void Agv_Command(object sender, commandargs e) + { + switch (e.Command.ToLower()) + { + case "stopmark": + agvViewer1.StopbyMark = true; + break; + } + } + void MakeViewer() + { + //태그목록 + List listTAG = new List(); + //var strtag = new string[] { + // "9000", "9001", //not + // "9010", "9011", + // //"9020", "9021", + // "9030", "9031", + // // "9040", "9041", + // "9050", "9051", + // // "9060", "9061", + // "9070", "9071", + // "9080", "9081", + // "9090", "9091"}; + + //foreach(var tag in strtag) + //{ + // listTAG.Add(new UC.AgvViewer.ptdata { + // active=false, + // data = tag, + // pos = + // }); + //} + //agvViewer1.listTAG = listTAG.ToArray(); + + //마크지점 + List listMRK = new List(); + var strmark = new string[] { "NOT", "QC", "CHG", "{0}", "#1", "{1}", "#2", "{2}", "#3", "{3}", "#4", "POT" }; + var pos = 50; + var tagstart = 9000; + foreach (var item in strmark) + { + listMRK.Add(new UC.AgvViewer.ptdata + { + pos = pos, + data = item, + }); + + + if (item.Equals("CHG")) + { + pos += 100; + continue; + } + else if (item.Equals("{0}")) tagstart = 9350; + else if (item.Equals("{1}")) tagstart = 9450; + else if (item.Equals("{2}")) tagstart = 9550; + else if (item.Equals("{3}")) tagstart = 9650; + else if (item.Equals("#1")) tagstart = 9400; + else if (item.Equals("#2")) tagstart = 9500; + else if (item.Equals("#3")) tagstart = 9600; + else if (item.Equals("#4")) tagstart = 9700; + + + //지정위치 좌우에 태그를 심는다 + listTAG.Add(new UC.AgvViewer.ptdata + { + pos = pos - 20, + data = tagstart.ToString(), + }); + + if (item.Equals("NOT") == false && item.Equals("POT") == false && item.StartsWith("{") == false) + tagstart += 1; + + + listTAG.Add(new UC.AgvViewer.ptdata + { + pos = pos + 20, + data = tagstart.ToString(), + }); + + + pos += 100; + + if (item.Equals("NOT") == false && item.Equals("POT") == false && item.StartsWith("{") == false) + tagstart += 99; + else + tagstart += 100; + + + if (item.Equals("NOT")) + tagstart = 9300; + + //else + //{ + // pos += 100; + // tagstart += 10; + //} + + } + agvViewer1.listMRK = listMRK.ToArray(); + agvViewer1.listTAG = listTAG.ToArray(); + agvViewer1.Invalidate(); + + } + private void AgvViewer1_Command(object sender, UC.AgvViewer.TagArgs e) + { + if (e.Data == "stop") + { + AGV.SetAGV(esystemflag1.agv_run, false); + AGV.SetAGV(esystemflag1.agv_stop, true); + logAGV.Add("시뮬로부터 자동 중지"); + } + } + + private void AgvViewer1_MarkTouched(object sender, UC.AgvViewer.TagArgs e) + { + // throw new NotImplementedException(); + AGV.SetAGV(esignal.mark_sensor_1, e.Active); + logAGV.Add($"mark {e.Data} touch:{e.Active}"); + } + + private void AgvViewer1_TagTouched(object sender, UC.AgvViewer.TagArgs e) + { + logAGV.Add($"tag touch:{e.Data}"); + numericUpDown1.Value = decimal.Parse(e.Data); + button18.PerformClick(); + } + + private void Agv_StsValueChanged(object sender, DevAGV.StsValueChangedArgs e) + { + Console.WriteLine($"STS [{e.vtype}] VAL={e.Value}"); + if (this.InvokeRequired) + { + this.BeginInvoke(new EventHandler(Agv_StsValueChanged), sender, e); + return; + } + switch (e.vtype) + { + case DevAGV.estsvaluetype.direction: + foreach (RadioButton c in this.groupBox5.Controls) + { + if (c.Text[0].Equals(e.Value)) + { + c.Checked = true; + + } + else + { + c.Checked = false; + } + c.Refresh(); + } + groupBox5.Refresh(); + break; + case DevAGV.estsvaluetype.bunki: + foreach (RadioButton c in this.groupBox2.Controls) + { + if (c.Text[0].Equals(e.Value)) + { + c.Checked = true; + c.Refresh(); + break; + } + } + break; + case DevAGV.estsvaluetype.speed: + foreach (RadioButton c in this.groupBox4.Controls) + { + if (c.Text[0].Equals(e.Value)) + { + c.Checked = true; + c.Refresh(); + break; + } + } + break; + case DevAGV.estsvaluetype.sensor: + foreach (RadioButton c in this.groupBox8.Controls) + { + if (c.Text.Equals(e.Value)) + { + c.Checked = true; + c.Refresh(); + break; + } + } + break; + } + } + + private void Agv_ValueChanged(object sender, DevAGV.ValueChangedArgs e) + { + if (this.InvokeRequired) + { + this.Invoke(new EventHandler(Agv_ValueChanged), sender, e); + return; + } + + //내부값이 바뀌었다면 컨트롤을 변경해준다. + switch (e.vtype) + { + + case DevAGV.evaluetype.system0: + foreach (CheckBox c in panel6.Controls) + { + var idx = int.Parse(c.Tag.ToString()); + if (idx == e.Idx) + { + c.Checked = e.Value; + break; + } + } + break; + case DevAGV.evaluetype.system1: + + var v = (DevAGV.esystemflag1)e.Idx; + if (e.Value) + { + if (v == esystemflag1.agv_run) + { + agvViewer1.wat.Restart(); + } + if (v == esystemflag1.agv_stop) + { + agvViewer1.wat.Stop(); + } + } + + + foreach (CheckBox c in panel7.Controls) + { + var idx = int.Parse(c.Tag.ToString()); + if (idx == e.Idx) + { + c.Checked = e.Value; + break; + } + } + break; + case DevAGV.evaluetype.error: + foreach (CheckBox c in panel9.Controls) + { + var idx = int.Parse(c.Tag.ToString()); + if (idx == e.Idx) + { + c.Checked = e.Value; + break; + } + } + break; + case DevAGV.evaluetype.signal: + foreach (CheckBox c in panel8.Controls) + { + var idx = int.Parse(c.Tag.ToString()); + if (idx == e.Idx) + { + c.Checked = e.Value; + break; + } + } + break; + + + } + } + + char GetGroupItemCheckbox(GroupBox grp) + { + foreach (var ctl in grp.Controls) + { + if (ctl is RadioButton) + { + var rad = ctl as RadioButton; + if (rad.Checked) return rad.Text[0]; + } + } + return '0'; + } + + + + + int PLC_LeftPosition = 0; + int PLC_RightPosition = 0; + int PLC_LeftDir = 0; + int PLC_RightDir = 0; + + private void Plc_ValueChanged(object sender, DevPLC.ValueChangedArgs e) + { + if (e.IsOut) + { + this.gvdPLCInOut.setValue(e.Idx + 16, e.Value); + var doname = (DevPLC.DOName)e.Idx; + + switch (doname) + { + case DevPLC.DOName.PINO_GUIDEMOTOR_RRUN: + break; + case DevPLC.DOName.PINO_GUIDEMOTOR_LRUN: + break; + } + } + else + { + this.gvdPLCInOut.setValue(e.Idx, e.Value); + + } + this.gvdPLCInOut.Invalidate(); + } + + private void Plc_RequestData(object sender, DevPLC.RequestBatteryDataArgs e) + { + var idx = 0; + UInt32 val = 0; + foreach (var data in gvdPLCInOut.Values) + { + SetBit(ref val, idx++, (data > 0)); + } + e.IOValue = val; + idx = 0; + val = 0; + foreach (var data in gvdPLCFlag.Values) + { + SetBit(ref val, idx++, (data > 0)); + } + e.FGValue = val; + } + + public void SetBit(ref UInt32 _value, int idx, Boolean value) + { + if (value) + { + var offset = (UInt32)(1 << idx); + _value = _value | offset; + } + else + { + var offset = (UInt32)(~(1 << idx)); + _value = _value & offset; + } + } + public void SetBit(ref UInt16 _value, int idx, Boolean value) + { + if (value) + { + var offset = (UInt16)(1 << idx); + _value = (UInt16)(_value | offset); + } + else + { + var offset = (UInt16)(~(1 << idx)); + _value = (UInt16)(_value & offset); + } + } + public void SetBit(ref byte _value, int idx, Boolean value) + { + if (value) + { + var offset = (byte)(1 << idx); + _value = (byte)(_value | offset); + } + else + { + var offset = (byte)(~(1 << idx)); + _value = (byte)(_value & offset); + } + } + + void aaplycheckboxbit(ref UInt16 v, Panel p) + { + foreach (CheckBox chk in p.Controls) + { + var idx = int.Parse(chk.Tag.ToString()); + SetBit(ref v, idx, chk.Checked); + } + } + void aaplycheckboxbit(ref byte v, Panel p) + { + foreach (CheckBox chk in p.Controls) + { + var idx = int.Parse(chk.Tag.ToString()); + SetBit(ref v, idx, chk.Checked); + } + } + + + + private void Agv_RequestStatusData(object sender, DevAGV.RequestStatusDataArgs e) + { + //UInt16 system0 = 0xFFFF; + //UInt16 system1 = 0xFFFF; + //UInt16 error = 0xFFFF; + //byte signal = 0xFF; + + aaplycheckboxbit(ref AGV.system0, panel6); + aaplycheckboxbit(ref AGV.system1, panel7); + aaplycheckboxbit(ref AGV.error, panel9); + aaplycheckboxbit(ref AGV.signal, panel8); + + if (this.agvViewer1.StopbyMark) AGV.sts_speed = 'S'; + else AGV.sts_speed = GetGroupItemCheckbox(groupBox4); + AGV.sts_bunki = GetGroupItemCheckbox(groupBox2); + AGV.sts_dir = GetGroupItemCheckbox(groupBox5); + AGV.sts_sensor = GetGroupItemCheckbox(groupBox8); + + //this.Invoke(new Action(() => + //{ + // e.system0 = system0; + // e.system1 = system1; + // e.error = error; + // e.signal = signal; + // e.speed = GetGroupItemCheckbox(groupBox4); + // e.bunki = GetGroupItemCheckbox(groupBox2); + // e.direction = GetGroupItemCheckbox(groupBox5); + // e.sensor = GetGroupItemCheckbox(groupBox8); + + // e.volt = 23.4f; + //})); + } + private void BMS_RequestVoltageData(object sender, DevBMS.RequestVoltageDataArgs e) + { + + //cell전압값추가 + for (int i = 0; i < cellvolt.Length; i++) + { + this.cellvolt[i] = (UInt16)rnd.Next(3300, 3350); + } + Array.Copy(this.cellvolt, 0, e.cellVolt, 0, 8); + this.btc1.Invoke(new Action(() => { + var idx = 0; + btc1.Text = (this.cellvolt[idx++] / 1000f).ToString(); + btc2.Text = (this.cellvolt[idx++] / 1000f).ToString(); + btc3.Text = (this.cellvolt[idx++] / 1000f).ToString(); + btc4.Text = (this.cellvolt[idx++] / 1000f).ToString(); + btc5.Text = (this.cellvolt[idx++] / 1000f).ToString(); + btc6.Text = (this.cellvolt[idx++] / 1000f).ToString(); + btc7.Text = (this.cellvolt[idx++] / 1000f).ToString(); + btc8.Text = (this.cellvolt[idx++] / 1000f).ToString(); + })); + + } + private void Bms_RequestBatteryData(object sender, DevBMS.RequestBatteryDataArgs e) + { + if (checkBox1.Checked) + this.trackBar1.Invoke(new Action(() => + { + this.trackBar1.Value -= 1; + trackBar1_Scroll(null, null); + })); + + e.CurA = (int)BMS_CurA; + e.MaxA = (int)BMS_MaxA; + e.Remain = BMS_Remain; + e.Volt = BMS_Volt; + + } + + private void button5_Click(object sender, EventArgs e) + { + AGV.WriteData("ACK"); + } + + private void button4_Click(object sender, EventArgs e) + { + AGV.WriteData("NAK"); + } + + private void button7_Click(object sender, EventArgs e) + { + var pinL = DevPLC.DOName.PINO_GUIDEMOTOR_LRUN; + var pinR = DevPLC.DOName.PINO_GUIDEMOTOR_RRUN; + var pinDL = DevPLC.DOName.PINO_GUIDEMOTOR_LDIR; + var pinDR = DevPLC.DOName.PINO_GUIDEMOTOR_RDIR; + + this.gvdPLCInOut.setValue((int)pinDL + 16, true); + this.gvdPLCInOut.setValue((int)pinDR + 16, true); + this.gvdPLCInOut.setValue((int)pinL + 16, true); + this.gvdPLCInOut.setValue((int)pinR + 16, true); + this.gvdPLCInOut.Invalidate(); + } + + private void button6_Click(object sender, EventArgs e) + { + var pinL = DevPLC.DOName.PINO_GUIDEMOTOR_LRUN; + var pinR = DevPLC.DOName.PINO_GUIDEMOTOR_RRUN; + var cur = gvdPLCInOut.Values[(int)pinL + 16]; + this.gvdPLCInOut.setValue((int)pinL + 16, false); + this.gvdPLCInOut.setValue((int)pinR + 16, false); + this.gvdPLCInOut.Invalidate(); + } + + private void button8_Click(object sender, EventArgs e) + { + var pinL = DevPLC.DOName.PINO_GUIDEMOTOR_LRUN; + var pinR = DevPLC.DOName.PINO_GUIDEMOTOR_RRUN; + var pinDL = DevPLC.DOName.PINO_GUIDEMOTOR_LDIR; + var pinDR = DevPLC.DOName.PINO_GUIDEMOTOR_RDIR; + + this.gvdPLCInOut.setValue((int)pinDL + 16, false); + this.gvdPLCInOut.setValue((int)pinDR + 16, false); + this.gvdPLCInOut.setValue((int)pinL + 16, true); + this.gvdPLCInOut.setValue((int)pinR + 16, true); + this.gvdPLCInOut.Invalidate(); + } + + private void trackBar1_Scroll(object sender, EventArgs e) + { + BMS_MaxA = float.Parse(label4.Text); + BMS_CurA = (float)(trackBar1.Value / 100f); + BMS_Remain = 100f * (BMS_CurA / BMS_MaxA);// (trackBar1.Value / 10f); + var minvolt = 20.2f; + var maxvolt = 26.8f; + // BMS_CurA = (BMS_MaxA * (BMS_Remain / 100f)); + label3.Text = BMS_CurA.ToString("N0"); //curr amp + label5.Text = $"{BMS_Remain:N2}%"; + BMS_Volt = minvolt + ((maxvolt - minvolt) * (BMS_CurA / BMS_MaxA)); + label6.Text = $"{BMS_Volt:N2}v"; + } + + private void timer1_Tick(object sender, EventArgs e) + { + timer1.Stop(); + sbAGV.ForeColor = AGV.IsOpen ? Color.ForestGreen : Color.Red; + sbPLC.ForeColor = PLC.IsOpen ? Color.ForestGreen : Color.Red; + sbBMS.ForeColor = BMS.IsOpen ? Color.ForestGreen : Color.Red; + sbCAL.ForeColor = CAL.IsOpen ? Color.ForestGreen : Color.Red; + + if (checkBox2.Checked && PLC != null && PLC.IsOpen) PLC.AutoSendData(); //자동전송해야함 + if (checkBox3.Checked && AGV != null && AGV.IsOpen) AGV.AutoSendData(); //자동전송해야함 + if (BMS != null && BMS.IsOpen) BMS.AutoSendData(); //자동전송해야함 + if (CAL != null && CAL.IsOpen) CAL.AutoSendData(); //자동전송해야함 + + if (chkSimulation.Checked && AGV.GetAGV(esystemflag1.agv_run)) + { + if (radioButton15.Checked) + { + agvViewer1.dir = 1; + } + else + { + agvViewer1.dir = -1; + } + if (radioButton12.Checked) agvViewer1.mspd = 7; + else if (radioButton11.Checked) agvViewer1.mspd = 20; + else agvViewer1.mspd = 40; + agvViewer1.Invalidate(); + } + + UpdatePLC(); + label7.Text = $"I/O L({PLC_LeftPosition}),R({PLC_RightPosition})"; + + timer1.Start(); + } + + void UpdatePLC() + { + //plc값을 업데이트해준다. + var LRun = gvdPLCInOut.getValue((int)DevPLC.DOName.PINO_GUIDEMOTOR_LRUN + 16) == 1; + var RRun = gvdPLCInOut.getValue((int)DevPLC.DOName.PINO_GUIDEMOTOR_RRUN + 16) == 1; + var LDir = gvdPLCInOut.getValue((int)DevPLC.DOName.PINO_GUIDEMOTOR_LDIR + 16) == 1; + var RDir = gvdPLCInOut.getValue((int)DevPLC.DOName.PINO_GUIDEMOTOR_RDIR + 16) == 1; + + if (LRun == false) this.PLC_LeftDir = 0; + else if (LDir == true) this.PLC_LeftDir = 1; + else this.PLC_LeftDir = -1; + + if (RRun == false) this.PLC_RightDir = 0; + else if (RDir == true) this.PLC_RightDir = 1; + else this.PLC_RightDir = -1; + + this.PLC_LeftPosition += this.PLC_LeftDir; + this.PLC_RightPosition += this.PLC_RightDir; + + var maxvalue = 20; + if (PLC_LeftPosition >= maxvalue) + { + PLC_LeftPosition = maxvalue; + PLC_LeftDir = 0;//멈춤 + var idx = (int)DevPLC.DOName.PINO_GUIDEMOTOR_LRUN; + gvdPLCInOut.setValue(idx + 16, false); + idx = (int)DevPLC.DIName.PINI_LIMIT_LD; + gvdPLCInOut.setValue(idx, false); + idx = (int)DevPLC.DIName.PINI_LIMIT_LU; + gvdPLCInOut.setValue(idx, true); + } + else if (PLC_LeftPosition <= 0) + { + PLC_LeftPosition = 0; + PLC_LeftDir = 0; + var idx = (int)DevPLC.DOName.PINO_GUIDEMOTOR_LRUN; + gvdPLCInOut.setValue(idx + 16, false); + idx = (int)DevPLC.DIName.PINI_LIMIT_LU; + gvdPLCInOut.setValue(idx, false); + idx = (int)DevPLC.DIName.PINI_LIMIT_LD; + gvdPLCInOut.setValue(idx, true); + } + else if (PLC_LeftPosition > 5 && PLC_LeftPosition < maxvalue - 5) + { + if (gvdPLCInOut.getValue((int)DevPLC.DIName.PINI_LIMIT_LD) > 0) + gvdPLCInOut.setValue((int)DevPLC.DIName.PINI_LIMIT_LD, false); + if (gvdPLCInOut.getValue((int)DevPLC.DIName.PINI_LIMIT_LU) > 0) + gvdPLCInOut.setValue((int)DevPLC.DIName.PINI_LIMIT_LU, false); + } + + if (PLC_RightPosition >= maxvalue) + { + PLC_RightPosition = maxvalue; + PLC_RightDir = 0;//멈춤 + var idx = (int)DevPLC.DOName.PINO_GUIDEMOTOR_RRUN; + gvdPLCInOut.setValue(idx + 16, false); + idx = (int)DevPLC.DIName.PINI_LIMIT_RD; + gvdPLCInOut.setValue(idx, false); + idx = (int)DevPLC.DIName.PINI_LIMIT_RU; + gvdPLCInOut.setValue(idx, true); + } + else if (PLC_RightPosition <= 0) + { + PLC_RightPosition = 0; + PLC_RightDir = 0; + var idx = (int)DevPLC.DOName.PINO_GUIDEMOTOR_RRUN; + gvdPLCInOut.setValue(idx + 16, false); + idx = (int)DevPLC.DIName.PINI_LIMIT_RU; + gvdPLCInOut.setValue(idx, false); + idx = (int)DevPLC.DIName.PINI_LIMIT_RD; + gvdPLCInOut.setValue(idx, true); + } + else if (PLC_RightPosition > 5 && PLC_RightPosition < maxvalue - 5) + { + if (gvdPLCInOut.getValue((int)DevPLC.DIName.PINI_LIMIT_RD) > 0) + gvdPLCInOut.setValue((int)DevPLC.DIName.PINI_LIMIT_RD, false); + if (gvdPLCInOut.getValue((int)DevPLC.DIName.PINI_LIMIT_RU) > 0) + gvdPLCInOut.setValue((int)DevPLC.DIName.PINI_LIMIT_RU, false); + } + } + + + private void Bms_Message(object sender, AR.Dev.RS232.MessageEventArgs e) + { + var dev = sender as AR.Dev.RS232; + if (dev is DevBMS) + { + logBMS.Add(e.Message); + } + else if (dev is DevAGV) + { + logAGV.Add(e.Message); + } + else if (dev is DevPLC) + { + logPLC.Add(e.Message); + } + else if (dev is DevCAL) + { + if (e.MsgType == AR.Dev.RS232.MessageType.Send) + logCAL.Add(">> " + e.Data.HexString()); + else if (e.MsgType == AR.Dev.RS232.MessageType.Recv) + logCAL.Add("<< " + e.Data.HexString()); + else logCAL.Add(e.Message); + } + } + + private void Form1_FormClosed(object sender, FormClosedEventArgs e) + { + timer1.Stop(); + logPLC.Flush(); + logAGV.Flush(); + logBMS.Flush(); + logCAL.Flush(); + } + + private void btPLCemg_Click(object sender, EventArgs e) + { + var pin = DevPLC.DIName.PINI_EMG; + var cur = gvdPLCInOut.Values[(int)pin]; + this.gvdPLCInOut.setValue((int)pin, cur == 0); + this.gvdPLCInOut.Invalidate(); + } + + private void button9_Click(object sender, EventArgs e) + { + var pinL = DevPLC.DIName.PINI_LIMIT_LU; + var pinR = DevPLC.DIName.PINI_LIMIT_RU; + var cur = gvdPLCInOut.Values[(int)pinL]; + this.gvdPLCInOut.setValue((int)pinL, cur == 0); + this.gvdPLCInOut.setValue((int)pinR, cur == 0); + + pinL = DevPLC.DIName.PINI_LIMIT_LD; + pinR = DevPLC.DIName.PINI_LIMIT_RD; + this.gvdPLCInOut.setValue((int)pinL, false); + this.gvdPLCInOut.setValue((int)pinR, false); + this.gvdPLCInOut.Invalidate(); + } + + private void button10_Click(object sender, EventArgs e) + { + var pinL = DevPLC.DIName.PINI_LIMIT_LD; + var pinR = DevPLC.DIName.PINI_LIMIT_RD; + var cur = gvdPLCInOut.Values[(int)pinL]; + this.gvdPLCInOut.setValue((int)pinL, cur == 0); + this.gvdPLCInOut.setValue((int)pinR, cur == 0); + + + pinL = DevPLC.DIName.PINI_LIMIT_LU; + pinR = DevPLC.DIName.PINI_LIMIT_RU; + this.gvdPLCInOut.setValue((int)pinL, false); + this.gvdPLCInOut.setValue((int)pinR, false); + + + this.gvdPLCInOut.Invalidate(); + } + + private void button13_Click(object sender, EventArgs e) + { + var pinL = DevPLC.DIName.PINI_BTN_1; + var cur = gvdPLCInOut.Values[(int)pinL]; + this.gvdPLCInOut.setValue((int)pinL, cur == 0); + this.gvdPLCInOut.Invalidate(); + } + + private void button12_Click(object sender, EventArgs e) + { + var pinL = DevPLC.DIName.PINI_BTN_2; + var cur = gvdPLCInOut.Values[(int)pinL]; + this.gvdPLCInOut.setValue((int)pinL, cur == 0); + this.gvdPLCInOut.Invalidate(); + } + + private void button11_Click(object sender, EventArgs e) + { + var pinL = DevPLC.DIName.PINI_BTN_3; + var cur = gvdPLCInOut.Values[(int)pinL]; + this.gvdPLCInOut.setValue((int)pinL, cur == 0); + this.gvdPLCInOut.Invalidate(); + } + + private void panel4_Paint(object sender, PaintEventArgs e) + { + + } + + private void groupBox9_Enter(object sender, EventArgs e) + { + + } + + private void button14_Click(object sender, EventArgs e) + { + //agv 정지 + //비상정지 에러 플래그 + AGV.SetAGV(DevAGV.eerror.Emergency, true); + AGV.SetAGV(DevAGV.esystemflag1.agv_run, false); + AGV.SetAGV(DevAGV.esystemflag1.agv_stop, true); + } + + + + private void button16_Click(object sender, EventArgs e) + { + AGV.SetAGV(DevAGV.esystemflag1.stop_by_front_detect, true); + } + + private void button15_Click(object sender, EventArgs e) + { + AGV.SetAGV(DevAGV.esystemflag1.stop_by_front_detect, false); + } + + private void button17_Click(object sender, EventArgs e) + { + //agv 정지 + //비상정지 에러 플래그 + AGV.SetAGV(DevAGV.eerror.Emergency, false); + AGV.SetAGV(DevAGV.eerror.line_out_error, false); + AGV.SetAGV(DevAGV.eerror.Overcurrent, false); + AGV.SetAGV(DevAGV.esystemflag1.agv_run, false); + AGV.SetAGV(DevAGV.esystemflag1.agv_stop, true); + } + + + + private void Chk_CheckedChanged(object sender, EventArgs e) + { + var chk = sender as CheckBox; + var idx = int.Parse(chk.Tag.ToString()); + + switch (chk.Parent.Tag.ToString().ToLower()) + { + case "s0": + var v0 = (DevAGV.esystemflag0)idx; + AGV.SetAGV(v0, chk.Checked); + break; + case "s1": + var v1 = (DevAGV.esystemflag1)idx; + AGV.SetAGV(v1, chk.Checked); + break; + case "er": + var v2 = (DevAGV.eerror)idx; + AGV.SetAGV(v2, chk.Checked); + break; + case "sg": + var v3 = (DevAGV.esignal)idx; + AGV.SetAGV(v3, chk.Checked); + break; + } + + chk.BackColor = chk.Checked ? Color.Lime : SystemColors.Window; + } + + private void button18_Click(object sender, EventArgs e) + { + AGV.SendTag(numericUpDown1.Value.ToString()); + } + + private void button1_Click(object sender, EventArgs e) + { + var bt = sender as Button; + var kitno = nudBMSKitNo.Value.ToString()[0]; + var value = bt.Tag.ToString()[0]; + var barr = new List(); + barr.Add(0x02); + barr.Add((byte)kitno); + barr.Add((byte)value); + barr.Add(0x03); + CAL.WriteData(barr.ToArray()); + } + + private void serAGV_Load(object sender, EventArgs e) + { + + } + + private void agvViewer1_Click(object sender, EventArgs e) + { + + } + + private void agvViewer1_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + agvViewer1.StopbyMark = !agvViewer1.StopbyMark; + } + else if (e.Button == MouseButtons.Right) + { + MakeViewer(); + } + } + + private void radioButton20_Click(object sender, EventArgs e) + { + var rad = sender as RadioButton; + var kitno = int.Parse(rad.Text); + nudBMSKitNo.Value = (decimal)kitno; + } + + private void toolStripButton1_Click(object sender, EventArgs e) + { + serAGV.Connect(); + serPLC.Connect(); + serBMS.Connect(); + serCAL.Connect(); + } + + private void toolStripButton2_Click(object sender, EventArgs e) + { + serAGV.Disconnect(); + serPLC.Disconnect(); + serBMS.Disconnect(); + serCAL.Disconnect(); + } + + private void serBMS_Load(object sender, EventArgs e) + { + + } + + void checkboxevent() + { + + } + + private void GvdPLCFlag_ItemClick(object sender, arFrame.Control.GridView.ItemClickEventArgs e) + { + var newvalue = gvdPLCFlag.Values[e.idx]; + this.gvdPLCFlag.setValue(e.idx, (ushort)(newvalue == 0 ? 1 : 0)); + this.gvdPLCFlag.Invalidate(); + } + + private void GvdPLCInOut_ItemClick(object sender, arFrame.Control.GridView.ItemClickEventArgs e) + { + var newvalue = gvdPLCInOut.Values[e.idx]; + this.gvdPLCInOut.setValue(e.idx, (ushort)(newvalue == 0 ? 1 : 0)); + this.gvdPLCInOut.Invalidate(); + } + } +} diff --git a/Emulator/AGVEmulator/Form1.resx b/Emulator/AGVEmulator/Form1.resx new file mode 100644 index 0000000..12f786e --- /dev/null +++ b/Emulator/AGVEmulator/Form1.resx @@ -0,0 +1,160 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 104, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + 210, 17 + + \ No newline at end of file diff --git a/Emulator/AGVEmulator/Program.cs b/Emulator/AGVEmulator/Program.cs new file mode 100644 index 0000000..63e4d9c --- /dev/null +++ b/Emulator/AGVEmulator/Program.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace AGVEmulator +{ + static class Program + { + /// + /// 해당 애플리케이션의 주 진입점입니다. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } + public static class methodext + { + public static string HexString(this byte[] buf) + { + var sb = new System.Text.StringBuilder(); + foreach (var b in buf) + { + sb.Append(" " + b.ToString("X2")); + } + return sb.ToString(); + } + } + +} diff --git a/Emulator/AGVEmulator/Properties/AssemblyInfo.cs b/Emulator/AGVEmulator/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..abd4775 --- /dev/null +++ b/Emulator/AGVEmulator/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 +// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면 +// 이러한 특성 값을 변경하세요. +[assembly: AssemblyTitle("AGVEmulator")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("AGVEmulator")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 +// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면 +// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요. +[assembly: ComVisible(false)] + +// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다. +[assembly: Guid("9312ab43-72f6-4365-a266-e767215fa7f5")] + +// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다. +// +// 주 버전 +// 부 버전 +// 빌드 번호 +// 수정 버전 +// +// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를 +// 기본값으로 할 수 있습니다. +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Emulator/AGVEmulator/Properties/Resources.Designer.cs b/Emulator/AGVEmulator/Properties/Resources.Designer.cs new file mode 100644 index 0000000..fdfabc2 --- /dev/null +++ b/Emulator/AGVEmulator/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 이 코드는 도구를 사용하여 생성되었습니다. +// 런타임 버전:4.0.30319.42000 +// +// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +// 이러한 변경 내용이 손실됩니다. +// +//------------------------------------------------------------------------------ + +namespace AGVEmulator.Properties { + using System; + + + /// + /// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다. + /// + // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder + // 클래스에서 자동으로 생성되었습니다. + // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여 ResGen을 + // 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AGVEmulator.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을 + /// 재정의합니다. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Emulator/AGVEmulator/Properties/Resources.resx b/Emulator/AGVEmulator/Properties/Resources.resx new file mode 100644 index 0000000..ffecec8 --- /dev/null +++ b/Emulator/AGVEmulator/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Emulator/AGVEmulator/Properties/Settings.Designer.cs b/Emulator/AGVEmulator/Properties/Settings.Designer.cs new file mode 100644 index 0000000..63bd2b7 --- /dev/null +++ b/Emulator/AGVEmulator/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 이 코드는 도구를 사용하여 생성되었습니다. +// 런타임 버전:4.0.30319.42000 +// +// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면 +// 이러한 변경 내용이 손실됩니다. +// +//------------------------------------------------------------------------------ + +namespace AGVEmulator.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/Emulator/AGVEmulator/Properties/Settings.settings b/Emulator/AGVEmulator/Properties/Settings.settings new file mode 100644 index 0000000..abf36c5 --- /dev/null +++ b/Emulator/AGVEmulator/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/Emulator/AGVEmulator/RS232.cs b/Emulator/AGVEmulator/RS232.cs new file mode 100644 index 0000000..04dba53 --- /dev/null +++ b/Emulator/AGVEmulator/RS232.cs @@ -0,0 +1,481 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading; + +namespace AR.Dev +{ + public abstract partial class RS232 : IDisposable + { + protected System.IO.Ports.SerialPort _device; + protected ManualResetEvent _mre; + protected byte[] LastReceiveBuffer; + + protected List tempBuffer = new List(); + protected Boolean findSTX = false; + + + public int WriteError = 0; + public string WriteErrorMessage = string.Empty; + public int WaitTimeout { get; set; } = 1000; + public int MinRecvLength { get; set; } = 1; + /// + /// 포트이름 + /// + [Description("시리얼 포트 이름")] + [Category("설정"), DisplayName("Port Name")] + public string PortName + { + get + { + if (_device == null) return string.Empty; + else return _device.PortName; + } + set + { + if (this.IsOpen) + { + Message?.Invoke(this, new MessageEventArgs("포트가 열려있어 포트이름을 변경할 수 없습니다", true)); + } + else if (String.IsNullOrEmpty(value) == false) + _device.PortName = value; + else + { + Message?.Invoke(this, new MessageEventArgs("No PortName", true)); + } + } + } + + public int BaudRate + { + get + { + if (_device == null) return 0; + else return _device.BaudRate; + } + set + { + if (this.IsOpen) + { + Message?.Invoke(this, new MessageEventArgs("포트가 열려있어 BaudRate(를) 변경할 수 없습니다", true)); + } + else if (value != 0) + _device.BaudRate = value; + else Message?.Invoke(this, new MessageEventArgs("No baud rate", true)); + } + } + + public string errorMessage { get; set; } + public DateTime LastConnTime { get; set; } + public DateTime LastConnTryTime { get; set; } + public DateTime lastSendTime; + /// + /// 메세지 수신시 사용하는 내부버퍼 + /// + protected List _buffer = new List(); + + /// + /// 최종 전송 메세지 + /// + public byte[] lastSendBuffer; + public byte[] LastRecvData; + public string LastRecvString + { + get + { + if (LastRecvData == null) return String.Empty; + else return System.Text.Encoding.Default.GetString(LastRecvData); + } + } + /// + /// 마지막으로 데이터를 받은 시간 + /// + public DateTime lastRecvTime; + + public RS232() + { + _device = new System.IO.Ports.SerialPort(); + this.BaudRate = 9600; + + _device.DataReceived += barcode_DataReceived; + _device.ErrorReceived += this.barcode_ErrorReceived; + _device.WriteTimeout = 5000; + _device.ReadTimeout = 5000; + _device.DtrEnable = false; + _device.RtsEnable = false; + _device.ReadBufferSize = 8192; + _device.WriteBufferSize = 8192; + + errorMessage = string.Empty; + lastRecvTime = DateTime.Parse("1982-11-23"); + LastConnTime = DateTime.Parse("1982-11-23"); + LastConnTryTime = DateTime.Parse("1982-11-23"); + lastRecvTime = DateTime.Parse("1982-11-23"); + this._mre = new ManualResetEvent(true); + } + + ~RS232() + { + Dispose(false); + } + + + // Flag: Has Dispose already been called? + bool disposed = false; + + // Public implementation of Dispose pattern callable by consumers. + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + // Protected implementation of Dispose pattern. + protected virtual void Dispose(bool disposing) + { + if (disposed) + return; + + if (disposing) + { + // Free any other managed objects here. + // + } + + _device.DataReceived -= barcode_DataReceived; + _device.ErrorReceived -= this.barcode_ErrorReceived; + + // Free any unmanaged objects here. + // + disposed = true; + } + + public Boolean Open() + { + try + { + _device.Open(); + Message?.Invoke(this, new MessageEventArgs(msgtype: MessageType.Normal, $"port open:{_device.IsOpen}")); + return IsOpen; + } + catch (Exception ex) + { + errorMessage = ex.Message; + Message.Invoke(this, new MessageEventArgs(ex.Message, true)); + return false; + } + } + public string GetHexString(Byte[] input) + { + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + foreach (byte b in input) + sb.Append(" " + b.ToString("X2")); + return sb.ToString(); + } + + /// + /// 포트가 열려있는지 확인 + /// + [Description("현재 시리얼포트가 열려있는지 확인합니다")] + [Category("정보"), DisplayName("Port Open")] + public Boolean IsOpen + { + get + { + if (_device == null) return false; + return _device.IsOpen; + } + } + + public virtual void Close(Boolean PortClose = true) + { + if (_device != null && _device.IsOpen) + { + _device.DiscardInBuffer(); + _device.DiscardOutBuffer(); + if (PortClose) _device.Close(); //dispose에서는 포트를 직접 클리어하지 않게 해뒀다. + } + } + + public Boolean RaiseRecvData() + { + return RaiseRecvData(LastReceiveBuffer.ToArray()); + } + /// + /// 수신받은 메세지를 발생 시킵니다 + /// + /// + /// + public virtual Boolean RaiseRecvData(byte[] Data) + { + //181206 - 최종수신 메세지 기록 + lastRecvTime = DateTime.Now; + LastRecvData = Data; + + try + { + Message?.Invoke(this, new MessageEventArgs(Data, true)); //recvmessage + if (ProcessRecvData(Data) == false) + { + //Message?.Invoke(this, new MessageEventArgs(Data, true)); //recvmessage + Message?.Invoke(this, new MessageEventArgs(this.errorMessage, true)); //errormessage + return false; + } + else + { + + return true; + } + } + catch (Exception ex) + { + this.errorMessage = ex.Message; + this.Message?.Invoke(this, new MessageEventArgs(ex.Message, true)); + return false; + } + } + + /// + /// 수신받은 자료를 처리한다 + /// + /// + /// + public abstract bool ProcessRecvData(byte[] data); + + #region "Internal Events" + + void barcode_ErrorReceived(object sender, System.IO.Ports.SerialErrorReceivedEventArgs e) + { + Message?.Invoke(this, new MessageEventArgs(e.ToString(), true)); + } + + void barcode_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) + { + + try + { + int ReadCount = _device.BytesToRead; + + byte[] buffer = new byte[ReadCount]; + _device.Read(buffer, 0, buffer.Length); + + System.Text.StringBuilder LogMsg = new StringBuilder(); + + byte[] remainBuffer; + Repeat: + if (CustomParser(buffer, out remainBuffer)) + { + //parser ok + LastReceiveBuffer = tempBuffer.ToArray(); + RaiseRecvData(); + tempBuffer.Clear(); + if (remainBuffer != null && remainBuffer.Length > 0) + { + //버퍼를 변경해서 다시 전송을 해준다. + buffer = new byte[remainBuffer.Length]; + Array.Copy(remainBuffer, buffer, buffer.Length); + goto Repeat; //남은 버퍼가 있다면 진행을 해준다. + } + } + + } + catch (Exception ex) + { + if (IsOpen) + { + //_device.DiscardInBuffer(); + //_device.DiscardOutBuffer(); + } + errorMessage = ex.Message; + this.Message?.Invoke(this, new MessageEventArgs(ex.Message, true)); + } + + } + + + #endregion + + #region "External Events" + + + /// + /// 오류 및 기타 일반 메세지 + /// + public event EventHandler Message; + + #endregion + + #region "Event Args" + + /// + /// 데이터를 수신할떄 사용함(RAW 포함) + /// + public class ReceiveDataEventArgs : EventArgs + { + private byte[] _buffer = null; + + /// + /// 바이트배열의 버퍼값 + /// + public byte[] Value { get { return _buffer; } } + + /// + /// 버퍼(바이트배열)의 데이터를 문자로 반환합니다. + /// + public string StrValue + { + get + { + //return string.Empty; + + if (_buffer == null || _buffer.Length < 1) return string.Empty; + else return System.Text.Encoding.Default.GetString(_buffer); + } + } + public ReceiveDataEventArgs(byte[] buffer) + { + _buffer = buffer; + } + } + + /// + /// 메세지를 강제 발생 + /// + /// + /// + protected virtual void RaiseMessage(MessageType mt, string message) + { + this.Message?.Invoke(this, new MessageEventArgs(mt, message)); + } + public enum MessageType + { + Normal, + Error, + Send, + Recv, + } + + public class MessageEventArgs : EventArgs + { + public MessageType MsgType { get; set; } + private string _message = string.Empty; + + /// + /// Recv,Send,Normal,Error 모두 지원 + /// + public string Message { get { return _message; } } + + private byte[] _data = null; + + /// + /// Recv,Send에서만 값이 존재 합니다 + /// + public byte[] Data { get { return _data; } } + public MessageEventArgs(string Message, bool isError = false) + { + if (isError) MsgType = MessageType.Error; + else MsgType = MessageType.Normal; + _message = Message; + } + public MessageEventArgs(MessageType msgtype, string Message) + { + MsgType = msgtype; + _message = Message; + _data = System.Text.Encoding.Default.GetBytes(Message); + } + + public MessageEventArgs(byte[] buffer, bool isRecv = true) + { + if (isRecv) MsgType = MessageType.Recv; + else MsgType = MessageType.Send; + _data = new byte[buffer.Length]; + Array.Copy(buffer, _data, Data.Length); + _message = System.Text.Encoding.Default.GetString(_data); + } + + } + + #endregion + + + public virtual void AutoSendData() + { + + } + + protected abstract bool CustomParser(byte[] buf, out byte[] remainBuffer); + + /// + /// 데이터수신시간이 설정값보다 x 2.5를 초과하면 false 가 반환됨 + /// + public Boolean IsValid + { + get + { + if (IsOpen == false) return false; + if (lastRecvTime.Year == 1982) return false; + var ts = DateTime.Now - lastRecvTime; + if (ts.TotalSeconds > 5) return false; + return true; + } + } + public bool WriteData(string cmd) + { + return WriteData(System.Text.Encoding.Default.GetBytes(cmd)); + } + /// + /// 포트에 쓰기(barcode_DataReceived 이벤트로 메세지수신) + /// + public Boolean WriteData(byte[] data) + { + Boolean bRet = false; + + //171205 : 타임아웃시간추가 + if (!_mre.WaitOne(WaitTimeout)) + { + errorMessage = $"WriteData:MRE:WaitOne:TimeOut {WaitTimeout}ms"; + this.Message?.Invoke(this, new MessageEventArgs(errorMessage, true)); + return false; + } + + _mre.Reset(); + + //Array.Resize(ref data, data.Length + 2); + + try + { + lastSendTime = DateTime.Now; + if (lastSendBuffer == null) lastSendBuffer = new byte[data.Length]; //171113 + else Array.Resize(ref lastSendBuffer, data.Length); + Array.Copy(data, lastSendBuffer, data.Length); + + for (int i = 0; i < data.Length; i++) + _device.Write(data, i, 1); + + //_device.Write(data, 0, data.Length); + + //171113 + this.Message?.Invoke(this, new MessageEventArgs(data, false)); + + bRet = true; + WriteError = 0; + WriteErrorMessage = string.Empty; + } + catch (Exception ex) + { + // this.isinit = false; + this.Message?.Invoke(this, new MessageEventArgs(ex.Message, true)); + bRet = false; + WriteError += 1; //연속쓰기오류횟수 + WriteErrorMessage = ex.Message; + } + finally + { + _mre.Set(); + } + return bRet; + } + } +} diff --git a/Emulator/AGVEmulator/UC/AgvViewer.Designer.cs b/Emulator/AGVEmulator/UC/AgvViewer.Designer.cs new file mode 100644 index 0000000..e85de4f --- /dev/null +++ b/Emulator/AGVEmulator/UC/AgvViewer.Designer.cs @@ -0,0 +1,37 @@ + +namespace AGVEmulator.UC +{ + partial class AgvViewer + { + /// + /// 필수 디자이너 변수입니다. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 사용 중인 모든 리소스를 정리합니다. + /// + /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 구성 요소 디자이너에서 생성한 코드 + + /// + /// 디자이너 지원에 필요한 메서드입니다. + /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + } + + #endregion + } +} diff --git a/Emulator/AGVEmulator/UC/AgvViewer.cs b/Emulator/AGVEmulator/UC/AgvViewer.cs new file mode 100644 index 0000000..c51ace3 --- /dev/null +++ b/Emulator/AGVEmulator/UC/AgvViewer.cs @@ -0,0 +1,272 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace AGVEmulator.UC +{ + public partial class AgvViewer : Control + { + + public AgvViewer() + { + InitializeComponent(); + + // Set Optimized Double Buffer to reduce flickering + this.SetStyle(ControlStyles.UserPaint, true); + this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); + this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); + + // Redraw when resized + this.SetStyle(ControlStyles.ResizeRedraw, true); + } + + public class TagArgs : EventArgs + { + public string Data { get; set; } + public bool Active { get; set; } + public TagArgs(string tag,bool act) + { + this.Data = tag; + this.Active = act; + } + } + public event EventHandler TagTouched; + public event EventHandler MarkTouched; + public event EventHandler Command; + + public bool StopbyMark { get; set; } + public float mpos = 100; + public float posmax = 1200; + public float posmin = 0; + public float mspd = 10; + public System.Diagnostics.Stopwatch wat = new System.Diagnostics.Stopwatch(); + public Font FontTag { get; set; } + public Font FontMrk { get; set; } + public int dir = 1; + + public class ptdata + { + public float pos { get; set; } = 0f; + public string data { get; set; } = string.Empty; + public Boolean active { get; set; } = false; + } + public ptdata[] listMRK { get; set; } + public ptdata[] listTAG { get; set; } + + public string lasttag { get; set; } = string.Empty; + public string lasttagdir { get; set; } = string.Empty; + public string lastmark { get; set; } = string.Empty; + public string lastmarkdir { get; set; } = string.Empty; + + protected override void OnPaint(PaintEventArgs pe) + { + pe.Graphics.Clear(this.BackColor); + var r = new Rectangle(DisplayRectangle.Left + Padding.Left, + DisplayRectangle.Top + Padding.Top, + DisplayRectangle.Width - Padding.Right - Padding.Left - 1, + DisplayRectangle.Height - Padding.Top - Padding.Bottom - 1); + + + // pe.Graphics.FillRectangle(new SolidBrush(this.BackColor), DisplayRectangle); + pe.Graphics.DrawRectangle(Pens.Black, r); + + + var ptwidth = 25; + var ptheight = 35; + if (listMRK != null && listMRK.Any() && FontMrk != null) + { + foreach (var item in listMRK) + { + var x = r.Left + ((item.pos * 1f) / posmax) * r.Width; + var rr = new RectangleF(x - ptwidth, r.Top + r.Height / 2f - ptheight / 2f, ptwidth * 2, ptheight); + pe.Graphics.DrawLine(Pens.Gray, x, r.Top, x, r.Bottom); + pe.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(120, Color.Gold)), rr); + pe.Graphics.DrawRectangle(Pens.DimGray, rr.Left, rr.Top, rr.Width, rr.Height); + pe.Graphics.DrawString(item.data, FontMrk, Brushes.Gray, rr, new StringFormat + { + Alignment = StringAlignment.Center, + LineAlignment = StringAlignment.Center, + }); + + } + } + + ptwidth = 15; + if (listTAG != null && listTAG.Any() && FontTag != null) + { + var lst = listTAG.Where(t => t.data.EndsWith("1")); + foreach (var item in lst) + { + var x = r.Left + ((item.pos * 1f) / posmax) * r.Width; + var rr = new RectangleF(x - ptwidth, r.Top + 5, ptwidth * 2, 15); + pe.Graphics.DrawLine(Pens.Orange, x, r.Top, x, rr.Top); + pe.Graphics.FillRectangle(Brushes.Orange, rr); + pe.Graphics.DrawRectangle(Pens.DimGray, rr.Left, rr.Top, rr.Width, rr.Height); + pe.Graphics.DrawString(item.data, FontTag, Brushes.Black, rr, new StringFormat + { + Alignment = StringAlignment.Center, + LineAlignment = StringAlignment.Center, + }); + } + + lst = listTAG.Where(t => t.data.EndsWith("0")); + foreach (var item in lst) + { + var x = r.Left + ((item.pos * 1f) / posmax) * r.Width; + var rr = new RectangleF(x - ptwidth, r.Bottom - 20, ptwidth * 2, 15); + pe.Graphics.DrawLine(Pens.Orange, x, rr.Bottom, x, r.Bottom); + pe.Graphics.FillRectangle(Brushes.Orange, rr); + pe.Graphics.DrawRectangle(Pens.DimGray, rr.Left, rr.Top, rr.Width, rr.Height); + pe.Graphics.DrawString(item.data, FontTag, Brushes.Black, rr, new StringFormat + { + Alignment = StringAlignment.Center, + LineAlignment = StringAlignment.Center, + }); + } + } + + var posX = r.Left + (mpos / posmax) * r.Width; + var posY = r.Top + r.Height / 2f; + var boxw = r.Width * 0.030f; + var boxh = r.Height * 0.15f; + var box = new RectangleF(posX - boxw, posY - boxh, boxw * 2, boxh * 2); + var box2 = new RectangleF(box.Left - 5, box.Top + 3, 10, box.Height - 6); + for (int i = 0; i < posmax; i += 100) + { + var x = r.Left + ((i * 1f) / posmax) * r.Width; + pe.Graphics.DrawLine(Pens.Black, x, r.Bottom - 3, x, r.Bottom); + if (i > 0) + pe.Graphics.DrawString($"{i / 10f}m", this.Font, Brushes.Black, x - 12, r.Bottom - 15); + } + pe.Graphics.FillRectangle(Brushes.LightSkyBlue, box); + pe.Graphics.DrawRectangle(Pens.Black, box.Left, box.Top, box.Width, box.Height); + pe.Graphics.DrawLine(new Pen(Color.Black, 4), posX, box.Top - 5, posX, box.Bottom + 5); + + pe.Graphics.FillRectangle(Brushes.Gold, box2); + pe.Graphics.DrawRectangle(Pens.Black, box2.Left, box2.Top, box2.Width, box2.Height); + //pe.Graphics.DrawString((mpos / 10f).ToString("N1") + "m", this.Font, Brushes.Black, box, new StringFormat + //{ + // Alignment = StringAlignment.Center, + // LineAlignment = StringAlignment.Center, + //}); + + if (StopbyMark) + pe.Graphics.DrawString("!MRK-STP!", this.Font, Brushes.Blue, r.Left+2, r.Top+2); + + if (wat.IsRunning) + { + var newpos = mspd * (wat.ElapsedMilliseconds / 1000f); + if (dir < 0) //forward + { + if (mpos - newpos < 0) + mpos = posmax; + else mpos -= newpos; + + //내위치주변에 마커가 있는지 본다 + var mlist = listMRK.Where(t => t.pos <= mpos && (mpos - t.pos) < 10); + var mrk = mlist.FirstOrDefault(); + if (mrk != null) + { + //대상마커가있다 + if (lastmark.Equals(mrk.data) == false || lastmarkdir.Equals("F") == false) + { + lastmark = mrk.data; + lastmarkdir = "F"; + mrk.active = true; + MarkTouched?.Invoke(this, new TagArgs(mrk.data,true)); + if(StopbyMark) + { + Command?.Invoke(this, new TagArgs("stop",true)); + StopbyMark = false; + } + } + } + else + { + if (string.IsNullOrEmpty(lastmark) == false) + { + foreach(var item in listMRK.Where(t=>t.active)) + { + item.active = false; + MarkTouched?.Invoke(this, new TagArgs(item.data,false)); + } + } + } + + //주변태그확인 + var tlist = listTAG.Where(t => t.pos <= mpos && (mpos - t.pos) < 10); + var tag = tlist.FirstOrDefault(); + if (tag != null) + { + //대상마커가있다 + if (lasttag.Equals(tag.data) == false || lasttagdir.Equals("F") == false) + { + lasttag = tag.data; + lasttagdir = "F"; + TagTouched?.Invoke(this, new TagArgs(tag.data, true)); + } + } + } + else //backward + { + if (mpos + newpos > posmax) + mpos = 0; + else mpos += newpos; + + //내위치주변에 마커가 있는지 본다 + var mlist = listMRK.Where(t => t.pos >= mpos && (t.pos - mpos) < 10); + var mrk = mlist.FirstOrDefault(); + if (mrk != null) + { + //대상마커가있다 + if (lastmark.Equals(mrk.data) == false || lastmarkdir.Equals("B") == false) + { + lastmark = mrk.data; + lastmarkdir = "B"; + mrk.active = true; + MarkTouched?.Invoke(this, new TagArgs(mrk.data, true)); + if (StopbyMark) + { + Command?.Invoke(this, new TagArgs("stop", true)); + StopbyMark = false; + } + } + } + else + { + if (string.IsNullOrEmpty(lastmark) == false) + { + foreach (var item in listMRK.Where(t => t.active)) + { + item.active = false; + MarkTouched?.Invoke(this, new TagArgs(item.data, false)); + } + } + } + + //주변태그확인 + var tlist = listTAG.Where(t => t.pos >= mpos && (t.pos - mpos) < 10); + var tag = tlist.FirstOrDefault(); + if (tag != null) + { + //대상마커가있다 + if (lasttag.Equals(tag.data) == false || lasttagdir.Equals("B") == false) + { + lasttag = tag.data; + lasttagdir = "B"; + TagTouched?.Invoke(this, new TagArgs(tag.data, true)); + } + } + } + + wat.Restart(); + } + } + } +} diff --git a/Emulator/AGVEmulator/UC/SerialConn.Designer.cs b/Emulator/AGVEmulator/UC/SerialConn.Designer.cs new file mode 100644 index 0000000..8665797 --- /dev/null +++ b/Emulator/AGVEmulator/UC/SerialConn.Designer.cs @@ -0,0 +1,162 @@ + +namespace AGVEmulator +{ + partial class SerialConn + { + /// + /// 필수 디자이너 변수입니다. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 사용 중인 모든 리소스를 정리합니다. + /// + /// 관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 구성 요소 디자이너에서 생성한 코드 + + /// + /// 디자이너 지원에 필요한 메서드입니다. + /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요. + /// + private void InitializeComponent() + { + this.cmbBaud = new System.Windows.Forms.ComboBox(); + this.cmbPOrt = new System.Windows.Forms.ComboBox(); + this.panel1 = new System.Windows.Forms.Panel(); + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.lbrx = new System.Windows.Forms.Label(); + this.lbtx = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.panel1.SuspendLayout(); + this.tableLayoutPanel1.SuspendLayout(); + this.SuspendLayout(); + // + // cmbBaud + // + this.cmbBaud.Dock = System.Windows.Forms.DockStyle.Top; + this.cmbBaud.Font = new System.Drawing.Font("굴림", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.cmbBaud.FormattingEnabled = true; + this.cmbBaud.Items.AddRange(new object[] { + "9600", + "12800", + "25600", + "38400", + "512000"}); + this.cmbBaud.Location = new System.Drawing.Point(0, 28); + this.cmbBaud.Name = "cmbBaud"; + this.cmbBaud.Size = new System.Drawing.Size(134, 28); + this.cmbBaud.TabIndex = 0; + this.cmbBaud.Text = "9600"; + // + // cmbPOrt + // + this.cmbPOrt.Dock = System.Windows.Forms.DockStyle.Top; + this.cmbPOrt.Font = new System.Drawing.Font("굴림", 15F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.cmbPOrt.FormattingEnabled = true; + this.cmbPOrt.Location = new System.Drawing.Point(0, 0); + this.cmbPOrt.Name = "cmbPOrt"; + this.cmbPOrt.Size = new System.Drawing.Size(134, 28); + this.cmbPOrt.TabIndex = 1; + // + // panel1 + // + this.panel1.Controls.Add(this.tableLayoutPanel1); + this.panel1.Controls.Add(this.cmbBaud); + this.panel1.Controls.Add(this.cmbPOrt); + this.panel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(134, 96); + this.panel1.TabIndex = 2; + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.ColumnCount = 2; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Controls.Add(this.lbrx, 0, 0); + this.tableLayoutPanel1.Controls.Add(this.lbtx, 1, 0); + this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 56); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 1; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(134, 40); + this.tableLayoutPanel1.TabIndex = 4; + // + // lbrx + // + this.lbrx.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lbrx.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbrx.Font = new System.Drawing.Font("Microsoft Sans Serif", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbrx.Location = new System.Drawing.Point(0, 0); + this.lbrx.Margin = new System.Windows.Forms.Padding(0); + this.lbrx.Name = "lbrx"; + this.lbrx.Size = new System.Drawing.Size(67, 40); + this.lbrx.TabIndex = 2; + this.lbrx.Text = "RX"; + this.lbrx.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // lbtx + // + this.lbtx.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.lbtx.Dock = System.Windows.Forms.DockStyle.Fill; + this.lbtx.Font = new System.Drawing.Font("Microsoft Sans Serif", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.lbtx.Location = new System.Drawing.Point(67, 0); + this.lbtx.Margin = new System.Windows.Forms.Padding(0); + this.lbtx.Name = "lbtx"; + this.lbtx.Size = new System.Drawing.Size(67, 40); + this.lbtx.TabIndex = 3; + this.lbtx.Text = "TX"; + this.lbtx.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // button1 + // + this.button1.Dock = System.Windows.Forms.DockStyle.Right; + this.button1.FlatAppearance.BorderColor = System.Drawing.Color.DodgerBlue; + this.button1.FlatAppearance.BorderSize = 3; + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button1.Font = new System.Drawing.Font("맑은 고딕", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129))); + this.button1.Location = new System.Drawing.Point(134, 0); + this.button1.Margin = new System.Windows.Forms.Padding(0); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(82, 96); + this.button1.TabIndex = 3; + this.button1.Text = "연결"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // SerialConn + // + this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.panel1); + this.Controls.Add(this.button1); + this.Name = "SerialConn"; + this.Size = new System.Drawing.Size(216, 96); + this.panel1.ResumeLayout(false); + this.tableLayoutPanel1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ComboBox cmbBaud; + private System.Windows.Forms.ComboBox cmbPOrt; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Label lbtx; + private System.Windows.Forms.Label lbrx; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + } +} diff --git a/Emulator/AGVEmulator/UC/SerialConn.cs b/Emulator/AGVEmulator/UC/SerialConn.cs new file mode 100644 index 0000000..50834ec --- /dev/null +++ b/Emulator/AGVEmulator/UC/SerialConn.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace AGVEmulator +{ + public partial class SerialConn : UserControl + { + public AR.Dev.RS232 dev { get; set; } + public SerialConn() + { + InitializeComponent(); + } + + void AttachEvent() + { + dev.Message += Dev_Message; + } + void DetachEvent() + { + dev.Message -= Dev_Message; + } + private void Dev_Message(object sender, AR.Dev.RS232.MessageEventArgs e) + { + if (e.MsgType == AR.Dev.RS232.MessageType.Recv) + ToggleRX(); + else if (e.MsgType == AR.Dev.RS232.MessageType.Send) + ToggleTX(); + } + + public void SetPortList(string[] list) + { + cmbPOrt.Items.Clear(); + foreach (var item in list) + cmbPOrt.Items.Add(item); + } + public string PortName + { + get + { + return cmbPOrt.Text; + } + set { this.cmbPOrt.Text = value; } + } + public int BaudRate + { + get + { + return int.Parse(cmbBaud.Text); + } + set + { + cmbBaud.Text = value.ToString(); + } + } + public void ToggleTX() + { + if (lbtx.BackColor == Color.DeepSkyBlue) + lbtx.BackColor = Color.White; + else lbtx.BackColor = Color.DeepSkyBlue; + } + public void ToggleRX() + { + if (lbrx.BackColor == Color.Lime) + lbrx.BackColor = Color.White; + else lbrx.BackColor = Color.Lime; + } + public void Disconnect() + { + if (this.dev.IsOpen) + { + DetachEvent(); + dev.Close(); + } + if (dev.IsOpen) + button1.BackColor = Color.Lime; + else button1.BackColor = Color.Tomato; + } + public void Connect() + { + if (this.dev.IsOpen) + { + DetachEvent(); + dev.Close(); + } + else + { + this.dev.PortName = cmbPOrt.Text; + this.dev.BaudRate = int.Parse(cmbBaud.Text); + AttachEvent(); + try + { + dev.Open(); + } + catch (Exception ex) + { + button1.BackColor = Color.Red; + } + } + + if (dev.IsOpen) + button1.BackColor = Color.Lime; + else button1.BackColor = Color.Tomato; + } + + private void button1_Click(object sender, EventArgs e) + { + if (this.dev == null) + { + MessageBox.Show("시리얼 개체가 연결되지 않았습니다"); + return; + } + if(int.TryParse(cmbBaud.Text,out int baud)==false) + { + MessageBox.Show("Baudrate 값이 올바르지 않습니다"); + return; + } + Connect(); + + + + + } + } +} diff --git a/Emulator/AGVEmulator/UC/SerialConn.resx b/Emulator/AGVEmulator/UC/SerialConn.resx new file mode 100644 index 0000000..29dcb1b --- /dev/null +++ b/Emulator/AGVEmulator/UC/SerialConn.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Emulator/AGVEmulator/app.config b/Emulator/AGVEmulator/app.config new file mode 100644 index 0000000..2c0f559 --- /dev/null +++ b/Emulator/AGVEmulator/app.config @@ -0,0 +1,3 @@ + + + diff --git a/Emulator/AGVEmulator/devBMS.cs b/Emulator/AGVEmulator/devBMS.cs new file mode 100644 index 0000000..0b00cc0 --- /dev/null +++ b/Emulator/AGVEmulator/devBMS.cs @@ -0,0 +1,228 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace AGVEmulator +{ + class DevBMS : AR.Dev.RS232 + { + public class RequestBatteryDataArgs : EventArgs + { + + public float Volt { get; set; } + public float Remain { get; set; } + public int CurA { get; set; } + public int MaxA { get; set; } + public RequestBatteryDataArgs() + { + this.Volt = 25; + this.Remain = 79f; + this.CurA = 40; + this.MaxA = 80; + } + } + public class RequestVoltageDataArgs : EventArgs + { + public UInt16[] cellVolt { get; set; } + public RequestVoltageDataArgs() + { + + cellVolt = new UInt16[] { 0, 0, 0, 0, 0, 0, 0, 0 }; + } + } + + public event EventHandler RequestBatteryData; + public event EventHandler RequestVoltageData; + public override bool ProcessRecvData(byte[] data) + { + //dd로 시작하고 34개의 데이터(명령이 0D로 끝나면 34이고, 77로 끝나면 34보다크다) + var sample000D = "DD 03 00 1B 0A 65 00 00 21 63 29 04 00 00 2C 92 00 00 00 00 00 00 28 51 03 08 02 0B 69 0B 66 FC 9C 77"; + var sampleFC77 = "DD 03 00 1B 0A 6E 0D DD 04 00 10 0D 0A 0D 09 0D 0C 0D 09 0D 0A 0D 09 0D 09 0D 0C FF 38 77 DD 04 00 10 0D 0A 0D 09 0D 0C 0D 09 0D 0A 0D 09 0D 09 0D 0C FF 38 77"; + var sampleFD77 = "DD 03 00 1B 0A 6E 00 00 1F 4A 29 04 00 4E 2C D7 00 00 00 00 00 00 28 4C 03 08 02 0B 9F 0B A9 FB A7 77 DD 03 00 1B 0A 6E 00 00 1F 4A 29 04 00 4E 2C D7 00 00 00 00 00 00 28 4C 03 08 02 0B 9F 0B AA FB A6 77"; + + //basic + var basicinfosmaple = "0A 65 00 00 21 63 29 04 00 00 2C 92 00 00 00 00 00 00 28 51 03 08 02 0B 69 0B 66"; + var basic_payload = basicinfosmaple.Split(' ').ToList().Select(t => Convert.ToByte(t, 16)).ToArray(); //old + + + + var barr0D = sample000D.Split(' ').ToList().Select(t => Convert.ToByte(t, 16)).ToArray(); //old + var barrFC77 = sampleFC77.Split(' ').ToList().Select(t => Convert.ToByte(t, 16)).ToArray(); //setting + var barrFD77 = sampleFD77.Split(' ').ToList().Select(t => Convert.ToByte(t, 16)).ToArray(); //normal + + if (data.First() != 0xDD || data.Last() != 0x77) + { + RaiseMessage(MessageType.Error, "stx,etx error"); + return false; + } + var sts = data[1]; + var cmd = data[2]; + + RaiseMessage(MessageType.Normal, "Rx:" + data.HexString()); + byte sendOld = 0; + + if (cmd == 0x03) //get basic info + { + if (RequestBatteryData != null) + { + var p = new RequestBatteryDataArgs(); + RequestBatteryData.Invoke(this, p); + + //전압 + var Volt = (UInt16)(p.Volt * 100); + var arr_volt = BitConverter.GetBytes(Volt).Reverse().ToArray(); + Array.Copy(arr_volt, 0, basic_payload, 0, arr_volt.Length); + + //잔량A + var CurA = (UInt16)p.CurA; + var arr_cura = BitConverter.GetBytes(CurA).Reverse().ToArray(); + Array.Copy(arr_cura, 0, basic_payload, 4, arr_cura.Length); + + + //최대A + var MaxA = (UInt16)p.MaxA; + var arr_maxa = BitConverter.GetBytes(MaxA).Reverse().ToArray(); + Array.Copy(arr_maxa, 0, basic_payload, 6, arr_maxa.Length); + + //% + var perc = (byte)(int)p.Remain; + Array.Copy(new byte[] { perc }, 0, basic_payload, 19, 1); + + var datalen = (byte)basic_payload.Length; + var payload_cs = new List(); + payload_cs.Add(datalen); + payload_cs.AddRange(basic_payload); + var chks = MakeCheckSum(payload_cs); + + var buffer = new List(); + buffer.Add(0xdd); + buffer.Add(cmd); + buffer.Add(0x00); + buffer.Add(datalen); + buffer.AddRange(basic_payload); + buffer.AddRange(chks); + buffer.Add(0x77); + + + ////makechecksum + //UInt16 chksum = 0; + //for (int i = 3; i <= 19; i++) + //{ + // chksum += barrFD77[i]; + //} + //chksum = (UInt16)(0xFFFF - chksum + 1); + //Array.Copy(BitConverter.GetBytes(chksum).Reverse().ToArray(), 0, barrFD77, 20, 2); + + + RaiseMessage(MessageType.Normal, $"Volt:{p.Volt}v,Remain:{p.Remain}%"); + + var sendstr = System.Text.Encoding.Default.GetString(barr0D); + RaiseMessage(MessageType.Normal, "Tx:" + barr0D.HexString()); + WriteData(buffer.ToArray()); + } + } + else if (cmd == 0x04) //get cellvoltage + { + if (RequestVoltageData != null) + { + var p = new RequestVoltageDataArgs(); + RequestVoltageData.Invoke(this, p); + + //var sig = data.Skip(data.Length - 2).Take(1).First(); + + //cellvolt 240201 + var payload = new byte[8 * 2]; + for (int i = 0; i < 8; i++) + { + var volt = p.cellVolt[i]; + var arr_cellvolt = BitConverter.GetBytes(volt).Reverse().ToArray(); + Array.Copy(arr_cellvolt, 0, payload, ( i * 2), arr_cellvolt.Length); + } + + //makechecksum + var datalen = (byte)payload.Length; + var payload_cs = new List(); + payload_cs.Add(datalen); + payload_cs.AddRange(payload); + var chksum = MakeCheckSum(payload_cs); + + var buffer = new List(); + buffer.Add(0xDD); + buffer.Add(cmd); + buffer.Add(0x00); + buffer.Add(datalen); + buffer.AddRange(payload); + buffer.AddRange(chksum); + buffer.Add(0x77); + WriteData(buffer.ToArray()); + } + + } + + + + + return true; + } + public byte[] MakeCheckSum(IEnumerable payload) + { + UInt16 retval = 0; + var payloadsum = payload.Sum(t => t); + retval = (UInt16)(payloadsum); + retval = (UInt16)(0xFFFF - retval); + retval += 1; + + return BitConverter.GetBytes(retval).Reverse().ToArray(); + } + protected override bool CustomParser(byte[] buf, out byte[] remainBuffer) + { + //DD A5 03 00 FF FD 77 0D + //remainBuffer = new byte[] { }; + List remain = new List(); + bool retval = false; + foreach (var b in buf) + { + if (retval) + { + remain.Add(b); + continue; + } + + if (b == 0xDD) //stx + { + tempBuffer.Clear(); + tempBuffer.Add(b); + } + else if (b == 0x0D || b == 0x77) //etx + { + //과거데이터 34개이다 (DD A5 03 00 FF FD 77 0D) + //대쉬보드상태일때(DD A5 03 00 FF FD 77) + //설정상태일때-셀전압표시(DD A5 04 00 FF FC 77) + + tempBuffer.Add(b); + retval = true; + } + else + { + if (tempBuffer.Count > 0 && tempBuffer[0] == 0xDD) + { + tempBuffer.Add(b); + if (tempBuffer.Count > 10) + { + RaiseMessage(MessageType.Error, "buffer over"); + tempBuffer.Clear(); + retval = false; + } + } + else + { + //trash + } + } + } + remainBuffer = remain.ToArray(); + return retval; + } + } +} diff --git a/Emulator/AGVEmulator/packetFC.bin b/Emulator/AGVEmulator/packetFC.bin new file mode 100644 index 0000000000000000000000000000000000000000..83dc36cfed0ca20f0860dd5ddcd4498ad0200d29 GIT binary patch literal 53 icmcc1%plE`$9tEBL4cQwmy?$Vh(R=v_1~f#hcE!#*a$BG literal 0 HcmV?d00001 diff --git a/Emulator/AGVEmulator/packetFD.bin b/Emulator/AGVEmulator/packetFD.bin new file mode 100644 index 0000000000000000000000000000000000000000..c861398c2c02adc4ac0842ab6e850161376942c2 GIT binary patch literal 68 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 B>vjMD literal 0 HcmV?d00001 diff --git a/Emulator/ArSetting.Net4.dll b/Emulator/ArSetting.Net4.dll new file mode 100644 index 0000000000000000000000000000000000000000..941494fd86edf203cb4c06ffa1d4fab93bd6aadc GIT binary patch literal 22528 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 p1?@P#M&y$*pXyzl2Ya;GpKOQRZ@2laaJfCq literal 0 HcmV?d00001 diff --git a/Emulator/CarlosAg.ExcelXmlWriter.dll b/Emulator/CarlosAg.ExcelXmlWriter.dll new file mode 100644 index 0000000000000000000000000000000000000000..7760d6d1a54f1558c01b7a6dbe24442e1ed74100 GIT binary patch literal 110592 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 z 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 Z1&&$Zm<5hm;FtxDS>Tuj{{OVV{{eAq^!5M% literal 0 HcmV?d00001 diff --git a/Emulator/Winsock Orcas.dll b/Emulator/Winsock Orcas.dll new file mode 100644 index 0000000000000000000000000000000000000000..3ac112656234e94548f2ebb552e53685f56d7221 GIT binary patch literal 122880 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

%AxsP2Jq~UDa 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

jLmKhX$Ff95@S!PTr<4uA$3BFHo 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 literal 0 HcmV?d00001