This commit is contained in:
backuppc
2025-12-05 17:31:56 +09:00
parent 8459230053
commit 98d638cd9a
27 changed files with 819 additions and 987 deletions

View File

@@ -1,3 +1,4 @@
{
"dotnet.preferCSharpExtension": true
"dotnet.preferCSharpExtension": true,
"dotnet.defaultSolution": "AGVCSharp.sln"
}

View File

@@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.14.36310.24
# Visual Studio Express 15 for Windows Desktop
VisualStudioVersion = 15.0.36324.19
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sub", "Sub", "{C423C39A-44E7-4F09-B2F7-7943975FF948}"
EndProject
@@ -36,10 +36,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AGVMapEditor", "AGVLogic\AG
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AGVSimulator", "AGVLogic\AGVSimulator\AGVSimulator.csproj", "{B2C3D4E5-0000-0000-0000-000000000000}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{C8D5274F-AC00-46C7-1F8D-E88E81087A52}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test_BMS", "TestProject\Test_BMS\Test_BMS.csproj", "{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -170,18 +166,6 @@ Global
{B2C3D4E5-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
{B2C3D4E5-0000-0000-0000-000000000000}.Release|x86.ActiveCfg = Release|Any CPU
{B2C3D4E5-0000-0000-0000-000000000000}.Release|x86.Build.0 = Release|Any CPU
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}.Debug|x64.ActiveCfg = Debug|Any CPU
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}.Debug|x64.Build.0 = Debug|Any CPU
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}.Debug|x86.ActiveCfg = Debug|Any CPU
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}.Debug|x86.Build.0 = Debug|Any CPU
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}.Release|Any CPU.Build.0 = Release|Any CPU
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}.Release|x64.ActiveCfg = Release|Any CPU
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}.Release|x64.Build.0 = Release|Any CPU
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}.Release|x86.ActiveCfg = Release|Any CPU
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -194,7 +178,6 @@ Global
{C5F7A8B2-8D3E-4A1B-9C6E-7F4D5E2A9B1C} = {E5C75D32-5AD6-44DD-8F27-E32023206EBB}
{A1B2C3D4-E5F6-7890-ABCD-EF1234567890} = {E5C75D32-5AD6-44DD-8F27-E32023206EBB}
{B2C3D4E5-0000-0000-0000-000000000000} = {E5C75D32-5AD6-44DD-8F27-E32023206EBB}
{CE3FFF9F-6ACA-44BD-B64A-33FF4AD5E82E} = {C8D5274F-AC00-46C7-1F8D-E88E81087A52}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B5B1FD72-356F-4840-83E8-B070AC21C8D9}

View File

@@ -41,7 +41,7 @@
<DebugSymbols>true</DebugSymbols>
<DebugType>Full</DebugType>
<Optimize>False</Optimize>
<OutputPath>..\..\..\..\..\amkor\AGV4\</OutputPath>
<OutputPath>..\..\..\..\..\Amkor\AGV4\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -341,6 +341,9 @@
<Compile Include="StateMachine\_SPS.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Device\_DeviceManagement.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\_Loop.cs">
<SubType>Form</SubType>
</Compile>

View File

@@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWindowsForms>true</UseWindowsForms>
<ImplicitUsings>enable</ImplicitUsings>
<PlatformTarget>x64</PlatformTarget>
<BaseOutputPath>S:\Amkor\AGV4</BaseOutputPath>
<GenerateResourceUsePreserializedResources>true</GenerateResourceUsePreserializedResources>
<UseResourceDedicatedThread>true</UseResourceDedicatedThread>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\StateMachine\StateMachine.csproj" />
<ProjectReference Include="..\SubProject\AGVMapControl\AGVMapControl.csproj" />
<ProjectReference Include="..\SubProject\AGV\NARUMI.csproj" />
<ProjectReference Include="..\SubProject\AGVControl\agvControl.csproj" />
<ProjectReference Include="..\SubProject\arCtl\arControl.csproj" />
<ProjectReference Include="..\SubProject\BMS\BMS.csproj" />
<ProjectReference Include="..\SubProject\CommData\CommData.csproj" />
<ProjectReference Include="..\SubProject\Patch\SWPatch.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Settings.Designer.cs">
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<None Update="icons8-split-64.ico">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<None Update="sample.route">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Reference Include="arCommUtil">
<HintPath>..\DLL\arCommUtil.dll</HintPath>
</Reference>
<Reference Include="Winsock Orcas">
<HintPath>..\DLL\Winsock Orcas.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.0.2" />
<PackageReference Include="System.IO.Ports" Version="9.0.4" />
<PackageReference Include="System.Management" Version="9.0.4" />
<PackageReference Include="System.Speech" Version="9.0.4" />
</ItemGroup>
</Project>

View File

