파일정리

This commit is contained in:
ChiKyun Kim
2026-01-29 14:03:17 +09:00
parent 00cc0ef5b7
commit 58ca67150d
440 changed files with 47236 additions and 99165 deletions

584
HMI/Project/AGV4.csproj Normal file
View File

@@ -0,0 +1,584 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{D6B3880D-7D5C-44E2-B6A5-CF6D881A8A38}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>Project</RootNamespace>
<AssemblyName>Amkor</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<RuntimeIdentifiers>win-x86</RuntimeIdentifiers>
<PublishUrl>게시\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<NoWin32Manifest>False</NoWin32Manifest>
<SignAssembly>False</SignAssembly>
<DelaySign>False</DelaySign>
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<NoStdLib>False</NoStdLib>
<TreatWarningsAsErrors>False</TreatWarningsAsErrors>
<IntermediateOutputPath>obj\$(Configuration)\</IntermediateOutputPath>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>Full</DebugType>
<Optimize>False</Optimize>
<OutputPath>..\..\..\..\..\Amkor\AGV4\</OutputPath>
<DefineConstants>TRACE;DEBUG;NOSPEECH</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
<NoWarn>IDE1006</NoWarn>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\..\ManualMapEditor\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>icons8-split-64.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<TargetZone>LocalIntranet</TargetZone>
</PropertyGroup>
<PropertyGroup>
<GenerateManifests>false</GenerateManifests>
</PropertyGroup>
<PropertyGroup />
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>..\..\..\..\Amkor\OTP2DReading\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<StartAction>Project</StartAction>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<BaseIntermediateOutputPath>obj\</BaseIntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<BaseAddress>4194304</BaseAddress>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
</PropertyGroup>
<ItemGroup>
<Reference Include="arCommUtil, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\DLL\arCommUtil.dll</HintPath>
</Reference>
<Reference Include="arControl.Net4, Version=23.9.11.1030, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\DLL\arControl.Net4.dll</HintPath>
</Reference>
<Reference Include="CarlosAg.ExcelXmlWriter, Version=1.0.0.6, Culture=neutral">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\DLL\CarlosAg.ExcelXmlWriter.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Speech, Version=11.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>C:\Program Files (x86)\Microsoft SDKs\Speech\v11.0\Assembly\Microsoft.Speech.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="PresentationCore" />
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
<Private>True</Private>
<Private>True</Private>
</Reference>
<Reference Include="System.Management" />
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.4.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.5.3\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Web" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="Winsock Orcas">
<HintPath>..\DLL\Winsock Orcas.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Class\EEMStatus.cs" />
<Compile Include="Class\Lang.cs" />
<Compile Include="CtlAuto.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="CtlAuto.Designer.cs">
<DependentUpon>CtlAuto.cs</DependentUpon>
</Compile>
<Compile Include="CtlPos.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="CtlPos.Designer.cs">
<DependentUpon>CtlPos.cs</DependentUpon>
</Compile>
<Compile Include="Class\CParser.cs" />
<Compile Include="Class\EnumData.cs" />
<Compile Include="Class\CResult.cs" />
<Compile Include="DataSet1.cs">
<DependentUpon>DataSet1.xsd</DependentUpon>
</Compile>
<Compile Include="DataSet1.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>DataSet1.xsd</DependentUpon>
</Compile>
<Compile Include="Device\BMS.cs" />
<Compile Include="Device\BMSInformationEventArgs.cs" />
<Compile Include="Device\CFlag.cs" />
<Compile Include="Device\BMSSerialComm.cs" />
<Compile Include="Device\xbee.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Device\Socket.cs" />
<Compile Include="Dialog\fCounter.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fCounter.Designer.cs">
<DependentUpon>fCounter.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\fXbeeSetting.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fXbeeSetting.Designer.cs">
<DependentUpon>fXbeeSetting.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\fStateMachineDebug.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fStateMachineDebug.Designer.cs">
<DependentUpon>fStateMachineDebug.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\fUpdateForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fUpdateForm.Designer.cs">
<DependentUpon>fUpdateForm.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\fLog.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fLog.Designer.cs">
<DependentUpon>fLog.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\fJobSelect.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fJobSelect.Designer.cs">
<DependentUpon>fJobSelect.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\fSystem.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fSystem.Designer.cs">
<DependentUpon>fSystem.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\fVolume.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fVolume.Designer.cs">
<DependentUpon>fVolume.cs</DependentUpon>
</Compile>
<Compile Include="MessageWindow\fMessageWindow.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MessageWindow\fMessageWindow.Designer.cs">
<DependentUpon>fMessageWindow.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\fTouchKey.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fTouchKey.Designer.cs">
<DependentUpon>fTouchKey.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\fTouchKeyFull.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fTouchKeyFull.Designer.cs">
<DependentUpon>fTouchKeyFull.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\fTouchNumDot.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fTouchNumDot.Designer.cs">
<DependentUpon>fTouchNumDot.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\fPassword.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fPassword.Designer.cs">
<DependentUpon>fPassword.cs</DependentUpon>
</Compile>
<Compile Include="Dialog\fErrorException.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Dialog\fErrorException.Designer.cs">
<DependentUpon>fErrorException.cs</DependentUpon>
</Compile>
<Compile Include="fMain.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="fMain.Designer.cs">
<DependentUpon>fMain.cs</DependentUpon>
</Compile>
<Compile Include="Manager\DataBaseManager.cs" />
<Compile Include="MessageWindow\MessageWindow.cs" />
<Compile Include="MessageWindow\CMessageData.cs" />
<Compile Include="MethodExtentions.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="PUB.cs" />
<Compile Include="CSetting.cs" />
<Compile Include="StateMachine\Step\_SM_RUN_ENTER.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_EXIT.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_Util.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_BUFFER_IN.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_BUFFER_OUT.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_CHARGE_GOFF.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_GOTO.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_CHARGE_CHECK.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_CHARGE_GO.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_READY.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_RESET.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_GOTO_HOME.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_SYNC.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_POSCHK.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN_INIT.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\_Xbee.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\_DIO.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\_Flag.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_STEP_CLOSE.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\_BMS.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\_AGV.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\_SPS.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\_Loop.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\Step\_SM_RUN.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\_TMDisplay.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="StateMachine\DisplayTextHandler.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ViewForm\fBms.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ViewForm\fBms.Designer.cs">
<DependentUpon>fBms.cs</DependentUpon>
</Compile>
<Compile Include="ViewForm\fAuto.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ViewForm\fAuto.Designer.cs">
<DependentUpon>fAuto.cs</DependentUpon>
</Compile>
<Compile Include="ViewForm\fAgv.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ViewForm\fAgv.Designer.cs">
<DependentUpon>fAgv.cs</DependentUpon>
</Compile>
<Compile Include="ViewForm\fFlag.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ViewForm\fFlag.Designer.cs">
<DependentUpon>fFlag.cs</DependentUpon>
</Compile>
<Compile Include="ViewForm\fIO.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ViewForm\fIO.Designer.cs">
<DependentUpon>fIO.cs</DependentUpon>
</Compile>
<Compile Include="fSetup.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="fSetup.Designer.cs">
<DependentUpon>fSetup.cs</DependentUpon>
</Compile>
<Compile Include="ViewForm\fManual.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ViewForm\fManual.Designer.cs">
<DependentUpon>fManual.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="Dialog\fCounter.resx">
<DependentUpon>fCounter.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\fXbeeSetting.resx">
<DependentUpon>fXbeeSetting.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\fUpdateForm.resx">
<DependentUpon>fUpdateForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\fLog.resx">
<DependentUpon>fLog.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\fJobSelect.resx">
<DependentUpon>fJobSelect.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\fSystem.resx">
<DependentUpon>fSystem.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\fVolume.resx">
<DependentUpon>fVolume.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MessageWindow\fMessageWindow.resx">
<DependentUpon>fMessageWindow.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\fTouchKey.resx">
<DependentUpon>fTouchKey.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\fTouchKeyFull.resx">
<DependentUpon>fTouchKeyFull.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\fTouchNumDot.resx">
<DependentUpon>fTouchNumDot.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\fPassword.resx">
<DependentUpon>fPassword.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Dialog\fErrorException.resx">
<DependentUpon>fErrorException.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="fMain.resx">
<DependentUpon>fMain.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="ViewForm\fBms.resx">
<DependentUpon>fBms.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ViewForm\fAuto.resx">
<DependentUpon>fAuto.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ViewForm\fAgv.resx">
<DependentUpon>fAgv.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ViewForm\fFlag.resx">
<DependentUpon>fFlag.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ViewForm\fIO.resx">
<DependentUpon>fIO.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="fSetup.resx">
<DependentUpon>fSetup.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ViewForm\fManual.resx">
<DependentUpon>fManual.cs</DependentUpon>
</EmbeddedResource>
<None Include="app.config" />
<None Include="DataSet1.xsc">
<DependentUpon>DataSet1.xsd</DependentUpon>
</None>
<None Include="DataSet1.xsd">
<SubType>Designer</SubType>
<Generator>MSDataSetGenerator</Generator>
<LastGenOutput>DataSet1.Designer.cs</LastGenOutput>
</None>
<None Include="DataSet1.xss">
<DependentUpon>DataSet1.xsd</DependentUpon>
<SubType>Designer</SubType>
</None>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<None Include="sample.route" />
</ItemGroup>
<ItemGroup>
<Content Include="ReadMe.txt" />
<Content Include="icons8-layers-30.ico" />
<Content Include="icons8-split-64.ico" />
<None Include="Resources\ChargeH.png" />
<None Include="Resources\icons8-charge-empty-battery-96.png" />
<None Include="Resources\icons8-automatic-gearbox-warning-80.png" />
<None Include="Resources\icons8-speed-80.png" />
<None Include="Resources\icons8-charged-battery-80.png" />
<None Include="Resources\icons8-checked-radio-button-48.png" />
<None Include="Resources\icons8-save-40.png" />
<None Include="Resources\icons8-unavailable-40.png" />
<None Include="Resources\icons8-new-40.png" />
<None Include="Resources\icons8-running-40.png" />
<None Include="Resources\icons8-no-running-40.png" />
<None Include="Resources\icons8-exercise-40.png" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.0">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4%28x86 및 x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Windows.Installer.4.5">
<Visible>False</Visible>
<ProductName>Windows Installer 4.5</ProductName>
<Install>true</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\AGVLogic\AGVNavigationCore\AGVNavigationCore.csproj">
<Project>{c5f7a8b2-8d3e-4a1b-9c6e-7f4d5e2a9b1c}</Project>
<Name>AGVNavigationCore</Name>
</ProjectReference>
<ProjectReference Include="..\..\AGVLogic\EnigProtocol\enigprotocol\ENIGProtocol.csproj">
<Project>{9365803b-933d-4237-93c7-b502c855a71c}</Project>
<Name>ENIGProtocol</Name>
</ProjectReference>
<ProjectReference Include="..\StateMachine\StateMachine.csproj">
<Project>{bbc9bccf-6262-4355-9cc2-37ff678ac499}</Project>
<Name>StateMachine</Name>
</ProjectReference>
<ProjectReference Include="..\SubProject\AGVControl\agvControl.csproj">
<Project>{8cb883c0-99c3-4dd4-b017-f9b92010a806}</Project>
<Name>agvControl</Name>
</ProjectReference>
<ProjectReference Include="..\SubProject\AGV\NARUMI.csproj">
<Project>{8bae0eac-3d25-402f-9a65-2ba1ecfe28b7}</Project>
<Name>NARUMI</Name>
</ProjectReference>
<ProjectReference Include="..\SubProject\CommData\CommData.csproj">
<Project>{14e8c9a5-013e-49ba-b435-efefc77dd623}</Project>
<Name>CommData</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Folder Include="StateMachine\Display\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>
</PostBuildEvent>
</PropertyGroup>
</Project>

552
HMI/Project/CSetting.cs Normal file
View File

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

View File

@@ -0,0 +1,926 @@
//using System;
//using System.Collections.Generic;
//using System.Diagnostics;
//using System.Globalization;
//using System.IO;
//using System.Linq;
//using System.Reflection;
//using System.Runtime.CompilerServices;
//using System.Security;
//using System.Text;
//using System.Threading.Tasks;
//using System.Collections;
//namespace Project
//{
// public class CParser
// {
// private string SrcText;
// private ArrayList CommandList; // //여기엔 Scommand 가 들어있다.
// private System.Text.StringBuilder ErrMsg;
// // Public Log As System.Text.StringBuilder
// public event MessageEventHandler Message;
// public void raiseMessage(string m, Boolean err)
// {
// if (Message != null) Message(m, err);
// }
// public delegate void MessageEventHandler(string M, bool Err);
// public CParser()
// {
// }
// public new string toString
// {
// get
// {
// if (this.isError == false)
// {
// object Value = ParseCommand(SrcText, true);
// return Value.ToString();
// }
// return "";
// }
// }
// public new object GetData
// {
// get
// {
// if (this.isError == false)
// {
// object Value = ParseCommand(SrcText, true);
// return Value;
// }
// return null;
// }
// }
// public bool isError
// {
// get
// {
// if (this.ErrMsg.ToString() != "")
// return true;
// else
// return false;
// }
// }
// private void Check_error(string vSrcText)
// {
// // Return '//임시로 해제
// int Lcnt = 0;
// int Rcnt = 0;
// ErrMsg = new System.Text.StringBuilder();
// return; //
// foreach (string EXP_ in vSrcText.Split(';')) // //각명령을 ;로 구분되어잇기떄문에 구분됫것들이 각자의 명령이다.
// {
// var EXP = EXP_.Trim();
// Lcnt = EXP.ToCharArray().Where(t => t == '(').Count();// MyString.GetInCountChar(EXP, "("); // //파라미터 시작갯수
// Rcnt = EXP.ToCharArray().Where(t => t == ')').Count();// MyString.GetInCountChar(EXP, ")"); // //파라미터 종료갯수
// if (Lcnt != Rcnt)
// ErrMsg.AppendLine(EXP + "파라미터 시작기호 ( 와 종료기호 ) 가 일치하지 않습니다");
// Lcnt = EXP.ToCharArray().Where(t => t == '"').Count();// MyString.GetInCountChar(EXP, Strings.Chr(34)); // //파라미터 시작갯수
// Rcnt = EXP.ToCharArray().Where(t => t == '"').Count();// MyString.GetInCountChar(EXP, Strings.Chr(34)); // //파라미터 종료갯수
// if (Lcnt != Rcnt)
// ErrMsg.AppendLine(EXP + "문자열묶음기호(\")가 일치하지 않습니다");
// }
// }
// public virtual void CommandText(string s)
// {
// SrcText = s;
// Check_error(SrcText);
// if (this.isError)
// UTIL.MsgE(ErrMsg.ToString());// Interaction.MsgBox(ErrMsg.ToString(), MsgBoxStyle.Critical, "오류");
// }
// protected string Buffer1 = "";
// protected string Buffer2 = "";
// protected string Buffer3 = "";
// protected string Buffer4 = "";
// private object ParseCommand(string vSrcText, bool isfirst, object NEwValue = null)
// {
// // //각명령어를 쪼갠다.
// // //중첩명령어의 경우에도 쪼갠다.
// // Dim Cmd As String '//명령어
// // Dim Param As String '//명렁파라미터
// // Dim target As String '//타겏값
// // Dim Str As String
// // Dim Line As String
// if (isfirst)
// this.CommandList = new ArrayList();// //처음에만 이것을 초기화한다.
// vSrcText = vSrcText.Replace("\r\n","\n");//Constants.vbCrLf, Constants.vbLf);
// vSrcText = vSrcText.Replace("\r","\n");//Constants.vbCr, Constants.vbLf);
// vSrcText = vSrcText.Replace("\n\n","\n");//Constants.vbLf + Constants.vbLf, Constants.vbLf);
// vSrcText = vSrcText.Replace(";","\n");// Constants.vbLf);
// raiseMessage("Command Expression : " + vSrcText, false);
// foreach (string EXP_ in vSrcText.Split('\n')) // //각명령을 ;로 구분되어잇기떄문에 구분됫것들이 각자의 명령이다.
// {
// if (EXP_.Trim() == "")
// continue;
// if (EXP_.Length < 3)
// continue;
// if (EXP_.Substring(0, 2) == "//")
// continue;
// // Me.Log.AppendLine("New Line Value is : " & NEwValue.ToString)
// var EXP = EXP_.Trim();
// bool CmdFind = false; // //명령어를다 찾앗는가?
// bool ParamFind = false;
// System.Text.StringBuilder NewParam = new System.Text.StringBuilder();
// bool Isfunction = false;
// bool IsFunctionEnd = false;
// short InnerFuncCnt = 0;
// System.Text.StringBuilder NewCmd = new System.Text.StringBuilder();
// ArrayList ParamList = new ArrayList();
// bool IsTextInner = false;
// if (EXP != "")
// {
// // My.Computer.FileSystem.WriteAllText("c:\command.txT", "expressiong=" & EXP, True)
// if (EXP.Substring(0, 1) == "\"")//Strings.Chr(34))
// NEwValue = EXP; // //해당문자자체가 값이된다.
// else
// // //파라미터란 ()사이의 명령어이며, 콤마(,)로 분리된다
// // //단 "" 사이의 콤마는 인정하지않는다.
// foreach (char C in EXP.ToCharArray())
// {
// if (CmdFind == false)
// {
// if (C == '(')
// CmdFind = true;
// else
// NewCmd.Append(C);
// }
// else
// switch (C)
// {
// case ',':
// {
// if (IsTextInner)
// NewParam.Append(C);
// else if (Isfunction == false)
// {
// if (IsFunctionEnd)
// ParamList.Add(NewParam.ToString()); // //파라미터를 찾았으므로 파람리스트에 추가한다.
// else
// ParamList.Add(NewParam.ToString());// //파라미터를 찾았으므로 파람리스트에 추가한다.
// NewParam = new System.Text.StringBuilder(); // //파라미터부분 초기화
// IsFunctionEnd = false;
// }
// else
// NewParam.Append(C);
// break;
// }
// case '(':
// {
// if (IsTextInner)
// NewParam.Append(C);
// else if (Isfunction)
// {
// InnerFuncCnt += 1;
// NewParam.Append(C);
// }
// else
// {
// Isfunction = true; // //이파라미터가 또 함수를 가지고있다 ㅠ_ㅠ;
// NewParam.Append(C);
// }
// break;
// }
// case ')':
// {
// if (IsTextInner)
// NewParam.Append(C);
// else if (Isfunction)
// {
// if (InnerFuncCnt > 0)
// {
// InnerFuncCnt -= 1;
// NewParam.Append(C);
// }
// else
// {
// Isfunction = false; // //이파라미터가 또 함수를 가지고있다 ㅠ_ㅠ;
// IsFunctionEnd = true;
// NewParam.Append(C);
// }
// }
// else
// {
// if (NewParam.ToString() != "")
// ParamList.Add(NewParam.ToString()); // //파라미터를 찾았으므로 파람리스트에 추가한다.
// NewParam = new System.Text.StringBuilder(); // //파라미터부분 초기화
// IsFunctionEnd = false;
// // MsgBox("명령어실행 : " & NewCmd.ToString)
// // //각 파라미터들의 값을 가져온다
// raiseMessage("New COmmand : " + NewCmd.ToString() + " paramCount=" + ParamList.Count, false);
// switch (NewCmd.ToString().ToUpper())
// {
// case "MUL":
// {
// if (ParamList.Count != 2)
// raiseMessage("MUL 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// // Me.Log.AppendLine("MUL " & Param1 & vbTab & Param2)
// if (Param1.ToString().IsNumeric()==false || Param2.ToString().IsNumeric()==false)
// // Me.Log.AppendLine("MUL param error support only number")
// return 0;
// else
// NEwValue = System.Convert.ToDecimal(Param1) * System.Convert.ToDecimal(Param2);
// }
// break;
// }
// case "PLUS":
// {
// if (ParamList.Count != 2)
// raiseMessage("PLUS 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// if (Param1.ToString().IsNumeric()==false || Param2.ToString().IsNumeric()==false)
// return 0;
// else
// NEwValue = System.Convert.ToDecimal(Param1) + System.Convert.ToDecimal(Param2);
// }
// break;
// }
// case "MINUS":
// {
// if (ParamList.Count != 2)
// raiseMessage("MINUS 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// // Me.Log.AppendLine("PLUS " & Param1 & vbTab & Param2)
// if (Param1.ToString().IsNumeric()==false || Param2.ToString().IsNumeric()==false )
// // Me.Log.AppendLine("MINUS param error support only number")
// return 0;
// else
// NEwValue = System.Convert.ToDecimal(Param1) - System.Convert.ToDecimal(Param2);
// }
// break;
// }
// case "ISEQULE":
// case "EQ" // //둘이 같은지 반환해준다.
// :
// {
// if (ParamList.Count != 2)
// raiseMessage("ISEQULE 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// // MsgBox(ParamList[1].ToString & "/" & NewValue)
// // Me.Log.AppendLine("ISEQULE " & Param1 & vbTab & Param2)
// if (Param1 != Param2)
// {
// raiseMessage("ISEQULE RETURN FALSE", true);
// return false;
// }
// else
// {
// raiseMessage("ISEQULE RETURN TRUE", true);
// return true;
// }
// }
// break;
// }
// case "NEQ":
// case "DIFF" // //둘이 다르면 true 반환해준다.
// :
// {
// if (ParamList.Count != 2)
// raiseMessage("DIFF(NEQ) 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// // MsgBox(ParamList[1].ToString & "/" & NewValue)
// // Me.Log.AppendLine("ISEQULE " & Param1 & vbTab & Param2)
// if (Param1 != Param2)
// {
// raiseMessage("DIFF RETURN True", true);
// return true;
// }
// else
// {
// raiseMessage("DIFF RETURN False", true);
// return false;
// }
// }
// break;
// }
// case "IF":
// {
// if (ParamList.Count != 2)
// raiseMessage("IF 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// if (Param1.ToString().ToLower() != Param2.ToString().ToLower())
// {
// raiseMessage("IF문 조건이 서로 다르므로 실행을 종료합니다.", false);
// return ""; // //해당구문전체를 모두 FALSE한다.
// }
// else
// // RaiseEvent RaiseMessage("IF문 조건이 동일 True Case IN(" & Param1 & " " & Param2 & ")")
// Console.WriteLine("sdf");
// }
// break;
// }
// case "IFNOT":
// {
// if (ParamList.Count != 2)
// raiseMessage("IFNOT 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// if (Param1 == Param2)
// {
// raiseMessage("IF문 조건이 서로 같으므로 실행을 종료합니다.", true);
// return ""; // //해당구문전체를 모두 FALSE한다.
// }
// else
// {
// }
// }
// break;
// }
// case "MSGBOX":
// case "MSG":
// {
// if (ParamList.Count != 1)
// raiseMessage("MSGBOX 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// UTIL.MsgE(Param1, MsgBoxStyle.Information, "확인");
// }
// break;
// }
// case "ISNUM":
// {
// if (ParamList.Count != 1)
// raiseMessage("ISNUM 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// NEwValue = Information.IsNumeric(Param1);
// }
// break;
// }
// case "NVL":
// {
// if (ParamList.Count != 2)
// raiseMessage("ISEMPTY 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// if (Param1.Trim() == "")
// NEwValue = Param2;
// else
// NEwValue = Param1;
// }
// break;
// }
// case "INDEXOF":
// {
// if (ParamList.Count != 2)
// raiseMessage("INDEXOF 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// NEwValue = Param1.IndexOf(Param2) + 1;
// }
// break;
// }
// case "LINDEXOF":
// {
// if (ParamList.Count != 2)
// raiseMessage("LINDEXOF 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// NEwValue = Param1.LastIndexOf(Param2) + 1;
// }
// break;
// }
// case "REPLACE":
// {
// if (ParamList.Count != 3)
// raiseMessage("REPLACE 함수에 3개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// object Param3 = RunParam(ParamList[2].ToString(), NEwValue.ToString());
// NEwValue = Param1.ToString().Replace(Param2, Param3);
// }
// break;
// }
// case "REMOVECHAR":
// {
// if (ParamList.Count != 2)
// raiseMessage("REMOVESPACE 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// NEwValue = Param1.Trim(Param2.ToCharArray()).ToString().Trim();
// }
// break;
// }
// case "REMOVESCHAR" // //특수기호삭제한다.
// :
// {
// if (ParamList.Count != 1)
// raiseMessage("REMOVESCHAR 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// System.Text.StringBuilder NewString = new System.Text.StringBuilder();
// foreach (char Cc in Param1.ToCharArray())
// {
// switch (Strings.Asc(Cc))
// {
// case object _ when 65 <= Strings.Asc(Cc) && Strings.Asc(Cc) <= 90:
// case object _ when 48 <= Strings.Asc(Cc) && Strings.Asc(Cc) <= 57:
// case object _ when 97 <= Strings.Asc(Cc) && Strings.Asc(Cc) <= 122:
// case object _ when Strings.Asc(Cc) < 0:
// case 32:
// {
// NewString.Append(Cc);
// break;
// }
// }
// }
// NEwValue = NewString.ToString();
// }
// break;
// }
// case "REMOVESPACE":
// {
// if (ParamList.Count != 1)
// raiseMessage("REMOVESPACE 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// NEwValue = Param1.Replace(Strings.Space(1), Constants.vbNullString);
// }
// break;
// }
// case "TOUPPER":
// {
// if (ParamList.Count != 1)
// raiseMessage("TOUPPER 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// NEwValue = Param1.ToUpper();
// }
// break;
// }
// case "TRIM":
// {
// if (ParamList.Count != 1)
// raiseMessage("TRIM 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// NEwValue = Param1.Trim();
// }
// break;
// }
// case "TOLOWER":
// {
// if (ParamList.Count != 1)
// raiseMessage("TOLOWER 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// NEwValue = Param1.ToLower();
// }
// break;
// }
// case "LENB":
// {
// if (ParamList.Count != 1)
// raiseMessage("LENB 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// NEwValue = System.Text.Encoding.Default.GetByteCount(Param1.ToString());
// }
// break;
// }
// case "LEN":
// {
// if (ParamList.Count != 1)
// raiseMessage("LEN 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// NEwValue = Param1.Length;
// }
// break;
// }
// case "RIGHTADD":
// case "ADDRIGHT":
// {
// if (ParamList.Count != 2)
// raiseMessage("RIGHTADD 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// NEwValue = Param1 + Param2;
// }
// break;
// }
// case "ADDNUM":
// {
// if (ParamList.Count != 2)
// raiseMessage("ADDNUM 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// NEwValue = Param1 + Param2;
// }
// break;
// }
// case "LEFTADD":
// case "ADDLEFT":
// {
// if (ParamList.Count != 2)
// raiseMessage("LEFTADD 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// NEwValue = Param2 + Param1;
// }
// break;
// }
// case "TODATE":
// {
// if (ParamList.Count != 1)
// raiseMessage("TODATE 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// NEwValue = ((DateTime)Param1);
// }
// break;
// }
// case "TOSTRING":
// {
// if (ParamList.Count != 1)
// raiseMessage("TOSTRING 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// NEwValue = (System.Convert.ToString(Param1));
// }
// break;
// }
// case "TOINT":
// {
// if (ParamList.Count != 1)
// raiseMessage("TOINT 함수에 1개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// NEwValue = Param1;
// }
// break;
// }
// case "NOW":
// {
// NEwValue = DateTime.Now;
// break;
// }
// case "SUBSTRING":
// case "SUBSTR" // //2개의 파라미터를 사용한다.
// :
// {
// if (ParamList.Count < 2)
// raiseMessage("SUBSTRING 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// object param3 = "";
// if (ParamList.Count == 3)
// param3 = RunParam(ParamList[2].ToString(), NEwValue.ToString());
// if (Param1.Trim() == "" || Information.IsNumeric(Param2) == false || System.Convert.ToInt32(Param2) < 0)
// NEwValue = "";
// else if (param3 != "")
// {
// // //길이를 참고한다. 너무 긴건 처리하지 못하므로
// if (System.Convert.ToInt32(Param2) + System.Convert.ToInt32(param3) > Param1.Length)
// NEwValue = Param1.Substring(Param2, (Param1.Length - System.Convert.ToInt32(Param2)));
// else
// NEwValue = Param1.Substring(Param2, param3);
// }
// else
// NEwValue = Param1.Substring(Param2);
// }
// break;
// }
// case "SAVE1":
// {
// if (ParamList.Count < 1)
// UTIL.MsgE("SAVE1 함수에 1개의 파라미터가 없습니다");
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// Buffer1 = Param1;
// }
// break;
// }
// case "SAVE2":
// {
// if (ParamList.Count < 1)
// UTIL.MsgE("SAVE1 함수에 1개의 파라미터가 없습니다");
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// Buffer2 = Param1;
// }
// break;
// }
// case "SAVE3":
// {
// if (ParamList.Count < 1)
// UTIL.MsgE("SAVE1 함수에 1개의 파라미터가 없습니다");
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// Buffer3 = Param1;
// }
// break;
// }
// case "SAVE4":
// {
// if (ParamList.Count < 1)
// UTIL.MsgE("SAVE1 함수에 1개의 파라미터가 없습니다");
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// Buffer4 = Param1;
// }
// break;
// }
// case "LEFT" // //2개의 파라미터를 사용한다.
// :
// {
// if (ParamList.Count != 2)
// raiseMessage("LEFT 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// NEwValue = Strings.Left(Param1, Param2);
// }
// break;
// }
// case "RIGHT" // //2개의 파라미터를 사용한다.
// :
// {
// if (ParamList.Count != 2)
// raiseMessage("RIGHT 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// var Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString()).ToString();
// var Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString()).ToString();
// NEwValue = Param1.Substring(Param1.Length-int.Parse(Param2));// Strings.Right(Param1, Param2);
// }
// break;
// }
// case "MID": // //2개의 파라미터를 사용한다.
// {
// if (ParamList.Count != 3)
// raiseMessage("MID 함수에 3개의 파라미터가 없습니다", true);
// else
// {
// var Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// var Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// var Param3 = RunParam(ParamList[2].ToString(), NEwValue.ToString());
// if (Param2 == "-1" || int.Parse(Param3.ToString()) < 1)
// {
// raiseMessage("MID 함수의 시작위치값은 0이상이여야합니다\nMID 함수의 추출길이는 1이상이여야합니다", true);
// NEwValue = "";
// }
// else
// NEwValue = Param1.ToString().Substring(int.Parse(Param2.ToString()), int.Parse(Param3.ToString()));
// }
// break;
// }
// case "FORMAT":
// {
// if (ParamList.Count != 2)
// raiseMessage("FORMAT 함수에 2개의 파라미터가 없습니다", true);
// else
// {
// object Param1 = RunParam(ParamList[0].ToString(), NEwValue.ToString());
// object Param2 = RunParam(ParamList[1].ToString(), NEwValue.ToString());
// // MsgBox(Param1 & "/" & Param2)
// if(Param1.GetType()== typeof(int))
// NEwValue = ((int)Param1).ToString(Param2.ToString());
// else
// NEwValue = Param1.ToString();
// }
// break;
// }
// default:
// {
// //raiseMessage("미지원 함수 입니다")
// raiseMessage("미지원 : " + NewCmd.ToString(),true);
// break;
// }
// }
// }
// break;
// }
// default:
// {
// if (C == '"')
// {
// IsTextInner = !IsTextInner;
// NewParam.Append(C);
// }
// else if (IsFunctionEnd)
// raiseMessage("내부한수 종결문다음에 , 가 와야하는데 " + C + "가 왔습니다", true);
// else
// NewParam.Append(C);
// break;
// }
// }
// }
// }
// }
// // Me.Log.AppendLine("ParseCOmmand Return : " & NEwValue.ToString)
// return NEwValue;
// }
// public object RunParam(string vParam, string SrcValue)
// {
// // My.Computer.FileSystem.WriteAllText("c:\log.txT", "runparam param=" & vParam, True)
// vParam = vParam.Trim();
// if (vParam == "")
// return "";
// if (vParam.Substring(0, 1) == "\"")
// return vParam.Replace("\"", "");
// if (vParam.ToUpper() == "TRUE")
// return true;
// if (vParam.ToUpper() == "FALSE")
// return false;
// // //시작값이 숫자라면 이건 숫자값이다.
// if (vParam.Substring(0, 1).IsNumeric() == true)
// return vParam;
// // //시작값이 # 라면 원본 데이터이다.
// if (vParam == "#")
// return SrcValue;
// if (vParam == "#1")
// return Buffer1;
// if (vParam == "#2")
// return Buffer2;
// if (vParam == "#3")
// return Buffer3;
// if (vParam == "#4")
// return Buffer4;
// // //시작값이 숫자도 일반 문자도 공백도 아니라면 영문단어이다.
// // // ( 가 있다면 함수이므로 함수를 실행한다.
// switch (vParam.ToUpper())
// {
// case "NOW" // //date 타입을 반환한다.
// :
// {
// return DateTime.Now;
// }
// default:
// {
// if (vParam.IndexOf("(") != -1)
// return this.ParseCommand(vParam, false, SrcValue);
// else
// return "";// return RunUnknown(vParam, SrcValue);// //비지원 목록으로 반환한다.
// break;
// }
// }
// return "";
// }
// }
//}

View File

@@ -0,0 +1,201 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using Project.StateMachine;
using AR;
namespace Project
{
public class CResult
{
public bool SMSG_ProgressEnable = false;
//public string SMSG_Text = string.Empty;
public float SMSG_ProgressMax = 0;
public int SMSG_ProgressMin = 0;
public Color SMSG_ProgressForeColor = Color.Red;
public Color SMSG_ForeColor = Color.Black;
public Color SMSG_BackColor = Color.White;
public Color SMSG_BackColor2 = Color.White;
public Color SMSG_ShadowColor = Color.Transparent;
public float SMSG_ProgressValue = 0;
public string SMSG_Tag = string.Empty;
/// <summary>
/// 이동대상위치(상차,하차,충전)
/// </summary>
private ePosition _targetPos = ePosition.NONE;
public string result_message = "";
public double result_progressmax = 0;
public double result_progressvalue = 0;
public DateTime StopMessageTimePLC = DateTime.Parse("1982-11-23");
public DateTime StopMessageTimeSWR = DateTime.Parse("1982-11-23");
public string StopMessagePLC = string.Empty;
public string StopMessageSWR = string.Empty;
private ePosition _currentpos = ePosition.NONE;
private string _currentposcw = string.Empty;
public ushort LastTAG { get; set; } = 0;
public ePosition NextPos = ePosition.NONE;
private char _comandKit { get; set; }
public string Memo;
public eResult ResultCode { get; set; }
public eECode ResultErrorCode;
public ENIGProtocol.AGVErrorCode RunStepErrorCode { get; set; }
public string ResultMessage { get; set; }
public int retry = 0;
public DateTime retryTime;
public Device.Socket.Message RecvMessage;
/// <summary>
/// 작업시작시간
/// </summary>
public DateTime JobStartTime;
/// <summary>
/// 작업종료시간
/// </summary>
public DateTime JobEndTime;
//public DateTime IdleStartTime = DateTime.Parse("1982-11-23");
/// <summary>
/// 작업진행시간
/// </summary>
public TimeSpan JobRunTime
{
get
{
if (JobStartTime.Year == 1982) return new TimeSpan(0);
if (JobEndTime.Year == 1982) return DateTime.Now - JobStartTime;
else return JobEndTime - JobStartTime;
}
}
#region "AGV Status Value"
public string PLC1_RawData { get; set; }
public string PLC2_RawData { get; set; }
#endregion
public ePosition TargetPos
{
get
{
return _targetPos;
}
set
{
_targetPos = value;
PUB.log.Add(string.Format("대상위치설정:{0}", value));
}
}
public char CommandKit
{
get
{
return _comandKit;
}
set
{
_comandKit = value;
PUB.log.Add(string.Format("명령을 내린 KIT 설정 No={0}", value));
}
}
public ePosition CurrentPos
{
get
{
return _currentpos; }
set
{
if (_currentpos != value) //값이 바뀔때만 메세지 220628
PUB.log.Add(string.Format("TAG위치 설정:{0}->{1}", _currentpos, value));
_currentpos = value;
}
}
public string CurrentPosCW
{
get
{
return _currentposcw;
}
set
{
if (_currentposcw != value) //값이바뀔때만 메세지 220628
PUB.log.Add(string.Format("TAG방향 설정:{0}->{1}", _currentposcw, value));
_currentposcw = value;
}
}
#region "SetResultMessage"
public void SetResultMessage(eResult code, eECode err, eNextStep systempause, params object[] args)
{
var rltMsg = PUB.GetResultCodeMessage(code);
var codeMSg = $"[E{(int)err}] ";// + Util.GetResultCodeMessage(code);
if (err == eECode.MESSAGE_ERROR)
{
codeMSg = $"[{rltMsg} ERROR MESSAGE]\n";
}
else if (err == eECode.MESSAGE_INFO)
{
codeMSg = $"[{rltMsg} INFORMATION]\n";
}
var erMsg = PUB.GetErrorMessage(err, args);
var msg = codeMSg + erMsg;
this.ResultCode = code;
this.ResultErrorCode = err;
this.ResultMessage = msg;
if (systempause == eNextStep.PAUSENOMESAGE) this.ResultMessage = string.Empty; //210129
PUB.log.AddE(msg);
if (systempause == eNextStep.PAUSE) PUB.sm.SetNewStep(eSMStep.PAUSE);
else if (systempause == eNextStep.PAUSENOMESAGE) PUB.sm.SetNewStep(eSMStep.PAUSE);
else if (systempause == eNextStep.ERROR) PUB.sm.SetNewStep(eSMStep.ERROR);
}
#endregion
public CResult()
{
this.Clear();
}
public void Clear()
{
JobStartTime = DateTime.Parse("1982-11-23");
JobEndTime = DateTime.Parse("1982-11-23");
Memo = string.Empty;
ResultCode = eResult.NoError;
RunStepErrorCode = ENIGProtocol.AGVErrorCode.None;
ResultMessage = string.Empty;
}
}
}

View File

@@ -0,0 +1,466 @@
using Project;
using Project.Device;
using Project.StateMachine;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Net;
using System.Net.NetworkInformation;
using System.Text;
using System.Threading.Tasks;
/// <summary>
/// ============================================================================
/// 장비기술 상태 모니터링 관련 클래스
/// 이 클래스는 SQLfiletoDB 프로그램과 같이 사용하는 것을 권장합니다.
/// 현재 실행 중인 프로그램의 하위 폴더 Status 에 입력된 상태값을 SQL 파일로 기록합니다.
/// SQLfiletoDB는 SQL파일을 실제 DB에 기록하는 프로그램입니다.
/// ============================================================================
/// 작성자 : chi
/// 작성일 : 202-06-15
/// GIT : (none)
/// </summary>
public static partial class EEMStatus
{
static System.Threading.ManualResetEvent mre = new System.Threading.ManualResetEvent(true);
static string ip = string.Empty;
static string mac = string.Empty;
static DateTime StatusChecktime = DateTime.Now;
static DateTime MonitorChecktime = DateTime.Now.AddYears(-1);
static DateTime FileCheckTime = DateTime.Now;
static string monitorfile = string.Empty;
/// <summary>
/// UpdateStatusSQL 명령이 동작하는 간격이며 기본 180초(=3분)로 되어 있습니다.
/// </summary>
public static int UpdateStatusInterval { get; set; } = 180;
public static int UpdateFileInterval { get; set; } = 3;
static bool queryok = false;
static bool UpdateRun = false;
public static string IP
{
get
{
if (queryok == false) GetNetworkInfo();
return ip;
}
set { ip = value; }
}
public static string MAC
{
get
{
if (queryok == false) GetNetworkInfo();
return mac;
}
set
{
mac = value;
}
}
/// <summary>
/// 현재 시스템의 IP/MAC정보를 취득합니다.
/// </summary>
static void GetNetworkInfo()
{
ip = "";
mac = "";
// string prgmName = Application.ProductName;
var nif = NetworkInterface.GetAllNetworkInterfaces();
var host = Dns.GetHostEntry(Dns.GetHostName());
string fullname = System.Net.Dns.GetHostEntry("").HostName;
foreach (IPAddress r in host.AddressList)
{
string str = r.ToString();
if (str != "" && str.Substring(0, 3) == "10.")
{
ip = str;
break;
}
}
string rtn = string.Empty;
ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'");
ManagementObjectSearcher query1 = new ManagementObjectSearcher(oq);
foreach (ManagementObject mo in query1.Get())
{
string[] address = (string[])mo["IPAddress"];
if (address[0] == ip && mo["MACAddress"] != null)
{
mac = mo["MACAddress"].ToString();
break;
}
}
queryok = true;
}
/// <summary>
/// 배터리데이터수신시 값을 기록한다.
/// </summary>
public static void MakeBMSInformation_INFO()
{
if (PUB.BMS.Current_DataTime.Year == 1982 || LastBMSIFTime == PUB.BMS.Current_DataTime || PUB.setting.MCID.isEmpty()) return;
try
{
// BMS 데이터 취득 (실제 BMS 객체에서 데이터를 가져와야 함)
// 예시: var bms = Project.Device.BMS.Instance;
var mcid = Project.PUB.setting.MCID;
var timestr = PUB.BMS.Current_DataTime.ToString("yyyy-MM-dd HH:mm:ss");
var data = PUB.BMS.BMSInformation;
// Status 폴더에 SQL 파일 생성
var path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Status");
if (System.IO.Directory.Exists(path) == false)
System.IO.Directory.CreateDirectory(path);
var file = System.IO.Path.Combine(path, $"{DateTime.Now.ToString("HHmmssfff")}_BMS_INF.sql");
var sql = "insert into AGV_Shuttle_BMS(MCID,wdate,info_volt,info_current,info_capa,info_level,info_temp1,info_temp2,soc,cycle,protection,balance,watt) " +
$"values('{mcid}','{timestr}',{data.packVoltage},{data.current},{data.fullCapacity},{data.RawLevel},{data.ntcTemp[0]},{data.ntcTemp[1]},{data.rsoc},{data.cycleCount},{data.raw_protection},{data.fullBalance},{data.watt})";
System.IO.File.WriteAllText(file, sql, System.Text.Encoding.Default);
LastBMSIFTime = DateTime.Now;
}
catch (Exception ex)
{
// 오류 로깅 (필요시 PUB.log.Add 등으로 처리)
Console.WriteLine($"MakeBMSInformation Error: {ex.Message}");
}
}
static DateTime LastBMSIFTime = DateTime.Now;
static DateTime LastBMSCVTime = DateTime.Now;
/// <summary>
/// 배터리데이터수신시 값을 기록한다.
/// </summary>
public static void MakeBMSInformation_Cell()
{
if (PUB.BMS.Current_CellTime.Year == 1982 || LastBMSCVTime == PUB.BMS.Current_CellTime || PUB.setting.MCID.isEmpty()) return;
try
{
// BMS 데이터 취득 (실제 BMS 객체에서 데이터를 가져와야 함)
// 예시: var bms = Project.Device.BMS.Instance;
var mcid = Project.PUB.setting.MCID;
var timestr = PUB.BMS.Current_CellTime.ToString("yyyy-MM-dd HH:mm:ss");
// BMS 데이터 (실제 값으로 교체 필요)
var volt = PUB.BMS.BMSCellVoltage;
var cell_volt1 = volt.Voltage[0];// "null"; // bms.CellVolt1
var cell_volt2 = volt.Voltage[1]; // bms.CellVolt2
var cell_volt3 = volt.Voltage[2]; // bms.CellVolt3
var cell_volt4 = volt.Voltage[3]; // bms.CellVolt4
var cell_volt5 = volt.Voltage[4]; // bms.CellVolt5
var cell_volt6 = volt.Voltage[5]; // bms.CellVolt6
var cell_volt7 = volt.Voltage[6]; // bms.CellVolt7
var cell_volt8 = volt.Voltage[7]; // bms.CellVolt8
// Status 폴더에 SQL 파일 생성
var path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Status");
if (System.IO.Directory.Exists(path) == false)
System.IO.Directory.CreateDirectory(path);
var file = System.IO.Path.Combine(path, $"{DateTime.Now.ToString("HHmmssfff")}_BMS_CV.sql");
var sql = "insert into AGV_Shuttle_BMS(MCID,wdate," +
"cell_volt1,cell_volt2,cell_volt3,cell_volt4,cell_volt5,cell_volt6,cell_volt7,cell_volt8) " +
"values('{0}','{1}',{2},{3},{4},{5},{6},{7},{8},{9})";
sql = string.Format(sql, mcid, timestr,
cell_volt1, cell_volt2, cell_volt3, cell_volt4,
cell_volt5, cell_volt6, cell_volt7, cell_volt8);
System.IO.File.WriteAllText(file, sql, System.Text.Encoding.Default);
LastBMSCVTime = DateTime.Now;
}
catch (Exception ex)
{
// 오류 로깅 (필요시 PUB.log.Add 등으로 처리)
Console.WriteLine($"MakeBMSInformation Error: {ex.Message}");
}
}
public static void UpdateStatusSQL(eSMStep status, bool _extrun = false, string remark = "")
{
var tsrun = DateTime.Now - StatusChecktime;
if (tsrun.TotalSeconds >= UpdateStatusInterval)
{
AddStatusSQL(status, "UPDATE", extrun: _extrun);
StatusChecktime = DateTime.Now;
}
////내부실행모드일때에만 파일을 처리한다
//if (_extrun == false)
//{
// var tsfile = DateTime.Now - FileCheckTime;
// if (tsfile.TotalSeconds >= UpdateFileInterval)
// {
// if (UpdateRun == false)
// {
// UpdateRun = true;
// Task.Run(() =>
// {
// UpdateFileToDB();
// UpdateRun = false;
// });
// }
// FileCheckTime = DateTime.Now;
// }
//}
}
/// <summary>
/// 상태모니터링 프로그램의 실행파일 명
/// </summary>
static string StatusMonitorFile
{
get
{
if (string.IsNullOrEmpty(monitorfile))
monitorfile = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Status", "SQLFileToDB.exe");
return monitorfile;
}
}
static System.Diagnostics.Process CheckMonitor()
{
if (System.IO.File.Exists(StatusMonitorFile) == false) return null;
var prcs = System.Diagnostics.Process.GetProcesses();
return prcs.Where(t => t.ProcessName.ToLower().StartsWith("sqlfiletodb")).FirstOrDefault();
}
public static bool RunStatusMonitor()
{
//파일이 없으면 실행 불가
if (System.IO.File.Exists(StatusMonitorFile) == false) return false;
//실행프로세스 검사
var prc = CheckMonitor();
if (prc == null)
{
try
{
prc = new System.Diagnostics.Process();
prc.StartInfo = new System.Diagnostics.ProcessStartInfo
{
Arguments = string.Empty,
FileName = StatusMonitorFile,
};
prc.Start();
}
catch
{
return false;
}
}
return true;
}
/// <summary>
/// 작업수량을 입력합니다
/// </summary>
/// <param name="cnt"></param>
/// <returns></returns>
public static string AddStatusCount(int cnt, string remark = "")
{
if (remark.isEmpty()) remark = $"Count Set : {cnt}";
return AddStatusSQL(PUB.sm.Step, remark, count: cnt);
}
/// <summary>
/// 상태메세지를 status 폴더에 기록합니다.
/// </summary>
/// <param name="status">상태머신의 상태값</param>
/// <param name="remark">비고</param>
/// <param name="wdate">기록일시</param>
/// <returns>오류발생시 오류메세지가 반환 됩니다</returns>
public static string AddStatusSQL(eSMStep status, string remark = "", DateTime? wdate = null, bool extrun = false, int? count = null)
{
if (queryok == false || MAC.isEmpty()) GetNetworkInfo();
if (status == eSMStep.CLOSEWAIT || status == eSMStep.CLOSED) return string.Empty;
if (extrun)
{
//상태모니터링 프로그램을 실행합니다.
var tsMon = DateTime.Now - MonitorChecktime;
if (tsMon.TotalMinutes > 5) RunStatusMonitor();
}
try
{
var state = 0;
string cntstr = "null";
if (count != null) cntstr = count.ToString();
var alarmid = string.Empty;
var alarmmsg = string.Empty;
if (string.IsNullOrEmpty(remark)) remark = $"STS:{status}";
if (status == eSMStep.RUN) state = 1;
else if (status == eSMStep.ERROR || status == eSMStep.EMERGENCY)
{
state = 2;
alarmid = PUB.Result.ResultErrorCode.ToString();
alarmmsg = PUB.Result.ResultMessage;
}
else if (status == eSMStep.PAUSE) //일시중지도 오류코드가 포함된다,
{
if (PUB.Result.ResultErrorCode == eECode.USER_STEP || PUB.Result.ResultErrorCode == eECode.USER_STOP || PUB.Result.ResultErrorCode.ToString().StartsWith("MESSAGE"))
{
//사용자에의해 멈추는 것은 오류코드를 넣지 않는다.
}
else
{
alarmid = PUB.Result.ResultErrorCode.ToString();
alarmmsg = PUB.Result.ResultMessage;
}
}
else if (status == eSMStep.INIT) state = 3; //시작
else if (status == eSMStep.CLOSING) state = 4; //종료
//length check
if (alarmid.Length > 10) alarmid = alarmid.Substring(0, 10);
if (remark.Length > 99) remark = remark.Substring(0, 99);
if (alarmmsg.Length > 250) alarmmsg = alarmmsg.Substring(0, 50);
var mcid = Project.PUB.setting.MCID;//.Data.MCID;
var path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Status");
var file = System.IO.Path.Combine(path, $"{DateTime.Now.ToString("HHmmssfff")}_{status}.sql");
var sql = "insert into MCMonitor_Rawdata(Model,status,remark,ip,mac,time,alarmid,alarmmsg,count,version) " +
" values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}',{8},'{9}')";
var timestr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
if (wdate != null) timestr = ((DateTime)wdate).ToString("yyyy-MM-dd HH:mm:ss");
var VersionNumber = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
sql = string.Format(sql, mcid, state, remark.Replace("'", "''"), IP, MAC, timestr, alarmid, alarmmsg, cntstr, VersionNumber);
System.IO.File.WriteAllText(file, sql, System.Text.Encoding.Default);
////만들어진지 3분이 지난 파일은 삭제한다.
//var di = new System.IO.DirectoryInfo(path);
//var fi = di.GetFiles("*.sql", System.IO.SearchOption.TopDirectoryOnly).Where(t => t.LastWriteTime < DateTime.Now.AddMinutes(-3)).FirstOrDefault();
//if (fi != null) fi.Delete();
//if (state == 4 && extrun == false) UpdateFileToDB();
return string.Empty;
}
catch (Exception ex)
{
return ex.Message;
}
}
//static void UpdateFileToDB()
//{
// if (mre.WaitOne(1000) == false) return;
// mre.Reset();
// var cs = "Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!";
// var path = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Status");
// var di = new System.IO.DirectoryInfo(path);
// if (di.Exists == false) return;
// var file = di.GetFiles("*.sql", System.IO.SearchOption.TopDirectoryOnly)
// .Where(t => t.LastWriteTime < DateTime.Now.AddSeconds(-3))
// .OrderByDescending(t => t.LastWriteTime).FirstOrDefault();
// if (file == null)
// {
// mre.Set();
// return;
// }
// //파일을 찾아야한다
// // PUB.log.Add($">> {file.FullName}");
// try
// {
// var sql = System.IO.File.ReadAllText(file.FullName, System.Text.Encoding.Default);
// if (string.IsNullOrEmpty(sql))
// {
// //비어잇다면
// var errpath = System.IO.Path.Combine(di.FullName, "Error");
// var errfile = System.IO.Path.Combine(errpath, file.Name);
// if (System.IO.Directory.Exists(errpath) == false) System.IO.Directory.CreateDirectory(errpath);
// System.IO.File.Move(file.FullName, errfile);// file.MoveTo(errfile);
// // ecnt += 1;
// }
// else
// {
// // var csstr = PUB.setting.ConnectionString;
// // if (string.IsNullOrEmpty(csstr)) csstr = "Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!";
// var cn = new System.Data.SqlClient.SqlConnection(cs);
// var cmd = new System.Data.SqlClient.SqlCommand(sql, cn);
// cn.Open();
// var cnt = cmd.ExecuteNonQuery();
// //if (cnt == 0) PUB.log.Add($"Result Empty : {sql}");
// cn.Close();
// cnt += 1;
// var errpath = System.IO.Path.Combine(di.FullName, "Complete");
// var errfile = System.IO.Path.Combine(errpath, file.Name);
// if (System.IO.Directory.Exists(errpath) == false) System.IO.Directory.CreateDirectory(errpath);
// //file.MoveTo(errfile);
// System.IO.File.Move(file.FullName, errfile);
// }
// }
// catch (Exception ex)
// {
// var errpath = System.IO.Path.Combine(di.FullName, "Error");
// var errfile = System.IO.Path.Combine(errpath, file.Name);
// if (System.IO.Directory.Exists(errpath) == false) System.IO.Directory.CreateDirectory(errpath);
// try
// {
// //file.MoveTo(errfile);
// System.IO.File.Move(file.FullName, errfile);
// }
// catch (Exception ex2)
// {
// Console.WriteLine($"move error : {ex2.Message} : {errfile}");
// }
// //ecnt += 1;
// }
// try
// {
// //생성된지 10일이 넘은 자료는 삭제한다.
// //시간소비를 피해서 1개의 파일만 작업한다
// var sqlfiles = di.GetFiles("*.sql", System.IO.SearchOption.AllDirectories);
// //총3번의 데이터를 처리한다
// var files = sqlfiles.Where(t => t.LastWriteTime < DateTime.Now.AddDays(-10)).Select(t => t.FullName);
// int i = 0;
// var dellist = files.TakeWhile(t => i++ < 3);
// foreach (var delfile in dellist)
// System.IO.File.Delete(delfile);
// }
// catch
// {
// }
// mre.Set();
//}
}
/*
=================================================
변경내역
=================================================
230619 chi UpdateFileToDB 에서 폴더가 없다면 return 하도록 함
230615 chi UpdateFiletoDB의 ManualResetEvent적용
Version 항목 추가
230612 chi 프로그램 시작/종료 alarmid항목 추가
완료된 파일 10일간 보존하도록 함
230522 chi extrun 모드 추가(agv용 - SQL파일을 외부 프로그램에서 처리하도록 함)
230617 chi 파일쓰기함수를 Task 로 처리
3분지난데이터 삭제기능 제거
230516 chi initial commit
*/

View File

@@ -0,0 +1,107 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Project
{
public enum StepResult
{
Wait = 0,
Complete,
Error,
Cancel,
}
public enum eNextStep : byte
{
NOTHING = 0,
PAUSE,
PAUSENOMESAGE,
ERROR
}
public enum EFlag : byte
{
MINSPACE = 0,
MOTZ_LIMD,
MOTZ_LIMU,
WAIT_COVER_DOWN,
WAIT_COVER_UP,
POSITION_OUT,
FLAG_CHARGEALIGN,
//FLAG_AUTORUN,
FLAG_MOVING,
FLAG_NEXTSTOP_MARK,
FLAG_DIR_BW,
FLAG_SETUP,
FLAG_GATEOUT,
FLAG_STOP,
FLAG_LIMITHIGH,
FLAG_LIMITHIGHL,
FLAG_LIMITHIGHR,
FLAG_LIMITLOW,
FLAG_LIMITLOWL,
FLAG_LIMITLOWR,
}
public enum eECode : byte
{
NOERROR,
EMERGENCY,
NOMODELV,
USER_STOP,
USER_STEP,
AGVCONN,
PLCCONN,
MESSAGE_INFO,
MESSAGE_ERROR,
DOOFF,
DOON,
DIOFF,
DION,
NOTALLOWUP,
}
public enum eResult : byte
{
TimeOut,
Dio,
NoError,
Setting,
NoModel,
Emergency,
Sensor,
Hardware,
Motion,
HomeTimeout,
PCBDetect,
Vision,
LOT,
}
public enum ePosition : byte
{
NONE = 0,
NOT,
QA,
QA_QC,
QC,
CHARGE,
QC_F1,
F1,
F1_F2,
F2,
F2_F3,
F3,
F3_F4,
F4,
F4_F5,
F5,
POT,
}
}

80
HMI/Project/Class/Lang.cs Normal file
View File

@@ -0,0 +1,80 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
namespace Project
{
public static class Lang
{
public static string = "목적지가 설정되지 않아 대기상태로 전환 합니다";
public static string = "위치로 이동 합니다";
public static string = "전방에 물체가 감지 되었습니다";
public static string = "비상정지 신호가 감지 되었습니다";
public static string = "비상정지로 인해 작업을 중단 합니다";
public static string = "선로를 이탈 했습니다";
public static string = "충전이 필요 합니다. 자동모드로 전환 하세요";
public static string = "충전이 필요 합니다";
public static string = "배터리 통신에 문제가 있습니다";
public static string = "자동운전 상태가 아닙니다";
public static string = "비상 정지";
public static string = "연결 실패";
public static string = "현재 위치를 검색 합니다";
public static string = "충전 완료로 해제 합니다";
public static string = "장비 상태 초기화";
public static string = "충전을 시작 합니다";
public static string = "충전을 해제 합니다";
public static string = "충전을 위해 홈 위치로 이동 합니다";
public static string = "충전기 검색 실패";
public static string = "충전기를 검색 합니다";
public static string = "수동충전을 시작 합니다";
public static string = "수동충전을 해제 합니다";
public static string = "하드웨어 오류 발생";
public static string = "하드웨어 오류로 인해 진행할 수 없습니다";
public static string = "초기화 완료";
public static string = "자동 재부팅을 실행 합니다";
public static string = "충전기 작동 확인이 30초 이내로 확인이 안되어 홈으로 이동 합니다";
public static string = "충전 시작명령을 전송 합니다";
public static string = "충전기 위치 오류로 인해 작업을 취소 합니다";
public static string = "프로그램이 초기화 되었습니다";
public static string = "대기 상태로 전환 합니다";
public static string = "작업 종료";
public static string = "자동 전환";
public static string = "충전기 위치 오류";
public static string = "다음 마크위치에서 정지 합니다";
public static string = "충전이 감지되어 수동충전으로 전환 합니다";
public static string PLC연결실패 { get { return string.Format("PLC {0}", ); } }
public static string PLC통신실패 = "PLC 통신실패";
public static string AGV연결실패 { get { return string.Format("AGV {0}", ); } }
public static string = "이동 예측이 동작하지 않습니다. 개발부서에 문의 하세요";
public static string = "목적지 이동 이 완료 되었습니다";
public static string FindCurrentPisition = "현재 위치를 검색 합니다";
public static string = "상차";
public static string = "하차";
public static string = "이동 완료";
public static string = "오버로드 감지";
public static string { get { return "진출 시작"; } }
public static string { get { return "진입 시작"; } }
public static string = "안전 커버를 내려 주세요";
public static string = "안전 커버를 올려 주세요";
public static string = "안전 커버를 올리면 상차가 완료 됩니다";
public static string = "안전 커버를 내립니다";
public static string = "홈 으로 이동 합니다";
public static string = "홈 이동이 완료 되었습니다. 대기 상태로 전환 합니다";
public static string = "커버를 내립니다";
public static string = "커버를 올립니다";
public static string = "홈 위치로 이동 합니다";
public static string = "버퍼 도킹이 완료 되었습니다";
public static string = "버퍼 도킹이 해제 되었습니다";
public static string = "커버 업 대기 상태가 아닙니다";
public static string QC이동버튼은상하차에서만사용가능합니다 = "QC이동 버튼은 상,하차 에서만 사용 가능합니다";
public static string QA이동버튼은상하차에서만사용가능합니다 = "QA이동 버튼은 상,하차 에서만 사용 가능합니다";
public static string = "하차 상태에서만 사용가능 합니다";
}
}

36
HMI/Project/CtlAuto.Designer.cs generated Normal file
View File

@@ -0,0 +1,36 @@
namespace Project
{
partial class CtlAuto
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}

1096
HMI/Project/CtlAuto.cs Normal file

File diff suppressed because it is too large Load Diff

36
HMI/Project/CtlPos.Designer.cs generated Normal file
View File

@@ -0,0 +1,36 @@
namespace Project
{
partial class CtlPos
{
/// <summary>
/// 필수 디자이너 변수입니다.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 사용 중인 모든 리소스를 정리합니다.
/// </summary>
/// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region
/// <summary>
/// 디자이너 지원에 필요한 메서드입니다.
/// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}

586
HMI/Project/CtlPos.cs Normal file
View File

@@ -0,0 +1,586 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Project
{
/// <summary>
/// 2017-04-13 13:26:00 : 라벨이므로 커서 IN 시 Hand 에서 Default로 변경함
/// </summary>
public partial class CtlPos : Control
{
#region "Enum & Structure"
public enum eColorTheme : byte
{
DaeHyun = 0,
eGrayBlue,
eDarkBlue,
TopMenu,
GrayButton,
GrayTitleBar,
IOStatus,
IOStatusDepp,
BlackButton,
RedButton,
GrayOmokButton,
Stepbar,
RobotStatus,
NewGray_Group,
NewGray_BG,
NewGray_Button,
NewBlue_Button,
Custom,
}
#endregion
public string[] msg { get; set; }
public event EventHandler<ItemClickEventArgs> ItemClick;
//public new event EventHandler Click;
public CtlPos()
{
InitializeComponent();
// Set Optimized Double Buffer to reduce flickering
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.SupportsTransparentBackColor, true);
// Redraw when resized
this.SetStyle(ControlStyles.ResizeRedraw, true);
this.MouseDown += arButton_MouseDown;
this.MouseUp += arButton_MouseUp;
this.MouseEnter += arButton_MouseEnter;
this.MouseLeave += arButton_MouseLeave;
this.Resize += arLabel_Resize;
base.BackColor = Color.FromArgb(32, 32, 32);
ForeColor = Color.White;
}
~CtlPos()
{
this.MouseDown -= arButton_MouseDown;
this.MouseUp -= arButton_MouseUp;
this.MouseEnter -= arButton_MouseEnter;
this.MouseLeave -= arButton_MouseLeave;
this.Resize -= arLabel_Resize;
}
public void ClearData()
{
foreach (var item in Items)
{
item.Direction = '0';
item.Active = false;
item.Focus = false;
}
}
public void PerformClick()
{
if (Enabled == false) return; //171126
this.InvokeOnClick(this, new EventArgs());
}
void arLabel_Resize(object sender, EventArgs e)
{
if (this.MinimumSize.Width == 0 || this.MinimumSize.Height == 0)
this.MinimumSize = new Size(100, 30);
bRemakeRect = true;
Invalidate();
}
public new Padding Padding
{
get
{
return base.Padding;
}
set
{
base.Padding = value;
this.Invalidate();
}
}
public Color BorderColor { get; set; }
private int _itemgap = 0;
public int ItemGap { get { return _itemgap; } set { _itemgap = value; Invalidate(); } }
Boolean bRemakeRect = true;
public item[] Items { get; set; }
protected override void OnPaint(PaintEventArgs e)
{
//Set Optimized Double Buffer to reduce flickering
e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
e.Graphics.InterpolationMode = InterpolationMode.High;
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
if (Items == null) e.Graphics.DrawString("No Item", this.Font, Brushes.Red, 10, 10);
else
{
//영역변경시새로한다
if (bRemakeRect == true) makeRect();
//아이템그리기
var sf = new StringFormat
{
Alignment = StringAlignment.Center,
LineAlignment = StringAlignment.Center
};
foreach (var item in Items)
{
item.Draw(e.Graphics, this.Font, sf);
}
}
//전체테두리
e.Graphics.DrawRectangle(new Pen(BorderColor), DisplayRectangle.Left, DisplayRectangle.Top, DisplayRectangle.Width - 1, DisplayRectangle.Height - 1);
}
void makeRect()
{
var indiheight = (int)(DisplayRectangle.Height * 0.15);
var fullrect = new Rectangle(
DisplayRectangle.Left + Padding.Left,
DisplayRectangle.Top + Padding.Top,
DisplayRectangle.Width - Padding.Left - Padding.Right,
DisplayRectangle.Height - Padding.Top - Padding.Bottom - 1 - indiheight);
var itemCountS = this.Items.Where(t => t.ItemType != itemtype.Hidden && t.ItemType != itemtype.Item).Count();
var itemCountI = this.Items.Where(t => t.ItemType == itemtype.Item).Count();
var GapWidth = ItemGap * ((itemCountI + itemCountS) - 1);
var itemWidthS = (ItemGap * 2); //spacer width
var itemWidthI = (fullrect.Width - GapWidth - (itemWidthS * itemCountS)) / itemCountI;
var itemHeight = fullrect.Height;
var i = 0;
var x = fullrect.Left;
foreach (var item in Items)
{
if (item.ItemType == itemtype.Hidden) continue;
if (item.ItemType == itemtype.Spacer)
{
var y = fullrect.Top;
var w = (int)itemWidthS;
var h = DisplayRectangle.Height - Padding.Top - Padding.Bottom + 3;
var rectf = new Rectangle(x, y, w, h);
item.fullrect = rectf;
item.leftrect = Rectangle.Empty;
item.rightrect = Rectangle.Empty;
x += w + ItemGap;
}
else if (item.ItemType == itemtype.NLimit || item.ItemType == itemtype.PLimit)
{
var y = fullrect.Top;
var w = (int)itemWidthS;
var h = DisplayRectangle.Height - Padding.Top - Padding.Bottom + 3;
var rectf = new Rectangle(x, y, w, h);
item.fullrect = rectf;
item.leftrect = Rectangle.Empty;
item.rightrect = Rectangle.Empty;
x += w + ItemGap;
}
else if (item.Enable_Direction)
{
//var x = (int)(fullrect.Left + i * itemWidth) + (i * ItemGap);
var y = fullrect.Top;
var w = (int)itemWidthI;
var h = itemHeight;
var rectf = new Rectangle(x, y, w, h);
item.fullrect = rectf;
var indiWidth = (int)((rectf.Width - 4) / 2.0);
item.leftrect = new Rectangle(rectf.Left, rectf.Bottom + 4, indiWidth, indiheight);
item.rightrect = new Rectangle(rectf.Left + indiWidth + 4, rectf.Bottom + 4, indiWidth, indiheight);
x += itemWidthI + ItemGap;
}
else
{
//var x = (int)(fullrect.Left + i * itemWidth) + (i * ItemGap);
var y = fullrect.Top;
var w = (int)itemWidthI;
var h = DisplayRectangle.Height - Padding.Top - Padding.Bottom + 3;
var rectf = new Rectangle(x, y, w, h);
item.fullrect = rectf;
item.leftrect = Rectangle.Empty;
item.rightrect = Rectangle.Empty;
x += itemWidthI + ItemGap;
}
i += 1;
}
bRemakeRect = false;
}
// private int LastPosition = -1;
//private string LastDir = "";
//public void SetPositionOut(Boolean value)
//{
// if (LastPosition < 0 || LastPosition >= Items.Length) return;
// if (value == true)
// {
// this.Items[LastPosition].BackColor1 = Color.SkyBlue;
// this.Items[LastPosition].BackColor2 = Color.DeepSkyBlue;
// }
// this.Invalidate();
//}
/// <summary>
/// 지정한 개체를 선택합니다.
/// </summary>
/// <param name="idx"></param>
public void SetPosition(ePosition idx)
{
foreach (var item in Items)
item.Focus = false;
if (idx == ePosition.NONE) return;
var pos = Items.Where(t => t.Position == idx).First();
pos.Focus = true;
}
public bool GetPositionActive(ePosition idx)
{
if (idx == ePosition.NONE) return false;
var pos = Items.Where(t => t.Position == idx).First();
return pos.Active;
}
public void SetPositionActive(ePosition idx)
{
foreach (var item in Items)
item.Active = false;
if (idx == ePosition.NONE) return;
var pos = Items.Where(t => t.Position == idx).First();
pos.Active = true;
}
/// <summary>
/// 활성화된 위치를 모두 초기화 한다
/// </summary>
public void SetPositionDeActive()
{
foreach (var item in Items)
item.Active = false;
}
public void SetTargetPosition(ePosition idx)
{
foreach (var item in Items)
item.Target = false;
if (idx == ePosition.NONE) return;
var pos = Items.Where(t => t.Position == idx).First();
pos.Target = true;
}
/// <summary>
/// 지정한 개체의 left,right 값을 바꿉니다 .rfid값이 변경되었을때 처리합니다. dir=0이면 왼쪽이 켜집니다)
/// </summary>
/// <param name="idx"></param>
/// <param name="dir"></param>
public void SetDirection(string dir)
{
//모든 위치값이 초기화 된다.
foreach (var item in Items)
item.Direction = '0';
var selectitem = this.Items.Where(t => t.Focus).FirstOrDefault();
if (selectitem != null)
{
if (dir.isEmpty()) selectitem.Direction = '0';
else selectitem.Direction = (dir == "0" ? '1' : '2');
}
}
public enum itemtype
{
Hidden,
NLimit,
PLimit,
Spacer,
Item,
}
public class item
{
public ePosition Position { get; set; }
public itemtype ItemType { get; set; }
// public bool Hidden { get; set; }
public bool Enable_Direction { get; set; }
#region Colorlist
public Color BackColor2
{
get
{
if (Active)
{
if (ItemType == itemtype.NLimit || ItemType == itemtype.PLimit)
return Color.Tomato;
else
return Color.Lime;
}
else if (Focus)
{
if (ItemType == itemtype.NLimit || ItemType == itemtype.PLimit)
return Color.Tomato;
else
return Color.Yellow;
}
else return Color.FromArgb(82, 82, 82);
}
}
public Color BackColor1
{
get
{
if (Active)
{
if (ItemType == itemtype.NLimit || ItemType == itemtype.PLimit)
return Color.Red;
else
return Color.Green;
}
else if (Focus)
{
if (ItemType == itemtype.NLimit || ItemType == itemtype.PLimit)
return Color.Red;
else
return Color.Gold;
}
else return Color.FromArgb(64, 64, 64);
}
}
public Color ForeColor
{
get
{
if (this.Target) return Color.DarkMagenta;
else return Color.Black;
}
}
public Color ShadowColor { get { return Color.DimGray; } }
public Color BorderColor { get { return Color.Black; } }
public Color RightColor
{
get
{
if (Direction == '2')
{
if (Active) return Color.Lime;
else return Color.Gold;
}
else return Color.Transparent;
}
}
public Color LeftColor
{
get
{
if (Direction == '1')
{
if (Active) return Color.Lime;
else return Color.Gold;
}
else return Color.Transparent;
}
}
#endregion
[Browsable(false)]
public Rectangle fullrect { get; set; }
[Browsable(false)]
public Rectangle leftrect { get; set; }
[Browsable(false)]
public Rectangle rightrect { get; set; }
public bool Active { get; set; }
public bool Focus { get; set; }
public char Direction { get; set; }
public bool Target { get; set; }
public string Title { get; set; }
// public bool Spacer { get; set; }
public item()
{
Position = ePosition.NONE;
ItemType = itemtype.Item;
// Spacer = false;
fullrect = Rectangle.Empty;
leftrect = Rectangle.Empty;
rightrect = Rectangle.Empty;
Enable_Direction = true;
Active = false;
Focus = false;
Target = false;
Direction = '0';
// Hidden = false;
}
public override string ToString()
{
if (this.ItemType == itemtype.Hidden)
return $"{Title}(숨김)";
else if (this.ItemType == itemtype.Spacer)
return $"(SPACER)";
else if (this.ItemType == itemtype.NLimit)
return $"N-LIMIT";
else if (this.ItemType == itemtype.PLimit)
return $"P-LIMIT";
else
return $"{Title}";
}
public void Draw(Graphics g, Font font, StringFormat sf)
{
Pen pen_border = null;
LinearGradientBrush br_back = null;
SolidBrush br_text = null;
//배경색
//펜
if (pen_border == null) pen_border = new Pen(this.BorderColor);
else pen_border.Color = this.BorderColor;
//배경브러쉬
if (br_back == null) br_back = new LinearGradientBrush(this.fullrect, this.BackColor1, this.BackColor2, LinearGradientMode.Vertical);
else
{
br_back.LinearColors[0] = this.BackColor1;
br_back.LinearColors[1] = this.BackColor2;
}
//제목브러쉬
if (br_text == null) br_text = new SolidBrush(this.ForeColor);
else br_text.Color = this.ForeColor;
//배경표시
g.FillRectangle(br_back, this.fullrect);
//제목표시
if (this.Title.isEmpty() == false && this.ItemType == itemtype.Item)
{
if (this.ShadowColor != Color.Transparent && this.ShadowColor != this.ForeColor)
{
using (var brShadow = new SolidBrush(this.ShadowColor))
g.DrawString(
this.Title,
font, brShadow,
new Rectangle(
this.fullrect.Left + 1,
this.fullrect.Top + 1,
this.fullrect.Width,
this.fullrect.Height),
sf);
}
g.DrawString(this.Title, font, br_text, this.fullrect, sf);
g.DrawString(this.Title, font, br_text, this.fullrect, sf);
}
//테두리표시
g.DrawRectangle(pen_border, this.fullrect);
if (Enable_Direction)
{
//좌측테두리
if (this.leftrect.IsEmpty == false)
{
if (this.LeftColor != Color.Transparent)
{
using (SolidBrush sb = new SolidBrush(this.LeftColor))
g.FillRectangle(sb, this.leftrect);
}
g.DrawRectangle(pen_border, this.leftrect);
}
//우측테두리
if (this.rightrect.IsEmpty == false)
{
if (this.RightColor != Color.Transparent)
{
using (SolidBrush sb = new SolidBrush(this.RightColor))
g.FillRectangle(sb, this.rightrect);
}
g.DrawRectangle(pen_border, this.rightrect);
}
}
if (pen_border != null) pen_border.Dispose();
if (br_back != null) br_back.Dispose();
if (br_text != null) br_text.Dispose();
}
}
public class ItemClickEventArgs : EventArgs
{
public item Item { get; set; }
public ItemClickEventArgs(item item)
{
this.Item = item;
}
}
void arButton_MouseLeave(object sender, EventArgs e)
{
//isMouseOver = false;
this.Cursor = Cursors.Default;
Invalidate();
}
void arButton_MouseEnter(object sender, EventArgs e)
{
//isMouseOver = true;
this.Cursor = Cursors.Hand;
Invalidate();
}
void arButton_MouseUp(object sender, MouseEventArgs e)
{
if (!Enabled)
{
return;
}
//isMouseDown = false;
Invalidate();
}
void arButton_MouseDown(object sender, MouseEventArgs e)
{
if (Enabled == false || Enabled == false) return;
// isMouseDown = true;
//item fullrect 에서 클릭위치를 찾아야함
if (Items != null && Items.Length > 0)
{
//마우스위치가 아이템에 포함되어있다면
var focusItem = Items.Where(t => t.fullrect.Contains(e.Location)).FirstOrDefault();
if (focusItem != null)
{
ItemClick?.Invoke(this, new ItemClickEventArgs(focusItem));
}
}
Invalidate();
}
}
}

1390
HMI/Project/DataSet1.Designer.cs generated Normal file

File diff suppressed because it is too large Load Diff

11
HMI/Project/DataSet1.cs Normal file
View File

@@ -0,0 +1,11 @@
namespace Project
{
public partial class DataSet1
{
partial class ModelDataTable
{
}
}
}

9
HMI/Project/DataSet1.xsc Normal file
View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!--<autogenerated>
This code was generated by a tool.
Changes to this file may cause incorrect behavior and will be lost if
the code is regenerated.
</autogenerated>-->
<DataSetUISetting Version="1.00" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
<TableUISettings />
</DataSetUISetting>

52
HMI/Project/DataSet1.xsd Normal file
View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="DataSet1" targetNamespace="http://tempuri.org/DataSet1.xsd" xmlns:mstns="http://tempuri.org/DataSet1.xsd" xmlns="http://tempuri.org/DataSet1.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified">
<xs:annotation>
<xs:appinfo source="urn:schemas-microsoft-com:xml-msdatasource">
<DataSource DefaultConnectionIndex="0" FunctionsComponentName="QueriesTableAdapter" Modifier="AutoLayout, AnsiClass, Class, Public" SchemaSerializationMode="IncludeSchema" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
<Connections />
<Tables />
<Sources />
</DataSource>
</xs:appinfo>
</xs:annotation>
<xs:element name="DataSet1" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:EnableTableAdapterManager="true" msprop:Generator_DataSetName="DataSet1" msprop:Generator_UserDSName="DataSet1">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="ResultData" msprop:Generator_TableClassName="ResultDataDataTable" msprop:Generator_TableVarName="tableResultData" msprop:Generator_TablePropName="ResultData" msprop:Generator_RowDeletingName="ResultDataRowDeleting" msprop:Generator_RowChangingName="ResultDataRowChanging" msprop:Generator_RowEvHandlerName="ResultDataRowChangeEventHandler" msprop:Generator_RowDeletedName="ResultDataRowDeleted" msprop:Generator_UserTableName="ResultData" msprop:Generator_RowChangedName="ResultDataRowChanged" msprop:Generator_RowEvArgName="ResultDataRowChangeEvent" msprop:Generator_RowClassName="ResultDataRow">
<xs:complexType>
<xs:sequence>
<xs:element name="idx" msdata:AutoIncrement="true" msdata:AutoIncrementSeed="1" msprop:Generator_ColumnVarNameInTable="columnidx" msprop:Generator_ColumnPropNameInRow="idx" msprop:Generator_ColumnPropNameInTable="idxColumn" msprop:Generator_UserColumnName="idx" type="xs:int" />
<xs:element name="info_job" msprop:nullValue="_empty" msprop:Generator_ColumnPropNameInRow="info_job" msprop:Generator_ColumnVarNameInTable="columninfo_job" msprop:Generator_ColumnPropNameInTable="info_jobColumn" msprop:Generator_UserColumnName="info_job" type="xs:string" minOccurs="0" />
<xs:element name="info_start" msprop:nullValue="_empty" msprop:Generator_ColumnPropNameInRow="info_start" msprop:Generator_ColumnVarNameInTable="columninfo_start" msprop:Generator_ColumnPropNameInTable="info_startColumn" msprop:Generator_UserColumnName="info_start" type="xs:string" minOccurs="0" />
<xs:element name="info_end" msprop:nullValue="_empty" msprop:Generator_ColumnPropNameInRow="info_end" msprop:Generator_ColumnVarNameInTable="columninfo_end" msprop:Generator_ColumnPropNameInTable="info_endColumn" msprop:Generator_UserColumnName="info_end" type="xs:string" minOccurs="0" />
<xs:element name="info_result" msprop:nullValue="_empty" msprop:Generator_ColumnPropNameInRow="info_result" msprop:Generator_ColumnVarNameInTable="columninfo_result" msprop:Generator_ColumnPropNameInTable="info_resultColumn" msprop:Generator_UserColumnName="info_result" type="xs:string" minOccurs="0" />
<xs:element name="info_iserror" msprop:nullValue="_empty" msprop:Generator_ColumnPropNameInRow="info_iserror" msprop:Generator_ColumnVarNameInTable="columninfo_iserror" msprop:Generator_ColumnPropNameInTable="info_iserrorColumn" msprop:Generator_UserColumnName="info_iserror" type="xs:string" minOccurs="0" />
<xs:element name="info_resultcode" msprop:nullValue="_empty" msprop:Generator_ColumnPropNameInRow="info_resultcode" msprop:Generator_ColumnVarNameInTable="columninfo_resultcode" msprop:Generator_ColumnPropNameInTable="info_resultcodeColumn" msprop:Generator_UserColumnName="info_resultcode" type="xs:string" minOccurs="0" />
<xs:element name="info_filename" msprop:nullValue="_empty" msprop:Generator_ColumnPropNameInRow="info_filename" msprop:Generator_ColumnVarNameInTable="columninfo_filename" msprop:Generator_ColumnPropNameInTable="info_filenameColumn" msprop:Generator_UserColumnName="info_filename" type="xs:string" minOccurs="0" />
<xs:element name="time_start" msprop:Generator_ColumnVarNameInTable="columntime_start" msprop:Generator_ColumnPropNameInRow="time_start" msprop:Generator_ColumnPropNameInTable="time_startColumn" msprop:Generator_UserColumnName="time_start" type="xs:dateTime" minOccurs="0" />
<xs:element name="time_end" msprop:Generator_ColumnVarNameInTable="columntime_end" msprop:Generator_ColumnPropNameInRow="time_end" msprop:Generator_ColumnPropNameInTable="time_endColumn" msprop:Generator_UserColumnName="time_end" type="xs:dateTime" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="language" msprop:Generator_TableClassName="languageDataTable" msprop:Generator_TableVarName="tablelanguage" msprop:Generator_RowChangedName="languageRowChanged" msprop:Generator_TablePropName="language" msprop:Generator_RowDeletingName="languageRowDeleting" msprop:Generator_RowChangingName="languageRowChanging" msprop:Generator_RowEvHandlerName="languageRowChangeEventHandler" msprop:Generator_RowDeletedName="languageRowDeleted" msprop:Generator_RowClassName="languageRow" msprop:Generator_UserTableName="language" msprop:Generator_RowEvArgName="languageRowChangeEvent">
<xs:complexType>
<xs:sequence>
<xs:element name="Section" msprop:nullValue="_empty" msprop:Generator_ColumnPropNameInRow="Section" msprop:Generator_ColumnVarNameInTable="columnSection" msprop:Generator_ColumnPropNameInTable="SectionColumn" msprop:Generator_UserColumnName="Section" type="xs:string" />
<xs:element name="Key" msprop:nullValue="_empty" msprop:Generator_ColumnPropNameInRow="Key" msprop:Generator_ColumnVarNameInTable="columnKey" msprop:Generator_ColumnPropNameInTable="KeyColumn" msprop:Generator_UserColumnName="Key" type="xs:string" />
<xs:element name="Value" msprop:nullValue="_empty" msprop:Generator_ColumnPropNameInRow="Value" msprop:Generator_ColumnVarNameInTable="columnValue" msprop:Generator_ColumnPropNameInTable="ValueColumn" msprop:Generator_UserColumnName="Value" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:unique name="Constraint11">
<xs:selector xpath=".//mstns:ResultData" />
<xs:field xpath="mstns:idx" />
</xs:unique>
<xs:unique name="Constraint1" msdata:PrimaryKey="true">
<xs:selector xpath=".//mstns:language" />
<xs:field xpath="mstns:Key" />
<xs:field xpath="mstns:Section" />
</xs:unique>
</xs:element>
</xs:schema>

13
HMI/Project/DataSet1.xss Normal file
View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!--<autogenerated>
This code was generated by a tool to store the dataset designer's layout information.
Changes to this file may cause incorrect behavior and will be lost if
the code is regenerated.
</autogenerated>-->
<DiagramLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ex:showrelationlabel="False" ViewPortX="81" ViewPortY="1" xmlns:ex="urn:schemas-microsoft-com:xml-msdatasource-layout-extended" xmlns="urn:schemas-microsoft-com:xml-msdatasource-layout">
<Shapes>
<Shape ID="DesignTable:ResultData" ZOrder="2" X="604" Y="12" Height="219" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="215" />
<Shape ID="DesignTable:language" ZOrder="1" X="770" Y="11" Height="657" Width="158" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="653" />
</Shapes>
<Connectors />
</DiagramLayout>

605
HMI/Project/Device/BMS.cs Normal file
View File

@@ -0,0 +1,605 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Threading;
using System.Threading.Tasks;
using System.CodeDom;
namespace arDev
{
public class BMSCellInformation
{
public float[] Voltage = new float[8];
public float Average
{
get
{
if (Voltage.Any() == false) return 0f;
return Voltage.Average();
}
}
public float Delta
{
get
{
if (Voltage.Any() == false) return 0f;
var value = Math.Abs(Voltage.Max() - Voltage.Min());
return value * 1000f;
}
}
}
public class BMSBasicInformation
{
public float packVoltage { get; set; }
public float current { get; set; }
public float remainingCapacity { get; set; }
public float fullCapacity { get; set; }
public UInt16 cycleCount { get; set; }
public DateTime productionDate { get; set; }
public UInt32 fullBalance { get; set; }
public BMSProtectionStatus protectionStatus { get; set; }
public byte version { get; set; }
public byte rsoc { get; set; }
public BMSMosfetStatus mosfetStatus { get; set; }
public byte ntcCount { get; set; }
public float[] ntcTemp { get; set; }
public ushort raw_protection { get; set; }
public float watt
{
get
{
return (this.current * packVoltage);
}
}
/// <summary>
/// Remain / Full * 100
/// </summary>
public float RawLevel
{
get
{
if (fullCapacity < 1) return 0f;
return (remainingCapacity / fullCapacity) * 100f;
}
}
public BMSBasicInformation()
{
protectionStatus = new BMSProtectionStatus();
mosfetStatus = new BMSMosfetStatus();
productionDate = new DateTime();
ntcTemp = new float[] { 0f, 0f };
}
public void Clear()
{
packVoltage = 0;
current = 0;
remainingCapacity = 0;
fullBalance = 0;
fullCapacity = 0;
cycleCount = 0;
productionDate = new DateTime();
protectionStatus = new BMSProtectionStatus();
}
public override string ToString()
{
return $"packVoltage:{packVoltage}\n" +
$"current:{current}\n" +
$"remainingCapacity:{remainingCapacity}\n" +
$"fullCapacity:{fullCapacity}\n" +
$"cycleCount:{cycleCount}\n" +
$"productionDate:{productionDate}\n" +
$"fullBalance:{fullBalance}\n" +
$"protectionStatus:{protectionStatus}\n" +
$"version:{version}\n" +
$"rsoc:{rsoc}\n" +
$"mosfetStatus:{mosfetStatus}\n" +
$"ntcCount:{ntcCount}\n" +
$"ntcTemp:{ntcTemp}\n" +
$"watt:{watt}\n" +
$"RawLevel:{RawLevel}";
}
}
public class BMSProtectionStatus
{
public bool covp { get; set; }// Cell Over Voltage Protection
public bool cuvp { get; set; } // Cell Under Voltage Protection
public bool povp { get; set; } // Pack Over Voltage Protection
public bool puvp { get; set; } // Pack Under Voltage Protection
public bool chgot { get; set; }// Charge Over Temp
public bool chgut { get; set; } // Charge Under Temp
public bool dsgot { get; set; } // Discharge Over Temp
public bool dsgut { get; set; } // Discharge Under Temp
public bool chgoc { get; set; } // Charge Over Current
public bool dsgoc { get; set; } // Discharge Over Current
public bool sc { get; set; } // Short Circuit
public bool afe { get; set; } // AFE Error
public override string ToString()
{
return "BMSProtectionStatus\n" +
$"covp={covp}\n" +// { get; set; }// Cell Over Voltage Protection
$"cuvp={cuvp}\n" +// { get; set; } // Cell Under Voltage Protection
$"povp={povp}\n" +// { get; set; } // Pack Over Voltage Protection
$"puvp={puvp}\n" +// { get; set; } // Pack Under Voltage Protection
$"chgot={chgot}\n" +// { get; set; }// Charge Over Temp
$"chgut={chgut}\n" +// { get; set; } // Charge Under Temp
$"dsgot={dsgot}\n" +// { get; set; } // Discharge Over Temp
$"dsgut={dsgut}\n" +// { get; set; } // Discharge Under Temp
$"chgoc={chgoc}\n" +// { get; set; } // Charge Over Current
$"dsgoc={dsgoc}\n" +// { get; set; } // Discharge Over Current
$"sc={sc}\n" +// { get; set; } // Short Circuit
$"afe={afe}";// +// { get; set; } // AFE Error
}
}
public class BMSMosfetStatus
{
public bool charge { get; set; }
public bool discharge { get; set; }
public override string ToString()
{
return $"charge:{charge}\n" +
$"discharge:{discharge}";
}
}
public class BMS : BMSSerialComm
{
public BMS()
{
}
/// <summary>
/// 시리얼포트의 핀 상태값이 변경될 때 발생합니다.
/// </summary>
public event EventHandler<BMSInformationEventArgs> BMSDataReceive;
public event EventHandler<BMSCelvoltageEventArgs> BMSCellDataReceive;
protected override bool CustomParser(byte[] buf, out byte[] remainBuffer)
{
List<byte> remain = new List<byte>();
//데이터는 총 34byt 이며 , DD~77로 구성됨
Boolean bComplete = false;
for (int i = 0; i < buf.Length; i++)
{
var incomByte = buf[i];
if (bComplete == true)
{
remain.Add(incomByte);
}
else
{
if (findSTX == false)
{
if (incomByte != 0xDD)
{
//버리는데이터
}
else
{
findSTX = true;
tempBuffer.Clear();
tempBuffer.Add(incomByte);
}
}
else
{
tempBuffer.Add(incomByte);
if (tempBuffer.Count > 7)
{
byte len = tempBuffer[3];
if (tempBuffer.Count >= 4 + len + 3) // Start+Reg+Status+Len + Data + Chk(2) + End
{
if (tempBuffer.Last() == 0x77)
{
//데이터가 맞게 수신됨
LastReceiveBuffer = tempBuffer.ToArray();
bComplete = true;
}
else
{
//종단기호가 맞지 않다. 이자료는 폐기한다.
var hexstr = string.Join(" ", tempBuffer.Select(t => t.ToString("X2")));
RaiseMessage(MessageType.Error, $"discard : {hexstr}");
tempBuffer.Clear();
}
findSTX = false;
}
}
// [22 - 12 - 27 14:32:49] open: True
//[22 - 12 - 27 14:32:49] Send: DD A5 03 00 FF FD 77 0D
//[22 - 12 - 27 14:32:50] Send: DD A5 03 00 FF FD 77 0D
//[22 - 12 - 27 14:32:50] Recv: 26.61v,81.4 %
//[22 - 12 - 27 14:32:50] Recv: 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
//[22 - 12 - 27 14:32:50] Send: DD A5 03 00 FF FD 77 0D
//[22 - 12 - 27 14:32:51] Recv: 26.61v,81.4 %
//[22 - 12 - 27 14:32:51] Recv: 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 queylen = QueryIndex == 0 ? 34 : 23;
//if (tempBuffer.Count == queylen)
//{
// if (incomByte != 0x77)
// {
// //종단기호가 맞지 않다. 이자료는 폐기한다.
// var hexstr = string.Join(" ", tempBuffer.Select(t => t.ToString("X2")));
// RaiseMessage(MessageType.Error, $"discard : {hexstr}");
// tempBuffer.Clear();
// }
// else
// {
// //데이터가 맞게 수신됨
// LastReceiveBuffer = tempBuffer.ToArray();
// bComplete = true;
// }
// findSTX = false;
//}
//else
//{
// //아직 모자르므로 대기한다
//}
}
}
}
remainBuffer = remain.ToArray();
return bComplete;
}
bool Recv0 = false;
bool Recv1 = false;
public event EventHandler<ChargetDetectArgs> ChargeDetect;
public override bool ProcessRecvData(byte[] data)
{
//LastReceiveBuffer
if (data == null)
{
RaiseMessage(MessageType.Error, "수신 데이터가 없습니다");
return false;
}
var datalne = QueryIndex == 0 ? 34 : 23;
if (data.Length != datalne)
{
RaiseMessage(MessageType.Error, $"데이터의 길이가 {MinRecvLength}가 아닙니다 길이={data.Length}");
return false;
}
else
{
var rxstr = string.Join(" ", data.Select(t => t.ToString("X2")));
RaiseMessage(MessageType.Recv, rxstr);
}
if (QueryIndex == 0)
{
return ParseBMSInfo();
}
else
{
return ParseBMSCellVoltage();
}
}
bool ParseBMSCellVoltage()
{
//var i = 0;
var BatteryCell_Checksum = 0xffff;// - (LastReceiveBuffer[i + 3] + LastReceiveBuffer[i + 4] + LastReceiveBuffer[i + 5] + LastReceiveBuffer[i + 6] + LastReceiveBuffer[i + 7] + LastReceiveBuffer[i + 8] + LastReceiveBuffer[i + 9] + LastReceiveBuffer[i + 10] + LastReceiveBuffer[i + 11] + LastReceiveBuffer[i + 12] + LastReceiveBuffer[i + 13] + LastReceiveBuffer[i + 14] + LastReceiveBuffer[i + 15] + LastReceiveBuffer[i + 16] + LastReceiveBuffer[i + 17] + LastReceiveBuffer[i + 18] + LastReceiveBuffer[i + 19])) + 1;
for (int i = 3; i < 20; i++)
{
BatteryCell_Checksum -= LastReceiveBuffer[i];// + LastReceiveBuffer[i + 4] + LastReceiveBuffer[i + 5] + LastReceiveBuffer[i + 6] + LastReceiveBuffer[i + 7] + LastReceiveBuffer[i + 8] + LastReceiveBuffer[i + 9] + LastReceiveBuffer[i + 10] + LastReceiveBuffer[i + 11] + LastReceiveBuffer[i + 12] + LastReceiveBuffer[i + 13] + LastReceiveBuffer[i + 14] + LastReceiveBuffer[i + 15] + LastReceiveBuffer[i + 16] + LastReceiveBuffer[i + 17] + LastReceiveBuffer[i + 18] + LastReceiveBuffer[i + 19])) + 1;
}
BatteryCell_Checksum += 1;
var recvchecksum = BitConverter.ToUInt16(LastReceiveBuffer.Skip(20).Take(2).Reverse().ToArray(), 0);
if (recvchecksum == BatteryCell_Checksum)
{
var v1 = BitConverter.ToUInt16(LastReceiveBuffer.Skip(4).Take(2).Reverse().ToArray(), 0) / 1000f;
var v2 = BitConverter.ToUInt16(LastReceiveBuffer.Skip(6).Take(2).Reverse().ToArray(), 0) / 1000f;
var v3 = BitConverter.ToUInt16(LastReceiveBuffer.Skip(8).Take(2).Reverse().ToArray(), 0) / 1000f;
var v4 = BitConverter.ToUInt16(LastReceiveBuffer.Skip(10).Take(2).Reverse().ToArray(), 0) / 1000f;
var v5 = BitConverter.ToUInt16(LastReceiveBuffer.Skip(12).Take(2).Reverse().ToArray(), 0) / 1000f;
var v6 = BitConverter.ToUInt16(LastReceiveBuffer.Skip(14).Take(2).Reverse().ToArray(), 0) / 1000f;
var v7 = BitConverter.ToUInt16(LastReceiveBuffer.Skip(16).Take(2).Reverse().ToArray(), 0) / 1000f;
var v8 = BitConverter.ToUInt16(LastReceiveBuffer.Skip(18).Take(2).Reverse().ToArray(), 0) / 1000f;
var idx = 0;
BMSCellVoltage.Voltage[idx++] = v1;
BMSCellVoltage.Voltage[idx++] = v2;
BMSCellVoltage.Voltage[idx++] = v3;
BMSCellVoltage.Voltage[idx++] = v4;
BMSCellVoltage.Voltage[idx++] = v5;
BMSCellVoltage.Voltage[idx++] = v6;
BMSCellVoltage.Voltage[idx++] = v7;
BMSCellVoltage.Voltage[idx++] = v8;
Recv1 = true;
try
{
BMSCellDataReceive?.Invoke(this, new BMSCelvoltageEventArgs(v1, v2, v3, v4, v5, v6, v7, v8));
Current_CellTime = DateTime.Now;
return true;
}
catch (Exception ex)
{
RaiseMessage(MessageType.Error, ex.Message);
return false;
}
}
else return false;
}
bool ParseBMSInfo()
{
var newinfo = new BMSBasicInformation();
//전압확인
var offset = 4;
UInt16 batH = (UInt16)LastReceiveBuffer[offset + 0];
UInt16 batL = (UInt16)LastReceiveBuffer[offset + 1];
batH = (UInt16)(batH << 8);
batH = (UInt16)(batH | batL);
newinfo.packVoltage = (float)(batH / 100.0);
//충방전전류
Int16 batHi = (Int16)LastReceiveBuffer[offset + 2];
Int16 batLi = (Int16)LastReceiveBuffer[offset + 3];
batHi = (Int16)(batHi << 8);
batHi = (Int16)(batHi | batLi);
newinfo.current = (float)(batHi / 100.0);
//잔량확인
batH = (UInt16)LastReceiveBuffer[offset + 4];
batL = (UInt16)LastReceiveBuffer[offset + 5];
batH = (UInt16)(batH << 8);
batH = (UInt16)(batH | batL);
newinfo.remainingCapacity = (float)(batH / 100.0);
//총량확인
batH = (UInt16)LastReceiveBuffer[offset + 6];
batL = (UInt16)LastReceiveBuffer[offset + 7];
batH = (UInt16)(batH << 8);
batH = (UInt16)(batH | batL);
newinfo.fullCapacity = (float)(batH / 100.0);
//cycle
batH = (UInt16)LastReceiveBuffer[offset + 8];
batL = (UInt16)LastReceiveBuffer[offset + 9];
batH = (UInt16)(batH << 8);
batH = (UInt16)(batH | batL);
newinfo.cycleCount = batH;
//productiondate
batH = (UInt16)LastReceiveBuffer[offset + 10];
batL = (UInt16)LastReceiveBuffer[offset + 11];
batH = (UInt16)(batH << 8);
batH = (UInt16)(batH | batL);
var info_productiondateint = batH;
var date_year = (info_productiondateint >> 9) + 2000;
var date_month = (info_productiondateint >> 5) & 0x0F;
var date_day = info_productiondateint & 0x1F;
newinfo.productionDate = new DateTime(date_year, date_month, date_day);
//balnace status
batH = (UInt16)LastReceiveBuffer[offset + 12];
batL = (UInt16)LastReceiveBuffer[offset + 13];
batH = (UInt16)(batH << 8);
var balanceStatus = (UInt16)(batH | batL);
//balnace status(HIGH)
batH = (UInt16)LastReceiveBuffer[offset + 14];
batL = (UInt16)LastReceiveBuffer[offset + 15];
batH = (UInt16)(batH << 8);
var balanceStatusHigh = (UInt16)(batH | batL);
newinfo.fullBalance = (UInt32)(balanceStatus | (balanceStatusHigh << 16));
//protectionStatusRaw
batH = (UInt16)LastReceiveBuffer[offset + 16];
batL = (UInt16)LastReceiveBuffer[offset + 17];
batH = (UInt16)(batH << 8);
newinfo.raw_protection = batH;// view.getUint16(16, false);
var protectionStatusRaw = newinfo.raw_protection;
newinfo.protectionStatus.covp = (protectionStatusRaw & 1) > 0;
newinfo.protectionStatus.cuvp = ((protectionStatusRaw >> 1) & 1) > 0;
newinfo.protectionStatus.povp = ((protectionStatusRaw >> 2) & 1) > 0;
newinfo.protectionStatus.puvp = ((protectionStatusRaw >> 3) & 1) > 0;
newinfo.protectionStatus.chgot = ((protectionStatusRaw >> 4) & 1) > 0;
newinfo.protectionStatus.chgut = ((protectionStatusRaw >> 5) & 1) > 0;
newinfo.protectionStatus.dsgot = ((protectionStatusRaw >> 6) & 1) > 0;
newinfo.protectionStatus.dsgut = ((protectionStatusRaw >> 7) & 1) > 0;
newinfo.protectionStatus.chgoc = ((protectionStatusRaw >> 8) & 1) > 0;
newinfo.protectionStatus.dsgoc = ((protectionStatusRaw >> 9) & 1) > 0;
newinfo.protectionStatus.sc = ((protectionStatusRaw >> 10) & 1) > 0;
newinfo.protectionStatus.afe = ((protectionStatusRaw >> 11) & 1) > 0;
//version
newinfo.version = LastReceiveBuffer[offset + 18];
newinfo.rsoc = LastReceiveBuffer[offset + 19];
var mosfetRaw = LastReceiveBuffer[offset + 20];
newinfo.mosfetStatus.charge = (mosfetRaw & 1) == 1;
newinfo.mosfetStatus.discharge = ((mosfetRaw >> 1) & 1) == 1;
//250620 jwlee 추가
newinfo.ntcCount = LastReceiveBuffer[offset + 22]; //센서갯수
int temp1 = (LastReceiveBuffer[offset + 23] << 8) | LastReceiveBuffer[offset + 24];
int temp2 = (LastReceiveBuffer[offset + 25] << 8) | LastReceiveBuffer[offset + 26];
var Current_temp1 = (temp1 - 2731) / 10f;
var Current_temp2 = (temp2 - 2731) / 10f;
newinfo.ntcTemp = new float[] { (temp1 - 2731) / 10f, (temp2 - 2731) / 10f };
CheckManualCharge(newinfo);
Recv0 = true;
try
{
this.BMSInformation = newinfo;
BMSDataReceive?.Invoke(this, new BMSInformationEventArgs(BMSInformation));
Current_DataTime = DateTime.Now;
return true;
}
catch (Exception ex)
{
RaiseMessage(MessageType.Error, ex.Message);
return false;
}
}
public BMSBasicInformation BMSInformation = new BMSBasicInformation();
public BMSCellInformation BMSCellVoltage = new BMSCellInformation();
/// <summary>
/// 현재 충전중인지?
/// </summary>
public bool IsCharging { get; private set; }
DateTime ChargeStart = DateTime.Now;
DateTime ChargeEnd = DateTime.Now;
void CheckManualCharge(BMSBasicInformation info)
{
//충방전전력이 1보다 크면 충전으로 한다.
if (this.BMSInformation.current > 0.1)
{
//기존에 충전상태가 OFF였다면 충전중으로 알려준다
if (IsCharging == false)
{
IsCharging = true;
ChargeStart = DateTime.Now;
ChargeEnd = new DateTime(1982, 11, 23);
try
{
ChargeDetect?.Invoke(this, new ChargetDetectArgs(ChargeStart, true, info.RawLevel));
}
catch (Exception ex) { RaiseMessage(MessageType.Error, ex.Message); }
}
else
{
//충전상태가 유지되고 있다.
}
}
else
{
//충전이해제되었다.. 단 바로 해제하지않고 1초정도 텀을 주고 OFF한다.
if (IsCharging)
{
if (ChargeEnd.Year == 1982)
{
ChargeEnd = DateTime.Now;
}
else
{
var ts = DateTime.Now - ChargeEnd;
if (ts.TotalSeconds > 2) //충전종료시그널후 2초후에 충전off를 알린다.
{
ChargeEnd = DateTime.Now;
IsCharging = false;
try
{
ChargeDetect?.Invoke(this, new ChargetDetectArgs(ChargeEnd, false, info.RawLevel));
}
catch (Exception ex) { RaiseMessage(MessageType.Error, ex.Message); }
}
}
}
else
{
//방전상태가 유지되고 있다.
}
}
}
public DateTime chk_times { get; set; } = new DateTime(1982, 11, 23);
public DateTime chk_timee { get; set; } = new DateTime(1982, 11, 23);
public float chk_values { get; set; } = 0f;
public float chk_valuee { get; set; } = 0f;
public DateTime Current_DataTime = DateTime.Parse("1982-11-23");
public DateTime Current_CellTime = DateTime.Parse("1982-11-23");
public int QueryIndex { get; set; } = 0;
/// <summary>
/// 상태읽기와 전압읽기명령을 반복합니다
/// </summary>
/// <returns></returns>
public Boolean SendQuery()
{
if (QueryIndex == 0)
{
if (Recv0 == true)
{
QueryIndex = 1;
Recv1 = false;
return true;
}
else
{
return SendQuery_ReadStatue();
}
}
else
{
if (Recv1 == true)
{
QueryIndex = 0;
Recv0 = false;
return true;
}
else
{
return SendQuery_ReadCellvoltage();
}
}
}
public Boolean SendQuery_ReadStatue()
{
Recv0 = false;
var cmd = new List<byte>();
cmd.Add(0xDD);
cmd.Add(0xA5);
cmd.Add(0x03);
cmd.Add(0x00);
cmd.Add(0xFF);
cmd.Add(0xFD);
cmd.Add(0x77);
//cmd.Add(0x0D);
//_device.DiscardInBuffer();
return WriteData(cmd.ToArray());
}
public Boolean SendQuery_ReadCellvoltage()
{
Recv1 = false;
var cmd = new List<byte>();
cmd.Add(0xDD);
cmd.Add(0xA5);
cmd.Add(0x04);
cmd.Add(0x00);
cmd.Add(0xFF);
cmd.Add(0xFC);
cmd.Add(0x77);
//cmd.Add(0x0D);
//_device.DiscardInBuffer();
return WriteData(cmd.ToArray());
}
}
}

View File

@@ -0,0 +1,39 @@
using System;
using System.Linq;
namespace arDev
{
public class ChargetDetectArgs : EventArgs
{
public DateTime time { get; set; }
public float level { get; set; }
public bool Detected { get; set; }
public ChargetDetectArgs(DateTime times, bool detected, float values)
{
this.time = times;
this.level = values;
this.Detected = detected;
}
}
public class BMSInformationEventArgs : EventArgs
{
public BMSBasicInformation Data { get; set; }
public BMSInformationEventArgs(BMSBasicInformation info)
{
this.Data = info;
}
}
public class BMSCelvoltageEventArgs : EventArgs
{
public double[] voltage;
public BMSCelvoltageEventArgs(double v1, double v2, double v3, double v4, double v5, double v6, double v7, double v8)
{
voltage = new double[] { v1, v2, v3, v4, v5, v6, v7, v8 };
}
public override string ToString()
{
return string.Join(" ", voltage.Select(t => t.ToString()));
}
}
}

View File

@@ -0,0 +1,607 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
namespace arDev
{
public abstract class BMSSerialComm : ISerialComm, IDisposable
{
protected System.IO.Ports.SerialPort _device;
protected ManualResetEvent _mre;
protected byte[] LastReceiveBuffer = new byte[] { };
/// <summary>
/// 최종 전송 메세지
/// </summary>
public byte[] lastSendBuffer = new byte[] { };
//public int ValidCheckTimeMSec { get; set; } = 5000;
protected List<byte> tempBuffer = new List<byte>();
protected Boolean findSTX = false;
public string ErrorMessage { get; set; }
public DateTime LastConnTime { get; set; }
public DateTime LastConnTryTime { get; set; }
public DateTime lastSendTime;
/// <summary>
/// 메세지 수신시 사용하는 내부버퍼
/// </summary>
protected List<byte> _buffer = new List<byte>();
/// <summary>
/// 데이터조회간격(초)
/// </summary>
public float ScanInterval { get; set; }
// public byte[] LastRecvData;
public string LastRecvString
{
get
{
if (LastReceiveBuffer == null) return String.Empty;
else return System.Text.Encoding.Default.GetString(LastReceiveBuffer);
}
}
/// <summary>
/// 마지막으로 데이터를 받은 시간
/// </summary>
public DateTime lastRecvTime;
public int WriteError = 0;
public string WriteErrorMessage = string.Empty;
public int WaitTimeout { get; set; } = 1000;
public int MinRecvLength { get; set; } = 1;
// Polling Thread related
protected Thread _recvThread;
protected volatile bool _isReading = false;
/// <summary>
/// 포트이름
/// </summary>
[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 BMSSerialComm()
{
_device = new System.IO.Ports.SerialPort();
this.BaudRate = 9600;
ScanInterval = 10;
// _device.DataReceived += barcode_DataReceived; // Removed event handler
_device.ErrorReceived += this.barcode_ErrorReceived;
_device.WriteTimeout = 3000;
_device.ReadTimeout = 3000;
_device.ReadBufferSize = 8192;
_device.WriteBufferSize = 8192;
//_device.DiscardInBuffer();
//_device.DiscardOutBuffer();
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);
}
~BMSSerialComm()
{
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.
//
}
// Stop reading thread
_isReading = false;
// _device.DataReceived -= barcode_DataReceived; // Removed event handler
_device.ErrorReceived -= this.barcode_ErrorReceived;
if (_recvThread != null && _recvThread.IsAlive)
{
_recvThread.Join(500);
}
if (_device != null)
{
if (_device.IsOpen) _device.Close();
_device.Dispose();
}
// Free any unmanaged objects here.
//
disposed = true;
}
public Boolean Open()
{
try
{
if (_device.IsOpen == false)
{
_device.Open();
}
if (_device.IsOpen)
{
// Start polling thread
if (_isReading == false)
{
_isReading = true;
_recvThread = new Thread(ReadPort);
_recvThread.IsBackground = true;
_recvThread.Start();
}
return true;
}
return false;
}
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();
}
/// <summary>
/// 포트가 열려있는지 확인
/// </summary>
[Description("현재 시리얼포트가 열려있는지 확인합니다")]
[Category("정보"), DisplayName("Port Open")]
public Boolean IsOpen
{
get
{
if (_device == null) return false;
return _device.IsOpen;
}
}
public virtual bool Close()
{
try
{
_isReading = false; // Stop thread loop
if (_recvThread != null && _recvThread.IsAlive)
{
if (!_recvThread.Join(500)) // Wait for thread to finish
{
// _recvThread.Abort(); // Avoid Abort if possible
}
}
if (_device != null && _device.IsOpen)
{
_device.DiscardInBuffer();
_device.DiscardOutBuffer();
_device.Close(); //dispose에서는 포트를 직접 클리어하지 않게 해뒀다.
return true;
}
else return false;
}
catch (Exception)
{
return false;
}
}
protected Boolean RaiseRecvData()
{
return RaiseRecvData(LastReceiveBuffer.ToArray(), false);
}
/// <summary>
/// 수신받은 메세지를 발생 시킵니다
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public virtual Boolean RaiseRecvData(byte[] Data, bool udpatelastbuffer)
{
//181206 - 최종수신 메세지 기록
lastRecvTime = DateTime.Now;
if (udpatelastbuffer && Data != null)
{
if (LastReceiveBuffer == null || LastReceiveBuffer.Length != Data.Length)
{
LastReceiveBuffer = new byte[Data.Length];
Array.Copy(Data, LastReceiveBuffer, Data.Length);
}
}
try
{
// UI update might need Invoke if this event handler updates UI directly,
// but usually the subscriber handles Invoke.
// Since we are running on a background thread now, subscribers must be aware.
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;
}
}
/// <summary>
/// 수신받은 자료를 처리한다
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
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));
}
byte[] buffer = new byte[] { };
// Replaced with ReadPort Loop
/*
void barcode_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
int ReadCount = _device.BytesToRead;
buffer = new byte[ReadCount];
_device.Read(buffer, 0, buffer.Length);
System.Text.StringBuilder LogMsg = new StringBuilder();
byte[] remainBuffer;
Repeat:
if (CustomParser(buffer, out remainBuffer))
{
//분석완료이므로 받은 데이터를 버퍼에 기록한다
if (LastReceiveBuffer == null || (LastReceiveBuffer.Length != tempBuffer.Count))
Array.Resize(ref LastReceiveBuffer, tempBuffer.Count);
Array.Copy(tempBuffer.ToArray(), LastReceiveBuffer, tempBuffer.Count);
tempBuffer.Clear();
//수신메세지발생
RaiseRecvData();
if (remainBuffer != null && remainBuffer.Length > 0)
{
//버퍼를 변경해서 다시 전송을 해준다.
Array.Resize(ref buffer, remainBuffer.Length);
Array.Copy(remainBuffer, buffer, remainBuffer.Length);
goto Repeat; //남은 버퍼가 있다면 진행을 해준다.
}
}
}
catch (Exception ex)
{
//if (IsOpen)
//{
// //_device.DiscardInBuffer();
// //_device.DiscardOutBuffer();
//}
ErrorMessage = ex.Message;
this.Message?.Invoke(this, new MessageEventArgs(ex.Message, true));
}
}
*/
void ReadPort()
{
while (_isReading)
{
try
{
if (_device == null || !_device.IsOpen)
{
Thread.Sleep(100);
continue;
}
int readCount = _device.BytesToRead;
if (readCount > 0)
{
byte[] buffer = new byte[readCount];
_device.Read(buffer, 0, buffer.Length);
byte[] remainBuffer;
Repeat:
if (CustomParser(buffer, out remainBuffer))
{
//분석완료이므로 받은 데이터를 버퍼에 기록한다
if (LastReceiveBuffer == null || (LastReceiveBuffer.Length != tempBuffer.Count))
Array.Resize(ref LastReceiveBuffer, tempBuffer.Count);
Array.Copy(tempBuffer.ToArray(), LastReceiveBuffer, tempBuffer.Count);
tempBuffer.Clear();
//수신메세지발생
RaiseRecvData();
if (remainBuffer != null && remainBuffer.Length > 0)
{
//버퍼를 변경해서 다시 전송을 해준다.
buffer = new byte[remainBuffer.Length]; // Reallocate buffer for remaining data
Array.Copy(remainBuffer, buffer, remainBuffer.Length);
goto Repeat; //남은 버퍼가 있다면 진행을 해준다.
}
}
}
else
{
Thread.Sleep(20); // Data 없음, 대기
}
}
catch (Exception ex)
{
// Thread 상에서 Exception 발생 시 로그 남기고 계속 진행 여부 결정
// 여기서는 에러 메시지 발생시키고 Sleep
ErrorMessage = ex.Message;
this.Message?.Invoke(this, new MessageEventArgs(ex.Message, true));
Thread.Sleep(1000);
}
}
}
#endregion
#region "External Events"
/// <summary>
/// 오류 및 기타 일반 메세지
/// </summary>
public event EventHandler<MessageEventArgs> Message;
#endregion
#region "Event Args"
/// <summary>
/// 데이터를 수신할떄 사용함(RAW 포함)
/// </summary>
public class ReceiveDataEventArgs : EventArgs
{
private byte[] _buffer = null;
/// <summary>
/// 바이트배열의 버퍼값
/// </summary>
public byte[] Value { get { return _buffer; } }
/// <summary>
/// 버퍼(바이트배열)의 데이터를 문자로 반환합니다.
/// </summary>
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;
}
}
/// <summary>
/// 메세지를 강제 발생
/// </summary>
/// <param name="mt"></param>
/// <param name="message"></param>
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;
/// <summary>
/// Recv,Send,Normal,Error 모두 지원
/// </summary>
public string Message { get { return _message; } }
private byte[] _data = null;
/// <summary>
/// Recv,Send에서만 값이 존재 합니다
/// </summary>
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
protected abstract bool CustomParser(byte[] buf, out byte[] remainBuffer);
/// <summary>
/// 포트가 열려있거나 데이터 수신시간이 없는경우 false를 반환합니다
/// </summary>
public Boolean IsValid
{
get
{
if (IsOpen == false) return false;
if (lastRecvTime.Year == 1982) return false;
var ts = DateTime.Now - lastRecvTime;
if (ts.TotalSeconds > (this.ScanInterval * 2.5)) return false;
return true;
}
}
protected bool WriteData(string cmd)
{
return WriteData(System.Text.Encoding.Default.GetBytes(cmd));
}
/// <summary>
/// 포트에 쓰기(barcode_DataReceived 이벤트로 메세지수신)
/// </summary>
protected 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;
}
}
}

View File

@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Project.Device
{
public class CFlag : COMM.Flag
{
public CFlag() : base(64)
{
}
public bool get(EFlag flag)
{
return Get((int)flag);
}
public void set(EFlag flag, bool value)
{
var idx = (int)flag;
Set(idx, value);
}
public void Toggle(EFlag flag)
{
int idx = (int)flag;
var curValue = Get(idx);
Set(idx, !curValue);
}
public void Toggle(int idx)
{
var curValue = Get(idx);
Set(idx, !curValue);
}
}
}

View File

@@ -0,0 +1,427 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Project.Device
{
public class Socket
{
public enum eType
{
REQUEST,
REPLY,
}
public enum eSType
{
STATUS,
GEN,
SPL
}
public struct Message
{
public Boolean isError;
public string ErrorMessage;
public string Asset;
public eType Type;
public eSType SType;
public string Body;
public string timeStamp;
}
private Winsock_Orcas.Winsock wsListen;
private Winsock_Orcas.Winsock wsData;
private char sepMsg = (char)0x07;
private char sepBody = (char)0x09;
public int ListenPort { get; set; }
public string errorMessage { get; set; }
public event EventHandler<SocketMessageEventArgs> RecvMessage;
public event EventHandler<SocketMessageEventArgs> SendMessage;
public event EventHandler<MesasgeEventArgs> GetMessage;
private void RaiseMessage(string msg, Boolean isErr = false)
{
if (GetMessage != null) GetMessage(this, new MesasgeEventArgs(msg, isErr));
}
private void RaiseSendMessage(Message msg, string raw)
{
if (SendMessage != null)
{
try
{
SendMessage(this, new SocketMessageEventArgs(msg, raw));
}
catch (Exception ex)
{
this.errorMessage = ex.Message;
}
}
}
private void RaiseRecvMessage(Message msg, string raw)
{
if (RecvMessage != null)
{
try
{
RecvMessage(this, new SocketMessageEventArgs(msg, raw));
}
catch (Exception ex)
{
this.errorMessage = ex.Message;
}
}
}
public Socket()
{
wsListen = new Winsock_Orcas.Winsock();
wsData = new Winsock_Orcas.Winsock();
wsListen.LegacySupport = true;
wsData.LegacySupport = true;
wsData.Connected += wsData_Connected;
wsData.Disconnected += wsData_Disconnected;
wsData.DataArrival += wsData_DataArrival;
wsData.ErrorReceived += wsData_ErrorReceived;
wsListen.ConnectionRequest += wsListen_ConnectionRequest;
wsListen.ErrorReceived += wsListen_ErrorReceived;
}
void wsListen_ErrorReceived(object sender, Winsock_Orcas.WinsockErrorReceivedEventArgs e)
{
RaiseMessage("LTERR:" + e.Details, true);
}
void wsData_ErrorReceived(object sender, Winsock_Orcas.WinsockErrorReceivedEventArgs e)
{
RaiseMessage("RXERR:"+e.Details, true);
}
void wsData_Disconnected(object sender, EventArgs e)
{
RaiseMessage("Disconnected");
}
void wsData_Connected(object sender, Winsock_Orcas.WinsockConnectedEventArgs e)
{
RaiseMessage("Conncted");
}
void wsListen_ConnectionRequest(object sender, Winsock_Orcas.WinsockConnectionRequestEventArgs e)
{
if (wsData.State != Winsock_Orcas.WinsockStates.Closed)
{
wsData.Close();
System.Threading.Thread.Sleep(500);
}
RaiseMessage("Connection Request " + e.ClientIP);
try
{
wsData.Accept(e.Client);
}catch (Exception ex)
{
RaiseMessage("Connection Request\n"+ex.Message, true);
}
}
~Socket()
{
if (wsData != null)
{
wsData.DataArrival -= wsData_DataArrival;
wsData.Connected += wsData_Connected;
wsData.Disconnected += wsData_Disconnected;
}
if (wsListen != null)
{
wsListen.ConnectionRequest += wsListen_ConnectionRequest;
}
if (wsListen != null && wsListen.State != Winsock_Orcas.WinsockStates.Closed)
wsListen.Close();
if (wsData != null && wsData.State != Winsock_Orcas.WinsockStates.Closed)
wsData.Close();
wsData.Dispose();
wsListen.Dispose();
}
public Boolean Listen(int port)
{
try
{
ListenPort = port;
wsListen.Listen(this.ListenPort);
this.errorMessage = string.Empty;
return true;
}
catch (Exception ex)
{
this.errorMessage = ex.Message;
return false;
}
}
public Boolean isListen
{
get
{
return wsListen.State == Winsock_Orcas.WinsockStates.Listening;
}
}
public Boolean isConn
{
get
{
return wsData.State == Winsock_Orcas.WinsockStates.Connected;
}
}
public Message LastSendMessage = new Message();
private Message makeMessage(string Asset, eType type, eSType subtype, string body)
{
Message retval = new Message();
retval.Asset = Asset;
retval.Type = type;
retval.SType = subtype;
retval.Body = body;
retval.isError = true;
retval.ErrorMessage = string.Empty;
retval.timeStamp = DateTime.Now.ToString("yyyyMMddHHmmss");
return retval;
}
/// <summary>
/// Body문자열을 구분자를 기준으로 한 배열로 반환 함
/// </summary>
/// <param name="bodyMessage"></param>
/// <returns></returns>
public string[] getBodyArray(string bodyMessage)
{
return bodyMessage.Split(sepBody);
}
/// <summary>
/// 패킷의 내용을 메세지로 분리한다.
/// </summary>
/// <param name="PacketMessage"></param>
/// <returns></returns>
private Message ParseMessage(string PacketMessage)
{
Message retval = new Message();
retval.isError = false;
retval.ErrorMessage = string.Empty;
var buffer = PacketMessage.Split(sepMsg);
if (buffer.Length != 5)
{
retval.isError = true;
retval.ErrorMessage = "Packet Size Error : Expect 5 Array";
return retval;
}
else
{
retval.Asset = buffer[0];
if (!getType(buffer[1], out retval.Type))
{
retval.isError = true;
retval.ErrorMessage = "지정된 Type 이 아닙니다(" + buffer[1] + ")";
return retval;
}
if (!getSType(buffer[2], out retval.SType))
{
retval.isError = true;
retval.ErrorMessage = "지정된 SubType 이 아닙니다(" + buffer[2] + ")";
return retval;
}
retval.timeStamp = buffer[3];
//DateTime timeStamp;
//if (!DateTime.TryParse(retval.timeStamp, out timeStamp))
//{
// retval.isError = true;
// retval.ErrorMessage = "timeStamp 해석 오류(" + retval.timeStamp + ")";
// return retval;
//}
retval.Body = buffer[4];
}
return retval;
}
private Boolean getType(string strType, out eType type)
{
type = eType.REPLY;
var list = Enum.GetNames(typeof(eType));
int value = -1;
for (int i = 0; i < list.Length; i++)
{
if (list[i].ToUpper() == strType.ToUpper())
{
value = i;
break;
}
}
if (value == -1) return false;
type = (eType)value;
return true;
}
private Boolean getSType(string strSType, out eSType stype)
{
stype = eSType.GEN;
var list = Enum.GetNames(typeof(eSType));
int value = -1;
for (int i = 0; i < list.Length; i++)
{
if (list[i].ToUpper() == strSType.ToUpper())
{
value = i;
break;
}
}
if (value == -1) return false;
stype = (eSType)value;
return true;
}
public string makePacket(Message msg)
{
//프레임구조 asset chr(7) + type + chr(7) + stype + char(7) + timeStamp + char(7) + body"
//timestamp = yyyymmddhhmmss
//sepChar = (char)0x07;
System.Text.StringBuilder buffer = new StringBuilder();
buffer.Append(msg.Asset);
buffer.Append(sepMsg);
buffer.Append(msg.Type.ToString());
buffer.Append(sepMsg);
buffer.Append(msg.SType.ToString());
buffer.Append(sepMsg);
buffer.Append(msg.timeStamp);
buffer.Append(sepMsg);
buffer.Append(msg.Body);
return buffer.ToString();
}
public string makeLotSplitPacket( string fcst, string tcst, string slot, string wafer)
{
System.Text.StringBuilder buffer = new StringBuilder();
buffer.Append(fcst);
buffer.Append(sepBody);
buffer.Append(tcst);
buffer.Append(sepBody);
buffer.Append(slot);
buffer.Append(sepBody);
buffer.Append(wafer);
return buffer.ToString();
}
public string makeLotGenPacket(string Lot, string cst, string slot, string wafer)
{
System.Text.StringBuilder buffer = new StringBuilder();
buffer.Append(Lot);
buffer.Append(sepBody);
buffer.Append(cst);
buffer.Append(sepBody);
buffer.Append(slot);
buffer.Append(sepBody);
buffer.Append(wafer);
return buffer.ToString();
}
public enum eStatus
{
RUN =0,
IDLE ,
ALARM,
}
public string makeReplyStatus(eStatus Status)
{
System.Text.StringBuilder buffer = new StringBuilder();
buffer.Append(((int)Status).ToString());
return buffer.ToString();
}
public Boolean Send(string Asset, eType type, eSType subtype, string body)
{
var msg = makeMessage(Asset, type, subtype, body);
var isStatus = subtype == eSType.STATUS;
return Send(msg, isStatus);
}
public Boolean isReplyRecv = false;
public Boolean Send(Message msg,Boolean isStatus)
{
var packet = makePacket(msg);
if (wsData.State != Winsock_Orcas.WinsockStates.Connected)
{
errorMessage = "Not Connected";
return false;
}
try
{
if(isStatus==false) isReplyRecv = false; //190129
wsData.Send(packet + "\r\n");
errorMessage = string.Empty;
LastSendMessage = msg;
RaiseSendMessage(msg, packet);
return true;
}
catch (Exception ex)
{
errorMessage = ex.Message;
return false;
}
}
public Message LastReplyMessage = new Message();
public Message LastRecvMessage = new Message();
void wsData_DataArrival(object sender, Winsock_Orcas.WinsockDataArrivalEventArgs e)
{
var sock = sender as Winsock_Orcas.Winsock;
var data = sock.Get<String>();
if(PUB.setting.LOg_SocketRecv)
{
if (data.IndexOf("REQUEST") != -1 && data.IndexOf("STATUS") != -1)
{
//핑 명령
}
else PUB.log.AddE("Socket Recv : " + data); //190129
}
LastRecvMessage = ParseMessage(data);
if (LastRecvMessage.isError) PUB.log.AddE("Socket Message error" + LastRecvMessage.ErrorMessage);
else
{
//190129 - reply만 별도 처리함
if (LastRecvMessage.Type == eType.REPLY)
{
LastReplyMessage = ParseMessage(data);
isReplyRecv = true;
}
}
RaiseRecvMessage(LastRecvMessage, data);
}
public class SocketMessageEventArgs : EventArgs
{
public string rawData { get; set; }
public Device.Socket.Message Message { get; set; }
public SocketMessageEventArgs(Device.Socket.Message msg, string raw)
{
this.Message = msg;
this.rawData = raw;
}
}
public class MesasgeEventArgs : EventArgs
{
public string Message { get; set; }
public Boolean isError { get; set; }
public MesasgeEventArgs(string msg, Boolean iserr)
{
this.Message = msg;
this.isError = iserr;
}
}
}
}

330
HMI/Project/Device/Xbee.cs Normal file
View File

@@ -0,0 +1,330 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using System.Threading;
using COMM;
using ENIG;
using System.Security.Cryptography;
using AR;
using System.IO.Ports;
using System.Security.Cryptography.X509Certificates;
using System.Windows.Forms;
namespace Project.Device
{
public enum eDocStep : byte
{
NotSet = 0,
/// <summary>
/// 투입준비됨
/// </summary>
ReadyForEnter = 10,
/// <summary>
/// 투입완료
/// </summary>
EnterComplete = 11,
/// <summary>
/// 투입(진행중)
/// </summary>
EnterIng = 12,
/// <summary>
/// 진출완료
/// </summary>
ExitComplete = 21,
/// <summary>
/// 진출중
/// </summary>
ExitIng = 22,
}
public class Xbee : SerialPort, arDev.ISerialComm
{
public string buffer = string.Empty;
public System.Text.StringBuilder newbuffer = new StringBuilder();
public string ErrorMessage { get; set; } = string.Empty;
public DateTime LastStatusSendTime { get; set; } = DateTime.Now;
private EEProtocol proto;
public class MessageArgs : EventArgs
{
public bool IsError { get; set; }
public string Message { get; set; }
public MessageArgs(bool iserr, string m)
{
this.IsError = iserr;
this.Message = m;
}
}
public event EventHandler<MessageArgs> MessageReceived;
public event EventHandler<EEProtocol.DataEventArgs> ProtocReceived;
public Xbee()
{
this.WriteTimeout = 500;
this.ReadTimeout = 500;
this.DataReceived += Xbee_DataReceived;
proto = new EEProtocol();
proto.OnDataReceived += Proto_OnDataReceived;
proto.OnMessage += Proto_OnMessage;
}
~Xbee()
{
this.DataReceived -= Xbee_DataReceived;
proto.OnDataReceived -= Proto_OnDataReceived;
proto.OnMessage -= Proto_OnMessage;
}
/// <summary>
/// 지그비장치에 데이터를 전송합니다
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public bool Send(byte[] data)
{
try
{
this.Write(data, 0, data.Length);
return true;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
return false;
}
}
public new bool Close()
{
try
{
base.Close();
return true;
}
catch
{
return false;
}
}
public new bool Open()
{
try
{
base.Open();
return IsOpen;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
PUB.logxbee.AddE(ErrorMessage);
return false;
}
}
private void Proto_OnDataReceived(object sender, EEProtocol.DataEventArgs e)
{
var hexstrRaw = e.ReceivedPacket.RawData.HexString();
var hexstr = e.ReceivedPacket.Data.HexString();
var cmd = e.ReceivedPacket.Command.ToString("X2");
var id = e.ReceivedPacket.ID.ToString("X2");
PUB.logxbee.Add("RX", $"{hexstrRaw}\nID:{id},CMD:{cmd},DATA:{hexstr}");
ProtocReceived?.Invoke(this, e);
}
private void Proto_OnMessage(object sender, EEProtocol.MessageEventArgs e)
{
MessageReceived?.Invoke(this, new MessageArgs(e.IsError, e.Message));
}
private void Xbee_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
var dev = sender as System.IO.Ports.SerialPort;
var buffer = new byte[dev.BytesToRead];
dev.Read(buffer, 0, buffer.Length);
proto.ProcessReceivedData(buffer);
}
/// <summary>
/// 이동완료 신호 전송
/// </summary>
/// <param name="tag">목적지태그값</param>
public void SendMoveComplete(string tag)
{
var id = PUB.setting.XBE_ID;
byte cmd = (byte)ENIGProtocol.AGVCommandEH.Arrived;
var data = System.Text.Encoding.Default.GetBytes(tag);
var packet = proto.CreatePacket(id, cmd, data);
Send(packet);
}
/// <summary>
/// 신규 RFID태그값이 읽혔다면 이명령을 통해서 전송한다
/// </summary>
public void SendRFIDTag(string tag)
{
var id = PUB.setting.XBE_ID;
byte cmd = (byte)ENIGProtocol.AGVCommandEH.ReadRFID;
var data = System.Text.Encoding.Default.GetBytes(tag);
var packet = proto.CreatePacket(id, cmd, data);
Send(packet);
}
/// <summary>
/// 오류코드를 호스트에 전송합니다
/// </summary>
/// <param name="errcode"></param>
public void SendError(ENIGProtocol.AGVErrorCode errcode, string errormessage)
{
// Update global error state so it persists in Status messages
PUB.Result.RunStepErrorCode = errcode;
PUB.Result.ResultMessage = errormessage;
var id = PUB.setting.XBE_ID;
byte cmd = (byte)ENIGProtocol.AGVCommandEH.Error;
if (errormessage.Length > 30) errormessage = errormessage.Substring(0, 29);
var data = new List<byte>();
data.Add((byte)errcode);
var datamsg = System.Text.Encoding.Default.GetBytes(errormessage);
data.AddRange(datamsg);
var packet = proto.CreatePacket(id, cmd, data.ToArray());
Send(packet);
}
public eDocStep StepMC { get; set; } = eDocStep.NotSet;
ManualResetEvent sendlock = new ManualResetEvent(true);
/// <summary>
/// AGV상태를 Xbee 로 전송한다
/// </summary>
public void SendStatus()
{
if (this.IsOpen == false) return;
if (sendlock.WaitOne() == false) return;
sendlock.Reset();
/*
Mode[1] : 0=manual, 1=auto
RunSt[1] : 0=stop, 1=run, 2=error
RunStep[1] : (byte)PUB.sm.RunStep
RunStepSeq[1] : (byte)StepMC
MotorDir[1] : 0=F(Forward), 1=B(Backward)
MagnetDir[1] : 0=S(Straight), 1=L(Left), 2=R(Right)
ChargeSt[1] : 0=off, 1=on
CartSt[1] : 0=off, 1=on, 2=unknown
LiftSt[1] : 0=down , 1=up, 2=unknown
ErrorCode[1] : (byte)PUB.Result.ResultErrorCode
LastTag[4] : "0000"
*/
try
{
List<byte> data = new List<byte>();
byte value = 0;
// Autoron Mode
value = (byte)(VAR.BOOL[eVarBool.FLAG_AUTORUN] ? 1 : 0);
data.Add(value);
// RunSt
if (PUB.AGV.error.Emergency)
value = 2; // error
else if (PUB.AGV.system1.agv_run)
value = 1; // run
else
value = 0; // stop
data.Add(value);
//runstep
value = (byte)PUB.sm.RunStep;
data.Add(value);
//runstepseq
value = (byte)StepMC;
data.Add(value);
// Motor Direction
if (PUB.AGV.data.Direction == 'F')
value = 0;
else if (PUB.AGV.data.Direction == 'B')
value = 1;
else
value = 0xff; //unknown
data.Add(value);
// Magnet Direction
if (PUB.AGV.data.Sts == 'L')
value = 1; // left
else if (PUB.AGV.data.Sts == 'R')
value = 2; // right
else if (PUB.AGV.data.Sts == 'S')
value = 0; // straight
else
value = 0xFF; //unknown
data.Add(value);
// ChargeSt
value = (byte)((VAR.BOOL[eVarBool.FLAG_CHARGEONA] || VAR.BOOL[eVarBool.FLAG_CHARGEONM]) ? 1 : 0);
data.Add(value);
// CartSt
if (PUB.AGV.signal2.cart_detect1 && PUB.AGV.signal2.cart_detect2)
value = 1; // 센서두개가 모두 감지되는 경우
else if (PUB.AGV.signal2.cart_detect1 == false && PUB.AGV.signal2.cart_detect2 == false)
value = 0; // 센서두개가 모두 감지되지 않는 경우
else
value = 2; // 센서하나만 감지되는 경우
data.Add(value);
// LiftSt
if (PUB.AGV.signal1.lift_up)
value = 1; // 위로 올라가는 경우
else if (PUB.AGV.signal1.lift_down)
value = 0; // 아래로 내려가는 경우
else
value = 2; // unknown (기본값)
data.Add(value);
// ErrorCode [New RunStepErrorCode]
value = (byte)PUB.Result.RunStepErrorCode;
data.Add(value);
// LastTag
string lastTag = PUB.AGV.data.TagNo.ToString("0000") ?? "0000";
byte[] tagBytes = Encoding.ASCII.GetBytes(lastTag.PadRight(4, '0'));
data.AddRange(tagBytes);
// 데이터 전송
var cmd = (byte)ENIGProtocol.AGVCommandEH.Status;
var packet = proto.CreatePacket(PUB.setting.XBE_ID, cmd, data.ToArray());
if (Send(packet))
PUB.logxbee.AddI($"Send status [O] : {packet.Length} {packet.HexString()}");
else
PUB.logxbee.AddE($"Send status [X] : {packet.Length} {packet.HexString()}");
LastStatusSendTime = DateTime.Now;
}
catch (Exception ex)
{
ErrorMessage = ex.Message;
PUB.logxbee.AddE(ErrorMessage);
}
finally
{
sendlock.Set();
}
}
}
}

687
HMI/Project/Dialog/fCounter.Designer.cs generated Normal file
View File

@@ -0,0 +1,687 @@
namespace Project.Dialog
{
partial class fCounter
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.label3 = new System.Windows.Forms.Label();
this.label4 = new System.Windows.Forms.Label();
this.label5 = new System.Windows.Forms.Label();
this.label6 = new System.Windows.Forms.Label();
this.label7 = new System.Windows.Forms.Label();
this.label8 = new System.Windows.Forms.Label();
this.label9 = new System.Windows.Forms.Label();
this.label10 = new System.Windows.Forms.Label();
this.lbcnt1 = new arCtl.arLabel();
this.lbcnt2 = new arCtl.arLabel();
this.lbcnt3 = new arCtl.arLabel();
this.lbcnt4 = new arCtl.arLabel();
this.lbcnt5 = new arCtl.arLabel();
this.lbcnta = new arCtl.arLabel();
this.lbcntm = new arCtl.arLabel();
this.lbcnte = new arCtl.arLabel();
this.lbcntqa = new arCtl.arLabel();
this.lbcntqc = new arCtl.arLabel();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.CellBorderStyle = System.Windows.Forms.TableLayoutPanelCellBorderStyle.Single;
this.tableLayoutPanel1.ColumnCount = 5;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 20F));
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.label2, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.label3, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.label4, 3, 0);
this.tableLayoutPanel1.Controls.Add(this.label5, 4, 0);
this.tableLayoutPanel1.Controls.Add(this.label6, 4, 2);
this.tableLayoutPanel1.Controls.Add(this.label7, 3, 2);
this.tableLayoutPanel1.Controls.Add(this.label8, 2, 2);
this.tableLayoutPanel1.Controls.Add(this.label9, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.label10, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.lbcnt1, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.lbcnt2, 1, 1);
this.tableLayoutPanel1.Controls.Add(this.lbcnt3, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.lbcnt4, 3, 1);
this.tableLayoutPanel1.Controls.Add(this.lbcnt5, 4, 1);
this.tableLayoutPanel1.Controls.Add(this.lbcnta, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.lbcntm, 1, 3);
this.tableLayoutPanel1.Controls.Add(this.lbcnte, 2, 3);
this.tableLayoutPanel1.Controls.Add(this.lbcntqa, 3, 3);
this.tableLayoutPanel1.Controls.Add(this.lbcntqc, 4, 3);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 4;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
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, 20F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(392, 135);
this.tableLayoutPanel1.TabIndex = 0;
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.Location = new System.Drawing.Point(4, 1);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(71, 20);
this.label1.TabIndex = 0;
this.label1.Text = "FVI-1";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label2
//
this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
this.label2.Location = new System.Drawing.Point(82, 1);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(71, 20);
this.label2.TabIndex = 0;
this.label2.Text = "FVI-2";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label3
//
this.label3.Dock = System.Windows.Forms.DockStyle.Fill;
this.label3.Location = new System.Drawing.Point(160, 1);
this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(71, 20);
this.label3.TabIndex = 0;
this.label3.Text = "FVI-3";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label4
//
this.label4.Dock = System.Windows.Forms.DockStyle.Fill;
this.label4.Location = new System.Drawing.Point(238, 1);
this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(71, 20);
this.label4.TabIndex = 0;
this.label4.Text = "FVI-4";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label5
//
this.label5.Dock = System.Windows.Forms.DockStyle.Fill;
this.label5.Location = new System.Drawing.Point(316, 1);
this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(72, 20);
this.label5.TabIndex = 0;
this.label5.Text = "--";
this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label6
//
this.label6.Dock = System.Windows.Forms.DockStyle.Fill;
this.label6.Location = new System.Drawing.Point(316, 68);
this.label6.Name = "label6";
this.label6.Size = new System.Drawing.Size(72, 20);
this.label6.TabIndex = 0;
this.label6.Text = "QC";
this.label6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label7
//
this.label7.Dock = System.Windows.Forms.DockStyle.Fill;
this.label7.Location = new System.Drawing.Point(238, 68);
this.label7.Name = "label7";
this.label7.Size = new System.Drawing.Size(71, 20);
this.label7.TabIndex = 0;
this.label7.Text = "QA";
this.label7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label8
//
this.label8.Dock = System.Windows.Forms.DockStyle.Fill;
this.label8.Location = new System.Drawing.Point(160, 68);
this.label8.Name = "label8";
this.label8.Size = new System.Drawing.Size(71, 20);
this.label8.TabIndex = 0;
this.label8.Text = "충전실패";
this.label8.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label9
//
this.label9.Dock = System.Windows.Forms.DockStyle.Fill;
this.label9.Location = new System.Drawing.Point(82, 68);
this.label9.Name = "label9";
this.label9.Size = new System.Drawing.Size(71, 20);
this.label9.TabIndex = 0;
this.label9.Text = "충전(수동)";
this.label9.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// label10
//
this.label10.Dock = System.Windows.Forms.DockStyle.Fill;
this.label10.Location = new System.Drawing.Point(4, 68);
this.label10.Name = "label10";
this.label10.Size = new System.Drawing.Size(71, 20);
this.label10.TabIndex = 0;
this.label10.Text = "충전(자동)";
this.label10.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// lbcnt1
//
this.lbcnt1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnt1.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnt1.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbcnt1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbcnt1.BorderColorOver = System.Drawing.Color.DodgerBlue;
this.lbcnt1.BorderSize = new System.Windows.Forms.Padding(0);
this.lbcnt1.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbcnt1.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbcnt1.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbcnt1.Font = new System.Drawing.Font("Consolas", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbcnt1.ForeColor = System.Drawing.Color.White;
this.lbcnt1.GradientEnable = true;
this.lbcnt1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbcnt1.GradientRepeatBG = false;
this.lbcnt1.isButton = false;
this.lbcnt1.Location = new System.Drawing.Point(1, 22);
this.lbcnt1.Margin = new System.Windows.Forms.Padding(0);
this.lbcnt1.MouseDownColor = System.Drawing.Color.Yellow;
this.lbcnt1.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbcnt1.msg = null;
this.lbcnt1.Name = "lbcnt1";
this.lbcnt1.ProgressBorderColor = System.Drawing.Color.Black;
this.lbcnt1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbcnt1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbcnt1.ProgressEnable = false;
this.lbcnt1.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbcnt1.ProgressForeColor = System.Drawing.Color.Black;
this.lbcnt1.ProgressMax = 100F;
this.lbcnt1.ProgressMin = 0F;
this.lbcnt1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbcnt1.ProgressValue = 0F;
this.lbcnt1.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lbcnt1.Sign = "";
this.lbcnt1.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbcnt1.SignColor = System.Drawing.Color.Yellow;
this.lbcnt1.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbcnt1.Size = new System.Drawing.Size(77, 45);
this.lbcnt1.TabIndex = 5;
this.lbcnt1.Text = "99";
this.lbcnt1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbcnt1.TextShadow = true;
this.lbcnt1.TextVisible = true;
//
// lbcnt2
//
this.lbcnt2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnt2.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnt2.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbcnt2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbcnt2.BorderColorOver = System.Drawing.Color.DodgerBlue;
this.lbcnt2.BorderSize = new System.Windows.Forms.Padding(0);
this.lbcnt2.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbcnt2.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbcnt2.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbcnt2.Font = new System.Drawing.Font("Consolas", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbcnt2.ForeColor = System.Drawing.Color.White;
this.lbcnt2.GradientEnable = true;
this.lbcnt2.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbcnt2.GradientRepeatBG = false;
this.lbcnt2.isButton = false;
this.lbcnt2.Location = new System.Drawing.Point(79, 22);
this.lbcnt2.Margin = new System.Windows.Forms.Padding(0);
this.lbcnt2.MouseDownColor = System.Drawing.Color.Yellow;
this.lbcnt2.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbcnt2.msg = null;
this.lbcnt2.Name = "lbcnt2";
this.lbcnt2.ProgressBorderColor = System.Drawing.Color.Black;
this.lbcnt2.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbcnt2.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbcnt2.ProgressEnable = false;
this.lbcnt2.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbcnt2.ProgressForeColor = System.Drawing.Color.Black;
this.lbcnt2.ProgressMax = 100F;
this.lbcnt2.ProgressMin = 0F;
this.lbcnt2.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbcnt2.ProgressValue = 0F;
this.lbcnt2.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lbcnt2.Sign = "";
this.lbcnt2.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbcnt2.SignColor = System.Drawing.Color.Yellow;
this.lbcnt2.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbcnt2.Size = new System.Drawing.Size(77, 45);
this.lbcnt2.TabIndex = 5;
this.lbcnt2.Text = "99";
this.lbcnt2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbcnt2.TextShadow = true;
this.lbcnt2.TextVisible = true;
//
// lbcnt3
//
this.lbcnt3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnt3.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnt3.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbcnt3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbcnt3.BorderColorOver = System.Drawing.Color.DodgerBlue;
this.lbcnt3.BorderSize = new System.Windows.Forms.Padding(0);
this.lbcnt3.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbcnt3.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbcnt3.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbcnt3.Font = new System.Drawing.Font("Consolas", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbcnt3.ForeColor = System.Drawing.Color.White;
this.lbcnt3.GradientEnable = true;
this.lbcnt3.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbcnt3.GradientRepeatBG = false;
this.lbcnt3.isButton = false;
this.lbcnt3.Location = new System.Drawing.Point(157, 22);
this.lbcnt3.Margin = new System.Windows.Forms.Padding(0);
this.lbcnt3.MouseDownColor = System.Drawing.Color.Yellow;
this.lbcnt3.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbcnt3.msg = null;
this.lbcnt3.Name = "lbcnt3";
this.lbcnt3.ProgressBorderColor = System.Drawing.Color.Black;
this.lbcnt3.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbcnt3.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbcnt3.ProgressEnable = false;
this.lbcnt3.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbcnt3.ProgressForeColor = System.Drawing.Color.Black;
this.lbcnt3.ProgressMax = 100F;
this.lbcnt3.ProgressMin = 0F;
this.lbcnt3.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbcnt3.ProgressValue = 0F;
this.lbcnt3.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lbcnt3.Sign = "";
this.lbcnt3.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbcnt3.SignColor = System.Drawing.Color.Yellow;
this.lbcnt3.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbcnt3.Size = new System.Drawing.Size(77, 45);
this.lbcnt3.TabIndex = 5;
this.lbcnt3.Text = "99";
this.lbcnt3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbcnt3.TextShadow = true;
this.lbcnt3.TextVisible = true;
//
// lbcnt4
//
this.lbcnt4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnt4.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnt4.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbcnt4.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbcnt4.BorderColorOver = System.Drawing.Color.DodgerBlue;
this.lbcnt4.BorderSize = new System.Windows.Forms.Padding(0);
this.lbcnt4.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbcnt4.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbcnt4.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbcnt4.Font = new System.Drawing.Font("Consolas", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbcnt4.ForeColor = System.Drawing.Color.White;
this.lbcnt4.GradientEnable = true;
this.lbcnt4.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbcnt4.GradientRepeatBG = false;
this.lbcnt4.isButton = false;
this.lbcnt4.Location = new System.Drawing.Point(235, 22);
this.lbcnt4.Margin = new System.Windows.Forms.Padding(0);
this.lbcnt4.MouseDownColor = System.Drawing.Color.Yellow;
this.lbcnt4.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbcnt4.msg = null;
this.lbcnt4.Name = "lbcnt4";
this.lbcnt4.ProgressBorderColor = System.Drawing.Color.Black;
this.lbcnt4.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbcnt4.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbcnt4.ProgressEnable = false;
this.lbcnt4.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbcnt4.ProgressForeColor = System.Drawing.Color.Black;
this.lbcnt4.ProgressMax = 100F;
this.lbcnt4.ProgressMin = 0F;
this.lbcnt4.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbcnt4.ProgressValue = 0F;
this.lbcnt4.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lbcnt4.Sign = "";
this.lbcnt4.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbcnt4.SignColor = System.Drawing.Color.Yellow;
this.lbcnt4.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbcnt4.Size = new System.Drawing.Size(77, 45);
this.lbcnt4.TabIndex = 5;
this.lbcnt4.Text = "99";
this.lbcnt4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbcnt4.TextShadow = true;
this.lbcnt4.TextVisible = true;
//
// lbcnt5
//
this.lbcnt5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnt5.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnt5.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbcnt5.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbcnt5.BorderColorOver = System.Drawing.Color.DodgerBlue;
this.lbcnt5.BorderSize = new System.Windows.Forms.Padding(0);
this.lbcnt5.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbcnt5.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbcnt5.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbcnt5.Font = new System.Drawing.Font("Consolas", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbcnt5.ForeColor = System.Drawing.Color.White;
this.lbcnt5.GradientEnable = true;
this.lbcnt5.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbcnt5.GradientRepeatBG = false;
this.lbcnt5.isButton = false;
this.lbcnt5.Location = new System.Drawing.Point(313, 22);
this.lbcnt5.Margin = new System.Windows.Forms.Padding(0);
this.lbcnt5.MouseDownColor = System.Drawing.Color.Yellow;
this.lbcnt5.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbcnt5.msg = null;
this.lbcnt5.Name = "lbcnt5";
this.lbcnt5.ProgressBorderColor = System.Drawing.Color.Black;
this.lbcnt5.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbcnt5.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbcnt5.ProgressEnable = false;
this.lbcnt5.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbcnt5.ProgressForeColor = System.Drawing.Color.Black;
this.lbcnt5.ProgressMax = 100F;
this.lbcnt5.ProgressMin = 0F;
this.lbcnt5.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbcnt5.ProgressValue = 0F;
this.lbcnt5.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lbcnt5.Sign = "";
this.lbcnt5.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbcnt5.SignColor = System.Drawing.Color.Yellow;
this.lbcnt5.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbcnt5.Size = new System.Drawing.Size(78, 45);
this.lbcnt5.TabIndex = 5;
this.lbcnt5.Text = "--";
this.lbcnt5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbcnt5.TextShadow = true;
this.lbcnt5.TextVisible = true;
//
// lbcnta
//
this.lbcnta.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnta.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnta.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbcnta.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbcnta.BorderColorOver = System.Drawing.Color.DodgerBlue;
this.lbcnta.BorderSize = new System.Windows.Forms.Padding(0);
this.lbcnta.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbcnta.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbcnta.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbcnta.Font = new System.Drawing.Font("Consolas", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbcnta.ForeColor = System.Drawing.Color.White;
this.lbcnta.GradientEnable = true;
this.lbcnta.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbcnta.GradientRepeatBG = false;
this.lbcnta.isButton = false;
this.lbcnta.Location = new System.Drawing.Point(1, 89);
this.lbcnta.Margin = new System.Windows.Forms.Padding(0);
this.lbcnta.MouseDownColor = System.Drawing.Color.Yellow;
this.lbcnta.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbcnta.msg = null;
this.lbcnta.Name = "lbcnta";
this.lbcnta.ProgressBorderColor = System.Drawing.Color.Black;
this.lbcnta.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbcnta.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbcnta.ProgressEnable = false;
this.lbcnta.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbcnta.ProgressForeColor = System.Drawing.Color.Black;
this.lbcnta.ProgressMax = 100F;
this.lbcnta.ProgressMin = 0F;
this.lbcnta.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbcnta.ProgressValue = 0F;
this.lbcnta.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lbcnta.Sign = "";
this.lbcnta.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbcnta.SignColor = System.Drawing.Color.Yellow;
this.lbcnta.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbcnta.Size = new System.Drawing.Size(77, 45);
this.lbcnta.TabIndex = 5;
this.lbcnta.Text = "99";
this.lbcnta.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbcnta.TextShadow = true;
this.lbcnta.TextVisible = true;
//
// lbcntm
//
this.lbcntm.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcntm.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcntm.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbcntm.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbcntm.BorderColorOver = System.Drawing.Color.DodgerBlue;
this.lbcntm.BorderSize = new System.Windows.Forms.Padding(0);
this.lbcntm.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbcntm.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbcntm.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbcntm.Font = new System.Drawing.Font("Consolas", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbcntm.ForeColor = System.Drawing.Color.White;
this.lbcntm.GradientEnable = true;
this.lbcntm.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbcntm.GradientRepeatBG = false;
this.lbcntm.isButton = false;
this.lbcntm.Location = new System.Drawing.Point(79, 89);
this.lbcntm.Margin = new System.Windows.Forms.Padding(0);
this.lbcntm.MouseDownColor = System.Drawing.Color.Yellow;
this.lbcntm.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbcntm.msg = null;
this.lbcntm.Name = "lbcntm";
this.lbcntm.ProgressBorderColor = System.Drawing.Color.Black;
this.lbcntm.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbcntm.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbcntm.ProgressEnable = false;
this.lbcntm.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbcntm.ProgressForeColor = System.Drawing.Color.Black;
this.lbcntm.ProgressMax = 100F;
this.lbcntm.ProgressMin = 0F;
this.lbcntm.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbcntm.ProgressValue = 0F;
this.lbcntm.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lbcntm.Sign = "";
this.lbcntm.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbcntm.SignColor = System.Drawing.Color.Yellow;
this.lbcntm.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbcntm.Size = new System.Drawing.Size(77, 45);
this.lbcntm.TabIndex = 5;
this.lbcntm.Text = "99";
this.lbcntm.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbcntm.TextShadow = true;
this.lbcntm.TextVisible = true;
//
// lbcnte
//
this.lbcnte.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnte.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcnte.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbcnte.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbcnte.BorderColorOver = System.Drawing.Color.DodgerBlue;
this.lbcnte.BorderSize = new System.Windows.Forms.Padding(0);
this.lbcnte.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbcnte.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbcnte.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbcnte.Font = new System.Drawing.Font("Consolas", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbcnte.ForeColor = System.Drawing.Color.White;
this.lbcnte.GradientEnable = true;
this.lbcnte.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbcnte.GradientRepeatBG = false;
this.lbcnte.isButton = false;
this.lbcnte.Location = new System.Drawing.Point(157, 89);
this.lbcnte.Margin = new System.Windows.Forms.Padding(0);
this.lbcnte.MouseDownColor = System.Drawing.Color.Yellow;
this.lbcnte.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbcnte.msg = null;
this.lbcnte.Name = "lbcnte";
this.lbcnte.ProgressBorderColor = System.Drawing.Color.Black;
this.lbcnte.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbcnte.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbcnte.ProgressEnable = false;
this.lbcnte.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbcnte.ProgressForeColor = System.Drawing.Color.Black;
this.lbcnte.ProgressMax = 100F;
this.lbcnte.ProgressMin = 0F;
this.lbcnte.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbcnte.ProgressValue = 0F;
this.lbcnte.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lbcnte.Sign = "";
this.lbcnte.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbcnte.SignColor = System.Drawing.Color.Yellow;
this.lbcnte.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbcnte.Size = new System.Drawing.Size(77, 45);
this.lbcnte.TabIndex = 5;
this.lbcnte.Text = "99";
this.lbcnte.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbcnte.TextShadow = true;
this.lbcnte.TextVisible = true;
//
// lbcntqa
//
this.lbcntqa.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcntqa.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcntqa.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbcntqa.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbcntqa.BorderColorOver = System.Drawing.Color.DodgerBlue;
this.lbcntqa.BorderSize = new System.Windows.Forms.Padding(0);
this.lbcntqa.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbcntqa.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbcntqa.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbcntqa.Font = new System.Drawing.Font("Consolas", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbcntqa.ForeColor = System.Drawing.Color.White;
this.lbcntqa.GradientEnable = true;
this.lbcntqa.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbcntqa.GradientRepeatBG = false;
this.lbcntqa.isButton = false;
this.lbcntqa.Location = new System.Drawing.Point(235, 89);
this.lbcntqa.Margin = new System.Windows.Forms.Padding(0);
this.lbcntqa.MouseDownColor = System.Drawing.Color.Yellow;
this.lbcntqa.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbcntqa.msg = null;
this.lbcntqa.Name = "lbcntqa";
this.lbcntqa.ProgressBorderColor = System.Drawing.Color.Black;
this.lbcntqa.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbcntqa.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbcntqa.ProgressEnable = false;
this.lbcntqa.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbcntqa.ProgressForeColor = System.Drawing.Color.Black;
this.lbcntqa.ProgressMax = 100F;
this.lbcntqa.ProgressMin = 0F;
this.lbcntqa.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbcntqa.ProgressValue = 0F;
this.lbcntqa.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lbcntqa.Sign = "";
this.lbcntqa.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbcntqa.SignColor = System.Drawing.Color.Yellow;
this.lbcntqa.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbcntqa.Size = new System.Drawing.Size(77, 45);
this.lbcntqa.TabIndex = 5;
this.lbcntqa.Text = "99";
this.lbcntqa.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbcntqa.TextShadow = true;
this.lbcntqa.TextVisible = true;
//
// lbcntqc
//
this.lbcntqc.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcntqc.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.lbcntqc.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbcntqc.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbcntqc.BorderColorOver = System.Drawing.Color.DodgerBlue;
this.lbcntqc.BorderSize = new System.Windows.Forms.Padding(0);
this.lbcntqc.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbcntqc.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbcntqc.Dock = System.Windows.Forms.DockStyle.Fill;
this.lbcntqc.Font = new System.Drawing.Font("Consolas", 20.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbcntqc.ForeColor = System.Drawing.Color.White;
this.lbcntqc.GradientEnable = true;
this.lbcntqc.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbcntqc.GradientRepeatBG = false;
this.lbcntqc.isButton = false;
this.lbcntqc.Location = new System.Drawing.Point(313, 89);
this.lbcntqc.Margin = new System.Windows.Forms.Padding(0);
this.lbcntqc.MouseDownColor = System.Drawing.Color.Yellow;
this.lbcntqc.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbcntqc.msg = null;
this.lbcntqc.Name = "lbcntqc";
this.lbcntqc.ProgressBorderColor = System.Drawing.Color.Black;
this.lbcntqc.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbcntqc.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbcntqc.ProgressEnable = false;
this.lbcntqc.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbcntqc.ProgressForeColor = System.Drawing.Color.Black;
this.lbcntqc.ProgressMax = 100F;
this.lbcntqc.ProgressMin = 0F;
this.lbcntqc.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbcntqc.ProgressValue = 0F;
this.lbcntqc.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lbcntqc.Sign = "";
this.lbcntqc.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbcntqc.SignColor = System.Drawing.Color.Yellow;
this.lbcntqc.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbcntqc.Size = new System.Drawing.Size(78, 45);
this.lbcntqc.TabIndex = 5;
this.lbcntqc.Text = "99";
this.lbcntqc.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbcntqc.TextShadow = true;
this.lbcntqc.TextVisible = true;
this.lbcntqc.Click += new System.EventHandler(this.lbcntpk_Click);
//
// fCounter
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(392, 135);
this.Controls.Add(this.tableLayoutPanel1);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "fCounter";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "fCounter";
this.Load += new System.EventHandler(this.fCounter_Load);
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.Label label7;
private System.Windows.Forms.Label label8;
private System.Windows.Forms.Label label9;
private System.Windows.Forms.Label label10;
private arCtl.arLabel lbcnt1;
private arCtl.arLabel lbcnt2;
private arCtl.arLabel lbcnt3;
private arCtl.arLabel lbcnt4;
private arCtl.arLabel lbcnt5;
private arCtl.arLabel lbcnta;
private arCtl.arLabel lbcntm;
private arCtl.arLabel lbcnte;
private arCtl.arLabel lbcntqa;
private System.Windows.Forms.Label label6;
private arCtl.arLabel lbcntqc;
}
}

View File

@@ -0,0 +1,39 @@
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 Project.Dialog
{
public partial class fCounter : Form
{
public fCounter()
{
InitializeComponent();
}
private void fCounter_Load(object sender, EventArgs e)
{
lbcnt1.Text = PUB.counter.CountUp1.ToString();
lbcnt2.Text = PUB.counter.CountUp2.ToString();
lbcnt3.Text = PUB.counter.CountUp3.ToString();
lbcnt4.Text = PUB.counter.CountUp4.ToString();
//lbcnt5.Text = PUB.counter.CountUp5.ToString();
lbcnta.Text = PUB.counter.CountChargeA.ToString();
lbcntm.Text = PUB.counter.CountChargeM.ToString();
lbcnte.Text = PUB.counter.CountChargeE.ToString();
lbcntqa.Text = PUB.counter.CountQA.ToString();
lbcntqc.Text = PUB.counter.CountQC.ToString();
}
private void lbcntpk_Click(object sender, EventArgs e)
{
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,127 @@
namespace Project
{
partial class fErrorException
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fErrorException));
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.button2 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.textBox1 = new System.Windows.Forms.TextBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// pictureBox1
//
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(160, 23);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(80, 80);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.pictureBox1.TabIndex = 0;
this.pictureBox1.TabStop = false;
//
// button2
//
this.button2.Image = ((System.Drawing.Image)(resources.GetObject("button2.Image")));
this.button2.Location = new System.Drawing.Point(30, 491);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(355, 54);
this.button2.TabIndex = 2;
this.button2.Text = "종료";
this.button2.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageBeforeText;
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.BackColor = System.Drawing.Color.Brown;
this.label1.Font = new System.Drawing.Font("맑은 고딕", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.label1.ForeColor = System.Drawing.Color.White;
this.label1.Location = new System.Drawing.Point(30, 117);
this.label1.Name = "label1";
this.label1.Padding = new System.Windows.Forms.Padding(10);
this.label1.Size = new System.Drawing.Size(355, 50);
this.label1.TabIndex = 3;
this.label1.Text = "미처리 오류로 인한 프로그램 중단";
//
// label2
//
this.label2.AutoSize = true;
this.label2.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.label2.ForeColor = System.Drawing.Color.Blue;
this.label2.Location = new System.Drawing.Point(30, 182);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(311, 45);
this.label2.TabIndex = 4;
this.label2.Text = "오류보고를 위한 정보가 수집되었습니다.\r\n수집된 정보는 아래와 같고 오류가 발생하기 전의 상황을\r\n적어서 메일을 전송하면 버그 수정에 도움이 됩니" +
"다.";
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(30, 240);
this.textBox1.Multiline = true;
this.textBox1.Name = "textBox1";
this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
this.textBox1.Size = new System.Drawing.Size(355, 241);
this.textBox1.TabIndex = 5;
//
// fErrorException
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(418, 560);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.button2);
this.Controls.Add(this.pictureBox1);
this.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.KeyPreview = true;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "fErrorException";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Error Report";
this.Load += new System.EventHandler(this.fErrorException_Load);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.PictureBox pictureBox1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox textBox1;
}
}

View File

@@ -0,0 +1,39 @@
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 Project
{
public partial class fErrorException : Form
{
public fErrorException(string err)
{
InitializeComponent();
System.Text.StringBuilder sb = new StringBuilder();
sb.AppendLine("To : ChiKyun.kim@amkor.co.kr");
sb.AppendLine("Description : ?");
sb.AppendLine();
sb.AppendLine("=========================");
sb.AppendLine(" ERROR MESSAGE");
sb.AppendLine("=========================");
sb.AppendLine();
sb.AppendLine(err);
this.textBox1.Text = sb.ToString();
}
private void fErrorException_Load(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
}

View File

@@ -0,0 +1,163 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<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="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAb
rwAAG68BXhqRHAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAPnSURBVHhe7dzJ
TttQFAbgdNFKnZ6GFWKDfCNGsWRRddO+ATwBo5g2iNdopU7LqlXVFgUa2LDoE7TbQoEIFpVw72/5EOdw
INO919fx/aVfiuwTD58chcFyJSQkJJu4Urm3H0Uv95Wq7VWrx2jyOopeYF06FiLlcGbmkQZ7v6dULFav
w0w6HpINYGpKfQbUj/Hx+Pf8fHy2thafra8nr7EsQYyiT7Xh4Yfp20KQLF59cjI+XlqKL7e3W4plWBcQ
WXZHRp5qkF3AHE5NxScrKzfwqFiHmRRxF+9NN1POdINHDYhpesGjlh6xHzxqaRE53t/VVRGok5YO0SQe
tTSINvCoLYhKfR84RJt41IFFdIFHxbYHCtElHpUjfhkdfZIeTrGS4OkTcIlHLTxinnjUwiLiQPPGoxYO
0Sc8amEQTePxSDOd1ntEG1cejzTTTb1FbMGbnjaCh/JIM93WO0RbeCiPNNNLs4g1pb7lhmgTD+WRZnpt
7oi28VAeaaaf5oaIHWGHNvFQHmmm3yaI+hycIbrCQ3mkGRN1hugSD+WRZkzVOqJrPJRHmjFZa4h54KE8
0ozpGkfMCw/lkWZs1BhinngojzRjq30j5o2H8kgzNptF3Ffqa8eIPuChPNKM7XaN6AseyiPNuChHPBob
e5xytQZ3f2q81xg80L/inCwvixt0VR5pxlVhAZMEsVp9Jd4pq1c+xwBuZMwbD+WRZlwWJnSTZy2KnqVs
zegVyR8Hfs3NiRtwXR5pxnVhAyN8lFO2ZvSKc6w839gQ3+y6PNKM68IGRrpnKVszemEjAN5d3K99F2D4
CLdpu49w+BK5o22/RMKPMbcXFm1/jEEOh4bu68vzLQbrExPx8eKiuEEX5ZFmXBQGsICJ7hsYpVxyfEHk
kWZst2s8ik9XYl7tGY9SZsQsHgy6xqOUEdEYHqVMiMbxKGVAtIZHcYq4sxP/q9fjq9PTpHiNZeKsgVrH
o/ycnX3gAhFgPAmiMNtv/ywsuMGjuEC8ajRStmawTJrtp87xKEDUv/a9s4XoAjA3PIpNRNsfYY6Hc0lP
y22sIdKXyMVF0gTP0JeIN3gUjogDlA7ch3qHRykCYhYPx+oNHsVnRO/xKD4iFgaPggOkpw/ljVg4PIoP
iIXFo+SJWHg8Ch7PpE/iI07kAI90cvCPKuwD+8I+se/CPyLK5ZWYvfKwz8JeeTwuEAcWj2ITceDxKDYQ
S4NHMYlYOjyKCcTS4lESRKU+9IKI2etHgpYRj9ILYsBj6QYx4N2S8BBaA5Eeg9zY3IwbW1vhMcidBoj0
7SxWr8NMOh4iBXd/Xj8KXqlLNHkdHgUfEnIjlcp/1rPAKpMPkMkAAAAASUVORK5CYII=
</value>
</data>
<data name="button2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAL
iQAAC4kBN8nLrQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALmSURBVFhH7ZjL
ahRREIbLW7yLGxcq4k7cCaJLFwoiKAqKt5dQI4JLFZ8h4gMY0RF30YgbgwsRRYiZ3IzBG9lF3RgXXsDx
q1AtlTPTPefMtDLCfFBk5tRff1e65vR0j3TpUsALkVXjIvsmRHqJvjGRWxr6mjjH670zIitN/m+oiSym
qZPEPeI7UWsS32h2gL8ntNZs/g6ckcMcaMIdPDXGafaQ2ZXHtMg6zO8GB/MxR0wSjy30ta410mpUXoms
Nfv24D/eimGjs/aauDQqsovRLTL5H3ScnPHdaK4Q01bjY4zaLSZvDWtuJjD+RJxhgywzWVPQ9+DVy9/P
5pHFh5abtLGGZ+4po9lkkmSmRLbjEY5+lFhjkngoqjgTjQpNL7d0MnZJehR4ZtFvsjgYxylvwPuhlJGG
6DTweOI9iS/+PaM+ZvJihkSWUvDGFc9ivtHSyeQ099zGrZ/nbG2KjbXEyvLB7LQr0jhrqWTymhsWWa95
dvn5IHd8vrAIDB+6grdEj6WSaNacop9p1t67/H1LNUZNEf10BZctlURMcxnorjrNDyJ/RyM+6MQ1RrDD
UtGkNKeg3em1HPOApepBfNGJP9pyNKnNKfothMZfwC9Yqh6S153wpS1H0UpzGeiqWQ0efbZcD4L+TEgM
2nJT2mlOQfvA1d2w5XpI3nTCqAbbbU5BH92gHzHHKKaM5hQ8RrJ6Nsk1W64HYfQmKau5pE3CAaMuM2U1
p+ATf5nRAyMqvFCX2ZyCV/yFWkEw6AoWfNWV3Rx+C77q8B6wVD6IjmYFFvM3C2U3pzDO8GbhiKXy0WcJ
hP5OenZSZFvZzemdOR7+dquqG8bSxdDMfleo8TV431ZzIyKr8Rh2fr+IPZaOg4LbzsBHlXFvMFky70RW
4HEn8My/OOehnzkKw4emOb0TNkky1G7G41ng2dpDk8KoO/exM8Oa7MwH9wwbd2f+9OHhjHTmj0ceu052
5s9vIR35A2aX/wuR3/n+YvqZGUimAAAAAElFTkSuQmCC
</value>
</data>
</root>

558
HMI/Project/Dialog/fJobSelect.Designer.cs generated Normal file
View File

@@ -0,0 +1,558 @@
namespace Project.Dialog
{
partial class fJobSelect
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.tmBlink = new System.Windows.Forms.Timer(this.components);
this.arPanel1 = new arCtl.arPanel();
this.panButton = new System.Windows.Forms.Panel();
this.btYes = new arCtl.arLabel();
this.btNo = new arCtl.arLabel();
this.panel7 = new System.Windows.Forms.Panel();
this.lb5 = new arCtl.arLabel();
this.panel3 = new System.Windows.Forms.Panel();
this.lb4 = new arCtl.arLabel();
this.panel2 = new System.Windows.Forms.Panel();
this.lb3 = new arCtl.arLabel();
this.panel1 = new System.Windows.Forms.Panel();
this.lb2 = new arCtl.arLabel();
this.panel4 = new System.Windows.Forms.Panel();
this.lb1 = new arCtl.arLabel();
this.panel8 = new System.Windows.Forms.Panel();
this.lbTitle = new arCtl.arLabel();
this.arPanel1.SuspendLayout();
this.panButton.SuspendLayout();
this.SuspendLayout();
//
// tmBlink
//
this.tmBlink.Enabled = true;
this.tmBlink.Interval = 300;
this.tmBlink.Tick += new System.EventHandler(this.tmBlink_Tick);
//
// arPanel1
//
this.arPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.arPanel1.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.arPanel1.BorderColor = System.Drawing.Color.DimGray;
this.arPanel1.BorderSize = new System.Windows.Forms.Padding(1);
this.arPanel1.Controls.Add(this.panButton);
this.arPanel1.Controls.Add(this.panel7);
this.arPanel1.Controls.Add(this.lb5);
this.arPanel1.Controls.Add(this.panel3);
this.arPanel1.Controls.Add(this.lb4);
this.arPanel1.Controls.Add(this.panel2);
this.arPanel1.Controls.Add(this.lb3);
this.arPanel1.Controls.Add(this.panel1);
this.arPanel1.Controls.Add(this.lb2);
this.arPanel1.Controls.Add(this.panel4);
this.arPanel1.Controls.Add(this.lb1);
this.arPanel1.Controls.Add(this.panel8);
this.arPanel1.Controls.Add(this.lbTitle);
this.arPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.arPanel1.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Italic);
this.arPanel1.ForeColor = System.Drawing.Color.Khaki;
this.arPanel1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arPanel1.GradientRepeatBG = false;
this.arPanel1.Location = new System.Drawing.Point(5, 5);
this.arPanel1.Name = "arPanel1";
this.arPanel1.Padding = new System.Windows.Forms.Padding(6);
this.arPanel1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arPanel1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arPanel1.ProgressMax = 100F;
this.arPanel1.ProgressMin = 0F;
this.arPanel1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arPanel1.ProgressValue = 0F;
this.arPanel1.ShadowColor = System.Drawing.Color.Black;
this.arPanel1.ShowBorder = true;
this.arPanel1.Size = new System.Drawing.Size(508, 405);
this.arPanel1.TabIndex = 0;
this.arPanel1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.arPanel1.TextShadow = false;
this.arPanel1.UseProgressBar = false;
//
// panButton
//
this.panButton.Controls.Add(this.btYes);
this.panButton.Controls.Add(this.btNo);
this.panButton.Dock = System.Windows.Forms.DockStyle.Fill;
this.panButton.Location = new System.Drawing.Point(6, 353);
this.panButton.Name = "panButton";
this.panButton.Size = new System.Drawing.Size(496, 46);
this.panButton.TabIndex = 10;
//
// btYes
//
this.btYes.BackColor = System.Drawing.Color.SeaGreen;
this.btYes.BackColor2 = System.Drawing.Color.SeaGreen;
this.btYes.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.btYes.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.btYes.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.btYes.BorderSize = new System.Windows.Forms.Padding(1);
this.btYes.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.btYes.Cursor = System.Windows.Forms.Cursors.Hand;
this.btYes.Dock = System.Windows.Forms.DockStyle.Fill;
this.btYes.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btYes.ForeColor = System.Drawing.Color.Black;
this.btYes.GradientEnable = true;
this.btYes.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.btYes.GradientRepeatBG = false;
this.btYes.isButton = true;
this.btYes.Location = new System.Drawing.Point(0, 0);
this.btYes.MouseDownColor = System.Drawing.Color.Yellow;
this.btYes.MouseOverColor = System.Drawing.Color.Yellow;
this.btYes.msg = null;
this.btYes.Name = "btYes";
this.btYes.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.btYes.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.btYes.ProgressEnable = false;
this.btYes.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.btYes.ProgressForeColor = System.Drawing.Color.Black;
this.btYes.ProgressMax = 100F;
this.btYes.ProgressMin = 0F;
this.btYes.ProgressPadding = new System.Windows.Forms.Padding(0);
this.btYes.ProgressValue = 0F;
this.btYes.ShadowColor = System.Drawing.Color.Gray;
this.btYes.Sign = "";
this.btYes.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btYes.SignColor = System.Drawing.Color.Yellow;
this.btYes.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btYes.Size = new System.Drawing.Size(267, 46);
this.btYes.TabIndex = 0;
this.btYes.Text = "예(F5)";
this.btYes.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btYes.TextShadow = true;
this.btYes.TextVisible = true;
this.btYes.Click += new System.EventHandler(this.btYes_Click);
//
// btNo
//
this.btNo.BackColor = System.Drawing.Color.Goldenrod;
this.btNo.BackColor2 = System.Drawing.Color.Goldenrod;
this.btNo.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.btNo.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.btNo.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.btNo.BorderSize = new System.Windows.Forms.Padding(1);
this.btNo.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.btNo.Cursor = System.Windows.Forms.Cursors.Hand;
this.btNo.Dock = System.Windows.Forms.DockStyle.Right;
this.btNo.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btNo.ForeColor = System.Drawing.Color.Black;
this.btNo.GradientEnable = true;
this.btNo.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.btNo.GradientRepeatBG = false;
this.btNo.isButton = true;
this.btNo.Location = new System.Drawing.Point(267, 0);
this.btNo.MouseDownColor = System.Drawing.Color.Yellow;
this.btNo.MouseOverColor = System.Drawing.Color.Yellow;
this.btNo.msg = null;
this.btNo.Name = "btNo";
this.btNo.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.btNo.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.btNo.ProgressEnable = false;
this.btNo.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.btNo.ProgressForeColor = System.Drawing.Color.Black;
this.btNo.ProgressMax = 100F;
this.btNo.ProgressMin = 0F;
this.btNo.ProgressPadding = new System.Windows.Forms.Padding(0);
this.btNo.ProgressValue = 0F;
this.btNo.ShadowColor = System.Drawing.Color.Gray;
this.btNo.Sign = "";
this.btNo.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btNo.SignColor = System.Drawing.Color.Yellow;
this.btNo.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btNo.Size = new System.Drawing.Size(229, 46);
this.btNo.TabIndex = 1;
this.btNo.Text = "아니오(ESC)";
this.btNo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btNo.TextShadow = true;
this.btNo.TextVisible = true;
this.btNo.Click += new System.EventHandler(this.btNo_Click);
//
// panel7
//
this.panel7.Dock = System.Windows.Forms.DockStyle.Top;
this.panel7.Location = new System.Drawing.Point(6, 348);
this.panel7.Name = "panel7";
this.panel7.Size = new System.Drawing.Size(496, 5);
this.panel7.TabIndex = 0;
//
// lb5
//
this.lb5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb5.BackColor2 = System.Drawing.Color.Gray;
this.lb5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb5.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb5.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb5.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb5.BorderSize = new System.Windows.Forms.Padding(1);
this.lb5.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb5.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb5.Dock = System.Windows.Forms.DockStyle.Top;
this.lb5.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold);
this.lb5.ForeColor = System.Drawing.Color.White;
this.lb5.GradientEnable = true;
this.lb5.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb5.GradientRepeatBG = false;
this.lb5.isButton = false;
this.lb5.Location = new System.Drawing.Point(6, 298);
this.lb5.MouseDownColor = System.Drawing.Color.Yellow;
this.lb5.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb5.msg = null;
this.lb5.Name = "lb5";
this.lb5.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb5.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb5.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb5.ProgressEnable = false;
this.lb5.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb5.ProgressForeColor = System.Drawing.Color.Black;
this.lb5.ProgressMax = 100F;
this.lb5.ProgressMin = 0F;
this.lb5.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb5.ProgressValue = 0F;
this.lb5.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb5.Sign = "";
this.lb5.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb5.SignColor = System.Drawing.Color.Yellow;
this.lb5.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb5.Size = new System.Drawing.Size(496, 50);
this.lb5.TabIndex = 7;
this.lb5.Text = "*";
this.lb5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb5.TextShadow = true;
this.lb5.TextVisible = true;
//
// panel3
//
this.panel3.Dock = System.Windows.Forms.DockStyle.Top;
this.panel3.Location = new System.Drawing.Point(6, 293);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(496, 5);
this.panel3.TabIndex = 13;
//
// lb4
//
this.lb4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb4.BackColor2 = System.Drawing.Color.Gray;
this.lb4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb4.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb4.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb4.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb4.BorderSize = new System.Windows.Forms.Padding(1);
this.lb4.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb4.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb4.Dock = System.Windows.Forms.DockStyle.Top;
this.lb4.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold);
this.lb4.ForeColor = System.Drawing.Color.White;
this.lb4.GradientEnable = true;
this.lb4.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb4.GradientRepeatBG = false;
this.lb4.isButton = false;
this.lb4.Location = new System.Drawing.Point(6, 243);
this.lb4.MouseDownColor = System.Drawing.Color.Yellow;
this.lb4.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb4.msg = null;
this.lb4.Name = "lb4";
this.lb4.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb4.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb4.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb4.ProgressEnable = false;
this.lb4.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb4.ProgressForeColor = System.Drawing.Color.Black;
this.lb4.ProgressMax = 100F;
this.lb4.ProgressMin = 0F;
this.lb4.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb4.ProgressValue = 0F;
this.lb4.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb4.Sign = "";
this.lb4.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb4.SignColor = System.Drawing.Color.Yellow;
this.lb4.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb4.Size = new System.Drawing.Size(496, 50);
this.lb4.TabIndex = 6;
this.lb4.Text = "*";
this.lb4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb4.TextShadow = true;
this.lb4.TextVisible = true;
//
// panel2
//
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
this.panel2.Location = new System.Drawing.Point(6, 238);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(496, 5);
this.panel2.TabIndex = 12;
//
// lb3
//
this.lb3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb3.BackColor2 = System.Drawing.Color.Gray;
this.lb3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb3.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb3.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb3.BorderSize = new System.Windows.Forms.Padding(1);
this.lb3.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb3.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb3.Dock = System.Windows.Forms.DockStyle.Top;
this.lb3.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold);
this.lb3.ForeColor = System.Drawing.Color.White;
this.lb3.GradientEnable = true;
this.lb3.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb3.GradientRepeatBG = false;
this.lb3.isButton = false;
this.lb3.Location = new System.Drawing.Point(6, 188);
this.lb3.MouseDownColor = System.Drawing.Color.Yellow;
this.lb3.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb3.msg = null;
this.lb3.Name = "lb3";
this.lb3.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb3.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb3.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb3.ProgressEnable = false;
this.lb3.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb3.ProgressForeColor = System.Drawing.Color.Black;
this.lb3.ProgressMax = 100F;
this.lb3.ProgressMin = 0F;
this.lb3.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb3.ProgressValue = 0F;
this.lb3.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb3.Sign = "";
this.lb3.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb3.SignColor = System.Drawing.Color.Yellow;
this.lb3.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb3.Size = new System.Drawing.Size(496, 50);
this.lb3.TabIndex = 5;
this.lb3.Text = "* 현재 위치 : ";
this.lb3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb3.TextShadow = true;
this.lb3.TextVisible = true;
//
// panel1
//
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
this.panel1.Location = new System.Drawing.Point(6, 183);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(496, 5);
this.panel1.TabIndex = 11;
//
// lb2
//
this.lb2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb2.BackColor2 = System.Drawing.Color.Gray;
this.lb2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb2.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb2.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb2.BorderSize = new System.Windows.Forms.Padding(1);
this.lb2.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb2.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb2.Dock = System.Windows.Forms.DockStyle.Top;
this.lb2.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold);
this.lb2.ForeColor = System.Drawing.Color.White;
this.lb2.GradientEnable = true;
this.lb2.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb2.GradientRepeatBG = false;
this.lb2.isButton = false;
this.lb2.Location = new System.Drawing.Point(6, 133);
this.lb2.MouseDownColor = System.Drawing.Color.Yellow;
this.lb2.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb2.msg = null;
this.lb2.Name = "lb2";
this.lb2.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb2.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb2.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb2.ProgressEnable = false;
this.lb2.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb2.ProgressForeColor = System.Drawing.Color.Black;
this.lb2.ProgressMax = 100F;
this.lb2.ProgressMin = 0F;
this.lb2.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb2.ProgressValue = 0F;
this.lb2.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb2.Sign = "";
this.lb2.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb2.SignColor = System.Drawing.Color.Yellow;
this.lb2.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb2.Size = new System.Drawing.Size(496, 50);
this.lb2.TabIndex = 4;
this.lb2.Text = "* 호출 위치 : F1";
this.lb2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb2.TextShadow = true;
this.lb2.TextVisible = true;
//
// panel4
//
this.panel4.Dock = System.Windows.Forms.DockStyle.Top;
this.panel4.Location = new System.Drawing.Point(6, 128);
this.panel4.Name = "panel4";
this.panel4.Size = new System.Drawing.Size(496, 5);
this.panel4.TabIndex = 14;
//
// lb1
//
this.lb1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb1.BackColor2 = System.Drawing.Color.Gray;
this.lb1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb1.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb1.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb1.BorderSize = new System.Windows.Forms.Padding(1);
this.lb1.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb1.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb1.Dock = System.Windows.Forms.DockStyle.Top;
this.lb1.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold);
this.lb1.ForeColor = System.Drawing.Color.White;
this.lb1.GradientEnable = true;
this.lb1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb1.GradientRepeatBG = false;
this.lb1.isButton = false;
this.lb1.Location = new System.Drawing.Point(6, 78);
this.lb1.MouseDownColor = System.Drawing.Color.Yellow;
this.lb1.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb1.msg = null;
this.lb1.Name = "lb1";
this.lb1.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb1.ProgressEnable = false;
this.lb1.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb1.ProgressForeColor = System.Drawing.Color.Black;
this.lb1.ProgressMax = 100F;
this.lb1.ProgressMin = 0F;
this.lb1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb1.ProgressValue = 0F;
this.lb1.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb1.Sign = "";
this.lb1.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb1.SignColor = System.Drawing.Color.Yellow;
this.lb1.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb1.Size = new System.Drawing.Size(496, 50);
this.lb1.TabIndex = 2;
this.lb1.Text = "* 작업 : 상차";
this.lb1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb1.TextShadow = true;
this.lb1.TextVisible = true;
//
// panel8
//
this.panel8.Dock = System.Windows.Forms.DockStyle.Top;
this.panel8.Location = new System.Drawing.Point(6, 73);
this.panel8.Name = "panel8";
this.panel8.Size = new System.Drawing.Size(496, 5);
this.panel8.TabIndex = 18;
//
// lbTitle
//
this.lbTitle.BackColor = System.Drawing.Color.Brown;
this.lbTitle.BackColor2 = System.Drawing.Color.Tomato;
this.lbTitle.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lbTitle.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbTitle.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbTitle.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbTitle.BorderSize = new System.Windows.Forms.Padding(1);
this.lbTitle.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbTitle.Cursor = System.Windows.Forms.Cursors.Hand;
this.lbTitle.Dock = System.Windows.Forms.DockStyle.Top;
this.lbTitle.Font = new System.Drawing.Font("맑은 고딕", 22F, System.Drawing.FontStyle.Bold);
this.lbTitle.ForeColor = System.Drawing.Color.WhiteSmoke;
this.lbTitle.GradientEnable = true;
this.lbTitle.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Horizontal;
this.lbTitle.GradientRepeatBG = false;
this.lbTitle.isButton = true;
this.lbTitle.Location = new System.Drawing.Point(6, 6);
this.lbTitle.MouseDownColor = System.Drawing.Color.Yellow;
this.lbTitle.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbTitle.msg = null;
this.lbTitle.Name = "lbTitle";
this.lbTitle.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbTitle.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbTitle.ProgressEnable = false;
this.lbTitle.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbTitle.ProgressForeColor = System.Drawing.Color.Black;
this.lbTitle.ProgressMax = 100F;
this.lbTitle.ProgressMin = 0F;
this.lbTitle.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbTitle.ProgressValue = 0F;
this.lbTitle.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.lbTitle.Sign = "";
this.lbTitle.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbTitle.SignColor = System.Drawing.Color.Yellow;
this.lbTitle.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbTitle.Size = new System.Drawing.Size(496, 67);
this.lbTitle.TabIndex = 3;
this.lbTitle.Text = "작업 설정";
this.lbTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbTitle.TextShadow = true;
this.lbTitle.TextVisible = true;
this.lbTitle.Click += new System.EventHandler(this.lbTitle_Click);
//
// fJobSelect
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(200)))), ((int)(((byte)(200)))), ((int)(((byte)(200)))));
this.ClientSize = new System.Drawing.Size(518, 415);
this.Controls.Add(this.arPanel1);
this.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.KeyPreview = true;
this.MaximizeBox = false;
this.Name = "fJobSelect";
this.Padding = new System.Windows.Forms.Padding(5);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Message Window";
this.TopMost = true;
this.Load += new System.EventHandler(this.fMsg_Load);
this.arPanel1.ResumeLayout(false);
this.panButton.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
public arCtl.arLabel lb1;
private arCtl.arPanel arPanel1;
public arCtl.arLabel lbTitle;
public arCtl.arLabel lb5;
public arCtl.arLabel lb4;
public arCtl.arLabel lb3;
public arCtl.arLabel lb2;
private System.Windows.Forms.Timer tmBlink;
public arCtl.arLabel btYes;
public arCtl.arLabel btNo;
private System.Windows.Forms.Panel panButton;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel7;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Panel panel4;
private System.Windows.Forms.Panel panel8;
}
}

View File

@@ -0,0 +1,170 @@
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 Project.Dialog
{
public partial class fJobSelect : Form
{
private Boolean fMove = false;
private Point MDownPos;
private string _msg = string.Empty;
public fJobSelect()
{
InitializeComponent();
}
public fJobSelect(string msg)
{
InitializeComponent();
this.FormClosing += fMsgWindow_FormClosing;
this.KeyDown += FJobSelect_KeyDown;
this._msg = msg;
setMessage(msg);
this.lbTitle.MouseMove += label1_MouseMove;
lbTitle.MouseUp += label1_MouseUp;
lbTitle.MouseDown += label1_MouseDown;
lbTitle.MouseDoubleClick += label1_MouseDoubleClick;
}
void fMsgWindow_FormClosing(object sender, FormClosingEventArgs e)
{
}
private void fMsg_Load(object sender, EventArgs e)
{
}
private void FJobSelect_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
e.Handled = true;
e.SuppressKeyPress = false;
DialogResult = DialogResult.Cancel;
this.Close();
}
else if (e.KeyCode == Keys.F5)
btYes.PerformClick();
}
public void setMessage(string msg)
{
//msg를 분리해서 표시를 한다.
var lbs = new arCtl.arLabel[] { lbTitle, lb1, lb2, lb3, lb4, lb5 };
var lineBuf = msg.Replace("\r", "").Split('\n');
int maxLine = Math.Min(lbs.Length, lineBuf.Length);
for (int i = 0; i < lbs.Length; i++) //최대줄을 넘어가는건 표시불가
{
if (i >= lineBuf.Length)
{
lbs[i].Text = string.Empty;
}
else
{
if (i > 0) lbs[i].Text = string.Format("{0}. {1}", i, lineBuf[i]);
else lbs[i].Text = lineBuf[i];
}
}
}
private void label1_MouseMove(object sender, MouseEventArgs e)
{
if (fMove)
{
Point offset = new Point(e.X - MDownPos.X, e.Y - MDownPos.Y);
this.Left += offset.X;
this.Top += offset.Y;
offset = new Point(0, 0);
}
}
private void label1_MouseUp(object sender, MouseEventArgs e)
{
fMove = false;
}
private void label1_MouseDown(object sender, MouseEventArgs e)
{
MDownPos = new Point(e.X, e.Y);
fMove = true;
}
private void label1_MouseDoubleClick(object sender, MouseEventArgs e)
{
}
public enum EWinColor
{
Attention = 0,
Error,
Information
}
public void SetWindowColor(EWinColor wincolor)
{
switch (wincolor)
{
case EWinColor.Attention:
lbTitle.BackColor = Color.Gold;
lbTitle.BackColor2 = Color.Orange;
lbTitle.ShadowColor = Color.FromArgb(150, 150, 150);
lbTitle.ForeColor = Color.FromArgb(50, 50, 50);
break;
case EWinColor.Error:
lbTitle.BackColor = Color.Brown;
lbTitle.BackColor2 = Color.Tomato;
lbTitle.ShadowColor = Color.FromArgb(50, 50, 50);
lbTitle.ForeColor = Color.WhiteSmoke;
break;
default:
lbTitle.BackColor = Color.DarkTurquoise;
lbTitle.BackColor2 = Color.LightSkyBlue;
lbTitle.ShadowColor = Color.FromArgb(50, 50, 50);
lbTitle.ForeColor = Color.WhiteSmoke;
break;
}
}
private void lbTitle_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
private void tmBlink_Tick(object sender, EventArgs e)
{
var bg1 = lbTitle.BackColor;
var bg2 = lbTitle.BackColor2;
if (bg1 != null) lbTitle.BackColor2 = (Color)bg1;
if (bg2 != null) lbTitle.BackColor = (Color)bg2;
}
private void btYes_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Yes;
this.Close();
}
private void btNo_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
this.Close();
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="tmBlink.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

267
HMI/Project/Dialog/fLog.Designer.cs generated Normal file
View File

@@ -0,0 +1,267 @@
namespace Project.Dialog
{
partial class fLog
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.rtsys = new arCtl.LogTextBox();
this.rtTx = new arCtl.LogTextBox();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.panel1 = new System.Windows.Forms.Panel();
this.rtXbee = new arCtl.LogTextBox();
this.titleXBEE = new System.Windows.Forms.Label();
this.panel2 = new System.Windows.Forms.Panel();
this.rtBMS = new arCtl.LogTextBox();
this.titleBMS = new System.Windows.Forms.Label();
this.panel4 = new System.Windows.Forms.Panel();
this.rtAGV = new arCtl.LogTextBox();
this.titleAGV = new System.Windows.Forms.Label();
this.tableLayoutPanel1.SuspendLayout();
this.panel1.SuspendLayout();
this.panel2.SuspendLayout();
this.panel4.SuspendLayout();
this.SuspendLayout();
//
// rtsys
//
this.rtsys.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.rtsys.ColorList = new arCtl.sLogMessageColor[0];
this.tableLayoutPanel1.SetColumnSpan(this.rtsys, 2);
this.rtsys.DateFormat = "mm:ss.fff";
this.rtsys.DefaultColor = System.Drawing.Color.LightGray;
this.rtsys.Dock = System.Windows.Forms.DockStyle.Fill;
this.rtsys.EnableDisplayTimer = false;
this.rtsys.EnableGubunColor = true;
this.rtsys.Font = new System.Drawing.Font("맑은 고딕", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rtsys.ListFormat = "[{0}] {1}";
this.rtsys.Location = new System.Drawing.Point(3, 3);
this.rtsys.MaxListCount = ((ushort)(1000));
this.rtsys.MaxTextLength = ((uint)(400000u));
this.rtsys.MessageInterval = 50;
this.rtsys.Name = "rtsys";
this.rtsys.Size = new System.Drawing.Size(334, 340);
this.rtsys.TabIndex = 0;
this.rtsys.Text = "";
//
// rtTx
//
this.rtTx.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.rtTx.ColorList = new arCtl.sLogMessageColor[0];
this.tableLayoutPanel1.SetColumnSpan(this.rtTx, 2);
this.rtTx.DateFormat = "mm:ss.fff";
this.rtTx.DefaultColor = System.Drawing.Color.LightGray;
this.rtTx.Dock = System.Windows.Forms.DockStyle.Fill;
this.rtTx.EnableDisplayTimer = false;
this.rtTx.EnableGubunColor = true;
this.rtTx.Font = new System.Drawing.Font("맑은 고딕", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rtTx.ListFormat = "[{0}] {1}";
this.rtTx.Location = new System.Drawing.Point(343, 3);
this.rtTx.MaxListCount = ((ushort)(1000));
this.rtTx.MaxTextLength = ((uint)(400000u));
this.rtTx.MessageInterval = 50;
this.rtTx.Name = "rtTx";
this.rtTx.Size = new System.Drawing.Size(335, 340);
this.rtTx.TabIndex = 1;
this.rtTx.Text = "";
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 4;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.Controls.Add(this.rtsys, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.rtTx, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.panel1, 1, 1);
this.tableLayoutPanel1.Controls.Add(this.panel2, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.panel4, 0, 1);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 2;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 70F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 30F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(681, 495);
this.tableLayoutPanel1.TabIndex = 2;
//
// panel1
//
this.panel1.Controls.Add(this.rtXbee);
this.panel1.Controls.Add(this.titleXBEE);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(173, 349);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(164, 143);
this.panel1.TabIndex = 3;
//
// rtXbee
//
this.rtXbee.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.rtXbee.ColorList = new arCtl.sLogMessageColor[0];
this.rtXbee.DateFormat = "mm:ss.fff";
this.rtXbee.DefaultColor = System.Drawing.Color.LightGray;
this.rtXbee.Dock = System.Windows.Forms.DockStyle.Fill;
this.rtXbee.EnableDisplayTimer = false;
this.rtXbee.EnableGubunColor = true;
this.rtXbee.Font = new System.Drawing.Font("맑은 고딕", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rtXbee.ListFormat = "[{0}] {1}";
this.rtXbee.Location = new System.Drawing.Point(0, 14);
this.rtXbee.MaxListCount = ((ushort)(1000));
this.rtXbee.MaxTextLength = ((uint)(400000u));
this.rtXbee.MessageInterval = 50;
this.rtXbee.Name = "rtXbee";
this.rtXbee.Size = new System.Drawing.Size(164, 129);
this.rtXbee.TabIndex = 2;
this.rtXbee.Text = "";
//
// titleXBEE
//
this.titleXBEE.Dock = System.Windows.Forms.DockStyle.Top;
this.titleXBEE.Location = new System.Drawing.Point(0, 0);
this.titleXBEE.Name = "titleXBEE";
this.titleXBEE.Size = new System.Drawing.Size(164, 14);
this.titleXBEE.TabIndex = 0;
this.titleXBEE.Text = "MC ID";
this.titleXBEE.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// panel2
//
this.tableLayoutPanel1.SetColumnSpan(this.panel2, 2);
this.panel2.Controls.Add(this.rtBMS);
this.panel2.Controls.Add(this.titleBMS);
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(343, 349);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(335, 143);
this.panel2.TabIndex = 4;
//
// rtBMS
//
this.rtBMS.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.rtBMS.ColorList = new arCtl.sLogMessageColor[0];
this.rtBMS.DateFormat = "mm: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("맑은 고딕", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rtBMS.ListFormat = "[{0}] {1}";
this.rtBMS.Location = new System.Drawing.Point(0, 14);
this.rtBMS.MaxListCount = ((ushort)(1000));
this.rtBMS.MaxTextLength = ((uint)(400000u));
this.rtBMS.MessageInterval = 50;
this.rtBMS.Name = "rtBMS";
this.rtBMS.Size = new System.Drawing.Size(335, 129);
this.rtBMS.TabIndex = 2;
this.rtBMS.Text = "";
//
// titleBMS
//
this.titleBMS.Dock = System.Windows.Forms.DockStyle.Top;
this.titleBMS.Location = new System.Drawing.Point(0, 0);
this.titleBMS.Name = "titleBMS";
this.titleBMS.Size = new System.Drawing.Size(335, 14);
this.titleBMS.TabIndex = 3;
this.titleBMS.Text = "BMS";
this.titleBMS.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// panel4
//
this.panel4.Controls.Add(this.rtAGV);
this.panel4.Controls.Add(this.titleAGV);
this.panel4.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel4.Location = new System.Drawing.Point(3, 349);
this.panel4.Name = "panel4";
this.panel4.Size = new System.Drawing.Size(164, 143);
this.panel4.TabIndex = 6;
//
// rtAGV
//
this.rtAGV.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.rtAGV.ColorList = new arCtl.sLogMessageColor[0];
this.rtAGV.DateFormat = "mm: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("맑은 고딕", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rtAGV.ListFormat = "[{0}] {1}";
this.rtAGV.Location = new System.Drawing.Point(0, 14);
this.rtAGV.MaxListCount = ((ushort)(1000));
this.rtAGV.MaxTextLength = ((uint)(400000u));
this.rtAGV.MessageInterval = 50;
this.rtAGV.Name = "rtAGV";
this.rtAGV.Size = new System.Drawing.Size(164, 129);
this.rtAGV.TabIndex = 2;
this.rtAGV.Text = "";
//
// titleAGV
//
this.titleAGV.Dock = System.Windows.Forms.DockStyle.Top;
this.titleAGV.Location = new System.Drawing.Point(0, 0);
this.titleAGV.Name = "titleAGV";
this.titleAGV.Size = new System.Drawing.Size(164, 14);
this.titleAGV.TabIndex = 3;
this.titleAGV.Text = "AGV";
this.titleAGV.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// fLog
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(681, 495);
this.Controls.Add(this.tableLayoutPanel1);
this.Name = "fLog";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "fLog";
this.TopMost = true;
this.Load += new System.EventHandler(this.fLog_Load);
this.tableLayoutPanel1.ResumeLayout(false);
this.panel1.ResumeLayout(false);
this.panel2.ResumeLayout(false);
this.panel4.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private arCtl.LogTextBox rtsys;
private arCtl.LogTextBox rtTx;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private arCtl.LogTextBox rtAGV;
private arCtl.LogTextBox rtBMS;
private arCtl.LogTextBox rtXbee;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Label titleXBEE;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Panel panel4;
private System.Windows.Forms.Label titleBMS;
private System.Windows.Forms.Label titleAGV;
}
}

View File

@@ -0,0 +1,85 @@
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 Project.Dialog
{
public partial class fLog : Form
{
public fLog()
{
InitializeComponent();
this.FormClosed += FLog_FormClosed;
}
private void FLog_FormClosed(object sender, FormClosedEventArgs e)
{
PUB.log.RaiseMsg -= Log_RaiseMsg;
PUB.logagv.RaiseMsg -= Log_RaiseMsgagv;
PUB.logplc.RaiseMsg -= Log_RaiseMsgplc;
PUB.logbms.RaiseMsg -= Log_RaiseMsgbms;
PUB.logxbee.RaiseMsg -= Log_RaiseMsgcal;
}
private void fLog_Load(object sender, EventArgs e)
{
this.titleXBEE.Text = $"XBEE({PUB.setting.Port_XBE},ID:{PUB.setting.XBE_ID})";
this.titleAGV.Text = $"AGV({PUB.setting.Port_AGV}:{PUB.setting.Baud_AGV})";
this.titleBMS.Text = $"BMS({PUB.setting.Port_BAT}:{PUB.setting.Baud_BAT})";
var colorlist = new arCtl.sLogMessageColor[]
{
new arCtl.sLogMessageColor("NOR",Color.Black),
new arCtl.sLogMessageColor("NORM",Color.Black),
new arCtl.sLogMessageColor("NORMAL",Color.Black),
new arCtl.sLogMessageColor("ERR",Color.Red),
new arCtl.sLogMessageColor("FLAG",Color.Magenta),
new arCtl.sLogMessageColor("TX",Color.SkyBlue),
new arCtl.sLogMessageColor("SETUP",Color.Gold),
new arCtl.sLogMessageColor("MFLAG",Color.BlueViolet),
};
this.rtsys.ColorList = colorlist;
this.rtTx.ColorList = colorlist;
this.rtAGV.ColorList = colorlist;
PUB.log.RaiseMsg += Log_RaiseMsg;
PUB.logagv.RaiseMsg += Log_RaiseMsgagv;
PUB.logplc.RaiseMsg += Log_RaiseMsgplc;
PUB.logbms.RaiseMsg += Log_RaiseMsgbms;
PUB.logxbee.RaiseMsg += Log_RaiseMsgcal;
}
private void Log_RaiseMsg(DateTime LogTime, string TypeStr, string Message)
{
showlog(rtsys,LogTime, TypeStr, Message);
}
private void Log_RaiseMsgagv(DateTime LogTime, string TypeStr, string Message)
{
showlog(rtAGV, LogTime, TypeStr, Message);
}
private void Log_RaiseMsgplc(DateTime LogTime, string TypeStr, string Message)
{
//showlog(rtPLC, LogTime, TypeStr, Message);
}
private void Log_RaiseMsgbms(DateTime LogTime, string TypeStr, string Message)
{
showlog(rtBMS, LogTime, TypeStr, Message);
}
private void Log_RaiseMsgcal(DateTime LogTime, string TypeStr, string Message)
{
showlog(rtXbee, LogTime, TypeStr, Message);
}
void showlog(arCtl.LogTextBox rtRx, DateTime LogTime, string TypeStr, string Message)
{
if (rtRx.Visible)
{
rtRx.AddMsg(LogTime, TypeStr, Message);
}
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

93
HMI/Project/Dialog/fPassword.Designer.cs generated Normal file
View File

@@ -0,0 +1,93 @@
namespace Project.Dialog
{
partial class fPassword
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(fPassword));
this.tbInput = new System.Windows.Forms.TextBox();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.touchKey1 = new arCtl.TouchKey();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
this.SuspendLayout();
//
// tbInput
//
this.tbInput.Font = new System.Drawing.Font("Calibri", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tbInput.Location = new System.Drawing.Point(26, 140);
this.tbInput.Name = "tbInput";
this.tbInput.PasswordChar = '●';
this.tbInput.Size = new System.Drawing.Size(235, 40);
this.tbInput.TabIndex = 1;
this.tbInput.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// pictureBox1
//
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(91, 23);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(96, 96);
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize;
this.pictureBox1.TabIndex = 3;
this.pictureBox1.TabStop = false;
//
// touchKey1
//
this.touchKey1.Location = new System.Drawing.Point(26, 194);
this.touchKey1.Margin = new System.Windows.Forms.Padding(6, 11, 6, 11);
this.touchKey1.Name = "touchKey1";
this.touchKey1.Size = new System.Drawing.Size(235, 260);
this.touchKey1.TabIndex = 5;
this.touchKey1.keyClick += new arCtl.TouchKey.KeyClickHandler(this.touchKey1_keyClick);
//
// fPassword
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.ClientSize = new System.Drawing.Size(284, 470);
this.Controls.Add(this.touchKey1);
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.tbInput);
this.Font = new System.Drawing.Font("Calibri", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.KeyPreview = true;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "fPassword";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Enter Password";
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.PictureBox pictureBox1;
public System.Windows.Forms.TextBox tbInput;
private arCtl.TouchKey touchKey1;
}
}

View File

@@ -0,0 +1,74 @@
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 Project.Dialog
{
public partial class fPassword : Form
{
public fPassword()
{
InitializeComponent();
this.tbInput.KeyDown += (s1, e1) => { if (e1.KeyCode == Keys.Enter) Confirm(); };
this.KeyPreview = true;
this.KeyDown += (s1, e1) => {
if (e1.KeyCode == Keys.Escape) this.Close();
};
}
private void Confirm()
{
string id = tbInput.Text.Trim();
if (id.isEmpty())
{
tbInput.Focus();
return;
}
DialogResult = DialogResult.OK;
}
private void touchKey1_keyClick(string key)
{
if (key == "BACK" || key == "◁")
{
if (!tbInput.Text.isEmpty())
{
if (tbInput.Text.Length == 1) tbInput.Text = "";
else tbInput.Text = tbInput.Text.Substring(0, tbInput.Text.Length - 1);
}
//if (tbInput.Text == "") tbInput.Text = "0";
}
else if (key == "CLEAR" || key == "RESET" || key == "◀")
{
tbInput.Text = "0";
}
else if (key == "ENTER" || key == "ENT")
{
Confirm();
}
else
{
if (tbInput.SelectionLength > 0 && tbInput.Text.Length == tbInput.SelectionLength)
{
tbInput.Text = key;
}
else if (tbInput.SelectionLength > 0)
{
//선택된 영역을 대체해준다.
tbInput.SelectedText = key;
}
else tbInput.Text += key;
}
tbInput.SelectionLength = 0;
if (!tbInput.Text.isEmpty())
tbInput.SelectionStart = tbInput.Text.Length;
}
}
}

View File

@@ -0,0 +1,160 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<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="pictureBox1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAb
rwAAG68BXhqRHAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAeoSURBVHhe7Z1r
bBRVFMfr+xHf8RUTHx/UoHwpLDMLLdHtzBSosWoijSZCq9GCRAN+I+oXwgfBqIgYXzF+gMT4KIoRgloM
RhOQLbRSQSyoLZYIhEcpnZ3u0u7u9Zzd0wDT41Z2753O7s4/+aWb3TvnnvPf2bkzd6YzFYECBQoUKFCg
QIECBQrkJ/VPn36tbYZrHFOfHzP1N4ANMUvfAX+7gAPwui8Dvsb3sp9tiJnh1x0rPM+2pkYwBoULNJaO
VldfCYbPdgx9FRjZCaQAUSAYYyd8KW/ZVvjRI5HIFdRdIJSIRC60Db0BTFoPJMg0lSQcS//cMbR67JvS
KD+JhokXw5r+DBiy12WQl3TB5u1pzIXSKn2JadMuixnhF6B43G5zpowHvbapLcTcKM3SFAySjVDsQVfx
PkL7B3OkdEtHcaPqdijw69EF+xPb1NcNztBupfSLW7D3sQiKGnQXWQQMwC9iDpVRfMLdPfg5r2EKKy6g
hqLbdbVnVN1IB0V8UUVHODoQCV1P5flbA6Z+NyTdM7qIoqf7ZG34LirTn4Kj2HszexJ8AaXAAduaeg+V
6y/h2hEz9CNM0qXGwXhk6h1Utj8E28ib4IjyTybZksSx9D+wZip/fCXq7rwE9pu3cImWOD/5YgoDzH+f
Sa4scMzwO2TD+AgPVLjEygvtCbLDW+FABAn0j06ozLD0vrgVuo1s8U7wzbeyCZUn35It3sg2tceYJMoa
PNtG9qhVZo7H1HvdCXiB83i9OPXBKpFs2yrSfcdFemAgC7zG9/AzbMMt6wH7RX3ocrJJnRxDf5npXC0z
q8RQy8dCDA+LMQVtsC0uw8ZSiaEvJpvUiNb+Y6M6VojzkCGSne3k7v9Xcmd7ZlkupkIOKz2rRnP7XMdq
sMIi2bGdLD13JTvaMjHY2IqwzfBzZJdciSUV50MH3e4OVZJ4cxlZeVrpQwdFYuVyMdg0WziPmBnwNb6H
n7mVWPEKG1sVOE0hKirOI9vkKWZpFtehMmZNF+n+E2RjVqk9uzKGs+0B/Cy1Zze1zird3wfjQTXbXhV4
QRjZJk8QeLW7I5Uklr5EFmaVjtmwh/Mg2/ZMsE3aidFSWSWWvsi2VchHZJsc0eAbc3WilOFNG8m+rIY+
Wc224xj6dA0tldVw60a2nUJOSt0ldazww0wnSkn19pB9WcUXNrPtOOKLmmmprFJ/97DtVOLUhB8g+woX
XavJdqSK9OAg2ZeVU1/DtuPA3c8zlXYctp1SDH0F2Ve4INguthOFuMW1yYVbXBvF7CT7ChNeDQDB0q7g
ynGLa5MLt7g2ikmdnDntOrIxf8VMbRYTXCrx+Y0i2dIi0lujQrT/qpT0lmimr3jzXDYXuYRrycb8pfro
N77gKSF2dLJmKQX6jM9vYnOShW3oz5ON+QsG4He54LJIrfuKN8gDkl98yeYkCzgqfptszF8wAH/PBZeF
2NbOmuMJ23awOUnD0r8jG/MXBNo9KrBEWGM8hMtJIp1kY/6CIPtdQaXCmeIlXE4S6SYb8xcEOe4KKhXO
FC/hcpLIUbIxf0GQU66gUuFM8RIuJ4kkyMb8BUGGXEGlwpkyFonWzaJrbpNo07QMXXMaRXxjK9t2LLic
JCLlC/DVJgjNbwuFxNYJE84C3zu16Qd2mVxwOUlEyibIV4Mwrvlu80fY2/Qku0wuuJwkImEQVjwRx5mS
i2jlJNZ8JDp5MrtMLricJFL4hJzyAzHGlFxEKytZ85HoJJ99ATIOxPBwmg0uCc6UXHTNmcuaj/hvE6St
JBvzF04o8cHlwJmSi8H13/zHIDzFd4OwbWkLyMb8hVOqXHBZcKaMxchuKI4HuNnZ29iUl/kIl5MsYOU1
yMb8pfqEDGeKl3A5SULOCRkUBPvFFVwanClewuUkie1kX+HCE8xMB1LgTPESLidJvEr2FS6Vl6VwpngJ
l5MMpF6WIiKRSyHoCXcnMsCTIpwxnvDzdjYnCRyT/h+Utql/yHRUMHhakDXHA5Ita9mcCsW29PfINnmy
De0+rrNCic9rHL+T8oqujBgwtCqyTZ7w8nT4FfzFdVgomctS8JfQ1sGbJRPoA/tSZb6yy9NRjqE/y3Ua
cBrH0prJLvkSodBF0InS6ekipxs9IrvUSPXcUDGDWwiySZ3wn9BUjQVFzj68cQnZpFaqJ+iKklrNJHu8
kWNqa9lEyhFD/4xs8U7BzTqI8bpZBwrnOyAJz/93wEekHGNKHdkxPopZ2mtMYuWBpS8nG8ZPwS3LfKDj
deGrICFlJ218SAc+bILK94ec2upbILFSvGGrm3123aQbqGx/KXvjVl89F0A2vb69ceuIYhHt5piptTPJ
FzeZe2H75F6hYwmfXARJ/ziqiOJlc58VuprKKw6JhoYLbEtfAsnLeBLSeJGEo9zFyub3vRBenASFHHYV
VgwcwmeYURnFreARJj4R3sgICvzNXbCP2G3XavdTuqWp4DFWPpEvHuRmhH8vuwe5cbJrtIk4sQWmePGM
sR7cO8M+qftAI8I1MXO2LftltAHJM4zLF4gRjsLavgxvPFj2a/u56ESk8hrcFTzrcbbZo+xuPBFCBmdO
imTey3521uNsMQaFCxQoUKBAgQIFChQoUCAfqKLiXwYEOVtR8EleAAAAAElFTkSuQmCC
</value>
</data>
</root>

View File

@@ -0,0 +1,46 @@
namespace Project.Dialog
{
partial class fStateMachineDebug
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.SuspendLayout();
//
// fStateMachineDebug
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 600);
this.Name = "fStateMachineDebug";
this.Text = "상태머신 디버그";
this.ResumeLayout(false);
}
#endregion
}
}

View File

@@ -0,0 +1,237 @@
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
using AR;
using COMM;
namespace Project.Dialog
{
public partial class fStateMachineDebug : Form
{
private System.Windows.Forms.Timer updateTimer;
private TextBox txtDebugInfo;
private Button btnRefresh;
private Button btnForceRestart;
public fStateMachineDebug()
{
InitializeComponent();
InitializeCustomComponents();
updateTimer = new System.Windows.Forms.Timer();
updateTimer.Interval = 500; // 0.5초마다 업데이트
updateTimer.Tick += UpdateTimer_Tick;
updateTimer.Start();
}
private void InitializeCustomComponents()
{
this.Text = "상태머신 디버그 모니터";
this.Size = new Size(800, 600);
this.StartPosition = FormStartPosition.CenterScreen;
this.FormBorderStyle = FormBorderStyle.Sizable;
// TextBox 생성
txtDebugInfo = new TextBox
{
Multiline = true,
ScrollBars = ScrollBars.Both,
Dock = DockStyle.Fill,
Font = new Font("Consolas", 9),
ReadOnly = true,
BackColor = Color.Black,
ForeColor = Color.LimeGreen
};
// 버튼 패널
var buttonPanel = new Panel
{
Dock = DockStyle.Bottom,
Height = 50
};
btnRefresh = new Button
{
Text = "새로고침",
Location = new Point(10, 10),
Size = new Size(100, 30)
};
btnRefresh.Click += (s, e) => UpdateDebugInfo();
btnForceRestart = new Button
{
Text = "상태머신 재시작",
Location = new Point(120, 10),
Size = new Size(120, 30),
BackColor = Color.IndianRed
};
btnForceRestart.Click += BtnForceRestart_Click;
var btnBreakNow = new Button
{
Text = "즉시 중단",
Location = new Point(250, 10),
Size = new Size(100, 30),
BackColor = Color.Orange
};
btnBreakNow.Click += (s, ev) => {
if (System.Diagnostics.Debugger.IsAttached)
{
System.Diagnostics.Debugger.Break();
}
else
{
MessageBox.Show("디버거가 연결되지 않았습니다.", "알림");
}
};
buttonPanel.Controls.Add(btnRefresh);
buttonPanel.Controls.Add(btnForceRestart);
buttonPanel.Controls.Add(btnBreakNow);
this.Controls.Add(txtDebugInfo);
this.Controls.Add(buttonPanel);
}
private void UpdateTimer_Tick(object sender, EventArgs e)
{
UpdateDebugInfo();
}
private void UpdateDebugInfo()
{
try
{
var info = new System.Text.StringBuilder();
info.AppendLine("=== 상태머신 디버그 정보 ===");
info.AppendLine($"현재 시간: {DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}");
info.AppendLine();
if (PUB.sm != null)
{
info.AppendLine($"상태머신 객체: 존재");
info.AppendLine($"IsThreadRun: {PUB.sm.IsThreadRun}");
info.AppendLine($"LoopCount: {PUB.sm.LoopCount}");
var lastLoopElapsed = (DateTime.Now - PUB.sm.LastLoopTime).TotalSeconds;
var loopStatus = lastLoopElapsed < 1 ? "정상" : "경고!";
var loopColor = lastLoopElapsed < 1 ? "" : " <<<<<<";
info.AppendLine($"마지막 루프: {lastLoopElapsed:F2}초 전 [{loopStatus}]{loopColor}");
info.AppendLine($"현재 Step: {PUB.sm.Step}");
info.AppendLine($"현재 RunStep: {PUB.sm.RunStep}");
info.AppendLine($"Pause 상태: {PUB.sm.bPause}");
info.AppendLine($"WaitFirstRun: {PUB.sm.WaitFirstRun}");
// 스레드 정보
var smThread = GetStateMachineThread();
if (smThread != null)
{
info.AppendLine();
info.AppendLine($"스레드 이름: {smThread.Name ?? "N/A"}");
info.AppendLine($"스레드 ID: {smThread.ManagedThreadId}");
info.AppendLine($"스레드 상태: {smThread.ThreadState}");
info.AppendLine($"IsAlive: {smThread.IsAlive}");
info.AppendLine($"IsBackground: {smThread.IsBackground}");
}
else
{
info.AppendLine();
info.AppendLine("경고: 상태머신 스레드를 찾을 수 없음!");
}
}
else
{
info.AppendLine("오류: 상태머신 객체가 NULL입니다!");
}
info.AppendLine();
info.AppendLine("=== 변수 상태 ===");
info.AppendLine($"FLAG_AUTORUN: {VAR.BOOL[eVarBool.FLAG_AUTORUN]}");
info.AppendLine($"EMERGENCY: {VAR.BOOL[eVarBool.EMERGENCY]}");
info.AppendLine($"FLAG_SYNC: {VAR.BOOL[eVarBool.FLAG_SYNC]}");
info.AppendLine();
info.AppendLine("=== 하드웨어 연결 상태 ===");
info.AppendLine($"AGV: {(PUB.AGV?.IsOpen ?? false)} - {PUB.setting.Port_AGV}");
info.AppendLine($"XBE: {(PUB.XBE?.IsOpen ?? false)} - {PUB.setting.Port_XBE}");
info.AppendLine($"BMS: {(PUB.BMS?.IsOpen ?? false)} - {PUB.setting.Port_BAT}");
info.AppendLine();
info.AppendLine("=== 관리되는 스레드 목록 ===");
var currentProcess = Process.GetCurrentProcess();
info.AppendLine($"총 프로세스 스레드 수: {currentProcess.Threads.Count}");
// 모든 관리되는 스레드 정보 출력
foreach (ProcessThread thread in currentProcess.Threads)
{
var state = thread.ThreadState;
var waitReason = thread.ThreadState == System.Diagnostics.ThreadState.Wait ?
$", WaitReason: {thread.WaitReason}" : "";
info.AppendLine($" Thread {thread.Id}: State={state}, Priority={thread.PriorityLevel}{waitReason}");
}
txtDebugInfo.Text = info.ToString();
}
catch (Exception ex)
{
txtDebugInfo.Text = $"오류 발생: {ex.Message}\r\n{ex.StackTrace}";
}
}
private Thread GetStateMachineThread()
{
try
{
// Reflection을 사용하여 StateMachine의 private worker 필드 접근
var smType = PUB.sm.GetType();
var threadField = smType.GetField("worker",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance);
if (threadField != null)
{
return threadField.GetValue(PUB.sm) as Thread;
}
}
catch { }
return null;
}
private void BtnForceRestart_Click(object sender, EventArgs e)
{
var result = MessageBox.Show(
"상태머신을 강제로 재시작하시겠습니까?\n이 작업은 위험할 수 있습니다.",
"경고",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning);
if (result == DialogResult.Yes)
{
try
{
PUB.log.Add("StateMachine", "사용자가 강제 재시작 요청");
PUB.sm.Stop();
System.Threading.Thread.Sleep(1000);
PUB.sm.Start();
PUB.log.Add("StateMachine", "강제 재시작 완료");
MessageBox.Show("상태머신이 재시작되었습니다.", "완료");
}
catch (Exception ex)
{
MessageBox.Show($"재시작 실패: {ex.Message}", "오류");
PUB.log.AddE($"상태머신 재시작 실패: {ex.Message}");
}
}
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
updateTimer?.Stop();
updateTimer?.Dispose();
base.OnFormClosing(e);
}
}
}

334
HMI/Project/Dialog/fSystem.Designer.cs generated Normal file
View File

@@ -0,0 +1,334 @@
namespace Project.Dialog
{
partial class fSystem
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.btOpenDir = new System.Windows.Forms.Button();
this.arLabel4 = new System.Windows.Forms.Button();
this.btShutdown = new System.Windows.Forms.Button();
this.btRestart = new System.Windows.Forms.Button();
this.btStartMenu = new System.Windows.Forms.Button();
this.btTaskMgr = new System.Windows.Forms.Button();
this.btProcessList = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.btEmulator = new System.Windows.Forms.Button();
this.btMakePatch = new System.Windows.Forms.Button();
this.btAutoRestart = new System.Windows.Forms.Button();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// btOpenDir
//
this.btOpenDir.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(72)))), ((int)(((byte)(72)))));
this.btOpenDir.Cursor = System.Windows.Forms.Cursors.Hand;
this.btOpenDir.Dock = System.Windows.Forms.DockStyle.Fill;
this.btOpenDir.Font = new System.Drawing.Font("Consolas", 12F);
this.btOpenDir.ForeColor = System.Drawing.Color.White;
this.btOpenDir.Location = new System.Drawing.Point(5, 5);
this.btOpenDir.Margin = new System.Windows.Forms.Padding(5);
this.btOpenDir.Name = "btOpenDir";
this.btOpenDir.Size = new System.Drawing.Size(201, 79);
this.btOpenDir.TabIndex = 2;
this.btOpenDir.Text = "폴더열기";
this.btOpenDir.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btOpenDir.Click += new System.EventHandler(this.lbMsg_Click);
//
// arLabel4
//
this.arLabel4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(72)))), ((int)(((byte)(72)))));
this.arLabel4.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel4.Dock = System.Windows.Forms.DockStyle.Bottom;
this.arLabel4.Font = new System.Drawing.Font("Consolas", 12F);
this.arLabel4.ForeColor = System.Drawing.Color.White;
this.arLabel4.Location = new System.Drawing.Point(10, 412);
this.arLabel4.Margin = new System.Windows.Forms.Padding(5);
this.arLabel4.Name = "arLabel4";
this.arLabel4.Size = new System.Drawing.Size(633, 51);
this.arLabel4.TabIndex = 2;
this.arLabel4.Text = "닫기";
this.arLabel4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel4.Click += new System.EventHandler(this.arLabel4_Click);
//
// btShutdown
//
this.btShutdown.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(72)))), ((int)(((byte)(72)))));
this.btShutdown.Cursor = System.Windows.Forms.Cursors.Hand;
this.btShutdown.Dock = System.Windows.Forms.DockStyle.Fill;
this.btShutdown.Font = new System.Drawing.Font("Consolas", 12F);
this.btShutdown.ForeColor = System.Drawing.Color.White;
this.btShutdown.Location = new System.Drawing.Point(5, 94);
this.btShutdown.Margin = new System.Windows.Forms.Padding(5);
this.btShutdown.Name = "btShutdown";
this.btShutdown.Size = new System.Drawing.Size(201, 79);
this.btShutdown.TabIndex = 2;
this.btShutdown.Text = "시스템 종료";
this.btShutdown.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btShutdown.Click += new System.EventHandler(this.arLabel9_Click);
//
// btRestart
//
this.btRestart.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(72)))), ((int)(((byte)(72)))));
this.btRestart.Cursor = System.Windows.Forms.Cursors.Hand;
this.btRestart.Dock = System.Windows.Forms.DockStyle.Fill;
this.btRestart.Font = new System.Drawing.Font("Consolas", 12F);
this.btRestart.ForeColor = System.Drawing.Color.White;
this.btRestart.Location = new System.Drawing.Point(216, 94);
this.btRestart.Margin = new System.Windows.Forms.Padding(5);
this.btRestart.Name = "btRestart";
this.btRestart.Size = new System.Drawing.Size(201, 79);
this.btRestart.TabIndex = 2;
this.btRestart.Text = "시스템 재시작";
this.btRestart.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btRestart.Click += new System.EventHandler(this.arLabel10_Click);
//
// btStartMenu
//
this.btStartMenu.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(72)))), ((int)(((byte)(72)))));
this.btStartMenu.Cursor = System.Windows.Forms.Cursors.Hand;
this.btStartMenu.Dock = System.Windows.Forms.DockStyle.Fill;
this.btStartMenu.Font = new System.Drawing.Font("Consolas", 12F);
this.btStartMenu.ForeColor = System.Drawing.Color.White;
this.btStartMenu.Location = new System.Drawing.Point(427, 5);
this.btStartMenu.Margin = new System.Windows.Forms.Padding(5);
this.btStartMenu.Name = "btStartMenu";
this.btStartMenu.Size = new System.Drawing.Size(201, 79);
this.btStartMenu.TabIndex = 2;
this.btStartMenu.Text = "시작메뉴";
this.btStartMenu.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btStartMenu.Click += new System.EventHandler(this.arLabel1_Click);
//
// btTaskMgr
//
this.btTaskMgr.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(72)))), ((int)(((byte)(72)))));
this.btTaskMgr.Cursor = System.Windows.Forms.Cursors.Hand;
this.btTaskMgr.Dock = System.Windows.Forms.DockStyle.Fill;
this.btTaskMgr.Font = new System.Drawing.Font("Consolas", 12F);
this.btTaskMgr.ForeColor = System.Drawing.Color.White;
this.btTaskMgr.Location = new System.Drawing.Point(216, 5);
this.btTaskMgr.Margin = new System.Windows.Forms.Padding(5);
this.btTaskMgr.Name = "btTaskMgr";
this.btTaskMgr.Size = new System.Drawing.Size(201, 79);
this.btTaskMgr.TabIndex = 2;
this.btTaskMgr.Text = "작업관리자";
this.btTaskMgr.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btTaskMgr.Click += new System.EventHandler(this.arLabel6_Click);
//
// btProcessList
//
this.btProcessList.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(72)))), ((int)(((byte)(72)))));
this.btProcessList.Cursor = System.Windows.Forms.Cursors.Hand;
this.btProcessList.Dock = System.Windows.Forms.DockStyle.Fill;
this.btProcessList.Font = new System.Drawing.Font("Consolas", 12F);
this.btProcessList.ForeColor = System.Drawing.Color.White;
this.btProcessList.Location = new System.Drawing.Point(427, 94);
this.btProcessList.Margin = new System.Windows.Forms.Padding(5);
this.btProcessList.Name = "btProcessList";
this.btProcessList.Size = new System.Drawing.Size(201, 79);
this.btProcessList.TabIndex = 2;
this.btProcessList.Text = "Process List";
this.btProcessList.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btProcessList.Click += new System.EventHandler(this.arLabel2_Click);
//
// label1
//
this.label1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.label1.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.label1.ForeColor = System.Drawing.Color.White;
this.label1.Location = new System.Drawing.Point(10, 389);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(633, 23);
this.label1.TabIndex = 3;
this.label1.Text = "label1";
//
// label2
//
this.label2.Dock = System.Windows.Forms.DockStyle.Bottom;
this.label2.Font = new System.Drawing.Font("맑은 고딕", 9.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.label2.ForeColor = System.Drawing.Color.White;
this.label2.Location = new System.Drawing.Point(10, 366);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(633, 23);
this.label2.TabIndex = 3;
this.label2.Text = "label1";
//
// btEmulator
//
this.btEmulator.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(72)))), ((int)(((byte)(72)))));
this.btEmulator.Cursor = System.Windows.Forms.Cursors.Hand;
this.btEmulator.Dock = System.Windows.Forms.DockStyle.Fill;
this.btEmulator.Font = new System.Drawing.Font("Consolas", 12F);
this.btEmulator.ForeColor = System.Drawing.Color.White;
this.btEmulator.Location = new System.Drawing.Point(5, 183);
this.btEmulator.Margin = new System.Windows.Forms.Padding(5);
this.btEmulator.Name = "btEmulator";
this.btEmulator.Size = new System.Drawing.Size(201, 79);
this.btEmulator.TabIndex = 4;
this.btEmulator.Text = "Emulator";
this.btEmulator.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btEmulator.Click += new System.EventHandler(this.arLabel3_Click);
//
// btMakePatch
//
this.btMakePatch.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(72)))), ((int)(((byte)(72)))));
this.btMakePatch.Cursor = System.Windows.Forms.Cursors.Hand;
this.btMakePatch.Dock = System.Windows.Forms.DockStyle.Fill;
this.btMakePatch.Font = new System.Drawing.Font("Consolas", 12F);
this.btMakePatch.ForeColor = System.Drawing.Color.White;
this.btMakePatch.Location = new System.Drawing.Point(216, 183);
this.btMakePatch.Margin = new System.Windows.Forms.Padding(5);
this.btMakePatch.Name = "btMakePatch";
this.btMakePatch.Size = new System.Drawing.Size(201, 79);
this.btMakePatch.TabIndex = 5;
this.btMakePatch.Text = "패치파일 생성";
this.btMakePatch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btMakePatch.Click += new System.EventHandler(this.arLabel5_Click);
//
// btAutoRestart
//
this.btAutoRestart.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(72)))), ((int)(((byte)(72)))), ((int)(((byte)(72)))));
this.btAutoRestart.Cursor = System.Windows.Forms.Cursors.Hand;
this.btAutoRestart.Dock = System.Windows.Forms.DockStyle.Fill;
this.btAutoRestart.Font = new System.Drawing.Font("Consolas", 12F);
this.btAutoRestart.ForeColor = System.Drawing.Color.White;
this.btAutoRestart.Location = new System.Drawing.Point(427, 183);
this.btAutoRestart.Margin = new System.Windows.Forms.Padding(5);
this.btAutoRestart.Name = "btAutoRestart";
this.btAutoRestart.Size = new System.Drawing.Size(201, 79);
this.btAutoRestart.TabIndex = 6;
this.btAutoRestart.Text = "자동 재시작";
this.btAutoRestart.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btAutoRestart.Click += new System.EventHandler(this.arLabel7_Click);
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 3;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel1.Controls.Add(this.btOpenDir, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.btAutoRestart, 2, 2);
this.tableLayoutPanel1.Controls.Add(this.btTaskMgr, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.btMakePatch, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.btStartMenu, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.btEmulator, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.btShutdown, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.btRestart, 1, 1);
this.tableLayoutPanel1.Controls.Add(this.btProcessList, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.button1, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.button2, 1, 3);
this.tableLayoutPanel1.Controls.Add(this.button3, 2, 3);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(10, 10);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 4;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(633, 356);
this.tableLayoutPanel1.TabIndex = 7;
//
// button1
//
this.button1.Dock = System.Windows.Forms.DockStyle.Fill;
this.button1.Location = new System.Drawing.Point(3, 270);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(205, 83);
this.button1.TabIndex = 7;
this.button1.Text = "Map Editor";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click_1);
//
// button2
//
this.button2.Dock = System.Windows.Forms.DockStyle.Fill;
this.button2.Enabled = false;
this.button2.Location = new System.Drawing.Point(214, 270);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(205, 83);
this.button2.TabIndex = 7;
this.button2.Text = "---";
this.button2.UseVisualStyleBackColor = true;
//
// button3
//
this.button3.Dock = System.Windows.Forms.DockStyle.Fill;
this.button3.Enabled = false;
this.button3.Location = new System.Drawing.Point(425, 270);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(205, 83);
this.button3.TabIndex = 7;
this.button3.Text = "---";
this.button3.UseVisualStyleBackColor = true;
//
// fSystem
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(40)))), ((int)(((byte)(40)))), ((int)(((byte)(40)))));
this.ClientSize = new System.Drawing.Size(653, 473);
this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.label2);
this.Controls.Add(this.label1);
this.Controls.Add(this.arLabel4);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "fSystem";
this.Padding = new System.Windows.Forms.Padding(10);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "fSystem";
this.Load += new System.EventHandler(this.fSystem_Load);
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button btOpenDir;
private System.Windows.Forms.Button arLabel4;
private System.Windows.Forms.Button btTaskMgr;
private System.Windows.Forms.Button btShutdown;
private System.Windows.Forms.Button btRestart;
private System.Windows.Forms.Button btStartMenu;
private System.Windows.Forms.Button btProcessList;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.Button btEmulator;
private System.Windows.Forms.Button btMakePatch;
private System.Windows.Forms.Button btAutoRestart;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
}
}

View File

@@ -0,0 +1,166 @@
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;
using System.IO;
using AR;
using System.IO.Compression;
namespace Project.Dialog
{
public partial class fSystem : Form
{
public bool shutdown = false;
public fSystem()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
UTIL.RunProcess(@"c:\windows\system32\shutdown.exe", "-r -t 5");
}
private void button2_Click(object sender, EventArgs e)
{
UTIL.RunProcess(@"c:\windows\system32\shutdown.exe", "-s -t 5");
}
private void button3_Click(object sender, EventArgs e)
{
}
private void tableLayoutPanel1_Paint(object sender, PaintEventArgs e)
{
}
private void lbMsg_Click(object sender, EventArgs e)
{
string path = AppDomain.CurrentDomain.BaseDirectory;
System.Diagnostics.Process prc = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo("explorer")
{
Arguments = path
};
prc.StartInfo = si;
prc.Start();
}
private void arLabel1_Click(object sender, EventArgs e)
{
SendKeys.Send("^{ESC}");
}
private void arLabel6_Click(object sender, EventArgs e)
{
SendKeys.Send("^+{ESC}");
}
private void arLabel9_Click(object sender, EventArgs e)
{
shutdown = true;
PUB.SystemShutdown(10);
this.Close();
}
private void arLabel10_Click(object sender, EventArgs e)
{
shutdown = true;
PUB.SystemReboot(10);
this.Close();
}
private void arLabel4_Click(object sender, EventArgs e)
{
this.Close();
}
private void arLabel2_Click(object sender, EventArgs e)
{
System.Text.StringBuilder sb = new StringBuilder();
sb.AppendLine("Current : " + System.Diagnostics.Process.GetCurrentProcess().ProcessName);
foreach (var prc in System.Diagnostics.Process.GetProcesses())
{
if (prc.ProcessName.StartsWith("svchost")) continue;
sb.Append(" " + prc.ProcessName);
}
UTIL.MsgI(sb.ToString(),true);
}
private void fSystem_Load(object sender, EventArgs e)
{
this.label1.Text = "Patch Version " + PUB.PatchVersion;
this.label2.Text = "HMI Version " + Application.ProductVersion.ToString();
}
private void arLabel3_Click(object sender, EventArgs e)
{
var file = System.IO.Path.Combine(UTIL.CurrentPath, "Emulator.exe");
if(System.IO.File.Exists(file)==false)
{
UTIL.MsgE("에물레이터 실행 파일이 없습니다", true);
return;
}
UTIL.RunProcess(file);
}
private void arLabel5_Click(object sender, EventArgs e)
{
//현재 폴더에서 dll 과, amkor.exe 파일을 압축한다
var path = new System.IO.DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory);
var files_dll = path.GetFiles("*.dll");
var file_exe = System.IO.Path.Combine(path.FullName, "amkor.exe");
if(System.IO.File.Exists(file_exe)==false)
{
UTIL.MsgE("실행파일 amkor.exe 가 없습니다.");
return;
}
var veri = Application.ProductVersion.Split('.');
var newfilename = "Patch_AGV_" + veri[0] + veri[1] + veri[2] + "_" + veri[3] + ".zip";
// 임시 폴더 생성
var tempDir = Path.Combine(Path.GetTempPath(), "PatchTemp");
if (Directory.Exists(tempDir))
Directory.Delete(tempDir, true);
Directory.CreateDirectory(tempDir);
// 파일 복사
File.Copy(file_exe, Path.Combine(tempDir, "amkor.exe"));
foreach (var filedll in files_dll)
File.Copy(filedll.FullName, Path.Combine(tempDir, filedll.Name));
// 압축 파일 생성
ZipFile.CreateFromDirectory(tempDir, newfilename);
// 임시 폴더 삭제
Directory.Delete(tempDir, true);
UTIL.MsgI("다음 패치 파일이 생성됨\n" + newfilename);
}
private void arLabel7_Click(object sender, EventArgs e)
{
PUB.SystemReboot(5,true);
}
private void button1_Click_1(object sender, EventArgs e)
{
//mapeditor
var fn = new System.IO.FileInfo(@".\test\AGVMapEditor.exe");
if (fn.Exists == false) return;
UTIL.RunExplorer(fn.FullName);
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

60
HMI/Project/Dialog/fTouchKey.Designer.cs generated Normal file
View File

@@ -0,0 +1,60 @@
namespace Project.Dialog
{
partial class fTouchKey
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.touchKeyCalc1 = new arCtl.TouchKeyCalc();
this.SuspendLayout();
//
// touchKeyCalc1
//
this.touchKeyCalc1.Dock = System.Windows.Forms.DockStyle.Fill;
this.touchKeyCalc1.Font = new System.Drawing.Font("Consolas", 11.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.touchKeyCalc1.Location = new System.Drawing.Point(0, 0);
this.touchKeyCalc1.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
this.touchKeyCalc1.Name = "touchKeyCalc1";
this.touchKeyCalc1.Size = new System.Drawing.Size(374, 330);
this.touchKeyCalc1.TabIndex = 0;
//
// fTouchKey
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(374, 330);
this.Controls.Add(this.touchKeyCalc1);
this.Name = "fTouchKey";
this.Text = "fTouchKey";
this.ResumeLayout(false);
}
#endregion
private arCtl.TouchKeyCalc touchKeyCalc1;
}
}

View File

@@ -0,0 +1,19 @@
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 Project.Dialog
{
public partial class fTouchKey : Form
{
public fTouchKey()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,147 @@
namespace Project.Dialog
{
partial class fTouchKeyFull
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.touchKeyFull1 = new arCtl.TouchKeyFull();
this.tbInput = new System.Windows.Forms.TextBox();
this.lbTitle = new arCtl.arLabel();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// touchKeyFull1
//
this.touchKeyFull1.Dock = System.Windows.Forms.DockStyle.Fill;
this.touchKeyFull1.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.touchKeyFull1.Location = new System.Drawing.Point(6, 95);
this.touchKeyFull1.Name = "touchKeyFull1";
this.touchKeyFull1.Size = new System.Drawing.Size(788, 230);
this.touchKeyFull1.TabIndex = 0;
this.touchKeyFull1.keyClick += new arCtl.TouchKeyFull.KeyClickHandler(this.touchKeyFull1_keyClick);
//
// tbInput
//
this.tbInput.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.tbInput.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
this.tbInput.Dock = System.Windows.Forms.DockStyle.Top;
this.tbInput.Font = new System.Drawing.Font("맑은 고딕", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.tbInput.ForeColor = System.Drawing.Color.White;
this.tbInput.Location = new System.Drawing.Point(6, 49);
this.tbInput.Name = "tbInput";
this.tbInput.Size = new System.Drawing.Size(788, 46);
this.tbInput.TabIndex = 0;
this.tbInput.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// lbTitle
//
this.lbTitle.BackColor = System.Drawing.Color.Gray;
this.lbTitle.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lbTitle.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbTitle.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbTitle.BorderColorOver = System.Drawing.Color.DarkBlue;
this.lbTitle.BorderSize = new System.Windows.Forms.Padding(1);
this.lbTitle.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbTitle.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbTitle.Dock = System.Windows.Forms.DockStyle.Top;
this.lbTitle.Enabled = false;
this.lbTitle.Enabled = true;
this.lbTitle.Font = new System.Drawing.Font("Consolas", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.lbTitle.ForeColor = System.Drawing.Color.White;
this.lbTitle.GradientEnable = true;
this.lbTitle.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbTitle.GradientRepeatBG = false;
this.lbTitle.isButton = false;
this.lbTitle.Location = new System.Drawing.Point(6, 5);
this.lbTitle.MouseDownColor = System.Drawing.Color.Yellow;
this.lbTitle.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbTitle.msg = null;
this.lbTitle.Name = "lbTitle";
this.lbTitle.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbTitle.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbTitle.ProgressEnable = false;
this.lbTitle.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbTitle.ProgressForeColor = System.Drawing.Color.Black;
this.lbTitle.ProgressMax = 100F;
this.lbTitle.ProgressMin = 0F;
this.lbTitle.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbTitle.ProgressValue = 0F;
this.lbTitle.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lbTitle.Sign = "";
this.lbTitle.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbTitle.SignColor = System.Drawing.Color.Yellow;
this.lbTitle.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbTitle.Size = new System.Drawing.Size(788, 44);
this.lbTitle.TabIndex = 2;
this.lbTitle.Text = "INPUT";
this.lbTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbTitle.TextShadow = true;
this.lbTitle.TextVisible = true;
//
// button1
//
this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.button1.Font = new System.Drawing.Font("Consolas", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.button1.Location = new System.Drawing.Point(728, 11);
this.button1.Margin = new System.Windows.Forms.Padding(0);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(60, 34);
this.button1.TabIndex = 3;
this.button1.Text = "CLOSE";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// fTouchKeyFull
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(18)))), ((int)(((byte)(18)))), ((int)(((byte)(18)))));
this.ClientSize = new System.Drawing.Size(800, 330);
this.Controls.Add(this.button1);
this.Controls.Add(this.touchKeyFull1);
this.Controls.Add(this.tbInput);
this.Controls.Add(this.lbTitle);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.KeyPreview = true;
this.Name = "fTouchKeyFull";
this.Padding = new System.Windows.Forms.Padding(6, 5, 6, 5);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "fTouchKeyFull";
this.Load += new System.EventHandler(this.fTouchKeyFull_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private arCtl.TouchKeyFull touchKeyFull1;
private arCtl.arLabel lbTitle;
public System.Windows.Forms.TextBox tbInput;
private System.Windows.Forms.Button button1;
}
}

View File

@@ -0,0 +1,99 @@
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 Project.Dialog
{
public partial class fTouchKeyFull : Form
{
public fTouchKeyFull(string title,string value)
{
InitializeComponent();
this.lbTitle.Text = title;
this.tbInput.Text = value;
this.KeyDown += (s1, e1) =>
{
if (e1.KeyCode == Keys.Escape)
this.Close();
};
this.lbTitle.MouseMove += LbTitle_MouseMove;
this.lbTitle.MouseUp += LbTitle_MouseUp;
this.lbTitle.MouseDown += LbTitle_MouseDown;
}
private void fTouchKeyFull_Load(object sender, EventArgs e)
{
this.Show();
Application.DoEvents();
this.tbInput.SelectAll();
this.tbInput.Focus();
}
#region "Mouse Form Move"
private Boolean fMove = false;
private Point MDownPos;
private void LbTitle_MouseMove(object sender, MouseEventArgs e)
{
if (fMove)
{
Point offset = new Point(e.X - MDownPos.X, e.Y - MDownPos.Y);
this.Left += offset.X;
this.Top += offset.Y;
offset = new Point(0, 0);
}
}
private void LbTitle_MouseUp(object sender, MouseEventArgs e)
{
fMove = false;
}
private void LbTitle_MouseDown(object sender, MouseEventArgs e)
{
MDownPos = new Point(e.X, e.Y);
fMove = true;
}
#endregion
private void touchKeyFull1_keyClick(string key)
{
var seltext = tbInput.SelectedText;
switch(key)
{
case "CLR":
this.tbInput.Text = string.Empty;
break;
case "BACK":
if (this.tbInput.TextLength < 2) this.tbInput.Text = string.Empty;
else this.tbInput.Text = this.tbInput.Text.Substring(0,tbInput.TextLength-1);
this.tbInput.SelectionStart = this.tbInput.TextLength;
break;
case "ENTER":
this.DialogResult = DialogResult.OK;
break;
case "SPACE":
if (seltext.Length == tbInput.TextLength) tbInput.Text = "";
this.tbInput.Text += " ";
this.tbInput.SelectionStart = this.tbInput.TextLength;
break;
default:
if (seltext.Length == tbInput.TextLength) tbInput.Text = "";
this.tbInput.Text += key;
this.tbInput.SelectionStart = this.tbInput.TextLength;
break;
}
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,835 @@
namespace Project.Dialog
{
partial class fTouchNumDot
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.arLabel1 = new arCtl.arLabel();
this.arLabel2 = new arCtl.arLabel();
this.arLabel3 = new arCtl.arLabel();
this.arLabel4 = new arCtl.arLabel();
this.arLabel5 = new arCtl.arLabel();
this.arLabel6 = new arCtl.arLabel();
this.arLabel7 = new arCtl.arLabel();
this.arLabel8 = new arCtl.arLabel();
this.arLabel9 = new arCtl.arLabel();
this.arLabel11 = new arCtl.arLabel();
this.arLabel12 = new arCtl.arLabel();
this.arLabel13 = new arCtl.arLabel();
this.arLabel14 = new arCtl.arLabel();
this.arLabel15 = new arCtl.arLabel();
this.arLabel10 = new arCtl.arLabel();
this.tbInput = new System.Windows.Forms.TextBox();
this.panel1 = new System.Windows.Forms.Panel();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// tableLayoutPanel1
//
this.tableLayoutPanel1.ColumnCount = 4;
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.Controls.Add(this.arLabel1, 0, 0);
this.tableLayoutPanel1.Controls.Add(this.arLabel2, 1, 0);
this.tableLayoutPanel1.Controls.Add(this.arLabel3, 2, 0);
this.tableLayoutPanel1.Controls.Add(this.arLabel4, 2, 1);
this.tableLayoutPanel1.Controls.Add(this.arLabel5, 1, 1);
this.tableLayoutPanel1.Controls.Add(this.arLabel6, 0, 1);
this.tableLayoutPanel1.Controls.Add(this.arLabel7, 0, 2);
this.tableLayoutPanel1.Controls.Add(this.arLabel8, 1, 2);
this.tableLayoutPanel1.Controls.Add(this.arLabel9, 2, 2);
this.tableLayoutPanel1.Controls.Add(this.arLabel11, 1, 3);
this.tableLayoutPanel1.Controls.Add(this.arLabel12, 3, 0);
this.tableLayoutPanel1.Controls.Add(this.arLabel13, 2, 3);
this.tableLayoutPanel1.Controls.Add(this.arLabel14, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.arLabel15, 3, 1);
this.tableLayoutPanel1.Controls.Add(this.arLabel10, 3, 2);
this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel1.Location = new System.Drawing.Point(5, 50);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 4;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(324, 265);
this.tableLayoutPanel1.TabIndex = 1;
//
// arLabel1
//
this.arLabel1.BackColor = System.Drawing.Color.SkyBlue;
this.arLabel1.BackColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel1.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel1.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel1.BorderColorOver = System.Drawing.Color.Red;
this.arLabel1.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel1.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel1.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel1.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel1.ForeColor = System.Drawing.Color.White;
this.arLabel1.GradientEnable = false;
this.arLabel1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel1.GradientRepeatBG = false;
this.arLabel1.isButton = true;
this.arLabel1.Location = new System.Drawing.Point(0, 0);
this.arLabel1.Margin = new System.Windows.Forms.Padding(0);
this.arLabel1.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel1.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel1.msg = null;
this.arLabel1.Name = "arLabel1";
this.arLabel1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel1.ProgressEnable = false;
this.arLabel1.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel1.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel1.ProgressMax = 100F;
this.arLabel1.ProgressMin = 0F;
this.arLabel1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel1.ProgressValue = 0F;
this.arLabel1.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel1.Sign = "";
this.arLabel1.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel1.SignColor = System.Drawing.Color.Yellow;
this.arLabel1.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel1.Size = new System.Drawing.Size(81, 66);
this.arLabel1.TabIndex = 0;
this.arLabel1.Tag = "1";
this.arLabel1.Text = "1";
this.arLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel1.TextShadow = false;
this.arLabel1.TextVisible = true;
this.arLabel1.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel2
//
this.arLabel2.BackColor = System.Drawing.Color.SkyBlue;
this.arLabel2.BackColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel2.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel2.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel2.BorderColorOver = System.Drawing.Color.Red;
this.arLabel2.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel2.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel2.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel2.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel2.ForeColor = System.Drawing.Color.White;
this.arLabel2.GradientEnable = false;
this.arLabel2.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel2.GradientRepeatBG = false;
this.arLabel2.isButton = true;
this.arLabel2.Location = new System.Drawing.Point(81, 0);
this.arLabel2.Margin = new System.Windows.Forms.Padding(0);
this.arLabel2.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel2.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel2.msg = null;
this.arLabel2.Name = "arLabel2";
this.arLabel2.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel2.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel2.ProgressEnable = false;
this.arLabel2.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel2.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel2.ProgressMax = 100F;
this.arLabel2.ProgressMin = 0F;
this.arLabel2.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel2.ProgressValue = 0F;
this.arLabel2.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel2.Sign = "";
this.arLabel2.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel2.SignColor = System.Drawing.Color.Yellow;
this.arLabel2.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel2.Size = new System.Drawing.Size(81, 66);
this.arLabel2.TabIndex = 0;
this.arLabel2.Tag = "2";
this.arLabel2.Text = "2";
this.arLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel2.TextShadow = false;
this.arLabel2.TextVisible = true;
this.arLabel2.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel3
//
this.arLabel3.BackColor = System.Drawing.Color.SkyBlue;
this.arLabel3.BackColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel3.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel3.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel3.BorderColorOver = System.Drawing.Color.Red;
this.arLabel3.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel3.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel3.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel3.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel3.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel3.ForeColor = System.Drawing.Color.White;
this.arLabel3.GradientEnable = false;
this.arLabel3.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel3.GradientRepeatBG = false;
this.arLabel3.isButton = true;
this.arLabel3.Location = new System.Drawing.Point(162, 0);
this.arLabel3.Margin = new System.Windows.Forms.Padding(0);
this.arLabel3.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel3.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel3.msg = null;
this.arLabel3.Name = "arLabel3";
this.arLabel3.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel3.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel3.ProgressEnable = false;
this.arLabel3.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel3.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel3.ProgressMax = 100F;
this.arLabel3.ProgressMin = 0F;
this.arLabel3.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel3.ProgressValue = 0F;
this.arLabel3.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel3.Sign = "";
this.arLabel3.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel3.SignColor = System.Drawing.Color.Yellow;
this.arLabel3.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel3.Size = new System.Drawing.Size(81, 66);
this.arLabel3.TabIndex = 0;
this.arLabel3.Tag = "3";
this.arLabel3.Text = "3";
this.arLabel3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel3.TextShadow = false;
this.arLabel3.TextVisible = true;
this.arLabel3.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel4
//
this.arLabel4.BackColor = System.Drawing.Color.SkyBlue;
this.arLabel4.BackColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel4.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel4.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel4.BorderColorOver = System.Drawing.Color.Red;
this.arLabel4.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel4.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel4.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel4.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel4.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel4.ForeColor = System.Drawing.Color.White;
this.arLabel4.GradientEnable = false;
this.arLabel4.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel4.GradientRepeatBG = false;
this.arLabel4.isButton = true;
this.arLabel4.Location = new System.Drawing.Point(162, 66);
this.arLabel4.Margin = new System.Windows.Forms.Padding(0);
this.arLabel4.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel4.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel4.msg = null;
this.arLabel4.Name = "arLabel4";
this.arLabel4.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel4.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel4.ProgressEnable = false;
this.arLabel4.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel4.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel4.ProgressMax = 100F;
this.arLabel4.ProgressMin = 0F;
this.arLabel4.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel4.ProgressValue = 0F;
this.arLabel4.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel4.Sign = "";
this.arLabel4.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel4.SignColor = System.Drawing.Color.Yellow;
this.arLabel4.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel4.Size = new System.Drawing.Size(81, 66);
this.arLabel4.TabIndex = 0;
this.arLabel4.Tag = "6";
this.arLabel4.Text = "6";
this.arLabel4.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel4.TextShadow = false;
this.arLabel4.TextVisible = true;
this.arLabel4.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel5
//
this.arLabel5.BackColor = System.Drawing.Color.SkyBlue;
this.arLabel5.BackColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel5.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel5.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel5.BorderColorOver = System.Drawing.Color.Red;
this.arLabel5.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel5.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel5.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel5.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel5.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel5.ForeColor = System.Drawing.Color.White;
this.arLabel5.GradientEnable = false;
this.arLabel5.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel5.GradientRepeatBG = false;
this.arLabel5.isButton = true;
this.arLabel5.Location = new System.Drawing.Point(81, 66);
this.arLabel5.Margin = new System.Windows.Forms.Padding(0);
this.arLabel5.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel5.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel5.msg = null;
this.arLabel5.Name = "arLabel5";
this.arLabel5.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel5.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel5.ProgressEnable = false;
this.arLabel5.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel5.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel5.ProgressMax = 100F;
this.arLabel5.ProgressMin = 0F;
this.arLabel5.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel5.ProgressValue = 0F;
this.arLabel5.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel5.Sign = "";
this.arLabel5.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel5.SignColor = System.Drawing.Color.Yellow;
this.arLabel5.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel5.Size = new System.Drawing.Size(81, 66);
this.arLabel5.TabIndex = 0;
this.arLabel5.Tag = "5";
this.arLabel5.Text = "5";
this.arLabel5.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel5.TextShadow = false;
this.arLabel5.TextVisible = true;
this.arLabel5.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel6
//
this.arLabel6.BackColor = System.Drawing.Color.SkyBlue;
this.arLabel6.BackColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel6.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel6.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel6.BorderColorOver = System.Drawing.Color.Red;
this.arLabel6.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel6.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel6.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel6.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel6.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel6.ForeColor = System.Drawing.Color.White;
this.arLabel6.GradientEnable = false;
this.arLabel6.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel6.GradientRepeatBG = false;
this.arLabel6.isButton = true;
this.arLabel6.Location = new System.Drawing.Point(0, 66);
this.arLabel6.Margin = new System.Windows.Forms.Padding(0);
this.arLabel6.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel6.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel6.msg = null;
this.arLabel6.Name = "arLabel6";
this.arLabel6.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel6.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel6.ProgressEnable = false;
this.arLabel6.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel6.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel6.ProgressMax = 100F;
this.arLabel6.ProgressMin = 0F;
this.arLabel6.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel6.ProgressValue = 0F;
this.arLabel6.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel6.Sign = "";
this.arLabel6.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel6.SignColor = System.Drawing.Color.Yellow;
this.arLabel6.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel6.Size = new System.Drawing.Size(81, 66);
this.arLabel6.TabIndex = 0;
this.arLabel6.Tag = "4";
this.arLabel6.Text = "4";
this.arLabel6.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel6.TextShadow = false;
this.arLabel6.TextVisible = true;
this.arLabel6.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel7
//
this.arLabel7.BackColor = System.Drawing.Color.SkyBlue;
this.arLabel7.BackColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel7.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel7.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel7.BorderColorOver = System.Drawing.Color.Red;
this.arLabel7.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel7.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel7.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel7.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel7.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel7.ForeColor = System.Drawing.Color.White;
this.arLabel7.GradientEnable = false;
this.arLabel7.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel7.GradientRepeatBG = false;
this.arLabel7.isButton = true;
this.arLabel7.Location = new System.Drawing.Point(0, 132);
this.arLabel7.Margin = new System.Windows.Forms.Padding(0);
this.arLabel7.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel7.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel7.msg = null;
this.arLabel7.Name = "arLabel7";
this.arLabel7.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel7.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel7.ProgressEnable = false;
this.arLabel7.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel7.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel7.ProgressMax = 100F;
this.arLabel7.ProgressMin = 0F;
this.arLabel7.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel7.ProgressValue = 0F;
this.arLabel7.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel7.Sign = "";
this.arLabel7.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel7.SignColor = System.Drawing.Color.Yellow;
this.arLabel7.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel7.Size = new System.Drawing.Size(81, 66);
this.arLabel7.TabIndex = 0;
this.arLabel7.Tag = "7";
this.arLabel7.Text = "7";
this.arLabel7.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel7.TextShadow = false;
this.arLabel7.TextVisible = true;
this.arLabel7.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel8
//
this.arLabel8.BackColor = System.Drawing.Color.SkyBlue;
this.arLabel8.BackColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel8.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel8.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel8.BorderColorOver = System.Drawing.Color.Red;
this.arLabel8.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel8.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel8.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel8.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel8.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel8.ForeColor = System.Drawing.Color.White;
this.arLabel8.GradientEnable = false;
this.arLabel8.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel8.GradientRepeatBG = false;
this.arLabel8.isButton = true;
this.arLabel8.Location = new System.Drawing.Point(81, 132);
this.arLabel8.Margin = new System.Windows.Forms.Padding(0);
this.arLabel8.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel8.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel8.msg = null;
this.arLabel8.Name = "arLabel8";
this.arLabel8.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel8.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel8.ProgressEnable = false;
this.arLabel8.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel8.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel8.ProgressMax = 100F;
this.arLabel8.ProgressMin = 0F;
this.arLabel8.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel8.ProgressValue = 0F;
this.arLabel8.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel8.Sign = "";
this.arLabel8.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel8.SignColor = System.Drawing.Color.Yellow;
this.arLabel8.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel8.Size = new System.Drawing.Size(81, 66);
this.arLabel8.TabIndex = 0;
this.arLabel8.Tag = "8";
this.arLabel8.Text = "8";
this.arLabel8.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel8.TextShadow = false;
this.arLabel8.TextVisible = true;
this.arLabel8.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel9
//
this.arLabel9.BackColor = System.Drawing.Color.SkyBlue;
this.arLabel9.BackColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel9.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel9.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel9.BorderColorOver = System.Drawing.Color.Red;
this.arLabel9.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel9.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel9.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel9.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel9.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel9.ForeColor = System.Drawing.Color.White;
this.arLabel9.GradientEnable = false;
this.arLabel9.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel9.GradientRepeatBG = false;
this.arLabel9.isButton = true;
this.arLabel9.Location = new System.Drawing.Point(162, 132);
this.arLabel9.Margin = new System.Windows.Forms.Padding(0);
this.arLabel9.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel9.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel9.msg = null;
this.arLabel9.Name = "arLabel9";
this.arLabel9.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel9.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel9.ProgressEnable = false;
this.arLabel9.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel9.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel9.ProgressMax = 100F;
this.arLabel9.ProgressMin = 0F;
this.arLabel9.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel9.ProgressValue = 0F;
this.arLabel9.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel9.Sign = "";
this.arLabel9.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel9.SignColor = System.Drawing.Color.Yellow;
this.arLabel9.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel9.Size = new System.Drawing.Size(81, 66);
this.arLabel9.TabIndex = 0;
this.arLabel9.Tag = "9";
this.arLabel9.Text = "9";
this.arLabel9.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel9.TextShadow = false;
this.arLabel9.TextVisible = true;
this.arLabel9.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel11
//
this.arLabel11.BackColor = System.Drawing.Color.SkyBlue;
this.arLabel11.BackColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel11.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel11.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel11.BorderColorOver = System.Drawing.Color.Red;
this.arLabel11.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel11.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel11.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel11.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel11.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel11.ForeColor = System.Drawing.Color.White;
this.arLabel11.GradientEnable = false;
this.arLabel11.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel11.GradientRepeatBG = false;
this.arLabel11.isButton = true;
this.arLabel11.Location = new System.Drawing.Point(81, 198);
this.arLabel11.Margin = new System.Windows.Forms.Padding(0);
this.arLabel11.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel11.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel11.msg = null;
this.arLabel11.Name = "arLabel11";
this.arLabel11.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel11.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel11.ProgressEnable = false;
this.arLabel11.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel11.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel11.ProgressMax = 100F;
this.arLabel11.ProgressMin = 0F;
this.arLabel11.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel11.ProgressValue = 0F;
this.arLabel11.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel11.Sign = "";
this.arLabel11.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel11.SignColor = System.Drawing.Color.Yellow;
this.arLabel11.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel11.Size = new System.Drawing.Size(81, 67);
this.arLabel11.TabIndex = 0;
this.arLabel11.Tag = "0";
this.arLabel11.Text = "0";
this.arLabel11.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel11.TextShadow = false;
this.arLabel11.TextVisible = true;
this.arLabel11.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel12
//
this.arLabel12.BackColor = System.Drawing.Color.Gray;
this.arLabel12.BackColor2 = System.Drawing.Color.Gold;
this.arLabel12.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel12.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel12.BorderColorOver = System.Drawing.Color.Red;
this.arLabel12.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel12.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel12.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel12.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel12.Font = new System.Drawing.Font("Consolas", 12F);
this.arLabel12.ForeColor = System.Drawing.Color.White;
this.arLabel12.GradientEnable = true;
this.arLabel12.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel12.GradientRepeatBG = false;
this.arLabel12.isButton = true;
this.arLabel12.Location = new System.Drawing.Point(243, 0);
this.arLabel12.Margin = new System.Windows.Forms.Padding(0);
this.arLabel12.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel12.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel12.msg = null;
this.arLabel12.Name = "arLabel12";
this.arLabel12.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel12.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel12.ProgressEnable = false;
this.arLabel12.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel12.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel12.ProgressMax = 100F;
this.arLabel12.ProgressMin = 0F;
this.arLabel12.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel12.ProgressValue = 0F;
this.arLabel12.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel12.Sign = "";
this.arLabel12.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel12.SignColor = System.Drawing.Color.Yellow;
this.arLabel12.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel12.Size = new System.Drawing.Size(81, 66);
this.arLabel12.TabIndex = 0;
this.arLabel12.Tag = "B";
this.arLabel12.Text = "BACK";
this.arLabel12.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel12.TextShadow = false;
this.arLabel12.TextVisible = true;
this.arLabel12.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel13
//
this.arLabel13.BackColor = System.Drawing.Color.SkyBlue;
this.arLabel13.BackColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel13.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel13.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel13.BorderColorOver = System.Drawing.Color.Red;
this.arLabel13.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel13.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel13.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel13.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel13.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel13.ForeColor = System.Drawing.Color.White;
this.arLabel13.GradientEnable = false;
this.arLabel13.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel13.GradientRepeatBG = false;
this.arLabel13.isButton = true;
this.arLabel13.Location = new System.Drawing.Point(162, 198);
this.arLabel13.Margin = new System.Windows.Forms.Padding(0);
this.arLabel13.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel13.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel13.msg = null;
this.arLabel13.Name = "arLabel13";
this.arLabel13.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel13.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel13.ProgressEnable = false;
this.arLabel13.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel13.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel13.ProgressMax = 100F;
this.arLabel13.ProgressMin = 0F;
this.arLabel13.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel13.ProgressValue = 0F;
this.arLabel13.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel13.Sign = "";
this.arLabel13.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel13.SignColor = System.Drawing.Color.Yellow;
this.arLabel13.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel13.Size = new System.Drawing.Size(81, 67);
this.arLabel13.TabIndex = 0;
this.arLabel13.Tag = ".";
this.arLabel13.Text = ".";
this.arLabel13.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel13.TextShadow = false;
this.arLabel13.TextVisible = true;
this.arLabel13.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel14
//
this.arLabel14.BackColor = System.Drawing.Color.SkyBlue;
this.arLabel14.BackColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel14.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel14.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel14.BorderColorOver = System.Drawing.Color.Red;
this.arLabel14.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel14.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel14.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel14.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel14.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.arLabel14.ForeColor = System.Drawing.Color.White;
this.arLabel14.GradientEnable = false;
this.arLabel14.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel14.GradientRepeatBG = false;
this.arLabel14.isButton = true;
this.arLabel14.Location = new System.Drawing.Point(0, 198);
this.arLabel14.Margin = new System.Windows.Forms.Padding(0);
this.arLabel14.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel14.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel14.msg = null;
this.arLabel14.Name = "arLabel14";
this.arLabel14.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel14.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel14.ProgressEnable = false;
this.arLabel14.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel14.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel14.ProgressMax = 100F;
this.arLabel14.ProgressMin = 0F;
this.arLabel14.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel14.ProgressValue = 0F;
this.arLabel14.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel14.Sign = "";
this.arLabel14.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel14.SignColor = System.Drawing.Color.Yellow;
this.arLabel14.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel14.Size = new System.Drawing.Size(81, 67);
this.arLabel14.TabIndex = 0;
this.arLabel14.Tag = "-";
this.arLabel14.Text = "-";
this.arLabel14.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel14.TextShadow = false;
this.arLabel14.TextVisible = true;
this.arLabel14.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel15
//
this.arLabel15.BackColor = System.Drawing.Color.Gray;
this.arLabel15.BackColor2 = System.Drawing.Color.SteelBlue;
this.arLabel15.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel15.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel15.BorderColorOver = System.Drawing.Color.Red;
this.arLabel15.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel15.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel15.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel15.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel15.Font = new System.Drawing.Font("Consolas", 12F);
this.arLabel15.ForeColor = System.Drawing.Color.White;
this.arLabel15.GradientEnable = true;
this.arLabel15.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel15.GradientRepeatBG = false;
this.arLabel15.isButton = true;
this.arLabel15.Location = new System.Drawing.Point(243, 66);
this.arLabel15.Margin = new System.Windows.Forms.Padding(0);
this.arLabel15.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel15.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel15.msg = null;
this.arLabel15.Name = "arLabel15";
this.arLabel15.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel15.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel15.ProgressEnable = false;
this.arLabel15.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel15.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel15.ProgressMax = 100F;
this.arLabel15.ProgressMin = 0F;
this.arLabel15.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel15.ProgressValue = 0F;
this.arLabel15.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel15.Sign = "";
this.arLabel15.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel15.SignColor = System.Drawing.Color.Yellow;
this.arLabel15.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel15.Size = new System.Drawing.Size(81, 66);
this.arLabel15.TabIndex = 0;
this.arLabel15.Tag = "C";
this.arLabel15.Text = "CLEAR";
this.arLabel15.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel15.TextShadow = false;
this.arLabel15.TextVisible = true;
this.arLabel15.Click += new System.EventHandler(this.arLabel1_Click);
//
// arLabel10
//
this.arLabel10.BackColor = System.Drawing.Color.CadetBlue;
this.arLabel10.BackColor2 = System.Drawing.Color.Lime;
this.arLabel10.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel10.BorderColor = System.Drawing.Color.SteelBlue;
this.arLabel10.BorderColorOver = System.Drawing.Color.Red;
this.arLabel10.BorderSize = new System.Windows.Forms.Padding(2);
this.arLabel10.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel10.Cursor = System.Windows.Forms.Cursors.Hand;
this.arLabel10.Dock = System.Windows.Forms.DockStyle.Fill;
this.arLabel10.Font = new System.Drawing.Font("Consolas", 12F);
this.arLabel10.ForeColor = System.Drawing.Color.White;
this.arLabel10.GradientEnable = true;
this.arLabel10.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arLabel10.GradientRepeatBG = false;
this.arLabel10.isButton = true;
this.arLabel10.Location = new System.Drawing.Point(243, 132);
this.arLabel10.Margin = new System.Windows.Forms.Padding(0);
this.arLabel10.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel10.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel10.msg = null;
this.arLabel10.Name = "arLabel10";
this.arLabel10.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel10.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel10.ProgressEnable = false;
this.arLabel10.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel10.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel10.ProgressMax = 100F;
this.arLabel10.ProgressMin = 0F;
this.arLabel10.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel10.ProgressValue = 0F;
this.tableLayoutPanel1.SetRowSpan(this.arLabel10, 2);
this.arLabel10.ShadowColor = System.Drawing.Color.WhiteSmoke;
this.arLabel10.Sign = "";
this.arLabel10.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel10.SignColor = System.Drawing.Color.Yellow;
this.arLabel10.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel10.Size = new System.Drawing.Size(81, 133);
this.arLabel10.TabIndex = 0;
this.arLabel10.Tag = "E";
this.arLabel10.Text = "ENTER";
this.arLabel10.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.arLabel10.TextShadow = false;
this.arLabel10.TextVisible = true;
this.arLabel10.Click += new System.EventHandler(this.arLabel1_Click);
//
// tbInput
//
this.tbInput.Dock = System.Windows.Forms.DockStyle.Top;
this.tbInput.Font = new System.Drawing.Font("Calibri", 20.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.tbInput.Location = new System.Drawing.Point(5, 5);
this.tbInput.Name = "tbInput";
this.tbInput.Size = new System.Drawing.Size(324, 40);
this.tbInput.TabIndex = 2;
this.tbInput.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// panel1
//
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
this.panel1.Location = new System.Drawing.Point(5, 45);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(324, 5);
this.panel1.TabIndex = 3;
//
// fTouchNumDot
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.ClientSize = new System.Drawing.Size(334, 320);
this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.panel1);
this.Controls.Add(this.tbInput);
this.Name = "fTouchNumDot";
this.Padding = new System.Windows.Forms.Padding(5);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Input Value";
this.Load += new System.EventHandler(this.fTouchNumDot_Load);
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
private arCtl.arLabel arLabel1;
private arCtl.arLabel arLabel2;
private arCtl.arLabel arLabel3;
private arCtl.arLabel arLabel4;
private arCtl.arLabel arLabel5;
private arCtl.arLabel arLabel6;
private arCtl.arLabel arLabel7;
private arCtl.arLabel arLabel8;
private arCtl.arLabel arLabel9;
private arCtl.arLabel arLabel10;
private arCtl.arLabel arLabel11;
private arCtl.arLabel arLabel12;
public System.Windows.Forms.TextBox tbInput;
private System.Windows.Forms.Panel panel1;
private arCtl.arLabel arLabel13;
private arCtl.arLabel arLabel14;
private arCtl.arLabel arLabel15;
}
}

View File

@@ -0,0 +1,85 @@
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 Project.Dialog
{
public partial class fTouchNumDot : Form
{
public fTouchNumDot(string value)
{
InitializeComponent();
this.tbInput.KeyDown += (s1, e1) => { if (e1.KeyCode == Keys.Enter) Confirm(); };
this.KeyPreview = true;
this.tbInput.Text = value;
this.KeyDown += (s1, e1) =>
{
if (e1.KeyCode == Keys.Escape) this.Close();
};
}
private void fTouchNumDot_Load(object sender, EventArgs e)
{
this.tbInput.SelectAll();
this.tbInput.Focus();
}
private void Confirm()
{
string id = tbInput.Text.Trim();
if (id.isEmpty())
{
tbInput.Focus();
return;
}
DialogResult = DialogResult.OK;
}
public void ProcessKey(ref TextBox cmb_rfid, string key)
{
if (key == "B")
{
if (cmb_rfid.Text != "")
cmb_rfid.Text = cmb_rfid.Text.Substring(0, cmb_rfid.Text.Length - 1);
}
else if (key == "C")
{
cmb_rfid.Text = "";
}
else if (key == "E")
{
Confirm();
}
else
{
if (cmb_rfid.SelectionLength > 0 && cmb_rfid.TextLength == cmb_rfid.SelectionLength)
{
cmb_rfid.Text = key;
}
else if (cmb_rfid.SelectionLength > 0)
{
//선택된 영역을 대체해준다.
cmb_rfid.SelectedText = key;
}
else cmb_rfid.Text += key;
}
cmb_rfid.SelectionLength = 0;
if (cmb_rfid.Text != "")
cmb_rfid.SelectionStart = cmb_rfid.Text.Length;
}
private void arLabel1_Click(object sender, EventArgs e)
{
var ctl = sender as arCtl.arLabel;
ProcessKey(ref tbInput, ctl.Tag.ToString());
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

500
HMI/Project/Dialog/fUpdateForm.Designer.cs generated Normal file
View File

@@ -0,0 +1,500 @@
namespace Project.Dialog
{
partial class fUpdateForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.tmBlink = new System.Windows.Forms.Timer(this.components);
this.arPanel1 = new arCtl.arPanel();
this.panButton = new System.Windows.Forms.Panel();
this.btYes = new arCtl.arLabel();
this.btNo = new arCtl.arLabel();
this.panel7 = new System.Windows.Forms.Panel();
this.lb3 = new arCtl.arLabel();
this.panel1 = new System.Windows.Forms.Panel();
this.lb2 = new arCtl.arLabel();
this.panel4 = new System.Windows.Forms.Panel();
this.lb1 = new arCtl.arLabel();
this.panel8 = new System.Windows.Forms.Panel();
this.lbTitle = new arCtl.arLabel();
this.arLabel1 = new arCtl.arLabel();
this.panel2 = new System.Windows.Forms.Panel();
this.arPanel1.SuspendLayout();
this.panButton.SuspendLayout();
this.SuspendLayout();
//
// tmBlink
//
this.tmBlink.Enabled = true;
this.tmBlink.Interval = 300;
this.tmBlink.Tick += new System.EventHandler(this.tmBlink_Tick);
//
// arPanel1
//
this.arPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.arPanel1.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.arPanel1.BorderColor = System.Drawing.Color.DimGray;
this.arPanel1.BorderSize = new System.Windows.Forms.Padding(1);
this.arPanel1.Controls.Add(this.panButton);
this.arPanel1.Controls.Add(this.panel7);
this.arPanel1.Controls.Add(this.lb3);
this.arPanel1.Controls.Add(this.panel2);
this.arPanel1.Controls.Add(this.arLabel1);
this.arPanel1.Controls.Add(this.panel1);
this.arPanel1.Controls.Add(this.lb2);
this.arPanel1.Controls.Add(this.panel4);
this.arPanel1.Controls.Add(this.lb1);
this.arPanel1.Controls.Add(this.panel8);
this.arPanel1.Controls.Add(this.lbTitle);
this.arPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.arPanel1.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Italic);
this.arPanel1.ForeColor = System.Drawing.Color.Khaki;
this.arPanel1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arPanel1.GradientRepeatBG = false;
this.arPanel1.Location = new System.Drawing.Point(5, 5);
this.arPanel1.Name = "arPanel1";
this.arPanel1.Padding = new System.Windows.Forms.Padding(6);
this.arPanel1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arPanel1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arPanel1.ProgressMax = 100F;
this.arPanel1.ProgressMin = 0F;
this.arPanel1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arPanel1.ProgressValue = 0F;
this.arPanel1.ShadowColor = System.Drawing.Color.Black;
this.arPanel1.ShowBorder = true;
this.arPanel1.Size = new System.Drawing.Size(508, 358);
this.arPanel1.TabIndex = 0;
this.arPanel1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.arPanel1.TextShadow = false;
this.arPanel1.UseProgressBar = false;
//
// panButton
//
this.panButton.Controls.Add(this.btYes);
this.panButton.Controls.Add(this.btNo);
this.panButton.Dock = System.Windows.Forms.DockStyle.Fill;
this.panButton.Location = new System.Drawing.Point(6, 298);
this.panButton.Name = "panButton";
this.panButton.Size = new System.Drawing.Size(496, 54);
this.panButton.TabIndex = 10;
//
// btYes
//
this.btYes.BackColor = System.Drawing.Color.SeaGreen;
this.btYes.BackColor2 = System.Drawing.Color.SeaGreen;
this.btYes.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.btYes.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.btYes.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.btYes.BorderSize = new System.Windows.Forms.Padding(1);
this.btYes.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.btYes.Cursor = System.Windows.Forms.Cursors.Hand;
this.btYes.Dock = System.Windows.Forms.DockStyle.Fill;
this.btYes.Enabled = false;
this.btYes.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btYes.ForeColor = System.Drawing.Color.Black;
this.btYes.GradientEnable = true;
this.btYes.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.btYes.GradientRepeatBG = false;
this.btYes.isButton = true;
this.btYes.Location = new System.Drawing.Point(0, 0);
this.btYes.MouseDownColor = System.Drawing.Color.Yellow;
this.btYes.MouseOverColor = System.Drawing.Color.Yellow;
this.btYes.msg = null;
this.btYes.Name = "btYes";
this.btYes.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.btYes.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.btYes.ProgressEnable = false;
this.btYes.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.btYes.ProgressForeColor = System.Drawing.Color.Black;
this.btYes.ProgressMax = 100F;
this.btYes.ProgressMin = 0F;
this.btYes.ProgressPadding = new System.Windows.Forms.Padding(0);
this.btYes.ProgressValue = 0F;
this.btYes.ShadowColor = System.Drawing.Color.Gray;
this.btYes.Sign = "";
this.btYes.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btYes.SignColor = System.Drawing.Color.Yellow;
this.btYes.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btYes.Size = new System.Drawing.Size(267, 54);
this.btYes.TabIndex = 0;
this.btYes.Text = "예(F5)";
this.btYes.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btYes.TextShadow = true;
this.btYes.TextVisible = true;
this.btYes.Click += new System.EventHandler(this.btYes_Click);
//
// btNo
//
this.btNo.BackColor = System.Drawing.Color.Goldenrod;
this.btNo.BackColor2 = System.Drawing.Color.Goldenrod;
this.btNo.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.btNo.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.btNo.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.btNo.BorderSize = new System.Windows.Forms.Padding(1);
this.btNo.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.btNo.Cursor = System.Windows.Forms.Cursors.Hand;
this.btNo.Dock = System.Windows.Forms.DockStyle.Right;
this.btNo.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btNo.ForeColor = System.Drawing.Color.Black;
this.btNo.GradientEnable = true;
this.btNo.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.btNo.GradientRepeatBG = false;
this.btNo.isButton = true;
this.btNo.Location = new System.Drawing.Point(267, 0);
this.btNo.MouseDownColor = System.Drawing.Color.Yellow;
this.btNo.MouseOverColor = System.Drawing.Color.Yellow;
this.btNo.msg = null;
this.btNo.Name = "btNo";
this.btNo.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.btNo.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.btNo.ProgressEnable = false;
this.btNo.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.btNo.ProgressForeColor = System.Drawing.Color.Black;
this.btNo.ProgressMax = 100F;
this.btNo.ProgressMin = 0F;
this.btNo.ProgressPadding = new System.Windows.Forms.Padding(0);
this.btNo.ProgressValue = 0F;
this.btNo.ShadowColor = System.Drawing.Color.Gray;
this.btNo.Sign = "";
this.btNo.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btNo.SignColor = System.Drawing.Color.Yellow;
this.btNo.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btNo.Size = new System.Drawing.Size(229, 54);
this.btNo.TabIndex = 1;
this.btNo.Text = "아니오(ESC)";
this.btNo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btNo.TextShadow = true;
this.btNo.TextVisible = true;
this.btNo.Click += new System.EventHandler(this.btNo_Click);
//
// panel7
//
this.panel7.Dock = System.Windows.Forms.DockStyle.Top;
this.panel7.Location = new System.Drawing.Point(6, 293);
this.panel7.Name = "panel7";
this.panel7.Size = new System.Drawing.Size(496, 5);
this.panel7.TabIndex = 0;
//
// lb3
//
this.lb3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb3.BackColor2 = System.Drawing.Color.Gray;
this.lb3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb3.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb3.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb3.BorderSize = new System.Windows.Forms.Padding(1);
this.lb3.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb3.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb3.Dock = System.Windows.Forms.DockStyle.Top;
this.lb3.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold);
this.lb3.ForeColor = System.Drawing.Color.White;
this.lb3.GradientEnable = true;
this.lb3.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb3.GradientRepeatBG = false;
this.lb3.isButton = false;
this.lb3.Location = new System.Drawing.Point(6, 243);
this.lb3.MouseDownColor = System.Drawing.Color.Yellow;
this.lb3.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb3.msg = null;
this.lb3.Name = "lb3";
this.lb3.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb3.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb3.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb3.ProgressEnable = true;
this.lb3.ProgressFont = new System.Drawing.Font("Consolas", 20F);
this.lb3.ProgressForeColor = System.Drawing.Color.Black;
this.lb3.ProgressMax = 100F;
this.lb3.ProgressMin = 0F;
this.lb3.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb3.ProgressValue = 50F;
this.lb3.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb3.Sign = "";
this.lb3.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb3.SignColor = System.Drawing.Color.Yellow;
this.lb3.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb3.Size = new System.Drawing.Size(496, 50);
this.lb3.TabIndex = 5;
this.lb3.Text = "0%";
this.lb3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lb3.TextShadow = true;
this.lb3.TextVisible = true;
//
// panel1
//
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
this.panel1.Location = new System.Drawing.Point(6, 183);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(496, 5);
this.panel1.TabIndex = 11;
//
// lb2
//
this.lb2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb2.BackColor2 = System.Drawing.Color.Gray;
this.lb2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb2.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb2.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb2.BorderSize = new System.Windows.Forms.Padding(1);
this.lb2.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb2.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb2.Dock = System.Windows.Forms.DockStyle.Top;
this.lb2.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold);
this.lb2.ForeColor = System.Drawing.Color.White;
this.lb2.GradientEnable = true;
this.lb2.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb2.GradientRepeatBG = false;
this.lb2.isButton = false;
this.lb2.Location = new System.Drawing.Point(6, 133);
this.lb2.MouseDownColor = System.Drawing.Color.Yellow;
this.lb2.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb2.msg = null;
this.lb2.Name = "lb2";
this.lb2.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb2.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb2.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb2.ProgressEnable = false;
this.lb2.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb2.ProgressForeColor = System.Drawing.Color.Black;
this.lb2.ProgressMax = 100F;
this.lb2.ProgressMin = 0F;
this.lb2.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb2.ProgressValue = 0F;
this.lb2.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb2.Sign = "";
this.lb2.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb2.SignColor = System.Drawing.Color.Yellow;
this.lb2.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb2.Size = new System.Drawing.Size(496, 50);
this.lb2.TabIndex = 4;
this.lb2.Text = "현재버젼 : {0}";
this.lb2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb2.TextShadow = true;
this.lb2.TextVisible = true;
//
// panel4
//
this.panel4.Dock = System.Windows.Forms.DockStyle.Top;
this.panel4.Location = new System.Drawing.Point(6, 128);
this.panel4.Name = "panel4";
this.panel4.Size = new System.Drawing.Size(496, 5);
this.panel4.TabIndex = 14;
//
// lb1
//
this.lb1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb1.BackColor2 = System.Drawing.Color.Gray;
this.lb1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb1.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb1.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb1.BorderSize = new System.Windows.Forms.Padding(1);
this.lb1.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb1.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb1.Dock = System.Windows.Forms.DockStyle.Top;
this.lb1.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold);
this.lb1.ForeColor = System.Drawing.Color.White;
this.lb1.GradientEnable = true;
this.lb1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb1.GradientRepeatBG = false;
this.lb1.isButton = false;
this.lb1.Location = new System.Drawing.Point(6, 78);
this.lb1.MouseDownColor = System.Drawing.Color.Yellow;
this.lb1.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb1.msg = null;
this.lb1.Name = "lb1";
this.lb1.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb1.ProgressEnable = false;
this.lb1.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb1.ProgressForeColor = System.Drawing.Color.Black;
this.lb1.ProgressMax = 100F;
this.lb1.ProgressMin = 0F;
this.lb1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb1.ProgressValue = 0F;
this.lb1.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb1.Sign = "";
this.lb1.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb1.SignColor = System.Drawing.Color.Yellow;
this.lb1.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb1.Size = new System.Drawing.Size(496, 50);
this.lb1.TabIndex = 2;
this.lb1.Text = "드라이브 : {0}";
this.lb1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb1.TextShadow = true;
this.lb1.TextVisible = true;
//
// panel8
//
this.panel8.Dock = System.Windows.Forms.DockStyle.Top;
this.panel8.Location = new System.Drawing.Point(6, 73);
this.panel8.Name = "panel8";
this.panel8.Size = new System.Drawing.Size(496, 5);
this.panel8.TabIndex = 18;
//
// lbTitle
//
this.lbTitle.BackColor = System.Drawing.Color.Brown;
this.lbTitle.BackColor2 = System.Drawing.Color.Tomato;
this.lbTitle.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lbTitle.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbTitle.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbTitle.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbTitle.BorderSize = new System.Windows.Forms.Padding(1);
this.lbTitle.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbTitle.Cursor = System.Windows.Forms.Cursors.Hand;
this.lbTitle.Dock = System.Windows.Forms.DockStyle.Top;
this.lbTitle.Font = new System.Drawing.Font("맑은 고딕", 22F, System.Drawing.FontStyle.Bold);
this.lbTitle.ForeColor = System.Drawing.Color.WhiteSmoke;
this.lbTitle.GradientEnable = true;
this.lbTitle.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Horizontal;
this.lbTitle.GradientRepeatBG = false;
this.lbTitle.isButton = true;
this.lbTitle.Location = new System.Drawing.Point(6, 6);
this.lbTitle.MouseDownColor = System.Drawing.Color.Yellow;
this.lbTitle.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbTitle.msg = null;
this.lbTitle.Name = "lbTitle";
this.lbTitle.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbTitle.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbTitle.ProgressEnable = false;
this.lbTitle.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbTitle.ProgressForeColor = System.Drawing.Color.Black;
this.lbTitle.ProgressMax = 100F;
this.lbTitle.ProgressMin = 0F;
this.lbTitle.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbTitle.ProgressValue = 0F;
this.lbTitle.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.lbTitle.Sign = "";
this.lbTitle.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbTitle.SignColor = System.Drawing.Color.Yellow;
this.lbTitle.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbTitle.Size = new System.Drawing.Size(496, 67);
this.lbTitle.TabIndex = 3;
this.lbTitle.Text = "프로그램 업데이트";
this.lbTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbTitle.TextShadow = true;
this.lbTitle.TextVisible = true;
this.lbTitle.Click += new System.EventHandler(this.lbTitle_Click);
//
// arLabel1
//
this.arLabel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.arLabel1.BackColor2 = System.Drawing.Color.Gray;
this.arLabel1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.arLabel1.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.arLabel1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.arLabel1.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.arLabel1.BorderSize = new System.Windows.Forms.Padding(1);
this.arLabel1.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.arLabel1.Cursor = System.Windows.Forms.Cursors.Arrow;
this.arLabel1.Dock = System.Windows.Forms.DockStyle.Top;
this.arLabel1.Font = new System.Drawing.Font("맑은 고딕", 15F, System.Drawing.FontStyle.Bold);
this.arLabel1.ForeColor = System.Drawing.Color.White;
this.arLabel1.GradientEnable = true;
this.arLabel1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.arLabel1.GradientRepeatBG = false;
this.arLabel1.isButton = false;
this.arLabel1.Location = new System.Drawing.Point(6, 188);
this.arLabel1.MouseDownColor = System.Drawing.Color.Yellow;
this.arLabel1.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.arLabel1.msg = null;
this.arLabel1.Name = "arLabel1";
this.arLabel1.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.arLabel1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arLabel1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arLabel1.ProgressEnable = false;
this.arLabel1.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.arLabel1.ProgressForeColor = System.Drawing.Color.Black;
this.arLabel1.ProgressMax = 100F;
this.arLabel1.ProgressMin = 0F;
this.arLabel1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arLabel1.ProgressValue = 0F;
this.arLabel1.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.arLabel1.Sign = "";
this.arLabel1.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.arLabel1.SignColor = System.Drawing.Color.Yellow;
this.arLabel1.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.arLabel1.Size = new System.Drawing.Size(496, 50);
this.arLabel1.TabIndex = 19;
this.arLabel1.Text = "패치버젼 : {0}";
this.arLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.arLabel1.TextShadow = true;
this.arLabel1.TextVisible = true;
//
// panel2
//
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
this.panel2.Location = new System.Drawing.Point(6, 238);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(496, 5);
this.panel2.TabIndex = 20;
//
// fUpdateForm
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(200)))), ((int)(((byte)(200)))), ((int)(((byte)(200)))));
this.ClientSize = new System.Drawing.Size(518, 368);
this.Controls.Add(this.arPanel1);
this.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.KeyPreview = true;
this.MaximizeBox = false;
this.Name = "fUpdateForm";
this.Padding = new System.Windows.Forms.Padding(5);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Message Window";
this.TopMost = true;
this.Load += new System.EventHandler(this.fMsg_Load);
this.arPanel1.ResumeLayout(false);
this.panButton.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
public arCtl.arLabel lb1;
private arCtl.arPanel arPanel1;
public arCtl.arLabel lbTitle;
public arCtl.arLabel lb3;
public arCtl.arLabel lb2;
private System.Windows.Forms.Timer tmBlink;
public arCtl.arLabel btYes;
public arCtl.arLabel btNo;
private System.Windows.Forms.Panel panButton;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel7;
private System.Windows.Forms.Panel panel4;
private System.Windows.Forms.Panel panel8;
private System.Windows.Forms.Panel panel2;
public arCtl.arLabel arLabel1;
}
}

View File

@@ -0,0 +1,247 @@
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;
using System.IO;
using System.IO.Compression;
using AR;
namespace Project.Dialog
{
public partial class fUpdateForm : Form
{
private Boolean fMove = false;
private Point MDownPos;
private string _drive = string.Empty;
public fUpdateForm()
{
InitializeComponent();
}
public fUpdateForm(string drvName)
{
InitializeComponent();
_drive = drvName;
this.FormClosing += fMsgWindow_FormClosing;
this.KeyDown += FJobSelect_KeyDown;
this.lbTitle.MouseMove += label1_MouseMove;
lbTitle.MouseUp += label1_MouseUp;
lbTitle.MouseDown += label1_MouseDown;
lbTitle.MouseDoubleClick += label1_MouseDoubleClick;
}
void fMsgWindow_FormClosing(object sender, FormClosingEventArgs e)
{
}
private void fMsg_Load(object sender, EventArgs e)
{
//해당드라이브에서 패치를 체크한다.
// AGV폴더 아래에 Patch_AGV_20200407.zip 식으로 파일을 처리한다
lb3.ProgressValue = 0;
lb3.Text = "--";
lb1.Text = string.Format("드라이브 : {0}", _drive);
lb2.Text = "현재버젼 : " + PUB.PatchVersion;
var dir = System.IO.Path.Combine(this._drive, "AGV");
if(System.IO.Directory.Exists(dir))
{
//폴더는 있다
var files = System.IO.Directory.GetFiles(dir, "Patch_AGV_*.zip");
if(files == null || files.Length == 0)
{
arLabel1.Text = "패치파일이 없습니다";
}
else
{
var LastFile = files.OrderByDescending(t => t).FirstOrDefault();
var splbuf = LastFile.Split('_');
patchversion = splbuf[2] + splbuf[3].ToUpper().Replace(".ZIP", "");
arLabel1.Text = "패치버젼 : " + patchversion;
arLabel1.Tag = LastFile;
btYes.Enabled = true;
}
}
else
{
arLabel1.Text = "패치폴더("+dir +")가 없습니다";
}
}
string patchversion = "";
private void FJobSelect_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
e.Handled = true;
e.SuppressKeyPress = false;
DialogResult = DialogResult.Cancel;
this.Close();
}
else if (e.KeyCode == Keys.F5)
btYes.PerformClick();
}
//public void setMessage(string msg)
//{
// //msg를 분리해서 표시를 한다.
// var lbs = new arCtl.arLabel[] { lbTitle, lb1, lb2, lb3 };
// var lineBuf = msg.Replace("\r", "").Split('\n');
// int maxLine = Math.Min(lbs.Length, lineBuf.Length);
// for (int i = 0; i < lbs.Length; i++) //최대줄을 넘어가는건 표시불가
// {
// if (i >= lineBuf.Length)
// {
// lbs[i].Text = string.Empty;
// }
// else
// {
// if (i > 0) lbs[i].Text = string.Format("{0}. {1}", i, lineBuf[i]);
// else lbs[i].Text = lineBuf[i];
// }
// }
//}
private void label1_MouseMove(object sender, MouseEventArgs e)
{
if (fMove)
{
Point offset = new Point(e.X - MDownPos.X, e.Y - MDownPos.Y);
this.Left += offset.X;
this.Top += offset.Y;
offset = new Point(0, 0);
}
}
private void label1_MouseUp(object sender, MouseEventArgs e)
{
fMove = false;
}
private void label1_MouseDown(object sender, MouseEventArgs e)
{
MDownPos = new Point(e.X, e.Y);
fMove = true;
}
private void label1_MouseDoubleClick(object sender, MouseEventArgs e)
{
}
public enum EWinColor
{
Attention = 0,
Error,
Information
}
public void SetWindowColor(EWinColor wincolor)
{
switch (wincolor)
{
case EWinColor.Attention:
lbTitle.BackColor = Color.Gold;
lbTitle.BackColor2 = Color.Orange;
lbTitle.ShadowColor = Color.FromArgb(150, 150, 150);
lbTitle.ForeColor = Color.FromArgb(50, 50, 50);
break;
case EWinColor.Error:
lbTitle.BackColor = Color.Brown;
lbTitle.BackColor2 = Color.Tomato;
lbTitle.ShadowColor = Color.FromArgb(50, 50, 50);
lbTitle.ForeColor = Color.WhiteSmoke;
break;
default:
lbTitle.BackColor = Color.DarkTurquoise;
lbTitle.BackColor2 = Color.LightSkyBlue;
lbTitle.ShadowColor = Color.FromArgb(50, 50, 50);
lbTitle.ForeColor = Color.WhiteSmoke;
break;
}
}
private void lbTitle_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Cancel;
this.Close();
}
private void tmBlink_Tick(object sender, EventArgs e)
{
var bg1 = lbTitle.BackColor;
var bg2 = lbTitle.BackColor2;
lbTitle.BackColor = (Color)bg2;
lbTitle.BackColor2 = (Color)bg1;
}
private void btYes_Click(object sender, EventArgs e)
{
//파일
var file = arLabel1.Tag.ToString();
if(System.IO.File.Exists(file))
{
//이 파일을 _patch 폴더에 압축해제한다.
var dir_path = new System.IO.DirectoryInfo(System.IO.Path.Combine(UTIL.CurrentPath ,"_patch"));
if (dir_path.Exists == true)
{
try
{
dir_path.Delete(true);
} catch (Exception ex)
{
UTIL.MsgE(ex.Message);
return;
}
}
else
{
dir_path.Create(); //폴더를 생성해준다.
}
//해당폴더에 압축을 해제해준다.
ZipFile.ExtractToDirectory(file, dir_path.FullName);
//패치정보파일 추가
var infofile = System.IO.Path.Combine(dir_path.FullName, "version.txt");
System.IO.File.WriteAllText(infofile, patchversion, System.Text.Encoding.UTF8);
DialogResult = DialogResult.Yes;
this.Close();
}
else
{
UTIL.MsgE("패치파일이 없습니다\n" + file);
return;
}
}
private void F_ExtractProgress(object sender, EventArgs e)
{
// System.IO.Compression은 진행률 이벤트를 제공하지 않으므로
// 필요한 경우 별도의 진행률 계산 로직을 구현해야 합니다.
}
private void btNo_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
this.Close();
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="tmBlink.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

168
HMI/Project/Dialog/fVolume.Designer.cs generated Normal file
View File

@@ -0,0 +1,168 @@
namespace Project.Dialog
{
partial class fVolume
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.button3 = new System.Windows.Forms.Button();
this.button4 = new System.Windows.Forms.Button();
this.button5 = new System.Windows.Forms.Button();
this.button6 = new System.Windows.Forms.Button();
this.button7 = new System.Windows.Forms.Button();
this.button8 = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(10, 9);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(169, 103);
this.button1.TabIndex = 0;
this.button1.Text = "up";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(185, 9);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(169, 103);
this.button2.TabIndex = 1;
this.button2.Text = "down";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// button3
//
this.button3.Location = new System.Drawing.Point(360, 9);
this.button3.Name = "button3";
this.button3.Size = new System.Drawing.Size(169, 103);
this.button3.TabIndex = 2;
this.button3.Text = "mute";
this.button3.UseVisualStyleBackColor = true;
this.button3.Click += new System.EventHandler(this.button3_Click);
//
// button4
//
this.button4.Location = new System.Drawing.Point(185, 118);
this.button4.Name = "button4";
this.button4.Size = new System.Drawing.Size(169, 103);
this.button4.TabIndex = 4;
this.button4.Text = "music down";
this.button4.UseVisualStyleBackColor = true;
this.button4.Click += new System.EventHandler(this.button4_Click);
//
// button5
//
this.button5.Location = new System.Drawing.Point(10, 118);
this.button5.Name = "button5";
this.button5.Size = new System.Drawing.Size(169, 103);
this.button5.TabIndex = 3;
this.button5.Text = "music up";
this.button5.UseVisualStyleBackColor = true;
this.button5.Click += new System.EventHandler(this.button5_Click);
//
// button6
//
this.button6.Location = new System.Drawing.Point(359, 118);
this.button6.Name = "button6";
this.button6.Size = new System.Drawing.Size(169, 46);
this.button6.TabIndex = 5;
this.button6.Text = "play";
this.button6.UseVisualStyleBackColor = true;
this.button6.Click += new System.EventHandler(this.button6_Click);
//
// button7
//
this.button7.Location = new System.Drawing.Point(359, 175);
this.button7.Name = "button7";
this.button7.Size = new System.Drawing.Size(169, 46);
this.button7.TabIndex = 5;
this.button7.Text = "stop";
this.button7.UseVisualStyleBackColor = true;
this.button7.Click += new System.EventHandler(this.button7_Click);
//
// button8
//
this.button8.Location = new System.Drawing.Point(10, 227);
this.button8.Name = "button8";
this.button8.Size = new System.Drawing.Size(169, 46);
this.button8.TabIndex = 6;
this.button8.Text = "Speak";
this.button8.UseVisualStyleBackColor = true;
this.button8.Click += new System.EventHandler(this.button8_Click);
//
// textBox1
//
this.textBox1.Font = new System.Drawing.Font("굴림", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.textBox1.Location = new System.Drawing.Point(185, 234);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(343, 32);
this.textBox1.TabIndex = 7;
this.textBox1.Text = "음성 테스트 메세지 입니다";
//
// fVolume
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(540, 282);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.button8);
this.Controls.Add(this.button7);
this.Controls.Add(this.button6);
this.Controls.Add(this.button4);
this.Controls.Add(this.button5);
this.Controls.Add(this.button3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "fVolume";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "fVolume";
this.Load += new System.EventHandler(this.fVolume_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.Button button5;
private System.Windows.Forms.Button button6;
private System.Windows.Forms.Button button7;
private System.Windows.Forms.Button button8;
private System.Windows.Forms.TextBox textBox1;
}
}

View File

@@ -0,0 +1,128 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Project.Dialog
{
public partial class fVolume : Form
{
//AudioSwitcher.AudioApi.CoreAudio.CoreAudioController ac;
//AudioSwitcher.AudioApi.CoreAudio.CoreAudioDevice dev;
System.Media.SoundPlayer snd;
private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int APPCOMMAND_VOLUME_UP = 0xA0000;
private const int APPCOMMAND_VOLUME_DOWN = 0x90000;
private const int WM_APPCOMMAND = 0x319;
[DllImport("user32.dll")]
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg,
IntPtr wParam, IntPtr lParam);
private void Mute()
{
SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
(IntPtr)APPCOMMAND_VOLUME_MUTE);
}
private void VolDown()
{
SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
(IntPtr)APPCOMMAND_VOLUME_DOWN);
}
private void VolUp()
{
SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle,
(IntPtr)APPCOMMAND_VOLUME_UP);
}
public fVolume()
{
InitializeComponent();
}
private void trackBar1_Scroll(object sender, EventArgs e)
{
//if(dev != null)
//{
// dev.Volume = this.trackBar1.Value;
// System.Media.SystemSounds.Beep.Play();
//}
}
private void fVolume_Load(object sender, EventArgs e)
{
snd = new System.Media.SoundPlayer();
//var dev = new AudioSwitcher.AudioApi.CoreAudio.CoreAudioController().GetPlaybackDevices();
//if (dev == null)
//{
// trackBar1.Enabled = false;
// UTIL.MsgE("사운드 장치가 없습니다", true);
//}
//else
//{
// this.trackBar1.Value = (int)dev.Volume;
// System.Media.SystemSounds.Beep.Play();
//}
}
private void button1_Click(object sender, EventArgs e)
{
//up
VolUp();
System.Media.SystemSounds.Beep.Play();
}
private void button2_Click(object sender, EventArgs e)
{
VolDown();
System.Media.SystemSounds.Beep.Play();
}
private void button3_Click(object sender, EventArgs e)
{
Mute();
}
private void button5_Click(object sender, EventArgs e)
{
var newvol = PUB.setting.musicvol + 10;
if (newvol > 100) newvol = 100;
if (newvol < 0) newvol = 0;
PUB.SetVolume(newvol);
}
private void button4_Click(object sender, EventArgs e)
{
var newvol = PUB.setting.musicvol - 10;
if (newvol > 100) newvol = 100;
if (newvol < 0) newvol = 0;
PUB.SetVolume(newvol);
}
private void button7_Click(object sender, EventArgs e)
{
PUB.mplayer.Stop();
}
private void button6_Click(object sender, EventArgs e)
{
PUB.mplayer.Play();
}
private void button8_Click(object sender, EventArgs e)
{
var s = "고수석님, 그 에러는 못고쳐요. 포기 하면 편해요";
var s1 = $"현재시간은 {DateTime.Now.Hour}시 입니다";
PUB.Speak(this.textBox1.Text);
}
}
}

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,239 @@
namespace Project.Dialog
{
partial class fXbeeSetting
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.button1 = new System.Windows.Forms.Button();
this.tbBaud = new System.Windows.Forms.TextBox();
this.tbPortName = new System.Windows.Forms.ComboBox();
this.panel1 = new System.Windows.Forms.Panel();
this.button2 = new System.Windows.Forms.Button();
this.btmy = new System.Windows.Forms.Button();
this.tbmy = new System.Windows.Forms.TextBox();
this.btch = new System.Windows.Forms.Button();
this.tbch = new System.Windows.Forms.TextBox();
this.btpand = new System.Windows.Forms.Button();
this.tbpanid = new System.Windows.Forms.TextBox();
this.panel2 = new System.Windows.Forms.Panel();
this.rtXbee = new arCtl.LogTextBox();
this.serialPort1 = new System.IO.Ports.SerialPort(this.components);
this.panel1.SuspendLayout();
this.panel2.SuspendLayout();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(25, 45);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(227, 26);
this.button1.TabIndex = 0;
this.button1.Text = "open/close";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// tbBaud
//
this.tbBaud.Font = new System.Drawing.Font("굴림", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.tbBaud.Location = new System.Drawing.Point(152, 13);
this.tbBaud.Name = "tbBaud";
this.tbBaud.Size = new System.Drawing.Size(100, 26);
this.tbBaud.TabIndex = 2;
this.tbBaud.Text = "9600";
this.tbBaud.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// tbPortName
//
this.tbPortName.Font = new System.Drawing.Font("굴림", 12F);
this.tbPortName.FormattingEnabled = true;
this.tbPortName.Location = new System.Drawing.Point(25, 15);
this.tbPortName.Name = "tbPortName";
this.tbPortName.Size = new System.Drawing.Size(121, 24);
this.tbPortName.TabIndex = 3;
//
// panel1
//
this.panel1.Controls.Add(this.button2);
this.panel1.Controls.Add(this.btmy);
this.panel1.Controls.Add(this.tbmy);
this.panel1.Controls.Add(this.btch);
this.panel1.Controls.Add(this.tbch);
this.panel1.Controls.Add(this.btpand);
this.panel1.Controls.Add(this.tbpanid);
this.panel1.Controls.Add(this.tbPortName);
this.panel1.Controls.Add(this.button1);
this.panel1.Controls.Add(this.tbBaud);
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(580, 118);
this.panel1.TabIndex = 4;
//
// button2
//
this.button2.Location = new System.Drawing.Point(293, 15);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(75, 89);
this.button2.TabIndex = 10;
this.button2.Text = "Read Setting";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// btmy
//
this.btmy.Location = new System.Drawing.Point(480, 78);
this.btmy.Name = "btmy";
this.btmy.Size = new System.Drawing.Size(86, 26);
this.btmy.TabIndex = 9;
this.btmy.Text = "My";
this.btmy.UseVisualStyleBackColor = true;
this.btmy.Click += new System.EventHandler(this.btmy_Click);
//
// tbmy
//
this.tbmy.Font = new System.Drawing.Font("굴림", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.tbmy.Location = new System.Drawing.Point(374, 78);
this.tbmy.Name = "tbmy";
this.tbmy.Size = new System.Drawing.Size(100, 26);
this.tbmy.TabIndex = 8;
this.tbmy.Text = "9600";
this.tbmy.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// btch
//
this.btch.Location = new System.Drawing.Point(480, 47);
this.btch.Name = "btch";
this.btch.Size = new System.Drawing.Size(86, 26);
this.btch.TabIndex = 7;
this.btch.Text = "Channel";
this.btch.UseVisualStyleBackColor = true;
this.btch.Click += new System.EventHandler(this.btch_Click);
//
// tbch
//
this.tbch.Font = new System.Drawing.Font("굴림", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.tbch.Location = new System.Drawing.Point(374, 47);
this.tbch.Name = "tbch";
this.tbch.Size = new System.Drawing.Size(100, 26);
this.tbch.TabIndex = 6;
this.tbch.Text = "9600";
this.tbch.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// btpand
//
this.btpand.Location = new System.Drawing.Point(480, 15);
this.btpand.Name = "btpand";
this.btpand.Size = new System.Drawing.Size(86, 26);
this.btpand.TabIndex = 5;
this.btpand.Text = "PanID";
this.btpand.UseVisualStyleBackColor = true;
this.btpand.Click += new System.EventHandler(this.btpand_Click);
//
// tbpanid
//
this.tbpanid.Font = new System.Drawing.Font("굴림", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
this.tbpanid.Location = new System.Drawing.Point(374, 15);
this.tbpanid.Name = "tbpanid";
this.tbpanid.Size = new System.Drawing.Size(100, 26);
this.tbpanid.TabIndex = 4;
this.tbpanid.Text = "9600";
this.tbpanid.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
//
// panel2
//
this.panel2.Controls.Add(this.rtXbee);
this.panel2.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel2.Location = new System.Drawing.Point(0, 118);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(580, 338);
this.panel2.TabIndex = 5;
//
// rtXbee
//
this.rtXbee.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));
this.rtXbee.ColorList = new arCtl.sLogMessageColor[0];
this.rtXbee.DateFormat = "mm:ss.fff";
this.rtXbee.DefaultColor = System.Drawing.Color.LightGray;
this.rtXbee.Dock = System.Windows.Forms.DockStyle.Fill;
this.rtXbee.EnableDisplayTimer = false;
this.rtXbee.EnableGubunColor = true;
this.rtXbee.Font = new System.Drawing.Font("맑은 고딕", 6.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.rtXbee.ListFormat = "[{0}] {1}";
this.rtXbee.Location = new System.Drawing.Point(0, 0);
this.rtXbee.MaxListCount = ((ushort)(1000));
this.rtXbee.MaxTextLength = ((uint)(400000u));
this.rtXbee.MessageInterval = 50;
this.rtXbee.Name = "rtXbee";
this.rtXbee.Size = new System.Drawing.Size(580, 338);
this.rtXbee.TabIndex = 2;
this.rtXbee.Text = "";
//
// serialPort1
//
this.serialPort1.ReadTimeout = 1000;
this.serialPort1.WriteTimeout = 1000;
//
// fXbeeSetting
//
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(580, 456);
this.Controls.Add(this.panel2);
this.Controls.Add(this.panel1);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "fXbeeSetting";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Form1";
this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.fXbeeSetting_FormClosed);
this.Load += new System.EventHandler(this.fXbeeSetting_Load);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.panel2.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox tbBaud;
private System.Windows.Forms.ComboBox tbPortName;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel2;
private arCtl.LogTextBox rtXbee;
private System.Windows.Forms.Button btpand;
private System.Windows.Forms.TextBox tbpanid;
private System.Windows.Forms.Button btmy;
private System.Windows.Forms.TextBox tbmy;
private System.Windows.Forms.Button btch;
private System.Windows.Forms.TextBox tbch;
private System.Windows.Forms.Button button2;
private System.IO.Ports.SerialPort serialPort1;
}
}

View File

@@ -0,0 +1,193 @@
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;
using AR;
using COMM;
namespace Project.Dialog
{
public partial class fXbeeSetting : Form
{
public fXbeeSetting()
{
InitializeComponent();
VAR.BOOL[eVarBool.DISABLE_AUTOCONN_XBEE] = true;
PUB.XBE.Close();
this.serialPort1.DataReceived += SerialPort1_DataReceived;
}
private void fXbeeSetting_Load(object sender, EventArgs e)
{
this.tbPortName.Items.Clear();
foreach (var item in System.IO.Ports.SerialPort.GetPortNames())
{
this.tbPortName.Items.Add(item);
}
this.tbPortName.Text = PUB.setting.Port_XBE;
this.tbBaud.Text = PUB.setting.Baud_XBE.ToString();
}
void showlog(string Message)
{
if (rtXbee.Visible)
{
rtXbee.AddMsg(DateTime.Now, "NORMAL", Message);
}
}
void showlog(arCtl.LogTextBox rtRx, DateTime LogTime, string TypeStr, string Message)
{
if (rtRx.Visible)
{
rtRx.AddMsg(LogTime, TypeStr, Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
if (this.serialPort1.IsOpen)
{
serialPort1.Close();
showlog("closed");
}
else
{
serialPort1.PortName = tbPortName.Text;
serialPort1.BaudRate = int.Parse(tbBaud.Text);
serialPort1.Open();
showlog("open");
}
}
private void fXbeeSetting_FormClosed(object sender, FormClosedEventArgs e)
{
VAR.BOOL[eVarBool.DISABLE_AUTOCONN_XBEE] = false;
}
private volatile bool isCommandExecuting = false;
private void SerialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (isCommandExecuting) return;
try
{
string data = serialPort1.ReadExisting();
var hexdata = System.Text.Encoding.Default.GetBytes(data);
var hexstr = string.Join(" ", hexdata.Select(t => t.ToString("X2")));
if (!string.IsNullOrEmpty(data))
{
this.BeginInvoke(new Action(() =>
{
showlog($"RxAsync: {hexstr}");
}));
}
}
catch { }
}
private string Cmd(string cmd, int timeout = 1000)
{
isCommandExecuting = true;
try
{
if (!serialPort1.IsOpen) return "Error: Port Closed";
serialPort1.DiscardInBuffer();
serialPort1.Write(cmd);
System.Threading.Thread.Sleep(20);
serialPort1.ReadTimeout = timeout;
string res = serialPort1.ReadTo("\r");
System.Threading.Thread.Sleep(20);
showlog($"Tx:{cmd.Trim()}, Rx:{res}");
//명령수신호 10ms 대기후 다음 명령을 전송
System.Threading.Thread.Sleep(20);
return res;
}
catch (Exception ex)
{
showlog($"Err: {ex.Message}");
return "Error";
}
finally
{
isCommandExecuting = false;
}
}
private void btpand_Click(object sender, EventArgs e)
{
//각명령마다 회신을 확인하고 다음명령을 실행해야함
//명령수신호 10ms 대기후 다음 명령을 전송
//명령을 설정하면 응답은 OK\d 형태로 입력된다.
var cmds = new string[] {
"+++",
$"ATID{tbpanid.Text}\r" ,
$"ATCN\r"};
foreach (var cmd in cmds)
{
if(!Cmd(cmd).Contains("OK"))
{
showlog("FAIL");
break;
}
}
}
private void btch_Click(object sender, EventArgs e)
{
var cmds = new string[] {
"+++",
$"ATCH{tbch.Text}\r" ,
$"ATCN\r"};
foreach (var cmd in cmds)
{
if (!Cmd(cmd).Contains("OK"))
{
showlog("FAIL");
break;
}
}
}
private void btmy_Click(object sender, EventArgs e)
{
var cmds = new string[] {
"+++",
$"ATMY{tbmy.Text}\r" ,
$"ATCN\r"};
foreach (var cmd in cmds)
{
if (!Cmd(cmd).Contains("OK"))
{
showlog("FAIL");
break;
}
}
}
private void button2_Click(object sender, EventArgs e)
{
//read all(id,ch,my)
if (Cmd("+++").Contains("OK"))
{
var id = Cmd("ATID\r");
var ch = Cmd("ATCH\r");
var my = Cmd("ATMY\r");
Cmd("ATCN\r");
this.BeginInvoke(new Action(() => {
this.tbpanid.Text = id;
this.tbch.Text = ch;
this.tbmy.Text = my;
}));
}
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="serialPort1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,418 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AR;
namespace Project.Manager
{
public class DatabaseManager
{
/// <summary>
/// 파일검색방법
/// </summary>
public enum eFileSearchMode
{
Normal,
Project,
Model,
MCCode,
Barcode,
All,
}
public enum eStripSearchResult
{
None,
OK,
NG,
}
/// <summary>
/// 버퍼갯수(지정 갯수가 차면 실제파일에 기록을 한다)
/// </summary>
private int MaxBufferCount = 1;
/// <summary>
/// 최종파일
/// </summary>
private String LastFileName;
private string[] dataPath = new string[] { };
private DataSet1.ResultDataDataTable dt;
// private string _subDirName = string.Empty;
/// <summary>
/// 파일디비초기화작업(클라이언트 갯수만큼 버퍼를 확보한다)
/// </summary>
public DatabaseManager(string[] dataPath_, int _MaxBufferCount = 100)
{
LastFileName = string.Empty;
dt = new DataSet1.ResultDataDataTable();
this.dataPath = dataPath_;
if (dataPath_.Length == 0) dataPath = new string[]{ System.IO.Path.Combine(UTIL.CurrentPath, "Data")};
//최대버퍼갯수(이 갯수를 넘어가면 실제 파일에 기록한다)
MaxBufferCount = _MaxBufferCount;
//_subDirName = subDirName;
}
//해당 결과를 버퍼에 추가한다.
public void Add(DataSet1.ResultDataRow dataRow, Boolean autoFlush = false)
{
//입력된 자료를 복사해서 버퍼에 넣는다.
var newdr = this.dt.NewResultDataRow();
foreach (string col in getDataColumnList())
{
newdr[col] = dataRow[col];
}
this.dt.AddResultDataRow(newdr);
//만약자료가 일정데이터수를 넘었다면 flush 한다
if (autoFlush || dt.Rows.Count >= MaxBufferCount)
{
Flush(); //파일에 실제저장한다.
}
}
/// <summary>
/// 신규파일을 생성합니다.
/// </summary>
/// <param name="filename"></param>
void MakeFile(string filename)
{
//파일이없다면 헤더를 만들어준다.
AR.XMLHelper xml = new AR.XMLHelper(filename);
xml.CreateFile();
}
/// <summary>
/// 저장해야할 컬럼명을 반환한다.(idx는 제외한다)
/// </summary>
/// <returns></returns>
public string[] getDataColumnList()
{
//저장하고자하는 순서를 미리 지정한다.(지정안된 자료는 알아서 저장된다)
string[] reserveCols = new string[] { };
List<String> cols = new List<string>();
cols.AddRange(reserveCols);
for (int i = 0; i < this.dt.Columns.Count; i++)
{
string colname = dt.Columns[i].ColumnName;
if (reserveCols.Contains(colname)) continue;
cols.Add(colname);
}
return cols.ToArray();
}
public void Flush()
{
//데이터가없다면 처리하지 않음
if (this.dt.Rows.Count < 1) return;
//쓸데이터를 모두 버퍼에 밀어넣는다.
foreach (DataSet1.ResultDataRow dr in dt.Rows)
{
if (dr.RowState == System.Data.DataRowState.Deleted || dr.RowState == System.Data.DataRowState.Detached) continue;
//lot date check
if (dr.time_start.Year == 1982) dr.time_start = DateTime.Now;
if (dr.time_end.Year == 1982) dr.time_end = DateTime.Now;
//작업이 종료된 시간을 기준으로 파일을 생성한다.
// if (dr.info_lot.isEmpty()) dr.info_lot = "NoLot";
//if (dr.info_stripid.isEmpty()) dr.info_stripid = "S" + dr.time_pcbstart.ToString("yyyyMMddHHmmss");
//string curdatestr = string.Format("{0:0000}\\{1:00}\\{2:00}\\{3}\\{4}",
// dr.time_lotstart.Year, dr.time_lotstart.Month, dr.time_lotstart.Day, dr.info_lot,dr.info_stripid);
//저장할 파일 체크
System.IO.FileInfo fi =new System.IO.FileInfo( dr.info_filename+".xml");
//폴더새엇ㅇ
if (!fi.Directory.Exists) fi.Directory.Create();
//파일없는경우 헤더생성
if (!fi.Exists) MakeFile(fi.FullName);
//파일에기록
try
{
//general info
var xml = new AR.XMLHelper(fi.FullName);
foreach(System.Data.DataColumn dc in this.dt.Columns)
{
if (dc.ColumnName.ToLower() == "idx") continue;
if (dc.ColumnName.ToLower() == "filename") continue;
var colname = dc.ColumnName.Split('_');
var data = dr[dc.ColumnName];
if(colname[0].ToLower()=="time")
{
string date_value = "";
if (data != null && data != DBNull.Value)
date_value = ((DateTime)data).ToString("yyyy-MM-dd HH:mm:ss");
xml.set_Data(colname[0], colname[1], date_value);
} else
{
if(data != null && data != DBNull.Value)
xml.set_Data(colname[0], colname[1], data.ToString());
else
xml.set_Data(colname[0], colname[1], "");
}
}
string savemsg;
xml.Save(out savemsg);
}
catch (Exception ex)
{
PUB.log.AddE("DBMAN:FLUSH:" + ex.Message);
return;
}
PUB.log.Add("DATABASE", string.Format("◆ Data Saved : {0}", fi.Name));
}
dt.Clear();
dt.AcceptChanges();
}
/// <summary>
/// 지정된 파일의 모든 내용을 읽어서 DataTable 로 반환합니다.
/// </summary>
/// <param name="files"></param>
/// <returns></returns>
public DataSet1.ResultDataDataTable GetDatas(List<System.IO.FileInfo> files)
{
DataSet1.ResultDataDataTable retval = new DataSet1.ResultDataDataTable();
//모든파일을 대상으로한다.
foreach(var file in files)
{
var newdr = retval.NewResultDataRow();
newdr.info_filename = file.FullName;
var xml = new AR.XMLHelper(file.FullName);
foreach (System.Data.DataColumn col in retval.Columns)
{
if (col.ColumnName.ToLower() == "idx") continue;
if (col.ColumnName.ToLower() == "filename") continue;
var colbuf = col.ColumnName.Split('_');
var readstr = xml.get_Data(colbuf[0], colbuf[1]);
if(col.DataType == typeof(DateTime))
{
if(readstr != "")
{
DateTime dt;
if (DateTime.TryParse(readstr, out dt))
newdr[col.ColumnName] = dt;
}
}
else
{
newdr[col.ColumnName] =readstr;
}
}
retval.AddResultDataRow(newdr);
}
retval.AcceptChanges();
return retval;
}
public eStripSearchResult FindStrip(List<String> pathlist, string strip)
{
//지정된 경로내에 스트립파일이 존재하는가?
foreach(var path in pathlist)
{
var filese = System.IO.Directory.GetFiles( path , strip + ".xml");
if(filese .Length == 1)
{
var xml = new AR.XMLHelper(filese[0]);
var upload = xml.get_Data("info", "upload");
if (upload == "O") return eStripSearchResult.OK;
}
}
return eStripSearchResult.None;
}
/// <summary>
/// 지정된 파일의 모든 내용을 읽어서 DataTable 로 반환합니다.
/// </summary>
/// <param name="files"></param>
/// <returns></returns>
public eStripSearchResult FindStrip(List<System.IO.FileInfo> files, string strip)
{
eStripSearchResult retval = eStripSearchResult.None;
System.Text.StringBuilder sbError = new StringBuilder();
if (files.Count < 1) return eStripSearchResult.None;
//가장최신의데이터를 찾아야한다.
DateTime MaxDate = DateTime.Parse("1982-11-23");
string MaxResult = string.Empty;
foreach (var fi in files.OrderByDescending(t => t.FullName))
{
Boolean DataFind = false;
List<String> cols = new List<string>();
System.IO.FileStream fs = new System.IO.FileStream(fi.FullName, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);
System.IO.StreamReader sr = new System.IO.StreamReader(fs, System.Text.Encoding.ASCII);
int LineCount = 0;
while (sr.Peek() > 0)
{
string buffer = sr.ReadLine();
LineCount += 1;
if (buffer.isEmpty() || buffer.StartsWith(";")) continue;
var databuffer = buffer.Split(',');
if (cols.Count < 1)
{
//줄로처리한다.
foreach (string colname in databuffer)
cols.Add(colname);
}
else
{
//지정한 바코드 자료만 처리한다.
if (databuffer[2] != strip) continue;
DateTime endtime;
if (DateTime.TryParse(databuffer[4], out endtime))
{
MaxResult = databuffer[5];
if (MaxResult.ToUpper() != "FAIL")
{
if (endtime > MaxDate)
{
MaxDate = endtime;
if (MaxResult == "OK")
retval = eStripSearchResult.OK;
else if (MaxResult == "NG")
retval = eStripSearchResult.NG;
}
DataFind = true; //다른파일은 작동하지 않게한다.
}
}
}
}
sr.Close();
sr.Dispose();
fs.Close();
fs.Dispose();
if (DataFind) break;
}
return retval;
}
public List<String> GetPathListbyLot(DateTime sdate, DateTime edate, string lot)
{
List<String> retfiles = new List<String>();
//날짜사이의 모든 파일을 대상으로해야함
string sd = sdate.ToShortDateString();
string ed = edate.ToShortDateString();
int sy = sdate.Year;
int ey = edate.Year;
int sm = sdate.Month;
int em = edate.Month;
int sday = sdate.Day;
int eday = edate.Day;
Boolean endtast = false;
for (int y = sy; y <= ey; y++)
{
for (int m = 1; m <= 12; m++)
{
for (int d = 1; d <= 31; d++)
{
string daystr = string.Format("{0:0000}-{1:00}-{2:00}", y, m, d);
if (ed == daystr) endtast = true; //마지막 날짜이다.
if (y == sy && m < sm) continue; //시작년도 시작월 이전의 자료라면 넘어간다.
else if (y == sy && m == sm && d < sday) continue; //시작년도 시작월 시작일 이전의 자료라면 넘어간다.
foreach (var data in this.dataPath)
{
var path = new System.IO.DirectoryInfo(System.IO.Path.Combine(data, daystr.Replace("-", "\\"), lot));
if (path.Exists == false) continue;
else retfiles.Add(path.FullName);
}
if (endtast)
break; // TODO: might not be correct. Was : Exit For
}
if (endtast)
break; // TODO: might not be correct. Was : Exit For
}
if (endtast)
break; // TODO: might not be correct. Was : Exit For
}
return retfiles;
}
/// <summary>
/// 지정된 기간사이의 파일명을 반환합니다.
/// </summary>
/// <param name="sdate">검색시작일(시간은 적용안함)</param>
/// <param name="edate">검색종료일(시간은 적용안함)</param>
/// <param name="extFilter">검색필터</param>
/// <param name="SearchNo">장치번호</param>
/// <param name="SearchBarcode">검색바코드</param>
/// <returns></returns>
public List<System.IO.FileInfo> Getfiles(DateTime sdate, DateTime edate)
{
List<System.IO.FileInfo> retfiles = new List<System.IO.FileInfo>();
//날짜사이의 모든 파일을 대상으로해야함
string sd = sdate.ToShortDateString();
string ed = edate.ToShortDateString();
int sy = sdate.Year;
int ey = edate.Year;
int sm = sdate.Month;
int em = edate.Month;
int sday = sdate.Day;
int eday = edate.Day;
Boolean endtast = false;
for (int y = sy; y <= ey; y++)
{
for (int m = 1; m <= 12; m++)
{
for (int d = 1; d <= 31; d++)
{
string daystr = string.Format("{0:0000}-{1:00}-{2:00}", y, m, d);
if (ed == daystr) endtast = true; //마지막 날짜이다.
if (y == sy && m < sm) continue; //시작년도 시작월 이전의 자료라면 넘어간다.
else if (y == sy && m == sm && d < sday) continue; //시작년도 시작월 시작일 이전의 자료라면 넘어간다.
foreach(var data in this.dataPath)
{
var path = new System.IO.DirectoryInfo(System.IO.Path.Combine(data, daystr.Replace("-", "\\")));
if (path.Exists == false) continue;
var files = path.GetFiles("*.xml", System.IO.SearchOption.AllDirectories);
if (files != null && files.Length > 0) retfiles.AddRange(files);
}
if (endtast)
break; // TODO: might not be correct. Was : Exit For
}
if (endtast)
break; // TODO: might not be correct. Was : Exit For
}
if (endtast)
break; // TODO: might not be correct. Was : Exit For
}
return retfiles;
}
}
}

View File

@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Project
{
public partial class MessageWindow
{
public class CMessageData
{
public string Message { get; set; }
public eWindowType WindowType { get; set; }
public System.Drawing.Size WindowSize { get; set; }
public Boolean EnableClose { get; set; }
public System.Drawing.Font FontTitle { get; set; }
public System.Drawing.Font FontContent { get; set; }
public System.Windows.Forms.Form msgForm { get; set; }
public CMessageData()
{
WindowType = eWindowType.information;
WindowSize = new System.Drawing.Size(900, 500);
EnableClose = true;
FontContent = null;
FontTitle = null;
msgForm = null;
}
~CMessageData()
{
if (msgForm != null) msgForm.Dispose();
if (FontTitle != null) FontTitle.Dispose();
if (FontContent != null) FontContent.Dispose();
}
}
}
}

View File

@@ -0,0 +1,164 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
namespace Project
{
public partial class MessageWindow
{
public enum eWindowPosition
{
center = 0,
top = 1,
bottom = 2
}
public enum eWindowType
{
information,
error,
attention,
}
private bool _needclose = false;
public bool needClose
{
get { return _needclose; }
set
{
if (Visible) //현재 화면이 열러잇다면?
_needclose = value;
}
}
public Boolean needShow = false;
private CMessageData msgBuffer = new CMessageData();
public void setMessage(CMessageData msgData)
{
//마지막데잍와 동일하고 버퍼에 데이터가 있다면 처리하지 않는다.
if (msgBuffer == msgData) return;
//신규 메세지를 추가
msgBuffer = msgData;
//화면이 표시되어야하므로 플래그 설정
needShow = true;
}
public void setMessage(string msg,
eWindowType winType = eWindowType.error,
int width = 900, int height = 500,
Boolean enbClose = true,
Font fontTitle = null,
Font fontBody = null)
{
setMessage(new CMessageData()
{
EnableClose = enbClose,
FontContent = fontBody,
FontTitle = fontTitle,
Message = msg,
WindowSize = new Size(width, height),
WindowType = winType
});
}
fMessageWindow msgwin;// = new fMsgWindow("");
/// <summary>
/// 메세지 버퍼의 내용을 폼으로 표시합니다.
/// UI 쓰레드를 사용하므로 invoke 를 이용해 호출 하거나
/// UI 쓰레드내에서 실행 하시기 바랍니다.
/// </summary>
public void showMessage()
{
//등록된 메세지 버퍼의 내용을 화면에 표시한다.
if (msgwin == null) msgwin = new fMessageWindow("");
msgwin.TopMost = true;
// msgwin.Disposed += (s1, e1) => { CloseMsg(item.Key); };
//msgwin.Width = this.msgBuffer.WindowSize.Width;
//msgwin.Height = msgBuffer.WindowSize.Height;
//msgwin.BackColor = Color.FromArgb(200, 200, 200);
msgwin.StartPosition = FormStartPosition.CenterScreen;
msgwin.btNo.Visible = false;
msgwin.btYes.Visible = false;
msgwin.Height = 474;
msgwin.setMessage(msgBuffer.Message);
//set font
if (msgBuffer.FontTitle != null) msgwin.lbTitle.Font = msgBuffer.FontTitle;
if (msgBuffer.FontContent != null)
{
msgwin.lb1.Font = msgBuffer.FontContent;
msgwin.lb2.Font = msgBuffer.FontContent;
msgwin.lb3.Font = msgBuffer.FontContent;
msgwin.lb4.Font = msgBuffer.FontContent;
msgwin.lb5.Font = msgBuffer.FontContent;
msgwin.lb6.Font = msgBuffer.FontContent;
msgwin.lb7.Font = msgBuffer.FontContent;
}
switch (msgBuffer.WindowType)
{
case eWindowType.attention:
msgwin.SetWindowColor(fMessageWindow.EWinColor.Attention);
break;
case eWindowType.error:
msgwin.SetWindowColor(fMessageWindow.EWinColor.Error);
break;
default:
msgwin.SetWindowColor(fMessageWindow.EWinColor.Information);
break;
}
if (!msgBuffer.EnableClose) msgwin.EnableUserClose = false;
if (msgwin.Visible == false) msgwin.Show();
else
{
msgwin.Visible = true;
msgwin.Activate();
}
needShow = false;
}
public Boolean Visible
{
get
{
if (msgwin == null) return false;
return msgwin.Visible;
}
set
{
if (value == true)
{
if (msgwin.Visible == false)
{
msgwin.Show();
msgwin.Activate();
}
else
{
msgwin.Activate();
}
needShow = false;
}
else
{
if (msgwin != null)
msgwin.Visible = false;
needClose = false;
}
}
}
}
}

View File

@@ -0,0 +1,676 @@
namespace Project
{
partial class fMessageWindow
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.tmBlink = new System.Windows.Forms.Timer(this.components);
this.arPanel1 = new arCtl.arPanel();
this.panButton = new System.Windows.Forms.Panel();
this.btYes = new arCtl.arLabel();
this.btNo = new arCtl.arLabel();
this.panel7 = new System.Windows.Forms.Panel();
this.lb7 = new arCtl.arLabel();
this.panel6 = new System.Windows.Forms.Panel();
this.lb6 = new arCtl.arLabel();
this.panel5 = new System.Windows.Forms.Panel();
this.lb5 = new arCtl.arLabel();
this.panel3 = new System.Windows.Forms.Panel();
this.lb4 = new arCtl.arLabel();
this.panel2 = new System.Windows.Forms.Panel();
this.lb3 = new arCtl.arLabel();
this.panel1 = new System.Windows.Forms.Panel();
this.lb2 = new arCtl.arLabel();
this.panel4 = new System.Windows.Forms.Panel();
this.lb1 = new arCtl.arLabel();
this.panel8 = new System.Windows.Forms.Panel();
this.lbTitle = new arCtl.arLabel();
this.arPanel1.SuspendLayout();
this.panButton.SuspendLayout();
this.SuspendLayout();
//
// tmBlink
//
this.tmBlink.Enabled = true;
this.tmBlink.Interval = 300;
this.tmBlink.Tick += new System.EventHandler(this.tmBlink_Tick);
//
// arPanel1
//
this.arPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.arPanel1.BackColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.arPanel1.BorderColor = System.Drawing.Color.DimGray;
this.arPanel1.BorderSize = new System.Windows.Forms.Padding(1);
this.arPanel1.Controls.Add(this.panButton);
this.arPanel1.Controls.Add(this.panel7);
this.arPanel1.Controls.Add(this.lb7);
this.arPanel1.Controls.Add(this.panel6);
this.arPanel1.Controls.Add(this.lb6);
this.arPanel1.Controls.Add(this.panel5);
this.arPanel1.Controls.Add(this.lb5);
this.arPanel1.Controls.Add(this.panel3);
this.arPanel1.Controls.Add(this.lb4);
this.arPanel1.Controls.Add(this.panel2);
this.arPanel1.Controls.Add(this.lb3);
this.arPanel1.Controls.Add(this.panel1);
this.arPanel1.Controls.Add(this.lb2);
this.arPanel1.Controls.Add(this.panel4);
this.arPanel1.Controls.Add(this.lb1);
this.arPanel1.Controls.Add(this.panel8);
this.arPanel1.Controls.Add(this.lbTitle);
this.arPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.arPanel1.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Italic);
this.arPanel1.ForeColor = System.Drawing.Color.Khaki;
this.arPanel1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arPanel1.GradientRepeatBG = false;
this.arPanel1.Location = new System.Drawing.Point(5, 5);
this.arPanel1.Name = "arPanel1";
this.arPanel1.Padding = new System.Windows.Forms.Padding(6);
this.arPanel1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arPanel1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arPanel1.ProgressMax = 100F;
this.arPanel1.ProgressMin = 0F;
this.arPanel1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arPanel1.ProgressValue = 0F;
this.arPanel1.ShadowColor = System.Drawing.Color.Black;
this.arPanel1.ShowBorder = true;
this.arPanel1.Size = new System.Drawing.Size(719, 530);
this.arPanel1.TabIndex = 4;
this.arPanel1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.arPanel1.TextShadow = false;
this.arPanel1.UseProgressBar = false;
//
// panButton
//
this.panButton.Controls.Add(this.btYes);
this.panButton.Controls.Add(this.btNo);
this.panButton.Dock = System.Windows.Forms.DockStyle.Fill;
this.panButton.Location = new System.Drawing.Point(6, 463);
this.panButton.Name = "panButton";
this.panButton.Size = new System.Drawing.Size(707, 61);
this.panButton.TabIndex = 10;
//
// btYes
//
this.btYes.BackColor = System.Drawing.Color.SeaGreen;
this.btYes.BackColor2 = System.Drawing.Color.SeaGreen;
this.btYes.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.btYes.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.btYes.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.btYes.BorderSize = new System.Windows.Forms.Padding(1);
this.btYes.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.btYes.Cursor = System.Windows.Forms.Cursors.Hand;
this.btYes.Dock = System.Windows.Forms.DockStyle.Fill;
this.btYes.Font = new System.Drawing.Font("맑은 고딕", 25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btYes.ForeColor = System.Drawing.Color.Black;
this.btYes.GradientEnable = true;
this.btYes.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.btYes.GradientRepeatBG = false;
this.btYes.isButton = true;
this.btYes.Location = new System.Drawing.Point(0, 0);
this.btYes.MouseDownColor = System.Drawing.Color.Yellow;
this.btYes.MouseOverColor = System.Drawing.Color.Yellow;
this.btYes.msg = null;
this.btYes.Name = "btYes";
this.btYes.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.btYes.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.btYes.ProgressEnable = false;
this.btYes.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.btYes.ProgressForeColor = System.Drawing.Color.Black;
this.btYes.ProgressMax = 100F;
this.btYes.ProgressMin = 0F;
this.btYes.ProgressPadding = new System.Windows.Forms.Padding(0);
this.btYes.ProgressValue = 0F;
this.btYes.ShadowColor = System.Drawing.Color.Gray;
this.btYes.Sign = "";
this.btYes.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btYes.SignColor = System.Drawing.Color.Yellow;
this.btYes.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btYes.Size = new System.Drawing.Size(478, 61);
this.btYes.TabIndex = 0;
this.btYes.Text = "예";
this.btYes.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btYes.TextShadow = true;
this.btYes.TextVisible = true;
this.btYes.Click += new System.EventHandler(this.btYes_Click);
//
// btNo
//
this.btNo.BackColor = System.Drawing.Color.Goldenrod;
this.btNo.BackColor2 = System.Drawing.Color.Goldenrod;
this.btNo.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.btNo.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.btNo.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.btNo.BorderSize = new System.Windows.Forms.Padding(1);
this.btNo.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.btNo.Cursor = System.Windows.Forms.Cursors.Hand;
this.btNo.Dock = System.Windows.Forms.DockStyle.Right;
this.btNo.Font = new System.Drawing.Font("맑은 고딕", 25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.btNo.ForeColor = System.Drawing.Color.Black;
this.btNo.GradientEnable = true;
this.btNo.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.btNo.GradientRepeatBG = false;
this.btNo.isButton = true;
this.btNo.Location = new System.Drawing.Point(478, 0);
this.btNo.MouseDownColor = System.Drawing.Color.Yellow;
this.btNo.MouseOverColor = System.Drawing.Color.Yellow;
this.btNo.msg = null;
this.btNo.Name = "btNo";
this.btNo.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.btNo.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.btNo.ProgressEnable = false;
this.btNo.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.btNo.ProgressForeColor = System.Drawing.Color.Black;
this.btNo.ProgressMax = 100F;
this.btNo.ProgressMin = 0F;
this.btNo.ProgressPadding = new System.Windows.Forms.Padding(0);
this.btNo.ProgressValue = 0F;
this.btNo.ShadowColor = System.Drawing.Color.Gray;
this.btNo.Sign = "";
this.btNo.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.btNo.SignColor = System.Drawing.Color.Yellow;
this.btNo.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.btNo.Size = new System.Drawing.Size(229, 61);
this.btNo.TabIndex = 0;
this.btNo.Text = "아니오";
this.btNo.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.btNo.TextShadow = true;
this.btNo.TextVisible = true;
this.btNo.Click += new System.EventHandler(this.btNo_Click);
//
// panel7
//
this.panel7.Dock = System.Windows.Forms.DockStyle.Top;
this.panel7.Location = new System.Drawing.Point(6, 458);
this.panel7.Name = "panel7";
this.panel7.Size = new System.Drawing.Size(707, 5);
this.panel7.TabIndex = 17;
//
// lb7
//
this.lb7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb7.BackColor2 = System.Drawing.Color.Gray;
this.lb7.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb7.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb7.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb7.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb7.BorderSize = new System.Windows.Forms.Padding(1);
this.lb7.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb7.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb7.Dock = System.Windows.Forms.DockStyle.Top;
this.lb7.Font = new System.Drawing.Font("맑은 고딕", 18F, System.Drawing.FontStyle.Bold);
this.lb7.ForeColor = System.Drawing.Color.White;
this.lb7.GradientEnable = true;
this.lb7.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb7.GradientRepeatBG = false;
this.lb7.isButton = false;
this.lb7.Location = new System.Drawing.Point(6, 408);
this.lb7.MouseDownColor = System.Drawing.Color.Yellow;
this.lb7.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb7.msg = null;
this.lb7.Name = "lb7";
this.lb7.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb7.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb7.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb7.ProgressEnable = false;
this.lb7.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb7.ProgressForeColor = System.Drawing.Color.Black;
this.lb7.ProgressMax = 100F;
this.lb7.ProgressMin = 0F;
this.lb7.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb7.ProgressValue = 0F;
this.lb7.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb7.Sign = "";
this.lb7.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb7.SignColor = System.Drawing.Color.Yellow;
this.lb7.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb7.Size = new System.Drawing.Size(707, 50);
this.lb7.TabIndex = 9;
this.lb7.Text = "*";
this.lb7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb7.TextShadow = true;
this.lb7.TextVisible = true;
//
// panel6
//
this.panel6.Dock = System.Windows.Forms.DockStyle.Top;
this.panel6.Location = new System.Drawing.Point(6, 403);
this.panel6.Name = "panel6";
this.panel6.Size = new System.Drawing.Size(707, 5);
this.panel6.TabIndex = 16;
//
// lb6
//
this.lb6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb6.BackColor2 = System.Drawing.Color.Gray;
this.lb6.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb6.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb6.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb6.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb6.BorderSize = new System.Windows.Forms.Padding(1);
this.lb6.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb6.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb6.Dock = System.Windows.Forms.DockStyle.Top;
this.lb6.Font = new System.Drawing.Font("맑은 고딕", 18F, System.Drawing.FontStyle.Bold);
this.lb6.ForeColor = System.Drawing.Color.White;
this.lb6.GradientEnable = true;
this.lb6.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb6.GradientRepeatBG = false;
this.lb6.isButton = false;
this.lb6.Location = new System.Drawing.Point(6, 353);
this.lb6.MouseDownColor = System.Drawing.Color.Yellow;
this.lb6.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb6.msg = null;
this.lb6.Name = "lb6";
this.lb6.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb6.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb6.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb6.ProgressEnable = false;
this.lb6.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb6.ProgressForeColor = System.Drawing.Color.Black;
this.lb6.ProgressMax = 100F;
this.lb6.ProgressMin = 0F;
this.lb6.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb6.ProgressValue = 0F;
this.lb6.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb6.Sign = "";
this.lb6.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb6.SignColor = System.Drawing.Color.Yellow;
this.lb6.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb6.Size = new System.Drawing.Size(707, 50);
this.lb6.TabIndex = 8;
this.lb6.Text = "*";
this.lb6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb6.TextShadow = true;
this.lb6.TextVisible = true;
//
// panel5
//
this.panel5.Dock = System.Windows.Forms.DockStyle.Top;
this.panel5.Location = new System.Drawing.Point(6, 348);
this.panel5.Name = "panel5";
this.panel5.Size = new System.Drawing.Size(707, 5);
this.panel5.TabIndex = 15;
//
// lb5
//
this.lb5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb5.BackColor2 = System.Drawing.Color.Gray;
this.lb5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb5.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb5.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb5.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb5.BorderSize = new System.Windows.Forms.Padding(1);
this.lb5.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb5.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb5.Dock = System.Windows.Forms.DockStyle.Top;
this.lb5.Font = new System.Drawing.Font("맑은 고딕", 18F, System.Drawing.FontStyle.Bold);
this.lb5.ForeColor = System.Drawing.Color.White;
this.lb5.GradientEnable = true;
this.lb5.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb5.GradientRepeatBG = false;
this.lb5.isButton = false;
this.lb5.Location = new System.Drawing.Point(6, 298);
this.lb5.MouseDownColor = System.Drawing.Color.Yellow;
this.lb5.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb5.msg = null;
this.lb5.Name = "lb5";
this.lb5.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb5.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb5.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb5.ProgressEnable = false;
this.lb5.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb5.ProgressForeColor = System.Drawing.Color.Black;
this.lb5.ProgressMax = 100F;
this.lb5.ProgressMin = 0F;
this.lb5.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb5.ProgressValue = 0F;
this.lb5.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb5.Sign = "";
this.lb5.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb5.SignColor = System.Drawing.Color.Yellow;
this.lb5.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb5.Size = new System.Drawing.Size(707, 50);
this.lb5.TabIndex = 7;
this.lb5.Text = "*";
this.lb5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb5.TextShadow = true;
this.lb5.TextVisible = true;
//
// panel3
//
this.panel3.Dock = System.Windows.Forms.DockStyle.Top;
this.panel3.Location = new System.Drawing.Point(6, 293);
this.panel3.Name = "panel3";
this.panel3.Size = new System.Drawing.Size(707, 5);
this.panel3.TabIndex = 13;
//
// lb4
//
this.lb4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb4.BackColor2 = System.Drawing.Color.Gray;
this.lb4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb4.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb4.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb4.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb4.BorderSize = new System.Windows.Forms.Padding(1);
this.lb4.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb4.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb4.Dock = System.Windows.Forms.DockStyle.Top;
this.lb4.Font = new System.Drawing.Font("맑은 고딕", 18F, System.Drawing.FontStyle.Bold);
this.lb4.ForeColor = System.Drawing.Color.White;
this.lb4.GradientEnable = true;
this.lb4.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb4.GradientRepeatBG = false;
this.lb4.isButton = false;
this.lb4.Location = new System.Drawing.Point(6, 243);
this.lb4.MouseDownColor = System.Drawing.Color.Yellow;
this.lb4.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb4.msg = null;
this.lb4.Name = "lb4";
this.lb4.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb4.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb4.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb4.ProgressEnable = false;
this.lb4.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb4.ProgressForeColor = System.Drawing.Color.Black;
this.lb4.ProgressMax = 100F;
this.lb4.ProgressMin = 0F;
this.lb4.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb4.ProgressValue = 0F;
this.lb4.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb4.Sign = "";
this.lb4.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb4.SignColor = System.Drawing.Color.Yellow;
this.lb4.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb4.Size = new System.Drawing.Size(707, 50);
this.lb4.TabIndex = 6;
this.lb4.Text = "*";
this.lb4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb4.TextShadow = true;
this.lb4.TextVisible = true;
//
// panel2
//
this.panel2.Dock = System.Windows.Forms.DockStyle.Top;
this.panel2.Location = new System.Drawing.Point(6, 238);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(707, 5);
this.panel2.TabIndex = 12;
//
// lb3
//
this.lb3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb3.BackColor2 = System.Drawing.Color.Gray;
this.lb3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb3.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb3.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb3.BorderSize = new System.Windows.Forms.Padding(1);
this.lb3.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb3.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb3.Dock = System.Windows.Forms.DockStyle.Top;
this.lb3.Font = new System.Drawing.Font("맑은 고딕", 18F, System.Drawing.FontStyle.Bold);
this.lb3.ForeColor = System.Drawing.Color.White;
this.lb3.GradientEnable = true;
this.lb3.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb3.GradientRepeatBG = false;
this.lb3.isButton = false;
this.lb3.Location = new System.Drawing.Point(6, 188);
this.lb3.MouseDownColor = System.Drawing.Color.Yellow;
this.lb3.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb3.msg = null;
this.lb3.Name = "lb3";
this.lb3.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb3.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb3.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb3.ProgressEnable = false;
this.lb3.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb3.ProgressForeColor = System.Drawing.Color.Black;
this.lb3.ProgressMax = 100F;
this.lb3.ProgressMin = 0F;
this.lb3.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb3.ProgressValue = 0F;
this.lb3.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb3.Sign = "";
this.lb3.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb3.SignColor = System.Drawing.Color.Yellow;
this.lb3.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb3.Size = new System.Drawing.Size(707, 50);
this.lb3.TabIndex = 5;
this.lb3.Text = "*";
this.lb3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb3.TextShadow = true;
this.lb3.TextVisible = true;
//
// panel1
//
this.panel1.Dock = System.Windows.Forms.DockStyle.Top;
this.panel1.Location = new System.Drawing.Point(6, 183);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(707, 5);
this.panel1.TabIndex = 11;
//
// lb2
//
this.lb2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb2.BackColor2 = System.Drawing.Color.Gray;
this.lb2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb2.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb2.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb2.BorderSize = new System.Windows.Forms.Padding(1);
this.lb2.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb2.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb2.Dock = System.Windows.Forms.DockStyle.Top;
this.lb2.Font = new System.Drawing.Font("맑은 고딕", 18F, System.Drawing.FontStyle.Bold);
this.lb2.ForeColor = System.Drawing.Color.White;
this.lb2.GradientEnable = true;
this.lb2.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb2.GradientRepeatBG = false;
this.lb2.isButton = false;
this.lb2.Location = new System.Drawing.Point(6, 133);
this.lb2.MouseDownColor = System.Drawing.Color.Yellow;
this.lb2.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb2.msg = null;
this.lb2.Name = "lb2";
this.lb2.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb2.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb2.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb2.ProgressEnable = false;
this.lb2.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb2.ProgressForeColor = System.Drawing.Color.Black;
this.lb2.ProgressMax = 100F;
this.lb2.ProgressMin = 0F;
this.lb2.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb2.ProgressValue = 0F;
this.lb2.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb2.Sign = "";
this.lb2.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb2.SignColor = System.Drawing.Color.Yellow;
this.lb2.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb2.Size = new System.Drawing.Size(707, 50);
this.lb2.TabIndex = 4;
this.lb2.Text = "*";
this.lb2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb2.TextShadow = true;
this.lb2.TextVisible = true;
//
// panel4
//
this.panel4.Dock = System.Windows.Forms.DockStyle.Top;
this.panel4.Location = new System.Drawing.Point(6, 128);
this.panel4.Name = "panel4";
this.panel4.Size = new System.Drawing.Size(707, 5);
this.panel4.TabIndex = 14;
//
// lb1
//
this.lb1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb1.BackColor2 = System.Drawing.Color.Gray;
this.lb1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb1.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb1.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(80)))), ((int)(((byte)(80)))));
this.lb1.BorderSize = new System.Windows.Forms.Padding(1);
this.lb1.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb1.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb1.Dock = System.Windows.Forms.DockStyle.Top;
this.lb1.Font = new System.Drawing.Font("맑은 고딕", 18F, System.Drawing.FontStyle.Bold);
this.lb1.ForeColor = System.Drawing.Color.White;
this.lb1.GradientEnable = true;
this.lb1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lb1.GradientRepeatBG = false;
this.lb1.isButton = false;
this.lb1.Location = new System.Drawing.Point(6, 78);
this.lb1.MouseDownColor = System.Drawing.Color.Yellow;
this.lb1.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb1.msg = null;
this.lb1.Name = "lb1";
this.lb1.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb1.ProgressEnable = false;
this.lb1.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb1.ProgressForeColor = System.Drawing.Color.Black;
this.lb1.ProgressMax = 100F;
this.lb1.ProgressMin = 0F;
this.lb1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb1.ProgressValue = 0F;
this.lb1.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
this.lb1.Sign = "";
this.lb1.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb1.SignColor = System.Drawing.Color.Yellow;
this.lb1.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb1.Size = new System.Drawing.Size(707, 50);
this.lb1.TabIndex = 2;
this.lb1.Text = "*";
this.lb1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb1.TextShadow = true;
this.lb1.TextVisible = true;
//
// panel8
//
this.panel8.Dock = System.Windows.Forms.DockStyle.Top;
this.panel8.Location = new System.Drawing.Point(6, 73);
this.panel8.Name = "panel8";
this.panel8.Size = new System.Drawing.Size(707, 5);
this.panel8.TabIndex = 18;
//
// lbTitle
//
this.lbTitle.BackColor = System.Drawing.Color.Brown;
this.lbTitle.BackColor2 = System.Drawing.Color.Tomato;
this.lbTitle.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lbTitle.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbTitle.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbTitle.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbTitle.BorderSize = new System.Windows.Forms.Padding(1);
this.lbTitle.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbTitle.Cursor = System.Windows.Forms.Cursors.Hand;
this.lbTitle.Dock = System.Windows.Forms.DockStyle.Top;
this.lbTitle.Font = new System.Drawing.Font("맑은 고딕", 28F, System.Drawing.FontStyle.Bold);
this.lbTitle.ForeColor = System.Drawing.Color.WhiteSmoke;
this.lbTitle.GradientEnable = true;
this.lbTitle.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Horizontal;
this.lbTitle.GradientRepeatBG = false;
this.lbTitle.isButton = true;
this.lbTitle.Location = new System.Drawing.Point(6, 6);
this.lbTitle.MouseDownColor = System.Drawing.Color.Yellow;
this.lbTitle.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbTitle.msg = null;
this.lbTitle.Name = "lbTitle";
this.lbTitle.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbTitle.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbTitle.ProgressEnable = false;
this.lbTitle.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbTitle.ProgressForeColor = System.Drawing.Color.Black;
this.lbTitle.ProgressMax = 100F;
this.lbTitle.ProgressMin = 0F;
this.lbTitle.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbTitle.ProgressValue = 0F;
this.lbTitle.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.lbTitle.Sign = "";
this.lbTitle.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbTitle.SignColor = System.Drawing.Color.Yellow;
this.lbTitle.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbTitle.Size = new System.Drawing.Size(707, 67);
this.lbTitle.TabIndex = 3;
this.lbTitle.Text = "TITLE";
this.lbTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbTitle.TextShadow = true;
this.lbTitle.TextVisible = true;
this.lbTitle.Click += new System.EventHandler(this.lbTitle_Click);
//
// fMessageWindow
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(200)))), ((int)(((byte)(200)))), ((int)(((byte)(200)))));
this.ClientSize = new System.Drawing.Size(729, 540);
this.Controls.Add(this.arPanel1);
this.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.KeyPreview = true;
this.MaximizeBox = false;
this.Name = "fMessageWindow";
this.Padding = new System.Windows.Forms.Padding(5);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Message Window";
this.TopMost = true;
this.Load += new System.EventHandler(this.fMsg_Load);
this.arPanel1.ResumeLayout(false);
this.panButton.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
public arCtl.arLabel lb1;
private arCtl.arPanel arPanel1;
public arCtl.arLabel lbTitle;
public arCtl.arLabel lb7;
public arCtl.arLabel lb6;
public arCtl.arLabel lb5;
public arCtl.arLabel lb4;
public arCtl.arLabel lb3;
public arCtl.arLabel lb2;
private System.Windows.Forms.Timer tmBlink;
public arCtl.arLabel btYes;
public arCtl.arLabel btNo;
private System.Windows.Forms.Panel panButton;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel7;
private System.Windows.Forms.Panel panel6;
private System.Windows.Forms.Panel panel5;
private System.Windows.Forms.Panel panel3;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Panel panel4;
private System.Windows.Forms.Panel panel8;
}
}

View File

@@ -0,0 +1,199 @@
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 Project
{
public partial class fMessageWindow : Form
{
private Boolean fMove = false;
private Point MDownPos;
private string _msg = string.Empty;
public Boolean DialogMode = false;
/// <summary>
/// 사용자가 이 창을 닫을수 있는가?
/// </summary>
public Boolean EnableUserClose
{
get { return _enableuserclose; }
set
{
_enableuserclose = value;
// if (!EnableUserClose) btClose.Visible = false;
}
}
private Boolean _enableuserclose = true;
public void setMessage(string msg)
{
//msg를 분리해서 표시를 한다.
var lbs = new arCtl.arLabel[] { lbTitle, lb1, lb2, lb3, lb4, lb5, lb6, lb7 };
var lineBuf = msg.Replace("\r", "").Split('\n');
int maxLine = Math.Min(lbs.Length, lineBuf.Length);
for (int i = 0; i < lbs.Length; i++) //최대줄을 넘어가는건 표시불가
{
if (i >= lineBuf.Length)
{
lbs[i].Text = string.Empty;
}
else
{
if (i > 0) lbs[i].Text = string.Format("{0}. {1}", i, lineBuf[i]);
else lbs[i].Text = lineBuf[i];
}
}
}
public fMessageWindow(string msg, string filename = "")
{
EnableUserClose = true;
InitializeComponent();
this.FormClosing += fMsgWindow_FormClosing;
this.KeyDown += (s1, e1) => { if (EnableUserClose && e1.KeyCode == Keys.Escape) this.Close(); };
this._msg = msg;
if (filename != "")
{
string fullname = AppDomain.CurrentDomain.BaseDirectory + "Image\\" + filename;
if (System.IO.File.Exists(fullname))
{
var img = this.lb1.BackgroundImage;
this.lb1.BackgroundImage = Image.FromFile(fullname);
if (img != null) img.Dispose();
}
else
{
msg += "\nNo Image File\n" + filename;
}
}
else
{
var img = this.lb1.BackgroundImage;
this.lb1.BackgroundImage = null;
if (img != null) img.Dispose();
}
setMessage(msg);
this.lbTitle.MouseMove += label1_MouseMove;
lbTitle.MouseUp += label1_MouseUp;
lbTitle.MouseDown += label1_MouseDown;
lbTitle.MouseDoubleClick += label1_MouseDoubleClick;
//btClose.Click += arLabel1_Click;
}
void fMsgWindow_FormClosing(object sender, FormClosingEventArgs e)
{
if (DialogMode==false)
{
e.Cancel = true;
return;
}
}
private void fMsg_Load(object sender, EventArgs e)
{
}
private void label1_MouseMove(object sender, MouseEventArgs e)
{
if (fMove)
{
Point offset = new Point(e.X - MDownPos.X, e.Y - MDownPos.Y);
this.Left += offset.X;
this.Top += offset.Y;
offset = new Point(0, 0);
}
}
private void label1_MouseUp(object sender, MouseEventArgs e)
{
fMove = false;
}
private void label1_MouseDown(object sender, MouseEventArgs e)
{
MDownPos = new Point(e.X, e.Y);
fMove = true;
}
private void label1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (EnableUserClose)
{
if (DialogMode == false) this.Visible = false;
else this.Close();
}
}
public enum EWinColor
{
Attention=0,
Error,
Information
}
public void SetWindowColor(EWinColor wincolor)
{
switch (wincolor)
{
case EWinColor.Attention:
lbTitle.BackColor = Color.Gold;
lbTitle.BackColor2 = Color.Orange;
lbTitle.ShadowColor = Color.FromArgb(150, 150, 150);
lbTitle.ForeColor = Color.FromArgb(50, 50, 50);
break;
case EWinColor.Error:
lbTitle.BackColor = Color.Brown;
lbTitle.BackColor2 = Color.Tomato;
lbTitle.ShadowColor = Color.FromArgb(50, 50, 50);
lbTitle.ForeColor = Color.WhiteSmoke;
break;
default:
lbTitle.BackColor = Color.DarkTurquoise;
lbTitle.BackColor2 = Color.LightSkyBlue;
lbTitle.ShadowColor = Color.FromArgb(50, 50, 50);
lbTitle.ForeColor = Color.WhiteSmoke;
break;
}
}
private void lbTitle_Click(object sender, EventArgs e)
{
if (EnableUserClose)
{
if (DialogMode == false) this.Visible = false;
else this.Close();
}
}
private void tmBlink_Tick(object sender, EventArgs e)
{
var bg1 = lbTitle.BackColor;
var bg2 = lbTitle.BackColor2;
lbTitle.BackColor = (Color)bg2;
lbTitle.BackColor2 = (Color)bg1;
}
private void btYes_Click(object sender, EventArgs e)
{
if (DialogMode == false) this.Visible = false;
else this.DialogResult = System.Windows.Forms.DialogResult.Yes;
}
private void btNo_Click(object sender, EventArgs e)
{
if (DialogMode == false) this.Visible = false;
else this.Close();
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="tmBlink.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,472 @@
namespace Project
{
partial class fMsgWindow
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.lb1 = new arCtl.arLabel();
this.arPanel1 = new arCtl.arPanel();
this.lb7 = new arCtl.arLabel();
this.lb6 = new arCtl.arLabel();
this.lb5 = new arCtl.arLabel();
this.lb4 = new arCtl.arLabel();
this.lb3 = new arCtl.arLabel();
this.lb2 = new arCtl.arLabel();
this.lbTitle = new arCtl.arLabel();
this.tmBlink = new System.Windows.Forms.Timer(this.components);
this.arPanel1.SuspendLayout();
this.SuspendLayout();
//
// lb1
//
this.lb1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb1.BackColor2 = System.Drawing.Color.Gray;
this.lb1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb1.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb1.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb1.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb1.BorderSize = new System.Windows.Forms.Padding(1);
this.lb1.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb1.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb1.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold);
this.lb1.ForeColor = System.Drawing.Color.White;
this.lb1.GradientEnable = true;
this.lb1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.lb1.GradientRepeatBG = false;
this.lb1.isButton = false;
this.lb1.Location = new System.Drawing.Point(8, 80);
this.lb1.MouseDownColor = System.Drawing.Color.Yellow;
this.lb1.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb1.msg = null;
this.lb1.Name = "lb1";
this.lb1.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb1.ProgressEnable = false;
this.lb1.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb1.ProgressForeColor = System.Drawing.Color.Black;
this.lb1.ProgressMax = 100F;
this.lb1.ProgressMin = 0F;
this.lb1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb1.ProgressValue = 0F;
this.lb1.ShadowColor = System.Drawing.Color.Black;
this.lb1.Sign = "";
this.lb1.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb1.SignColor = System.Drawing.Color.Yellow;
this.lb1.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb1.Size = new System.Drawing.Size(874, 50);
this.lb1.TabIndex = 2;
this.lb1.Text = "*";
this.lb1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb1.TextShadow = true;
this.lb1.TextVisible = true;
//
// arPanel1
//
this.arPanel1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.arPanel1.BackColor2 = System.Drawing.Color.Gray;
this.arPanel1.BorderColor = System.Drawing.Color.DimGray;
this.arPanel1.BorderSize = new System.Windows.Forms.Padding(1);
this.arPanel1.Controls.Add(this.lb7);
this.arPanel1.Controls.Add(this.lb6);
this.arPanel1.Controls.Add(this.lb5);
this.arPanel1.Controls.Add(this.lb4);
this.arPanel1.Controls.Add(this.lb3);
this.arPanel1.Controls.Add(this.lb2);
this.arPanel1.Controls.Add(this.lbTitle);
this.arPanel1.Controls.Add(this.lb1);
this.arPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.arPanel1.Font = new System.Drawing.Font("Consolas", 10F, System.Drawing.FontStyle.Italic);
this.arPanel1.ForeColor = System.Drawing.Color.Khaki;
this.arPanel1.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.arPanel1.GradientRepeatBG = false;
this.arPanel1.Location = new System.Drawing.Point(5, 5);
this.arPanel1.Name = "arPanel1";
this.arPanel1.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.arPanel1.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.arPanel1.ProgressMax = 100F;
this.arPanel1.ProgressMin = 0F;
this.arPanel1.ProgressPadding = new System.Windows.Forms.Padding(0);
this.arPanel1.ProgressValue = 0F;
this.arPanel1.ShadowColor = System.Drawing.Color.Black;
this.arPanel1.ShowBorder = true;
this.arPanel1.Size = new System.Drawing.Size(890, 480);
this.arPanel1.TabIndex = 4;
this.arPanel1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
this.arPanel1.TextShadow = false;
this.arPanel1.UseProgressBar = false;
//
// lb7
//
this.lb7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb7.BackColor2 = System.Drawing.Color.Gray;
this.lb7.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb7.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb7.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb7.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb7.BorderSize = new System.Windows.Forms.Padding(1);
this.lb7.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb7.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb7.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold);
this.lb7.ForeColor = System.Drawing.Color.White;
this.lb7.GradientEnable = true;
this.lb7.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.lb7.GradientRepeatBG = false;
this.lb7.isButton = false;
this.lb7.Location = new System.Drawing.Point(8, 422);
this.lb7.MouseDownColor = System.Drawing.Color.Yellow;
this.lb7.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb7.msg = null;
this.lb7.Name = "lb7";
this.lb7.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb7.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb7.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb7.ProgressEnable = false;
this.lb7.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb7.ProgressForeColor = System.Drawing.Color.Black;
this.lb7.ProgressMax = 100F;
this.lb7.ProgressMin = 0F;
this.lb7.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb7.ProgressValue = 0F;
this.lb7.ShadowColor = System.Drawing.Color.Black;
this.lb7.Sign = "";
this.lb7.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb7.SignColor = System.Drawing.Color.Yellow;
this.lb7.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb7.Size = new System.Drawing.Size(874, 50);
this.lb7.TabIndex = 9;
this.lb7.Text = "*";
this.lb7.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb7.TextShadow = true;
this.lb7.TextVisible = true;
//
// lb6
//
this.lb6.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb6.BackColor2 = System.Drawing.Color.Gray;
this.lb6.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb6.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb6.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb6.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb6.BorderSize = new System.Windows.Forms.Padding(1);
this.lb6.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb6.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb6.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold);
this.lb6.ForeColor = System.Drawing.Color.White;
this.lb6.GradientEnable = true;
this.lb6.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.lb6.GradientRepeatBG = false;
this.lb6.isButton = false;
this.lb6.Location = new System.Drawing.Point(8, 365);
this.lb6.MouseDownColor = System.Drawing.Color.Yellow;
this.lb6.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb6.msg = null;
this.lb6.Name = "lb6";
this.lb6.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb6.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb6.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb6.ProgressEnable = false;
this.lb6.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb6.ProgressForeColor = System.Drawing.Color.Black;
this.lb6.ProgressMax = 100F;
this.lb6.ProgressMin = 0F;
this.lb6.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb6.ProgressValue = 0F;
this.lb6.ShadowColor = System.Drawing.Color.Black;
this.lb6.Sign = "";
this.lb6.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb6.SignColor = System.Drawing.Color.Yellow;
this.lb6.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb6.Size = new System.Drawing.Size(874, 50);
this.lb6.TabIndex = 8;
this.lb6.Text = "*";
this.lb6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb6.TextShadow = true;
this.lb6.TextVisible = true;
//
// lb5
//
this.lb5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb5.BackColor2 = System.Drawing.Color.Gray;
this.lb5.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb5.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb5.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb5.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb5.BorderSize = new System.Windows.Forms.Padding(1);
this.lb5.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb5.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb5.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold);
this.lb5.ForeColor = System.Drawing.Color.White;
this.lb5.GradientEnable = true;
this.lb5.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.lb5.GradientRepeatBG = false;
this.lb5.isButton = false;
this.lb5.Location = new System.Drawing.Point(8, 308);
this.lb5.MouseDownColor = System.Drawing.Color.Yellow;
this.lb5.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb5.msg = null;
this.lb5.Name = "lb5";
this.lb5.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb5.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb5.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb5.ProgressEnable = false;
this.lb5.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb5.ProgressForeColor = System.Drawing.Color.Black;
this.lb5.ProgressMax = 100F;
this.lb5.ProgressMin = 0F;
this.lb5.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb5.ProgressValue = 0F;
this.lb5.ShadowColor = System.Drawing.Color.Black;
this.lb5.Sign = "";
this.lb5.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb5.SignColor = System.Drawing.Color.Yellow;
this.lb5.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb5.Size = new System.Drawing.Size(874, 50);
this.lb5.TabIndex = 7;
this.lb5.Text = "*";
this.lb5.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb5.TextShadow = true;
this.lb5.TextVisible = true;
//
// lb4
//
this.lb4.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb4.BackColor2 = System.Drawing.Color.Gray;
this.lb4.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb4.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb4.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb4.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb4.BorderSize = new System.Windows.Forms.Padding(1);
this.lb4.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb4.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb4.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold);
this.lb4.ForeColor = System.Drawing.Color.White;
this.lb4.GradientEnable = true;
this.lb4.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.lb4.GradientRepeatBG = false;
this.lb4.isButton = false;
this.lb4.Location = new System.Drawing.Point(8, 251);
this.lb4.MouseDownColor = System.Drawing.Color.Yellow;
this.lb4.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb4.msg = null;
this.lb4.Name = "lb4";
this.lb4.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb4.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb4.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb4.ProgressEnable = false;
this.lb4.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb4.ProgressForeColor = System.Drawing.Color.Black;
this.lb4.ProgressMax = 100F;
this.lb4.ProgressMin = 0F;
this.lb4.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb4.ProgressValue = 0F;
this.lb4.ShadowColor = System.Drawing.Color.Black;
this.lb4.Sign = "";
this.lb4.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb4.SignColor = System.Drawing.Color.Yellow;
this.lb4.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb4.Size = new System.Drawing.Size(874, 50);
this.lb4.TabIndex = 6;
this.lb4.Text = "*";
this.lb4.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb4.TextShadow = true;
this.lb4.TextVisible = true;
//
// lb3
//
this.lb3.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb3.BackColor2 = System.Drawing.Color.Gray;
this.lb3.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb3.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb3.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb3.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb3.BorderSize = new System.Windows.Forms.Padding(1);
this.lb3.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb3.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb3.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold);
this.lb3.ForeColor = System.Drawing.Color.White;
this.lb3.GradientEnable = true;
this.lb3.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.lb3.GradientRepeatBG = false;
this.lb3.isButton = false;
this.lb3.Location = new System.Drawing.Point(8, 194);
this.lb3.MouseDownColor = System.Drawing.Color.Yellow;
this.lb3.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb3.msg = null;
this.lb3.Name = "lb3";
this.lb3.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb3.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb3.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb3.ProgressEnable = false;
this.lb3.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb3.ProgressForeColor = System.Drawing.Color.Black;
this.lb3.ProgressMax = 100F;
this.lb3.ProgressMin = 0F;
this.lb3.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb3.ProgressValue = 0F;
this.lb3.ShadowColor = System.Drawing.Color.Black;
this.lb3.Sign = "";
this.lb3.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb3.SignColor = System.Drawing.Color.Yellow;
this.lb3.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb3.Size = new System.Drawing.Size(874, 50);
this.lb3.TabIndex = 5;
this.lb3.Text = "*";
this.lb3.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb3.TextShadow = true;
this.lb3.TextVisible = true;
//
// lb2
//
this.lb2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(100)))), ((int)(((byte)(100)))), ((int)(((byte)(100)))));
this.lb2.BackColor2 = System.Drawing.Color.Gray;
this.lb2.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lb2.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lb2.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb2.BorderColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lb2.BorderSize = new System.Windows.Forms.Padding(1);
this.lb2.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lb2.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lb2.Font = new System.Drawing.Font("맑은 고딕", 20F, System.Drawing.FontStyle.Bold);
this.lb2.ForeColor = System.Drawing.Color.White;
this.lb2.GradientEnable = true;
this.lb2.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.Vertical;
this.lb2.GradientRepeatBG = false;
this.lb2.isButton = false;
this.lb2.Location = new System.Drawing.Point(8, 137);
this.lb2.MouseDownColor = System.Drawing.Color.Yellow;
this.lb2.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lb2.msg = null;
this.lb2.Name = "lb2";
this.lb2.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
this.lb2.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lb2.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lb2.ProgressEnable = false;
this.lb2.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lb2.ProgressForeColor = System.Drawing.Color.Black;
this.lb2.ProgressMax = 100F;
this.lb2.ProgressMin = 0F;
this.lb2.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lb2.ProgressValue = 0F;
this.lb2.ShadowColor = System.Drawing.Color.Black;
this.lb2.Sign = "";
this.lb2.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lb2.SignColor = System.Drawing.Color.Yellow;
this.lb2.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lb2.Size = new System.Drawing.Size(874, 50);
this.lb2.TabIndex = 4;
this.lb2.Text = "*";
this.lb2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
this.lb2.TextShadow = true;
this.lb2.TextVisible = true;
//
// lbTitle
//
this.lbTitle.BackColor = System.Drawing.Color.Tomato;
this.lbTitle.BackColor2 = System.Drawing.Color.Red;
this.lbTitle.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch;
this.lbTitle.BackgroundImagePadding = new System.Windows.Forms.Padding(0);
this.lbTitle.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(90)))), ((int)(((byte)(90)))), ((int)(((byte)(90)))));
this.lbTitle.BorderColorOver = System.Drawing.Color.Gray;
this.lbTitle.BorderSize = new System.Windows.Forms.Padding(1);
this.lbTitle.ColorTheme = arCtl.arLabel.eColorTheme.Custom;
this.lbTitle.Cursor = System.Windows.Forms.Cursors.Arrow;
this.lbTitle.Font = new System.Drawing.Font("맑은 고딕", 30F, System.Drawing.FontStyle.Bold);
this.lbTitle.ForeColor = System.Drawing.Color.WhiteSmoke;
this.lbTitle.GradientEnable = true;
this.lbTitle.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.ForwardDiagonal;
this.lbTitle.GradientRepeatBG = false;
this.lbTitle.isButton = false;
this.lbTitle.Location = new System.Drawing.Point(8, 9);
this.lbTitle.MouseDownColor = System.Drawing.Color.Yellow;
this.lbTitle.MouseOverColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
this.lbTitle.msg = null;
this.lbTitle.Name = "lbTitle";
this.lbTitle.ProgressColor1 = System.Drawing.Color.LightSkyBlue;
this.lbTitle.ProgressColor2 = System.Drawing.Color.DeepSkyBlue;
this.lbTitle.ProgressEnable = false;
this.lbTitle.ProgressFont = new System.Drawing.Font("Consolas", 10F);
this.lbTitle.ProgressForeColor = System.Drawing.Color.Black;
this.lbTitle.ProgressMax = 100F;
this.lbTitle.ProgressMin = 0F;
this.lbTitle.ProgressPadding = new System.Windows.Forms.Padding(0);
this.lbTitle.ProgressValue = 0F;
this.lbTitle.ShadowColor = System.Drawing.Color.FromArgb(((int)(((byte)(50)))), ((int)(((byte)(50)))), ((int)(((byte)(50)))));
this.lbTitle.Sign = "";
this.lbTitle.SignAlign = System.Drawing.ContentAlignment.BottomRight;
this.lbTitle.SignColor = System.Drawing.Color.Yellow;
this.lbTitle.SignFont = new System.Drawing.Font("Consolas", 7F, System.Drawing.FontStyle.Italic);
this.lbTitle.Size = new System.Drawing.Size(874, 67);
this.lbTitle.TabIndex = 3;
this.lbTitle.Text = "TITLE";
this.lbTitle.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
this.lbTitle.TextShadow = true;
this.lbTitle.TextVisible = true;
this.lbTitle.Click += new System.EventHandler(this.lbTitle_Click);
//
// tmBlink
//
this.tmBlink.Enabled = true;
this.tmBlink.Interval = 300;
this.tmBlink.Tick += new System.EventHandler(this.tmBlink_Tick);
//
// fMsgWindow
//
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;
this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(200)))), ((int)(((byte)(200)))), ((int)(((byte)(200)))));
this.ClientSize = new System.Drawing.Size(900, 490);
this.Controls.Add(this.arPanel1);
this.Font = new System.Drawing.Font("Consolas", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
this.KeyPreview = true;
this.MaximizeBox = false;
this.Name = "fMsgWindow";
this.Padding = new System.Windows.Forms.Padding(5);
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Message Window";
this.TopMost = true;
this.Load += new System.EventHandler(this.fMsg_Load);
this.arPanel1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
public arCtl.arLabel lb1;
private arCtl.arPanel arPanel1;
public arCtl.arLabel lbTitle;
public arCtl.arLabel lb7;
public arCtl.arLabel lb6;
public arCtl.arLabel lb5;
public arCtl.arLabel lb4;
public arCtl.arLabel lb3;
public arCtl.arLabel lb2;
private System.Windows.Forms.Timer tmBlink;
}
}

View File

@@ -0,0 +1,156 @@
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 Project
{
public partial class fMsgWindow : Form
{
private Boolean fMove = false;
private Point MDownPos;
private string _msg = string.Empty;
public Boolean DialogMode = false;
/// <summary>
/// 사용자가 이 창을 닫을수 있는가?
/// </summary>
public Boolean EnableUserClose
{
get { return _enableuserclose; }
set
{
_enableuserclose = value;
// if (!EnableUserClose) btClose.Visible = false;
}
}
private Boolean _enableuserclose = true;
public void setMessage(string msg)
{
//msg를 분리해서 표시를 한다.
var lbs = new arCtl.arLabel[] { lbTitle, lb1, lb2, lb3, lb4, lb5, lb6, lb7 };
var lineBuf = msg.Replace("\r", "").Split('\n');
int maxLine = Math.Min(lbs.Length, lineBuf.Length);
for (int i = 0; i < lbs.Length; i++) //최대줄을 넘어가는건 표시불가
{
if (i >= lineBuf.Length)
{
lbs[i].Text = string.Empty;
}
else
{
if (i > 0) lbs[i].Text = string.Format("{0}. {1}", i, lineBuf[i]);
else lbs[i].Text = lineBuf[i];
}
}
}
public fMsgWindow(string msg, string filename = "")
{
EnableUserClose = true;
InitializeComponent();
this.FormClosing += fMsgWindow_FormClosing;
this.KeyDown += (s1, e1) => { if (EnableUserClose && e1.KeyCode == Keys.Escape) this.Close(); };
this._msg = msg;
if (filename != "")
{
string fullname = AppDomain.CurrentDomain.BaseDirectory + "Image\\" + filename;
if (System.IO.File.Exists(fullname))
{
var img = this.lb1.BackgroundImage;
this.lb1.BackgroundImage = Image.FromFile(fullname);
if (img != null) img.Dispose();
}
else
{
msg += "\nNo Image File\n" + filename;
}
}
else
{
var img = this.lb1.BackgroundImage;
this.lb1.BackgroundImage = null;
if (img != null) img.Dispose();
}
setMessage(msg);
this.lbTitle.MouseMove += label1_MouseMove;
lbTitle.MouseUp += label1_MouseUp;
lbTitle.MouseDown += label1_MouseDown;
lbTitle.MouseDoubleClick += label1_MouseDoubleClick;
//btClose.Click += arLabel1_Click;
}
void fMsgWindow_FormClosing(object sender, FormClosingEventArgs e)
{
if (DialogMode==false)
{
e.Cancel = true;
return;
}
}
private void fMsg_Load(object sender, EventArgs e)
{
}
private void label1_MouseMove(object sender, MouseEventArgs e)
{
if (fMove)
{
Point offset = new Point(e.X - MDownPos.X, e.Y - MDownPos.Y);
this.Left += offset.X;
this.Top += offset.Y;
offset = new Point(0, 0);
}
}
private void label1_MouseUp(object sender, MouseEventArgs e)
{
fMove = false;
}
private void label1_MouseDown(object sender, MouseEventArgs e)
{
MDownPos = new Point(e.X, e.Y);
fMove = true;
}
private void label1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (EnableUserClose)
{
if (DialogMode == false) this.Visible = false;
else this.Close();
}
}
private void lbTitle_Click(object sender, EventArgs e)
{
if (EnableUserClose)
{
if (DialogMode == false) this.Visible = false;
else this.Close();
}
}
private void tmBlink_Tick(object sender, EventArgs e)
{
var bg1 = lbTitle.BackColor;
var bg2 = lbTitle.BackColor2;
lbTitle.BackColor = bg2;
lbTitle.BackColor2 = bg1;
}
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="tmBlink.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@@ -0,0 +1,224 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace Project
{
/// <summary>
/// generic method Extension
/// </summary>
public static class MethodExtensions
{
public static Rectangle AddOffset(this System.Drawing.Rectangle rect,System.Drawing.Point offset)
{
return new Rectangle(rect.Left + offset.X, rect.Top + offset.Y, rect.Width, rect.Height);
}
public static Rectangle AddOffset(this System.Drawing.Rectangle rect, int x, int y)
{
return new Rectangle(rect.Left + x, rect.Top + y, rect.Width, rect.Height);
}
public static string ToString(this System.Drawing.Rectangle rect)
{
return string.Format("X={0},Y={1},W={2},H={3}", rect.X, rect.Y, rect.Width, rect.Height);
}
public static string ToString(this System.Drawing.RectangleF rect)
{
return string.Format("X={0},Y={1},W={2},H={3}", rect.X, rect.Y, rect.Width, rect.Height);
}
//public static void SetBGColor(this System.Windows.Forms.Label ctl,System.Drawing.Color color1)
//{
// ctl.BackColor = System.Drawing.Color.Red;
//}
/// <summary>
/// 0101이 반복되는 문자열 형태로 전환합니다.
/// </summary>
/// <param name="arr"></param>
/// <returns></returns>
public static string BitString(this System.Collections.BitArray arr)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = arr.Length; i > 0; i--)
sb.Append(arr[i - 1] ? "1" : "0");
return sb.ToString();
}
/// <summary>
/// int 값으로 변환합니다.
/// </summary>
/// <param name="arr"></param>
/// <returns></returns>
public static int ValueI(this System.Collections.BitArray arr)
{
byte[] buf = new byte[4];
arr.CopyTo(buf, 0);
return BitConverter.ToInt32(buf, 0);
}
/// <summary>
/// 숫자인지 검사합니다.
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static bool IsNumeric(this string input)
{
double data;
return double.TryParse(input, out data);
//return Regex.IsMatch(input, @"^\d+$");
}
/// <summary>
/// isnullorempty 를 수행합니다.
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static Boolean isEmpty(this string input)
{
return string.IsNullOrEmpty(input);
}
/// <summary>
/// default 인코딩을 사용하여 문자열로 반환합니다.
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string GetString(this Byte[] input)
{
return System.Text.Encoding.Default.GetString(input);
}
/// <summary>
/// 16진수 문자열 형태로 반환합니다.
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string GetHexString(this Byte[] input)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (byte b in input)
sb.Append(" " + b.ToString("X2"));
return sb.ToString();
}
public static string Base64Encode(this string src)
{
string base64enc = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(src));
return base64enc;
}
public static string Base64Decode(this string src)
{
var base64dec = Convert.FromBase64String(src);
return System.Text.Encoding.UTF8.GetString(base64dec);
}
public static string UrlPathEncode(this string src)
{
string data = System.Web.HttpUtility.UrlPathEncode(src);
return data;
}
public static string UrlEncode(this string src)
{
string data = System.Web.HttpUtility.UrlEncode(src, System.Text.Encoding.UTF8);
return data;
}
public static string UrlDecode(this string src)
{
string data = System.Web.HttpUtility.UrlDecode(src, System.Text.Encoding.UTF8);
return data;
}
public static string toSizeStr(this Size rect)
{
return string.Format("{0};{1}", rect.Width, rect.Height);
}
public static string toPointStr(this PointF rect)
{
return string.Format("{0};{1}", rect.X, rect.Y);
}
public static string toPointStr(this Point rect)
{
return string.Format("{0};{1}", rect.X, rect.Y);
}
public static string toRectStr(this Rectangle rect)
{
return string.Format("{0};{1};{2};{3}", rect.X, rect.Top, rect.Width, rect.Height);
}
public static string toRectStr(this RectangleF rect)
{
return string.Format("{0};{1};{2};{3}", rect.X, rect.Top, rect.Width, rect.Height);
}
public static RectangleF toRectF(this string str)
{
var buffer = str.Split(';');
if (buffer.Length != 4) return RectangleF.Empty;
for (int i = 0; i < buffer.Length; i++)
if (buffer[i] == "") buffer[i] = "0";
return new RectangleF(float.Parse(buffer[0]), float.Parse(buffer[1]), float.Parse(buffer[2]), float.Parse(buffer[3]));
}
public static Rectangle toRect(this string str)
{
var buffer = str.Split(';');
if (buffer.Length != 4) return Rectangle.Empty;
for (int i = 0; i < buffer.Length; i++)
if (buffer[i] == "") buffer[i] = "0";
return new Rectangle(int.Parse(buffer[0]), int.Parse(buffer[1]), int.Parse(buffer[2]), int.Parse(buffer[3]));
}
public static Point toPoint(this string str)
{
str = str.Replace(",", ";").Replace("*", ";").Replace("x", ";").Replace(":", ";");
var buffer = str.Split(';');
if (buffer.Length != 2) return Point.Empty;
for (int i = 0; i < buffer.Length; i++)
if (buffer[i] == "") buffer[i] = "0";
return new Point(int.Parse(buffer[0]), int.Parse(buffer[1]));
}
public static Size toSize(this string str)
{
str = str.Replace(",", ";").Replace("*", ";").Replace("x", ";").Replace(":", ";");
var buffer = str.Split(';');
if (buffer.Length != 2) return Size.Empty;
for (int i = 0; i < buffer.Length; i++)
if (buffer[i] == "") buffer[i] = "0";
return new Size(int.Parse(buffer[0]), int.Parse(buffer[1]));
}
public static PointF toPointF(this string str)
{
str = str.Replace(",", ";").Replace("*", ";").Replace("x", ";").Replace(":", ";");
var buffer = str.Split(';');
if (buffer.Length != 2) return PointF.Empty;
for (int i = 0; i < buffer.Length; i++)
if (buffer[i] == "") buffer[i] = "0";
return new PointF(float.Parse(buffer[0]), float.Parse(buffer[1]));
}
public static Rectangle Fix(this Rectangle rect, Size imgsize)
{
//영역보정
if (rect.Left < 1) rect.X = 1;
if (rect.Top < 1) rect.Y = 1;
if (rect.Right > imgsize.Width) rect.Width = imgsize.Width - rect.Left - 1;
if (rect.Bottom > imgsize.Height) rect.Height = imgsize.Height - rect.Top - 1;
if (rect.Width < 2 || rect.Height < 2) rect = Rectangle.Empty;
return rect;
}
public static RectangleF FixRoi(this RectangleF rect, Size imgsize)
{
//영역보정
if (rect.Left < 1) rect.X = 1;
if (rect.Top < 1) rect.Y = 1;
if (rect.Right > imgsize.Width) rect.Width = imgsize.Width - rect.Left - 1;
if (rect.Bottom > imgsize.Height) rect.Height = imgsize.Height - rect.Top - 1;
if (rect.Width < 2 || rect.Height < 2) rect = Rectangle.Empty;
return rect;
}
}
}

757
HMI/Project/PUB.cs Normal file
View File

@@ -0,0 +1,757 @@
using COMM;
using System.Net.NetworkInformation;
using System.Net;
using System.Management;
using System.Data;
using AR;
using System.Media;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System;
#if SPEECH
using Microsoft.Speech.Synthesis;
#endif
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Linq;
using AGVNavigationCore.Models;
using AGVNavigationCore.Controls;
using System.Collections.Generic;
using System.Drawing;
namespace Project
{
public static class PUB
{
//public static Device.CFlag flag;
public static bool bShutdown = false;
public static bool Automodeonreboot = false;
public static bool AutRebootAlreay = false;
public static bool DriveSpeed = false;
public static AGVNavigationCore.Controls.UnifiedAGVCanvas _mapCanvas;
//public static List<MapNode> _mapNodes;
/// <summary>
/// 다음 작업 명령 (PickOn/PickOff)
/// </summary>
public static ENIGProtocol.AGVCommandHE NextWorkCmd = ENIGProtocol.AGVCommandHE.Stop;
/// <summary>
/// 가상 AGV (시뮬레이션용)
/// </summary>
public static VirtualAGV _virtualAGV;
#region "Hardware"
/// <summary>
/// 읽기/쓰기용이며 구동모터 와 비상정지가 연결됨(USB-ATMEGA 2560)
/// </summary>
//public static arDev.FakePLC PLC;
///// <summary>
///// 읽기전용이며 Z축 모터와 외부 버튼이 연결됨(USB-ATMEGA 2560)
///// </summary>
//public static Device.PLC2 plcS;
/// <summary>
/// XBEE 통신(USB-TTL)
/// </summary>
public static Device.Xbee XBE;
/// <summary>
/// 배터리 잔량 확인(COM2 : RS232C - TTL)
/// </summary>
// public static arDevice.BMS bms;
/// <summary>
/// RFID READER (COM1 : RS232C)
/// </summary>
public static arDev.Narumi AGV;
public static arDev.BMS BMS;
#endregion
/// <summary>
/// 디버그모니터용 소켓(데이터를 전송만 한다)
/// </summary>
public static Device.Socket sock_debug;
#if SPEECH
private static SpeechSynthesizer voice;
#endif
public static SoundPlayer mplayer;
[DllImport("winmm.dll")]
private static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
public static void SetVolume(int volume)
{
// volume은 0~100 사이의 값
uint vol = (uint)((volume / 100.0) * 0xFFFF);
waveOutSetVolume(IntPtr.Zero, vol);
setting.musicvol = volume;
}
public static bool CheckPassword()
{
var f = new Dialog.fPassword();
if (f.ShowDialog() != System.Windows.Forms.DialogResult.OK) return false;
var pass = f.tbInput.Text.Trim();
var passok = DateTime.Now.ToString("ddMM");
if (pass.Equals(passok)) return true;
else return false;
}
/// <summary>
/// 스피커를 통한 음성을 출력합니다
/// 출력되는 음성은 기본로그에도 자동 포함됩니다
/// </summary>
/// <param name="m"></param>
/// <param name="force"></param>
/// <param name="addlog">로그에도 출력 합니다</param>
public static void Speak(string m, Boolean force = false, bool addlog = true,string logcate="")
{
if (force == false && PUB.setting.Enable_Speak == false)
{
Console.WriteLine("speech disabled");
return;
}
#if SPEECH
if (force)
voice.SpeakAsyncCancelAll();
if (voice.State == SynthesizerState.Ready)
voice.SpeakAsync(m);
if (addlog)
{
if (logcate.isEmpty()) logcate = "SPEAK";
PUB.log.Add(logcate, m);
}
#else
PUB.log.Add($"스피치컴파일상수OFF");
#endif
}
/// <summary>
/// 콜을 받을 수 있는 상황인가?
/// </summary>
/// <returns></returns>
public static bool IsCanCALL()
{
//콜가능여부도 전송한다
if (VAR.BOOL[eVarBool.FLAG_AUTORUN] &&
VAR.BOOL[eVarBool.FLAG_CHARGEONM] == false &&
PUB.BMS.BMSInformation.rsoc > PUB.setting.ChargeEmergencyLevel &&
PUB.sm.RunStep != StateMachine.ERunStep.BUFFER_OUT &&
VAR.BOOL[eVarBool.WAIT_COVER_DOWN] == false &&
VAR.BOOL[eVarBool.WAIT_COVER_UP] == false)
{
return true;
}
else return false;
}
public static CounterSetting counter;
/// <summary>
/// popup message window
/// </summary>
public static MessageWindow popup;
/// <summary>
/// database manager
/// </summary>
public static Manager.DatabaseManager dbm;
/// <summary>
/// 설정정보
/// </summary>
public static CSetting setting;
/// <summary>
/// 시스템로그
/// </summary>
public static AR.Log log, logagv, logplc, logbms, logxbee;
public static Boolean bPlayMusic = false;
/// <summary>
/// 사용자 인풋 감지 시간
/// </summary>
public static DateTime LastInputTime = DateTime.Now;
public static CResult Result;
public static string PatchVersion { get; set; }
/// <summary>
/// 상태머신
/// </summary>
public static StateMachine.StateMachine sm; //상태머신분리 190529
public static System.IO.DirectoryInfo path;
public static void initCore()
{
//setting
setting = new CSetting();
setting.Load();
//counter setting
counter = new CounterSetting();
counter.Load();
//log
log = new AR.Log();
logagv = new AR.Log();
logplc = new AR.Log();
logbms = new AR.Log();
logxbee = new AR.Log();
logagv.FileNameFormat = "{yyyyMMdd}_agv";
logplc.FileNameFormat = "{yyyyMMdd}_plc";
logbms.FileNameFormat = "{yyyyMMdd}_bms";
logxbee.FileNameFormat = "{yyyyMMdd}_cal";
//popupmessage
popup = new MessageWindow();
Result = new CResult();
Result.Clear();
}
public static void init()
{
Result = new CResult();
//state machine
sm = new StateMachine.StateMachine();
path = new System.IO.DirectoryInfo(UTIL.CurrentPath);
mplayer = new SoundPlayer();
if (PUB.setting.musicfile.isEmpty() == false)
if (System.IO.File.Exists(PUB.setting.musicfile))
{
PUB.mplayer.SoundLocation = PUB.setting.musicfile;
SetVolume(PUB.setting.musicvol);
}
#if SPEECH
voice = new SpeechSynthesizer();
try
{
// 한국어 음성을 찾아서 설정
var koreanVoice = voice.GetInstalledVoices()
.Where(v => v.VoiceInfo.Culture.Name.StartsWith("ko"))
.FirstOrDefault();
if (koreanVoice != null)
{
voice.SelectVoice(koreanVoice.VoiceInfo.Name);
}
else
{
// 한국어 음성이 없으면 기본 음성 사용
var defaultVoice = voice.GetInstalledVoices().FirstOrDefault();
if (defaultVoice != null)
{
voice.SelectVoice(defaultVoice.VoiceInfo.Name);
}
}
}
catch
{
// 음성 설정 실패 시 기본값 사용
}
voice.SetOutputToDefaultAudioDevice();
#endif
var file_version = System.IO.Path.Combine(UTIL.CurrentPath, "version.txt");
if (System.IO.File.Exists(file_version))
{
PUB.PatchVersion = System.IO.File.ReadAllText(file_version, System.Text.Encoding.UTF8);
}
else PUB.PatchVersion = string.Empty;
}
public static Boolean CheckManualChargeMode(bool Prompt = true)
{
if (VAR.BOOL[eVarBool.FLAG_CHARGEONM] == true)
{
string msg = "수동 충전 상태이므로 진행 할 수 없습니다";
PUB.Speak(msg);
if (Prompt)
UTIL.MsgE(msg);
return false;
}
else return true;
}
public static double GetFreeSpace(string driveletter)
{
try
{
var di = new System.IO.DriveInfo(driveletter);
var freespace = di.TotalFreeSpace;
var totalspace = di.TotalSize;
var freeSpaceRate = (freespace * 1.0 / totalspace) * 100.0;
return freeSpaceRate;
}
catch
{
return 100.0;
}
}
public static double GetFreeSpace()
{
double retval = 100.0;
string savePath1 = path.FullName;
if (savePath1 != "" && System.IO.Directory.Exists(savePath1))
{
//이폴더를 사용
if (savePath1.StartsWith("\\") == false)
{
//남은잔량을 체크한다.
retval = GetFreeSpace(savePath1.Substring(0, 1));
//if (freespace1 >= Pub.setting.AutoDeleteThreshold) return savePath1;
}
}
return retval;
}
/// <summary>
/// 장치에 오류가 있는지?
/// </summary>
/// <returns></returns>
public static Boolean HasHWError()
{
//if (PUB.PLC.IsValid == false) return true;
if (PUB.AGV.IsOpen == false) return true;
if (PUB.XBE.IsOpen == false) return true;
return false;
}
//public static void AddStatusSQL(StateMachine.eSMStep status, string remark, DateTime wdate)
//{
// VAR.TIME[eVarTime.StatusReporttime] = DateTime.Now;
// try
// {
// var state = 0;
// if (status == StateMachine.eSMStep.RUN) state = 1;
// else if (status == StateMachine.eSMStep.ERROR || status == StateMachine.eSMStep.EMERGENCY) state = 2;
// if (string.IsNullOrEmpty(remark)) remark = status.ToString();
// var mcid = PUB.setting.MCID;
// var path = System.IO.Path.Combine(Util.CurrentPath, "Status");
// var file = System.IO.Path.Combine(path, $"{DateTime.Now.ToString("HHmmssfff")}_{status}.sql");
// var sql = "insert into MCMonitor_Rawdata(Model,status,remark,ip,mac,time) values('{0}','{1}','{2}','{3}','{4}','{5}')";
// sql = string.Format(sql, mcid, state, remark, IP, MAC, wdate.ToString("yyyy-MM-dd HH:mm:ss"));
// System.IO.File.WriteAllText(file, sql, System.Text.Encoding.Default);
// //만들어진지 3분이 지난 파일은 삭제한다.
// //var di = new System.IO.DirectoryInfo(path);
// //var fi = di.GetFiles("*.sql", System.IO.SearchOption.TopDirectoryOnly).Where(t => t.LastWriteTime < DateTime.Now.AddMinutes(-3)).FirstOrDefault();
// //if (fi != null) fi.Delete();
// }
// catch (Exception ex)
// {
// PUB.log.AddE(ex.Message);
// }
//}
public static void AddEEDB(string remark)
{
var step = PUB.sm.Step.ToString();
var rtep = PUB.sm.RunStep.ToString();
var mcid = PUB.setting.MCID;
var path = System.IO.Path.Combine(UTIL.CurrentPath, "Status");
var file = System.IO.Path.Combine(path, $"{DateTime.Now.ToString("HHmmssfff")}_{step}_{rtep}.sql");
var wdate = DateTime.Now;
try
{
var sql = "insert into AGV_History(mcid,step,runstep,remark,ip,wdate) values('{0}','{1}','{2}','{3}','{4}','{5}')";
sql = string.Format(sql, mcid, step, rtep, remark, IP, wdate.ToString("yyyy-MM-dd HH:mm:ss"));
System.IO.File.WriteAllText(file, sql, System.Text.Encoding.Default);
//만들어진지 3분이 지난 파일은 삭제한다.
//var di = new System.IO.DirectoryInfo(path);
//var fi = di.GetFiles("*.sql", System.IO.SearchOption.TopDirectoryOnly).Where(t => t.LastWriteTime < DateTime.Now.AddMinutes(-3)).FirstOrDefault();
//if (fi != null) fi.Delete();
}
catch (Exception ex)
{
PUB.log.AddE(ex.Message);
}
}
public static string GetResultCodeMessage(eResult err)
{
return err.ToString().ToUpper();
}
public static string GetErrorMessage(eECode err, params object[] values)
{
switch (err)
{
case eECode.NOTALLOWUP:
return "상차 허용 위치가 아닙니다";
case eECode.AGVCONN:
return Lang.AGV연결실패;
case eECode.PLCCONN:
return Lang.PLC통신실패;
case eECode.MESSAGE_ERROR:
if (values.Length > 0) return values[0].ToString();
return "Message Error";
default:
return err.ToString();
}
}
public static string IP { get; set; }
public static string MAC { get; set; }
/// <summary>
/// 프로그램 사용기록 추가
/// </summary>
/// <param name="prgmName"></param>
/// <param name="develop"></param>
/// <param name="prgmVersion"></param>
public static void CheckNRegister3(string prgmName, string develop, string prgmVersion)
{
if (prgmName.Length > 50) prgmName = prgmName.Substring(0, 50); //길이제한
var task = Task.Factory.StartNew(() =>
{
try
{
string ip = "";
string mac = "";
// string prgmName = Application.ProductName;
var nif = NetworkInterface.GetAllNetworkInterfaces();
var host = Dns.GetHostEntry(Dns.GetHostName());
string fullname = System.Net.Dns.GetHostEntry("").HostName;
foreach (IPAddress r in host.AddressList)
{
string str = r.ToString();
if (str != "" && str.Substring(0, 3) == "10.")
{
ip = str;
break;
}
}
string rtn = string.Empty;
ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled='TRUE'");
ManagementObjectSearcher query1 = new ManagementObjectSearcher(oq);
foreach (ManagementObject mo in query1.Get())
{
string[] address = (string[])mo["IPAddress"];
if (address[0] == ip && mo["MACAddress"] != null)
{
mac = mo["MACAddress"].ToString();
break;
}
}
if (ip == "" || mac == "") return;
var conn = new SqlConnection(AGV4.Properties.Settings.Default.CS);// "Data Source=10.131.15.18;Initial Catalog=EE;Persist Security Info=True;User ID=eeuser;Password=Amkor123!");
conn.Open();
string ProcName = "AddPrgmUser3";
var cmd = new SqlCommand(ProcName, conn)
{
CommandType = CommandType.StoredProcedure
};
SqlParameter param = cmd.Parameters.Add("@mac", SqlDbType.NVarChar, 50);
param.Value = mac;
param = cmd.Parameters.Add("@ip", SqlDbType.NVarChar, 50);
param.Value = ip;
param = cmd.Parameters.Add("@pgrm", SqlDbType.NVarChar, 50);
param.Value = prgmName;
param = cmd.Parameters.Add("@develop", SqlDbType.NVarChar, 50);
param.Value = develop;
param = cmd.Parameters.Add("@pgver", SqlDbType.NVarChar, 50);
param.Value = prgmVersion;
param = cmd.Parameters.Add("@prgmLogin", SqlDbType.VarChar, 20);
param.Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
param = cmd.Parameters.Add("@account", SqlDbType.NVarChar, 50);
param.Value = System.Environment.UserName;
param = cmd.Parameters.Add("@hostname", SqlDbType.NVarChar, 100);
param.Value = fullname;
cmd.ExecuteNonQuery();
conn.Close();
IP = ip;
MAC = mac;
}
catch (Exception ex)
{
PUB.log.AddE(ex.Message);
}
});
}
public static string SelectSerialPort()
{
var f = new System.Windows.Forms.Form();
f.WindowState = System.Windows.Forms.FormWindowState.Normal;
f.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
f.Size = new System.Drawing.Size(800, 400);
f.MaximizeBox = false;
f.MinimizeBox = false;
f.Text = "Select Port";
f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
var lst = new System.Windows.Forms.ListBox();
lst.Font = new System.Drawing.Font("Consolas", 15, System.Drawing.FontStyle.Bold);
lst.Dock = System.Windows.Forms.DockStyle.Fill;
lst.DoubleClick += (s1, e1) =>
{
if (lst.SelectedItem != null) f.DialogResult = System.Windows.Forms.DialogResult.OK;
};
using (var searcher = new ManagementObjectSearcher("SELECT * FROM WIN32_SerialPort"))
{
var portnames = System.IO.Ports.SerialPort.GetPortNames().OrderBy(t => t);
var ports = searcher.Get().Cast<ManagementBaseObject>().ToList();
foreach (var port in portnames)
{
var desc = "";
var portInfo = ports.Where(t => t["DeviceId"].ToString() == port).FirstOrDefault();
if (portInfo != null) desc = portInfo["Caption"].ToString();
lst.Items.Add(string.Format("{0} - {1}", port, desc));
}
}
f.Controls.Add(lst);
if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
var name = lst.SelectedItem.ToString().Split('-');
return name[0].Trim();
}
else return string.Empty;
}
public static void SystemReboot(UInt16 timeout, bool setautomode = false)
{
System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo();
si.FileName = @"c:\windows\system32\shutdown.exe";
si.Arguments = "-r -t " + timeout.ToString();
si.UseShellExecute = false;
System.Diagnostics.Process prc = new System.Diagnostics.Process();
prc.StartInfo = si;
PUB.AGV.AGVMoveStop("user reboot");
if (setautomode)
{
PUB.Automodeonreboot = true;
PUB.setting.SetAutoModeOn = true;
PUB.setting.AUtoRebootLastTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
PUB.setting.Save();
}
prc.Start();
}
public static void SystemShutdown(UInt16 timeout)
{
//System.Text.StringBuilder sb = new StringBuilder();
//sb.AppendLine("@echo off");
//sb.AppendLine("echo System OFF After " + timeout.ToString() + "Seconds");
//sb.AppendLine("shutdown -s -t " + timeout.ToString());
//string bfile = AppDomain.CurrentDomain.BaseDirectory + "Shutdown.bat";
//System.IO.File.WriteAllText(bfile, string.Format(sb.ToString(), AppDomain.CurrentDomain.BaseDirectory), System.Text.Encoding.Default);
System.Diagnostics.ProcessStartInfo si = new System.Diagnostics.ProcessStartInfo();
si.FileName = @"c:\windows\system32\shutdown.exe";
si.Arguments = "-s -t " + timeout.ToString();
si.UseShellExecute = false;
System.Diagnostics.Process prc = new System.Diagnostics.Process();
prc.StartInfo = si;
prc.Start();
}
public static void ChangeUIPopup(System.Windows.Forms.NumericUpDown valueCtl)
{
var value = valueCtl.Value.ToString();
var f = UTIL.InputBox("input", value);// new Dialog.fInput(value);
if (f.Item1)
{
var val = decimal.Parse(f.Item2);
if (val < valueCtl.Minimum)
{
UTIL.MsgE(string.Format("최소 입력값은 {0} 입니다.", valueCtl.Minimum));
val = valueCtl.Minimum;
}
if (val > valueCtl.Maximum)
{
UTIL.MsgE(string.Format("최대 입력값은 {0} 입니다.", valueCtl.Maximum));
val = valueCtl.Maximum;
}
valueCtl.Value = val;
}
}
#region VirtualAGV
public static MapNode FindByNodeID(string nodeidx)
{
var _mapNodes = PUB._mapCanvas.Nodes;
if (_mapNodes == null || _mapNodes.Any() == false) return null;
if (nodeidx.isEmpty()) return null;
return _mapNodes.Where(t => t.Id.Equals(nodeidx)).FirstOrDefault();
}
public static MapNode FindByRFID(string rfidValue)
{
var _mapNodes = PUB._mapCanvas.Nodes;
if (_mapNodes == null || _mapNodes.Any() == false) return null;
if (rfidValue.isEmpty()) return null;
return _mapNodes.Where(t => t.RfidId.Equals(rfidValue)).FirstOrDefault();
}
public static List<MapNode> FindByNodeAlias(string alias)
{
var _mapNodes = PUB._mapCanvas.Nodes;
if (_mapNodes == null || _mapNodes.Any() == false) return null;
if (alias.isEmpty()) return null;
var lst = _mapNodes.Where(t => t.AliasName.Equals(alias));
if (lst.Any() == false) return null;
return lst.ToList();
}
public static List<MapNode> FindByNodeType(AGVNavigationCore.Models.MapNode type)
{
var _mapNodes = PUB._mapCanvas.Nodes;
if (_mapNodes == null || _mapNodes.Any() == false) return null;
var lst = _mapNodes.Where(t => t.Type.Equals(type));
if (lst.Any() == false) return null;
return lst.ToList();
}
/// <summary>
/// RFID 읽기 시 해당 노드 위치로 AGV 업데이트
/// </summary>
/// <param name="rfidId">읽은 RFID ID</param>
/// <param name="motorDirection">모터 방향 (Forward/Backward)</param>
/// <returns>업데이트 성공 여부</returns>
public static bool UpdateAGVFromRFID(ushort rfidId, AgvDirection motorDirection = AgvDirection.Forward)
{
var _mapNodes = PUB._mapCanvas.Nodes;
if (_virtualAGV == null || _mapNodes == null) return false;
// RFID에 해당하는 노드 찾기
var node = _mapNodes.FirstOrDefault(n => n.RfidId == rfidId);
if (node != null)
{
_virtualAGV.SetPosition(node, motorDirection);
RefreshAGVCanvas();
log.Add($"[AGV] RFID {rfidId} 감지 → 노드 {node.Id} 위치 업데이트 (방향: {motorDirection})");
return true;
}
log.Add($"[AGV] RFID {rfidId}에 해당하는 노드를 찾을 수 없음");
return false;
}
/// <summary>
/// 노드ID로 AGV 위치 업데이트
/// </summary>
/// <param name="nodeId">노드 ID</param>
/// <param name="motorDirection">모터 방향 (Forward/Backward)</param>
/// <returns>업데이트 성공 여부</returns>
public static bool UpdateAGVToNode(string nodeId, AgvDirection motorDirection = AgvDirection.Forward)
{
var _mapNodes = PUB._mapCanvas.Nodes;
if (_virtualAGV == null || _mapNodes == null) return false;
var node = _mapNodes.FirstOrDefault(n => n.Id == nodeId);
if (node != null)
{
_virtualAGV.SetPosition(node, motorDirection);
RefreshAGVCanvas();
log.Add($"[AGV] 노드 {nodeId} 위치로 이동 (방향: {motorDirection})");
return true;
}
return false;
}
/// <summary>
/// 모든 로그를 플러시 합니다.
/// </summary>
public static void LogFlush()
{
PUB.log.Flush();
PUB.logagv.Flush();
PUB.logplc.Flush();
PUB.logbms.Flush();
PUB.logxbee.Flush();
}
/// <summary>
/// AGV 방향 업데이트
/// </summary>
/// <param name="direction">새로운 방향</param>
public static void UpdateAGVDirection(AgvDirection direction)
{
if (_virtualAGV == null) return;
_virtualAGV.CurrentDirection = direction;
RefreshAGVCanvas();
}
/// <summary>
/// AGV 상태 업데이트
/// </summary>
/// <param name="state">새로운 상태</param>
public static void UpdateAGVState(AGVState state)
{
if (_virtualAGV == null) return;
_virtualAGV.CurrentState = state;
RefreshAGVCanvas();
}
/// <summary>
/// AGV 배터리 레벨 업데이트
/// </summary>
/// <param name="batteryLevel">배터리 레벨 (0.0 ~ 100.0)</param>
public static void UpdateAGVBattery(float batteryLevel)
{
if (_virtualAGV == null) return;
_virtualAGV.SetBatteryLevel(batteryLevel);
RefreshAGVCanvas();
}
/// <summary>
/// 맵 캔버스 강제 갱신 (AGV 위치 표시 업데이트)
/// </summary>
public static void RefreshAGVCanvas()
{
if (_mapCanvas != null && _mapCanvas.IsHandleCreated)
{
_mapCanvas.Invalidate();
}
}
#endregion
}
}

59
HMI/Project/Program.cs Normal file
View File

@@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Resources;
using System.Threading;
namespace Project
{
static class Program
{
/// <summary>
/// 해당 응용 프로그램의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main()
{
//중복실행방지
string mutexName = "AGV4_Application_Mutex";
Mutex mtx = new Mutex(true, mutexName);
var success = mtx.WaitOne(new TimeSpan(0, 0, 1));
if (success == false)
{
MessageBox.Show("Duplicate execution not allowed\n\nProgram is already running");
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
//AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
Application.Run(new fMain());
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
string emsg = "Fatal Error(UHE)\n\n" + e.ExceptionObject.ToString();
PUB.log.AddE(emsg);
PUB.log.Flush();
AR.UTIL.SaveBugReport(emsg);
var f = new fErrorException(emsg);
f.ShowDialog();
Application.ExitThread();
}
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
string emsg = "Fatal Error(ATE)\n\n" + e.Exception.ToString();
PUB.log.AddE(emsg);
PUB.log.Flush();
AR.UTIL.SaveBugReport(emsg);
var f = new fErrorException(emsg);
f.ShowDialog();
Application.ExitThread();
}
}
}

24
HMI/Project/Project.sln Normal file
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

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해
// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
// 이러한 특성 값을 변경하세요.
[assembly: AssemblyTitle("ENIG Shuttle Narmi")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Amkor K4")]
[assembly: AssemblyProduct("ENIG Shuttle Narmi")]
[assembly: AssemblyCopyright("Copyright ©Amkor-EET 2020")]
[assembly: AssemblyTrademark("EET")]
[assembly: AssemblyCulture("")]
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
[assembly: ComVisible(false)]
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
[assembly: Guid("65f3e762-800c-772e-862f-b444642ec59f")]
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
//
// 주 버전
// 부 버전
// 빌드 번호
// 수정 버전
//
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호가 자동으로
// 지정되도록 할 수 있습니다.
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("25.12.04.0000")]
[assembly: AssemblyFileVersion("25.12.04.0000")]

View File

@@ -0,0 +1,173 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Project.Properties {
using System;
/// <summary>
/// 지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
/// </summary>
// 이 클래스는 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() {
}
/// <summary>
/// 이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
/// </summary>
[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("Project.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
/// 재정의합니다.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap Charge {
get {
object obj = ResourceManager.GetObject("Charge", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap ChargeH {
get {
object obj = ResourceManager.GetObject("ChargeH", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap icons8_charged_battery_80 {
get {
object obj = ResourceManager.GetObject("icons8_charged_battery_80", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap icons8_checked_radio_button_48 {
get {
object obj = ResourceManager.GetObject("icons8-checked-radio-button-48", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap icons8_exercise_40 {
get {
object obj = ResourceManager.GetObject("icons8-exercise-40", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap icons8_new_40 {
get {
object obj = ResourceManager.GetObject("icons8-new-40", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap icons8_no_running_40 {
get {
object obj = ResourceManager.GetObject("icons8-no-running-40", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap icons8_running_40 {
get {
object obj = ResourceManager.GetObject("icons8-running-40", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap icons8_save_40 {
get {
object obj = ResourceManager.GetObject("icons8-save-40", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap icons8_unavailable_40 {
get {
object obj = ResourceManager.GetObject("icons8-unavailable-40", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// System.Drawing.Bitmap 형식의 지역화된 리소스를 찾습니다.
/// </summary>
internal static System.Drawing.Bitmap setup_40 {
get {
object obj = ResourceManager.GetObject("setup_40", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
}
}

View File

@@ -0,0 +1,154 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="icons8-no-running-40" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-no-running-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-save-40" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-save-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-unavailable-40" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-unavailable-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-new-40" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-new-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-exercise-40" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-exercise-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-running-40" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-running-40.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8-checked-radio-button-48" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-checked-radio-button-48.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="icons8_charged_battery_80" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-charged-battery-80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="setup_40" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-automatic-gearbox-warning-80.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="Charge" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\icons8-charge-empty-battery-96.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="ChargeH" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\ChargeH.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@@ -0,0 +1,50 @@
//------------------------------------------------------------------------------
// <auto-generated>
// 이 코드는 도구를 사용하여 생성되었습니다.
// 런타임 버전:4.0.30319.42000
//
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
// 이러한 변경 내용이 손실됩니다.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AGV4.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.9.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;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("asdfasdfasdf\r\nasdfasdfasdf\r\nasdf")]
public string css {
get {
return ((string)(this["css"]));
}
set {
this["css"] = value;
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.SpecialSettingAttribute(global::System.Configuration.SpecialSetting.ConnectionString)]
[global::System.Configuration.DefaultSettingValueAttribute("Data Source=K4FASQL.kr.ds.amkor.com,50150;Initial Catalog=EE;Persist Security Inf" +
"o=True;User ID=eeadm;Password=uJnU8a8q&DJ+ug-D;Encrypt=False;TrustServerCertific" +
"ate=True")]
public string CS {
get {
return ((string)(this["CS"]));
}
}
}
}

View File

@@ -0,0 +1,19 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="AGV4.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="css" Type="System.String" Scope="User">
<Value Profile="(Default)">asdfasdfasdf
asdfasdfasdf
asdf</Value>
</Setting>
<Setting Name="CS" Type="(Connection string)" Scope="Application">
<DesignTimeValue Profile="(Default)">&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;SerializableConnectionString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;
&lt;ConnectionString&gt;Data Source=K4FASQL.kr.ds.amkor.com,50150;Initial Catalog=EE;Persist Security Info=True;User ID=eeadm;Password=uJnU8a8q&amp;amp;DJ+ug-D;Encrypt=False;TrustServerCertificate=True&lt;/ConnectionString&gt;
&lt;ProviderName&gt;System.Data.SqlClient&lt;/ProviderName&gt;
&lt;/SerializableConnectionString&gt;</DesignTimeValue>
<Value Profile="(Default)">Data Source=K4FASQL.kr.ds.amkor.com,50150;Initial Catalog=EE;Persist Security Info=True;User ID=eeadm;Password=uJnU8a8q&amp;DJ+ug-D;Encrypt=False;TrustServerCertificate=True</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -0,0 +1,8 @@
{
"profiles": {
"AGV4": {
"commandName": "Project",
"workingDirectory": "D:\\Amkor\\AGV4"
}
}
}

20
HMI/Project/ReadMe.txt Normal file
View File

@@ -0,0 +1,20 @@
====================================
HostName : EET1PAGV2
IP Address : 192.168.1.78
====================================
XB24C / 802.15.4 TH
call button setting : ch-17 / id-45A4 / DH:0 / DL:FFFF
충전기 No : 30 : ch-C / ID-3332
GO-QA,GO-QC 라벨 출력 후 장비에 붙이기
무선 안테나 1개 파손 , 정면 우측
바닥 회색 테이프 마감 필요
08:00~09:00
18:00~19:00
230425 chi countQA추가 및 메인 디스플레이 방식 변경
충전중 수동전환하면 충전 해제 함
230424 chi QA루트 추가 및 관련 테스트 작업, RFID 입력

Binary file not shown.

After

Width:  |  Height:  |  Size: 788 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 986 B

View File

@@ -0,0 +1,145 @@
using System;
using System.Collections.Generic;
namespace Project.StateMachine
{
public class AGVPosition
{
public enum PositionType
{
None,
Tops1,
Sstron1,
Sstron2,
Path
}
public class Position
{
public int RFID { get; set; }
public PositionType Type { get; set; }
public string Name { get; set; }
public string Direction { get; set; }
public List<int> ConnectedPositions { get; set; }
public Position(int rfid, PositionType type, string name, string direction)
{
RFID = rfid;
Type = type;
Name = name;
Direction = direction;
ConnectedPositions = new List<int>();
}
}
private Dictionary<int, Position> positionMap;
private static AGVPosition instance;
private AGVPosition()
{
positionMap = new Dictionary<int, Position>();
InitializePositions();
}
public static AGVPosition Instance
{
get
{
if (instance == null)
{
instance = new AGVPosition();
}
return instance;
}
}
private void InitializePositions()
{
// Tops 1 관련 위치
AddPosition(100, PositionType.Tops1, "Tops 1", "0");
AddPosition(101, PositionType.Path, "Tops1-Sstron1 Path 1", "0");
AddPosition(102, PositionType.Path, "Tops1-Sstron1 Path 2", "0");
// Sstron 1 관련 위치
AddPosition(200, PositionType.Sstron1, "Sstron 1", "0");
AddPosition(201, PositionType.Path, "Sstron1-Sstron2 Path 1", "0");
AddPosition(202, PositionType.Path, "Sstron1-Sstron2 Path 2", "0");
// Sstron 2 관련 위치
AddPosition(300, PositionType.Sstron2, "Sstron 2", "0");
// 경로 연결 설정
ConnectPositions(100, 101);
ConnectPositions(101, 102);
ConnectPositions(102, 200);
ConnectPositions(200, 201);
ConnectPositions(201, 202);
ConnectPositions(202, 300);
}
private void AddPosition(int rfid, PositionType type, string name, string direction)
{
positionMap[rfid] = new Position(rfid, type, name, direction);
}
private void ConnectPositions(int pos1, int pos2)
{
if (positionMap.ContainsKey(pos1) && positionMap.ContainsKey(pos2))
{
positionMap[pos1].ConnectedPositions.Add(pos2);
positionMap[pos2].ConnectedPositions.Add(pos1);
}
}
public Position GetPosition(int rfid)
{
if (positionMap.ContainsKey(rfid))
{
return positionMap[rfid];
}
return null;
}
public List<int> FindPath(int startRfid, int endRfid)
{
if (!positionMap.ContainsKey(startRfid) || !positionMap.ContainsKey(endRfid))
{
return null;
}
var visited = new HashSet<int>();
var path = new List<int>();
if (FindPathDFS(startRfid, endRfid, visited, path))
{
return path;
}
return null;
}
private bool FindPathDFS(int current, int end, HashSet<int> visited, List<int> path)
{
if (current == end)
{
path.Add(current);
return true;
}
visited.Add(current);
path.Add(current);
foreach (var next in positionMap[current].ConnectedPositions)
{
if (!visited.Contains(next))
{
if (FindPathDFS(next, end, visited, path))
{
return true;
}
}
}
path.RemoveAt(path.Count - 1);
return false;
}
}
}

View File

@@ -0,0 +1,107 @@
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace Project.StateMachine
{
public class AGVProtocolHandler
{
private static AGVProtocolHandler instance;
private AGVStateManager stateManager;
private AGVProtocolHandler()
{
stateManager = AGVStateManager.Instance;
}
public static AGVProtocolHandler Instance
{
get
{
if (instance == null)
{
instance = new AGVProtocolHandler();
}
return instance;
}
}
public bool ProcessProtocol(string protocol)
{
try
{
// 프로토콜 형식: COMMAND:DESTINATION
var parts = protocol.Split(':');
if (parts.Length != 2)
{
return false;
}
var command = parts[0].ToUpper();
var destination = parts[1].ToUpper();
switch (command)
{
case "MOVE_TO":
return HandleMoveToCommand(destination);
case "PICKUP":
return HandlePickupCommand(destination);
case "DROPOFF":
return HandleDropoffCommand(destination);
case "EMERGENCY_STOP":
return HandleEmergencyStopCommand();
default:
return false;
}
}
catch (Exception)
{
return false;
}
}
private bool HandleMoveToCommand(string destination)
{
switch (destination)
{
case "T1":
return stateManager.ProcessCommand(AGVStateManager.AGVCommand.MoveToTops1);
case "S1":
return stateManager.ProcessCommand(AGVStateManager.AGVCommand.MoveToSstron1);
case "S2":
return stateManager.ProcessCommand(AGVStateManager.AGVCommand.MoveToSstron2);
default:
return false;
}
}
private bool HandlePickupCommand(string destination)
{
if (destination != "T1")
{
return false;
}
return stateManager.ProcessCommand(AGVStateManager.AGVCommand.PickupCart);
}
private bool HandleDropoffCommand(string destination)
{
if (destination != "S1" && destination != "S2")
{
return false;
}
return stateManager.ProcessCommand(AGVStateManager.AGVCommand.DropoffCart);
}
private bool HandleEmergencyStopCommand()
{
return stateManager.ProcessCommand(AGVStateManager.AGVCommand.EmergencyStop);
}
public string GetCurrentStatus()
{
var state = stateManager.CurrentState;
return $"Current State: {state}";
}
}
}

View File

@@ -0,0 +1,159 @@
using System;
using System.Collections.Generic;
namespace Project.StateMachine
{
public class AGVStateManager
{
public enum AGVState
{
Idle,
Moving,
Loading,
Unloading,
Error
}
public enum AGVCommand
{
MoveToTops1,
MoveToSstron1,
MoveToSstron2,
PickupCart,
DropoffCart,
EmergencyStop
}
private AGVState currentState;
private static AGVStateManager instance;
private AGVPosition positionManager;
private AGVStateManager()
{
currentState = AGVState.Idle;
positionManager = AGVPosition.Instance;
}
public static AGVStateManager Instance
{
get
{
if (instance == null)
{
instance = new AGVStateManager();
}
return instance;
}
}
public AGVState CurrentState
{
get { return currentState; }
}
public bool ProcessCommand(AGVCommand command)
{
switch (command)
{
case AGVCommand.MoveToTops1:
return HandleMoveCommand(100); // Tops 1 RFID
case AGVCommand.MoveToSstron1:
return HandleMoveCommand(200); // Sstron 1 RFID
case AGVCommand.MoveToSstron2:
return HandleMoveCommand(300); // Sstron 2 RFID
case AGVCommand.PickupCart:
return HandlePickupCommand();
case AGVCommand.DropoffCart:
return HandleDropoffCommand();
case AGVCommand.EmergencyStop:
return HandleEmergencyStop();
default:
return false;
}
}
private bool HandleMoveCommand(int targetRfid)
{
if (currentState != AGVState.Idle && currentState != AGVState.Moving)
{
return false;
}
// 현재 위치에서 목표 위치까지의 경로를 찾음
var currentRfid = GetCurrentRfid(); // 실제 구현에서는 현재 RFID 값을 가져와야 함
var path = positionManager.FindPath(currentRfid, targetRfid);
if (path == null)
{
return false;
}
currentState = AGVState.Moving;
// 경로를 따라 이동하는 로직 구현
return true;
}
private bool HandlePickupCommand()
{
if (currentState != AGVState.Moving)
{
return false;
}
// 현재 위치가 Tops 1인지 확인
var currentRfid = GetCurrentRfid();
var position = positionManager.GetPosition(currentRfid);
if (position == null || position.Type != AGVPosition.PositionType.Tops1)
{
return false;
}
currentState = AGVState.Loading;
// 카트 적재 로직 구현
return true;
}
private bool HandleDropoffCommand()
{
if (currentState != AGVState.Moving)
{
return false;
}
// 현재 위치가 Sstron 1 또는 Sstron 2인지 확인
var currentRfid = GetCurrentRfid();
var position = positionManager.GetPosition(currentRfid);
if (position == null ||
(position.Type != AGVPosition.PositionType.Sstron1 &&
position.Type != AGVPosition.PositionType.Sstron2))
{
return false;
}
currentState = AGVState.Unloading;
// 카트 하역 로직 구현
return true;
}
private bool HandleEmergencyStop()
{
currentState = AGVState.Error;
// 비상 정지 로직 구현
return true;
}
private int GetCurrentRfid()
{
// 실제 구현에서는 AGV의 현재 RFID 값을 반환해야 함
// 예시로 100(Tops 1)을 반환
return 100;
}
public void UpdateState(AGVState newState)
{
currentState = newState;
}
}
}

View File

@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Windows.Forms;
namespace Project
{
public partial class fMain
{
delegate void UpdateControlTextHandler(Control ctl, string value);
void UpdateControlText(Control ctl, string value)
{
if (ctl.InvokeRequired)
{
ctl.BeginInvoke(new UpdateControlTextHandler(UpdateControlText), new object[] { ctl, value });
}
else
{
ctl.Text = value;
}
}
}
}

View File

@@ -0,0 +1,296 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using Project.StateMachine;
using COMM;
using AR;
namespace Project
{
public partial class fMain
{
DateTime LastSpeakTime = DateTime.Now;
DateTime CoverControlTime = DateTime.Now;
DateTime LastCommandTime = DateTime.Now;
DateTime LastCommandTimeNextStop = DateTime.Now;
bool runStepisFirst = false;
private void _SM_RUN(Boolean isFirst, TimeSpan stepTime)
{
//HW 연결오류
if (PUB.AGV.IsOpen == false)
{
PUB.Result.SetResultMessage(eResult.Hardware, eECode.AGVCONN, eNextStep.ERROR);
PUB.sm.SetNewStep(eSMStep.IDLE);
return;
}
//가동불가 조건 확인
if (CheckStopCondition() == false) return;
//중단기능이 동작이라면 처리하지 않는다.
if (PUB.sm.bPause)
{
System.Threading.Thread.Sleep(200);
return;
}
//스텝이 변경되었다면?
if (PUB.sm.RunStep != PUB.sm.RunStepNew)
{
runStepisFirst = true;
PUB.sm.ApplyRunStep();
}
else runStepisFirst = false;
//처음시작이라면 시작시간을 설정한다
if (isFirst)
{
if (PUB.sm.RunStep == ERunStep.READY)
VAR.TIME.Update(eVarTime.ReadyStart);
else
VAR.TIME.Update(eVarTime.RunStart);
VAR.I32[eVarInt32.PathValidationError] = 0;
}
//자동모드에서 대기상태 (추가동작없음)
if (PUB.sm.RunStep == ERunStep.READY)
{
_SM_RUN_READY(runStepisFirst, PUB.sm.GetRunSteptime);
return;
}
//#############################################
//## 이 후에는 모든 동작루틴이 온다
//#############################################
//라이더 센서에서 멈춘경우 처리
if (PUB.AGV.system1.stop_by_front_detect == true)
{
var tsSpeak = DateTime.Now - LastSpeakTime;
if (tsSpeak.TotalSeconds >= PUB.setting.alarmSoundTerm)
{
PUB.Speak(Lang.);
LastSpeakTime = DateTime.Now;
}
return;
}
//선로이탈감지
if (PUB.AGV.error.runerror_by_no_magent_line == true)
{
var tsSpeak = DateTime.Now - LastSpeakTime;
if (tsSpeak.TotalSeconds >= PUB.setting.alarmSoundTerm)
{
PUB.Speak(Lang.);
LastSpeakTime = DateTime.Now;
}
return;
}
//현재위치를 모르는 상태라면 이동하여 현재 위치를 찾는다
if (_SM_RUN_POSCHK(isFirst, stepTime) == false)
{
PUB.Result.result_message = "현재 위치 확인 중";
PUB.Result.result_progressmax = 0;
return;
}
//나머지 상황체크
switch (PUB.sm.RunStep)
{
case ERunStep.GOHOME:
if (_SM_RUN_GOTO_HOME(runStepisFirst, PUB.sm.GetRunSteptime) == true)
{
PUB.log.Add($"홈 이동이 완료되어 준비상태로 전환합니다");
PUB.sm.SetNewRunStep(ERunStep.READY);
}
break;
case ERunStep.GOTO: //목적지까지 이동하는 경우
if (_SM_RUN_GOTO(runStepisFirst, PUB.sm.GetRunSteptime) == true)
{
//목적지가 BUFFER라면 버퍼투입대기위치까지 완료했다는 시그널을 보낸다.
var target = PUB._virtualAGV.TargetNode;
PUB.log.Add($"목적지({target.RfidId}) 도착완료 타입:{target.Type}, 출발지:{PUB._virtualAGV.StartNode.RfidId}");
PUB.XBE.StepMC = Device.eDocStep.NotSet;
switch (target.StationType)
{
case AGVNavigationCore.Models.StationType.Buffer:
var lastPath = PUB._virtualAGV.CurrentPath.DetailedPath.LastOrDefault();
if (lastPath.NodeId.Equals(PUB._virtualAGV.CurrentNode.Id))
{
//버퍼진입전 노드에 도착완료했따
PUB.XBE.StepMC = Device.eDocStep.ReadyForEnter;
}
else
{
//마지막위치가 아닌 다른 위치에 있으니 버퍼 작업을 할 수없다
PUB.XBE.StepMC = Device.eDocStep.NotSet;
PUB.log.AddE($"목적지가 버퍼이나 노드가 불일치 한다 오류사항");
PUB._mapCanvas.SetAlertMessage("목적지가 버퍼이나 노드 불일치 오류");
PUB.sm.SetNewRunStep(ERunStep.ERROR);
}
break;
case AGVNavigationCore.Models.StationType.Charger1:
case AGVNavigationCore.Models.StationType.Charger2:
break;
case AGVNavigationCore.Models.StationType.Loader:
PUB.XBE.StepMC = Device.eDocStep.ReadyForEnter;
break;
case AGVNavigationCore.Models.StationType.Clearner:
PUB.XBE.StepMC = Device.eDocStep.ReadyForEnter;
break;
case AGVNavigationCore.Models.StationType.UnLoader:
PUB.XBE.StepMC = Device.eDocStep.ReadyForEnter;
break;
default:
PUB.log.Add($"정의되지 않은 스테이션 입니다({target.StationType}) ");
break;
}
PUB._virtualAGV.Turn = AGVNavigationCore.Models.AGVTurn.None;
PUB.sm.SetNewRunStep(ERunStep.READY);
}
break;
case ERunStep.MARKSTOPB: //후진방향으로 마크스탑
case ERunStep.MARKSTOPF: //전진방향으로 마크스탑
//이동중이지 않다면 먼저 이동을 진행한다
var agvDir = PUB.sm.RunStep == ERunStep.MARKSTOPF ? arDev.Narumi.eRunOpt.Forward : arDev.Narumi.eRunOpt.Backward;
PUB.AGV.AGVMoveRun(agvDir);
//이동중이라면 마크스탑을 입력한다
PUB.AGV.AGVMoveStop("run-markstropb", arDev.Narumi.eStopOpt.MarkStop);
//마크스탑신호를 확인한다.(최대 5초)
//신호가 확인되지 않으면 오류로 정지한다
break;
case ERunStep.GOCHARGE: //충전위치로 이동
if (runStepisFirst)
{
VAR.TIME[eVarTime.ChargeTry] = DateTime.Now;
PUB.sm.ResetRunStepSeq();
PUB.log.Add("충전 명령 시작");
}
else if (_SM_RUN_CHARGE_GO(runStepisFirst, PUB.sm.GetRunSteptime))
{
PUB.Speak(Lang.);
PUB.sm.SetNewRunStep(ERunStep.CHARGECHECK);
return;
}
break;
case ERunStep.CHARGECHECK: //충전중
if (runStepisFirst)
{
VAR.TIME.Update(eVarTime.ChargeStart);
LastCommandTime = DateTime.Now;
}
else if (_SM_RUN_CHARGE_CHECK(runStepisFirst, PUB.sm.GetRunSteptime))
{
//충전상태가 활성화되었으므로 대기상태로 전환한다
PUB.sm.SetNewRunStep(ERunStep.READY);
PUB.log.AddAT("충전상태 확인 완료로 인해 대기 합니다");
}
break;
case ERunStep.CHARGEOFF:
if (runStepisFirst)
{
VAR.TIME.Update(eVarTime.ChargeEnd);
LastCommandTime = DateTime.Now;
}
else
{
//충전 상태가 OFF되어야 동작하게한다
if (_SM_RUN_CHARGE_GOFF(isFirst, stepTime) == true)
{
//충전상태가 활성화되었으므로 대기상태로 전환한다
PUB.sm.ClearRunStep();
//대기상태로 전환
PUB.sm.SetNewRunStep(ERunStep.READY);
PUB.log.AddAT("충전 해제로 대기상태로 전환 합니다");
}
}
break;
case ERunStep.CLEANER_IN: //클리너도킹
case ERunStep.UNLOADER_IN: //언로더도킹
case ERunStep.LOADER_IN: //로더도킹
if (_SM_RUN_ENTER(runStepisFirst, PUB.sm.GetRunSteptime))
{
PUB.Speak(Lang.);
//도킹완료상태를 업데이트한다.
PUB.XBE.StepMC = Device.eDocStep.EnterComplete;
//대기상태로 전환
PUB.sm.SetNewRunStep(ERunStep.READY);
return;
}
break;
case ERunStep.CLEANER_OUT: //클리너아웃
case ERunStep.UNLOADER_OUT: //언로더아웃
case ERunStep.LOADER_OUT: //로더아웃
if (_SM_RUN_EXIT(runStepisFirst, PUB.sm.GetRunSteptime))
{
PUB.Speak(Lang.);
//도킹완료상태를 업데이트한다.
PUB.XBE.StepMC = Device.eDocStep.ExitComplete;
//대기상태로 전환
PUB.sm.SetNewRunStep(ERunStep.READY);
return;
}
break;
case ERunStep.BUFFER_OUT: //버퍼아웃
if (_SM_RUN_BUFFER_OUT(runStepisFirst, PUB.sm.GetRunSteptime))
{
PUB.Speak(Lang.);
//도킹완료상태를 업데이트한다.
PUB.XBE.StepMC = Device.eDocStep.ExitComplete;
//대기상태로 전환
PUB.sm.SetNewRunStep(ERunStep.READY);
return;
}
else PUB.XBE.StepMC = Device.eDocStep.ExitIng;
break;
case ERunStep.BUFFER_IN: //버퍼도킹
if (_SM_RUN_BUFFER_IN(runStepisFirst, PUB.sm.GetRunSteptime))
{
PUB.Speak(Lang.);
//도킹완료상태를 업데이트한다.
PUB.XBE.StepMC = Device.eDocStep.EnterComplete;
//대기상태로 전환
PUB.sm.SetNewRunStep(ERunStep.READY);
return;
}
else PUB.XBE.StepMC = Device.eDocStep.EnterIng;
break;
}
}
}//cvass
}

View File

@@ -0,0 +1,286 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using Project.StateMachine;
using COMM;
using AR;
using System.Windows.Media.Animation;
using System.Net.Security;
namespace Project
{
public partial class fMain
{
public Boolean _SM_RUN_BUFFER_IN(bool isFirst, TimeSpan seqtime)
{
var funcname = "_SM_RUN_BUFFER_IN";
var idx = 1;
//충전 상태가 OFF되어야 동작하게한다
if (_SM_RUN_CHARGE_GOFF(isFirst, seqtime) == false) return false;
//라이더멈춤이 설정되어있다면 음성으로 알려준다
if (CheckLiderStop() == false) return false;
/*
* 버퍼IN시퀀스
* 1. 회전이 진행되지 않았다면 회전을 진행한다.
* 2. LIFT DOWN
* 3. 후진-저속-마크다운 실행
*/
if (PUB.sm.RunStepSeq == idx++)
{
PUB.log.Add($"[{funcname}] 버퍼진입시작({PUB.NextWorkCmd}) Turn:{PUB._virtualAGV.Turn}");
PUB.Speak(Lang.);
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//모션 전후진 제어
if (PUB._virtualAGV.Turn != AGVNavigationCore.Models.AGVTurn.L90)
{
//동작중이면 동작을 멈춘다
if (PUB.AGV.system1.agv_run == true)
{
var ts = VAR.TIME.RUN(eVarTime.LastStopCommandTime);
if (ts.TotalSeconds > 3)
{
PUB.AGV.AGVMoveStop(funcname);
VAR.TIME.Update(eVarTime.LastStopCommandTime);
}
}
else PUB.sm.UpdateRunStepSeq(); //agv가 멈춰있으므로 턴을 진행해야 한다
}
else PUB.sm.UpdateRunStepSeq(); //이미완료된상태이므로 다음으로 진행한다.
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//이미 턴이 되어있는지 확인한다 (재진입 시 중복 실행 방지)
if (PUB._virtualAGV.Turn == AGVNavigationCore.Models.AGVTurn.L90)
{
PUB.log.Add($"[{funcname}] 이미 Left Turn 완료 상태입니다. 턴 명령을 건너뜁니다.");
PUB.sm.UpdateRunStepSeq();
}
else
{
//하드웨어 상태 확인
var turnState = PUB.AGV.TurnInformation?.State ?? arDev.eNarumiTurn.None;
if (turnState == arDev.eNarumiTurn.Left || turnState == arDev.eNarumiTurn.LeftIng)
{
//이미 좌회전 중이거나 완료된 하드웨어 상태
PUB.log.Add($"[{funcname}] 하드웨어 좌회전 상태 확인됨({turnState}). 명령을 건너뜁니다.");
PUB.sm.UpdateRunStepSeq();
}
else if (turnState == arDev.eNarumiTurn.Right || turnState == arDev.eNarumiTurn.RightIng)
{
//비정상 상태 (우회전 중?)
SetRunStepError(ENIGProtocol.AGVErrorCode.TURN_FAIL, $"[{funcname}] 턴 방향 불일치(Current:{turnState}). 우회전 상태에서 좌회전을 시도할 수 없습니다.");
}
else
{
//정상 (None) -> 턴 명령 실행
PUB.AGV.AGVMoveLeft180Turn();
PUB.log.Add("AGV Left Turn");
VAR.TIME.Update(eVarTime.LastTurnCommandTime);
PUB.sm.UpdateRunStepSeq();
}
}
PUB._mapCanvas.SetAlertMessage($"턴 진행 중");
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//이미 완료된 상태라면 대기 과정을 건너뛴다.
if (PUB._virtualAGV.Turn == AGVNavigationCore.Models.AGVTurn.L90)
{
PUB.sm.UpdateRunStepSeq();
return false;
}
//왼쪽턴이 완료되지 않은경우
if (PUB.AGV.TurnInformation.State != arDev.eNarumiTurn.Left)
{
//움직임 확인을 위해 3초간은 검증을 유예한다
if (PUB.AGV.TurnInformation.Runtime.TotalSeconds < 3) return false;
//턴 이동 상태가 확인되어야 한다.
var overtime = 30;
if (PUB.AGV.TurnInformation.Runtime.TotalSeconds > overtime)
{
//30초동안 AGV까 움직이지 않았다면 오류 처리한다.
SetRunStepError(ENIGProtocol.AGVErrorCode.TURN_FAIL, $"[{funcname}] {overtime}초이내 턴 감지 안됨");
return false;
}
else PUB._mapCanvas.SetAlertMessage($"턴 진행 중({PUB.AGV.TurnInformation.Runtime.TotalSeconds:N0}/{overtime})");
return false;
}
PUB._virtualAGV.Turn = AGVNavigationCore.Models.AGVTurn.L90; //턴완료
PUB.log.Add($"[{funcname}] Turn(left) 완료");
PUB.sm.UpdateRunStepSeq(); //이미완료된상태이므로 다음으로 진행한다.
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//버퍼에들어갈때에는 가져다 놓을때도 가지러 갈때에도 리프트는 내려서 들어간다
var liftCmd = arDev.Narumi.LiftCommand.DN;
PUB.AGV.LiftControl(liftCmd);
PUB.log.Add($"[{funcname}] 리프트를 내립니다");
VAR.TIME.Update(eVarTime.LastTurnCommandTime);
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//리프트 센서 확인
if (PUB.AGV.signal1.lift_down == false)
{
if (seqtime.TotalSeconds > 20)
{
PUB.log.AddAT($"[{funcname}] 리프트가 내려가지 않아 1회 재시도 합니다");
PUB.AGV.LiftControl(arDev.Narumi.LiftCommand.DN);
//재시도를 했으니 다음으로 진행하게한다
}
else
{
PUB._mapCanvas.SetAlertMessage($"리프트 하강 확인 중({seqtime.TotalSeconds:N0}/20)");
return false;
}
}
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//리프트 센서 확인
if (PUB.AGV.signal1.lift_down == false)
{
if (seqtime.TotalSeconds > 20)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.LIFT_ERROR, $"[{funcname}] 리프트가 내려가지 않습니다");
}
else PUB._mapCanvas.SetAlertMessage($"리프트 하강 확인 중({seqtime.TotalSeconds:N0}/20)");
return false;
}
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//저속이동 (후진 진입)
// [Smart Restart] 재시작 시 안전 검사
// 이미 턴을 완료했고(L90), 현재 마크 센서가 감지된다면(ON),
// 이미 목적지(Mark 2)에 도착한 것으로 간주하여 후진을 생략한다.
if (PUB._virtualAGV.Turn == AGVNavigationCore.Models.AGVTurn.L90 && PUB.AGV.signal1.mark_sensor == true)
{
PUB.log.Add($"[{funcname}] 이미 목적지 도착 확인됨(Turn:L90, Sensor:ON). 후진 이동을 생략합니다.");
PUB.sm.UpdateRunStepSeq();
return false;
}
var ret = PUB.AGV.AGVMoveSet(new arDev.Narumi.BunkiData
{
Bunki = arDev.Narumi.eBunki.Strate,
Direction = arDev.Narumi.eMoveDir.Backward,
PBSSensor = 0,
Speed = arDev.Narumi.eMoveSpd.Low,
});
//명령이 실패되었다면 재시도를 한다
if (ret != arDev.eNarumiCommandResult.Success)
{
if (ret >= arDev.eNarumiCommandResult.Error)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_SPEED_SET_FAIL);
}
return false;
}
//후진이동을한다
PUB._mapCanvas.SetAlertMessage($"도킹을 위해 후진 이동 시작");
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Backward);
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//이동확인을 한다.
if(PUB.AGV.system1.agv_run == false)
{
if(seqtime.TotalSeconds > 3)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_RUN_FAIL);
}
return false;
}
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//마크스탑으로 이동
PUB.AGV.AGVMoveStop(funcname, arDev.Narumi.eStopOpt.MarkStop);
PUB._mapCanvas.SetAlertMessage($"도킹을 위해 후진 이동 시작");
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//마크스탑신호가 3초이내로 들어와야 한다
if (PUB.AGV.data.Speed != 'S')
{
if (seqtime.TotalSeconds > 3)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.MARK_TIMEOUT);
return false;
}
}
VAR.TIME.Update(eVarTime.LastTurnCommandTime);
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//AGV가 멈출때까지 기다린다.
if (PUB.AGV.system1.agv_run == true)
{
var ts = VAR.TIME.RUN(eVarTime.LastTurnCommandTime);
if (ts.TotalSeconds > 10)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_STOP_FAIL);
return false;
}
return false;
}
VAR.TIME.Update(eVarTime.LastTurnCommandTime);
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
if (seqtime.TotalSeconds < 2) return false;
PUB.log.Add($"[{funcname}] 작업({PUB.NextWorkCmd}) 완료. 대기 상태로 전환 (퇴출 명령 대기)");
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//완료되었다.
PUB.log.Add($"[{funcname}] 버퍼 진입 및 작업 완료");
PUB.sm.UpdateRunStepSeq();
return false;
}
// 작업을 마치고 설비 안에 멈춰있는 상태.
// ACS가 이 상태를 확인하고 NextWorkCmd로 퇴출(Out) 명령을 보내야 함.
PUB.AddEEDB($"[{funcname}] 버퍼작업완료({PUB.Result.TargetPos})");
return true;
}
}
}

View File

@@ -0,0 +1,251 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using Project.StateMachine;
using COMM;
using AR;
namespace Project
{
public partial class fMain
{
public Boolean _SM_RUN_BUFFER_OUT(bool isFirst, TimeSpan seqtime)
{
var funcname = "_SM_RUN_BUFFER_IN";
var idx = 1;
//충전 상태가 OFF되어야 동작하게한다
if (_SM_RUN_CHARGE_GOFF(isFirst, seqtime) == false) return false;
//라이더멈춤이 설정되어있다면 음성으로 알려준다
if (CheckLiderStop() == false) return false;
/*
* 버퍼 OUT 시퀀스
* 1-1. PickOn 라면 리프트를 Up 한다
* 1-2. PickOff 라면 리프트를 Down 한다
* 2.전진-저속-마크다운
* 3.Turn-Right-180
*/
if (PUB.sm.RunStepSeq == idx++)
{
PUB.log.Add($"[{funcname}] 버퍼진출시작({PUB.NextWorkCmd}) Turn:{PUB._virtualAGV.Turn}");
PUB.Speak(Lang.);
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
arDev.Narumi.LiftCommand lift = PUB.NextWorkCmd == ENIGProtocol.AGVCommandHE.PickOnExit ? arDev.Narumi.LiftCommand.UP : arDev.Narumi.LiftCommand.DN;
PUB.log.Add($"[{funcname}] 리프트제어 {lift}");
PUB.AGV.LiftControl(lift);
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//리프트 센서 확인
var checksensor = PUB.NextWorkCmd == ENIGProtocol.AGVCommandHE.PickOnExit ? PUB.AGV.signal1.lift_up : PUB.AGV.signal1.lift_down;
if (checksensor == false)
{
if (seqtime.TotalSeconds > 20)
{
PUB.log.AddAT($"[{funcname}] 리프트가 완료되지 않아 1회 재시도 합니다");
arDev.Narumi.LiftCommand lift = PUB.NextWorkCmd == ENIGProtocol.AGVCommandHE.PickOnExit ? arDev.Narumi.LiftCommand.UP : arDev.Narumi.LiftCommand.DN;
PUB.AGV.LiftControl(lift);
}
else return false;
}
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//리프트 센서 확인
var checksensor = PUB.NextWorkCmd == ENIGProtocol.AGVCommandHE.PickOnExit ? PUB.AGV.signal1.lift_up : PUB.AGV.signal1.lift_down;
if (checksensor == false)
{
if (seqtime.TotalSeconds > 20)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.LIFT_ERROR, $"[{funcname}] 리프트가 동작하지 않습니다");
}
return false;
}
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//빈 상태로 아웃해야한다.
var ret = PUB.AGV.AGVMoveSet(new arDev.Narumi.BunkiData
{
Bunki = arDev.Narumi.eBunki.Strate,
Direction = arDev.Narumi.eMoveDir.Forward,
PBSSensor = 0,
Speed = arDev.Narumi.eMoveSpd.Low,
});
//명령이 실패되었다면 재시도를 한다
if (ret != arDev.eNarumiCommandResult.Success)
{
if (ret >= arDev.eNarumiCommandResult.Error)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_SPEED_SET_FAIL);
}
return false;
}
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//전진이동
PUB.AGV.AGVMoveRun(arDev.Narumi.eRunOpt.Forward);
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//AGV구동을 확인하고 마크스탑을 설정한다.
if (PUB.AGV.system1.agv_run == false)
{
if (seqtime.TotalSeconds > 3)
{
//구동이확인되지 않으면 오류처리를 한다.
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_RUN_FAIL);
}
return false;
}
//마크스탑설정
PUB.AGV.AGVMoveStop(funcname, arDev.Narumi.eStopOpt.MarkStop);
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//마크스탑신호가 3초이내로 들어와야 한다
if (PUB.AGV.data.Speed != 'S')
{
if (seqtime.TotalSeconds > 3)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.MARK_TIMEOUT);
}
return false;
}
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//AGV가 멈출때까지 기다린다.
if (PUB.AGV.system1.agv_run == true)
{
if (seqtime.TotalSeconds > 15)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.AGV_STOP_FAIL);
}
return false;
}
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//우측으로 180도 턴
//이미 턴이 되어있는지 확인한다 (재진입 시 중복 실행 방지)
if (PUB._virtualAGV.Turn == AGVNavigationCore.Models.AGVTurn.R90)
{
PUB.log.Add($"[{funcname}] 이미 Right Turn 완료 상태입니다. 턴 명령을 건너뜁니다.");
PUB.sm.UpdateRunStepSeq();
}
else
{
//하드웨어 상태 확인
var turnState = PUB.AGV.TurnInformation?.State ?? arDev.eNarumiTurn.None;
if (turnState == arDev.eNarumiTurn.Right || turnState == arDev.eNarumiTurn.RightIng)
{
//이미 우회전 중이거나 완료된 하드웨어 상태
PUB.log.Add($"[{funcname}] 하드웨어 우회전 상태 확인됨({turnState}). 명령을 건너뜁니다.");
PUB.sm.UpdateRunStepSeq();
}
else if (turnState == arDev.eNarumiTurn.Left || turnState == arDev.eNarumiTurn.LeftIng)
{
//비정상 상태 (좌회전 중?)
SetRunStepError(ENIGProtocol.AGVErrorCode.TURN_FAIL, $"[{funcname}] 턴 방향 불일치(Current:{turnState}). 좌회전 상태에서 우회전을 시도할 수 없습니다.");
}
else
{
//정상 (None) -> 턴 명령 실행
PUB.AGV.AGVMoveRight180Turn();
PUB.sm.UpdateRunStepSeq();
}
}
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//이동확인
if (PUB.AGV.system1.agv_run == false)
{
if (seqtime.TotalSeconds > 3)
{
//만약 이미 완료된 상태라서 건너뛰었다면 run이 안될 수 있다.
//하지만 위에서 건너뜀 -> UpdateRunStepSeq -> 바로 여기로 옴.
//건너뛴 경우(Turn == R90), Run 확인을 할 필요가 없으므로...
//로직 보완: 턴 상태가 이미 완료라면 이동확인도 스킵해야 함?
//아니면 위 단계에서 완료 상태면 '다음 다음' 단계로 점프?
//간단하게: Turn이 R90이면 그냥 통과시킴.
if (PUB._virtualAGV.Turn == AGVNavigationCore.Models.AGVTurn.R90)
{
//이미 완료된 상태이므로 이동 확인 패스
PUB.sm.UpdateRunStepSeq();
return false;
}
SetRunStepError(ENIGProtocol.AGVErrorCode.TURN_FAIL);
}
return false;
}
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//멈춤확인
if (PUB.AGV.system1.agv_run == true)
{
if (seqtime.TotalSeconds > 25)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.TURN_FAIL);
}
return false;
}
//턴 완료 상태 업데이트
if (PUB._virtualAGV.Turn != AGVNavigationCore.Models.AGVTurn.R90)
{
PUB._virtualAGV.Turn = AGVNavigationCore.Models.AGVTurn.R90;
PUB.log.Add($"[{funcname}] Turn State Updated to R90");
}
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
PUB.log.Add("BufferOut Complete");
PUB.sm.UpdateRunStepSeq();
return false;
}
PUB.AddEEDB($"bufferout 완료({PUB.Result.TargetPos})");
return true;
}
}
}

View File

@@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using COMM;
using AR;
using Project.StateMachine;
namespace Project
{
public partial class fMain
{
public Boolean _SM_RUN_CHARGE_CHECK(bool isFirst, TimeSpan stepTime)
{
//충전상태체크를 확인합니다
//10초안에 충전 플래그가 활성화되지 않으면 QC상태로 이동한다
if (PUB.AGV.system1.Battery_charging == false || VAR.BOOL[eVarBool.FLAG_CHARGEONA] == false)
{
if (PUB.AGV.error.Charger_pos_error)
{
PUB.Speak(Lang., true);
PUB.sm.ClearRunStep();
PUB.sm.SetNewRunStep(ERunStep.CHARGEOFF);
PUB.sm.SetNewStep(eSMStep.RUN);
}
else if (PUB.AGV.error.Charger_run_error)
{
PUB.Speak(Lang., true);
PUB.sm.ClearRunStep();
PUB.sm.SetNewRunStep(ERunStep.CHARGEOFF);
PUB.sm.SetNewStep(eSMStep.RUN);
}
else
{
var tsCmd = DateTime.Now - LastCommandTime;
if (tsCmd.TotalSeconds >= 30)
{
PUB.log.AddE( Lang.);
PUB.AGV.AGVCharge(PUB.setting.ChargerID, false);
PUB.sm.ClearRunStep();
PUB.sm.SetNewRunStep(ERunStep.CHARGEOFF);
PUB.sm.SetNewStep(eSMStep.RUN);
}
else
{
PUB.Result.result_message = string.Format("충전기 활성화 수신 확인 중({0:N1}/{1})", tsCmd.TotalSeconds, 30);
PUB.Result.result_progressmax = 15;
PUB.Result.result_progressvalue = tsCmd.TotalSeconds;
}
}
return false;
}
else return true;
}
}
}

View File

@@ -0,0 +1,128 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using Project.StateMachine;
using COMM;
using AR;
namespace Project
{
public partial class fMain
{
DateTime tm_gocharge_command = DateTime.Now;
public Boolean _SM_RUN_CHARGE_GO(bool isFirst, TimeSpan stepTime)
{
var funcname = "GOCHARGE";
if (runStepisFirst)
{
//홈을 찾도록 항상 위치를 지워버리자
PUB.Result.CurrentPos = ePosition.NONE;
}
//HW 연결오류
if (PUB.AGV.IsOpen == false)
{
PUB.Result.SetResultMessage(eResult.Hardware, eECode.AGVCONN, eNextStep.ERROR);
return false;
}
//이미 충전중이라면 바로 완료 처리한다 (사용자 요청)
if (VAR.BOOL[eVarBool.FLAG_CHARGEONA] == true || PUB.AGV.system1.Battery_charging == true ||
VAR.BOOL[eVarBool.FLAG_CHARGEONM] == true)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.ALREADY_CHARGE);
return false;
}
//충전 상태가 OFF되어야 동작하게한다
if (_SM_RUN_CHARGE_GOFF(isFirst, stepTime) == false)
return false;
//라이더멈춤이 설정되어있다면 음성으로 알려준다 200409
if (PUB.AGV.system1.stop_by_front_detect == true)
{
var tsSpeak = DateTime.Now - LastSpeakTime;
if (tsSpeak.TotalSeconds >= PUB.setting.alarmSoundTerm)
{
PUB.Speak(Lang.);
LastSpeakTime = DateTime.Now;
}
return false;
}
var idx = 1;
if (PUB.sm.RunStepSeq == idx++)
{
var targetnode = PUB.FindByRFID(PUB.setting.NodeMAP_RFID_Charger);
if (targetnode == null)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.NOTSET_CHARGEPOINT);
return false;
}
//현재위치가 충전기위치이고 마크센서가 감지되었다면 충전기위치로 인지하고
//그렇지 못하면 충전위치가 아니라는 오류를 발생한다
var curnode = PUB._virtualAGV.CurrentNode;
if (PUB.AGV.signal1.mark_sensor == false || curnode.Id != targetnode.Id)
{
SetRunStepError(ENIGProtocol.AGVErrorCode.NO_CHARGEPOINT, $"충전기위치가 아니므로 충전을 시작할 수 없습니다(현재위치:{curnode.RfidId})");
return false;
}
PUB.sm.UpdateRunStepSeq();
return false;
}
else if (PUB.sm.RunStepSeq == idx++)
{
//충전시작 명령을 전송한다
PUB.log.Add($"충전:충전명령전송");
PUB.Speak(Lang.);
PUB.AGV.AGVCharge(PUB.setting.ChargerID, true);
VAR.BOOL[eVarBool.WAIT_CHARGEACK] = true;
LastCommandTime = DateTime.Now;
VAR.BYTE[eVarByte.CHARGE_CMDCNT] = 0;
PUB.sm.UpdateRunStepSeq();
return false;
}
//충전시작명령의 ACK를 체크합니다
else if (PUB.sm.RunStepSeq == idx++)
{
//충전시작 명령을 전송한다
if (PUB.AGV.ACKData.Equals("CBT"))
{
PUB.log.Add($"충전명령 회신 확인");
PUB.sm.UpdateRunStepSeq();
}
else
{
var ts = DateTime.Now - LastCommandTime;
if (ts.TotalSeconds > 3)
{
if (VAR.BYTE[eVarByte.CHARGE_CMDCNT] > 5)
{
PUB.counter.CountChargeE += 1;
PUB.counter.Save();
VAR.BYTE[eVarByte.CHARGE_CMDCNT] = 0;
SetRunStepError(ENIGProtocol.AGVErrorCode.CHARGE_RETRY_OVER);
return false;
}
else
{
PUB.logagv.Add($"충전시작명령 재전송");
VAR.BYTE.Add(eVarByte.CHARGE_CMDCNT, 1);
PUB.AGV.AGVCharge(PUB.setting.ChargerID, true);
LastCommandTime = DateTime.Now;
}
}
}
return false;
}
return true;
}
}
}

Some files were not shown because too many files have changed in this diff Show More