파일정리
584
HMI/Project/AGV4.csproj
Normal 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
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
926
HMI/Project/Class/CParser.cs
Normal 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 "";
|
||||
// }
|
||||
|
||||
// }
|
||||
//}
|
||||
|
||||
201
HMI/Project/Class/CResult.cs
Normal 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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
466
HMI/Project/Class/EEMStatus.cs
Normal 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
|
||||
*/
|
||||
107
HMI/Project/Class/EnumData.cs
Normal 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
@@ -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
@@ -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
36
HMI/Project/CtlPos.Designer.cs
generated
Normal 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
@@ -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
11
HMI/Project/DataSet1.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
namespace Project
|
||||
{
|
||||
|
||||
|
||||
public partial class DataSet1
|
||||
{
|
||||
partial class ModelDataTable
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
9
HMI/Project/DataSet1.xsc
Normal 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
@@ -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
@@ -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
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
39
HMI/Project/Device/BMSInformationEventArgs.cs
Normal 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()));
|
||||
}
|
||||
}
|
||||
}
|
||||
607
HMI/Project/Device/BMSSerialComm.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
37
HMI/Project/Device/CFlag.cs
Normal 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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
427
HMI/Project/Device/Socket.cs
Normal 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
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
39
HMI/Project/Dialog/fCounter.cs
Normal 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)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
120
HMI/Project/Dialog/fCounter.resx
Normal 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>
|
||||
127
HMI/Project/Dialog/fErrorException.Designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
39
HMI/Project/Dialog/fErrorException.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
163
HMI/Project/Dialog/fErrorException.resx
Normal 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
@@ -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;
|
||||
}
|
||||
}
|
||||
170
HMI/Project/Dialog/fJobSelect.cs
Normal 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();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
123
HMI/Project/Dialog/fJobSelect.resx
Normal 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
@@ -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;
|
||||
}
|
||||
}
|
||||
85
HMI/Project/Dialog/fLog.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
120
HMI/Project/Dialog/fLog.resx
Normal 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
@@ -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;
|
||||
}
|
||||
}
|
||||
74
HMI/Project/Dialog/fPassword.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
160
HMI/Project/Dialog/fPassword.resx
Normal 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>
|
||||
46
HMI/Project/Dialog/fStateMachineDebug.Designer.cs
generated
Normal 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
|
||||
}
|
||||
}
|
||||
237
HMI/Project/Dialog/fStateMachineDebug.cs
Normal 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
@@ -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;
|
||||
}
|
||||
}
|
||||
166
HMI/Project/Dialog/fSystem.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
120
HMI/Project/Dialog/fSystem.resx
Normal 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
@@ -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;
|
||||
}
|
||||
}
|
||||
19
HMI/Project/Dialog/fTouchKey.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
120
HMI/Project/Dialog/fTouchKey.resx
Normal 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>
|
||||
147
HMI/Project/Dialog/fTouchKeyFull.Designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
99
HMI/Project/Dialog/fTouchKeyFull.cs
Normal 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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
120
HMI/Project/Dialog/fTouchKeyFull.resx
Normal 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>
|
||||
835
HMI/Project/Dialog/fTouchNumDot.Designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
85
HMI/Project/Dialog/fTouchNumDot.cs
Normal 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());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
120
HMI/Project/Dialog/fTouchNumDot.resx
Normal 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
@@ -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;
|
||||
}
|
||||
}
|
||||
247
HMI/Project/Dialog/fUpdateForm.cs
Normal 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();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
123
HMI/Project/Dialog/fUpdateForm.resx
Normal 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
@@ -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;
|
||||
}
|
||||
}
|
||||
128
HMI/Project/Dialog/fVolume.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
120
HMI/Project/Dialog/fVolume.resx
Normal 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>
|
||||
239
HMI/Project/Dialog/fXbeeSetting.Designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
193
HMI/Project/Dialog/fXbeeSetting.cs
Normal 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;
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
123
HMI/Project/Dialog/fXbeeSetting.resx
Normal 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>
|
||||
418
HMI/Project/Manager/DataBaseManager.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
37
HMI/Project/MessageWindow/CMessageData.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
164
HMI/Project/MessageWindow/MessageWindow.cs
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
676
HMI/Project/MessageWindow/fMessageWindow.Designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
199
HMI/Project/MessageWindow/fMessageWindow.cs
Normal 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();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
123
HMI/Project/MessageWindow/fMessageWindow.resx
Normal 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>
|
||||
472
HMI/Project/MessageWindow/fMsgWindow.Designer.cs
generated
Normal 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;
|
||||
}
|
||||
}
|
||||
156
HMI/Project/MessageWindow/fMsgWindow.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
123
HMI/Project/MessageWindow/fMsgWindow.resx
Normal 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>
|
||||
224
HMI/Project/MethodExtentions.cs
Normal 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
@@ -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
@@ -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
@@ -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
|
||||
36
HMI/Project/Properties/AssemblyInfo.cs
Normal 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")]
|
||||
173
HMI/Project/Properties/Resources.Designer.cs
generated
Normal 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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
154
HMI/Project/Properties/Resources.resx
Normal 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>
|
||||
50
HMI/Project/Properties/Settings.Designer.cs
generated
Normal 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"]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
19
HMI/Project/Properties/Settings.settings
Normal 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)"><?xml version="1.0" encoding="utf-16"?>
|
||||
<SerializableConnectionString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<ConnectionString>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</ConnectionString>
|
||||
<ProviderName>System.Data.SqlClient</ProviderName>
|
||||
</SerializableConnectionString></DesignTimeValue>
|
||||
<Value Profile="(Default)">Data Source=K4FASQL.kr.ds.amkor.com,50150;Initial Catalog=EE;Persist Security Info=True;User ID=eeadm;Password=uJnU8a8q&DJ+ug-D;Encrypt=False;TrustServerCertificate=True</Value>
|
||||
</Setting>
|
||||
</Settings>
|
||||
</SettingsFile>
|
||||
8
HMI/Project/Properties/launchSettings.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"profiles": {
|
||||
"AGV4": {
|
||||
"commandName": "Project",
|
||||
"workingDirectory": "D:\\Amkor\\AGV4"
|
||||
}
|
||||
}
|
||||
}
|
||||
20
HMI/Project/ReadMe.txt
Normal 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 입력
|
||||
BIN
HMI/Project/Resources/ChargeH.png
Normal file
|
After Width: | Height: | Size: 788 B |
BIN
HMI/Project/Resources/icons8-automatic-gearbox-warning-80.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
BIN
HMI/Project/Resources/icons8-charge-empty-battery-96.png
Normal file
|
After Width: | Height: | Size: 781 B |
BIN
HMI/Project/Resources/icons8-charged-battery-80.png
Normal file
|
After Width: | Height: | Size: 309 B |
BIN
HMI/Project/Resources/icons8-checked-radio-button-48.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
HMI/Project/Resources/icons8-exercise-40.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
HMI/Project/Resources/icons8-new-40.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
HMI/Project/Resources/icons8-no-running-40.png
Normal file
|
After Width: | Height: | Size: 1.5 KiB |
BIN
HMI/Project/Resources/icons8-running-40.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
HMI/Project/Resources/icons8-save-40.png
Normal file
|
After Width: | Height: | Size: 441 B |
BIN
HMI/Project/Resources/icons8-unavailable-40.png
Normal file
|
After Width: | Height: | Size: 986 B |
145
HMI/Project/StateMachine/AGVPosition.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
107
HMI/Project/StateMachine/AGVProtocolHandler.cs
Normal 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}";
|
||||
}
|
||||
}
|
||||
}
|
||||
159
HMI/Project/StateMachine/AGVStateManager.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
29
HMI/Project/StateMachine/DisplayTextHandler.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
296
HMI/Project/StateMachine/Step/_SM_RUN.cs
Normal 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
|
||||
}
|
||||
286
HMI/Project/StateMachine/Step/_SM_RUN_BUFFER_IN.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
251
HMI/Project/StateMachine/Step/_SM_RUN_BUFFER_OUT.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
59
HMI/Project/StateMachine/Step/_SM_RUN_CHARGE_CHECK.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
128
HMI/Project/StateMachine/Step/_SM_RUN_CHARGE_GO.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||