@@ -103,6 +103,11 @@ namespace arDev
RaiseMessage(MessageType.Error, $"데이터의 길이가 {MinRecvLength}가 아닙니다 길이={data.Length}");
return false;
}
else
{
var rxstr = string.Join(" ", data.Select(t => t.ToString("X2")));
RaiseMessage(MessageType.Recv, $"Querh:{QueryIndex},Data:{rxstr}" );
}
if (QueryIndex == 0)
{

View File

@@ -1,402 +0,0 @@
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.ComponentModel;
//using System.Threading;
//using COMM;
//using System.Runtime.Remoting.Messaging;
//using AR;
//namespace Project.Device
//{
// public class Xbee_OLD : arDev.arRS232
// {
// public Xbee_OLD()
// {
// }
// public string buffer = string.Empty;
// public System.Text.StringBuilder newbuffer = new StringBuilder();
// protected override bool CustomParser(byte[] buf, out byte[] remainBuffer)
// {
// //일반 kit 명령은 0x02 kit번호, kit값 0x03
// //상태 명령은 0x04 메세지데이터 0x05
// Console.WriteLine("custom parse len=" + buf.Length.ToString());
// List<byte> sparebuffer = new List<byte>();
// Boolean bComplete = false;
// for (int i = 0; i < buf.Length; i++)
// {
// var incomByte = buf[i];
// if (bComplete == true) sparebuffer.Add(incomByte);
// else
// {
// if (findSTX == false)
// {
// if (incomByte != 0x02)
// {
// //버리는데이터
// }
// else
// {
// findSTX = true;
// tempBuffer.Clear();
// tempBuffer.Add(incomByte);
// }
// }
// else
// {
// tempBuffer.Add(incomByte);
// if (incomByte == 0x03)
// {
// //데이터가 맞게 수신됨
// LastReceiveBuffer = tempBuffer.ToArray();
// bComplete = true;
// findSTX = false;
// }
// else if (tempBuffer.Count > 30)
// {
// tempBuffer.Clear();
// findSTX = false;
// }
// }
// }
// }
// remainBuffer = sparebuffer.ToArray();
// return bComplete;
// }
// public override bool ProcessRecvData(byte[] data)
// {
// var kitno = (char)(data[1]);
// var kitval = (char)(data[2]);
// NewMsgEvent(kitno, kitval);
// return true;
// }
// public void NewMsgEvent(char kitNo, char kitVal)
// {
// //대상위치 확인
// ePosition kitPos = ePosition.NONE;
// if (kitNo == '9') kitPos = ePosition.QC;
// else if (kitNo == '1') kitPos = ePosition.F1;
// else if (kitNo == '2') kitPos = ePosition.F2;
// else if (kitNo == '3') kitPos = ePosition.F3;
// else if (kitNo == '4') kitPos = ePosition.F4;
// else
// {
// if (kitNo == '0') return;
// PUB.log.Add($"비허가 키트번호 무시 번호={kitNo},값={kitVal}");
// return;
// }
// //if (kitNo= 'F')
// //{
// // PUB.Speak("알 수 없는 키트번호 입니다");
// // PUB.logsys.Add($"키트번호별위치확인실패 값={kitNo}");
// // return;
// //}
// //(ePosition)int.Parse(kitNo.ToString());
// PUB.logxbee.Add(string.Format("Xbee:newMsgEvent:{0},{1}=>{2}", kitNo, kitVal, kitPos));
// if (PUB.CheckManualChargeMode() == false)
// {
// PUB.log.Add($"수동 충전 중이라 콜 기능을 취소 합니다");
// return;
// }
// bool FixButton = kitPos == ePosition.NONE;
// if (kitPos == ePosition.NONE)
// {
// if (kitVal == '1') kitPos = ePosition.QC;
// else if (kitVal == '2') kitPos = ePosition.CHARGE;
// else if (kitVal == '4') kitPos = ePosition.QC;
// //else if (kitVal == '3') kitPos = ePosition.QA;
// else
// {
// PUB.log.Add($"AGV버튼 이벤트 실행 값:{kitVal} 취소");
// return;
// }
// kitVal = '1'; //버튼은 무조건 ON상태로 한다
// }
// //자동상태가 아니라면 오류처리
// if (VAR.BOOL[eVarBool.FLAG_AUTORUN] == false || PUB.sm.Step != StateMachine.eSMStep.RUN)
// {
// PUB.log.AddE("'자동실행' 상태가 아니므로 콜/취소 작업을 할 수 없습니다 콜:" + kitPos.ToString() + ",값=" + kitVal.ToString());
// PUB.Speak(Lang.자동운전상태가아닙니다);
// return;
// }
// //충전기를 제외하고 '1'의 값은 호출을 원하는값이다.('0'=취소)
// if (kitVal == '1')
// {
// //qA혹은 Pack 에서 해당 버튼을 눌렀을때의 처리방법
// //if (PUB.Result.CurrentPos == ePosition.QA && kitPos == ePosition.QA)
// //{
// // PUB.logsys.AddE("QA위치에서 QA버튼을 눌렀음 명령 취소함");
// // PUB.Speak("현재 위치는 QA 입니다.");
// // return;
// //}
// //상/하차 작업중이 아니라면 콜을 받는다
// if (PUB.sm.RunStep != StateMachine.ERunStep.GOUP && PUB.sm.RunStep != StateMachine.ERunStep.GODOWN)
// {
// //call을 받으려면 대상위 (2=QC,3,4,5,6,7)
// //콜을 요청하는 곳 (2=QC,3=FVI-1,4,5,6,7==FVI-5)
// //1번은 충전기
// //콜버튼으로 대상위치를 다시 결정한다.
// //대상번호는 콜번호에서 +2을 하면 된다.
// //대상번호 PK=1,QA2=2,QA1=3,QC=4
// //QC의경우 콜Kit번호는 2이므로, 이동대상은 +2인 4가 되어야 함
// //콜번호와 RFID대상번호는 2의 오차가 발생함, 현재 설치된 RFID를 모두 변경할 수 없어서 이렇게 운용함
// RaiseMessage(MessageType.Normal, string.Format("CALL확정 Kit={0},대상위치={1}", kitNo, kitPos));
// PUB.AGV.data.CallNo = int.Parse(kitNo.ToString());
// PUB.AGV.data.CallString = kitNo.ToString();
// PUB.Result.CommandKit = kitNo;
// PUB.Result.TargetPos = kitPos;
// SendToKit(kitNo, '1', (PUB.IsCanCALL() ? '1' : '0')); //콜확정을 클라이언트에 알림
// PUB.Speak(kitPos.ToString() + Lang.위치로이동합니다);
// //상태머신을 변경한다 (충전 OFF상태로 간다, 충전상태가 아니면 바로 이동하게됨)
// //Pub.sm.ResetRunStep();
// //Pub.sm.setNewStep(StateMachine.eSMStep.RUN);
// //qa, pack 은 하차 전용이다
// PUB.sm.ClearRunStep();
// PUB.sm.SetNewRunStep(StateMachine.ERunStep.GOUP);
// PUB.sm.SetNewStep(StateMachine.eSMStep.RUN);
// }
// else if (PUB.sm.RunStep == StateMachine.ERunStep.GODOWN && VAR.BOOL[eVarBool.WAIT_COVER_DOWN] == false && VAR.BOOL[eVarBool.WAIT_COVER_UP] == false)
// {
// //하차중에 받을 수 있게하자 (단 FVi1 이하일때에는 무시하자) 230710 - 김수곤
// if (PUB.Result.TargetPos == ePosition.QC && PUB.Result.CurrentPos < ePosition.F1)
// {
// PUB.log.Add($"하차중이지만 FVI #1 아래에 있으니 콜을 취소 합니다");
// SendToKit(kitNo, '0', '0');
// RaiseMessage(MessageType.Normal, $"QC 추가 콜이지만 위치가 #1번 이하이므로 취소 됩니다. Kit={kitNo},현재={PUB.Result.CurrentPos},대상={PUB.Result.TargetPos}");
// }
// else
// {
// RaiseMessage(MessageType.Normal, string.Format("CALL확정(추가) Kit={0},대상위치={1}", kitNo, kitPos));
// PUB.AGV.data.CallNo = int.Parse(kitNo.ToString());
// PUB.AGV.data.CallString = kitNo.ToString();
// PUB.Result.CommandKit = kitNo;
// PUB.Result.TargetPos = kitPos;
// SendToKit(kitNo, '1', (PUB.IsCanCALL() ? '1' : '0')); //콜확정을 클라이언트에 알림
// PUB.Speak(kitPos.ToString() + Lang.위치로이동합니다);
// //상태머신을 변경한다 (충전 OFF상태로 간다, 충전상태가 아니면 바로 이동하게됨)
// //Pub.sm.ResetRunStep();
// //Pub.sm.setNewStep(StateMachine.eSMStep.RUN);
// //qa, pack 은 하차 전용이다
// PUB.sm.ClearRunStep();
// PUB.sm.SetNewRunStep(StateMachine.ERunStep.GOUP);
// PUB.sm.SetNewStep(StateMachine.eSMStep.RUN);
// }
// }
// //else if (PUB.sm.RunStep == StateMachine.ERunStep.GODOWN && PUB.Result.CurrentPos == ePosition.QA)
// //{
// // RaiseMessage(MessageType.Normal, string.Format("CALL확정 Kit={0},대상위치={1}", kitNo, kitPos));
// // PUB.Result.CommandKit = kitNo;
// // PUB.Result.TargetPos = kitPos;
// // SendToKit(kitNo, '1'); //콜확정을 클라이언트에 알림
// // PUB.Speak(kitPos.ToString() + "위치로 이동 합니다");
// // //상태머신을 변경한다 (충전 OFF상태로 간다, 충전상태가 아니면 바로 이동하게됨)
// // // Pub.sm.ResetRunStep();
// // // Pub.sm.setNewStep(StateMachine.eSMStep.RUN);
// // //qa => pack 은 하차 전용이다
// // //QA에서 PACK이동시에는 바로 N극 멈춤 기능을 사용해도도된다.(자재가 있으며, 커버가 내려가 있으므로 느리게 동작해야함)
// // PUB.sm.ClearRunStep();
// // PUB.sm.SetNewRunStep(StateMachine.ERunStep.GODOWN);
// // PUB.sm.SetNewStep(StateMachine.ESMStep.RUN);
// // PUB.AGV.AGVMoveStop("xbee_newmsgevent", arDev.Narumi.eStopOpt.MarkStop);// (arDev.Narumi.eAgvCmd.MoveStop,.SetNextStop_Mark(true, "xbee godn,qa,pack");
// // PUB.PLC.ZMot(arDev.FakePLC.ZMotDirection.Up);
// //}
// else if (PUB.Result.TargetPos == kitPos) ////현재 지정된 클라이언트가 또 눌렀다
// {
// PUB.Result.TargetPos = kitPos;
// PUB.AGV.data.CallNo = int.Parse(kitNo.ToString());
// PUB.AGV.data.CallString = kitNo.ToString();
// //상차 대기 중이라면 커버를 자동 올려준다
// //이것은 QC만 가능하다
// //QC가 QA혹은 PACK으로 보낼때 사용함
// if (kitPos == ePosition.QC &&
// VAR.BOOL[eVarBool.FLAG_LIMITLOW] == true)
// {
// RaiseMessage(MessageType.Normal, "QC위치에서 자동으로 커버를 올립니다");
// //PUB.PLC.ZMot(arDev.FakePLC.ZMotDirection.Up);
// PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.UP);
// }
// else
// {
// //커버대기상태라면 커버를 자동으로 처리해준다.
// if (PUB.sm.Step == StateMachine.eSMStep.RUN && (PUB.sm.RunStep == StateMachine.ERunStep.GOUP || PUB.sm.RunStep == StateMachine.ERunStep.GODOWN))
// {
// if (VAR.BOOL[eVarBool.WAIT_COVER_DOWN] == true)
// {
// //var ld = PUB.PLC.GetValueI(arDev.FakePLC.DIName.PINI_LIMIT_LD);
// //var rd = PUB.PLC.GetValueI(arDev.FakePLC.DIName.PINI_LIMIT_RD);
// //if (ld == false || rd == false)
// //{
// // PUB.log.Add("사용자 콜버튼 추가 동작 - Z내림");
// // PUB.PLC.ZMot(arDev.FakePLC.ZMotDirection.Down);
// // PUB.Speak(Lang.커버를내립니다);
// //}
// }
// else if (VAR.BOOL[eVarBool.WAIT_COVER_UP] == true)
// {
// //var lu = PUB.PLC.GetValueI(arDev.FakePLC.DIName.PINI_LIMIT_LU);
// //var ru = PUB.PLC.GetValueI(arDev.FakePLC.DIName.PINI_LIMIT_RU);
// //if (lu == false || ru == false)
// //{
// // PUB.PLC.ZMot(arDev.FakePLC.ZMotDirection.Up);
// // PUB.log.Add("사용자 콜버튼 추가 동작 - Z올림");
// // PUB.Speak(Lang.커버를올립니다);
// //}
// }
// else RaiseMessage(MessageType.Normal, string.Format("이미 CALL이 확정되었습니다 No={0},Pos={1}", kitNo, kitPos));
// }
// else RaiseMessage(MessageType.Normal, string.Format("이미 CALL이 확정되었습니다 No={0},Pos={1}", kitNo, kitPos));
// }
// SendToKit(kitNo, '1', (PUB.IsCanCALL() ? '1' : '0')); //콜확정을 클라이언트에 알림
// }
// else
// {
// //다른대상이 이미 선택된 상태이므로 CANCEL 한다.
// SendToKit(kitNo, '0', (PUB.IsCanCALL() ? '1' : '0'));
// RaiseMessage(MessageType.Normal, string.Format("다른 CALL이 확정된 상태입니다. 요청KIT={2},확정KIT={0},위치={1}", PUB.Result.TargetPos - 2, PUB.Result.TargetPos, kitNo));
// }
// }
// else if (kitVal == '0') //캔슬버튼을 눌렀다
// {
// //목표번호가 캔슬버튼을 눌렀다
// if (PUB.Result.TargetPos == kitPos)
// {
// //상차가 완료되면 TargetPos 가 변경되어 ,더이상 해당 버튼으로는 취소하지 못한다
// PUB.AGV.data.CallNo = 0;
// PUB.AGV.data.CallString = "--";
// SendToKit(kitNo, '0', (PUB.IsCanCALL() ? '1' : '0'));
// RaiseMessage(MessageType.Normal, string.Format("콜 취소 Kit={0}", kitNo));
// if (PUB.sm.RunStep != StateMachine.ERunStep.GOHOME)
// {
// PUB.Result.CommandKit = kitNo;
// PUB.Result.TargetPos = ePosition.QC;
// PUB.sm.ClearRunStep();
// PUB.sm.SetNewRunStep(StateMachine.ERunStep.GOHOME);
// PUB.sm.SetNewStep(StateMachine.eSMStep.RUN);
// RaiseMessage(MessageType.Normal, string.Format("콜 취소로 인해 홈으로 이동합니다 Kit={0}", kitNo));
// }
// }
// else
// {
// //다른놈이 취소 버튼을 눌렀다. ㅋㅋ
// //아무~ 의미 없다.
// SendToKit(kitNo, '0', (PUB.IsCanCALL() ? '1' : '0'));
// RaiseMessage(MessageType.Normal, string.Format("해당 콜취소는 유효하지 않습니다 요청KIT={0},확정KIT={1}", kitNo, PUB.Result.TargetPos - 2));
// }
// }
// else if (kitVal == '2') //BACKWORK시에만 이 값이 전송되게 한다
// {
// //QA 이동 명령
// //발동조건 1. QC 위치에서 GOUP(대기 혹은 상차완료)상태일때 (일반적인경우)
// //발동조건 2. QC 위치에서 IDLE 상태일때 (GOUP상태로 하지 않고 바로 싫어버린경우)
// //발동조건 3. 충전중일때
// //if (kitPos != ePosition.QC)
// //{
// // RaiseMessage(MessageType.Error, $"back 버튼은 QC버튼만 사용 가능 합니다");
// // return;
// //}
// //if (kitPos == ePosition.QC && PUB.Result.CurrentPos != ePosition.QC)
// //{
// // RaiseMessage(MessageType.Error, string.Format("QC의 QA버튼은 홈위치에 있어야 사용이 가능 합니다"));
// // return;
// //}
// ////명령송신은 QC로 고정한다
// //PUB.Result.CommandKit = '2';
// //PUB.Result.TargetPos = ePosition.QA;
// //PUB.sm.ClearRunStep();
// //PUB.sm.SetNewRunStep(StateMachine.ERunStep.GODOWN);
// //PUB.sm.SetNewStep(StateMachine.ESMStep.RUN);
// //RaiseMessage(MessageType.Normal, string.Format("후진하차 모드 대상위치={0}", ePosition.QA));
// //PUB.logsys.AddI("QC의 QA리모콘 버튼 작업 입니다");
// }
// }
// public void SendToKit(char kitNo, char Value, char enbcall)
// {
// List<byte> buffer = new List<byte>
// {
// 0x02,
// (byte)kitNo,
// (byte)Value,
// (byte)enbcall,
// 0x03
// };
// WriteData(buffer.ToArray());
// //RaiseMessage(MessageType.Normal, $"지그비전송 {kitNo}:{Value}:{enbcall}");
// }
// public string GetStatusString()
// {
// return DateTime.Now.ToString();
// }
// public void SendStatus(String StatusString)
// {
// ////IO
// char kitno = '0';
// char kitval = '1';
// if (PUB.Result.TargetPos == ePosition.F1) kitno = '1';
// else if (PUB.Result.TargetPos == ePosition.F2) kitno = '2';
// else if (PUB.Result.TargetPos == ePosition.F3) kitno = '3';
// else if (PUB.Result.TargetPos == ePosition.F4) kitno = '4';
// else if (PUB.Result.TargetPos == ePosition.QC) kitno = '9';
// else
// {
// //충전기 충전하는 것으로한다
// if (VAR.BOOL[eVarBool.FLAG_CHARGEONA] == false && VAR.BOOL[eVarBool.FLAG_CHARGEONM] == false)
// kitval = '0';
// }
// //콜가능여부도 전송한다
// var enbcall = PUB.IsCanCALL() ? '1' : '0';
// SendToKit(kitno, kitval, enbcall);
// }
// }
//}

View File

@@ -0,0 +1,311 @@
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Media.Animation;
using AR;
using arCtl;
using COMM;
using Project.StateMachine;
namespace Project
{
/// <summary>
/// 장치 연결 및 상태 전송을 담당하는 별도 태스크
/// </summary>
public partial class fMain
{
// 장치 관리 태스크 관련
private Task deviceManagementTask;
private CancellationTokenSource deviceManagementCts;
private volatile bool isDeviceManagementRunning = false;
/// <summary>
/// 장치 관리 태스크 시작 (IDLE 상태 진입 시 호출)
/// </summary>
public void StartDeviceManagementTask()
{
if (isDeviceManagementRunning)
{
PUB.log.Add("DeviceManagement", "이미 실행 중입니다.");
return;
}
isDeviceManagementRunning = true;
deviceManagementCts = new CancellationTokenSource();
deviceManagementTask = Task.Factory.StartNew(
() => DeviceManagementWorker(deviceManagementCts.Token),
deviceManagementCts.Token,
TaskCreationOptions.LongRunning,
TaskScheduler.Default
);
PUB.log.Add("DeviceManagement", "장치 관리 태스크 시작");
}
/// <summary>
/// 장치 관리 태스크 종료
/// </summary>
public void StopDeviceManagementTask()
{
if (!isDeviceManagementRunning)
return;
isDeviceManagementRunning = false;
try
{
deviceManagementCts?.Cancel();
if (deviceManagementTask != null)
{
if (!deviceManagementTask.Wait(3000)) // 3초 대기
{
PUB.log.AddE("DeviceManagement:태스크 종료 대기 시간 초과");
}
}
}
catch (Exception ex)
{
PUB.log.AddE($"DeviceManagement 종료 중 오류: {ex.Message}");
}
finally
{
deviceManagementCts?.Dispose();
deviceManagementCts = null;
deviceManagementTask = null;
PUB.log.Add("DeviceManagement", "장치 관리 태스크 종료");
}
}
/// <summary>
/// 장치 관리 워커 (별도 태스크에서 실행)
/// - 장치 연결 관리 (AGV, XBee, BMS)
/// - 자동 상태 전송 (XBee, BMS)
/// </summary>
private void DeviceManagementWorker(CancellationToken cancellationToken)
{
PUB.log.Add("DeviceManagementWorker", "시작");
DateTime lastXbeStatusSendTime = DateTime.Now;
DateTime lastBmsQueryTime = DateTime.Now;
while (!cancellationToken.IsCancellationRequested && isDeviceManagementRunning)
{
try
{
// 상태머신이 IDLE 이상이고 CLOSING 미만일 때만 동작
if (PUB.sm.Step >= eSMStep.IDLE && PUB.sm.Step < eSMStep.CLOSING)
{
// ========== 1. 장치 연결 관리 ==========
ManageDeviceConnections();
// ========== 2. XBee 상태 전송 ==========
if (PUB.XBE != null && PUB.XBE.IsOpen)
{
var tsXbe = DateTime.Now - lastXbeStatusSendTime;
if (tsXbe.TotalSeconds >= PUB.setting.interval_xbe)
{
lastXbeStatusSendTime = DateTime.Now;
ThreadPool.QueueUserWorkItem(_ =>
{
try
{
PUB.XBE.SendStatus();
}
catch (Exception ex)
{
PUB.log.AddE($"XBee SendStatus 오류: {ex.Message}");
}
});
}
}
// ========== 3. BMS 쿼리 및 배터리 경고 ==========
if (PUB.BMS != null && PUB.BMS.IsOpen)
{
var tsBms = DateTime.Now - lastBmsQueryTime;
if (tsBms.TotalSeconds >= PUB.setting.interval_bms)
{
lastBmsQueryTime = DateTime.Now;
ThreadPool.QueueUserWorkItem(_ =>
{
try
{
PUB.BMS.SendQuery();
}
catch (Exception ex)
{
PUB.log.AddE($"BMS SendQuery 오류: {ex.Message}");
}
});
}
// 배터리 경고음
try
{
Update_BatteryWarnSpeak();
}
catch (Exception ex)
{
PUB.log.AddE($"BatteryWarnSpeak 오류: {ex.Message}");
}
}
}
}
catch (Exception ex)
{
PUB.log.AddE($"DeviceManagementWorker 오류: {ex.Message}");
}
// 1초 대기 (또는 취소 요청 시 즉시 종료)
try
{
Task.Delay(1000, cancellationToken).Wait();
}
catch (OperationCanceledException)
{
break;
}
}
PUB.log.Add("DeviceManagementWorker", "종료");
}
/// <summary>
/// 장치 연결 상태 관리
/// </summary>
private void ManageDeviceConnections()
{
try
{
// AGV 연결
ConnectSerialPort(PUB.AGV, PUB.setting.Port_AGV, PUB.setting.Baud_AGV,
eVarTime.LastConn_AGV, eVarTime.LastConnTry_AGV, eVarTime.LastRecv_AGV);
// XBee 연결
ConnectSerialPort(PUB.XBE, PUB.setting.Port_XBE, PUB.setting.Baud_XBE,
eVarTime.LastConn_XBE, eVarTime.LastConnTry_XBE, eVarTime.LastRecv_XBE);
// BMS 연결
if (PUB.BMS.IsOpen == false)
{
var ts = VAR.TIME.RUN(eVarTime.LastConn_BAT);
if (ts.TotalSeconds > 3)
{
PUB.log.Add($"BMS 연결 시도: {PUB.setting.Port_BAT}");
PUB.BMS.PortName = PUB.setting.Port_BAT;
if (PUB.BMS.Open())
PUB.log.AddI($"BMS 연결 완료({PUB.setting.Port_BAT})");
VAR.TIME.Update(eVarTime.LastConn_BAT);
VAR.TIME.Update(eVarTime.LastConnTry_BAT);
}
}
else if (PUB.BMS.IsValid == false)
{
var ts = VAR.TIME.RUN(eVarTime.LastConnTry_BAT);
if (ts.TotalSeconds > (PUB.setting.interval_bms * 2.5))
{
PUB.log.Add("BMS 자동 연결 해제 (응답 없음)");
PUB.BMS.Close();
VAR.TIME.Set(eVarTime.LastConn_BAT, DateTime.Now.AddSeconds(5));
}
}
}
catch (Exception ex)
{
PUB.log.AddE($"ManageDeviceConnections 오류: {ex.Message}");
}
}
/// <summary>
/// 시리얼 포트 연결 (arDev.arRS232)
/// </summary>
void ConnectSerialPort(arDev.arRS232 dev, string port, int baud, eVarTime conn, eVarTime conntry, eVarTime recvtime)
{
if (dev.IsOpen == false && port.isEmpty() == false)
{
var tsPLC = VAR.TIME.RUN(conntry);
if (tsPLC.TotalSeconds > 5)
{
VAR.TIME.Update(conntry);
try
{
VAR.TIME.Update(recvtime);
dev.PortName = port;
dev.BaudRate = baud;
if (dev.Open())
{
PUB.log.Add(port, $"[AGV:{port}:{baud}] 연결 완료");
}
else
{
var errmessage = dev.errorMessage;
PUB.log.AddE($"[AGV:{port}:{baud}] {errmessage}");
}
VAR.TIME.Update(conn);
VAR.TIME.Update(conntry);
}
catch (Exception ex)
{
PUB.log.AddE(ex.Message);
}
}
}
else if (dev.PortName.Equals(port) == false)
{
PUB.log.Add(port, $"포트 변경({dev.PortName}->{port})으로 연결 종료");
dev.Close();
VAR.TIME.Update(conntry);
}
}
/// <summary>
/// 시리얼 포트 연결 (Device.Xbee)
/// </summary>
void ConnectSerialPort(Device.Xbee dev, string port, int baud, eVarTime conn, eVarTime conntry, eVarTime recvtime)
{
if (dev.IsOpen == false && port.isEmpty() == false)
{
var tsPLC = VAR.TIME.RUN(conntry);
if (tsPLC.TotalSeconds > 5)
{
VAR.TIME.Update(conntry);
try
{
VAR.TIME.Update(recvtime);
dev.PortName = port;
dev.BaudRate = baud;
if (dev.Open())
{
PUB.log.Add(port, $"[XBEE:{port}:{baud}] 연결 완료");
}
else
{
var errmessage = dev.errorMessage;
PUB.log.AddE($"[XBEE:{port}:{baud}] {errmessage}");
}
VAR.TIME.Update(conn);
VAR.TIME.Update(conntry);
}
catch (Exception ex)
{
PUB.log.AddE(ex.Message);
}
}
}
else if (dev.PortName.Equals(port) == false)
{
PUB.log.Add(port, $"포트 변경({dev.PortName}->{port})으로 연결 종료");
dev.Close();
VAR.TIME[(int)conntry] = DateTime.Now;
}
}
}
}

View File

@@ -0,0 +1,24 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.5.2.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AGV4", "AGV4.csproj", "{6D0CF7CE-1916-3231-E152-64E6C2B57D2B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6D0CF7CE-1916-3231-E152-64E6C2B57D2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6D0CF7CE-1916-3231-E152-64E6C2B57D2B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6D0CF7CE-1916-3231-E152-64E6C2B57D2B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6D0CF7CE-1916-3231-E152-64E6C2B57D2B}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9EAFEBD8-1AC9-4339-BD45-B1F43F120F34}
EndGlobalSection
EndGlobal

