Compare commits
15 Commits
cbb7d14753
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1a91a58f00 | ||
| 7e3f87542c | |||
| f480b508b7 | |||
| bae298ca00 | |||
| ffa0cb9bf9 | |||
|
|
9958dd0cf8 | ||
|
|
00683decda | ||
|
|
891b394854 | ||
|
|
bdd929a984 | ||
|
|
e46b1c709b | ||
|
|
229ec8be66 | ||
|
|
b189af27c3 | ||
|
|
d4c6715811 | ||
|
|
c1ba388b5a | ||
|
|
6e777e9599 |
6
Sub/arMasterK/.gitignore
vendored
Normal file
6
Sub/arMasterK/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
################################################################################
|
||||
# 이 .gitignore 파일은 Microsoft(R) Visual Studio에서 자동으로 만들어졌습니다.
|
||||
################################################################################
|
||||
|
||||
/Project/bin/Debug
|
||||
/Project/.vs
|
||||
61
Sub/arMasterK/Demo/Demo.csproj
Normal file
61
Sub/arMasterK/Demo/Demo.csproj
Normal file
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" 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>{D92246F1-981A-452C-9E0A-09CD9F68B102}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>Demo</RootNamespace>
|
||||
<AssemblyName>Demo</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Project\arMasterK.csproj">
|
||||
<Project>{e0133085-e5f9-4275-9db8-f8f20ef8561f}</Project>
|
||||
<Name>arMasterK</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
86
Sub/arMasterK/Demo/Program.cs
Normal file
86
Sub/arMasterK/Demo/Program.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Demo
|
||||
{
|
||||
class Program
|
||||
{
|
||||
static arDev.MasterK dev;
|
||||
static void Main(string[] args)
|
||||
{
|
||||
dev = new arDev.MasterK();
|
||||
dev.Message += dev_Message;
|
||||
if (!dev.Init("COM8", 9600))
|
||||
{
|
||||
Console.WriteLine("init error");
|
||||
Console.ReadKey();
|
||||
return;
|
||||
}
|
||||
|
||||
System.Text.StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine("=====================");
|
||||
sb.AppendLine("Master K Protocol Test");
|
||||
sb.AppendLine("Version : 0.1");
|
||||
sb.AppendLine("Author : tindevil@nate.com");
|
||||
sb.AppendLine("=====================");
|
||||
sb.AppendLine("1. Port 40 - ON");
|
||||
sb.AppendLine("2. Port 40 - OFF");
|
||||
sb.AppendLine("3. Port 41 - ON");
|
||||
sb.AppendLine("4. Port 41 - OFF");
|
||||
sb.AppendLine("5. Read Port");
|
||||
sb.AppendLine("9. Exit");
|
||||
sb.AppendLine("=====================");
|
||||
sb.Append("Select Menu = ");
|
||||
|
||||
while (true)
|
||||
{
|
||||
Console.Write(sb.ToString());
|
||||
var key = Console.ReadKey(true);
|
||||
|
||||
//program end
|
||||
if (key.Key == ConsoleKey.D9) break;
|
||||
|
||||
switch (key.Key)
|
||||
{
|
||||
case ConsoleKey.D1:
|
||||
dev.SetOutput(0, true);
|
||||
break;
|
||||
case ConsoleKey.D2:
|
||||
dev.SetOutput(0, false);
|
||||
break;
|
||||
case ConsoleKey.D3:
|
||||
dev.SetOutput(1, true);
|
||||
break;
|
||||
case ConsoleKey.D4:
|
||||
dev.SetOutput(1, false);
|
||||
break;
|
||||
case ConsoleKey.D5:
|
||||
dev.Read_RelayPort();
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("========================");
|
||||
Console.WriteLine("DI:" + dev.GetInputState());
|
||||
Console.WriteLine("DO:" + dev.GetOutputState());
|
||||
Console.WriteLine("========================");
|
||||
Console.WriteLine("Press any key");
|
||||
Console.ReadKey();
|
||||
break;
|
||||
default:
|
||||
Console.WriteLine("unknown menu number");
|
||||
break;
|
||||
}
|
||||
Console.Clear();
|
||||
}
|
||||
|
||||
Console.WriteLine("Press any key : Exit");
|
||||
Console.ReadKey(true);
|
||||
}
|
||||
|
||||
static void dev_Message(object sender, arDev.MasterK.MessageEventArgs e)
|
||||
{
|
||||
Console.WriteLine((e.IsError ? "[ERR]" : "") + e.Message);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
36
Sub/arMasterK/Demo/Properties/AssemblyInfo.cs
Normal file
36
Sub/arMasterK/Demo/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// 어셈블리의 일반 정보는 다음 특성 집합을 통해 제어됩니다.
|
||||
// 어셈블리와 관련된 정보를 수정하려면
|
||||
// 이 특성 값을 변경하십시오.
|
||||
[assembly: AssemblyTitle("Demo")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("Demo")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
|
||||
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
|
||||
// 해당 형식에 대해 ComVisible 특성을 true로 설정하십시오.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
|
||||
[assembly: Guid("d649cb64-a01f-4f2b-99b2-a2797844f375")]
|
||||
|
||||
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
|
||||
//
|
||||
// 주 버전
|
||||
// 부 버전
|
||||
// 빌드 번호
|
||||
// 수정 버전
|
||||
//
|
||||
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로
|
||||
// 지정되도록 할 수 있습니다.
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
28
Sub/arMasterK/MasterK.sln
Normal file
28
Sub/arMasterK/MasterK.sln
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.40629.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "arMasterK", ".\Project\arMasterK.csproj", "{E0133085-E5F9-4275-9DB8-F8F20EF8561F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Demo", ".\Demo\Demo.csproj", "{D92246F1-981A-452C-9E0A-09CD9F68B102}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{E0133085-E5F9-4275-9DB8-F8F20EF8561F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E0133085-E5F9-4275-9DB8-F8F20EF8561F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E0133085-E5F9-4275-9DB8-F8F20EF8561F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E0133085-E5F9-4275-9DB8-F8F20EF8561F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D92246F1-981A-452C-9E0A-09CD9F68B102}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D92246F1-981A-452C-9E0A-09CD9F68B102}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D92246F1-981A-452C-9E0A-09CD9F68B102}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D92246F1-981A-452C-9E0A-09CD9F68B102}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
2
Sub/arMasterK/Project/.gitignore
vendored
Normal file
2
Sub/arMasterK/Project/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/MasterK.v12.suo
|
||||
/MasterK.sln
|
||||
236
Sub/arMasterK/Project/EnumAStruct.cs
Normal file
236
Sub/arMasterK/Project/EnumAStruct.cs
Normal file
@@ -0,0 +1,236 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace arDev
|
||||
{
|
||||
public partial class MasterK
|
||||
{
|
||||
|
||||
|
||||
[Description("")]
|
||||
public enum eMsgType
|
||||
{
|
||||
[Description("")]
|
||||
Rx = 0,
|
||||
[Description("")]
|
||||
Tx,
|
||||
RxRaw,
|
||||
}
|
||||
|
||||
[Description("Operation Code , 이 코드값으로 컨트롤 보드에 명령합니다.")]
|
||||
public enum eOpCode : byte
|
||||
{
|
||||
GET_IO_DATA = 0,
|
||||
RELAY_OUTPUT,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// digital input/output direction
|
||||
/// </summary>
|
||||
public enum eIOPINDIR : byte
|
||||
{
|
||||
[Description("Digital Input")]
|
||||
INPUT = 0,
|
||||
[Description("Digital Output")]
|
||||
OUTPUT = 1,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// error code list
|
||||
/// </summary>
|
||||
public enum eErrorCode : byte
|
||||
{
|
||||
[Description("포트가사용중입니다.")]
|
||||
PortBusy = 0,
|
||||
[Description("열려있지않습니다.")]
|
||||
NotOpen,
|
||||
[Description("쓰기오류")]
|
||||
WriteError,
|
||||
[Description("읽기오류")]
|
||||
ReadError,
|
||||
[Description("프레임오류")]
|
||||
FrameError,
|
||||
[Description("체크섬오류")]
|
||||
ChecksumError
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// message frame
|
||||
/// </summary>
|
||||
public struct sRecvMessage
|
||||
{
|
||||
/// <summary>
|
||||
/// 국번
|
||||
/// </summary>
|
||||
public string Device;
|
||||
|
||||
/// <summary>
|
||||
/// 명령어
|
||||
/// </summary>
|
||||
public char Command;
|
||||
|
||||
/// <summary>
|
||||
/// 명령어타입
|
||||
/// </summary>
|
||||
public string CmdType;
|
||||
|
||||
/// <summary>
|
||||
/// 블록수
|
||||
/// </summary>
|
||||
public int BlockCount;
|
||||
|
||||
/// <summary>
|
||||
/// 데이터갯수
|
||||
/// </summary>
|
||||
public int DataLen;
|
||||
|
||||
/// <summary>
|
||||
/// 데이터
|
||||
/// </summary>
|
||||
public string Data;
|
||||
|
||||
|
||||
public string FullString;
|
||||
|
||||
/// <summary>
|
||||
/// full message frame
|
||||
/// </summary>
|
||||
[Description("전체 메세지 영역")]
|
||||
public byte[] Buffer;
|
||||
|
||||
/// <summary>
|
||||
/// check byte (crc16)
|
||||
/// </summary>
|
||||
[Description("체크섬 2byte(CRC 16)")]
|
||||
public byte[] checksum;
|
||||
|
||||
/// <summary>
|
||||
/// checksum error
|
||||
/// </summary>
|
||||
[Description("체크섬에 오류가 있는지 확인합니다.(true일경우 오류)")]
|
||||
public Boolean isCSError;
|
||||
|
||||
[Description("기타메세지")]
|
||||
public string Message;
|
||||
|
||||
[Description("정보를 삭제합니다.")]
|
||||
public void Clear()
|
||||
{
|
||||
Message = "NOTSET";
|
||||
Data = null;
|
||||
Buffer = null;
|
||||
checksum = null;
|
||||
isCSError = false;
|
||||
BlockCount = 0;
|
||||
DataLen = 0;
|
||||
FullString = string.Empty;
|
||||
}
|
||||
|
||||
[Description("응답코드가 NAK인지확인합니다. NAK응답은 컨트롤러로부터 오류가 수신되었음을 의미합니다.")]
|
||||
public Boolean isNAK
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Buffer[0] == 0x15) return true;
|
||||
else return false;
|
||||
}
|
||||
}
|
||||
|
||||
[Description("오류가 있는지 체크합니다. 버퍼가 없거나 체크섬 오류 , DLC오류등을 체크 합니다.")]
|
||||
public Boolean isError
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Buffer == null || isCSError || BlockCount == 0 || isNAK) return true;
|
||||
else return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
public struct sSendMessage
|
||||
{
|
||||
/// <summary>
|
||||
/// 국번
|
||||
/// </summary>
|
||||
public string Device;
|
||||
|
||||
/// <summary>
|
||||
/// 명령어
|
||||
/// </summary>
|
||||
public char Command;
|
||||
|
||||
/// <summary>
|
||||
/// 명령어타입
|
||||
/// </summary>
|
||||
public string CmdType;
|
||||
|
||||
/// <summary>
|
||||
/// 변수길이
|
||||
/// </summary>
|
||||
public int DeviceLength;
|
||||
|
||||
public int NumberofBlock;
|
||||
|
||||
/// <summary>
|
||||
/// 변수명
|
||||
/// </summary>
|
||||
public string VarName;
|
||||
|
||||
/// <summary>
|
||||
/// 데이터갯수
|
||||
/// </summary>
|
||||
public int DataLen;
|
||||
public string Data;
|
||||
|
||||
/// <summary>
|
||||
/// full message frame
|
||||
/// </summary>
|
||||
[Description("전체 메세지 영역")]
|
||||
public byte[] Buffer;
|
||||
public string Strbuffer;
|
||||
|
||||
/// <summary>
|
||||
/// check byte (crc16)
|
||||
/// </summary>
|
||||
[Description("체크섬 2byte(CRC 16)")]
|
||||
public byte[] checksum;
|
||||
|
||||
/// <summary>
|
||||
/// checksum error
|
||||
/// </summary>
|
||||
[Description("체크섬에 오류가 있는지 확인합니다.(true일경우 오류)")]
|
||||
public Boolean isCSError;
|
||||
|
||||
[Description("기타메세지")]
|
||||
public string Message;
|
||||
|
||||
[Description("정보를 삭제합니다.")]
|
||||
public void Clear()
|
||||
{
|
||||
Data = string.Empty;
|
||||
Message = "NOTSET";
|
||||
Buffer = null;
|
||||
checksum = null;
|
||||
isCSError = false;
|
||||
DeviceLength = 0;
|
||||
NumberofBlock = 0;
|
||||
DataLen = 0;
|
||||
Strbuffer = string.Empty;
|
||||
}
|
||||
|
||||
[Description("오류가 있는지 체크합니다. 버퍼가 없거나 체크섬 오류 , DLC오류등을 체크 합니다.")]
|
||||
public Boolean isError
|
||||
{
|
||||
get
|
||||
{
|
||||
if (Buffer == null || isCSError || DeviceLength == 0) return true;
|
||||
else return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
131
Sub/arMasterK/Project/EventArgs.cs
Normal file
131
Sub/arMasterK/Project/EventArgs.cs
Normal file
@@ -0,0 +1,131 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace arDev
|
||||
{
|
||||
public partial class MasterK
|
||||
{
|
||||
public class DataEventArgs : EventArgs
|
||||
{
|
||||
private byte[] _buffer = null;
|
||||
|
||||
/// <summary>
|
||||
/// 바이트배열의 버퍼값
|
||||
/// </summary>
|
||||
public byte[] Value { get { return _buffer; } }
|
||||
|
||||
public eMsgType Direction { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 버퍼(바이트배열)의 데이터를 문자로 반환합니다.
|
||||
/// </summary>
|
||||
public string StrValue
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_buffer == null || _buffer.Length < 1) return string.Empty;
|
||||
return System.Text.Encoding.Default.GetString(_buffer);
|
||||
}
|
||||
}
|
||||
public DataEventArgs(eMsgType dir_, byte[] buffer)
|
||||
{
|
||||
_buffer = buffer;
|
||||
Direction = dir_;
|
||||
}
|
||||
}
|
||||
public class MessageEventArgs : EventArgs
|
||||
{
|
||||
protected Boolean _isError = false;
|
||||
public Boolean IsError { get { return _isError; } }
|
||||
protected string _message = string.Empty;
|
||||
public string Message { get { return _message; } }
|
||||
public MessageEventArgs(Boolean isError, string Message)
|
||||
{
|
||||
_isError = isError;
|
||||
_message = Message;
|
||||
}
|
||||
}
|
||||
public class FrameEventArgs : EventArgs
|
||||
{
|
||||
public eOpCode OpCode { get; set; }
|
||||
public FrameEventArgs(eOpCode opCode_)
|
||||
{
|
||||
OpCode = opCode_;
|
||||
}
|
||||
}
|
||||
public class IOValueEventArgs : EventArgs
|
||||
{
|
||||
protected eIOPINDIR _direction;
|
||||
protected int _arridx;
|
||||
protected Boolean _oldvalue;
|
||||
protected Boolean _newvalue;
|
||||
|
||||
public eIOPINDIR Direction { get { return _direction; } }
|
||||
public int ArrIDX { get { return _arridx; } }
|
||||
public Boolean OldValue { get { return _oldvalue; } }
|
||||
public Boolean NewValue { get { return _newvalue; } }
|
||||
|
||||
public IOValueEventArgs(eIOPINDIR dir, int arridx, Boolean oldvalue, Boolean newvalue)
|
||||
{
|
||||
_direction = dir;
|
||||
_arridx = arridx;
|
||||
_oldvalue = oldvalue;
|
||||
_newvalue = newvalue;
|
||||
}
|
||||
}
|
||||
public class AIValueEventArgs : EventArgs
|
||||
{
|
||||
public float[] Value { get; protected set; }
|
||||
|
||||
public AIValueEventArgs(float[] value_)
|
||||
{
|
||||
Value = value_;
|
||||
}
|
||||
}
|
||||
|
||||
#region "Events"
|
||||
|
||||
/// <summary>
|
||||
/// 일반적인 메세지 혹은 오류메세지 이벤트
|
||||
/// </summary>
|
||||
public event EventHandler<MessageEventArgs> Message;
|
||||
|
||||
/// <summary>
|
||||
/// 데이터메시이벤트 (Rx,Tx) 별로 구분됩니다.
|
||||
/// </summary>
|
||||
public event EventHandler<DataEventArgs> DataMessage;
|
||||
|
||||
/// <summary>
|
||||
/// 가공되어진 최종 메세지 형태값을 가지고 있습니다.
|
||||
/// </summary>
|
||||
public event EventHandler<FrameEventArgs> ReceiveFrame;
|
||||
|
||||
/// <summary>
|
||||
/// ReadProcess에의해서 감시되며 포트의 상태값이 바뀐다면 발생함
|
||||
/// </summary>
|
||||
public event EventHandler<IOValueEventArgs> IOValueChanged;
|
||||
|
||||
/// <summary>
|
||||
/// AI의 값을 이벤트로 발생합니다.발생주기는 AIInterval을 참고합니다.
|
||||
/// </summary>
|
||||
public event EventHandler<AIValueEventArgs> AIValueChanged;
|
||||
|
||||
/// <summary>
|
||||
/// 오류발생시 메세지가 발생함
|
||||
/// </summary>
|
||||
public event EventHandler<MessageEventArgs> IOErrorMessage;
|
||||
|
||||
/// <summary>
|
||||
/// anlog 관련한 오류 메세지
|
||||
/// </summary>
|
||||
/// <remarks>Analog Data Error Message</remarks>
|
||||
public event EventHandler<MessageEventArgs> AIErrorMessage;
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
13
Sub/arMasterK/Project/History.txt
Normal file
13
Sub/arMasterK/Project/History.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
181005 chi init 시 baudrate 를 기본값 19200 설정
|
||||
180802 chi init 시에 baudrate 도 입력하도록 함
|
||||
180625 chi TestVersion 0.1;
|
||||
RunMonitor 가 중복실행되지 않도록 수정
|
||||
makepacket 수정
|
||||
|
||||
00RSB06%PW00001
|
||||
00WSS0107%PX004001
|
||||
|
||||
[18-03-29 06:45:38] RAW: 06 30 30 52 53 42 30 31 30 32 30 30 30 30 03
|
||||
00RSB01020000
|
||||
|
||||
180329 Create
|
||||
686
Sub/arMasterK/Project/MasterK.cs
Normal file
686
Sub/arMasterK/Project/MasterK.cs
Normal file
@@ -0,0 +1,686 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.ComponentModel;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Design;
|
||||
using System.Reflection;
|
||||
using System.Runtime;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace arDev
|
||||
{
|
||||
public partial class MasterK : IDisposable
|
||||
{
|
||||
#region "Variable"
|
||||
|
||||
public bool bRunMonitor; //쓰레드작동시그널
|
||||
public Boolean bAIMonitor=false; //배경쓰레드에서 아날로그값을 모니터링 합니다.\
|
||||
public Boolean bDIOMonitor=true; //배경쓰레드에서 dIO를 모니터링 할것인가?
|
||||
public string errorMessage = string.Empty;
|
||||
|
||||
System.Diagnostics.Stopwatch aiMonWatch = new System.Diagnostics.Stopwatch();
|
||||
public long LoopDelay;
|
||||
|
||||
protected byte wSTX = 0x05;
|
||||
protected byte wETX = 0x04;
|
||||
protected byte rSTX = 0x06;
|
||||
protected byte rETX = 0x03;
|
||||
protected int interchar_delay;
|
||||
protected Boolean bSyncRecvOK = false;// 메세지를 수신할 경우 설정됩니다.
|
||||
protected Boolean _isInit = false;// 보드가 초기화가 되었는지 확인합니다.
|
||||
public Boolean disposed = false;// Dipose 되었는가?
|
||||
protected byte _CommandCode = 0x00;// recv command code
|
||||
|
||||
protected Boolean _bDlc = false;
|
||||
protected int _dlc = 0;
|
||||
protected Boolean _bStx = false; //stx를 찾앗는지?
|
||||
protected Boolean _bEtx = false; //etx를 찾앗는지?
|
||||
|
||||
protected Boolean[] _valueI; //입력접점
|
||||
protected Boolean[] _valueO; //출력접점
|
||||
protected Boolean[] OldvalueI;
|
||||
protected Boolean[] OldvalueO;
|
||||
|
||||
protected Thread thMonitor; //배경쓰레드(상태체크 및 이벤트 발생)
|
||||
protected ManualResetEvent _mre;
|
||||
protected string _mreowner = string.Empty;
|
||||
protected System.Diagnostics.Stopwatch wat = new System.Diagnostics.Stopwatch();
|
||||
protected System.IO.Ports.SerialPort _device;
|
||||
|
||||
public int DOCount { get; protected set; }
|
||||
public int DICount { get; protected set; }
|
||||
public double ThreadSpeed = 0;
|
||||
|
||||
public sRecvMessage LastRecvMessage;
|
||||
public sSendMessage lastSendMessage;
|
||||
public DateTime lastSendTime;
|
||||
public byte[] lastSendBuffer;
|
||||
|
||||
/// <summary>
|
||||
/// device index
|
||||
/// </summary>
|
||||
public byte IDX = 0;
|
||||
|
||||
#endregion
|
||||
|
||||
public MasterK()
|
||||
{
|
||||
//serial port
|
||||
_device = new System.IO.Ports.SerialPort();
|
||||
_device.BaudRate = 9600;
|
||||
_device.DtrEnable = false;
|
||||
_device.WriteTimeout = 2000;
|
||||
_device.ReadTimeout = 2000;
|
||||
_device.DiscardNull = true;
|
||||
|
||||
//autoreset events
|
||||
_mre = new System.Threading.ManualResetEvent(true);
|
||||
bRunMonitor = false;
|
||||
|
||||
LoopDelay = 150;
|
||||
|
||||
//모든ls산전은 논리적으로 64개가 지정되어있다.
|
||||
this.DICount = 64;
|
||||
this.DOCount = 64;
|
||||
|
||||
//변수초기화
|
||||
this._valueI = new bool[DICount];
|
||||
this._valueO = new bool[DOCount];
|
||||
this.OldvalueI = new bool[_valueI.Length];
|
||||
this.OldvalueO = new bool[_valueO.Length];
|
||||
|
||||
//초기값설정(인풋)
|
||||
for (int i = 0; i < _valueI.Length; i++)
|
||||
{
|
||||
this._valueI[i] = false;
|
||||
this.OldvalueI[i] = false;
|
||||
}
|
||||
|
||||
//초기값설정(아웃풋)
|
||||
for (int i = 0; i < _valueO.Length; i++)
|
||||
{
|
||||
this._valueO[i] = false;
|
||||
this.OldvalueO[i] = false;
|
||||
}
|
||||
}
|
||||
|
||||
~MasterK()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
if (_device.IsOpen)
|
||||
{
|
||||
if (_mre.WaitOne(3000))
|
||||
{
|
||||
_mre.Reset();
|
||||
_mreowner = "Close";
|
||||
_device.Close();
|
||||
_mre.Set();
|
||||
}
|
||||
else
|
||||
{
|
||||
RaiseMessage(true, "close error timeout");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 개체를 해제합니다.
|
||||
/// </summary>
|
||||
[Description("")]
|
||||
public virtual void Dispose()
|
||||
{
|
||||
Dispose(true);
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
// Protected implementation of Dispose pattern.
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (disposed)
|
||||
return;
|
||||
|
||||
if (disposing)
|
||||
{
|
||||
// Dispose managed resources.
|
||||
}
|
||||
|
||||
StopMonitor();
|
||||
|
||||
// Call the appropriate methods to clean up
|
||||
// unmanaged resources here.
|
||||
// If disposing is false,
|
||||
// only the following code is executed.
|
||||
|
||||
// Note disposing has been done.
|
||||
disposed = true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public string PortName
|
||||
{
|
||||
get
|
||||
{
|
||||
return _device.PortName;
|
||||
}
|
||||
set
|
||||
{
|
||||
_device.PortName = value;
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean Init(string port,int baud = 19200)
|
||||
{
|
||||
Close();
|
||||
|
||||
errorMessage = string.Empty;
|
||||
|
||||
_device.PortName = port;
|
||||
_device.BaudRate = baud;
|
||||
|
||||
try
|
||||
{
|
||||
_device.Open();
|
||||
_device.DiscardInBuffer();
|
||||
_device.DiscardOutBuffer();
|
||||
|
||||
_isInit = true;
|
||||
sw_ch = new System.Diagnostics.Stopwatch();
|
||||
interchar_delay = GetIntercharDelay();
|
||||
interframe_delay = GetInterframeDelay();
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_isInit = false;
|
||||
errorMessage = ex.Message;
|
||||
RaiseMessage(true, ex.Message);
|
||||
}
|
||||
return _isInit;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#region "Properties"
|
||||
|
||||
/// <summary>
|
||||
/// 입력핀 상태값을 확인합니다.
|
||||
/// </summary>
|
||||
/// <param name="arridx">0부터 시작하는 인덱스값</param>
|
||||
/// <returns></returns>
|
||||
[Description("")]
|
||||
public Boolean INPUT(int arridx)
|
||||
{
|
||||
if (arridx < 0 || arridx > DICount - 1)
|
||||
{
|
||||
if (IOErrorMessage != null)
|
||||
IOErrorMessage(this, new MessageEventArgs(true, "INPUT Command : ArrayIndex Error Value=" + arridx.ToString()));
|
||||
return false;
|
||||
}
|
||||
return this._valueI[arridx];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 입력핀 상태를 모두 반환합니다.
|
||||
/// </summary>
|
||||
[Description("")]
|
||||
public Boolean[] getInputArray
|
||||
{
|
||||
get
|
||||
{
|
||||
return (Boolean[])this._valueI.Clone();
|
||||
}
|
||||
}
|
||||
|
||||
public byte getInputValueToByte(int startindex)
|
||||
{
|
||||
System.Collections.BitArray ba = new System.Collections.BitArray(this._valueI);
|
||||
byte[] value = new byte[8];
|
||||
ba.CopyTo(value, startindex);
|
||||
return value[0];
|
||||
}
|
||||
public Int64 getInputValue
|
||||
{
|
||||
get
|
||||
{
|
||||
System.Collections.BitArray ba = new System.Collections.BitArray(this._valueI);
|
||||
byte[] value = new byte[8];
|
||||
ba.CopyTo(value, 0);
|
||||
return BitConverter.ToInt64(value, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 출력핀 상태를 모두 반환합니다.
|
||||
/// </summary>
|
||||
[Description("")]
|
||||
public Boolean[] getOutputArray
|
||||
{
|
||||
get
|
||||
{
|
||||
return (Boolean[])this._valueO.Clone();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 출력핀 상태 값을 확인합니다.
|
||||
/// </summary>
|
||||
/// <param name="arridx">0부터 시작하는 인덱스값</param>
|
||||
/// <returns></returns>
|
||||
[Description("")]
|
||||
public Boolean OUTPUT(int arridx)
|
||||
{
|
||||
// get { return (Boolean[])this._valueO.Clone(); }
|
||||
if (arridx < 0 || arridx > DOCount - 1)
|
||||
{
|
||||
if (IOErrorMessage != null)
|
||||
IOErrorMessage(this, new MessageEventArgs(true, "OUTPUT Command : ArrayIndex Error Value=" + arridx.ToString()));
|
||||
return false;
|
||||
}
|
||||
return this._valueO[arridx];
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// read digital input port state
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Description("")]
|
||||
public string GetInputState()
|
||||
{
|
||||
System.Text.StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < OldvalueI.Length; i++)
|
||||
sb.Append(OldvalueI[i] ? "1" : "0");
|
||||
return sb.ToString();
|
||||
}
|
||||
/// <summary>
|
||||
/// read digital output port state
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Description("")]
|
||||
public string GetOutputState()
|
||||
{
|
||||
System.Text.StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < OldvalueO.Length; i++)
|
||||
sb.Append(OldvalueO[i] ? "1" : "0");
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region "Method"
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 오류메세지 반환
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Description("")]
|
||||
public string GetErrorMessage()
|
||||
{
|
||||
return this.errorMessage;
|
||||
}
|
||||
|
||||
|
||||
#region "raise Message"
|
||||
|
||||
/// <summary>
|
||||
/// 일반메세지륿 라생시킵니다.
|
||||
/// </summary>
|
||||
/// <param name="isError"></param>
|
||||
/// <param name="message"></param>
|
||||
[Description("")]
|
||||
public void RaiseMessage(Boolean isError, string message)
|
||||
{
|
||||
if (isError) errorMessage = message; //170920
|
||||
if (Message != null) Message(this, new MessageEventArgs(isError, message));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지정한 데이터로 바코드가 수신된것처럼 발생시킵니다.(Parser를 사용함)
|
||||
/// </summary>
|
||||
/// <param name="b"></param>
|
||||
[Description("")]
|
||||
public void RaiseDataMessage(eMsgType dir, byte[] Data)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (dir == eMsgType.Rx) Parse_RecvBuffer(Data);
|
||||
if (DataMessage != null) DataMessage(this, new DataEventArgs(dir,Data));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
errorMessage = ex.Message;
|
||||
RaiseMessage(true, "RaiseDataMessage:" + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// Input / Output 핀 상태를 지속적으로 읽는 쓰레드작업을 시작합니다.
|
||||
/// </summary>
|
||||
[Description("")]
|
||||
public void RunMonitor(int loopDelay_ = 150)
|
||||
{
|
||||
this.LoopDelay = loopDelay_;
|
||||
if(!this.bRunMonitor)
|
||||
{
|
||||
this.bRunMonitor = true;
|
||||
this.thMonitor = new Thread(new ThreadStart(this.bwMonitor));
|
||||
this.thMonitor.IsBackground = true;
|
||||
this.thMonitor.Start();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// INPUT/OUPUT 핀 상태를 모니터링하는 쓰레드를 종료시킵니다.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[Description("")]
|
||||
public bool StopMonitor()
|
||||
{
|
||||
try
|
||||
{
|
||||
this.bRunMonitor = false;
|
||||
RaiseMessage(false, "Stop Monitor");
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
RaiseMessage(true, ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 지정한 출력포트의 값을 반전 시킵니다.
|
||||
/// </summary>
|
||||
/// <param name="arrIndex"></param>
|
||||
/// <returns></returns>
|
||||
[Description("")]
|
||||
public Boolean SetToggle(int arrIndex)
|
||||
{
|
||||
if (!IsInit) return false;
|
||||
if (arrIndex < 0 || (arrIndex + 1) > DOCount)
|
||||
throw new Exception(string.Format("IDX Range Errror({0}~{1})", 0, DOCount-1));
|
||||
|
||||
Boolean currentValue = OUTPUT(arrIndex);
|
||||
return SetOutput(arrIndex, !currentValue);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 출력을 설정합니다.
|
||||
/// </summary>
|
||||
/// <param name="arrIndex"></param>
|
||||
/// <param name="Value"></param>
|
||||
/// <param name="Duration"></param>
|
||||
/// <returns></returns>
|
||||
[Description("")]
|
||||
public Boolean SetOutput(int arrIndex, Boolean Value, int Duration = 0)
|
||||
{
|
||||
errorMessage = string.Empty;
|
||||
if (!IsInit)
|
||||
{
|
||||
//RaiseMessage(true, "SetOutput:No Init");
|
||||
return false;
|
||||
}
|
||||
|
||||
//RaiseMessage(false, "Set Output Index=" + arrIndex.ToString() + ",Value=" + Value.ToString());
|
||||
|
||||
if (arrIndex < 0 || (arrIndex + 1) > DOCount)
|
||||
{
|
||||
RaiseMessage(true, "SetOutput:ArrIndex Error = " + arrIndex.ToString());
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!_mre.WaitOne(1000))
|
||||
{
|
||||
RaiseMessage(true, "SetOutput Wait on timeout");
|
||||
return false;
|
||||
}
|
||||
_mre.Reset();
|
||||
|
||||
if (Duration < 0) Duration = 0;
|
||||
int Port = 0x40 + arrIndex; //출력포트는 64번부터 시작한다.
|
||||
string cmd = "00WSS0107%PX00" + Port.ToString("X2") + (Value ? "01":"00");
|
||||
|
||||
//해당라인에 그값을 쓴다.
|
||||
Boolean bRet = true;
|
||||
|
||||
try
|
||||
{
|
||||
var buffer = WriteSync(cmd);
|
||||
string strBuffer = System.Text.Encoding.Default.GetString(buffer);
|
||||
if (buffer == null)
|
||||
{
|
||||
RaiseMessage(true, "SetOutput:No Response");
|
||||
bRet= false;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(buffer[0] == 0x06)
|
||||
{
|
||||
if (Duration != 0)
|
||||
{
|
||||
var task = new Task(() =>
|
||||
{
|
||||
Thread.Sleep(Duration);
|
||||
|
||||
string cmd2 = "00WSS0107%PX00" + Port.ToString("X2") + (Value ? "00" : "01");
|
||||
var buffer2 = WriteSync(cmd2);
|
||||
if (buffer2 == null)
|
||||
{
|
||||
RaiseMessage(true, "SetOutput:Duration toggle Error:No Reponse");
|
||||
}
|
||||
});
|
||||
task.Start(); //비동기로 실행한다.
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RaiseMessage(true, "SetOutput:Nak response");
|
||||
bRet = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
RaiseMessage(true, "SetOutput:"+ex.Message);
|
||||
bRet = false;
|
||||
}
|
||||
_mre.Set();
|
||||
return bRet;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 이벤트를 강제 생성합니다.
|
||||
/// </summary>
|
||||
/// <param name="Direction"></param>
|
||||
/// <param name="ArrIDX"></param>
|
||||
/// <param name="newvalue"></param>
|
||||
[Description("")]
|
||||
public void RaiseEvent(eIOPINDIR Direction, int ArrIDX, Boolean newvalue)
|
||||
{
|
||||
if (IOValueChanged != null)
|
||||
{
|
||||
//mre.WaitOne();
|
||||
//mre.Reset();
|
||||
|
||||
//171226
|
||||
if (Direction == eIOPINDIR.INPUT)
|
||||
{
|
||||
_valueI[ArrIDX] = newvalue;
|
||||
OldvalueI[ArrIDX] = newvalue;
|
||||
}
|
||||
else
|
||||
{
|
||||
_valueO[ArrIDX] = newvalue;
|
||||
OldvalueO[ArrIDX] = newvalue;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (IOValueChanged != null)
|
||||
IOValueChanged(this, new IOValueEventArgs(Direction, ArrIDX, !newvalue, newvalue));
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (IOErrorMessage != null)
|
||||
this.IOErrorMessage(this, new MessageEventArgs(true , string.Format( "{0},{1}:{2}:{3}",ex.Message,Direction,ArrIDX,newvalue)));
|
||||
}
|
||||
//mre.Set();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public virtual void UserMonitorCode() { }
|
||||
|
||||
private byte loopIndex = 0;
|
||||
/// <summary>
|
||||
/// I/O상태를 모니터링 하여 내부 변수에 값을 저장합니다.
|
||||
/// </summary>
|
||||
[Description("")]
|
||||
protected void bwMonitor()
|
||||
{
|
||||
DateTime lastaitime = DateTime.Now;
|
||||
DateTime lastmottime = DateTime.Now;
|
||||
System.Diagnostics.Stopwatch wat = new System.Diagnostics.Stopwatch();
|
||||
while (this.bRunMonitor)
|
||||
{
|
||||
wat.Restart();
|
||||
//170905
|
||||
if (!IsInit)
|
||||
{
|
||||
aiMonWatch.Stop();
|
||||
System.Threading.Thread.Sleep(1000);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!aiMonWatch.IsRunning) aiMonWatch.Reset();
|
||||
}
|
||||
|
||||
//read dio status
|
||||
if (loopIndex == 0)
|
||||
{
|
||||
//RaiseMessage(false,"Run IOMonitor");
|
||||
if (bDIOMonitor)
|
||||
Read_RelayPort();
|
||||
loopIndex += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
//RaiseMessage(false, "Run AIMonitor");
|
||||
UserMonitorCode();
|
||||
loopIndex = 0;
|
||||
}
|
||||
|
||||
wat.Stop();
|
||||
ThreadSpeed = wat.ElapsedMilliseconds;
|
||||
if(wat.ElapsedMilliseconds < LoopDelay)
|
||||
{
|
||||
Thread.Sleep((int)(LoopDelay- wat.ElapsedMilliseconds));
|
||||
}
|
||||
}
|
||||
wat.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region "Send Method"
|
||||
|
||||
//public Boolean Read_AIPort()
|
||||
//{
|
||||
// if (!_mre.WaitOne(1000))
|
||||
// {
|
||||
// RaiseMessage(true, "Read_AIPort Wait on timeout");
|
||||
// return false;
|
||||
// }
|
||||
// //RaiseMessage(false, "Read_AIPort");
|
||||
// _mre.Reset();
|
||||
// System.Threading.Thread.Sleep(25);
|
||||
// _mre.Set();
|
||||
// return true;
|
||||
//}
|
||||
|
||||
public Boolean isValid
|
||||
{
|
||||
get
|
||||
{
|
||||
var ts = DateTime.Now - lastrecvTime;
|
||||
if (ts.TotalSeconds > 5) return false;
|
||||
else return true;
|
||||
}
|
||||
}
|
||||
private DateTime lastrecvTime = DateTime.Now;
|
||||
|
||||
public Boolean Read_RelayPort()
|
||||
{
|
||||
if(!_mre.WaitOne(1000))
|
||||
{
|
||||
RaiseMessage(true, "Read_RelayPort Wait on timeout");
|
||||
return false;
|
||||
}
|
||||
|
||||
// RaiseMessage(false, "Read_RelayPort");
|
||||
|
||||
_mre.Reset();
|
||||
var packet = MakePacket(0, 'R', "SB","%PW000", 8); //"00RSB06%PW00008"
|
||||
var buffer = WriteSync(packet);
|
||||
if(buffer != null)
|
||||
{
|
||||
var frame = Parse_RecvBuffer(buffer);
|
||||
if(!frame.isError)
|
||||
{
|
||||
this.Run_RelayPortData(ref frame);
|
||||
lastrecvTime = DateTime.Now;
|
||||
}
|
||||
|
||||
LastRecvMessage = frame;
|
||||
}
|
||||
_mre.Set();
|
||||
return buffer != null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="Station">0~9</param>
|
||||
/// <param name="Command">R,W</param>
|
||||
/// <param name="CmdType">SB,SW ??</param>
|
||||
/// <param name="Device">%PW000</param>
|
||||
/// <param name="NumberofData">1</param>
|
||||
/// <param name="data">HexString</param>
|
||||
/// <returns></returns>
|
||||
public string MakePacket(byte Station,char Command,string CmdType,string Device,byte NumberofData,string data = "")
|
||||
{
|
||||
string buffer = Station.ToString("X2").PadLeft(2, '0') +
|
||||
Command +
|
||||
CmdType +
|
||||
Device.Length.ToString("X2").PadLeft(2, '0') +
|
||||
Device +
|
||||
NumberofData.ToString("X2").PadLeft(2, '0');
|
||||
if (data != "") buffer += data;
|
||||
return buffer;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
230
Sub/arMasterK/Project/Parser.cs
Normal file
230
Sub/arMasterK/Project/Parser.cs
Normal file
@@ -0,0 +1,230 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace arDev
|
||||
{
|
||||
public partial class MasterK
|
||||
{
|
||||
public sRecvMessage Parse_RecvBuffer(byte[] buffer)
|
||||
{
|
||||
sRecvMessage frame = new sRecvMessage();
|
||||
frame.Clear();
|
||||
frame.Message = string.Empty;
|
||||
if(buffer==null)
|
||||
{
|
||||
frame.Message = "null buffer";
|
||||
return frame;
|
||||
}
|
||||
frame.FullString = System.Text.Encoding.Default.GetString(buffer);
|
||||
if (buffer == null || buffer.Length < 5)
|
||||
{
|
||||
frame.Message = "No Buffer";
|
||||
errorMessage = frame.Message;
|
||||
return frame;
|
||||
}
|
||||
|
||||
//buffer copy
|
||||
frame.Buffer = new byte[buffer.Length];
|
||||
buffer.CopyTo(frame.Buffer, 0);
|
||||
|
||||
if ((buffer[0] != 0x06 && buffer[0] != 0x15) || buffer[buffer.Length - 1] != 0x03)
|
||||
{
|
||||
frame.Message = "No STX,ETX";
|
||||
errorMessage = frame.Message;
|
||||
return frame;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
frame.checksum = new byte[2];
|
||||
frame.isCSError = false;// !CheckCrc(buffer);
|
||||
frame.Device = System.Text.Encoding.Default.GetString(buffer, 1, 2);
|
||||
frame.Command = (char)buffer[3];
|
||||
frame.CmdType = System.Text.Encoding.Default.GetString(buffer, 4, 2);
|
||||
|
||||
//쓰기명령은 데이터가 없다.
|
||||
if (frame.Command == 'W')
|
||||
{
|
||||
frame.BlockCount = 0;
|
||||
frame.DataLen = 0;
|
||||
frame.Data = null;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!frame.isNAK)
|
||||
{
|
||||
frame.BlockCount = Convert.ToInt32(System.Text.Encoding.Default.GetString(buffer, 6, 2), 16);
|
||||
frame.DataLen = Convert.ToInt32(System.Text.Encoding.Default.GetString(buffer, 8, 2), 16);
|
||||
int stringDataLen = frame.BlockCount * frame.DataLen * 2;
|
||||
if (frame.FullString.Length < stringDataLen + 10)
|
||||
{
|
||||
frame.BlockCount = 0;
|
||||
frame.Data = string.Empty;
|
||||
errorMessage = "Frame length Error:" + frame.FullString;
|
||||
}
|
||||
else
|
||||
{
|
||||
frame.Data = frame.FullString.Substring(10, stringDataLen); //, 10, DataBufferLen);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch(Exception ex) //180706
|
||||
{
|
||||
frame.BlockCount = 0;
|
||||
errorMessage = ex.Message;
|
||||
}
|
||||
|
||||
if (frame.isError && errorMessage == "") errorMessage = "Recvbuffer Has Error";
|
||||
return frame;
|
||||
}
|
||||
|
||||
public sSendMessage Parse_SendBuffer(byte[] buffer)
|
||||
{
|
||||
sSendMessage msg = new sSendMessage();
|
||||
msg.Clear();
|
||||
msg.Message = string.Empty;
|
||||
if (buffer == null || buffer.Length < 5)
|
||||
{
|
||||
msg.Message = "No Buffer";
|
||||
errorMessage = msg.Message;
|
||||
return msg;
|
||||
}
|
||||
|
||||
//buffer copy
|
||||
msg.Buffer = new byte[buffer.Length];
|
||||
msg.Strbuffer = System.Text.Encoding.Default.GetString(buffer);
|
||||
buffer.CopyTo(msg.Buffer, 0);
|
||||
|
||||
if ((buffer[0] != wSTX) || buffer[buffer.Length - 1] != wETX)
|
||||
{
|
||||
msg.Message = "No STX,ETX";
|
||||
errorMessage = msg.Message;
|
||||
return msg;
|
||||
}
|
||||
|
||||
msg.checksum = new byte[2];
|
||||
msg.isCSError = false;// !CheckCrc(buffer);
|
||||
|
||||
msg.Device = System.Text.Encoding.Default.GetString(buffer, 1, 2);
|
||||
msg.Command = (char)buffer[3];
|
||||
if (msg.Command == 'R')
|
||||
{
|
||||
msg.CmdType = msg.Strbuffer.Substring(4, 2);
|
||||
msg.DeviceLength = int.Parse(msg.Strbuffer.Substring( 6, 2));
|
||||
msg.VarName = msg.Strbuffer.Substring( 8, msg.DeviceLength);
|
||||
msg.DataLen = int.Parse(msg.Strbuffer.Substring( 8 + msg.DeviceLength, 2));
|
||||
} else if (msg.Command == 'W')
|
||||
{
|
||||
msg.CmdType = System.Text.Encoding.Default.GetString(buffer, 4, 2);
|
||||
if(msg.CmdType == "SB")
|
||||
{
|
||||
//블록수가 없다.
|
||||
msg.NumberofBlock = 0;
|
||||
msg.DeviceLength = int.Parse(msg.Strbuffer.Substring(6, 2));
|
||||
msg.VarName = msg.Strbuffer.Substring(8, msg.DeviceLength);
|
||||
msg.DataLen = Convert.ToByte(msg.Strbuffer.Substring(8 + msg.DeviceLength, 2),16);
|
||||
int remain = msg.Strbuffer.Length - 2 - 10 - msg.DeviceLength+1;
|
||||
msg.Data = msg.Strbuffer.Substring(10 + msg.DeviceLength, remain);
|
||||
}
|
||||
else
|
||||
{
|
||||
msg.NumberofBlock = int.Parse(msg.Strbuffer.Substring(6, 2));
|
||||
msg.DeviceLength = int.Parse(msg.Strbuffer.Substring(8, 2));
|
||||
msg.VarName = msg.Strbuffer.Substring(10, msg.DeviceLength);
|
||||
msg.Data = msg.Strbuffer.Substring(10 + msg.DeviceLength, 2);
|
||||
msg.DataLen = (int)(msg.Data.Length / 2.0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 수신된 데이터를 분석하고 관련 메세지를 생성합니다.
|
||||
/// </summary>
|
||||
/// <param name="opCode"></param>
|
||||
/// <param name="dataBuffer"></param>
|
||||
[Description("")]
|
||||
protected void Run_RelayPortData(ref sRecvMessage message)
|
||||
{
|
||||
if (message.isNAK) return; //req nak process
|
||||
if (message.Command == 'R')
|
||||
{
|
||||
if (message.CmdType == "SB")
|
||||
{
|
||||
var Port = lastSendMessage.VarName.Substring(1, 1);
|
||||
var DataType = lastSendMessage.VarName.Substring(2, 1);
|
||||
//int DataLen = 0;
|
||||
//if (DataType == "W") DataLen = 16;
|
||||
switch (Port)
|
||||
{
|
||||
case "P": //relay
|
||||
//들어온값이 16진수 문자형태이므로 숫자로 변경
|
||||
var InBufferStrH = message.Data.Substring(0, 8);
|
||||
var InBufferStrL = message.Data.Substring(8, 8);
|
||||
var OtBufferStrH = message.Data.Substring(16, 8);
|
||||
var OtBufferStrL = message.Data.Substring(24, 8);
|
||||
|
||||
Int32 numvalueHI = Convert.ToInt32(InBufferStrL, 16);
|
||||
Int32 numvalueLI = Convert.ToInt32(InBufferStrH, 16);
|
||||
Int32 numvalueHO = Convert.ToInt32(OtBufferStrL, 16);
|
||||
Int32 numvalueLO = Convert.ToInt32(OtBufferStrH, 16);
|
||||
|
||||
var bufHI = BitConverter.GetBytes(numvalueHI).ToArray();
|
||||
var bufLI = BitConverter.GetBytes(numvalueLI).ToArray();
|
||||
var bufHO = BitConverter.GetBytes(numvalueHO).ToArray();
|
||||
var bufLO = BitConverter.GetBytes(numvalueLO).ToArray();
|
||||
|
||||
System.Collections.BitArray b = new System.Collections.BitArray(new byte[] { bufLI[2], bufLI[3], bufLI[0], bufLI[1] });
|
||||
for (int i = 0; i < b.Length; i++)
|
||||
{
|
||||
this._valueI[i] = b.Get(i);
|
||||
if (OldvalueI[i] != this._valueI[i])
|
||||
{
|
||||
try
|
||||
{
|
||||
if (IOValueChanged != null)
|
||||
IOValueChanged(this, new IOValueEventArgs(eIOPINDIR.INPUT, i, OldvalueI[i], _valueI[i]));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (IOErrorMessage != null)
|
||||
IOErrorMessage(this, new MessageEventArgs(true, ex.Message));
|
||||
}
|
||||
|
||||
this.OldvalueI[i] = this._valueI[i];
|
||||
}
|
||||
}
|
||||
System.Collections.BitArray bO = new System.Collections.BitArray(new byte[] { bufLO[2], bufLO[3], bufLO[0], bufLO[1] });
|
||||
for (int i = 0; i < bO.Length; i++)
|
||||
{
|
||||
this._valueO[i] = bO.Get(i);
|
||||
if (OldvalueO[i] != this._valueO[i])
|
||||
{
|
||||
try
|
||||
{
|
||||
if (IOValueChanged != null)
|
||||
IOValueChanged(this, new IOValueEventArgs(eIOPINDIR.OUTPUT, i, OldvalueO[i], _valueO[i]));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (IOErrorMessage != null)
|
||||
IOErrorMessage(this, new MessageEventArgs(true, ex.Message));
|
||||
}
|
||||
|
||||
this.OldvalueO[i] = this._valueO[i];
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
36
Sub/arMasterK/Project/Properties/AssemblyInfo.cs
Normal file
36
Sub/arMasterK/Project/Properties/AssemblyInfo.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// 어셈블리의 일반 정보는 다음 특성 집합을 통해 제어됩니다.
|
||||
// 어셈블리와 관련된 정보를 수정하려면
|
||||
// 이 특성 값을 변경하십시오.
|
||||
[assembly: AssemblyTitle("MasterK PLC I/O DLL")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("SIMP")]
|
||||
[assembly: AssemblyProduct("MasterKDLL")]
|
||||
[assembly: AssemblyCopyright("Copyright © SIMP 2018")]
|
||||
[assembly: AssemblyTrademark("SimpleSoft")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에
|
||||
// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
|
||||
// 해당 형식에 대해 ComVisible 특성을 true로 설정하십시오.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
|
||||
[assembly: Guid("59413cb9-8a6a-4a66-92c1-94d7baea812d")]
|
||||
|
||||
// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
|
||||
//
|
||||
// 주 버전
|
||||
// 부 버전
|
||||
// 빌드 번호
|
||||
// 수정 버전
|
||||
//
|
||||
// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 버전이 자동으로
|
||||
// 지정되도록 할 수 있습니다.
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("18.08.02.1730")]
|
||||
[assembly: AssemblyFileVersion("18.08.02.1730")]
|
||||
63
Sub/arMasterK/Project/Properties/Resources.Designer.cs
generated
Normal file
63
Sub/arMasterK/Project/Properties/Resources.Designer.cs
generated
Normal file
@@ -0,0 +1,63 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 이 코드는 도구를 사용하여 생성되었습니다.
|
||||
// 런타임 버전:4.0.30319.42000
|
||||
//
|
||||
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
|
||||
// 이러한 변경 내용이 손실됩니다.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace arDev.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("arDev.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
117
Sub/arMasterK/Project/Properties/Resources.resx
Normal file
117
Sub/arMasterK/Project/Properties/Resources.resx
Normal file
@@ -0,0 +1,117 @@
|
||||
<?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.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: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" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
</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" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
</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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
</root>
|
||||
26
Sub/arMasterK/Project/Properties/Settings.Designer.cs
generated
Normal file
26
Sub/arMasterK/Project/Properties/Settings.Designer.cs
generated
Normal file
@@ -0,0 +1,26 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// 이 코드는 도구를 사용하여 생성되었습니다.
|
||||
// 런타임 버전:4.0.30319.42000
|
||||
//
|
||||
// 파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
|
||||
// 이러한 변경 내용이 손실됩니다.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace arDev.Properties {
|
||||
|
||||
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.11.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
7
Sub/arMasterK/Project/Properties/Settings.settings
Normal file
7
Sub/arMasterK/Project/Properties/Settings.settings
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||
<Profiles>
|
||||
<Profile Name="(Default)" />
|
||||
</Profiles>
|
||||
<Settings />
|
||||
</SettingsFile>
|
||||
425
Sub/arMasterK/Project/Util.cs
Normal file
425
Sub/arMasterK/Project/Util.cs
Normal file
@@ -0,0 +1,425 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace arDev
|
||||
{
|
||||
public partial class MasterK
|
||||
{
|
||||
protected int ReceiveByte()
|
||||
{
|
||||
bool done = false;
|
||||
int ret_val;
|
||||
|
||||
// Await 1 char...
|
||||
if (!sw_ch.IsRunning)
|
||||
sw_ch.Start();
|
||||
|
||||
do
|
||||
{
|
||||
if (_device.BytesToRead > 0)
|
||||
{
|
||||
ret_val = _device.ReadByte();
|
||||
done = true;
|
||||
}
|
||||
else
|
||||
ret_val = -1;
|
||||
} while ((!done) && ((sw_ch.ElapsedMilliseconds - char_tmo) < 10));
|
||||
|
||||
if (done)
|
||||
char_tmo = sw_ch.ElapsedMilliseconds; // Char received with no errors...reset timeout counter for next char!
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
|
||||
protected int GetInterframeDelay()
|
||||
{
|
||||
int ret_val;
|
||||
|
||||
if (_device.BaudRate > 19200)
|
||||
ret_val = 2; // Fixed value = 1.75ms up rounded
|
||||
else
|
||||
{
|
||||
int nbits = 1 + _device.DataBits;
|
||||
nbits += _device.Parity == System.IO.Ports.Parity.None ? 0 : 1;
|
||||
switch (_device.StopBits)
|
||||
{
|
||||
case System.IO.Ports.StopBits.One:
|
||||
nbits += 1;
|
||||
break;
|
||||
|
||||
case System.IO.Ports.StopBits.OnePointFive: // Ceiling
|
||||
case System.IO.Ports.StopBits.Two:
|
||||
nbits += 2;
|
||||
break;
|
||||
}
|
||||
ret_val = Convert.ToInt32(Math.Ceiling(1 / (((double)_device.BaudRate / ((double)nbits * 3.5d)) / 1000)));
|
||||
}
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
protected int GetIntercharDelay()
|
||||
{
|
||||
int ret_val;
|
||||
|
||||
if (_device.BaudRate > 19200)
|
||||
ret_val = 1; // Fixed value = 0.75 ms up rounded
|
||||
else
|
||||
{
|
||||
int nbits = 1 + _device.DataBits;
|
||||
nbits += _device.Parity == System.IO.Ports.Parity.None ? 0 : 1;
|
||||
switch (_device.StopBits)
|
||||
{
|
||||
case System.IO.Ports.StopBits.One:
|
||||
nbits += 1;
|
||||
break;
|
||||
|
||||
case System.IO.Ports.StopBits.OnePointFive: // Ceiling
|
||||
case System.IO.Ports.StopBits.Two:
|
||||
nbits += 2;
|
||||
break;
|
||||
}
|
||||
ret_val = Convert.ToInt32(Math.Ceiling(1 / (((double)_device.BaudRate / ((double)nbits * 1.5d)) / 1000)));
|
||||
}
|
||||
|
||||
return ret_val;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// IO모니터가 실행중인지 확인합니다.
|
||||
/// </summary>
|
||||
[Description("I/O보드 핀 상태를 쓰레드를 이용하여 읽고 있는지 여부"), Browsable(false)]
|
||||
public Boolean isRunMonitor
|
||||
{
|
||||
get
|
||||
{
|
||||
if (thMonitor == null) return false;
|
||||
return this.thMonitor.IsAlive;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 16진수 문자열 형태로 반환합니다.
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[Description("")]
|
||||
protected string GetHexString(Byte[] input)
|
||||
{
|
||||
if (input == null || input.Length < 1) return string.Empty;
|
||||
System.Text.StringBuilder sb = new System.Text.StringBuilder();
|
||||
foreach (byte b in input)
|
||||
sb.Append(" " + b.ToString("X2"));
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 현재 시스템이 x64 인지 확인합니다.
|
||||
/// </summary>
|
||||
[Description("")]
|
||||
protected Boolean isX64
|
||||
{
|
||||
get
|
||||
{
|
||||
if (IntPtr.Size == 8) return true;
|
||||
else return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 초기화가 되어잇는지 체크합니다.
|
||||
/// </summary>
|
||||
[Description("")]
|
||||
public bool IsInit
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!IsOpen() || !this._isInit) return false;
|
||||
else return true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 해당 버퍼가 NAK 응답인지 체크합니다.
|
||||
/// </summary>
|
||||
/// <param name="buffer"></param>
|
||||
/// <returns></returns>
|
||||
[Description("")]
|
||||
protected Boolean isNak(byte[] buffer)
|
||||
{
|
||||
if (buffer[0] == 0x15)
|
||||
{
|
||||
string hexString = GetHexString(buffer);
|
||||
RaiseMessage(true, "NAK Response : " + hexString);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
public bool IsOpen()
|
||||
{
|
||||
if (_device == null) return false;
|
||||
return _device.IsOpen;
|
||||
}
|
||||
|
||||
protected void ClearBuffer(Boolean ClearDeviceBuffer=false)
|
||||
{
|
||||
_dlc = 0;
|
||||
_bDlc = false;
|
||||
_bStx = false;
|
||||
_CommandCode = 0x00;
|
||||
if (ClearDeviceBuffer)
|
||||
{
|
||||
this._device.DiscardInBuffer();
|
||||
this._device.DiscardOutBuffer();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// io모니터창을 표시합니다.
|
||||
/// </summary>
|
||||
[Description("")]
|
||||
public void ShowIOMonitor()
|
||||
{
|
||||
fIOMonitor f = new fIOMonitor(this);
|
||||
f.Show();
|
||||
}
|
||||
|
||||
#region "html generate"
|
||||
|
||||
private string getHtmlHeader()
|
||||
{
|
||||
return "<html>" +
|
||||
"<head>" +
|
||||
"<script src=\"https://rawgit.com/google/code-prettify/master/loader/run_prettify.js?autoload=true&skin=sunburst&lang=css\" defer></script>" +
|
||||
"<link rel=\"stylesheet\" href=\"styles.css\">" +
|
||||
"</head>" +
|
||||
"<body>";
|
||||
}
|
||||
|
||||
private string getHtmlTail()
|
||||
{
|
||||
return "</body></html>";
|
||||
}
|
||||
private string getTableHeadStr()
|
||||
{
|
||||
return "<table> <thead> <tr> <td>Type</td> <td>Name</td> <td>Return</td> <td>Description</td> </tr> </thead> <tbody>";
|
||||
}
|
||||
private string getTableHead()
|
||||
{
|
||||
return "<table> <thead> <tr> <td>Type</td> <td>Name</td><td>Description</td> </tr> </thead> <tbody>";
|
||||
}
|
||||
private string getTableHeadEnum()
|
||||
{
|
||||
return "<table> <thead> <tr> <td>Return</td> <td>Name</td> <td>Description</td> </tr> </thead> <tbody>";
|
||||
}
|
||||
private string getTableTail()
|
||||
{
|
||||
return "</tbody></table>";
|
||||
}
|
||||
private string findReturnType(string fieldname)
|
||||
{
|
||||
if (fieldname.IndexOf('+') >= 0)
|
||||
{
|
||||
return fieldname.Split('+')[1];
|
||||
}
|
||||
else return fieldname;
|
||||
}
|
||||
|
||||
private string getMethodReturnType(Type source, MemberInfo member)
|
||||
{
|
||||
switch (member.MemberType)
|
||||
{
|
||||
case MemberTypes.Method:
|
||||
var met = source.GetMethod(member.Name);
|
||||
return source.GetMethod(member.Name).ReturnType.ToString().Substring(7);
|
||||
case MemberTypes.Property:
|
||||
var pt = source.GetProperty(member.Name);
|
||||
if (pt != null)
|
||||
return pt.PropertyType.FullName.Substring(7);
|
||||
break;
|
||||
case MemberTypes.Field:
|
||||
var fd = source.GetField(member.Name);
|
||||
string fieldname = fd.FieldType.FullName.Substring(7);
|
||||
return findReturnType(fieldname);
|
||||
}
|
||||
return "";
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// HTML 메뉴얼작성용 코드를 생성합니다.(0==command,1==enum,2==structure)
|
||||
/// </summary>
|
||||
public string MakeHTML(byte type = 0)
|
||||
{
|
||||
System.Text.StringBuilder sb = new StringBuilder();
|
||||
|
||||
sb.AppendLine(getHtmlHeader());
|
||||
|
||||
if (type == 2)
|
||||
{
|
||||
|
||||
var typeSmsg = typeof(sRecvMessage);
|
||||
sb.AppendLine("<h4 class=\"structure\">[ " + typeSmsg.Name + " ]</h4>");
|
||||
sb.AppendLine(getTableHeadStr());
|
||||
foreach (var member in typeSmsg.GetMembers())
|
||||
{
|
||||
if (member.Name.StartsWith("get_") || member.Name.StartsWith("set_") ||
|
||||
member.Name.StartsWith("Equals") || member.Name.StartsWith("GetHashCode") ||
|
||||
member.Name.StartsWith("GetType")) continue;
|
||||
|
||||
sb.AppendLine("<tr>");
|
||||
sb.AppendLine(" <td>" + member.MemberType.ToString() + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine(" <td>" + getMethodReturnType(typeSmsg, member) + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine("</tr>");
|
||||
}
|
||||
sb.AppendLine(getTableTail());
|
||||
|
||||
}
|
||||
else if (type == 1)
|
||||
{
|
||||
//enum list
|
||||
|
||||
var typeeIO = typeof(eIOPINDIR);
|
||||
sb.AppendLine("<h4 class=\"enum\">[ " + typeeIO.Name + " ]</h4>");
|
||||
sb.AppendLine(getTableHeadEnum());
|
||||
foreach (var member in typeeIO.GetFields())
|
||||
{
|
||||
if (member.Name.StartsWith("get_") || member.Name.StartsWith("set_") ||
|
||||
member.Name.StartsWith("Equals") || member.Name.StartsWith("GetHashCode") ||
|
||||
member.Name.StartsWith("GetType") || member.Name.EndsWith("__")) continue;
|
||||
|
||||
sb.AppendLine("<tr>");
|
||||
sb.AppendLine(" <td>Byte</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine("</tr>");
|
||||
}
|
||||
sb.AppendLine(getTableTail());
|
||||
|
||||
typeeIO = typeof(eErrorCode);
|
||||
sb.AppendLine("<h4 class=\"enum\">[ " + typeeIO.Name + " ]</h4>");
|
||||
sb.AppendLine(getTableHeadEnum());
|
||||
foreach (var member in typeeIO.GetFields())
|
||||
{
|
||||
if (member.Name.StartsWith("get_") || member.Name.StartsWith("set_") ||
|
||||
member.Name.StartsWith("Equals") || member.Name.StartsWith("GetHashCode") ||
|
||||
member.Name.StartsWith("GetType") || member.Name.EndsWith("__")) continue;
|
||||
|
||||
sb.AppendLine("<tr>");
|
||||
sb.AppendLine(" <td>Byte</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine("</tr>");
|
||||
}
|
||||
sb.AppendLine(getTableTail());
|
||||
|
||||
typeeIO = typeof(eOpCode);
|
||||
sb.AppendLine("<h4 class=\"enum\">[ " + typeeIO.Name + " ]</h4>");
|
||||
sb.AppendLine(getTableHeadEnum());
|
||||
foreach (var member in typeeIO.GetFields())
|
||||
{
|
||||
if (member.Name.StartsWith("get_") || member.Name.StartsWith("set_") ||
|
||||
member.Name.StartsWith("Equals") || member.Name.StartsWith("GetHashCode") ||
|
||||
member.Name.StartsWith("GetType") || member.Name.EndsWith("__")) continue;
|
||||
|
||||
sb.AppendLine("<tr>");
|
||||
sb.AppendLine(" <td>Byte</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine("</tr>");
|
||||
}
|
||||
sb.AppendLine(getTableTail());
|
||||
}
|
||||
else
|
||||
{
|
||||
//main
|
||||
sb.AppendLine("<h4 class=\"method\">[ Methods ]</h4>");
|
||||
sb.AppendLine(getTableHead());
|
||||
foreach (var member in GetType().GetMethods())
|
||||
{
|
||||
if (member.Name.StartsWith("get_") || member.Name.StartsWith("set_") ||
|
||||
member.Name.StartsWith("Equals") || member.Name.StartsWith("GetHashCode") ||
|
||||
member.Name.StartsWith("GetType") || member.Name.StartsWith("add_") ||
|
||||
member.Name.StartsWith("remove_")) continue;
|
||||
|
||||
sb.AppendLine("<tr>");
|
||||
sb.AppendLine(" <td>" + findReturnType(member.ReturnType.ToString().Substring(7)) + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine("</tr>");
|
||||
}
|
||||
sb.AppendLine(getTableTail());
|
||||
|
||||
|
||||
sb.AppendLine("<h4 class=\"method\">[ Properties ]</h4>");
|
||||
sb.AppendLine(getTableHead());
|
||||
foreach (var member in GetType().GetProperties())
|
||||
{
|
||||
if (member.Name.StartsWith("get_") || member.Name.StartsWith("set_") ||
|
||||
member.Name.StartsWith("Equals") || member.Name.StartsWith("GetHashCode") ||
|
||||
member.Name.StartsWith("GetType") || member.Name.StartsWith("add_") ||
|
||||
member.Name.StartsWith("remove_")) continue;
|
||||
sb.AppendLine("<tr>");
|
||||
sb.AppendLine(" <td>" + findReturnType(member.PropertyType.FullName.Substring(7)) + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine("</tr>");
|
||||
}
|
||||
sb.AppendLine(getTableTail());
|
||||
|
||||
|
||||
sb.AppendLine("<h4 class=\"method\">[ Events ]</h4>");
|
||||
sb.AppendLine(getTableHead());
|
||||
foreach (var member in GetType().GetEvents())
|
||||
{
|
||||
if (member.Name.StartsWith("get_") || member.Name.StartsWith("set_") ||
|
||||
member.Name.StartsWith("Equals") || member.Name.StartsWith("GetHashCode") ||
|
||||
member.Name.StartsWith("GetType") || member.Name.StartsWith("add_") ||
|
||||
member.Name.StartsWith("remove_")) continue;
|
||||
|
||||
sb.AppendLine("<tr>");
|
||||
sb.AppendLine(" <td>" + "" + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine("</tr>");
|
||||
}
|
||||
sb.AppendLine(getTableTail());
|
||||
|
||||
|
||||
|
||||
sb.AppendLine("<h4 class=\"method\">[ Fields ]</h4>");
|
||||
sb.AppendLine(getTableHead());
|
||||
foreach (var member in GetType().GetFields())
|
||||
{
|
||||
if (member.Name.StartsWith("get_") || member.Name.StartsWith("set_") ||
|
||||
member.Name.StartsWith("Equals") || member.Name.StartsWith("GetHashCode") ||
|
||||
member.Name.StartsWith("GetType") || member.Name.StartsWith("add_") ||
|
||||
member.Name.StartsWith("remove_")) continue;
|
||||
|
||||
sb.AppendLine("<tr>");
|
||||
sb.AppendLine(" <td>" + findReturnType(member.FieldType.FullName.Substring(7)) + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine(" <td class=\"tleft\">" + member.Name + "</td>");
|
||||
sb.AppendLine("</tr>");
|
||||
}
|
||||
sb.AppendLine(getTableTail());
|
||||
}
|
||||
|
||||
sb.AppendLine(getHtmlTail());
|
||||
return sb.ToString();
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
213
Sub/arMasterK/Project/Write.cs
Normal file
213
Sub/arMasterK/Project/Write.cs
Normal file
@@ -0,0 +1,213 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.ComponentModel;
|
||||
using System.Windows.Forms;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Design;
|
||||
using System.Reflection;
|
||||
using System.Runtime;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
//for tcp,udp
|
||||
using System.Net.Sockets;
|
||||
using System.Net;
|
||||
|
||||
namespace arDev
|
||||
{
|
||||
public partial class MasterK
|
||||
{
|
||||
|
||||
protected Boolean Send(byte[] packet)
|
||||
{
|
||||
try
|
||||
{
|
||||
_device.DiscardInBuffer();
|
||||
System.Threading.Thread.Sleep(1);
|
||||
_device.DiscardOutBuffer();
|
||||
System.Threading.Thread.Sleep(1);
|
||||
_device.Write(packet, 0, packet.Length);
|
||||
char_tmo = 0;
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
RaiseMessage(true, "Device Send Error : " + ex.Message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
protected Boolean Write(byte[] packet)
|
||||
{
|
||||
bSyncRecvOK = false;
|
||||
errorMessage = string.Empty;
|
||||
lastSendTime = DateTime.Now;
|
||||
lastSendMessage = Parse_SendBuffer(packet);
|
||||
Boolean retval = Send(packet);
|
||||
if (!retval) RaiseMessage(true, "Tx Error : " + System.Text.Encoding.Default.GetString(packet));
|
||||
else RaiseDataMessage(eMsgType.Tx, packet);
|
||||
return retval;
|
||||
}
|
||||
public byte[] UserWrite(string command)
|
||||
{
|
||||
_mre.Reset();
|
||||
var buffer = WriteSync(command);
|
||||
_mre.Set();
|
||||
return buffer;
|
||||
}
|
||||
|
||||
protected byte[] WriteSync(string command)
|
||||
{
|
||||
var bytes = System.Text.Encoding.Default.GetBytes(command);
|
||||
if (command[0] == (char)wSTX)
|
||||
{
|
||||
return WriteSync(bytes);
|
||||
}
|
||||
else
|
||||
{
|
||||
List<byte> packet = new List<byte>();
|
||||
packet.Add(wSTX);
|
||||
packet.AddRange(bytes);
|
||||
packet.Add(wETX);
|
||||
return WriteSync(packet.ToArray());
|
||||
}
|
||||
}
|
||||
protected int interframe_delay;
|
||||
System.Diagnostics.Stopwatch sw_ch;
|
||||
long char_tmo;
|
||||
|
||||
string savefil = string.Empty;
|
||||
|
||||
// Int64 writeCnt = 0;
|
||||
protected byte[] WriteSync(byte[] command)
|
||||
{
|
||||
//writeCnt += 1;
|
||||
//RaiseMessage(false, ">> WriteSync Enter " + writeCnt.ToString());
|
||||
if (savefil == "")
|
||||
{
|
||||
savefil = Environment.CurrentDirectory + "\rxBuffer.txt";
|
||||
}
|
||||
// if (!mre.WaitOne(500))
|
||||
// {
|
||||
// errorMessage = "WaitOne error 500ms";
|
||||
// return null;
|
||||
// }
|
||||
|
||||
//// RaiseMessage(false, "write data sync");
|
||||
|
||||
// mre.Reset();
|
||||
|
||||
|
||||
//Boolean isComplete = false;
|
||||
Boolean isTimeOut = false;
|
||||
errorMessage = "Wait Data #2";
|
||||
|
||||
LastRecvMessage.Clear();
|
||||
List<byte> _buffer = new List<byte>();
|
||||
wat.Restart();
|
||||
|
||||
System.Threading.Thread.Sleep(interframe_delay);
|
||||
|
||||
//send data
|
||||
if (!Write(command))
|
||||
{
|
||||
errorMessage = "sync Buffer is null(1)";
|
||||
//mre.Set();
|
||||
//RaiseMessage(false, "<< WriteSync Out " + writeCnt.ToString());
|
||||
return null;
|
||||
}
|
||||
|
||||
bool done = false;
|
||||
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
|
||||
sw.Start();
|
||||
int rcv ;
|
||||
long tmo = 0;
|
||||
do
|
||||
{
|
||||
int buffercnt = 0;
|
||||
try
|
||||
{
|
||||
buffercnt = _device.BytesToRead;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
RaiseMessage(true, ex.Message);
|
||||
}
|
||||
|
||||
if (buffercnt > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
rcv = _device.ReadByte();
|
||||
// System.IO.File.WriteAllBytes(savefil, new byte[] { (byte)rcv });
|
||||
RaiseDataMessage(eMsgType.RxRaw, new byte[(byte)rcv]);
|
||||
|
||||
if (rcv == 0x06 || rcv == 0x015)
|
||||
{
|
||||
_buffer.Clear();
|
||||
_buffer.Add((byte)rcv);
|
||||
//isComplete = false;
|
||||
}
|
||||
else if (rcv == 0x03) //endtext
|
||||
{
|
||||
//모두 수신한경우이다.
|
||||
_buffer.Add((byte)rcv);
|
||||
//isComplete = true;
|
||||
done = true;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
_buffer.Add((byte)rcv);
|
||||
}
|
||||
}
|
||||
catch {
|
||||
|
||||
}
|
||||
}
|
||||
tmo = sw.ElapsedMilliseconds;
|
||||
} while ((!done) && (_device.ReadTimeout > tmo));
|
||||
sw_ch.Stop();
|
||||
sw.Stop();
|
||||
|
||||
if (tmo >= _device.ReadTimeout)
|
||||
{
|
||||
errorMessage = string.Format("Writesync TimeOut({0})", _device.ReadTimeout);
|
||||
isTimeOut = true;
|
||||
}
|
||||
|
||||
byte[] Dummy = new byte[_buffer.Count];
|
||||
_buffer.CopyTo(Dummy);
|
||||
|
||||
// mre.Set();
|
||||
if (isTimeOut)
|
||||
{
|
||||
RaiseMessage(true, errorMessage);
|
||||
//RaiseMessage(false, "<< WriteSync Out " + writeCnt.ToString());
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
RaiseDataMessage(eMsgType.Rx, Dummy);
|
||||
var frame = Parse_RecvBuffer(Dummy);
|
||||
if (frame.Buffer == null)
|
||||
{
|
||||
errorMessage = "sync buffer is null(2)";
|
||||
RaiseMessage(true, errorMessage);
|
||||
// RaiseMessage(false, "<< WriteSync Out " + writeCnt.ToString());
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
// RaiseMessage(false, "<< WriteSync Out " + writeCnt.ToString());
|
||||
return frame.Buffer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
100
Sub/arMasterK/Project/arMasterK.csproj
Normal file
100
Sub/arMasterK/Project/arMasterK.csproj
Normal file
@@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" 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>{E0133085-E5F9-4275-9DB8-F8F20EF8561F}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>arDev</RootNamespace>
|
||||
<AssemblyName>arMasterK</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>..\..\DLL\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<StartupObject />
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<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" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Util.cs" />
|
||||
<Compile Include="Parser.cs" />
|
||||
<Compile Include="EventArgs.cs" />
|
||||
<Compile Include="EnumAStruct.cs" />
|
||||
<Compile Include="fIOMonitor.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="fIOMonitor.Designer.cs">
|
||||
<DependentUpon>fIOMonitor.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Write.cs" />
|
||||
<Compile Include="MasterK.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<EmbeddedResource Include="fIOMonitor.resx">
|
||||
<DependentUpon>fIOMonitor.cs</DependentUpon>
|
||||
</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>
|
||||
<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>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="History.txt" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
144
Sub/arMasterK/Project/fIOMonitor.Designer.cs
generated
Normal file
144
Sub/arMasterK/Project/fIOMonitor.Designer.cs
generated
Normal file
@@ -0,0 +1,144 @@
|
||||
namespace arDev
|
||||
{
|
||||
partial class fIOMonitor
|
||||
{
|
||||
/// <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.tblOutput = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.tblINput = new System.Windows.Forms.TableLayoutPanel();
|
||||
this.tableLayoutPanel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// tableLayoutPanel1
|
||||
//
|
||||
this.tableLayoutPanel1.ColumnCount = 2;
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.label2, 1, 0);
|
||||
this.tableLayoutPanel1.Controls.Add(this.tblOutput, 1, 1);
|
||||
this.tableLayoutPanel1.Controls.Add(this.tblINput, 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.Absolute, 36F));
|
||||
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
|
||||
this.tableLayoutPanel1.Size = new System.Drawing.Size(582, 480);
|
||||
this.tableLayoutPanel1.TabIndex = 0;
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.label1.Location = new System.Drawing.Point(3, 0);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(285, 36);
|
||||
this.label1.TabIndex = 0;
|
||||
this.label1.Text = "INPUT";
|
||||
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.label2.Location = new System.Drawing.Point(294, 0);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(285, 36);
|
||||
this.label2.TabIndex = 0;
|
||||
this.label2.Text = "OUTPUT";
|
||||
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
||||
//
|
||||
// tblOutput
|
||||
//
|
||||
this.tblOutput.ColumnCount = 4;
|
||||
this.tblOutput.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tblOutput.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tblOutput.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tblOutput.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tblOutput.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tblOutput.Location = new System.Drawing.Point(294, 39);
|
||||
this.tblOutput.Name = "tblOutput";
|
||||
this.tblOutput.RowCount = 8;
|
||||
this.tblOutput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblOutput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblOutput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblOutput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblOutput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblOutput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblOutput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblOutput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblOutput.Size = new System.Drawing.Size(285, 438);
|
||||
this.tblOutput.TabIndex = 1;
|
||||
//
|
||||
// tblINput
|
||||
//
|
||||
this.tblINput.ColumnCount = 4;
|
||||
this.tblINput.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tblINput.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tblINput.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tblINput.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 25F));
|
||||
this.tblINput.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.tblINput.Location = new System.Drawing.Point(3, 39);
|
||||
this.tblINput.Name = "tblINput";
|
||||
this.tblINput.RowCount = 8;
|
||||
this.tblINput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblINput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblINput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblINput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblINput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblINput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblINput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblINput.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.5F));
|
||||
this.tblINput.Size = new System.Drawing.Size(285, 438);
|
||||
this.tblINput.TabIndex = 1;
|
||||
//
|
||||
// fIOMonitor
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(582, 480);
|
||||
this.Controls.Add(this.tableLayoutPanel1);
|
||||
this.Name = "fIOMonitor";
|
||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||
this.Text = "fIOMonitor";
|
||||
this.Load += new System.EventHandler(this.fIOMonitor_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.TableLayoutPanel tblOutput;
|
||||
private System.Windows.Forms.TableLayoutPanel tblINput;
|
||||
}
|
||||
}
|
||||
77
Sub/arMasterK/Project/fIOMonitor.cs
Normal file
77
Sub/arMasterK/Project/fIOMonitor.cs
Normal file
@@ -0,0 +1,77 @@
|
||||
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 arDev
|
||||
{
|
||||
public partial class fIOMonitor : Form
|
||||
{
|
||||
MasterK dio;
|
||||
public fIOMonitor(MasterK _device)
|
||||
{
|
||||
InitializeComponent();
|
||||
dio = _device;
|
||||
}
|
||||
|
||||
Button[] btInput;
|
||||
Button[] btOutput;
|
||||
private void fIOMonitor_Load(object sender, EventArgs e)
|
||||
{
|
||||
btInput = new Button[dio.DICount];
|
||||
btOutput = new Button[dio.DOCount];
|
||||
for(int i = 0; i< dio.DICount;i++)
|
||||
{
|
||||
Button lb = new Button();
|
||||
lb.Text = string.Format("{0}",i+1);
|
||||
lb.Tag = i;
|
||||
lb.Click += lb_ClickI;
|
||||
lb.Dock = DockStyle.Fill;
|
||||
lb.BackColor = dio.INPUT(i) ? Color.Lime : Color.White;
|
||||
btInput[i] = lb;
|
||||
this.tblINput.Controls.Add(lb);
|
||||
}
|
||||
for (int i = 0; i < dio.DOCount; i++)
|
||||
{
|
||||
Button lb = new Button();
|
||||
lb.Text = string.Format("{0}", i + 1);
|
||||
lb.Tag = i;
|
||||
lb.Click += lb_ClickO;
|
||||
lb.Dock = DockStyle.Fill;
|
||||
lb.BackColor = dio.OUTPUT(i) ? Color.Lime : Color.White;
|
||||
btOutput[i] = lb;
|
||||
this.tblOutput.Controls.Add(lb);
|
||||
}
|
||||
|
||||
dio.IOValueChanged += dio_IOValueChanged;
|
||||
}
|
||||
|
||||
void dio_IOValueChanged(object sender, MasterK.IOValueEventArgs e)
|
||||
{
|
||||
if(e.Direction == MasterK.eIOPINDIR.INPUT)
|
||||
{
|
||||
btInput[e.ArrIDX].BackColor = e.NewValue ? Color.Lime : Color.White;
|
||||
}
|
||||
else
|
||||
{
|
||||
btOutput[e.ArrIDX].BackColor = e.NewValue ? Color.Lime : Color.White;
|
||||
}
|
||||
}
|
||||
void lb_ClickI(object sender, EventArgs e)
|
||||
{
|
||||
var bt = sender as Button;
|
||||
//MessageBox.Show("input click : " + bt.Tag.ToString());
|
||||
}
|
||||
void lb_ClickO(object sender, EventArgs e)
|
||||
{
|
||||
var bt = sender as Button;
|
||||
var idx = int.Parse(bt.Tag.ToString());
|
||||
dio.SetToggle(idx);
|
||||
}
|
||||
}
|
||||
}
|
||||
120
Sub/arMasterK/Project/fIOMonitor.resx
Normal file
120
Sub/arMasterK/Project/fIOMonitor.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>
|
||||
@@ -180,7 +180,6 @@ namespace vmsnet
|
||||
//
|
||||
this.BindingNavigatorPositionItem.AccessibleName = "위치";
|
||||
this.BindingNavigatorPositionItem.AutoSize = false;
|
||||
this.BindingNavigatorPositionItem.Font = new System.Drawing.Font("맑은 고딕", 9F);
|
||||
this.BindingNavigatorPositionItem.Name = "BindingNavigatorPositionItem";
|
||||
this.BindingNavigatorPositionItem.Size = new System.Drawing.Size(50, 23);
|
||||
this.BindingNavigatorPositionItem.Text = "0";
|
||||
@@ -223,7 +222,6 @@ namespace vmsnet
|
||||
//
|
||||
this.tb_search.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(192)))));
|
||||
this.tb_search.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
|
||||
this.tb_search.Font = new System.Drawing.Font("맑은 고딕", 9F);
|
||||
this.tb_search.Name = "tb_search";
|
||||
this.tb_search.Size = new System.Drawing.Size(100, 38);
|
||||
this.tb_search.KeyUp += new System.Windows.Forms.KeyEventHandler(this.ToolStripTextBox1_KeyUp);
|
||||
|
||||
@@ -191,7 +191,9 @@ namespace vmsnet
|
||||
lv.SubItems.Add(item.MAXVOLT.ToString());
|
||||
lv.SubItems.Add(item.MINVOLT.ToString());
|
||||
lv.SubItems.Add(item.ATYPESTR);
|
||||
lv.SubItems.Add(item.REMARK);
|
||||
var remark = item.REMARK;
|
||||
if (remark.isEmpty()) remark = item.AM2;
|
||||
lv.SubItems.Add(remark);
|
||||
|
||||
switch (item.RTYPESTR.ToUpper())
|
||||
{
|
||||
|
||||
@@ -361,7 +361,10 @@ namespace vmsnet
|
||||
var sttdate = PUB.TREND.graph_time_start;
|
||||
var enddate = PUB.TREND.graph_time_end;
|
||||
//각 파일 그룹별 대상 파일을 수집합니다.
|
||||
Parallel.For(0, this.ChartListData.Length - 1, i =>
|
||||
/* 작성자: 이재웅, 작성일: 2025-06-23, 내용: 0 ~ this.ChartListData.Length - 1 */
|
||||
// Parallel.For(시작값, 종료값, ...) 형태라고 했을 때, 루프 진행은 '시작값 ~ 종료값-1' 실행된다.
|
||||
// 'this.ChartListData.Length - 1' -> 'this.ChartListData.Length' 변경
|
||||
Parallel.For(0, this.ChartListData.Length, i =>
|
||||
{
|
||||
var DataFileName = $"DATAB{i + 1}";
|
||||
if (ChartListData[i].ChannelList.Any() == true) this.ChartListData[i].FileList = PUB.DB.GetfileS(DataFileName, sttdate, enddate);
|
||||
@@ -496,6 +499,7 @@ namespace vmsnet
|
||||
|
||||
//대상파일의 자료를 읽어와서 차트데이터를 구축한다.
|
||||
RecordCount = 0;
|
||||
// Parallel.For(시작값, 종료값, ...) 형태라고 했을 때, 루프 진행은 '시작값 ~ 종료값-1' 실행된다.
|
||||
Parallel.For(0, this.ChartListData.Length, i =>
|
||||
{
|
||||
ParseChDataToChart(i, ChartListData[i], DTCHLIST);
|
||||
|
||||
@@ -27,6 +27,10 @@ namespace vmsnet
|
||||
DAQDisconnected,
|
||||
DAQTryConnect,
|
||||
RefreshChart,
|
||||
/// <summary>
|
||||
/// 알람설정에서 확인을 누르면 호출됩니다.
|
||||
/// </summary>
|
||||
AlarmValueReset,
|
||||
}
|
||||
enum ConnState
|
||||
{
|
||||
|
||||
@@ -13,13 +13,13 @@ namespace vmsnet
|
||||
/// </summary>
|
||||
public byte SlaveID { get; set; } = 1; // Slave No
|
||||
|
||||
public DigitalIndicator(byte slaveID = 0) : base("", new RtuConfigure { BaudRate = 9600, DataBits = 8, StopBits = System.IO.Ports.StopBits.One, Parity = System.IO.Ports.Parity.None })
|
||||
public DigitalIndicator(byte slaveID = 1) : base("", new RtuConfigure { BaudRate = 9600, DataBits = 8, StopBits = System.IO.Ports.StopBits.One, Parity = System.IO.Ports.Parity.None })
|
||||
{
|
||||
SlaveID = slaveID;
|
||||
|
||||
}
|
||||
|
||||
public DigitalIndicator(string comPort, RtuConfigure configure, byte slaveId = 0) : base(comPort, configure)
|
||||
public DigitalIndicator(string comPort, RtuConfigure configure, byte slaveId = 1) : base(comPort, configure)
|
||||
{
|
||||
SlaveID = slaveId;
|
||||
}
|
||||
@@ -45,13 +45,6 @@ namespace vmsnet
|
||||
//return WriteValue(buffer);
|
||||
}
|
||||
|
||||
UInt16[] splitI32(Int32 value)
|
||||
{
|
||||
var hValue = (UInt16)(value >> 16); // 상위 16 Bit
|
||||
var lValue = (UInt16)(value & 0xFFFF); // 하위 16 Bit
|
||||
return new ushort[] { hValue, lValue };
|
||||
}
|
||||
|
||||
public bool WriteValue(UInt16[] values)
|
||||
{
|
||||
if (IsOpen == false)
|
||||
@@ -77,5 +70,11 @@ namespace vmsnet
|
||||
}
|
||||
}
|
||||
|
||||
UInt16[] splitI32(Int32 value)
|
||||
{
|
||||
var hValue = (UInt16)(value >> 16); // 상위 16 Bit
|
||||
var lValue = (UInt16)(value & 0xFFFF); // 하위 16 Bit
|
||||
return new ushort[] { hValue, lValue };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
116
cVMS.NET_CS/FMain.Designer.cs
generated
116
cVMS.NET_CS/FMain.Designer.cs
generated
@@ -125,16 +125,16 @@ namespace vmsnet
|
||||
this.lbPLC,
|
||||
this.lbINDI,
|
||||
this.lb_status});
|
||||
this.StatusStrip1.Location = new System.Drawing.Point(0, 747);
|
||||
this.StatusStrip1.Location = new System.Drawing.Point(0, 757);
|
||||
this.StatusStrip1.Name = "StatusStrip1";
|
||||
this.StatusStrip1.Size = new System.Drawing.Size(1561, 32);
|
||||
this.StatusStrip1.Size = new System.Drawing.Size(1561, 22);
|
||||
this.StatusStrip1.TabIndex = 1;
|
||||
this.StatusStrip1.Text = "StatusStrip1";
|
||||
//
|
||||
// lb_diskfree
|
||||
//
|
||||
this.lb_diskfree.Name = "lb_diskfree";
|
||||
this.lb_diskfree.Size = new System.Drawing.Size(122, 25);
|
||||
this.lb_diskfree.Size = new System.Drawing.Size(77, 17);
|
||||
this.lb_diskfree.Text = "<FreeSpace>";
|
||||
//
|
||||
// lb_chcount
|
||||
@@ -142,21 +142,21 @@ namespace vmsnet
|
||||
this.lb_chcount.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.lb_chcount.ForeColor = System.Drawing.Color.Navy;
|
||||
this.lb_chcount.Name = "lb_chcount";
|
||||
this.lb_chcount.Size = new System.Drawing.Size(110, 25);
|
||||
this.lb_chcount.Size = new System.Drawing.Size(73, 17);
|
||||
this.lb_chcount.Text = "<장치정보>";
|
||||
//
|
||||
// lb_msec
|
||||
//
|
||||
this.lb_msec.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.lb_msec.Name = "lb_msec";
|
||||
this.lb_msec.Size = new System.Drawing.Size(86, 25);
|
||||
this.lb_msec.Size = new System.Drawing.Size(58, 17);
|
||||
this.lb_msec.Text = "<MSEC>";
|
||||
//
|
||||
// lb_Saved
|
||||
//
|
||||
this.lb_Saved.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
|
||||
this.lb_Saved.Name = "lb_Saved";
|
||||
this.lb_Saved.Size = new System.Drawing.Size(121, 25);
|
||||
this.lb_Saved.Size = new System.Drawing.Size(79, 17);
|
||||
this.lb_Saved.Text = "<LASTSAVE>";
|
||||
this.lb_Saved.Click += new System.EventHandler(this.lb_Saved_Click);
|
||||
//
|
||||
@@ -164,7 +164,7 @@ namespace vmsnet
|
||||
//
|
||||
this.lb_alarm.ForeColor = System.Drawing.Color.Silver;
|
||||
this.lb_alarm.Name = "lb_alarm";
|
||||
this.lb_alarm.Size = new System.Drawing.Size(30, 25);
|
||||
this.lb_alarm.Size = new System.Drawing.Size(19, 17);
|
||||
this.lb_alarm.Text = "●";
|
||||
//
|
||||
// lbMonitor
|
||||
@@ -172,7 +172,7 @@ namespace vmsnet
|
||||
this.lbMonitor.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.lbMonitor.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(64)))), ((int)(((byte)(0)))));
|
||||
this.lbMonitor.Name = "lbMonitor";
|
||||
this.lbMonitor.Size = new System.Drawing.Size(125, 25);
|
||||
this.lbMonitor.Size = new System.Drawing.Size(84, 17);
|
||||
this.lbMonitor.Text = "<MONITOR>";
|
||||
//
|
||||
// lbPLC
|
||||
@@ -180,7 +180,7 @@ namespace vmsnet
|
||||
this.lbPLC.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.lbPLC.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(64)))), ((int)(((byte)(0)))));
|
||||
this.lbPLC.Name = "lbPLC";
|
||||
this.lbPLC.Size = new System.Drawing.Size(69, 25);
|
||||
this.lbPLC.Size = new System.Drawing.Size(46, 17);
|
||||
this.lbPLC.Text = "<PLC>";
|
||||
//
|
||||
// lbINDI
|
||||
@@ -188,7 +188,7 @@ namespace vmsnet
|
||||
this.lbINDI.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.lbINDI.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(64)))), ((int)(((byte)(0)))));
|
||||
this.lbINDI.Name = "lbINDI";
|
||||
this.lbINDI.Size = new System.Drawing.Size(137, 25);
|
||||
this.lbINDI.Size = new System.Drawing.Size(92, 17);
|
||||
this.lbINDI.Text = "<INDICATOR>";
|
||||
//
|
||||
// lb_status
|
||||
@@ -196,7 +196,7 @@ namespace vmsnet
|
||||
this.lb_status.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.lb_status.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(64)))), ((int)(((byte)(0)))));
|
||||
this.lb_status.Name = "lb_status";
|
||||
this.lb_status.Size = new System.Drawing.Size(104, 25);
|
||||
this.lb_status.Size = new System.Drawing.Size(70, 17);
|
||||
this.lb_status.Text = "<STATUS>";
|
||||
//
|
||||
// ToolStrip1
|
||||
@@ -251,7 +251,7 @@ namespace vmsnet
|
||||
this.btMonitorOn.Image = ((System.Drawing.Image)(resources.GetObject("btMonitorOn.Image")));
|
||||
this.btMonitorOn.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.btMonitorOn.Name = "btMonitorOn";
|
||||
this.btMonitorOn.Size = new System.Drawing.Size(168, 39);
|
||||
this.btMonitorOn.Size = new System.Drawing.Size(120, 41);
|
||||
this.btMonitorOn.Text = "Monitor On/Off";
|
||||
this.btMonitorOn.Click += new System.EventHandler(this.toolStripButton3_Click_1);
|
||||
//
|
||||
@@ -260,7 +260,7 @@ namespace vmsnet
|
||||
this.bt_fullscreen.Image = ((System.Drawing.Image)(resources.GetObject("bt_fullscreen.Image")));
|
||||
this.bt_fullscreen.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.bt_fullscreen.Name = "bt_fullscreen";
|
||||
this.bt_fullscreen.Size = new System.Drawing.Size(112, 39);
|
||||
this.bt_fullscreen.Size = new System.Drawing.Size(83, 41);
|
||||
this.bt_fullscreen.Text = "개별보기";
|
||||
this.bt_fullscreen.Click += new System.EventHandler(this.bt_fullscreen_Click);
|
||||
//
|
||||
@@ -270,7 +270,7 @@ namespace vmsnet
|
||||
this.bt_tviewr.Image = ((System.Drawing.Image)(resources.GetObject("bt_tviewr.Image")));
|
||||
this.bt_tviewr.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.bt_tviewr.Name = "bt_tviewr";
|
||||
this.bt_tviewr.Size = new System.Drawing.Size(177, 39);
|
||||
this.bt_tviewr.Size = new System.Drawing.Size(128, 41);
|
||||
this.bt_tviewr.Text = "실시간트렌드(F1)";
|
||||
this.bt_tviewr.Click += new System.EventHandler(this.ToolStripButton3_Click);
|
||||
//
|
||||
@@ -280,7 +280,7 @@ namespace vmsnet
|
||||
this.bt_tview.Image = ((System.Drawing.Image)(resources.GetObject("bt_tview.Image")));
|
||||
this.bt_tview.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.bt_tview.Name = "bt_tview";
|
||||
this.bt_tview.Size = new System.Drawing.Size(159, 39);
|
||||
this.bt_tview.Size = new System.Drawing.Size(116, 41);
|
||||
this.bt_tview.Text = "과거트렌드(F1)";
|
||||
this.bt_tview.Click += new System.EventHandler(this.ToolStripButton1_Click_2);
|
||||
//
|
||||
@@ -290,7 +290,7 @@ namespace vmsnet
|
||||
this.bt_alamhistory.Image = ((System.Drawing.Image)(resources.GetObject("bt_alamhistory.Image")));
|
||||
this.bt_alamhistory.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.bt_alamhistory.Name = "bt_alamhistory";
|
||||
this.bt_alamhistory.Size = new System.Drawing.Size(141, 39);
|
||||
this.bt_alamhistory.Size = new System.Drawing.Size(104, 41);
|
||||
this.bt_alamhistory.Text = "알람목록(F3)";
|
||||
this.bt_alamhistory.Click += new System.EventHandler(this.ToolStripButton2_Click_1);
|
||||
//
|
||||
@@ -300,7 +300,7 @@ namespace vmsnet
|
||||
this.bt_alamsetup.Image = ((System.Drawing.Image)(resources.GetObject("bt_alamsetup.Image")));
|
||||
this.bt_alamsetup.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.bt_alamsetup.Name = "bt_alamsetup";
|
||||
this.bt_alamsetup.Size = new System.Drawing.Size(141, 39);
|
||||
this.bt_alamsetup.Size = new System.Drawing.Size(104, 41);
|
||||
this.bt_alamsetup.Text = "알람설정(F4)";
|
||||
this.bt_alamsetup.Click += new System.EventHandler(this.ToolStripButton1_Click_4);
|
||||
//
|
||||
@@ -310,7 +310,7 @@ namespace vmsnet
|
||||
this.bt_save.Image = ((System.Drawing.Image)(resources.GetObject("bt_save.Image")));
|
||||
this.bt_save.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.bt_save.Name = "bt_save";
|
||||
this.bt_save.Size = new System.Drawing.Size(105, 39);
|
||||
this.bt_save.Size = new System.Drawing.Size(80, 41);
|
||||
this.bt_save.Text = "저장(F5)";
|
||||
this.bt_save.Click += new System.EventHandler(this.bt_save_Click);
|
||||
//
|
||||
@@ -319,7 +319,7 @@ namespace vmsnet
|
||||
this.ToolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("ToolStripButton2.Image")));
|
||||
this.ToolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.ToolStripButton2.Name = "ToolStripButton2";
|
||||
this.ToolStripButton2.Size = new System.Drawing.Size(141, 39);
|
||||
this.ToolStripButton2.Size = new System.Drawing.Size(104, 41);
|
||||
this.ToolStripButton2.Text = "소리끄기(F2)";
|
||||
this.ToolStripButton2.Click += new System.EventHandler(this.ToolStripButton2_Click);
|
||||
//
|
||||
@@ -329,7 +329,7 @@ namespace vmsnet
|
||||
this.bt_print.Image = ((System.Drawing.Image)(resources.GetObject("bt_print.Image")));
|
||||
this.bt_print.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.bt_print.Name = "bt_print";
|
||||
this.bt_print.Size = new System.Drawing.Size(105, 39);
|
||||
this.bt_print.Size = new System.Drawing.Size(80, 41);
|
||||
this.bt_print.Text = "인쇄(F9)";
|
||||
this.bt_print.Visible = false;
|
||||
this.bt_print.Click += new System.EventHandler(this.bt_print_Click);
|
||||
@@ -345,7 +345,7 @@ namespace vmsnet
|
||||
this.bt_show2ndwindow.Image = ((System.Drawing.Image)(resources.GetObject("bt_show2ndwindow.Image")));
|
||||
this.bt_show2ndwindow.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.bt_show2ndwindow.Name = "bt_show2ndwindow";
|
||||
this.bt_show2ndwindow.Size = new System.Drawing.Size(94, 39);
|
||||
this.bt_show2ndwindow.Size = new System.Drawing.Size(71, 41);
|
||||
this.bt_show2ndwindow.Text = "보조창";
|
||||
this.bt_show2ndwindow.Visible = false;
|
||||
this.bt_show2ndwindow.Click += new System.EventHandler(this.bt_show2ndwindow_Click);
|
||||
@@ -357,7 +357,7 @@ namespace vmsnet
|
||||
this.bt_config.Image = ((System.Drawing.Image)(resources.GetObject("bt_config.Image")));
|
||||
this.bt_config.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.bt_config.Name = "bt_config";
|
||||
this.bt_config.Size = new System.Drawing.Size(76, 39);
|
||||
this.bt_config.Size = new System.Drawing.Size(59, 41);
|
||||
this.bt_config.Text = "설정";
|
||||
this.bt_config.Click += new System.EventHandler(this.btConfig_Click);
|
||||
//
|
||||
@@ -367,7 +367,7 @@ namespace vmsnet
|
||||
this.ToolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("ToolStripButton1.Image")));
|
||||
this.ToolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.ToolStripButton1.Name = "ToolStripButton1";
|
||||
this.ToolStripButton1.Size = new System.Drawing.Size(76, 39);
|
||||
this.ToolStripButton1.Size = new System.Drawing.Size(59, 41);
|
||||
this.ToolStripButton1.Text = "정보";
|
||||
this.ToolStripButton1.Click += new System.EventHandler(this.ToolStripButton1_Click_6);
|
||||
//
|
||||
@@ -376,7 +376,7 @@ namespace vmsnet
|
||||
this.btLog.Image = ((System.Drawing.Image)(resources.GetObject("btLog.Image")));
|
||||
this.btLog.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.btLog.Name = "btLog";
|
||||
this.btLog.Size = new System.Drawing.Size(112, 29);
|
||||
this.btLog.Size = new System.Drawing.Size(83, 41);
|
||||
this.btLog.Text = "운영로그";
|
||||
this.btLog.Click += new System.EventHandler(this.toolStripButton3_Click_2);
|
||||
//
|
||||
@@ -385,7 +385,7 @@ namespace vmsnet
|
||||
this.toolStripButton3.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton3.Image")));
|
||||
this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.toolStripButton3.Name = "toolStripButton3";
|
||||
this.toolStripButton3.Size = new System.Drawing.Size(112, 29);
|
||||
this.toolStripButton3.Size = new System.Drawing.Size(83, 41);
|
||||
this.toolStripButton3.Text = "저장폴더";
|
||||
this.toolStripButton3.Click += new System.EventHandler(this.toolStripButton3_Click_3);
|
||||
//
|
||||
@@ -434,7 +434,7 @@ namespace vmsnet
|
||||
this.TableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
|
||||
this.TableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.TableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.TableLayoutPanel1.Size = new System.Drawing.Size(1561, 703);
|
||||
this.TableLayoutPanel1.Size = new System.Drawing.Size(1561, 713);
|
||||
this.TableLayoutPanel1.TabIndex = 5;
|
||||
//
|
||||
// Panel1
|
||||
@@ -455,7 +455,7 @@ namespace vmsnet
|
||||
this.cmb_tanks.FormattingEnabled = true;
|
||||
this.cmb_tanks.Location = new System.Drawing.Point(0, 0);
|
||||
this.cmb_tanks.Name = "cmb_tanks";
|
||||
this.cmb_tanks.Size = new System.Drawing.Size(657, 45);
|
||||
this.cmb_tanks.Size = new System.Drawing.Size(657, 33);
|
||||
this.cmb_tanks.TabIndex = 5;
|
||||
this.cmb_tanks.SelectedIndexChanged += new System.EventHandler(this.cmb_group_SelectedIndexChanged);
|
||||
//
|
||||
@@ -488,13 +488,13 @@ namespace vmsnet
|
||||
this.cmbt_x_gap_21600,
|
||||
this.cmbt_x_gap_43200});
|
||||
this.menus_xgap.Name = "menus_xgap";
|
||||
this.menus_xgap.Size = new System.Drawing.Size(198, 32);
|
||||
this.menus_xgap.Size = new System.Drawing.Size(150, 22);
|
||||
this.menus_xgap.Text = "X축 간격";
|
||||
//
|
||||
// cmbt_x_gap_5
|
||||
//
|
||||
this.cmbt_x_gap_5.Name = "cmbt_x_gap_5";
|
||||
this.cmbt_x_gap_5.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_gap_5.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_gap_5.Tag = "5";
|
||||
this.cmbt_x_gap_5.Text = "5초";
|
||||
//
|
||||
@@ -504,7 +504,7 @@ namespace vmsnet
|
||||
this.cmbt_x_gap_10.CheckOnClick = true;
|
||||
this.cmbt_x_gap_10.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.cmbt_x_gap_10.Name = "cmbt_x_gap_10";
|
||||
this.cmbt_x_gap_10.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_gap_10.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_gap_10.Tag = "10";
|
||||
this.cmbt_x_gap_10.Text = "10초";
|
||||
//
|
||||
@@ -512,7 +512,7 @@ namespace vmsnet
|
||||
//
|
||||
this.cmbt_x_gap_30.CheckOnClick = true;
|
||||
this.cmbt_x_gap_30.Name = "cmbt_x_gap_30";
|
||||
this.cmbt_x_gap_30.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_gap_30.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_gap_30.Tag = "30";
|
||||
this.cmbt_x_gap_30.Text = "30초";
|
||||
//
|
||||
@@ -520,14 +520,14 @@ namespace vmsnet
|
||||
//
|
||||
this.cmbt_x_gap_60.CheckOnClick = true;
|
||||
this.cmbt_x_gap_60.Name = "cmbt_x_gap_60";
|
||||
this.cmbt_x_gap_60.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_gap_60.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_gap_60.Tag = "60";
|
||||
this.cmbt_x_gap_60.Text = "1분";
|
||||
//
|
||||
// cmbt_x_gap_600
|
||||
//
|
||||
this.cmbt_x_gap_600.Name = "cmbt_x_gap_600";
|
||||
this.cmbt_x_gap_600.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_gap_600.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_gap_600.Tag = "600";
|
||||
this.cmbt_x_gap_600.Text = "10분";
|
||||
//
|
||||
@@ -535,7 +535,7 @@ namespace vmsnet
|
||||
//
|
||||
this.cmbt_x_gap_1800.CheckOnClick = true;
|
||||
this.cmbt_x_gap_1800.Name = "cmbt_x_gap_1800";
|
||||
this.cmbt_x_gap_1800.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_gap_1800.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_gap_1800.Tag = "1800";
|
||||
this.cmbt_x_gap_1800.Text = "30분";
|
||||
//
|
||||
@@ -543,7 +543,7 @@ namespace vmsnet
|
||||
//
|
||||
this.cmbt_x_gap_3600.CheckOnClick = true;
|
||||
this.cmbt_x_gap_3600.Name = "cmbt_x_gap_3600";
|
||||
this.cmbt_x_gap_3600.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_gap_3600.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_gap_3600.Tag = "3600";
|
||||
this.cmbt_x_gap_3600.Text = "1시간";
|
||||
//
|
||||
@@ -551,7 +551,7 @@ namespace vmsnet
|
||||
//
|
||||
this.cmbt_x_gap_21600.CheckOnClick = true;
|
||||
this.cmbt_x_gap_21600.Name = "cmbt_x_gap_21600";
|
||||
this.cmbt_x_gap_21600.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_gap_21600.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_gap_21600.Tag = "21600";
|
||||
this.cmbt_x_gap_21600.Text = "6시간";
|
||||
//
|
||||
@@ -559,7 +559,7 @@ namespace vmsnet
|
||||
//
|
||||
this.cmbt_x_gap_43200.CheckOnClick = true;
|
||||
this.cmbt_x_gap_43200.Name = "cmbt_x_gap_43200";
|
||||
this.cmbt_x_gap_43200.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_gap_43200.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_gap_43200.Tag = "43200";
|
||||
this.cmbt_x_gap_43200.Text = "12시간";
|
||||
//
|
||||
@@ -571,14 +571,14 @@ namespace vmsnet
|
||||
this.cmbt_x_21600,
|
||||
this.cmbt_x_43200});
|
||||
this.menus_xterm.Name = "menus_xterm";
|
||||
this.menus_xterm.Size = new System.Drawing.Size(198, 32);
|
||||
this.menus_xterm.Size = new System.Drawing.Size(150, 22);
|
||||
this.menus_xterm.Text = "X축 범위";
|
||||
//
|
||||
// cmbt_x_1800
|
||||
//
|
||||
this.cmbt_x_1800.CheckOnClick = true;
|
||||
this.cmbt_x_1800.Name = "cmbt_x_1800";
|
||||
this.cmbt_x_1800.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_1800.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_1800.Tag = "1800";
|
||||
this.cmbt_x_1800.Text = "30분";
|
||||
//
|
||||
@@ -588,7 +588,7 @@ namespace vmsnet
|
||||
this.cmbt_x_3600.CheckOnClick = true;
|
||||
this.cmbt_x_3600.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.cmbt_x_3600.Name = "cmbt_x_3600";
|
||||
this.cmbt_x_3600.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_3600.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_3600.Tag = "3600";
|
||||
this.cmbt_x_3600.Text = "1시간";
|
||||
//
|
||||
@@ -596,7 +596,7 @@ namespace vmsnet
|
||||
//
|
||||
this.cmbt_x_21600.CheckOnClick = true;
|
||||
this.cmbt_x_21600.Name = "cmbt_x_21600";
|
||||
this.cmbt_x_21600.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_21600.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_21600.Tag = "21600";
|
||||
this.cmbt_x_21600.Text = "6시간";
|
||||
//
|
||||
@@ -604,7 +604,7 @@ namespace vmsnet
|
||||
//
|
||||
this.cmbt_x_43200.CheckOnClick = true;
|
||||
this.cmbt_x_43200.Name = "cmbt_x_43200";
|
||||
this.cmbt_x_43200.Size = new System.Drawing.Size(170, 34);
|
||||
this.cmbt_x_43200.Size = new System.Drawing.Size(112, 22);
|
||||
this.cmbt_x_43200.Tag = "43200";
|
||||
this.cmbt_x_43200.Text = "12시간";
|
||||
//
|
||||
@@ -618,14 +618,14 @@ namespace vmsnet
|
||||
this.cmbt_y_2_0,
|
||||
this.cmbt_y_5_0});
|
||||
this.menus_ygap.Name = "menus_ygap";
|
||||
this.menus_ygap.Size = new System.Drawing.Size(198, 32);
|
||||
this.menus_ygap.Size = new System.Drawing.Size(150, 22);
|
||||
this.menus_ygap.Text = "Y축 간격";
|
||||
//
|
||||
// cmbt_y_0_1
|
||||
//
|
||||
this.cmbt_y_0_1.CheckOnClick = true;
|
||||
this.cmbt_y_0_1.Name = "cmbt_y_0_1";
|
||||
this.cmbt_y_0_1.Size = new System.Drawing.Size(138, 34);
|
||||
this.cmbt_y_0_1.Size = new System.Drawing.Size(91, 22);
|
||||
this.cmbt_y_0_1.Tag = "0.1";
|
||||
this.cmbt_y_0_1.Text = "0.1";
|
||||
//
|
||||
@@ -635,7 +635,7 @@ namespace vmsnet
|
||||
this.cmbt_y_0_5.CheckOnClick = true;
|
||||
this.cmbt_y_0_5.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||
this.cmbt_y_0_5.Name = "cmbt_y_0_5";
|
||||
this.cmbt_y_0_5.Size = new System.Drawing.Size(138, 34);
|
||||
this.cmbt_y_0_5.Size = new System.Drawing.Size(91, 22);
|
||||
this.cmbt_y_0_5.Tag = "0.5";
|
||||
this.cmbt_y_0_5.Text = "0.5";
|
||||
//
|
||||
@@ -643,7 +643,7 @@ namespace vmsnet
|
||||
//
|
||||
this.cmbt_y_1_0.CheckOnClick = true;
|
||||
this.cmbt_y_1_0.Name = "cmbt_y_1_0";
|
||||
this.cmbt_y_1_0.Size = new System.Drawing.Size(138, 34);
|
||||
this.cmbt_y_1_0.Size = new System.Drawing.Size(91, 22);
|
||||
this.cmbt_y_1_0.Tag = "1.0";
|
||||
this.cmbt_y_1_0.Text = "1.0";
|
||||
//
|
||||
@@ -651,7 +651,7 @@ namespace vmsnet
|
||||
//
|
||||
this.cmbt_y_1_5.CheckOnClick = true;
|
||||
this.cmbt_y_1_5.Name = "cmbt_y_1_5";
|
||||
this.cmbt_y_1_5.Size = new System.Drawing.Size(138, 34);
|
||||
this.cmbt_y_1_5.Size = new System.Drawing.Size(91, 22);
|
||||
this.cmbt_y_1_5.Tag = "1.5";
|
||||
this.cmbt_y_1_5.Text = "1.5";
|
||||
//
|
||||
@@ -659,7 +659,7 @@ namespace vmsnet
|
||||
//
|
||||
this.cmbt_y_2_0.CheckOnClick = true;
|
||||
this.cmbt_y_2_0.Name = "cmbt_y_2_0";
|
||||
this.cmbt_y_2_0.Size = new System.Drawing.Size(138, 34);
|
||||
this.cmbt_y_2_0.Size = new System.Drawing.Size(91, 22);
|
||||
this.cmbt_y_2_0.Tag = "2.0";
|
||||
this.cmbt_y_2_0.Text = "2.0";
|
||||
//
|
||||
@@ -667,38 +667,38 @@ namespace vmsnet
|
||||
//
|
||||
this.cmbt_y_5_0.CheckOnClick = true;
|
||||
this.cmbt_y_5_0.Name = "cmbt_y_5_0";
|
||||
this.cmbt_y_5_0.Size = new System.Drawing.Size(138, 34);
|
||||
this.cmbt_y_5_0.Size = new System.Drawing.Size(91, 22);
|
||||
this.cmbt_y_5_0.Tag = "5.0";
|
||||
this.cmbt_y_5_0.Text = "5.0";
|
||||
//
|
||||
// ToolStripMenuItem2
|
||||
//
|
||||
this.ToolStripMenuItem2.Name = "ToolStripMenuItem2";
|
||||
this.ToolStripMenuItem2.Size = new System.Drawing.Size(195, 6);
|
||||
this.ToolStripMenuItem2.Size = new System.Drawing.Size(147, 6);
|
||||
//
|
||||
// menus_winsize
|
||||
//
|
||||
this.menus_winsize.Name = "menus_winsize";
|
||||
this.menus_winsize.Size = new System.Drawing.Size(198, 32);
|
||||
this.menus_winsize.Size = new System.Drawing.Size(150, 22);
|
||||
this.menus_winsize.Text = "창 크기";
|
||||
//
|
||||
// GraphReSetToolStripMenuItem
|
||||
//
|
||||
this.GraphReSetToolStripMenuItem.Name = "GraphReSetToolStripMenuItem";
|
||||
this.GraphReSetToolStripMenuItem.Size = new System.Drawing.Size(198, 32);
|
||||
this.GraphReSetToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
|
||||
this.GraphReSetToolStripMenuItem.Text = "그래프 초기화";
|
||||
this.GraphReSetToolStripMenuItem.Click += new System.EventHandler(this.GraphReSetToolStripMenuItem_Click);
|
||||
//
|
||||
// ToolStripMenuItem3
|
||||
//
|
||||
this.ToolStripMenuItem3.Name = "ToolStripMenuItem3";
|
||||
this.ToolStripMenuItem3.Size = new System.Drawing.Size(195, 6);
|
||||
this.ToolStripMenuItem3.Size = new System.Drawing.Size(147, 6);
|
||||
//
|
||||
// DataPointToolStripMenuItem
|
||||
//
|
||||
this.DataPointToolStripMenuItem.CheckOnClick = true;
|
||||
this.DataPointToolStripMenuItem.Name = "DataPointToolStripMenuItem";
|
||||
this.DataPointToolStripMenuItem.Size = new System.Drawing.Size(198, 32);
|
||||
this.DataPointToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
|
||||
this.DataPointToolStripMenuItem.Text = "Data Point";
|
||||
this.DataPointToolStripMenuItem.Click += new System.EventHandler(this.DataPointToolStripMenuItem_Click);
|
||||
//
|
||||
@@ -707,14 +707,14 @@ namespace vmsnet
|
||||
this.DebugMsgToolStripMenuItem.CheckOnClick = true;
|
||||
this.DebugMsgToolStripMenuItem.ForeColor = System.Drawing.Color.Gray;
|
||||
this.DebugMsgToolStripMenuItem.Name = "DebugMsgToolStripMenuItem";
|
||||
this.DebugMsgToolStripMenuItem.Size = new System.Drawing.Size(198, 32);
|
||||
this.DebugMsgToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
|
||||
this.DebugMsgToolStripMenuItem.Text = "Debug Msg";
|
||||
this.DebugMsgToolStripMenuItem.Click += new System.EventHandler(this.DebugMsgToolStripMenuItem_Click);
|
||||
//
|
||||
// ToolStripMenuItem4
|
||||
//
|
||||
this.ToolStripMenuItem4.Name = "ToolStripMenuItem4";
|
||||
this.ToolStripMenuItem4.Size = new System.Drawing.Size(195, 6);
|
||||
this.ToolStripMenuItem4.Size = new System.Drawing.Size(147, 6);
|
||||
//
|
||||
// cm1
|
||||
//
|
||||
@@ -731,7 +731,7 @@ namespace vmsnet
|
||||
this.DebugMsgToolStripMenuItem,
|
||||
this.ToolStripMenuItem4});
|
||||
this.cm1.Name = "ContextMenuStrip1";
|
||||
this.cm1.Size = new System.Drawing.Size(199, 246);
|
||||
this.cm1.Size = new System.Drawing.Size(151, 176);
|
||||
//
|
||||
// documentElement1
|
||||
//
|
||||
@@ -745,7 +745,7 @@ namespace vmsnet
|
||||
//
|
||||
// FMain
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 22F);
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(1561, 779);
|
||||
this.Controls.Add(this.TableLayoutPanel1);
|
||||
|
||||
@@ -96,7 +96,7 @@ namespace vmsnet
|
||||
this.DispCtrl1.Size = new System.Drawing.Size(774, 699);
|
||||
this.DispCtrl1.TabIndex = 3;
|
||||
this.DispCtrl1.Times = null;
|
||||
this.DispCtrl1.Values = null;
|
||||
this.DispCtrl1._Values = null;
|
||||
this.DispCtrl1.OnAlamChange += DispCtrl1_OnAlamChangeL;
|
||||
this.DispCtrl1.OnChangedShowIndex += DispCtrl1_OnChangedShowIndex;
|
||||
this.DispCtrl1.OnClickCell += DispCtrl1_OnClickCell;
|
||||
@@ -766,7 +766,34 @@ namespace vmsnet
|
||||
|
||||
private void Pub_RemoteCommandEvent(object sender, RemoteCommand e)
|
||||
{
|
||||
if (e.Command == rCommand.StateMessage)
|
||||
if(e.Command == rCommand.AlarmValueReset)
|
||||
{
|
||||
////auto로 된 그룹의 기준값을 변경한다.
|
||||
this.DispCtrl1.SuspendLayout();
|
||||
foreach (HMI.CGROUP c in DispCtrl1.GROUPS)
|
||||
{
|
||||
if (c.AlarmType == "AUTO")
|
||||
{
|
||||
////이그룹을 사용하는 모든셀의 auto값을 초기화한다.
|
||||
foreach (HMI.CITEM i in c.Items)
|
||||
{
|
||||
i.alamv = -999;
|
||||
}
|
||||
}
|
||||
else if (c.AlarmType == "STOP")
|
||||
{
|
||||
c._alamcount = (short)0;
|
||||
c._alamcountlb = (short)0;
|
||||
}
|
||||
}
|
||||
this.DispCtrl1._raise_alarm_pre = true; ////혹알람이 발생되어있을지 모르니. 끄도록 발생한것 처럼 표시해준다.
|
||||
this.DispCtrl1.ResumeLayout();
|
||||
this.DispCtrl1.Invalidate();
|
||||
|
||||
////설정정보를 가져온다.
|
||||
PUB.SaveConfigFile("GRP");
|
||||
}
|
||||
else if (e.Command == rCommand.StateMessage)
|
||||
{
|
||||
var msg = e.Data.ToString();
|
||||
if (PUB.lastStatueMessage.Equals(msg) == false)
|
||||
@@ -1222,7 +1249,8 @@ namespace vmsnet
|
||||
if (maxunno < 0) maxunno = 5;
|
||||
if (maxchno < 0) maxchno = 59;
|
||||
|
||||
PUB.Values = new int[maxmcno + 1, maxunno + 1, maxchno + 1];
|
||||
PUB._Values = new int[maxmcno + 1, maxunno + 1, maxchno + 1];
|
||||
PUB.Received = new bool[maxmcno + 1, maxunno + 1, maxchno + 1];
|
||||
PUB.Times = new string[maxmcno + 1, maxunno + 1, maxchno + 1];
|
||||
PUB.ChNos = new int[maxmcno + 1, maxunno + 1, maxchno + 1];
|
||||
PUB.ChVOffset = new float[maxmcno + 1, maxunno + 1, maxchno + 1];
|
||||
@@ -1236,7 +1264,8 @@ namespace vmsnet
|
||||
{
|
||||
for (int k = 0; k <= maxchno; k++)
|
||||
{
|
||||
PUB.Values[c, i, k] = 0;
|
||||
PUB._Values[c, i, k] = 0;
|
||||
PUB.Received[c, i, k] = false;
|
||||
PUB.Times[c, i, k] = "";
|
||||
PUB.ChVOffset[c, i, k] = 0f;
|
||||
PUB.ChDecPos[c, i, k] = 0;
|
||||
@@ -1262,7 +1291,8 @@ namespace vmsnet
|
||||
PUB.StatusMSG("Ready...");
|
||||
this.DispCtrl1.initmsg = "Complete";
|
||||
this.DispCtrl1.init = true;
|
||||
this.DispCtrl1.Values = PUB.Values;
|
||||
this.DispCtrl1._Values = PUB._Values;
|
||||
this.DispCtrl1.Received = PUB.Received;
|
||||
this.DispCtrl1.Times = PUB.Times;
|
||||
this.DispCtrl1.SmallSize = PUB.CONFIG.viewSize; ////개별표시모드일떄 사용하는 윈도우의 크기
|
||||
this.DispCtrl1.FullScreen = true;
|
||||
@@ -1560,41 +1590,22 @@ namespace vmsnet
|
||||
{
|
||||
PUB.log.Add(AR.Log.ETYPE.NORMAL, "알람설정화면확인");
|
||||
|
||||
////auto로 된 그룹의 기준값을 변경한다.
|
||||
this.DispCtrl1.SuspendLayout();
|
||||
foreach (HMI.CGROUP c in DispCtrl1.GROUPS)
|
||||
{
|
||||
if (c.AlarmType == "AUTO")
|
||||
{
|
||||
////이그룹을 사용하는 모든셀의 auto값을 초기화한다.
|
||||
foreach (HMI.CITEM i in c.Items)
|
||||
{
|
||||
i.alamv = -999;
|
||||
}
|
||||
}
|
||||
else if (c.AlarmType == "STOP")
|
||||
{
|
||||
c._alamcount = (short)0;
|
||||
c._alamcountlb = (short)0;
|
||||
}
|
||||
}
|
||||
this.DispCtrl1._raise_alarm_pre = true; ////혹알람이 발생되어있을지 모르니. 끄도록 발생한것 처럼 표시해준다.
|
||||
this.DispCtrl1.ResumeLayout();
|
||||
this.DispCtrl1.Invalidate();
|
||||
|
||||
|
||||
////설정정보를 가져온다.
|
||||
PUB.RaiseRemoteCommandEvent(rCommand.AlarmValueReset);
|
||||
|
||||
////설정정보를 가져온다(저장은 메인에서만 진행한다)
|
||||
PUB.SaveConfigFile("GRP");
|
||||
|
||||
//각 창별로 window1.grp / window2.grp 의 파일에 그룹상태를 저장 합니다
|
||||
PUB.RaiseRemoteCommandEvent(rCommand.SaveGroupClass);
|
||||
}
|
||||
}
|
||||
|
||||
private void DispCtrl1_OnAlamChangeL(int ch, COMM.EALAMRAISETYPE ison, COMM.EALAMTYPE atype, string AM, float value, float maxvalue, float minvalue)
|
||||
private void DispCtrl1_OnAlamChangeL(int ch, COMM.EALAMRAISETYPE ison, COMM.EALAMTYPE atype, string AM, float value, float maxvalue, float minvalue, string remark)
|
||||
{
|
||||
TimeSpan ts = DateTime.Now - PUB.StartupTime;
|
||||
if (ts.TotalSeconds < PUB.CONFIG.Startup_DelayTime_Alam) return;
|
||||
|
||||
bool rlt = PUB.Alarm.InsertData(DateTime.Now, ch, ison, value, atype, maxvalue, minvalue, AM, "");
|
||||
bool rlt = PUB.Alarm.InsertData(DateTime.Now, ch, ison, value, atype, maxvalue, minvalue, AM, remark);
|
||||
PUB.log.Add(AR.Log.ETYPE.NORMAL, "알람이 발생되었습니다(ch=" + ch.ToString() + ",type=" + ison.ToString() + ", value=" + value.ToString() + ", min=:" + minvalue.ToString() + ",max=" + maxvalue.ToString() + ",atype=" + atype.ToString() + " ,am=" + AM);
|
||||
}
|
||||
|
||||
@@ -2249,7 +2260,7 @@ namespace vmsnet
|
||||
|
||||
if (PUB.indicator != null && PUB.indicator.IsOpen)
|
||||
{
|
||||
this.lbINDI.ForeColor = Color.green;
|
||||
this.lbINDI.ForeColor = Color.Green;
|
||||
}
|
||||
else if (PUB.CONFIG.indicator_port.isEmpty())
|
||||
{
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
<data name="btMonitorOn.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAHWSURBVFhH7ZZbSwJBFIB76uf1Ft2IIsr3HiSMYCGtrMCF
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHWSURBVFhH7ZZbSwJBFIB76uf1Ft2IIsr3HiSMYCGtrMCF
|
||||
qIeoKLKXpCACCzQvPXQxKkMLbw9lkUaUl0goEk+cBSVnJNedHVhxD3ysO+dw5mPc2dm2Nj1aIQwmEbRI
|
||||
lWDsAzRF6whG8yVqTA1UEYzmAaYcIelK5lhRRdARSEHHuBP2b16pHCvMgpFsCYbm/WDZDsHo8jmVZ4VZ
|
||||
cN33AMbVC4jkSjBg9YIrmqVqWGASDL8XoW/6CDyJnHS/5r2Hic1rqo4FJsHFgzgIW8HKfThThF6LG06S
|
||||
@@ -141,7 +141,7 @@
|
||||
<data name="bt_fullscreen.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAN3SURBVFhHxVdNU5JRGGWmae30D5qWzdSiVYt+UsuaaRUG
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAN3SURBVFhHxVdNU5JRGGWmae30D5qWzdSiVYt+UsuaaRUG
|
||||
oqVglmk600wbEcOPQgWV1D4EDFFEU0iwaVEivECh0vo0z/147+WtxqEJvDNnnuc55zz3npcdtmBkBWcJ
|
||||
2zPfKM7q0NsswNbnfdz0xFsKelMF2M/BM1PCwHINg0s1DC7/5FX2xJtajfsYhE/3MI5mfY/3tDew/BO9
|
||||
s2Wk9nMqQGo/C/d0CU8WaxhYPDGr7PmsV64xLBE4z/3E1/CEcXKfcxKemTJSOS3AZi6LnoCB/vAJ+l8T
|
||||
@@ -162,7 +162,7 @@
|
||||
<data name="bt_tviewr.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAabSURBVFhHxZZ7TJPnHsebtGR/9X1fL2e4oUXdzbk5F8yS
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAabSURBVFhHxZZ7TJPnHsebtGR/9X1fL2e4oUXdzbk5F8yS
|
||||
ZX9syXL+ODnJsmRZsi05Wc7x7MwYLwg6pyCCWIsoskIvMCdoubQUaAuVuakIKrch4AUt9ykXQQdt3xZ2
|
||||
Ocv++C6/533bQhnbjFv2JJ98f8/z/B5+n0BKqlAoFArjlcUFZo/mW/Ot1d+aPQtz/Hqcl/r/8GVq1+CH
|
||||
H79D/495CzL6fwvrMV/RIPr9Qy/TVxq0BTbj9D3hV6Ee6o1+/9DL2KZBa+CDeQOjaQ18CEPbij9eIL9F
|
||||
@@ -196,7 +196,7 @@
|
||||
<data name="bt_tview.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAabSURBVFhHxZZ7TJPnHsebtGR/9X1fL2e4oUXdzbk5F8yS
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAabSURBVFhHxZZ7TJPnHsebtGR/9X1fL2e4oUXdzbk5F8yS
|
||||
ZX9syXL+ODnJsmRZsi05Wc7x7MwYLwg6pyCCWIsoskIvMCdoubQUaAuVuakIKrch4AUt9ykXQQdt3xZ2
|
||||
Ocv++C6/533bQhnbjFv2JJ98f8/z/B5+n0BKqlAoFArjlcUFZo/mW/Ot1d+aPQtz/Hqcl/r/8GVq1+CH
|
||||
H79D/495CzL6fwvrMV/RIPr9Qy/TVxq0BTbj9D3hV6Ee6o1+/9DL2KZBa+CDeQOjaQ18CEPbij9eIL9F
|
||||
@@ -230,7 +230,7 @@
|
||||
<data name="bt_alamhistory.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAURSURBVFhHzZdrTFNnGMfPl1JEuVgEBPHjsuzDkmVR5KLz
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAURSURBVFhHzZdrTFNnGMfPl1JEuVgEBPHjsuzDkmVR5KLz
|
||||
wihjkswblDvIRLkVRWRKxKHC4ubinDA3gmxzm1uMcSbKnRYEdcNt6jbNlkyBFitTTIhZtnMBNf/ledtT
|
||||
T0/LqJsme5Jfctr35f97nvccTlKOe8zKrth2JKdiGzxBa+r9T7yytpSj49drHqE19f4nXmmlRqzZUOCR
|
||||
dGPZf2+gYWXgwAcrA0A0JAegYWUgjNl6pBQWOcmtqPBISpG8pxhl2XrkxoU7Muw5lK32udWhVwPwy75o
|
||||
@@ -258,7 +258,7 @@
|
||||
<data name="bt_alamsetup.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAQnSURBVFhH5ZRtTFtVGICvGmWM9t5aWlhpy8DCNrdg2CaE
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAQnSURBVFhH5ZRtTFtVGICvGmWM9t5aWlhpy8DCNrdg2CaE
|
||||
xTBds8yEAD+Y7I+LxsQ/ix9Rf6gM2IlO4seQxkAyWaeMkU23AWNsOj6EIsOJM87p5n4QF8JaPlrarkDv
|
||||
Z0dfcw+jrqdU0RUS45M86cn7vud9z217D0X9l/E1Gp72HdWXkvFlYbRet9LXYJy5dYzhpxpTEsn8kuNt
|
||||
0tWwtp3A9ZeC75j+JJlfUtxNeoOzTisGpRmAWQlGj+skzxHjBrJuyfAc0fXwP70O0o+FEPj1BRB+fgNu
|
||||
@@ -282,7 +282,7 @@
|
||||
<data name="bt_save.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAARxSURBVFhH7ZdLU5tVGMffGfd+BBeV3BNyIRBCSEIuJAYw
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAARxSURBVFhH7ZdLU5tVGMffGfd+BBeV3BNyIRBCSEIuJAYw
|
||||
NCUEEgLFta2fwZ0b9QPIzo2u2xm/gE21jtpAKFCqrhzMmwsJWlfJzN95znvOe81ohym6MTO/eS7nOc//
|
||||
z5sQBkn6/8Vftd33DtKZHFKZHChW6/vI5VdZ/tWjR9fi1z9eIhyOqDsplstbtXz+XY9ZX6KBjz/5FO/f
|
||||
+4AhDFD+52h0bcrlirqT9gsTZn0plV5GdWefCdd4JAO1+l38fHWFX66GPOoZGnKfP6Ai7uTyK6jt3GU7
|
||||
@@ -307,7 +307,7 @@
|
||||
<data name="ToolStripButton2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAABhKSURBVHhe7ZsHWFRnusePTKNPodo3btpqNsmmGDXqKGAn
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAABhKSURBVHhe7ZsHWFRnusePTKNPodo3btpqNsmmGDXqKGAn
|
||||
ighIUVFEyoBi1Giqxxg1mtx0o4nZ7M1zn81uNru5WVEULBkLxUKRIjAz1KHXoYiFMu993u+cM3PmMKhp
|
||||
u/c+z/2e5x8IzJzv/f3f93u/7xxGivr/8euOEo2Xa3mycpE+SfmWXqM8a9C41+sTXG7oNco7+iRlP5FG
|
||||
eac8ybXPEK9sNSQoLukSlR+UJytXlmi8fIXX+z8x9BtV43SJyl3lGtdahKuO9hpo3PEAtNKPQef+56Hr
|
||||
@@ -417,7 +417,7 @@
|
||||
<data name="bt_print.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAStSURBVFhH7ZZdTJNnFMef290sS1x0zhgXhyjJLiZ6sezG
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAStSURBVFhH7ZZdTJNnFMef290sS1x0zhgXhyjJLiZ6sezG
|
||||
i3lBtt3uauFmcOHHPmI2dS4a2OIUiZluUTTSCPJhUWiLtWhtpaXY10Kp5cMWaCms6MAXBhQtgn2r7385
|
||||
z9sX6OuIkXLpSX455zznec7/n6ZNytibeEXUemJYLpc9MWj3vXbUeqYgPEjC/SAJYViCeziZ6iUIVA+r
|
||||
OclnHH43CX3bShhoi+HOsITWqIQ70STPan2H5wWUmXKH+isdjzM3oG+fhutvCS1RCS2UOcn5zGdpZwt9
|
||||
@@ -443,7 +443,7 @@
|
||||
<data name="bt_show2ndwindow.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAKdSURBVFhH7VZNiFJRGJ2IVm2CZhtEwQRBi1kEMQgR0SKC
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAKdSURBVFhH7VZNiFJRGJ2IVm2CZhtEwQRBi1kEMQgR0SKC
|
||||
DDT8QXETTjUQBEbSgJY1Qw5MpFPTQsRUEMRZWptIazdOZUbgH4Wlgz+0mfwhCfGL8/A6+Urn3lYtPHDA
|
||||
B98597z7Xe/3JibGGEMMu8xm8x6DwbDXZDLtMxqN+3U63eQooga10EALD7kpN2AAM71ef0ir1U5rNJoZ
|
||||
nU6nGEXUoBYaaHsh/g14CxidcWxETy99IRFCAy085L7cwBvgbU7dL5B3/Se9yHa4iFpooIWH3FeOoX3W
|
||||
@@ -460,7 +460,7 @@
|
||||
<data name="bt_config.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAZRSURBVFhH7VZtbJNVFFZBiB/RiJqgIgnR+MPEGENMNFGr
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAZRSURBVFhH7VZtbJNVFFZBiB/RiJqgIgnR+MPEGENMNFGr
|
||||
P0gwkMhi3/ZtmfCDhF+SEsJYM5KVZS9h61YCtBS6FTbavm1vu0/YLOvWbl1Hxz7Y+NiAsQ8YX4PBNhJ/
|
||||
+MOYa54Lt3n7jlXR+M+TPLlv7z3nPOeee869fe65/+UfCiFkSzgc7n+CJCHEqNb5z4QQ8nMsFqN37txh
|
||||
uHXrFm1tbaWEkJ/Uuv9aCCGfBINBZzAYtBFCPiSErPL7/cM3b96kjx49ojMzM2ycmJiggUAgRQh5jxDy
|
||||
@@ -493,7 +493,7 @@
|
||||
<data name="ToolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAciSURBVFhHnZZpTFvZGYaPqnbU0bSj/pi2U3VRR6qqVmql
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAciSURBVFhHnZZpTFvZGYaPqnbU0bSj/pi2U3VRR6qqVmql
|
||||
VqPOn0oz/VFV7Y+2qhS1Umc0SaWpqqQzUaTQkGDwZQ2MbQgkQMxqwLsD2GwhkBAgJGEnYTcQNmNj3+vl
|
||||
egFvhLzVuRMssB1D+0mPrOv7nvd7z3euF0JOWMV6y+syk/NP0hZOITM6JiQt3IrMyEGghVuj78laWbXE
|
||||
5PhLuYH9Wvz6/7skBvZtWQtbyxi5YGmHE4oHPhinQxjdjGCRjcaY3Iqg6VEAZZ0uUK2slWsqavf8IN7v
|
||||
@@ -530,7 +530,7 @@
|
||||
<data name="btLog.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAJSSURBVFhH7db/axJxHMfx/RH9Ff3aH2A/7dym5mhBQo2x
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJSSURBVFhH7db/axJxHMfx/RH9Ff3aH2A/7dym5mhBQo2x
|
||||
+qkf+qEvPw9ibDs9XYOVtVoz2qDol9jI6CfDOu+805mVFfNkWBq1wNWuaNO5V3wEZX7COXc7Peie8P5B
|
||||
TvTBh7d3dnWZ/S8xEwKMNLSvArwVKxtiTKDWMYFapyHQKJlArZlArZlArbUMvLKQqns96F/+5+He6pDP
|
||||
aBS5Tvv2BLY7E6i14duJ1oDt3kES7dsT2IlonyGAyexPnL+TxAmfBIdHembjYkcMAwyEP8HpleHn1/Hk
|
||||
@@ -546,7 +546,7 @@
|
||||
<data name="toolStripButton3.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAC6SURBVFhHY2AYBaNgEIBpVS7/icY1Lr3o+mkOQBbf3pBK
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAC6SURBVFhHY2AYBaNgEIBpVS7/icY1Lr3o+mkOQBbf3pBK
|
||||
EF9dk/x/Wr3nlxlVLn3oZtAUEOvAAXMkKQ4E4fMrEv/X12n9wYh+KmOyHHhkXtT/uQ0e//fMjv3/8XTz
|
||||
/6/nWmmCMRxILF7S5vv/wZ5yDAOpjTEciK5goPGoAynFow6kFI86kFI86kBK8agDKcWjDqQUjzqQUjzq
|
||||
QErxqAMpxaMOpBSPOpBSPOpASjGGAwcjhjtwFIyCAQQAl/T9hdakfvYAAAAASUVORK5CYII=
|
||||
|
||||
24
cVMS.NET_CS/Frm_Sub.Designer.cs
generated
24
cVMS.NET_CS/Frm_Sub.Designer.cs
generated
@@ -72,9 +72,9 @@ namespace vmsnet
|
||||
this.lb_status,
|
||||
this.lb_lasttime,
|
||||
this.lb_alarm});
|
||||
this.StatusStrip1.Location = new System.Drawing.Point(0, 750);
|
||||
this.StatusStrip1.Location = new System.Drawing.Point(0, 744);
|
||||
this.StatusStrip1.Name = "StatusStrip1";
|
||||
this.StatusStrip1.Size = new System.Drawing.Size(929, 26);
|
||||
this.StatusStrip1.Size = new System.Drawing.Size(929, 32);
|
||||
this.StatusStrip1.TabIndex = 1;
|
||||
this.StatusStrip1.Text = "StatusStrip1";
|
||||
//
|
||||
@@ -83,7 +83,7 @@ namespace vmsnet
|
||||
this.lb_status.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.lb_status.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(64)))), ((int)(((byte)(0)))));
|
||||
this.lb_status.Name = "lb_status";
|
||||
this.lb_status.Size = new System.Drawing.Size(130, 20);
|
||||
this.lb_status.Size = new System.Drawing.Size(155, 25);
|
||||
this.lb_status.Text = "<SUBWINDOW>";
|
||||
//
|
||||
// lb_lasttime
|
||||
@@ -91,14 +91,14 @@ namespace vmsnet
|
||||
this.lb_lasttime.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.lb_lasttime.ForeColor = System.Drawing.Color.Gray;
|
||||
this.lb_lasttime.Name = "lb_lasttime";
|
||||
this.lb_lasttime.Size = new System.Drawing.Size(103, 20);
|
||||
this.lb_lasttime.Size = new System.Drawing.Size(123, 25);
|
||||
this.lb_lasttime.Text = "<LASTTIME>";
|
||||
//
|
||||
// lb_alarm
|
||||
//
|
||||
this.lb_alarm.ForeColor = System.Drawing.Color.Silver;
|
||||
this.lb_alarm.Name = "lb_alarm";
|
||||
this.lb_alarm.Size = new System.Drawing.Size(24, 20);
|
||||
this.lb_alarm.Size = new System.Drawing.Size(30, 25);
|
||||
this.lb_alarm.Text = "●";
|
||||
//
|
||||
// Timer1
|
||||
@@ -151,7 +151,7 @@ namespace vmsnet
|
||||
this.TableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 35F));
|
||||
this.TableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.TableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F));
|
||||
this.TableLayoutPanel1.Size = new System.Drawing.Size(929, 706);
|
||||
this.TableLayoutPanel1.Size = new System.Drawing.Size(929, 700);
|
||||
this.TableLayoutPanel1.TabIndex = 6;
|
||||
//
|
||||
// panel1
|
||||
@@ -172,7 +172,7 @@ namespace vmsnet
|
||||
this.cmb_tanks.FormattingEnabled = true;
|
||||
this.cmb_tanks.Location = new System.Drawing.Point(0, 0);
|
||||
this.cmb_tanks.Name = "cmb_tanks";
|
||||
this.cmb_tanks.Size = new System.Drawing.Size(341, 38);
|
||||
this.cmb_tanks.Size = new System.Drawing.Size(341, 45);
|
||||
this.cmb_tanks.TabIndex = 5;
|
||||
this.cmb_tanks.SelectedIndexChanged += new System.EventHandler(this.cmb_group_SelectedIndexChanged);
|
||||
//
|
||||
@@ -229,7 +229,7 @@ namespace vmsnet
|
||||
this.bt_fullscreen.Image = ((System.Drawing.Image)(resources.GetObject("bt_fullscreen.Image")));
|
||||
this.bt_fullscreen.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.bt_fullscreen.Name = "bt_fullscreen";
|
||||
this.bt_fullscreen.Size = new System.Drawing.Size(97, 41);
|
||||
this.bt_fullscreen.Size = new System.Drawing.Size(112, 39);
|
||||
this.bt_fullscreen.Text = "개별보기";
|
||||
this.bt_fullscreen.Click += new System.EventHandler(this.bt_fullscreen_Click);
|
||||
//
|
||||
@@ -239,7 +239,7 @@ namespace vmsnet
|
||||
this.bt_tviewr.Image = ((System.Drawing.Image)(resources.GetObject("bt_tviewr.Image")));
|
||||
this.bt_tviewr.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.bt_tviewr.Name = "bt_tviewr";
|
||||
this.bt_tviewr.Size = new System.Drawing.Size(152, 41);
|
||||
this.bt_tviewr.Size = new System.Drawing.Size(177, 39);
|
||||
this.bt_tviewr.Text = "실시간트렌드(F1)";
|
||||
this.bt_tviewr.Click += new System.EventHandler(this.bt_tviewr_Click);
|
||||
//
|
||||
@@ -249,7 +249,7 @@ namespace vmsnet
|
||||
this.bt_save.Image = ((System.Drawing.Image)(resources.GetObject("bt_save.Image")));
|
||||
this.bt_save.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.bt_save.Name = "bt_save";
|
||||
this.bt_save.Size = new System.Drawing.Size(92, 41);
|
||||
this.bt_save.Size = new System.Drawing.Size(105, 39);
|
||||
this.bt_save.Text = "저장(F5)";
|
||||
this.bt_save.Click += new System.EventHandler(this.bt_save_Click);
|
||||
//
|
||||
@@ -263,7 +263,7 @@ namespace vmsnet
|
||||
this.ToolStripButton2.Image = ((System.Drawing.Image)(resources.GetObject("ToolStripButton2.Image")));
|
||||
this.ToolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta;
|
||||
this.ToolStripButton2.Name = "ToolStripButton2";
|
||||
this.ToolStripButton2.Size = new System.Drawing.Size(122, 41);
|
||||
this.ToolStripButton2.Size = new System.Drawing.Size(141, 39);
|
||||
this.ToolStripButton2.Text = "소리끄기(F2)";
|
||||
this.ToolStripButton2.Click += new System.EventHandler(this.ToolStripButton2_Click);
|
||||
//
|
||||
@@ -279,7 +279,7 @@ namespace vmsnet
|
||||
//
|
||||
// Frm_Sub
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 18F);
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 22F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(929, 776);
|
||||
this.Controls.Add(this.TableLayoutPanel1);
|
||||
|
||||
@@ -64,7 +64,7 @@ namespace vmsnet
|
||||
this.DispCtrl1.Size = new System.Drawing.Size(774, 699);
|
||||
this.DispCtrl1.TabIndex = 3;
|
||||
this.DispCtrl1.Times = null;
|
||||
this.DispCtrl1.Values = null;
|
||||
this.DispCtrl1._Values = null;
|
||||
this.DispCtrl1.OnAlamChange += DispCtrl1_OnAlamChangeL;
|
||||
this.DispCtrl1.OnChangedShowIndex += DispCtrl1_OnChangedShowIndex;
|
||||
this.DispCtrl1.OnClickCell += DispCtrl1_OnClickCell;
|
||||
@@ -222,7 +222,31 @@ namespace vmsnet
|
||||
delegate void Pub_RemoteCommandEventHandler(object sender, RemoteCommand e);
|
||||
private void Pub_RemoteCommandEvent(object sender, RemoteCommand e)
|
||||
{
|
||||
if (e.Command == rCommand.StateMessage)
|
||||
if(e.Command == rCommand.AlarmValueReset)
|
||||
{
|
||||
////auto로 된 그룹의 기준값을 변경한다.
|
||||
this.DispCtrl1.SuspendLayout();
|
||||
foreach (HMI.CGROUP c in DispCtrl1.GROUPS)
|
||||
{
|
||||
if (c.AlarmType == "AUTO")
|
||||
{
|
||||
////이그룹을 사용하는 모든셀의 auto값을 초기화한다.
|
||||
foreach (HMI.CITEM i in c.Items)
|
||||
{
|
||||
i.alamv = -999;
|
||||
}
|
||||
}
|
||||
else if (c.AlarmType == "STOP")
|
||||
{
|
||||
c._alamcount = (short)0;
|
||||
c._alamcountlb = (short)0;
|
||||
}
|
||||
}
|
||||
this.DispCtrl1._raise_alarm_pre = true; ////혹알람이 발생되어있을지 모르니. 끄도록 발생한것 처럼 표시해준다.
|
||||
this.DispCtrl1.ResumeLayout();
|
||||
this.DispCtrl1.Invalidate();
|
||||
}
|
||||
else if (e.Command == rCommand.StateMessage)
|
||||
{
|
||||
if (this.InvokeRequired)
|
||||
{
|
||||
@@ -744,7 +768,8 @@ namespace vmsnet
|
||||
PUB.StatusMSG("Ready...");
|
||||
this.DispCtrl1.initmsg = "Complete";
|
||||
this.DispCtrl1.init = true;
|
||||
this.DispCtrl1.Values = PUB.Values;
|
||||
this.DispCtrl1._Values = PUB._Values;
|
||||
this.DispCtrl1.Received = PUB.Received;
|
||||
this.DispCtrl1.Times = PUB.Times;
|
||||
//Me.DispCtrl1.WINDOW.restarttime = CONFIG.Restart
|
||||
this.DispCtrl1.SmallSize = System.Convert.ToInt32(PUB.CONFIG.viewSize);
|
||||
@@ -844,13 +869,13 @@ namespace vmsnet
|
||||
//Me.bt_window.Text = Me.DispCtrl1.WINDOW.이름 & "(윈도우속성)"
|
||||
}
|
||||
|
||||
private void DispCtrl1_OnAlamChangeL(int ch, COMM.EALAMRAISETYPE raisetype, COMM.EALAMTYPE atype, string AM, float value, float maxvalue, float minvalue)
|
||||
private void DispCtrl1_OnAlamChangeL(int ch, COMM.EALAMRAISETYPE raisetype, COMM.EALAMTYPE atype, string AM, float value, float maxvalue, float minvalue, string remark)
|
||||
{
|
||||
TimeSpan ts = DateTime.Now - PUB.StartupTime;
|
||||
if (ts.TotalSeconds < 7) return;
|
||||
if (ts.TotalSeconds < PUB.CONFIG.Startup_DelayTime_Alam) return;
|
||||
|
||||
bool rlt = PUB.Alarm.InsertData(DateTime.Now, ch, raisetype, value, atype, maxvalue, minvalue, AM, "");
|
||||
PUB.log.Add(AR.Log.ETYPE.NORMAL, "알람이 발생되었습니다(ch=" + ch.ToString() + ",type=" + raisetype.ToString() + ", value=" + value.ToString() + ", min=:" + minvalue.ToString() + ",max=" + maxvalue.ToString() + ",atype=" + atype.ToString() + " ,am=" + AM);
|
||||
bool rlt = PUB.Alarm.InsertData(DateTime.Now, ch, raisetype, value, atype, maxvalue, minvalue, AM, remark);
|
||||
PUB.log.Add(AR.Log.ETYPE.NORMAL, "알람이 발생되었습니다(ch=" + ch.ToString() + ",type=" + raisetype.ToString() + ", value=" + value.ToString() + ", min=:" + minvalue.ToString() + ",max=" + maxvalue.ToString() + ",atype=" + atype.ToString() + " ,am=" + AM + " ,remark=" + remark);
|
||||
}
|
||||
|
||||
public void DispCtrl1_OnSetNullbalance(HMI.CGROUP grp, float value)
|
||||
|
||||
@@ -488,190 +488,191 @@
|
||||
<data name="bt_fullscreen.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAANqSURBVFhHxVdLT5NREG1iXBP/gXFpIgtWLvxJLjVxZbGl
|
||||
gLUFBEFITNhYikVQgVYLFFT6AAqlILTQYlwopS+Ul+tx5r4hVVK15SYnM3PmzJ3zfV8XYPGH5+EiYXnm
|
||||
HYKLOrSbGVj7vAO33Yt1Be3UBnay4J4oQe/sCfSFELM/eZQ58ap3wnUMQmdqGEe1OcdzmutFvmOyDEnc
|
||||
qQwkdzLgGi/BkxkUzByrKHNem5H3GEIEznM98ahhnJznnIR7Ag1kDQOr2Qw8elOEnqlj6JkmHGEuQDXj
|
||||
qRZ9iohuo9ctOD5v5JI37nPh217NZLSBxPY2OF8XoevdITyWCMr8iCNI0eCoz3CEc7J/ViN6WPPIcyc+
|
||||
bCKzpQ0sb6ehfawAnYFDgQMVO4zc5E/HQ9TxqGuaPR2lnh52eSutDcTTKWgbzYN78geDa/IAvxPmEoKn
|
||||
3MX6mnfJvtSyGufP6oy6DR82njYMLKU2wTGSB+f4d/wtEPbhEeZOzCVULTSMO9vDOdaXIE702J1C0/qy
|
||||
AIu4UxmIbW5Aiy8P7a/KAvsGRD12uvdQxTN6ppM1n+EaHR0jBVjAncpAdGMdbC9y6KyMn6KMsQStowiK
|
||||
KkeeIuvLXPJGLftsTuSSFzq7bw93ftIGIutrYPPm0FkRHL4itGBs8ZUYHASqJYhXtewJjs3wnuLFHZor
|
||||
gm04D2HcqQzMJ5NgHdrFt1DAZgHsFFWOA5hLzm72GehCM4q8gpbusg8Xodm7x3YqAx9XE2B9vgsPvAVE
|
||||
njmUuQbVEgZPWlykctlnHC4W0P08NHv24APuVAbmEitwHw00D2GzDrB6cvA+sawNzK7E0UCuorgWsOIb
|
||||
mFsxDITii/gJ6msgFF/SBqaX0AC+lkriWoAMzOBOZWBqcQHu9Kfgbn+6Tkjhzpg2EIxFIfv1G8OX3G5d
|
||||
EIwZBgKRMMNbgUBUxEgEowbxTBelnNdshkWsmU5quI5p1R1aT5wy4BdDAfwrNRAhhAXH80BYwOj5JYfQ
|
||||
81rDdKLnl3OyL+aUgYuEpZpzz26D8yCktTnkuH/I81tU/UTVHlpQ6b8biZoaoAXlg4NzQTox8n/PeU8v
|
||||
UZO3QJdWc0jf5/Fc8fl8l8QV/3bsXZ1QLZ4ODl4dGBi4LK74u9PQ0HDtRlPTTUyrxvXGxls0j/kfjsXy
|
||||
C5OMes1Y4DvuAAAAAElFTkSuQmCC
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAN3SURBVFhHxVdNU5JRGGWmae30D5qWzdSiVYt+UsuaaRUG
|
||||
oqVglmk600wbEcOPQgWV1D4EDFFEU0iwaVEivECh0vo0z/147+WtxqEJvDNnnuc55zz3npcdtmBkBWcJ
|
||||
2zPfKM7q0NsswNbnfdz0xFsKelMF2M/BM1PCwHINg0s1DC7/5FX2xJtajfsYhE/3MI5mfY/3tDew/BO9
|
||||
s2Wk9nMqQGo/C/d0CU8WaxhYPDGr7PmsV64xLBE4z/3E1/CEcXKfcxKemTJSOS3AZi6LnoCB/vAJ+l8T
|
||||
jtEfFqCZ8TQLnWr4BI817bHg+L7WS167zz1TwmY2qwIk9/bQ/cpA3/wRHkksyP6YY4GqxpHOcIw+U7d6
|
||||
hDZ/JCrvuwMGktlPKsD6Xgb3p4p4GDoSqJq1V+t1vr4eodfclTPt1lfpp49d/5RRARKZNLomC/DM/mBw
|
||||
z1bhmfmhIHjq3UxXvFvqdf6quEfzaXPXVBGJjBZgLb0L13gB3dPf0RMgVNAz/R3dAQVzFh7GWbVAhesS
|
||||
ws+9FeGvoHOiiHh6VwVY3d1Bh7+A+y/LAhUNYp6q1x6Y1eJnPn23LDyqusaL+LC7owLEdrbheJFH50QZ
|
||||
XZNldE6U0DlZ4tXsy7wyXfaS12apsz3dq3xO/yFiOx9VgOj2Fhy+PFzjBlx+Ax3jBjr8JQYXgWYJ4s1Z
|
||||
aoJjO1wzeXGH4gw4xgqIbG+pACupFOyjB3C8KMIxVoSTqtkbrJecU9cZ6EK9iv4PXrrLOWag3XfI3jQD
|
||||
vN9Mwj5ygHu+Iu75Ciyh7BVoltB48o4JTt9jXBEOAaUX0O49xLvNpArwJrmBuyMHaB8ttAR2bx5vk+sq
|
||||
wPJGAndH8r8ZmwW79xBvNrQAS4k47C0OsJRYUwFer8XZz2I1NgsUYHEtrgKE4x9wayiN20OZFiGNcHxV
|
||||
BVhYjSH39RvDl/xBS7CwqgUIRSMMcwKhmKjRKOY0EM98Mer5zHZYjQq/9HAf85p3KD9xZoCgWApFVhCK
|
||||
EiKC430oIqBpQclFpLfew3xCC8o9qYs9M8BZwtbIueN04DRYd/7rocRDo96/ouEvavTQA9Z/NjqaGoAe
|
||||
KFerp4L93WrGOe3rm/or0KWNHPIPer0X/H7/Oetd/3ScfQ/RKJ4+f35xeHj4vPWuhk5bW9ulK9euXbfZ
|
||||
bA3j8tWrN2jfeqf1/AKTjHrN6L0l5gAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<data name="bt_tviewr.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
RU5ErkJggg==
|
||||
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
|
||||
</value>
|
||||
</data>
|
||||
<data name="bt_save.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAARcSURBVFhH7ZVJU2NVFMepcu9HcNGSOSEDgRBCRgIxgNA0
|
||||
YUiA7nbt8BncuVE/gOzc6Lq7yi9gpx1K7TA0YFpdWW0SZodVqDqe/333vPfSL9V2UY1uvFW/OsO993/+
|
||||
vCSPgf+XrNrmW1uFyWnKM4jVjbs0XZpV+RcPHlyJX//4k+LxhKmJWKms1kqlNwN6rLVw4MOPPqa333lP
|
||||
IQaQ/9XtXplKZcXUhL6Y0GOtlS9MUXX9rhpc0xEGaht36OeLC/rl4lxHO+c9eSgcMZE706UZ1rujNGus
|
||||
CSOYpcdaK5cv0tr6barWbtMaIwZQN8/P6Mfzc0XzDPFM9Zpn0ufIOQYXim8oUDd5b2q6rHQF6GGWHmut
|
||||
bH6SVqobtLrGcBQDK9VNenx6+kLYDUhvcqrMeptalyNrZ3OTTgOZbIGWV9c1NdMA6sbxMXNC2ycn1GC2
|
||||
uVY5+rpunBz3GECNfqFYsukyKzXCLD3WWulsnpaW10zEAPLvjo7oewaxh2Mjyp7dgJzB5720XO3RTmdz
|
||||
TgOpdI4Wl1YUNxkxgPrrTkfxTZvptM3a3ke0GzD6bfW4RVe0U5k+BsZTGZq/WaH5xQotMGIAPGy3qN5q
|
||||
U50FhYcqcl/gfbsB7IN0psCaSz3aqYmM00ByPE1z84s0t8DM3zLfBeDTe/foy1brSqTSWUPXRjKVdhpI
|
||||
JCdoZm6BZmYXqIyoQZ7kp4MnNM4XAWqISA+5cca+b90pz84bWqw9wzlm6bHWGh1LUak894LM/kP+/P3R
|
||||
sXGngZFEkoqlsuKTz+/T4dHlS2Xrs/tU5JcSGEmMOQ0MjyT4y8P/MPh3e3DUpYNO17x8oHm2tvft+4ed
|
||||
Z3JdQx9glh5rrVh8lLL8isQb8clunX4CexqdP9G5inbkvNyRyJhaDLQxIxYfcRqIxuI0kckrDtjxvgZP
|
||||
wsoNpO7FOmfVgnFP6fMLLzocdxoIR2KU5N8nvrX77Ut6DPgS4n7bEJIaUZ1BRM+GGo47OK8i+si7NA59
|
||||
JhwddhoIhaP880gpmjv1Xvjx9cR+PG9PI/qYpcdaK8hvsZHRMcUeO99rdWmXXSPfbUmNyLXqGXt7OIM9
|
||||
fV766qza02c54pcW519AaCjiNBAIDfGXY1SBgTv6InLEHVsu+0bPvif7Vl9ALfqYpcdayx8IUZi/iJHY
|
||||
MB1u1+kANDQ6P9S1ityTc/aIPYmqJ+eZSJT1GX8w5DTg9QfVZzPEbP/WpYbi0gQ9o2/lcs6eW7VxTs6j
|
||||
D/1QJEreQLCfAT8FhsKKxlMtxvGRxKcwYvSlB/FHiGpf9np71v2uevTA6ws4Dbi9PvLxx+Bjd+qiwhDr
|
||||
V//Q0++PcebSPAttXzBImKXHWsvl8ZLH5ycPP4nT91+5Frz+gJqBWXqstQbdHnKxM5fX2/fyy8CtBw+6
|
||||
+xh43eVmZx6Ckd8/ePVacOGPZDBLj7XWjcHBLWyAb98duBZE/4bL/ZUeq9ZrTIzJMbf+JTDLw2D2f7kG
|
||||
Bv4GtT2Ldl7X4kgAAAAASUVORK5CYII=
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAARxSURBVFhH7ZdLU5tVGMffGfd+BBeV3BNyIRBCSEIuJAYw
|
||||
NCUEEgLFta2fwZ0b9QPIzo2u2xm/gE21jtpAKFCqrhzMmwsJWlfJzN95znvOe81ohym6MTO/eS7nOc//
|
||||
z5sQBkn6/8Vftd33DtKZHFKZHChW6/vI5VdZ/tWjR9fi1z9eIhyOqDsplstbtXz+XY9ZX6KBjz/5FO/f
|
||||
+4AhDFD+52h0bcrlirqT9gsTZn0plV5GdWefCdd4JAO1+l38fHWFX66GPOoZGnKfP6Ai7uTyK6jt3GU7
|
||||
a/V9ZoS0zPrSUiqL7Z09VGt72K7tqQaoPh8O8Hw4ZJwPKA5Y73wg+gM8HwyYcDr7DoPq8+EQy7kC2yug
|
||||
faRl1peSqQwq1Tq2tuvYqtZVA5XqLp5dXr4SegOil1kuYKu6y/fust3JpYzVQCKZxubWDqemGqC62euh
|
||||
2evjsN9Hs9/HYa+n5NTndbPfMxigmvrpbF63dweblRpIy6wvxZMpbGxuqwgDlH/f7eKHbpdFAz0lijO9
|
||||
ATFD7/fGZtWwO55cshqIxZdQ2qgwbm9UVANUf9vpMJ7IHTzpyGqt71PUG1D6MnvcYq/YHUtMMLAQS6B4
|
||||
u4xiqYz1Ulk1QDyW22i0ZTRkjccstjXassEAnRPxRBrF0oZhd2wxYTUQXYhjrVjC2noJa8U76ncB8fmD
|
||||
B/i63b4WsXhS2asjGotbDUSii1hZW8fK6joKFDmUR2MJ0BNaiMUZVNMS0aNcmdGfa3cKq0Vl1yrtL4K0
|
||||
zPrS3HwM+cLaK7L6D/mknpbPzS9YDcxGosjmC4zPvnyIs+74tXLwxUNkcwXGbGTeamBmNoJ0NodUNo/T
|
||||
7ginnZF6+ZRjrvV9/flZx5TzmvYTpGXWl0LhOSRTWdA34otWAz8Rxxyev+A5i3rEvLiju6vuajXYbtII
|
||||
hWetBoKhMBYTKcZpZ4wTDj0JLVcQtRFtTqsFyj22P5lCcCZsNeAPhBBdVD61J/IYz4iOEk9kZZGoKbIZ
|
||||
Lsb6HCZOd2ieRepTPsIC7V9MwB+csRrw+YOIRGOM86OGkZYpTuLvzjhiP2mZ9SWvP4DZuXnGsTzGcXuE
|
||||
ljxieastaopjFltt5eyYZuiMz4s+m2VnfLY9Bv2mhSPz8E0HrAY8vmnQB5EgwSN+kXKKR7pcnCs9/Zk4
|
||||
1/oCqsV+0jLrS26PD/5QGIHQDM4OGzglmhyen/GaxcOGOqePdCYi6+nuBYJhhtvrsxpwur3svZn2B3H4
|
||||
2whNxliFekpfy8WcPtdqZU7MU5/2+wJBOD3eSQbc8Ez7Gc0LvuxihKciXpARpS96tPwpRXYuzow97f6I
|
||||
PXrC6fJYDdidLrg8Prg8XuUiF9VyY/2joT8ZZWasztJul9cL0jLrSzaHEw6XGw63G5cfvnEjON0epkFa
|
||||
Zn1pyu6AzemCzem0XHxd2LnwlH2CgbdtdtgcDpCR3z9680aw0Q9pd4C0zPrSrampAzogvrsv3Qhi/y2b
|
||||
/Ru99lv0x5D+N5Ek6c6/BGk5uPZ/+/oLtT2Ldn0m2N0AAAAASUVORK5CYII=
|
||||
</value>
|
||||
</data>
|
||||
<data name="ToolStripButton2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
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
|
||||
KOQU/Q+Qx3HtqiuXvQAAAABJRU5ErkJggg==
|
||||
</value>
|
||||
</data>
|
||||
<metadata name="ds1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
|
||||
@@ -69,6 +69,7 @@ namespace vmsnet.HMI
|
||||
|
||||
private String _value = "";
|
||||
public int value2 = 0; //소수자리가 들어가기전의 값
|
||||
public bool received = false;
|
||||
public Single CurValue =0f;
|
||||
public Single CurValue1 = 0f;
|
||||
|
||||
@@ -92,6 +93,7 @@ namespace vmsnet.HMI
|
||||
BarRect = new RectangleF(0, 0, 0, 0);
|
||||
_value = "";
|
||||
value2 = 0;
|
||||
received = false;
|
||||
mtime = "";
|
||||
idx = 0;
|
||||
// detailform = null;
|
||||
|
||||
@@ -129,7 +129,8 @@ namespace vmsnet.HMI
|
||||
// }
|
||||
//}
|
||||
|
||||
private int[,,] values;
|
||||
private bool[,,] received;
|
||||
private int[,,] _values;
|
||||
private String[,,] times;
|
||||
|
||||
private Boolean _init = false; //그리드초기화완료여부
|
||||
@@ -197,7 +198,7 @@ namespace vmsnet.HMI
|
||||
public delegate void OnSetNBHandler(CGROUP grp, Single value);
|
||||
|
||||
public event OnAlamChangeHHandler OnAlamChange; //알람이 변경되었을경우(활성/비활성)
|
||||
public delegate void OnAlamChangeHHandler(int ch, COMM.EALAMRAISETYPE raisetype, COMM.EALAMTYPE atype, String AM, Single value, Single maxvalue, Single minvalue);
|
||||
public delegate void OnAlamChangeHHandler(int ch, COMM.EALAMRAISETYPE raisetype, COMM.EALAMTYPE atype, String AM, Single value, Single maxvalue, Single minvalue, string remark);
|
||||
|
||||
public event OnRaiseAlamChangeHHandler RaiseAlarm; //알람이 변경되었을경우(활성/비활성)
|
||||
public delegate void OnRaiseAlamChangeHHandler(Boolean On);
|
||||
@@ -309,10 +310,20 @@ namespace vmsnet.HMI
|
||||
|
||||
#region *** Constructors ***
|
||||
|
||||
public int[,,] Values
|
||||
/// <summary>
|
||||
/// 데이터를 수신했는지
|
||||
/// </summary>
|
||||
public bool[,,] Received
|
||||
{
|
||||
get { return this.values; }
|
||||
set { this.values = value; }
|
||||
get { return this.received; }
|
||||
set { this.received = value; }
|
||||
}
|
||||
|
||||
|
||||
public int[,,] _Values
|
||||
{
|
||||
get { return this._values; }
|
||||
set { this._values = value; }
|
||||
}
|
||||
|
||||
public String[,,] Times
|
||||
@@ -615,7 +626,7 @@ namespace vmsnet.HMI
|
||||
Item.alaml = grp.LOW;
|
||||
Item.aalamh = grp.UP;
|
||||
Item.aalaml = grp.UP;
|
||||
Item.alamv = -999; /* 작성자: 이재웅, 작성일: 2025-06-11, 작성내용: 알람발생 원인으로 의심 -> 'Item.alamv = -999' 주석해제 */
|
||||
//Item.alamv = -999; /* 작성자: 이재웅, 작성일: 2025-06-11, 작성내용: 알람발생 원인으로 의심 -> 'Item.alamv = -999' 주석해제 했다가 다시 원복 */
|
||||
break;
|
||||
case COMM.EALAMTYPE.사용안함:
|
||||
Item.alamh = -999;
|
||||
@@ -669,9 +680,11 @@ namespace vmsnet.HMI
|
||||
|
||||
//값의 저장소가 아에없다면?
|
||||
//Boolean OverDATA = false;
|
||||
if (this.Values == null)
|
||||
var alarmRemark = string.Empty;
|
||||
if (this._Values == null)
|
||||
{
|
||||
Item.value2 = 0;
|
||||
Item.received = false;
|
||||
Item.CurValue = 0f;
|
||||
Item.CurValue1 = 0f;
|
||||
TimeStr = "Null Error";
|
||||
@@ -684,6 +697,7 @@ namespace vmsnet.HMI
|
||||
if (!Item.사용) //사용여부자체를 설정한다.
|
||||
{
|
||||
Item.value2 = 0;
|
||||
Item.received = false;
|
||||
Item.alamv = -999;
|
||||
Item.CurValue = 0f; //미설정상태라면 값을 표시하지 않는다.
|
||||
Item.CurValue1 = 0f;
|
||||
@@ -697,18 +711,20 @@ namespace vmsnet.HMI
|
||||
//Br = new SolidBrush(Color.Black);
|
||||
Offset = Item.Offset; //수동으로입력된 옾셋
|
||||
|
||||
var u1 = this.Values.GetUpperBound(0);
|
||||
var u2 = this.Values.GetUpperBound(1);
|
||||
var u3 = this.Values.GetUpperBound(2);
|
||||
var u1 = this._Values.GetUpperBound(0);
|
||||
var u2 = this._Values.GetUpperBound(1);
|
||||
var u3 = this._Values.GetUpperBound(2);
|
||||
if (Item.idx_dev >= 0 && Item.idx_unit >= 0 && Item.idx_ch >= 0 &&
|
||||
Item.idx_dev <= u1 && Item.idx_unit <= u2 && Item.idx_ch <= u3)
|
||||
{
|
||||
Item.value2 = this.Values[Item.idx_dev, Item.idx_unit, Item.idx_ch]; //측정값
|
||||
Item.value2 = this._Values[Item.idx_dev, Item.idx_unit, Item.idx_ch]; //측정값
|
||||
TimeStr = this.Times[Item.idx_dev, Item.idx_unit, Item.idx_ch]; //측정시간
|
||||
Item.received = this.Received[Item.idx_dev, Item.idx_unit, Item.idx_ch]; //수신여부
|
||||
}
|
||||
else
|
||||
{
|
||||
Item.value2 = 0;
|
||||
Item.received = false;
|
||||
TimeStr = "";
|
||||
}
|
||||
|
||||
@@ -728,7 +744,7 @@ namespace vmsnet.HMI
|
||||
if (TimeStr != "" && TimeStr != "Not USE" && Item._p_onalamover == false)
|
||||
{
|
||||
String alamtimes = DateTime.Parse(TimeStr).ToString("yy-MM-dd HH:mm:ss");
|
||||
OnAlamChange(Item.idx, COMM.EALAMRAISETYPE.OVER_ON, Item.알람형태, "--", Item.CurValue, Item.alamh, Item.alaml);
|
||||
OnAlamChange(Item.idx, COMM.EALAMRAISETYPE.OVER_ON, Item.알람형태, "--", Item.CurValue, Item.alamh, Item.alaml, "over 32000");
|
||||
Item._p_onalamover = true;
|
||||
}
|
||||
Item.CurValue = 0f;
|
||||
@@ -744,7 +760,7 @@ namespace vmsnet.HMI
|
||||
if (TimeStr != "" && TimeStr != "Not USE" && Item._p_onalamover == true)
|
||||
{
|
||||
String alamtimes = DateTime.Parse(TimeStr).ToString("yy-MM-dd HH:mm:ss");
|
||||
OnAlamChange(Item.idx, COMM.EALAMRAISETYPE.OVER_OFF, Item.알람형태, "--", Item.CurValue, Item.alamh, Item.alaml);
|
||||
OnAlamChange(Item.idx, COMM.EALAMRAISETYPE.OVER_OFF, Item.알람형태, "--", Item.CurValue, Item.alamh, Item.alaml, "");
|
||||
Item._p_onalamover = false;
|
||||
}
|
||||
}
|
||||
@@ -785,11 +801,17 @@ namespace vmsnet.HMI
|
||||
case COMM.EALAMTYPE.그룹설정을따름:
|
||||
if (grp.AlarmType == "AUTO")
|
||||
{
|
||||
/* 작성자: 이재웅, 작성일: 2025-06-11, 작성내용: 알람발생 원인으로 의심 -> '알람타입:그룹설정을따름' 일때 'Item.alamv == -999' 주석해제 */
|
||||
if (Item.alamv == -999) Item.alamv = Item.CurValue;
|
||||
//if (Item.alamv == -999) Item.alamv = Item.CurValue;
|
||||
/* 작성자: 이재웅, 작성일: 2025-06-17, 작성내용: 'Item.alamv == 0' OR조건 추가 */
|
||||
if (Item.alamv == -999 || Item.alamv == 0) Item.alamv = Item.CurValue;
|
||||
|
||||
Item.적용형태 = "AUTO";
|
||||
if (Item.CurValue > Item.alamv) //큰값이 있을경우 상한선을 확인한다.
|
||||
if (Item.received == false)
|
||||
{
|
||||
Item.onalamh = false;
|
||||
Item.onalaml = false;
|
||||
}
|
||||
else if (Item.CurValue > Item.alamv) //큰값이 있을경우 상한선을 확인한다.
|
||||
{
|
||||
Single gap = Math.Abs(Item.CurValue - Item.alamv);
|
||||
if (gap >= Math.Abs(Item.aalamh))
|
||||
@@ -797,6 +819,7 @@ namespace vmsnet.HMI
|
||||
Item.onalamh = true;
|
||||
Item.onalaml = false;
|
||||
BackColor = Color.Orange; //BackColor0 = Color.LightPink;
|
||||
alarmRemark = $"ref({Item.alamv})";
|
||||
}
|
||||
}
|
||||
else if (Item.CurValue < Item.alamv)
|
||||
@@ -807,6 +830,7 @@ namespace vmsnet.HMI
|
||||
Item.onalamh = false;
|
||||
Item.onalaml = true;
|
||||
BackColor = Color.SkyBlue; //BackColor0 = Color.LightBlue;
|
||||
alarmRemark = $"ref({Item.alamv})";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -814,17 +838,24 @@ namespace vmsnet.HMI
|
||||
else if (grp.AlarmType == "MANUAL")
|
||||
{
|
||||
Item.적용형태 = "MANUAL";
|
||||
if (Item.CurValue >= Item.alamh)
|
||||
if (Item.received == false)
|
||||
{
|
||||
Item.onalamh = false;
|
||||
Item.onalaml = false;
|
||||
}
|
||||
else if (Item.CurValue >= Item.alamh)
|
||||
{
|
||||
Item.onalamh = true;
|
||||
Item.onalaml = false;
|
||||
BackColor = Color.Orange;// BackColor0 = Color.LightPink;
|
||||
alarmRemark = $"ref({Item.alamh})";
|
||||
}
|
||||
else if (Item.CurValue < Item.alaml)
|
||||
{
|
||||
Item.onalamh = false;
|
||||
Item.onalaml = true;
|
||||
BackColor = Color.SkyBlue; //BackColor0 = Color.LightBlue;
|
||||
alarmRemark = $"ref({Item.alaml})";
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -836,25 +867,39 @@ namespace vmsnet.HMI
|
||||
break;
|
||||
case COMM.EALAMTYPE.개별알람:
|
||||
Item.적용형태 = "MANUAL";
|
||||
if (Item.CurValue >= Item.alamh)
|
||||
if (Item.received == false)
|
||||
{
|
||||
Item.onalamh = false;
|
||||
Item.onalaml = false;
|
||||
}
|
||||
else if (Item.CurValue >= Item.alamh)
|
||||
{
|
||||
Item.onalamh = true;
|
||||
Item.onalaml = false;
|
||||
BackColor = Color.Orange; //BackColor0 = Color.LightPink;
|
||||
alarmRemark = $"ref({Item.alamh})";
|
||||
}
|
||||
else if (Item.CurValue < Item.alaml)
|
||||
{
|
||||
Item.onalamh = false;
|
||||
Item.onalaml = true;
|
||||
BackColor = Color.SkyBlue;// BackColor0 = Color.LightBlue;
|
||||
alarmRemark = $"ref({Item.alaml})";
|
||||
}
|
||||
|
||||
break;
|
||||
case COMM.EALAMTYPE.개별알람자동:
|
||||
Item.적용형태 = "AUTO";
|
||||
if (Item.alamv == -999) Item.alamv = Item.CurValue;
|
||||
//if (Item.alamv == -999) Item.alamv = Item.CurValue; // 이전 코드
|
||||
/* 작성자: 이재웅, 작성일: 2025-06-17, 작성내용: 'Item.alamv == 0' OR조건 추가 */
|
||||
if (Item.alamv == -999 || Item.alamv == 0) Item.alamv = Item.CurValue;
|
||||
|
||||
if (Item.CurValue > Item.alamv) //큰값이 있을경우 상한선을 확인한다.
|
||||
if (Item.received == false)
|
||||
{
|
||||
Item.onalamh = false;
|
||||
Item.onalaml = false;
|
||||
}
|
||||
else if (Item.CurValue > Item.alamv) //큰값이 있을경우 상한선을 확인한다.
|
||||
{
|
||||
Single gap = Math.Abs(Item.CurValue - Item.alamv);
|
||||
if (gap >= Math.Abs(Item.aalamh))
|
||||
@@ -862,6 +907,7 @@ namespace vmsnet.HMI
|
||||
Item.onalamh = true;
|
||||
Item.onalaml = false;
|
||||
BackColor = Color.Orange; //BackColor0 = Color.LightPink;
|
||||
alarmRemark = $"ref({Item.alamv})";
|
||||
}
|
||||
}
|
||||
else if (Item.CurValue < Item.alamv)
|
||||
@@ -872,6 +918,7 @@ namespace vmsnet.HMI
|
||||
Item.onalamh = false;
|
||||
Item.onalaml = true;
|
||||
BackColor = Color.SkyBlue; //BackColor0 = Color.LightBlue;
|
||||
alarmRemark = $"ref({Item.alamv})";
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -883,9 +930,10 @@ namespace vmsnet.HMI
|
||||
|
||||
if (Item.활성화 && init == true && (Item.onalaml != Item._p_onalaml || Item._p_onalamh != Item.onalamh)) //이전과 알람상태가 변경된경우다.
|
||||
{
|
||||
String alamtimes;
|
||||
String alamtimes = "";
|
||||
|
||||
if (TimeStr != "" && TimeStr != "Not USE") alamtimes = DateTime.Parse(TimeStr).ToString("yy-MM-dd HH:mm:ss");
|
||||
if (TimeStr != "" && TimeStr != "Not USE")
|
||||
alamtimes = DateTime.Parse(TimeStr).ToString("yy-MM-dd HH:mm:ss");
|
||||
else alamtimes = "";
|
||||
|
||||
Single AH, AL;
|
||||
@@ -901,28 +949,27 @@ namespace vmsnet.HMI
|
||||
}
|
||||
if (Item.onalamh && !Item._p_onalamh)
|
||||
{
|
||||
|
||||
OnAlamChange(Item.idx, COMM.EALAMRAISETYPE.HIGH_ON, Item.알람형태, Item.적용형태, Item.CurValue, AH, AL);
|
||||
OnAlamChange(Item.idx, COMM.EALAMRAISETYPE.HIGH_ON, Item.알람형태, Item.적용형태, Item.CurValue, AH, AL, alarmRemark);
|
||||
Item._p_onalamh = true;
|
||||
}
|
||||
else if (Item.onalaml && !Item._p_onalaml)
|
||||
{
|
||||
OnAlamChange(Item.idx, COMM.EALAMRAISETYPE.LOW_ON, Item.알람형태, Item.적용형태, Item.CurValue, AH, AL);
|
||||
OnAlamChange(Item.idx, COMM.EALAMRAISETYPE.LOW_ON, Item.알람형태, Item.적용형태, Item.CurValue, AH, AL, alarmRemark);
|
||||
Item._p_onalaml = true;
|
||||
}
|
||||
else if (!Item.onalamh && Item._p_onalamh)
|
||||
{
|
||||
OnAlamChange(Item.idx, COMM.EALAMRAISETYPE.HIGH_OFF, Item.알람형태, Item.적용형태, Item.CurValue, AH, AL);
|
||||
OnAlamChange(Item.idx, COMM.EALAMRAISETYPE.HIGH_OFF, Item.알람형태, Item.적용형태, Item.CurValue, AH, AL, "");
|
||||
Item._p_onalamh = false;
|
||||
}
|
||||
else if (!Item.onalaml && Item._p_onalaml)
|
||||
{
|
||||
OnAlamChange(Item.idx, COMM.EALAMRAISETYPE.LOW_OFF, Item.알람형태, Item.적용형태, Item.CurValue, AH, AL);
|
||||
OnAlamChange(Item.idx, COMM.EALAMRAISETYPE.LOW_OFF, Item.알람형태, Item.적용형태, Item.CurValue, AH, AL, "");
|
||||
Item._p_onalamh = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Item.활성화 && Item.사용)
|
||||
if ((!Item.활성화 && Item.사용) || Item.received == false)
|
||||
{
|
||||
Item._onalamover = false;
|
||||
Item._onalamh = false;
|
||||
@@ -942,6 +989,10 @@ namespace vmsnet.HMI
|
||||
BrColor = (Color.DarkMagenta);
|
||||
grp._errorcount += 1;
|
||||
}
|
||||
else if (Item.received == false)
|
||||
{
|
||||
ValueStr = "--";
|
||||
}
|
||||
else if (!Item.활성화)
|
||||
{
|
||||
ValueStr = "--";
|
||||
@@ -1282,7 +1333,7 @@ namespace vmsnet.HMI
|
||||
|
||||
//g.DrawString(this.window.disconnecttime.ToString(), this.Font, Brushes.Red, R.Left,R.Top);
|
||||
}
|
||||
|
||||
|
||||
grp._amp = 0;
|
||||
if (grp._ampidx != "" && grp._ampidx != null)
|
||||
{
|
||||
@@ -1294,7 +1345,7 @@ namespace vmsnet.HMI
|
||||
try
|
||||
{
|
||||
grp._ampdecpos = 3;
|
||||
grp._amp = (float)(this.Values[di1, di2, di3 - 1] / (Math.Pow(10, grp._ampdecpos)));
|
||||
grp._amp = (float)(this._Values[di1, di2, di3 - 1] / (Math.Pow(10, grp._ampdecpos)));
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -1338,12 +1389,15 @@ namespace vmsnet.HMI
|
||||
Single imgheight = 30;
|
||||
if (!(grp.nbh == 0 && grp.nbl == 0))
|
||||
{
|
||||
if (Math.Abs(nullvalue) > grp.nbl)
|
||||
//if (Math.Abs(nullvalue) > grp.nbl) // a2영역보다 크다면
|
||||
/* 작성자: 이재웅, 작성일: 2025-06-17, 작성내용: 'a2영역 절대값보다 클 경우'로 변경 */
|
||||
if (Math.Abs(nullvalue) > Math.Abs(grp.nbl)) // a2영역 절대값보다 크다면
|
||||
{
|
||||
grp._nbalam_l = true; //a2 on
|
||||
if (!grp._pre_nbalam_l)
|
||||
{
|
||||
if (grp.AlarmType != "STOP") OnAlamChange(grp.IDX, COMM.EALAMRAISETYPE.A2_ON, COMM.EALAMTYPE.사용안함, "NB", (Single)nullvalue, (Single)grp.nbl, (Single)grp.nbl);
|
||||
if (grp.AlarmType != "STOP") OnAlamChange(grp.IDX, COMM.EALAMRAISETYPE.A2_ON, COMM.EALAMTYPE.사용안함, "NB",
|
||||
(Single)nullvalue, (Single)grp.nbl, (Single)grp.nbl, $"> {grp.nbl}");
|
||||
grp._pre_nbalam_l = true;
|
||||
A2 = false;
|
||||
blink2 = 0;
|
||||
@@ -1376,18 +1430,21 @@ namespace vmsnet.HMI
|
||||
|
||||
if (grp._pre_nbalam_l) //이전에 a2알람이 켜져잇엇다면 알람을 끈다.
|
||||
{
|
||||
OnAlamChange(grp.IDX, COMM.EALAMRAISETYPE.A2_OFF, COMM.EALAMTYPE.사용안함, "NB", (Single)nullvalue, (Single)grp.nbl, (Single)grp.nbl);
|
||||
OnAlamChange(grp.IDX, COMM.EALAMRAISETYPE.A2_OFF, COMM.EALAMTYPE.사용안함, "NB", (Single)nullvalue, (Single)grp.nbl, (Single)grp.nbl, "");
|
||||
grp._pre_nbalam_l = false;
|
||||
blink1 = 0;
|
||||
}
|
||||
|
||||
|
||||
if (Math.Abs(nullvalue) > grp.nbh) //a1영역보다 크다면
|
||||
//if (Math.Abs(nullvalue) > grp.nbh) // a1영역보다 크다면
|
||||
/* 작성자: 이재웅, 작성일: 2025-06-17, 작성내용: 'a1영역 절대값보다 클 경우'로 변경 */
|
||||
if (Math.Abs(nullvalue) > Math.Abs(grp.nbh)) // a1영역 절대값보다 크다면
|
||||
{
|
||||
grp._nbalam_h = true;
|
||||
if (!grp._pre_nbalam_h) //이전에 발생안햇다면
|
||||
{
|
||||
if (grp.AlarmType != "STOP") OnAlamChange(grp.IDX, COMM.EALAMRAISETYPE.A1_ON, COMM.EALAMTYPE.사용안함, "NB", (Single)nullvalue, (Single)grp.nbh, (Single)grp.nbh);
|
||||
if (grp.AlarmType != "STOP") OnAlamChange(grp.IDX, COMM.EALAMRAISETYPE.A1_ON, COMM.EALAMTYPE.사용안함, "NB",
|
||||
(Single)nullvalue, (Single)grp.nbh, (Single)grp.nbh, $"> {grp.nbh}");
|
||||
grp._pre_nbalam_h = true;
|
||||
blink1 = 0;
|
||||
}
|
||||
@@ -1418,7 +1475,7 @@ namespace vmsnet.HMI
|
||||
grp._nbalam_h = false; //a1 off
|
||||
if (grp._pre_nbalam_h) //이전에 a1알람이 켜져잇엇다면 알람을 끈다.
|
||||
{
|
||||
OnAlamChange(grp.IDX, COMM.EALAMRAISETYPE.A1_OFF, COMM.EALAMTYPE.사용안함, "NB", (Single)nullvalue, (Single)grp.nbl, (Single)grp.nbl);
|
||||
OnAlamChange(grp.IDX, COMM.EALAMRAISETYPE.A1_OFF, COMM.EALAMTYPE.사용안함, "NB", (Single)nullvalue, (Single)grp.nbl, (Single)grp.nbl, "");
|
||||
grp._pre_nbalam_h = false;
|
||||
}
|
||||
blink1 = 0;
|
||||
@@ -1472,7 +1529,7 @@ namespace vmsnet.HMI
|
||||
|
||||
//끝부분에 KA 를 표시한다.
|
||||
String Kaunit = grp._ampunit;// +grp._ampidx.ToString() + "/" + grp._ampdecpos.ToString();
|
||||
|
||||
|
||||
/* 작성자: 이재웅, 작성일: 2024-12-04, 작성내용: {전류량[KA] × 100} 변경 */
|
||||
String MaxKA = (grp._amp * 10f).ToString("#0.00");
|
||||
|
||||
@@ -1714,7 +1771,7 @@ namespace vmsnet.HMI
|
||||
if (grp.Showinfo) infogrp = grp;
|
||||
//else
|
||||
//{
|
||||
DrawGroup(g, grp, new Point(0, 0), new SizeF(WINDOW.ITEMWIDTH, WINDOW.ITEMHEIGHT), WindowRect, 열번호, 줄번호, false, visible);
|
||||
DrawGroup(g, grp, new Point(0, 0), new SizeF(WINDOW.ITEMWIDTH, WINDOW.ITEMHEIGHT), WindowRect, 열번호, 줄번호, false, visible);
|
||||
//}
|
||||
|
||||
idx += 1;
|
||||
@@ -2054,27 +2111,27 @@ namespace vmsnet.HMI
|
||||
//if (this.FullScreen)
|
||||
//{ /* 작성자: 이재웅, 작성일: 2024-12-04, 작성내용: '전체보기' 상태일 때만 그룹헤더의 [Null Balance] 팝업 정보가 표시되도록 변경 */
|
||||
|
||||
//마우스가 현재 그룹헤더에 존재하는지확인 (헤더에 올경우 특정 정보를 표시)
|
||||
if (!Mouseinfo.Hand && !Mouseinfo.Move)
|
||||
//마우스가 현재 그룹헤더에 존재하는지확인 (헤더에 올경우 특정 정보를 표시)
|
||||
if (!Mouseinfo.Hand && !Mouseinfo.Move)
|
||||
{
|
||||
int tpidx = Check_GroupHeader(e, true);
|
||||
if (tpidx != -1)
|
||||
{
|
||||
int tpidx = Check_GroupHeader(e, true);
|
||||
if (tpidx != -1)
|
||||
{
|
||||
Mouseinfo.Hand = true;
|
||||
this.GROUPS[tpidx].Showinfo = true;
|
||||
//this.showHeaderInfo = true;
|
||||
}
|
||||
Mouseinfo.Hand = true;
|
||||
this.GROUPS[tpidx].Showinfo = true;
|
||||
//this.showHeaderInfo = true;
|
||||
}
|
||||
|
||||
}
|
||||
//마우스가 현재 그룹에 존재하는지?
|
||||
if (!Mouseinfo.Hand && !Mouseinfo.Move)
|
||||
}
|
||||
//마우스가 현재 그룹에 존재하는지?
|
||||
if (!Mouseinfo.Hand && !Mouseinfo.Move)
|
||||
{
|
||||
int tpidx = Check_Group(e);
|
||||
if (tpidx != -1)
|
||||
{
|
||||
int tpidx = Check_Group(e);
|
||||
if (tpidx != -1)
|
||||
{
|
||||
Mouseinfo.Hand = true;
|
||||
}
|
||||
Mouseinfo.Hand = true;
|
||||
}
|
||||
}
|
||||
//}
|
||||
|
||||
if (Mouseinfo.Hand) this.Cursor = Cursors.Hand;
|
||||
|
||||
@@ -1281,8 +1281,6 @@ namespace TrendCtrlII
|
||||
base.OnSizeChanged(e);
|
||||
if (this.Visible == false) return;
|
||||
Console.WriteLine("OnSizeChanged");
|
||||
|
||||
|
||||
}
|
||||
|
||||
void CreateBufferGraphic()
|
||||
|
||||
@@ -38,6 +38,6 @@ using System.Runtime.InteropServices;
|
||||
// 지정되도록 할 수 있습니다.
|
||||
// <Assembly: AssemblyVersion("1.0.*")>
|
||||
|
||||
[assembly: AssemblyVersion("24.11.26.2200")]
|
||||
[assembly: AssemblyFileVersion("24.11.26.2200")]
|
||||
[assembly: AssemblyVersion("25.07.01.2200")]
|
||||
[assembly: AssemblyFileVersion("25.07.01.2200")]
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace vmsnet
|
||||
|
||||
try
|
||||
{
|
||||
PUB.KA1_SUM += (float)(PUB.Values[di1, di2, di3 - 1] / (Math.Pow(10, _ampdecpos)));
|
||||
PUB.KA1_SUM += (float)(PUB._Values[di1, di2, di3 - 1] / (Math.Pow(10, _ampdecpos)));
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
@@ -89,7 +89,7 @@ namespace vmsnet
|
||||
|
||||
try
|
||||
{
|
||||
PUB.KA2_SUM += (float)(PUB.Values[di1, di2, di3 - 1] / (Math.Pow(10, _ampdecpos)));
|
||||
PUB.KA2_SUM += (float)(PUB._Values[di1, di2, di3 - 1] / (Math.Pow(10, _ampdecpos)));
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ namespace vmsnet
|
||||
VAR.Init();
|
||||
|
||||
//연결체크용 쓰레드
|
||||
thConnection= Task.Run(() => bwDeviceConnection());
|
||||
thConnection = Task.Run(() => bwDeviceConnection());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -9,10 +9,18 @@ namespace vmsnet
|
||||
{
|
||||
private void SPS_250ms()
|
||||
{
|
||||
if(VAR.isInit)
|
||||
if (VAR.isInit)
|
||||
{
|
||||
VAR.STR[EVarString.MCStatus] = PUB.sm.Step.ToString();
|
||||
}
|
||||
|
||||
//셀정보자동저장
|
||||
if (PUB.sm != null && PUB.sm.Step == ESMStep.RUN && PUB.CONFIG.savetermcellinfo > 0)
|
||||
{
|
||||
var ts_saveCellinfo = DateTime.Now - PUB.LastWindowCellinfoSaved;
|
||||
if (ts_saveCellinfo.TotalMinutes > PUB.CONFIG.savetermcellinfo)
|
||||
PUB.RaiseRemoteCommandEvent(rCommand.SaveGroupClass);
|
||||
}
|
||||
}
|
||||
|
||||
private void SPS_Max()
|
||||
|
||||
@@ -117,7 +117,16 @@ namespace vmsnet
|
||||
/// </summary>
|
||||
public bool opensubwindow { get; set; }
|
||||
public short trashper { get; set; } ////자동삭제용량단위
|
||||
|
||||
/// <summary>
|
||||
/// 저장주기(단위:초)
|
||||
/// </summary>
|
||||
public short saveterm { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 셀저장보 저장 주기(단위:분)
|
||||
/// </summary>
|
||||
public short savetermcellinfo { get; set; }
|
||||
public bool seconddata { get; set; }
|
||||
public bool thirddata { get; set; }
|
||||
public bool getdata4 { get; set; }
|
||||
|
||||
64
cVMS.NET_CS/Setting/Frm_Alam.Designer.cs
generated
64
cVMS.NET_CS/Setting/Frm_Alam.Designer.cs
generated
@@ -70,11 +70,14 @@ namespace vmsnet
|
||||
this.StatusStrip1 = new System.Windows.Forms.StatusStrip();
|
||||
this.ToolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
|
||||
this.Button1 = new System.Windows.Forms.Button();
|
||||
this.panel1 = new System.Windows.Forms.Panel();
|
||||
this.chkResetValue = new System.Windows.Forms.CheckBox();
|
||||
((System.ComponentModel.ISupportInitialize)(this.DataGridView1)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.BindingSource1)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.DataSet1)).BeginInit();
|
||||
((System.ComponentModel.ISupportInitialize)(this.DataTable1)).BeginInit();
|
||||
this.StatusStrip1.SuspendLayout();
|
||||
this.panel1.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// DataGridView1
|
||||
@@ -85,6 +88,7 @@ namespace vmsnet
|
||||
this.DataGridView1.AutoGenerateColumns = false;
|
||||
this.DataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
|
||||
this.DataGridView1.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
|
||||
this.DataGridView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
|
||||
this.DataGridView1.ColumnHeadersHeight = 40;
|
||||
this.DataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing;
|
||||
this.DataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
|
||||
@@ -116,7 +120,7 @@ namespace vmsnet
|
||||
this.DataGridView1.RowHeadersWidth = 50;
|
||||
this.DataGridView1.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
|
||||
this.DataGridView1.RowTemplate.Height = 23;
|
||||
this.DataGridView1.Size = new System.Drawing.Size(1010, 461);
|
||||
this.DataGridView1.Size = new System.Drawing.Size(1010, 475);
|
||||
this.DataGridView1.TabIndex = 0;
|
||||
this.DataGridView1.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.DataGridView1_CellContentClick);
|
||||
this.DataGridView1.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.DataGridView1_CellFormatting);
|
||||
@@ -146,7 +150,7 @@ namespace vmsnet
|
||||
this.TypeDataGridViewTextBoxColumn.Name = "TypeDataGridViewTextBoxColumn";
|
||||
this.TypeDataGridViewTextBoxColumn.Resizable = System.Windows.Forms.DataGridViewTriState.True;
|
||||
this.TypeDataGridViewTextBoxColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
|
||||
this.TypeDataGridViewTextBoxColumn.Width = 125;
|
||||
this.TypeDataGridViewTextBoxColumn.Width = 82;
|
||||
//
|
||||
// HighDataGridViewTextBoxColumn
|
||||
//
|
||||
@@ -156,7 +160,7 @@ namespace vmsnet
|
||||
this.HighDataGridViewTextBoxColumn.HeaderText = "Manual(H)";
|
||||
this.HighDataGridViewTextBoxColumn.MinimumWidth = 8;
|
||||
this.HighDataGridViewTextBoxColumn.Name = "HighDataGridViewTextBoxColumn";
|
||||
this.HighDataGridViewTextBoxColumn.Width = 160;
|
||||
this.HighDataGridViewTextBoxColumn.Width = 108;
|
||||
//
|
||||
// LowDataGridViewTextBoxColumn
|
||||
//
|
||||
@@ -166,7 +170,7 @@ namespace vmsnet
|
||||
this.LowDataGridViewTextBoxColumn.HeaderText = "Manual(L)";
|
||||
this.LowDataGridViewTextBoxColumn.MinimumWidth = 8;
|
||||
this.LowDataGridViewTextBoxColumn.Name = "LowDataGridViewTextBoxColumn";
|
||||
this.LowDataGridViewTextBoxColumn.Width = 156;
|
||||
this.LowDataGridViewTextBoxColumn.Width = 105;
|
||||
//
|
||||
// AhighDataGridViewTextBoxColumn
|
||||
//
|
||||
@@ -176,7 +180,7 @@ namespace vmsnet
|
||||
this.AhighDataGridViewTextBoxColumn.HeaderText = "Auto(±)";
|
||||
this.AhighDataGridViewTextBoxColumn.MinimumWidth = 8;
|
||||
this.AhighDataGridViewTextBoxColumn.Name = "AhighDataGridViewTextBoxColumn";
|
||||
this.AhighDataGridViewTextBoxColumn.Width = 127;
|
||||
this.AhighDataGridViewTextBoxColumn.Width = 87;
|
||||
//
|
||||
// AlowDataGridViewTextBoxColumn
|
||||
//
|
||||
@@ -187,7 +191,7 @@ namespace vmsnet
|
||||
this.AlowDataGridViewTextBoxColumn.MinimumWidth = 8;
|
||||
this.AlowDataGridViewTextBoxColumn.Name = "AlowDataGridViewTextBoxColumn";
|
||||
this.AlowDataGridViewTextBoxColumn.Visible = false;
|
||||
this.AlowDataGridViewTextBoxColumn.Width = 103;
|
||||
this.AlowDataGridViewTextBoxColumn.Width = 71;
|
||||
//
|
||||
// nbhh
|
||||
//
|
||||
@@ -196,7 +200,7 @@ namespace vmsnet
|
||||
this.nbhh.MinimumWidth = 8;
|
||||
this.nbhh.Name = "nbhh";
|
||||
this.nbhh.Visible = false;
|
||||
this.nbhh.Width = 113;
|
||||
this.nbhh.Width = 81;
|
||||
//
|
||||
// nbh
|
||||
//
|
||||
@@ -206,7 +210,7 @@ namespace vmsnet
|
||||
this.nbh.HeaderText = "NullB(Alarm1)";
|
||||
this.nbh.MinimumWidth = 8;
|
||||
this.nbh.Name = "nbh";
|
||||
this.nbh.Width = 199;
|
||||
this.nbh.Width = 131;
|
||||
//
|
||||
// nbl
|
||||
//
|
||||
@@ -216,7 +220,7 @@ namespace vmsnet
|
||||
this.nbl.HeaderText = "NullB(Alarm2)";
|
||||
this.nbl.MinimumWidth = 8;
|
||||
this.nbl.Name = "nbl";
|
||||
this.nbl.Width = 199;
|
||||
this.nbl.Width = 131;
|
||||
//
|
||||
// nbll
|
||||
//
|
||||
@@ -225,7 +229,7 @@ namespace vmsnet
|
||||
this.nbll.MinimumWidth = 8;
|
||||
this.nbll.Name = "nbll";
|
||||
this.nbll.Visible = false;
|
||||
this.nbll.Width = 109;
|
||||
this.nbll.Width = 79;
|
||||
//
|
||||
// BindingSource1
|
||||
//
|
||||
@@ -324,10 +328,10 @@ namespace vmsnet
|
||||
this.StatusStrip1.ImageScalingSize = new System.Drawing.Size(24, 24);
|
||||
this.StatusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
||||
this.ToolStripStatusLabel1});
|
||||
this.StatusStrip1.Location = new System.Drawing.Point(0, 529);
|
||||
this.StatusStrip1.Location = new System.Drawing.Point(0, 536);
|
||||
this.StatusStrip1.Name = "StatusStrip1";
|
||||
this.StatusStrip1.Padding = new System.Windows.Forms.Padding(1, 0, 20, 0);
|
||||
this.StatusStrip1.Size = new System.Drawing.Size(1010, 29);
|
||||
this.StatusStrip1.Size = new System.Drawing.Size(1010, 22);
|
||||
this.StatusStrip1.TabIndex = 2;
|
||||
this.StatusStrip1.Text = "StatusStrip1";
|
||||
//
|
||||
@@ -335,29 +339,50 @@ namespace vmsnet
|
||||
//
|
||||
this.ToolStripStatusLabel1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.999999F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.ToolStripStatusLabel1.Name = "ToolStripStatusLabel1";
|
||||
this.ToolStripStatusLabel1.Size = new System.Drawing.Size(423, 22);
|
||||
this.ToolStripStatusLabel1.Size = new System.Drawing.Size(373, 17);
|
||||
this.ToolStripStatusLabel1.Text = "개별알람 및 개별알람(자동)으로 설정된 셀은 영향을 받지 않습니다.";
|
||||
//
|
||||
// Button1
|
||||
//
|
||||
this.Button1.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.Button1.Dock = System.Windows.Forms.DockStyle.Fill;
|
||||
this.Button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.Button1.Location = new System.Drawing.Point(0, 461);
|
||||
this.Button1.Location = new System.Drawing.Point(0, 0);
|
||||
this.Button1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5);
|
||||
this.Button1.Name = "Button1";
|
||||
this.Button1.Size = new System.Drawing.Size(1010, 68);
|
||||
this.Button1.Size = new System.Drawing.Size(858, 61);
|
||||
this.Button1.TabIndex = 3;
|
||||
this.Button1.Text = "저장";
|
||||
this.Button1.UseVisualStyleBackColor = true;
|
||||
this.Button1.Click += new System.EventHandler(this.Button1_Click);
|
||||
//
|
||||
// panel1
|
||||
//
|
||||
this.panel1.Controls.Add(this.Button1);
|
||||
this.panel1.Controls.Add(this.chkResetValue);
|
||||
this.panel1.Dock = System.Windows.Forms.DockStyle.Bottom;
|
||||
this.panel1.Location = new System.Drawing.Point(0, 475);
|
||||
this.panel1.Name = "panel1";
|
||||
this.panel1.Size = new System.Drawing.Size(1010, 61);
|
||||
this.panel1.TabIndex = 4;
|
||||
//
|
||||
// chkResetValue
|
||||
//
|
||||
this.chkResetValue.Dock = System.Windows.Forms.DockStyle.Right;
|
||||
this.chkResetValue.Location = new System.Drawing.Point(858, 0);
|
||||
this.chkResetValue.Name = "chkResetValue";
|
||||
this.chkResetValue.Padding = new System.Windows.Forms.Padding(10, 0, 0, 0);
|
||||
this.chkResetValue.Size = new System.Drawing.Size(152, 61);
|
||||
this.chkResetValue.TabIndex = 0;
|
||||
this.chkResetValue.Text = "알람 기준값 초기화";
|
||||
this.chkResetValue.UseVisualStyleBackColor = true;
|
||||
//
|
||||
// Frm_Alam
|
||||
//
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(14F, 29F);
|
||||
this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F);
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||
this.ClientSize = new System.Drawing.Size(1010, 558);
|
||||
this.Controls.Add(this.DataGridView1);
|
||||
this.Controls.Add(this.Button1);
|
||||
this.Controls.Add(this.panel1);
|
||||
this.Controls.Add(this.StatusStrip1);
|
||||
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
|
||||
this.KeyPreview = true;
|
||||
@@ -372,6 +397,7 @@ namespace vmsnet
|
||||
((System.ComponentModel.ISupportInitialize)(this.DataTable1)).EndInit();
|
||||
this.StatusStrip1.ResumeLayout(false);
|
||||
this.StatusStrip1.PerformLayout();
|
||||
this.panel1.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
|
||||
@@ -406,6 +432,8 @@ namespace vmsnet
|
||||
internal System.Windows.Forms.DataGridViewTextBoxColumn nbl;
|
||||
internal System.Windows.Forms.DataGridViewTextBoxColumn nbll;
|
||||
private System.ComponentModel.IContainer components;
|
||||
private Panel panel1;
|
||||
private CheckBox chkResetValue;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -65,7 +65,10 @@ namespace vmsnet
|
||||
if (CDT == null)
|
||||
{
|
||||
//MsgBox("변경된 내용이 없습니다", MsgBoxStyle.Information, "확인")
|
||||
this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
if (chkResetValue.Checked)
|
||||
this.DialogResult = DialogResult.OK;
|
||||
else
|
||||
this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -94,8 +97,7 @@ namespace vmsnet
|
||||
////설정바꾼다.
|
||||
PUB.RaiseRemoteCommandEvent(rCommand.UpdateAlarmSetting,idx);
|
||||
|
||||
//각 창별로 window1.grp / window2.grp 의 파일에 그룹상태를 저장 합니다
|
||||
PUB.RaiseRemoteCommandEvent(rCommand.SaveGroupClass);
|
||||
|
||||
}
|
||||
this.DialogResult = System.Windows.Forms.DialogResult.OK;
|
||||
}
|
||||
|
||||
593
cVMS.NET_CS/Setting/Frm_Config.Designer.cs
generated
593
cVMS.NET_CS/Setting/Frm_Config.Designer.cs
generated
File diff suppressed because it is too large
Load Diff
@@ -180,6 +180,8 @@ namespace vmsnet
|
||||
this.chk_lsb.Checked = PUB.CONFIG.lsb;
|
||||
this.tb_trashper.Text = PUB.CONFIG.trashper.ToString();
|
||||
this.tb_saveterm.Text = PUB.CONFIG.saveterm.ToString();
|
||||
this.tb_savetermCellInfo.Text = PUB.CONFIG.savetermcellinfo.ToString();
|
||||
|
||||
this.chk_2nddata.Checked = PUB.CONFIG.seconddata;
|
||||
this.chk_3rdData.Checked = PUB.CONFIG.thirddata;
|
||||
this.chk_4thData.Checked = PUB.CONFIG.getdata4;
|
||||
@@ -348,6 +350,25 @@ namespace vmsnet
|
||||
return;
|
||||
}
|
||||
|
||||
if (short.TryParse(this.tb_saveterm.Text, out short v_saveterm) == false)
|
||||
{
|
||||
UTIL.MsgE("저장주기를 입력하세요");
|
||||
this.tb_saveterm.Focus();
|
||||
return;
|
||||
}
|
||||
if (short.TryParse(this.tb_savetermCellInfo.Text, out short v_savetermCellInfo) == false)
|
||||
{
|
||||
UTIL.MsgE("셀정보 저장주기를 입력하세요");
|
||||
this.tb_savetermCellInfo.Focus();
|
||||
return;
|
||||
}
|
||||
if(short.TryParse(this.tb_trashper.Text, out short v_trashper) == false)
|
||||
{
|
||||
UTIL.MsgE("디스크 정리주기를 입력하세요");
|
||||
this.tb_trashper.Focus();
|
||||
return;
|
||||
}
|
||||
|
||||
//데이터베이스적용
|
||||
PUB.DS.Clear();
|
||||
PUB.DS.Merge(this.DocumentElement1);
|
||||
@@ -367,8 +388,10 @@ namespace vmsnet
|
||||
PUB.CONFIG.synctime = this.chk_synctime.Checked;
|
||||
PUB.CONFIG.databasefolder = this.tb_savepath.Text;
|
||||
PUB.CONFIG.lsb = this.chk_lsb.Checked;
|
||||
PUB.CONFIG.trashper = short.Parse(this.tb_trashper.Text);
|
||||
PUB.CONFIG.saveterm = short.Parse(this.tb_saveterm.Text);
|
||||
PUB.CONFIG.trashper = v_trashper;// short.Parse(this.tb_trashper.Text);
|
||||
PUB.CONFIG.saveterm = v_saveterm;// short.Parse(this.tb_saveterm.Text);
|
||||
PUB.CONFIG.savetermcellinfo = v_savetermCellInfo;// short.Parse(this.tb_savetermCellInfo.Text);
|
||||
|
||||
PUB.CONFIG.seconddata = this.chk_2nddata.Checked;
|
||||
PUB.CONFIG.thirddata = this.chk_3rdData.Checked;
|
||||
PUB.CONFIG.getdata4 = this.chk_4thData.Checked;
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
<data name="bt_save.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAWfSURBVFhH7ZZrTFNnHMaZFu/Oy3QxE5cQk12yGS+oUbm0
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAWfSURBVFhH7ZZrTFNnHMaZFu/Oy3QxE5cQk12yGS+oUbm0
|
||||
WqWES6HQc3oDoqCACDjBTRCxjhF1uDjdCNOBMgzqFJB6w4EDKZeWm7QqKligBHFbsmTf9sFkybP8j3JG
|
||||
3zoU93VP8qTved/n/3venvRDPTz+1ziUd9Vj4cGfJCl51ZIbedUTOo03JH+RaU17wtlVj4Xs3H9W7jVP
|
||||
n7zrE4uP/jwfFV0haHXmwD58BEN/lAumNe3RGWUoSzMs57X0xdWJ+V/VzkPdw0QM/F6Ent8O4t6TXeh6
|
||||
@@ -263,7 +263,7 @@
|
||||
<data name="toolStripButton1.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK
|
||||
YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X
|
||||
/aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t
|
||||
I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM
|
||||
@@ -278,7 +278,7 @@
|
||||
<data name="toolStripButton2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIFSURBVDhPpZLtS1NhGMbPPxJmmlYSgqHiKzGU1EDxg4iK
|
||||
YKyG2WBogqMYJQOtCEVRFBGdTBCJfRnkS4VaaWNT5sqx1BUxRXxDHYxAJLvkusEeBaPAB+5z4Jzn+t3X
|
||||
/aLhnEfjo8m+dCoa+7/C3O2Hqe0zDC+8KG+cRZHZhdzaaWTVTCLDMIY0vfM04Nfh77/G/sEhwpEDbO3t
|
||||
I7TxE8urEVy99fT/AL5gWDLrTB/hnF4XsW0khCu5ln8DmJliT2AXrcNBsU1gj/MH4nMeKwBrPktM28xM
|
||||
@@ -623,7 +623,7 @@
|
||||
<data name="bt_remakelist.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>
|
||||
iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
|
||||
YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAZPSURBVFhH7ZJrTFRnHsatvaXtZpveku1lm/RLP7SdghFZ
|
||||
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAZPSURBVFhH7ZJrTFRnHsatvaXtZpveku1lm/RLP7SdghFZ
|
||||
15Tih03ELt0IzDlzgVK8FFbFWky7EWozbdNL2rCVRUS8UECwVooSUFRSRSwCMzADBRGYC2eYGeZ6zpxz
|
||||
hmGm2mzybN7jMpEDDNp+9Ul+Oe+85/9/nv/7zlm27K7u6g60umTw2ZSPTIUpe/rPpZSYjC/tMf2XQNbS
|
||||
3kemQlIj7/vdWlNiSkr50Fj9bo0Zp4c42LgopsTr4CI3EIzekNbmQBTtIzx21VlAateUGJLkPncunW75
|
||||
|
||||
@@ -14,6 +14,7 @@ using System.Runtime.CompilerServices;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using vmsnet;
|
||||
using System.Xml;
|
||||
|
||||
namespace vmsnet
|
||||
{
|
||||
@@ -47,10 +48,14 @@ namespace vmsnet
|
||||
public static DigitalIndicator indicator;
|
||||
public static int sleepoffset = 0; ////쓰레드슬립시간
|
||||
|
||||
/// <summary>
|
||||
/// 데이터를 수신받았는지 체크
|
||||
/// </summary>
|
||||
public static bool[,,] Received;
|
||||
/// <summary>
|
||||
/// 측정값(전압)이 들어있다(mcidx/unitno/chidx)
|
||||
/// </summary>
|
||||
public static int[,,] Values;
|
||||
public static int[,,] _Values;
|
||||
/// <summary>
|
||||
/// 측정값(시간)이 들어있다(mcidx/unitno/chidx)
|
||||
/// yyyy-MM-dd HH:mm:ss
|
||||
@@ -84,6 +89,7 @@ namespace vmsnet
|
||||
public static FMain mainWindow;
|
||||
public static DocumentElement DS = new DocumentElement();
|
||||
public static bool runerror = false; ////실행오류
|
||||
public static DateTime LastWindowCellinfoSaved = DateTime.Now;
|
||||
|
||||
|
||||
public static string lastStatueMessage = "";
|
||||
@@ -122,7 +128,7 @@ namespace vmsnet
|
||||
}
|
||||
|
||||
public static void RaiseRemoteCommandEvent(rCommand cmd, object data = null)
|
||||
{
|
||||
{
|
||||
RemoteCommandEvent?.Invoke(null, new RemoteCommand(cmd, data));
|
||||
}
|
||||
|
||||
@@ -219,16 +225,17 @@ namespace vmsnet
|
||||
/// <returns></returns>
|
||||
public static bool AddMeasureValue(int mcidx, int unit, int ch, int value, string time)
|
||||
{
|
||||
var l0 = PUB.Values.GetUpperBound(0) + 1; //mc array size
|
||||
var l1 = PUB.Values.GetUpperBound(1) + 1; //unit array size
|
||||
var l2 = PUB.Values.GetUpperBound(2) + 1; //ch array size
|
||||
var l0 = PUB._Values.GetUpperBound(0) + 1; //mc array size
|
||||
var l1 = PUB._Values.GetUpperBound(1) + 1; //unit array size
|
||||
var l2 = PUB._Values.GetUpperBound(2) + 1; //ch array size
|
||||
|
||||
if (mcidx < l0 && unit < l1 && ch > 0 && ch <= l2)
|
||||
{
|
||||
try
|
||||
{
|
||||
PUB.Values[mcidx, unit, ch - 1] = value;
|
||||
PUB._Values[mcidx, unit, ch - 1] = value;
|
||||
PUB.Times[mcidx, unit, ch - 1] = time;
|
||||
PUB.Received[mcidx, unit, ch - 1] = true;
|
||||
return true;
|
||||
}
|
||||
catch (Exception)
|
||||
@@ -596,15 +603,22 @@ namespace vmsnet
|
||||
|
||||
public static void SaveGroupClass(HMI.CGROUP[] grous, System.IO.FileInfo fi)
|
||||
{
|
||||
|
||||
LastWindowCellinfoSaved = DateTime.Now;
|
||||
|
||||
////그룹정보를 파일로 직렬화저장
|
||||
try
|
||||
{
|
||||
if (fi.Directory.Exists == false) fi.Directory.Create();
|
||||
System.IO.FileStream fs2 = new System.IO.FileStream(fi.FullName, System.IO.FileMode.Create);
|
||||
|
||||
var tempfile = fi.FullName + ".temp";
|
||||
System.IO.FileStream fs2 = new System.IO.FileStream(tempfile, System.IO.FileMode.Create);
|
||||
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf2 = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
|
||||
bf2.Serialize(fs2, grous);
|
||||
fs2.Close();
|
||||
PUB.log.Add(AR.Log.ETYPE.NORMAL, "그룹정보파일 저장완료");
|
||||
System.IO.File.Copy(tempfile, fi.FullName, true);
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -783,7 +797,9 @@ namespace vmsnet
|
||||
////master-K 231120 chi
|
||||
masterk = new arDev.MasterK();
|
||||
|
||||
indicator = new DigitalIndicator();
|
||||
//indicator = new DigitalIndicator();
|
||||
/* 작성자: 이재웅, 작성일: 2025-06-26, 작성내용: DigitalIndicator() 생성자의 인자로 (byte)PUB.CONFIG.indicator_slaveno 추가 */
|
||||
indicator = new DigitalIndicator((byte)PUB.CONFIG.indicator_slaveno);
|
||||
|
||||
////init Folder
|
||||
workmsg("Init Dir");
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
..\
|
||||
1) DesignSetting.xml
|
||||
2) Setting.xml
|
||||
|
||||
..\Database\Config
|
||||
|
||||
위 경로에 아래 설정파일들이 존재한다.
|
||||
|
||||
Reference in New Issue
Block a user