View File

@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로
// 지정되도록 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("25.11.14.1530")]
[assembly: AssemblyFileVersion("25.11.14.1530")]
[assembly: AssemblyVersion("25.12.04.0000")]
[assembly: AssemblyFileVersion("25.12.04.0000")]

View File

@@ -17,6 +17,9 @@ namespace Project
PUB.bShutdown = true;
//if (PUB.PLC != null) PUB.PLC.Dispose();
// 장치 관리 태스크 종료
StopDeviceManagementTask();
PUB.AddEEDB("프로그램 종료");
PUB.log.Add("Program Close");
PUB.log.Flush();

View File

@@ -153,6 +153,9 @@ namespace Project
PUB.Result.SMSG_ProgressEnable = false;
UpdateStatusMessage("준비 완료", Color.Red, Color.Gold);
if (startuptime.Year == 1982) startuptime = DateTime.Now;
// 장치 관리 태스크 시작 (IDLE 진입 시 한 번만)
StartDeviceManagementTask();
}
//자동소거기능

View File

@@ -13,234 +13,25 @@ using Project.StateMachine;
namespace Project
{
/// <summary>
/// SPS (Scan Per Second) 이벤트 핸들러
/// - 장치 연결 및 상태 전송 기능은 _DeviceManagement.cs로 분리됨
/// </summary>
public partial class fMain
{
DateTime chargesynctime = DateTime.Now;
DateTime agvsendstarttime = DateTime.Now;
// 장치 연결 쓰레드 관련
private Thread deviceConnectionThread;
private volatile bool isDeviceConnectionRunning = false;
void ConnectSerialPort(arDev.arRS232 dev, string port, int baud, eVarTime conn, eVarTime conntry, eVarTime recvtime)
{
if (dev.IsOpen == false && port.isEmpty() == false)
{
var tsPLC = VAR.TIME.RUN(conntry);
if (tsPLC.TotalSeconds > 5)
{
VAR.TIME.Update(conntry);
try
{
VAR.TIME.Update(recvtime); //this.LastReceiveTime = DateTime.Now;
dev.PortName = port;
dev.BaudRate = baud;
if (dev.Open())
{
PUB.log.Add(port, $"[AGV:{port}:{baud}]연결완료");
}
else
{
var errmessage = dev.errorMessage;
PUB.log.AddE($"[AGV:{port}:{baud}] {errmessage}");
}
VAR.TIME.Update(conn);
VAR.TIME.Update(conntry);
}
catch (Exception ex)
{
PUB.log.AddE(ex.Message);
}
}
}
else if (dev.PortName.Equals(port) == false)
{
PUB.log.Add(port, $"포트변경({dev.PortName}->{port})으로 연결 종료");
dev.Close();
VAR.TIME.Update(conntry);
}
}
void ConnectSerialPort(Device.Xbee dev, string port, int baud, eVarTime conn, eVarTime conntry, eVarTime recvtime)
{
if (dev.IsOpen == false && port.isEmpty() == false)
{
var tsPLC = VAR.TIME.RUN(conntry);
if (tsPLC.TotalSeconds > 5)
{
VAR.TIME.Update(conntry);
try
{
VAR.TIME.Update(recvtime); //this.LastReceiveTime = DateTime.Now;
dev.PortName = port;
dev.BaudRate = baud;
if (dev.Open())
{
PUB.log.Add(port, $"[XBEE:{port}:{baud}]연결완료");
}
else
{
var errmessage = dev.errorMessage;
PUB.log.AddE($"[XBEE:{port}:{baud}] {errmessage}");
}
VAR.TIME.Update(conn);
VAR.TIME.Update(conntry);
}
catch (Exception ex)
{
PUB.log.AddE(ex.Message);
}
}
}
else if (dev.PortName.Equals(port) == false)
{
PUB.log.Add(port, $"포트변경({dev.PortName}->{port})으로 연결 종료");
dev.Close();
VAR.TIME[(int)conntry] = DateTime.Now; ;
}
}
// 장치 연결 쓰레드 시작
private void StartDeviceConnectionThread()
{
if (deviceConnectionThread == null || !deviceConnectionThread.IsAlive)
{
isDeviceConnectionRunning = true;
deviceConnectionThread = new Thread(DeviceConnectionWorker);
deviceConnectionThread.IsBackground = true;
deviceConnectionThread.Name = "DeviceConnectionThread";
deviceConnectionThread.Start();
PUB.log.Add("DeviceConnection", "장치 연결 쓰레드 시작");
}
}
// 장치 연결 쓰레드 종료
private void StopDeviceConnectionThread()
{
if (deviceConnectionThread != null && deviceConnectionThread.IsAlive)
{
isDeviceConnectionRunning = false;
if (!deviceConnectionThread.Join(2000)) // 2초 대기
{
try
{
deviceConnectionThread.Abort();
}
catch { }
}
PUB.log.Add("DeviceConnection", "장치 연결 쓰레드 종료");
}
}
// 장치 연결 처리 워커 (별도 쓰레드에서 실행)
private void DeviceConnectionWorker()
{
PUB.log.Add($"Start DeviceConnectionWorker");
while (isDeviceConnectionRunning)
{
try
{
if (PUB.sm.Step >= eSMStep.IDLE && PUB.sm.Step < eSMStep.CLOSING)
{
//agv connect
ConnectSerialPort(PUB.AGV, PUB.setting.Port_AGV, PUB.setting.Baud_AGV,
eVarTime.LastConn_AGV, eVarTime.LastConnTry_AGV, eVarTime.LastRecv_AGV);
//xbee connect
ConnectSerialPort(PUB.XBE, PUB.setting.Port_XBE, PUB.setting.Baud_XBE,
eVarTime.LastConn_XBE, eVarTime.LastConnTry_XBE, eVarTime.LastRecv_XBE);
//bms connect
if (PUB.BMS.IsOpen == false)
{
var ts = VAR.TIME.RUN(eVarTime.LastConn_BAT);
if (ts.TotalSeconds > 3)
{
PUB.log.Add($"bms connect to {PUB.setting.Port_BAT}");
PUB.BMS.PortName = PUB.setting.Port_BAT;
if (PUB.BMS.Open())
PUB.log.AddI($"BMS Connected({PUB.setting.Port_BAT})");
VAR.TIME.Update(eVarTime.LastConn_BAT);
VAR.TIME.Update(eVarTime.LastConnTry_BAT);
}
}
else if (PUB.BMS.IsValid == false)
{
var ts = VAR.TIME.RUN(eVarTime.LastConnTry_BAT);
if (ts.TotalSeconds > (PUB.setting.interval_bms * 2.5))
{
Console.WriteLine("bms auto disconnect");
PUB.BMS.Close();
VAR.TIME.Set(eVarTime.LastConn_BAT, DateTime.Now.AddSeconds(5));
}
}
}
}
catch (Exception ex)
{
PUB.log.AddE($"DeviceConnection: {ex.Message}");
}
// 1초 대기 후 다시 체크
Thread.Sleep(1000);
}
}
void sm_SPS(object sender, EventArgs e)
{
if (PUB.sm.Step < eSMStep.IDLE || PUB.sm.Step >= eSMStep.CLOSING) return;
//return;
// SPS는 이제 간단한 작업만 수행
// 장치 연결 및 상태 전송은 별도 태스크(_DeviceManagement.cs)에서 처리
try
{
// 장치 연결 쓰레드가 실행 중이 아니면 시작 (한 번만)
if (!isDeviceConnectionRunning)
{
StartDeviceConnectionThread();
}
//지그비상태전송 (비동기로 실행)
if (PUB.XBE != null && PUB.XBE.IsOpen)
{
//일정간격으로 상태를 전송한다
if (PUB.XBE.LastStatusSendTime.Year == 1982) PUB.XBE.LastStatusSendTime = DateTime.Now.AddSeconds(1);
var ts = DateTime.Now - PUB.XBE.LastStatusSendTime;
if (ts.TotalSeconds >= PUB.setting.interval_xbe)
{
System.Threading.ThreadPool.QueueUserWorkItem(_ =>
{
try { PUB.XBE.SendStatus(); }
catch { /* 무시 */ }
finally { PUB.XBE.LastStatusSendTime = DateTime.Now; }
});
}
}
//배터리쿼리 (비동기로 실행)
if (PUB.BMS != null && PUB.BMS.IsOpen)
{
if (PUB.BMS.lastSendTime.Year == 1982) PUB.BMS.lastSendTime = DateTime.Now.AddSeconds(1);
var ts = DateTime.Now - PUB.BMS.lastSendTime;
if (ts.TotalSeconds >= PUB.setting.interval_bms)
{
//PUB.BMS.lastSendTime = DateTime.Now;
//System.Threading.ThreadPool.QueueUserWorkItem(_ =>
//{
// try { PUB.BMS.SendQuery(); }
// catch { /* 무시 */ }
// finally { PUB.BMS.lastSendTime = DateTime.Now; }
//});
}
// Update_BatteryWarnSpeak도 비동기로
//System.Threading.ThreadPool.QueueUserWorkItem(_ =>
//{
try { Update_BatteryWarnSpeak(); }
catch { /* 무시 */ }
//});
}
// 여기에 SPS에서 처리해야 할 간단한 작업만 남김
// 현재는 비어있음 - 필요한 경우 추가
}
catch (Exception ex)
{

View File

@@ -46,8 +46,18 @@
this.button1 = new System.Windows.Forms.Button();
this.button8 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.button9 = new System.Windows.Forms.Button();
this.panel2 = new System.Windows.Forms.Panel();
this.button16 = new System.Windows.Forms.Button();
this.button10 = new System.Windows.Forms.Button();
this.button11 = new System.Windows.Forms.Button();
this.button12 = new System.Windows.Forms.Button();
this.button13 = new System.Windows.Forms.Button();
this.button14 = new System.Windows.Forms.Button();
this.button15 = new System.Windows.Forms.Button();
this.tableLayoutPanel1.SuspendLayout();
this.panel1.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout();
//
// tableLayoutPanel1
@@ -69,7 +79,7 @@
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 50F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(1050, 510);
this.tableLayoutPanel1.Size = new System.Drawing.Size(1050, 461);
this.tableLayoutPanel1.TabIndex = 6;
//
// richTextBox1
@@ -78,7 +88,7 @@
this.richTextBox1.Location = new System.Drawing.Point(3, 3);
this.richTextBox1.Name = "richTextBox1";
this.tableLayoutPanel1.SetRowSpan(this.richTextBox1, 2);
this.richTextBox1.Size = new System.Drawing.Size(256, 454);
this.richTextBox1.Size = new System.Drawing.Size(256, 404);
this.richTextBox1.TabIndex = 1;
this.richTextBox1.Text = "";
//
@@ -88,7 +98,7 @@
this.richTextBox2.Location = new System.Drawing.Point(265, 3);
this.richTextBox2.Name = "richTextBox2";
this.tableLayoutPanel1.SetRowSpan(this.richTextBox2, 2);
this.richTextBox2.Size = new System.Drawing.Size(256, 454);
this.richTextBox2.Size = new System.Drawing.Size(256, 404);
this.richTextBox2.TabIndex = 1;
this.richTextBox2.Text = "";
//
@@ -98,7 +108,7 @@
this.richTextBox3.Location = new System.Drawing.Point(527, 3);
this.richTextBox3.Name = "richTextBox3";
this.tableLayoutPanel1.SetRowSpan(this.richTextBox3, 2);
this.richTextBox3.Size = new System.Drawing.Size(256, 454);
this.richTextBox3.Size = new System.Drawing.Size(256, 404);
this.richTextBox3.TabIndex = 1;
this.richTextBox3.Text = "";
//
@@ -108,7 +118,7 @@
this.richTextBox4.Location = new System.Drawing.Point(789, 3);
this.richTextBox4.Name = "richTextBox4";
this.tableLayoutPanel1.SetRowSpan(this.richTextBox4, 2);
this.richTextBox4.Size = new System.Drawing.Size(258, 454);
this.richTextBox4.Size = new System.Drawing.Size(258, 404);
this.richTextBox4.TabIndex = 1;
this.richTextBox4.Text = "";
//
@@ -117,9 +127,9 @@
this.tableLayoutPanel1.SetColumnSpan(this.label1, 2);
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.ForeColor = System.Drawing.Color.White;
this.label1.Location = new System.Drawing.Point(3, 460);
this.label1.Location = new System.Drawing.Point(3, 410);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(518, 50);
this.label1.Size = new System.Drawing.Size(518, 51);
this.label1.TabIndex = 2;
this.label1.Text = "label1";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@@ -141,9 +151,9 @@
this.panel1.Controls.Add(this.button8);
this.panel1.Controls.Add(this.button4);
this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panel1.Location = new System.Drawing.Point(3, 513);
this.panel1.Location = new System.Drawing.Point(3, 522);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(1050, 67);
this.panel1.Size = new System.Drawing.Size(1050, 58);
this.panel1.TabIndex = 7;
//
// lbIP
@@ -151,9 +161,9 @@
this.lbIP.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbIP.Font = new System.Drawing.Font("Tahoma", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.lbIP.ForeColor = System.Drawing.Color.White;
this.lbIP.Location = new System.Drawing.Point(300, 0);
this.lbIP.Location = new System.Drawing.Point(252, 0);
this.lbIP.Name = "lbIP";
this.lbIP.Size = new System.Drawing.Size(250, 67);
this.lbIP.Size = new System.Drawing.Size(398, 58);
this.lbIP.TabIndex = 8;
this.lbIP.Text = "000.000.000.000";
this.lbIP.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
@@ -161,9 +171,9 @@
// button7
//
this.button7.Dock = System.Windows.Forms.DockStyle.Right;
this.button7.Location = new System.Drawing.Point(550, 0);
this.button7.Location = new System.Drawing.Point(650, 0);
this.button7.Name = "button7";
this.button7.Size = new System.Drawing.Size(100, 67);
this.button7.Size = new System.Drawing.Size(80, 58);
this.button7.TabIndex = 6;
this.button7.Text = "Go - Front\r\nManual";
this.button7.UseVisualStyleBackColor = true;
@@ -172,9 +182,9 @@
// button6
//
this.button6.Dock = System.Windows.Forms.DockStyle.Right;
this.button6.Location = new System.Drawing.Point(650, 0);
this.button6.Location = new System.Drawing.Point(730, 0);
this.button6.Name = "button6";
this.button6.Size = new System.Drawing.Size(100, 67);
this.button6.Size = new System.Drawing.Size(80, 58);
this.button6.TabIndex = 5;
this.button6.Text = "Go - Back\r\nManual";
this.button6.UseVisualStyleBackColor = true;
@@ -183,9 +193,9 @@
// button5
//
this.button5.Dock = System.Windows.Forms.DockStyle.Right;
this.button5.Location = new System.Drawing.Point(750, 0);
this.button5.Location = new System.Drawing.Point(810, 0);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(100, 67);
this.button5.Size = new System.Drawing.Size(80, 58);
this.button5.TabIndex = 4;
this.button5.Text = "Stop(Mark)";
this.button5.UseVisualStyleBackColor = true;
@@ -194,9 +204,9 @@
// button3
//
this.button3.Dock = System.Windows.Forms.DockStyle.Left;
this.button3.Location = new System.Drawing.Point(200, 0);
this.button3.Location = new System.Drawing.Point(168, 0);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(100, 67);
this.button3.Size = new System.Drawing.Size(84, 58);
this.button3.TabIndex = 2;
this.button3.Text = "Charge Off";
this.button3.UseVisualStyleBackColor = true;
@@ -205,9 +215,9 @@
// button2
//
this.button2.Dock = System.Windows.Forms.DockStyle.Left;
this.button2.Location = new System.Drawing.Point(100, 0);
this.button2.Location = new System.Drawing.Point(84, 0);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(100, 67);
this.button2.Size = new System.Drawing.Size(84, 58);
this.button2.TabIndex = 1;
this.button2.Text = "Charge On";
this.button2.UseVisualStyleBackColor = true;
@@ -218,7 +228,7 @@
this.button1.Dock = System.Windows.Forms.DockStyle.Left;
this.button1.Location = new System.Drawing.Point(0, 0);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(100, 67);
this.button1.Size = new System.Drawing.Size(84, 58);
this.button1.TabIndex = 0;
this.button1.Text = "Reset";
this.button1.UseVisualStyleBackColor = true;
@@ -227,9 +237,9 @@
// button8
//
this.button8.Dock = System.Windows.Forms.DockStyle.Right;
this.button8.Location = new System.Drawing.Point(850, 0);
this.button8.Location = new System.Drawing.Point(890, 0);
this.button8.Name = "button8";
this.button8.Size = new System.Drawing.Size(100, 67);
this.button8.Size = new System.Drawing.Size(80, 58);
this.button8.TabIndex = 7;
this.button8.Text = "Run";
this.button8.UseVisualStyleBackColor = true;
@@ -238,20 +248,125 @@
// button4
//
this.button4.Dock = System.Windows.Forms.DockStyle.Right;
this.button4.Location = new System.Drawing.Point(950, 0);
this.button4.Location = new System.Drawing.Point(970, 0);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(100, 67);
this.button4.Size = new System.Drawing.Size(80, 58);
this.button4.TabIndex = 3;
this.button4.Text = "Stop";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.button4_Click);
//
// button9
//
this.button9.Dock = System.Windows.Forms.DockStyle.Left;
this.button9.Location = new System.Drawing.Point(324, 0);
this.button9.Name = "button9";
this.button9.Size = new System.Drawing.Size(115, 58);
this.button9.TabIndex = 9;
this.button9.Text = "GDS Center Scope";
this.button9.UseVisualStyleBackColor = true;
this.button9.Click += new System.EventHandler(this.button9_Click);
//
// panel2
//
this.panel2.Controls.Add(this.button15);
this.panel2.Controls.Add(this.button14);
this.panel2.Controls.Add(this.button11);
this.panel2.Controls.Add(this.button12);
this.panel2.Controls.Add(this.button13);
this.panel2.Controls.Add(this.button9);
this.panel2.Controls.Add(this.button10);
this.panel2.Controls.Add(this.button16);
this.panel2.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panel2.Location = new System.Drawing.Point(3, 464);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(1050, 58);
this.panel2.TabIndex = 8;
//
// button16
//
this.button16.Dock = System.Windows.Forms.DockStyle.Left;
this.button16.Location = new System.Drawing.Point(0, 0);
this.button16.Name = "button16";
this.button16.Size = new System.Drawing.Size(162, 58);
this.button16.TabIndex = 0;
this.button16.Text = "백턴유지시간";
this.button16.UseVisualStyleBackColor = true;
this.button16.Click += new System.EventHandler(this.button16_Click);
//
// button10
//
this.button10.Dock = System.Windows.Forms.DockStyle.Left;
this.button10.Location = new System.Drawing.Point(162, 0);
this.button10.Name = "button10";
this.button10.Size = new System.Drawing.Size(162, 58);
this.button10.TabIndex = 1;
this.button10.Text = "GateOut Off Time";
this.button10.UseVisualStyleBackColor = true;
this.button10.Click += new System.EventHandler(this.button10_Click);
//
// button11
//
this.button11.Dock = System.Windows.Forms.DockStyle.Right;
this.button11.Location = new System.Drawing.Point(810, 0);
this.button11.Name = "button11";
this.button11.Size = new System.Drawing.Size(80, 58);
this.button11.TabIndex = 11;
this.button11.Text = "Up";
this.button11.UseVisualStyleBackColor = true;
this.button11.Click += new System.EventHandler(this.button11_Click);
//
// button12
//
this.button12.Dock = System.Windows.Forms.DockStyle.Right;
this.button12.Location = new System.Drawing.Point(890, 0);
this.button12.Name = "button12";
this.button12.Size = new System.Drawing.Size(80, 58);
this.button12.TabIndex = 12;
this.button12.Text = "Stop";
this.button12.UseVisualStyleBackColor = true;
this.button12.Click += new System.EventHandler(this.button12_Click);
//
// button13
//
this.button13.Dock = System.Windows.Forms.DockStyle.Right;
this.button13.Location = new System.Drawing.Point(970, 0);
this.button13.Name = "button13";
this.button13.Size = new System.Drawing.Size(80, 58);
this.button13.TabIndex = 10;
this.button13.Text = "Down";
this.button13.UseVisualStyleBackColor = true;
this.button13.Click += new System.EventHandler(this.button13_Click);
//
// button14
//
this.button14.Dock = System.Windows.Forms.DockStyle.Left;
this.button14.Location = new System.Drawing.Point(439, 0);
this.button14.Name = "button14";
this.button14.Size = new System.Drawing.Size(84, 58);
this.button14.TabIndex = 13;
this.button14.Text = "Mag On";
this.button14.UseVisualStyleBackColor = true;
this.button14.Click += new System.EventHandler(this.button14_Click);
//
// button15
//
this.button15.Dock = System.Windows.Forms.DockStyle.Left;
this.button15.Location = new System.Drawing.Point(523, 0);
this.button15.Name = "button15";
this.button15.Size = new System.Drawing.Size(84, 58);
this.button15.TabIndex = 14;
this.button15.Text = "Mag Off";
this.button15.UseVisualStyleBackColor = true;
this.button15.Click += new System.EventHandler(this.button15_Click);
//
// fAgv
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(15)))), ((int)(((byte)(15)))), ((int)(((byte)(15)))));
this.ClientSize = new System.Drawing.Size(1056, 583);
this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.panel2);
this.Controls.Add(this.panel1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.Name = "fAgv";
@@ -261,6 +376,7 @@
this.VisibleChanged += new System.EventHandler(this.fAgv_VisibleChanged);
this.tableLayoutPanel1.ResumeLayout(false);
this.panel1.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.ResumeLayout(false);
}
@@ -284,5 +400,14 @@
private System.Windows.Forms.Button button8;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label lbIP;
private System.Windows.Forms.Button button9;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Button button16;
private System.Windows.Forms.Button button10;
private System.Windows.Forms.Button button15;
private System.Windows.Forms.Button button14;
private System.Windows.Forms.Button button11;
private System.Windows.Forms.Button button12;
private System.Windows.Forms.Button button13;
}
}

View File

@@ -135,5 +135,57 @@ namespace Project.ViewForm
{
PUB.AGV.AGVMoveRun();
}
private void button9_Click(object sender, EventArgs e)
{
PUB.AGV.TurnGDSCenterScope();
if (PUB.sm.Step == StateMachine.eSMStep.RUN)
PUB.sm.SetNewStep(StateMachine.eSMStep.IDLE);
}
private void button16_Click(object sender, EventArgs e)
{
var inputbox = AR.UTIL.InputBox("input value","100");
if (inputbox.Item1 == false) return;
if (int.TryParse(inputbox.Item2, out int value) == false) return;
PUB.AGV.SetBackturnTime(value);
if (PUB.sm.Step == StateMachine.eSMStep.RUN)
PUB.sm.SetNewStep(StateMachine.eSMStep.IDLE);
}
private void button10_Click(object sender, EventArgs e)
{
var inputbox = AR.UTIL.InputBox("input value","50");
if (inputbox.Item1 == false) return;
if (int.TryParse(inputbox.Item2, out int value) == false) return;
PUB.AGV.SetGateOutOffTime(value);
if (PUB.sm.Step == StateMachine.eSMStep.RUN)
PUB.sm.SetNewStep(StateMachine.eSMStep.IDLE);
}
private void button14_Click(object sender, EventArgs e)
{
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.ON);
}
private void button15_Click(object sender, EventArgs e)
{
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.OFF);
}
private void button11_Click(object sender, EventArgs e)
{
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.UP);
}
private void button13_Click(object sender, EventArgs e)
{
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.DN);
}
private void button12_Click(object sender, EventArgs e)
{
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.STP);
}
}
}

View File

@@ -29,30 +29,21 @@
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
arFrame.Control.ColorListItem colorListItem25 = new arFrame.Control.ColorListItem();
arFrame.Control.ColorListItem colorListItem26 = new arFrame.Control.ColorListItem();
arFrame.Control.ColorListItem colorListItem27 = new arFrame.Control.ColorListItem();
arFrame.Control.ColorListItem colorListItem28 = new arFrame.Control.ColorListItem();
arFrame.Control.ColorListItem colorListItem29 = new arFrame.Control.ColorListItem();
arFrame.Control.ColorListItem colorListItem30 = new arFrame.Control.ColorListItem();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fIO));
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();
arFrame.Control.ColorListItem colorListItem5 = new arFrame.Control.ColorListItem();
arFrame.Control.ColorListItem colorListItem6 = new arFrame.Control.ColorListItem();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.HWState = new arFrame.Control.GridView();
this.panel1 = new System.Windows.Forms.Panel();
this.label1 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.panel3 = new System.Windows.Forms.Panel();
this.panel2 = new System.Windows.Forms.Panel();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.button4 = new System.Windows.Forms.Button();
this.button5 = new System.Windows.Forms.Button();
this.tableLayoutPanel1.SuspendLayout();
this.panel1.SuspendLayout();
this.panel3.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout();
//
// tableLayoutPanel1
@@ -76,31 +67,31 @@
//
this.HWState.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(60)))), ((int)(((byte)(60)))), ((int)(((byte)(60)))));
this.HWState.BorderSize = 0;
colorListItem25.BackColor1 = System.Drawing.Color.Gray;
colorListItem25.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
colorListItem25.Remark = "타이틀바(상)";
colorListItem26.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
colorListItem26.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
colorListItem26.Remark = "상태표시(하)";
colorListItem27.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
colorListItem27.BackColor2 = System.Drawing.Color.Lime;
colorListItem27.Remark = "정상";
colorListItem28.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
colorListItem28.BackColor2 = System.Drawing.Color.Red;
colorListItem28.Remark = "오류";
colorListItem29.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
colorListItem29.BackColor2 = System.Drawing.Color.Yellow;
colorListItem29.Remark = "오류(깜박)";
colorListItem30.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
colorListItem30.BackColor2 = System.Drawing.Color.DarkViolet;
colorListItem30.Remark = "오류(유효)";
colorListItem1.BackColor1 = System.Drawing.Color.Gray;
colorListItem1.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
colorListItem1.Remark = "타이틀바(상)";
colorListItem2.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
colorListItem2.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
colorListItem2.Remark = "상태표시(하)";
colorListItem3.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
colorListItem3.BackColor2 = System.Drawing.Color.Lime;
colorListItem3.Remark = "정상";
colorListItem4.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
colorListItem4.BackColor2 = System.Drawing.Color.Red;
colorListItem4.Remark = "오류";
colorListItem5.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
colorListItem5.BackColor2 = System.Drawing.Color.Yellow;
colorListItem5.Remark = "오류(깜박)";
colorListItem6.BackColor1 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
colorListItem6.BackColor2 = System.Drawing.Color.DarkViolet;
colorListItem6.Remark = "오류(유효)";
this.HWState.ColorList = new arFrame.Control.ColorListItem[] {
colorListItem25,
colorListItem26,
colorListItem27,
colorListItem28,
colorListItem29,
colorListItem30};
colorListItem1,
colorListItem2,
colorListItem3,
colorListItem4,
colorListItem5,
colorListItem6};
this.HWState.Dock = System.Windows.Forms.DockStyle.Fill;
this.HWState.Font = new System.Drawing.Font("Consolas", 13F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.HWState.FontPin = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
@@ -179,84 +170,17 @@
//
// panel3
//
this.panel3.Controls.Add(this.button5);
this.panel3.Controls.Add(this.button4);
this.panel3.Controls.Add(this.panel2);
this.panel3.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel3.Location = new System.Drawing.Point(3, 23);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(1050, 499);
this.panel3.TabIndex = 10;
//
// panel2
//
this.panel2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120)))));
this.panel2.Controls.Add(this.button2);
this.panel2.Controls.Add(this.button3);
this.panel2.Controls.Add(this.button1);
this.panel2.Location = new System.Drawing.Point(925, 15);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(99, 315);
this.panel2.TabIndex = 6;
//
// button2
//
this.button2.Dock = System.Windows.Forms.DockStyle.Fill;
this.button2.Image = ((System.Drawing.Image)(resources.GetObject("button2.Image")));
this.button2.Location = new System.Drawing.Point(0, 100);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(99, 115);
this.button2.TabIndex = 1;
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button3
//
this.button3.Dock = System.Windows.Forms.DockStyle.Bottom;
this.button3.Image = ((System.Drawing.Image)(resources.GetObject("button3.Image")));
this.button3.Location = new System.Drawing.Point(0, 215);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(99, 100);
this.button3.TabIndex = 2;
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button3_Click_1);
//
// button1
//
this.button1.Dock = System.Windows.Forms.DockStyle.Top;
this.button1.Image = ((System.Drawing.Image)(resources.GetObject("button1.Image")));
this.button1.Location = new System.Drawing.Point(0, 0);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(99, 100);
this.button1.TabIndex = 0;
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// timer1
//
this.timer1.Interval = 200;
this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
//
// button4
//
this.button4.Location = new System.Drawing.Point(726, 53);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(134, 100);
this.button4.TabIndex = 7;
this.button4.Text = "Magnet On";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.button4_Click);
//
// button5
//
this.button5.Location = new System.Drawing.Point(726, 159);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(134, 100);
this.button5.TabIndex = 8;
this.button5.Text = "Magnet Off";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.button5_Click);
//
// fIO
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
@@ -270,8 +194,6 @@
this.VisibleChanged += new System.EventHandler(this.fIO_VisibleChanged);
this.tableLayoutPanel1.ResumeLayout(false);
this.panel1.ResumeLayout(false);
this.panel3.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.ResumeLayout(false);
}
@@ -283,12 +205,6 @@
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Panel panel1;
private arFrame.Control.GridView HWState;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Button button5;
}
}

View File

@@ -117,97 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="button2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAA/ZJREFUWEfd
WLtOG0EUtZR0ST4jDyVR8gE0GNtrGxKlwKYAFOAHMA9DxRsaCl6/kR5RpiH4AY0DOBgpiYkjmoCR2LUp
smhzzjLgRwZ7/QpWjnSk9e7M3OOZO3PvHdt/i4jd/jrsco1uezwbEY8nGVGUTMjp1Ek+4913fgu5XCNs
K7o1FpstLY8iLtd4xO1O7XR0qIcDAxfHwaCRnp01tMVFI7u0ZJLPfHc8NmYc9vdn2RZ9foSdzuDH1taH
Yrj6AYPeDytKEOLUeG9v5mRy0rhYWbHO5WWDfeI9PRpmXeXMc0wxfG3YUpRnUUU53O3qUs/m5+UCKiDH
2PX51Kjbndi0258KM9UBS/IO4rSfw8OXMmO1MBUIXGJFtFBb21thrjJEHI4+/MtMemZGaqAePJ2eNqIe
TybidL4XZq3BnDmIO1tYkA5cT3LJKXLL4XgjzJeG8DmtkTNXzNOpKYPLjVV7ImTIwZ3FDdEInytH+KSO
VTsoubu5/T/7/eeyAf4FY36/hpkcEXIKIQ5ha0fJ6uoVZd9ktNj+bG7OQBQ6lx7mEDfOQ1jWsYAwpMfj
hr63Z1mkHosZeiJhXKytSb/nM97drTHiCFk5MHydwFllnW4oxF3DikiKu4YVkYw48MUjIesKDOaMlwxJ
sk75zDdIlBJZSdsbQsN2e7v2SVFeCnnmuRdk4Jd2kNCK4arECTLBgKYhIc9mY1rErETW+DaWElCLOJJa
oGldyDMFJpkeyRqXokxIreLINEIgNH0V8uCDiBzM4WSNy7FYUD6qEUeq0IL0ThXybDZmwVkLG+Q2ykRW
K47MIOmFD/4W8hokcH+/fgKbfombfpPgxwYLHFnj21hKSK0ij0dHDVSFuWOGWQwOx6Y5qBN9fVloCgh5
EOhwvGqqUOf1alG7/YWQd4VttztZtpzE4Nyd17BiMF+kfnBQNln4NTHxd7JAMB6zbpV1KqAQWcmSUaQV
caSZbsHlhKwcmCTiw50mrGkkrDhezmOK8kDIKkTI4RhBUX03KT98L+bzaWG3O5fFFMMsmlDxs6iWDtJA
pgYHdYj78sHvvyfkyMHrCJaALKplAzWCzOQZzeBij4WM0uB1BA7KTD3uYsrRLJQ8nmzE6ewQ5q2B1xGs
+FlUywauBzlztIGZ6xVmKwOvI7jcqaGh+vokNgR9jsta8cwVg9cRrPhR0KtcDqnBCsijJNbZqXJDWPa5
cuDuxj8dZlHNw9yMOJXkj2hrXmDyEMYYEBYou1urgXmYI+Kghj7a8XpVVl/mFTB2vHkFDCGkeQWMd8xK
GPhZRqJPEsJ4s1r/K2AZGMxZGiJVW4cLfKOv3lyi49l8h29sg2Tkuej2v8Fm+wNDbvcV8BObjwAAAABJ
RU5ErkJggg==
</value>
</data>
<data name="button3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<data name="button1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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
</value>
</data>
<metadata name="timer1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>

View File

@@ -41,6 +41,12 @@
this.btErrReset = new System.Windows.Forms.Button();
this.timer1 = new System.Windows.Forms.Timer(this.components);
this.panel2 = new System.Windows.Forms.Panel();
this.groupBox3 = new System.Windows.Forms.GroupBox();
this.btBack180 = new System.Windows.Forms.Button();
this.panel1 = new System.Windows.Forms.Panel();
this.btRight180 = new System.Windows.Forms.Button();
this.panel10 = new System.Windows.Forms.Panel();
this.btLeft180 = new System.Windows.Forms.Button();
this.button1 = new System.Windows.Forms.Button();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.radpbs2 = new AGVControl.MyRadioButton();
@@ -70,6 +76,7 @@
this.guideSensor1 = new Narumi.UC.GuideSensor();
this.tableLayoutPanel1.SuspendLayout();
this.panel2.SuspendLayout();
this.groupBox3.SuspendLayout();
this.groupBox1.SuspendLayout();
this.grpSpeed.SuspendLayout();
this.grpBunki.SuspendLayout();
@@ -384,6 +391,7 @@
//
// panel2
//
this.panel2.Controls.Add(this.groupBox3);
this.panel2.Controls.Add(this.button1);
this.panel2.Controls.Add(this.groupBox1);
this.panel2.Controls.Add(this.grpSpeed);
@@ -396,13 +404,87 @@
this.panel2.TabIndex = 9;
this.panel2.Paint += new System.Windows.Forms.PaintEventHandler(this.panel2_Paint);
//
// groupBox3
//
this.groupBox3.Controls.Add(this.btBack180);
this.groupBox3.Controls.Add(this.panel1);
this.groupBox3.Controls.Add(this.btRight180);
this.groupBox3.Controls.Add(this.panel10);
this.groupBox3.Controls.Add(this.btLeft180);
this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill;
this.groupBox3.Location = new System.Drawing.Point(0, 450);
this.groupBox3.Name = "groupBox3";
this.groupBox3.Padding = new System.Windows.Forms.Padding(10, 5, 5, 10);
this.groupBox3.Size = new System.Drawing.Size(404, 67);
this.groupBox3.TabIndex = 11;
this.groupBox3.TabStop = false;
//
// btBack180
//
this.btBack180.BackColor = System.Drawing.Color.WhiteSmoke;
this.btBack180.Cursor = System.Windows.Forms.Cursors.Hand;
this.btBack180.Dock = System.Windows.Forms.DockStyle.Fill;
this.btBack180.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold);
this.btBack180.ForeColor = System.Drawing.Color.Black;
this.btBack180.Location = new System.Drawing.Point(270, 19);
this.btBack180.Name = "btBack180";
this.btBack180.Size = new System.Drawing.Size(129, 38);
this.btBack180.TabIndex = 15;
this.btBack180.Text = "백후 180도 회전";
this.btBack180.UseVisualStyleBackColor = false;
this.btBack180.Click += new System.EventHandler(this.btBack180_Click);
//
// panel1
//
this.panel1.Dock = System.Windows.Forms.DockStyle.Left;
this.panel1.Location = new System.Drawing.Point(261, 19);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(9, 38);
this.panel1.TabIndex = 14;
//
// btRight180
//
this.btRight180.BackColor = System.Drawing.Color.WhiteSmoke;
this.btRight180.Dock = System.Windows.Forms.DockStyle.Left;
this.btRight180.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold);
this.btRight180.ForeColor = System.Drawing.Color.Black;
this.btRight180.Location = new System.Drawing.Point(140, 19);
this.btRight180.Name = "btRight180";
this.btRight180.Size = new System.Drawing.Size(121, 38);
this.btRight180.TabIndex = 6;
this.btRight180.Text = "180도 우회전";
this.btRight180.UseVisualStyleBackColor = false;
this.btRight180.Click += new System.EventHandler(this.btRight180_Click);
//
// panel10
//
this.panel10.Dock = System.Windows.Forms.DockStyle.Left;
this.panel10.Location = new System.Drawing.Point(131, 19);
this.panel10.Name = "panel10";
this.panel10.Size = new System.Drawing.Size(9, 38);
this.panel10.TabIndex = 12;
//
// btLeft180
//
this.btLeft180.BackColor = System.Drawing.Color.WhiteSmoke;
this.btLeft180.Dock = System.Windows.Forms.DockStyle.Left;
this.btLeft180.Font = new System.Drawing.Font("맑은 고딕", 10F, System.Drawing.FontStyle.Bold);
this.btLeft180.ForeColor = System.Drawing.Color.Black;
this.btLeft180.Location = new System.Drawing.Point(10, 19);
this.btLeft180.Name = "btLeft180";
this.btLeft180.Size = new System.Drawing.Size(121, 38);
this.btLeft180.TabIndex = 7;
this.btLeft180.Text = "180도 좌회전";
this.btLeft180.UseVisualStyleBackColor = false;
this.btLeft180.Click += new System.EventHandler(this.btLeft180_Click);
//
// button1
//
this.button1.Dock = System.Windows.Forms.DockStyle.Fill;
this.button1.Dock = System.Windows.Forms.DockStyle.Top;
this.button1.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.button1.Location = new System.Drawing.Point(0, 380);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(404, 137);
this.button1.Size = new System.Drawing.Size(404, 70);
this.button1.TabIndex = 10;
this.button1.Text = "설정 적용";
this.button1.UseVisualStyleBackColor = true;
@@ -847,6 +929,7 @@
this.VisibleChanged += new System.EventHandler(this.fManual_VisibleChanged);
this.tableLayoutPanel1.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.groupBox3.ResumeLayout(false);
this.groupBox1.ResumeLayout(false);
this.grpSpeed.ResumeLayout(false);
this.grpBunki.ResumeLayout(false);
@@ -896,5 +979,11 @@
private System.Windows.Forms.Button button1;
private arCtl.arLabel arLabel1;
private System.Windows.Forms.Panel panel12;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.Button btBack180;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Button btRight180;
private System.Windows.Forms.Panel panel10;
private System.Windows.Forms.Button btLeft180;
}
}

View File

@@ -351,5 +351,24 @@ namespace Project.ViewForm
AR.UTIL.MsgI($"주행속도({PUB.setting.SPD_DRIVE})가 '고속' 속도에 연결되었습니다.\n" +
$"창을 이동하거나 '설정적용'을 누르면 원래속도({PUB.setting.SPD_H})로 변경 됩니다");
}
private void btLeft180_Click(object sender, EventArgs e)
{
//[STX] C T L 0 0 0 0 A 3 [ETX]
PUB.AGV.AGVMoveLeft180Turn();
}
private void btRight180_Click(object sender, EventArgs e)
{
//[STX] C T R 0 0 0 0 A 9 [ETX]
PUB.AGV.AGVMoveRight180Turn();
}
private void btBack180_Click(object sender, EventArgs e)
{
//[STX] C T B 0 0 0 0 9 9 [ETX]
PUB.AGV.AGVMoveBack180Turn();
}
}
}

View File

@@ -131,6 +131,7 @@ namespace Project
this.mapFileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.loadToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.editorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.demoListLotToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripMenuItem();
this.refreshListToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -143,7 +144,6 @@ namespace Project
this.arPanel2 = new arCtl.arPanel();
this.arPanel1 = new arCtl.arPanel();
this.ctlPos1 = new Project.CtlPos();
this.editorToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.panRight.SuspendLayout();
this.tableLayoutPanel1.SuspendLayout();
this.panel4.SuspendLayout();
@@ -167,7 +167,7 @@ namespace Project
this.MenuLift.FlatAppearance.BorderSize = 0;
this.MenuLift.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.MenuLift.Font = new System.Drawing.Font("맑은 고딕", 18F, System.Drawing.FontStyle.Bold);
this.MenuLift.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(180)))), ((int)(((byte)(180)))), ((int)(((byte)(180)))));
this.MenuLift.ForeColor = System.Drawing.Color.Red;
this.MenuLift.Location = new System.Drawing.Point(285, 0);
this.MenuLift.Name = "MenuLift";
this.MenuLift.Size = new System.Drawing.Size(92, 50);
@@ -175,6 +175,7 @@ namespace Project
this.MenuLift.Text = "LIFT";
this.toolTip1.SetToolTip(this.MenuLift, "I/O 및 FLAG를 확인 합니다");
this.MenuLift.UseVisualStyleBackColor = true;
this.MenuLift.Visible = false;
this.MenuLift.Click += new System.EventHandler(this.MenuLift_Click);
//
// MenuMAN
@@ -1690,7 +1691,7 @@ namespace Project
this.toolStripMenuItem5,
this.refreshListToolStripMenuItem});
this.cmDebug.Name = "cmVision";
this.cmDebug.Size = new System.Drawing.Size(229, 346);
this.cmDebug.Size = new System.Drawing.Size(229, 324);
//
// mapFileToolStripMenuItem
//
@@ -1705,17 +1706,24 @@ namespace Project
// saveToolStripMenuItem
//
this.saveToolStripMenuItem.Name = "saveToolStripMenuItem";
this.saveToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.saveToolStripMenuItem.Size = new System.Drawing.Size(105, 22);
this.saveToolStripMenuItem.Text = "Save";
this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click);
//
// loadToolStripMenuItem
//
this.loadToolStripMenuItem.Name = "loadToolStripMenuItem";
this.loadToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.loadToolStripMenuItem.Size = new System.Drawing.Size(105, 22);
this.loadToolStripMenuItem.Text = "Load";
this.loadToolStripMenuItem.Click += new System.EventHandler(this.loadToolStripMenuItem_Click);
//
// editorToolStripMenuItem
//
this.editorToolStripMenuItem.Name = "editorToolStripMenuItem";
this.editorToolStripMenuItem.Size = new System.Drawing.Size(105, 22);
this.editorToolStripMenuItem.Text = "Editor";
this.editorToolStripMenuItem.Click += new System.EventHandler(this.editorToolStripMenuItem_Click);
//
// demoListLotToolStripMenuItem
//
this.demoListLotToolStripMenuItem.Name = "demoListLotToolStripMenuItem";
@@ -2188,13 +2196,6 @@ namespace Project
this.ctlPos1.Text = "ctlPos1";
this.ctlPos1.Visible = false;
//
// editorToolStripMenuItem
//
this.editorToolStripMenuItem.Name = "editorToolStripMenuItem";
this.editorToolStripMenuItem.Size = new System.Drawing.Size(152, 22);
this.editorToolStripMenuItem.Text = "Editor";
this.editorToolStripMenuItem.Click += new System.EventHandler(this.editorToolStripMenuItem_Click);
//
// fMain
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;

View File

@@ -115,8 +115,7 @@ namespace Project
private void __Closing(object sender, FormClosingEventArgs e)
{
// 장치 연결 쓰레드 종료
StopDeviceConnectionThread();
// 장치 관리 태스크는 _STEP_CLOSING_START에서 종료
PUB.popup.needClose = true;
if (remoteClose == true)

View File

@@ -65,7 +65,7 @@ namespace arDev
{
return AddCommand(cmd + data);
}
public bool LiftControl(LiftCommand cmd)
{
return AddCommand(eAgvCmd.LiftControl, cmd.ToString());
@@ -77,6 +77,33 @@ namespace arDev
else
return AddCommand(eAgvCmd.ChargeOf, chargetID.ToString("0000"));
}
public bool SetBackturnTime(int time)
{
return AddCommand(eAgvCmd.BackTrunResumeTime, time.ToString("0000"));
}
public bool SetGateOutOffTime(int time)
{
return AddCommand(eAgvCmd.GateoutTime, time.ToString("0000"));
}
public bool TurnGDSCenterScope()
{
return AddCommand(eAgvCmd.TurnGDSCenterScope);
}
public bool AGVMoveLeft180Turn()
{
return AddCommand(eAgvCmd.TurnLeft);
}
public bool AGVMoveRight180Turn()
{
return AddCommand(eAgvCmd.TurnRight);
}
public bool AGVMoveBack180Turn()
{
return AddCommand(eAgvCmd.TurnBack);
}
public bool AGVErrorReset()
{
@@ -100,10 +127,10 @@ namespace arDev
value = value.PadLeft(4, '0');
return AddCommand($"SCH{value}");
}
public bool AGVGateOutTimer(int value)
{
return AddCommand($"SGT{value:0000}");
}
//public bool AGVGateOutTimer(int value)
//{
// return AddCommand($"SGT{value:0000}");
//}
/// <summary>
/// 정지감속주기 및 상수
/// </summary>
@@ -137,6 +164,8 @@ namespace arDev
};
return AddCommand(cmds);
}
protected bool AddCommand(params string[] cmds)
{
bool ret = true;
@@ -203,15 +232,15 @@ namespace arDev
RaiseMessage(arRS232.MessageType.Normal, "충전명령전송");
break;
case eAgvCmd.GoTurnLeft:
case eAgvCmd.TurnLeft:
cmdString = $"CTL0000";
retval = AddCommand(cmdString);
break;
case eAgvCmd.GoTurnRight:
case eAgvCmd.TurnRight:
cmdString = $"CTR0000";
retval = AddCommand(cmdString);
break;
case eAgvCmd.goTurnBack:
case eAgvCmd.TurnBack:
cmdString = $"CTB0000";
retval = AddCommand(cmdString);
break;
@@ -240,7 +269,18 @@ namespace arDev
cmdString = "CRS0000";
retval = AddCommand(cmdString);
break;
case eAgvCmd.TurnGDSCenterScope:
cmdString = "SGS1000";
retval = AddCommand(cmdString);
break;
case eAgvCmd.BackTrunResumeTime:
cmdString = $"SST{param}";
retval = AddCommand(cmdString);
break;
case eAgvCmd.GateoutTime:
cmdString = $"SGT{param}";
retval = AddCommand(cmdString);
break;
}
return retval;
}

View File

@@ -141,17 +141,17 @@ namespace arDev
/// <summary>
/// CMD : CTL0000
/// </summary>
GoTurnLeft,
TurnLeft,
/// <summary>
/// CMD : CTR0000
/// </summary>
GoTurnRight,
TurnRight,
/// <summary>
/// CMD : CTB0000
/// </summary>
goTurnBack,
TurnBack,
/// <summary>
/// CMD : CBZ
@@ -175,6 +175,12 @@ namespace arDev
SetSpeed,
CPUReset,
TurnGDSCenterScope,
BackTrunResumeTime,
GateoutTime,
}
public enum eForm
{

Submodule Cs_HMI/SubProject/EnigProtocol updated: 8877cb1a9d...4f360f33a7

View File

@@ -13,8 +13,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test_Port", "Test_Port\Test
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Library", "Library", "{530A4517-6210-422B-8CB4-B7D194EE70BE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BMS", "..\SubProject\BMS\BMS.csproj", "{7A94C30C-6772-4F71-BF9C-0DF071A1BC70}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommData", "..\SubProject\CommData\CommData.csproj", "{14E8C9A5-013E-49BA-B435-EFEFC77DD623}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ENIGProtocol", "..\SubProject\EnigProtocol\enigprotocol\ENIGProtocol.csproj", "{9365803B-933D-4237-93C7-B502C855A71C}"
@@ -43,10 +41,6 @@ Global
{CCFA2CE7-A539-4ADC-B803-F759284C3463}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CCFA2CE7-A539-4ADC-B803-F759284C3463}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CCFA2CE7-A539-4ADC-B803-F759284C3463}.Release|Any CPU.Build.0 = Release|Any CPU
{7A94C30C-6772-4F71-BF9C-0DF071A1BC70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7A94C30C-6772-4F71-BF9C-0DF071A1BC70}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7A94C30C-6772-4F71-BF9C-0DF071A1BC70}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7A94C30C-6772-4F71-BF9C-0DF071A1BC70}.Release|Any CPU.Build.0 = Release|Any CPU
{14E8C9A5-013E-49BA-B435-EFEFC77DD623}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{14E8C9A5-013E-49BA-B435-EFEFC77DD623}.Debug|Any CPU.Build.0 = Debug|Any CPU
{14E8C9A5-013E-49BA-B435-EFEFC77DD623}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -64,7 +58,6 @@ Global
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{7A94C30C-6772-4F71-BF9C-0DF071A1BC70} = {530A4517-6210-422B-8CB4-B7D194EE70BE}
{14E8C9A5-013E-49BA-B435-EFEFC77DD623} = {530A4517-6210-422B-8CB4-B7D194EE70BE}
{9365803B-933D-4237-93C7-B502C855A71C} = {530A4517-6210-422B-8CB4-B7D194EE70BE}
{8BAE0EAC-3D25-402F-9A65-2BA1ECFE28B7} = {530A4517-6210-422B-8CB4-B7D194EE70BE}

View File

@@ -47,7 +47,7 @@
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(131, 20);
this.comboBox1.TabIndex = 0;
this.comboBox1.Text = "com15";
this.comboBox1.Text = "com6";
//
// button1
//

View File

@@ -18,22 +18,15 @@ namespace Test_BMS
InitializeComponent();
bms = new arDev.BMS();
bms.BMSDataReceive += Bms_BMSDataReceive;
bms.BMSCellDataReceive += Bms_BMSCellDataReceive;
bms.Message += Bms_Message;
this.Text = $"{Application.ProductName} ver{Application.ProductVersion}";
}
private void Bms_Message(object sender, arRS232.MessageEventArgs e)
private void Bms_BMSCellDataReceive(object sender, arDev.BMSCelvoltageEventArgs e)
{
var sb = new System.Text.StringBuilder();
if (e.Data != null)
{
foreach (var b in e.Data)
sb.Append(" " + b.ToString("X2"));
}
else sb.Append(e.Message);
if (e.MsgType == arRS232.MessageType.Error)
addmsg(e.Message);
else
addmsg($"{e.MsgType}:{sb}");
var valuestr = string.Join(" ", e.voltage.Select(t => t.ToString()));
addmsg($"voltage:{valuestr}");
}
private void Bms_BMSDataReceive(object sender, EventArgs e)
@@ -43,7 +36,32 @@ namespace Test_BMS
addmsg("Recv:" + msg);
}
private void Bms_Message(object sender, arDev.arRS232.MessageEventArgs e)
{
var sb = new System.Text.StringBuilder();
if (e.Data != null)
{
foreach (var b in e.Data)
sb.Append(" " + b.ToString("X2"));
}
else sb.Append(e.Message);
if (e.MsgType == arDev.arRS232.MessageType.Error)
addmsg(e.Message);
else if(e.MsgType == arDev.arRS232.MessageType.Send)
{
addmsg($"Tx:{sb}");
}
else if(e.MsgType == arDev.arRS232.MessageType.Recv)
{
addmsg($"Rx:{sb}");
}
else
addmsg($"{e.MsgType}:{sb}");
}
void addmsg(string m)
{
if (logTextBox1.InvokeRequired)

View File

@@ -18,7 +18,7 @@
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\..\..\..\..\Amkor\AGV4\Test\</OutputPath>
<OutputPath>..\..\..\..\..\..\Amkor\AGV4\Test\BMS\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -50,6 +50,12 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\Project\Device\BMS.cs">
<Link>BMS.cs</Link>
</Compile>
<Compile Include="..\..\Project\Device\BMSInformationEventArgs.cs">
<Link>BMSInformationEventArgs.cs</Link>
</Compile>
<Compile Include="Form1.cs">
<SubType>Form</SubType>
</Compile>