Compare commits

34 Commits
master ... test

Author SHA1 Message Date
ef797b23df Save last 2024-09-22 04:27:05 +05:00
0e645d20e2 tmp 2021-11-12 15:00:41 +05:00
78b2f5ac24 Merge branch 'test' of https://git.mbucb.ru/google/ASCKU_PC into test
# Conflicts:
#	.vs/ASCKU Projects/DesignTimeBuild/.dtbcache.v2
#	.vs/ASCKU Projects/v16/.suo
#	ApiServer/obj/Debug/net5.0/ApiServer.csproj.AssemblyReference.cache
#	ClientCollector/obj/Debug/net5.0/ClientCollector.csproj.AssemblyReference.cache
#	DataClient/obj/Release/net5.0/DataClient.csproj.AssemblyReference.cache
#	DataClients/obj/Release/netstandard2.0/DataClients.csproj.AssemblyReference.cache
#	Korp90TimePasport/obj/Debug/netcoreapp3.1/Korp90TimePasport.csproj.AssemblyReference.cache
#	Mailing/obj/Release/netcoreapp3.1/Mailing.csproj.AssemblyReference.cache
#	PrintPDF/PdfSharp.Charting/obj/Release/netstandard2.0/PdfSharp.Charting.csproj.AssemblyReference.cache
#	PrintPDF/PdfSharp/obj/Release/netstandard2.0/PdfSharp.csproj.AssemblyReference.cache
#	SupportClasses/obj/Release/netstandard2.0/SupportClasses.csproj.AssemblyReference.cache
#	Test2/obj/Debug/net5.0/Test2.csproj.AssemblyReference.cache
#	Test2/obj/Release/net5.0/Test2.csproj.AssemblyReference.cache
#	Tests/obj/Debug/netcoreapp3.1/Tests.csproj.AssemblyReference.cache
#	Tests/obj/Release/netcoreapp3.1/Tests.csproj.AssemblyReference.cache
#	test3/obj/Debug/net5.0/test3.csproj.AssemblyReference.cache
#	test3/obj/Release/net5.0/test3.csproj.AssemblyReference.cache
2021-08-06 10:44:55 +05:00
103f8273eb Work 2021-08-06 10:42:03 +05:00
c4438e8a8a Home 2021-08-06 10:39:28 +05:00
900e5d80b3 Finish clientCollector 2021-08-04 08:03:25 +05:00
be22ea0673 Work 2021-08-03 11:34:44 +05:00
76f9ce8a79 sub work 2021-08-03 06:28:06 +05:00
6ba90bf7e5 Send Data 2021-08-02 23:01:18 +05:00
25f8be5f24 home 2021-08-01 22:56:52 +05:00
cffb8a180b Home 2021-08-01 19:48:09 +05:00
52eaaaac79 Work 2021-07-31 22:27:59 +05:00
39236f43b4 Start API Server 2021-07-30 14:49:24 +05:00
13b9e3ab64 learn 2021-07-15 12:17:19 +05:00
438ffd4c1a Learn 2021-07-14 16:53:48 +05:00
31509018c7 work 2021-07-09 16:36:46 +05:00
3388cc761c work 2021-07-08 16:16:35 +05:00
066c0187f2 work 2021-07-07 16:36:28 +05:00
a2fef8a2a4 Work 2021-06-28 16:07:17 +05:00
b5a51ad633 work 2021-06-10 16:56:05 +05:00
e433588449 work 2021-06-08 20:57:54 +05:00
7459a60074 home work 2021-06-06 20:52:44 +05:00
c27ae16867 work 1 2021-06-05 23:24:07 +05:00
72c7ef702a work 2021-06-05 17:00:11 +05:00
d699af66bb home work 2021-06-04 22:16:00 +05:00
4f4ff1a25a work 2021-06-04 16:57:32 +05:00
2ea459b400 work 2021-06-03 16:43:40 +05:00
f9fcb14e47 home work 2021-06-03 06:08:59 +05:00
0250037f11 work 2021-06-02 20:58:38 +05:00
c633df4ff3 to home 2021-05-29 16:19:31 +05:00
d7f0d6eb18 Socket 2 2021-05-28 20:53:14 +05:00
b95cb0f504 Create Socket 2021-05-28 20:51:55 +05:00
7691014c41 mid work conf 2021-05-28 00:13:54 +05:00
79a10434d8 Start Create Config 2021-05-27 15:58:23 +05:00
1327 changed files with 219791 additions and 5086 deletions

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -23,54 +23,351 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PrintPDF", "PrintPDF", "{EF
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Korp90TimePasport", "Korp90TimePasport\Korp90TimePasport.csproj", "{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Korp90TimePasport", "Korp90TimePasport\Korp90TimePasport.csproj", "{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "STPClient", "STPClient\STPClient.csproj", "{EE48A5E6-C8DD-4829-8132-30DC5AA40854}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DataClient", "DataClient\DataClient.csproj", "{EE48A5E6-C8DD-4829-8132-30DC5AA40854}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Test2", "Test2\Test2.csproj", "{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "test3", "test3\test3.csproj", "{33B08224-623E-4120-942E-AAE199CD63A0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ApiServer", "ApiServer\ApiServer.csproj", "{618EF8A3-70D7-42A8-A407-AA3E47FE184C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ClientCollector", "ClientCollector\ClientCollector.csproj", "{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}"
EndProject
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "Site", "Site\", "{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}"
ProjectSection(WebsiteProperties) = preProject
TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
Debug.AspNetCompiler.VirtualPath = "/localhost_52028"
Debug.AspNetCompiler.PhysicalPath = "Site\"
Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_52028\"
Debug.AspNetCompiler.Updateable = "true"
Debug.AspNetCompiler.ForceOverwrite = "true"
Debug.AspNetCompiler.FixedNames = "false"
Debug.AspNetCompiler.Debug = "True"
Release.AspNetCompiler.VirtualPath = "/localhost_52028"
Release.AspNetCompiler.PhysicalPath = "Site\"
Release.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_52028\"
Release.AspNetCompiler.Updateable = "true"
Release.AspNetCompiler.ForceOverwrite = "true"
Release.AspNetCompiler.FixedNames = "false"
Release.AspNetCompiler.Debug = "False"
VWDPort = "52028"
SlnRelativePath = "Site\"
EndProjectSection
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|ARM64 = Release|ARM64
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EBFBCB65-A591-4444-8557-BFC084566FF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Debug|Any CPU.Build.0 = Debug|Any CPU {EBFBCB65-A591-4444-8557-BFC084566FF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Debug|ARM.ActiveCfg = Debug|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Debug|ARM.Build.0 = Debug|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Debug|ARM64.Build.0 = Debug|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Debug|x64.ActiveCfg = Debug|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Debug|x64.Build.0 = Debug|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Debug|x86.ActiveCfg = Debug|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Debug|x86.Build.0 = Debug|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Release|Any CPU.ActiveCfg = Release|Any CPU {EBFBCB65-A591-4444-8557-BFC084566FF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Release|Any CPU.Build.0 = Release|Any CPU {EBFBCB65-A591-4444-8557-BFC084566FF7}.Release|Any CPU.Build.0 = Release|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Release|ARM.ActiveCfg = Release|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Release|ARM.Build.0 = Release|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Release|ARM64.ActiveCfg = Release|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Release|ARM64.Build.0 = Release|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Release|x64.ActiveCfg = Release|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Release|x64.Build.0 = Release|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Release|x86.ActiveCfg = Release|Any CPU
{EBFBCB65-A591-4444-8557-BFC084566FF7}.Release|x86.Build.0 = Release|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E420055E-687E-4BD5-BBD0-EC1DA643C011}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Debug|Any CPU.Build.0 = Debug|Any CPU {E420055E-687E-4BD5-BBD0-EC1DA643C011}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Debug|ARM.ActiveCfg = Debug|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Debug|ARM.Build.0 = Debug|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Debug|ARM64.Build.0 = Debug|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Debug|x64.ActiveCfg = Debug|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Debug|x64.Build.0 = Debug|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Debug|x86.ActiveCfg = Debug|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Debug|x86.Build.0 = Debug|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Release|Any CPU.ActiveCfg = Release|Any CPU {E420055E-687E-4BD5-BBD0-EC1DA643C011}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Release|Any CPU.Build.0 = Release|Any CPU {E420055E-687E-4BD5-BBD0-EC1DA643C011}.Release|Any CPU.Build.0 = Release|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Release|ARM.ActiveCfg = Release|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Release|ARM.Build.0 = Release|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Release|ARM64.ActiveCfg = Release|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Release|ARM64.Build.0 = Release|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Release|x64.ActiveCfg = Release|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Release|x64.Build.0 = Release|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Release|x86.ActiveCfg = Release|Any CPU
{E420055E-687E-4BD5-BBD0-EC1DA643C011}.Release|x86.Build.0 = Release|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {50970C14-5670-4893-A58F-EA7E03360647}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Debug|Any CPU.Build.0 = Debug|Any CPU {50970C14-5670-4893-A58F-EA7E03360647}.Debug|Any CPU.Build.0 = Debug|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Debug|ARM.ActiveCfg = Debug|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Debug|ARM.Build.0 = Debug|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Debug|ARM64.Build.0 = Debug|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Debug|x64.ActiveCfg = Debug|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Debug|x64.Build.0 = Debug|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Debug|x86.ActiveCfg = Debug|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Debug|x86.Build.0 = Debug|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Release|Any CPU.ActiveCfg = Release|Any CPU {50970C14-5670-4893-A58F-EA7E03360647}.Release|Any CPU.ActiveCfg = Release|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Release|Any CPU.Build.0 = Release|Any CPU {50970C14-5670-4893-A58F-EA7E03360647}.Release|Any CPU.Build.0 = Release|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Release|ARM.ActiveCfg = Release|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Release|ARM.Build.0 = Release|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Release|ARM64.ActiveCfg = Release|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Release|ARM64.Build.0 = Release|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Release|x64.ActiveCfg = Release|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Release|x64.Build.0 = Release|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Release|x86.ActiveCfg = Release|Any CPU
{50970C14-5670-4893-A58F-EA7E03360647}.Release|x86.Build.0 = Release|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Debug|Any CPU.Build.0 = Debug|Any CPU {5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Debug|ARM.ActiveCfg = Debug|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Debug|ARM.Build.0 = Debug|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Debug|ARM64.Build.0 = Debug|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Debug|x64.ActiveCfg = Debug|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Debug|x64.Build.0 = Debug|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Debug|x86.ActiveCfg = Debug|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Debug|x86.Build.0 = Debug|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Release|Any CPU.ActiveCfg = Release|Any CPU {5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Release|Any CPU.Build.0 = Release|Any CPU {5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Release|Any CPU.Build.0 = Release|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Release|ARM.ActiveCfg = Release|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Release|ARM.Build.0 = Release|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Release|ARM64.ActiveCfg = Release|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Release|ARM64.Build.0 = Release|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Release|x64.ActiveCfg = Release|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Release|x64.Build.0 = Release|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Release|x86.ActiveCfg = Release|Any CPU
{5BC9149F-4717-4BD1-8FC1-1D29744DA643}.Release|x86.Build.0 = Release|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Debug|ARM.ActiveCfg = Debug|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Debug|ARM.Build.0 = Debug|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Debug|ARM64.Build.0 = Debug|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Debug|x64.ActiveCfg = Debug|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Debug|x64.Build.0 = Debug|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Debug|x86.ActiveCfg = Debug|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Debug|x86.Build.0 = Debug|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Release|Any CPU.Build.0 = Release|Any CPU {6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Release|Any CPU.Build.0 = Release|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Release|ARM.ActiveCfg = Release|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Release|ARM.Build.0 = Release|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Release|ARM64.ActiveCfg = Release|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Release|ARM64.Build.0 = Release|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Release|x64.ActiveCfg = Release|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Release|x64.Build.0 = Release|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Release|x86.ActiveCfg = Release|Any CPU
{6D63CEBF-20D8-41CA-BE57-5701F95EDC47}.Release|x86.Build.0 = Release|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8BCEABEB-E345-45F6-880D-59B5920691F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Debug|Any CPU.Build.0 = Debug|Any CPU {8BCEABEB-E345-45F6-880D-59B5920691F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Debug|ARM.ActiveCfg = Debug|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Debug|ARM.Build.0 = Debug|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Debug|ARM64.Build.0 = Debug|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Debug|x64.ActiveCfg = Debug|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Debug|x64.Build.0 = Debug|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Debug|x86.ActiveCfg = Debug|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Debug|x86.Build.0 = Debug|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {8BCEABEB-E345-45F6-880D-59B5920691F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Release|Any CPU.Build.0 = Release|Any CPU {8BCEABEB-E345-45F6-880D-59B5920691F8}.Release|Any CPU.Build.0 = Release|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Release|ARM.ActiveCfg = Release|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Release|ARM.Build.0 = Release|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Release|ARM64.ActiveCfg = Release|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Release|ARM64.Build.0 = Release|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Release|x64.ActiveCfg = Release|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Release|x64.Build.0 = Release|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Release|x86.ActiveCfg = Release|Any CPU
{8BCEABEB-E345-45F6-880D-59B5920691F8}.Release|x86.Build.0 = Release|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Debug|Any CPU.Build.0 = Debug|Any CPU {C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Debug|ARM.ActiveCfg = Debug|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Debug|ARM.Build.0 = Debug|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Debug|ARM64.Build.0 = Debug|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Debug|x64.ActiveCfg = Debug|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Debug|x64.Build.0 = Debug|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Debug|x86.ActiveCfg = Debug|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Debug|x86.Build.0 = Debug|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Release|Any CPU.ActiveCfg = Release|Any CPU {C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Release|Any CPU.Build.0 = Release|Any CPU {C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Release|Any CPU.Build.0 = Release|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Release|ARM.ActiveCfg = Release|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Release|ARM.Build.0 = Release|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Release|ARM64.ActiveCfg = Release|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Release|ARM64.Build.0 = Release|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Release|x64.ActiveCfg = Release|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Release|x64.Build.0 = Release|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Release|x86.ActiveCfg = Release|Any CPU
{C873319A-89FB-4F7E-BD72-F9BCC147E08A}.Release|x86.Build.0 = Release|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4494877D-DAA5-4498-BA09-6001E9371D4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Debug|Any CPU.Build.0 = Debug|Any CPU {4494877D-DAA5-4498-BA09-6001E9371D4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Debug|ARM.ActiveCfg = Debug|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Debug|ARM.Build.0 = Debug|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Debug|ARM64.Build.0 = Debug|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Debug|x64.ActiveCfg = Debug|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Debug|x64.Build.0 = Debug|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Debug|x86.ActiveCfg = Debug|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Debug|x86.Build.0 = Debug|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Release|Any CPU.ActiveCfg = Release|Any CPU {4494877D-DAA5-4498-BA09-6001E9371D4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Release|Any CPU.Build.0 = Release|Any CPU {4494877D-DAA5-4498-BA09-6001E9371D4B}.Release|Any CPU.Build.0 = Release|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Release|ARM.ActiveCfg = Release|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Release|ARM.Build.0 = Release|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Release|ARM64.ActiveCfg = Release|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Release|ARM64.Build.0 = Release|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Release|x64.ActiveCfg = Release|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Release|x64.Build.0 = Release|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Release|x86.ActiveCfg = Release|Any CPU
{4494877D-DAA5-4498-BA09-6001E9371D4B}.Release|x86.Build.0 = Release|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Debug|Any CPU.Build.0 = Debug|Any CPU {EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Debug|ARM.ActiveCfg = Debug|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Debug|ARM.Build.0 = Debug|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Debug|ARM64.Build.0 = Debug|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Debug|x64.ActiveCfg = Debug|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Debug|x64.Build.0 = Debug|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Debug|x86.ActiveCfg = Debug|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Debug|x86.Build.0 = Debug|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Release|Any CPU.ActiveCfg = Release|Any CPU {EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Release|Any CPU.Build.0 = Release|Any CPU {EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Release|Any CPU.Build.0 = Release|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Release|ARM.ActiveCfg = Release|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Release|ARM.Build.0 = Release|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Release|ARM64.ActiveCfg = Release|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Release|ARM64.Build.0 = Release|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Release|x64.ActiveCfg = Release|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Release|x64.Build.0 = Release|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Release|x86.ActiveCfg = Release|Any CPU
{EC718A4D-6B40-453F-8650-4AF9CF8FE9BD}.Release|x86.Build.0 = Release|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Debug|Any CPU.Build.0 = Debug|Any CPU {EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Debug|ARM.ActiveCfg = Debug|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Debug|ARM.Build.0 = Debug|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Debug|ARM64.Build.0 = Debug|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Debug|x64.ActiveCfg = Debug|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Debug|x64.Build.0 = Debug|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Debug|x86.ActiveCfg = Debug|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Debug|x86.Build.0 = Debug|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Release|Any CPU.ActiveCfg = Release|Any CPU {EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Release|Any CPU.Build.0 = Release|Any CPU {EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Release|Any CPU.Build.0 = Release|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Release|ARM.ActiveCfg = Release|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Release|ARM.Build.0 = Release|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Release|ARM64.ActiveCfg = Release|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Release|ARM64.Build.0 = Release|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Release|x64.ActiveCfg = Release|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Release|x64.Build.0 = Release|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Release|x86.ActiveCfg = Release|Any CPU
{EE48A5E6-C8DD-4829-8132-30DC5AA40854}.Release|x86.Build.0 = Release|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Debug|ARM.ActiveCfg = Debug|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Debug|ARM.Build.0 = Debug|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Debug|ARM64.Build.0 = Debug|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Debug|x64.ActiveCfg = Debug|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Debug|x64.Build.0 = Debug|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Debug|x86.ActiveCfg = Debug|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Debug|x86.Build.0 = Debug|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Release|Any CPU.Build.0 = Release|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Release|ARM.ActiveCfg = Release|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Release|ARM.Build.0 = Release|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Release|ARM64.ActiveCfg = Release|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Release|ARM64.Build.0 = Release|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Release|x64.ActiveCfg = Release|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Release|x64.Build.0 = Release|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Release|x86.ActiveCfg = Release|Any CPU
{9D5DF611-A1D3-4544-8E32-D14CFDF91BFA}.Release|x86.Build.0 = Release|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Debug|ARM.ActiveCfg = Debug|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Debug|ARM.Build.0 = Debug|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Debug|ARM64.Build.0 = Debug|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Debug|x64.ActiveCfg = Debug|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Debug|x64.Build.0 = Debug|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Debug|x86.ActiveCfg = Debug|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Debug|x86.Build.0 = Debug|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Release|Any CPU.Build.0 = Release|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Release|ARM.ActiveCfg = Release|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Release|ARM.Build.0 = Release|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Release|ARM64.ActiveCfg = Release|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Release|ARM64.Build.0 = Release|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Release|x64.ActiveCfg = Release|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Release|x64.Build.0 = Release|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Release|x86.ActiveCfg = Release|Any CPU
{33B08224-623E-4120-942E-AAE199CD63A0}.Release|x86.Build.0 = Release|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Debug|ARM.ActiveCfg = Debug|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Debug|ARM.Build.0 = Debug|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Debug|ARM64.Build.0 = Debug|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Debug|x64.ActiveCfg = Debug|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Debug|x64.Build.0 = Debug|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Debug|x86.ActiveCfg = Debug|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Debug|x86.Build.0 = Debug|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Release|Any CPU.Build.0 = Release|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Release|ARM.ActiveCfg = Release|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Release|ARM.Build.0 = Release|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Release|ARM64.ActiveCfg = Release|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Release|ARM64.Build.0 = Release|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Release|x64.ActiveCfg = Release|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Release|x64.Build.0 = Release|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Release|x86.ActiveCfg = Release|Any CPU
{618EF8A3-70D7-42A8-A407-AA3E47FE184C}.Release|x86.Build.0 = Release|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Debug|ARM.ActiveCfg = Debug|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Debug|ARM.Build.0 = Debug|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Debug|ARM64.Build.0 = Debug|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Debug|x64.ActiveCfg = Debug|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Debug|x64.Build.0 = Debug|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Debug|x86.ActiveCfg = Debug|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Debug|x86.Build.0 = Debug|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Release|Any CPU.Build.0 = Release|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Release|ARM.ActiveCfg = Release|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Release|ARM.Build.0 = Release|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Release|ARM64.ActiveCfg = Release|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Release|ARM64.Build.0 = Release|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Release|x64.ActiveCfg = Release|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Release|x64.Build.0 = Release|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Release|x86.ActiveCfg = Release|Any CPU
{91CA0D25-5552-4FC2-B61D-EE0FF35D86BB}.Release|x86.Build.0 = Release|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Debug|ARM.ActiveCfg = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Debug|ARM.Build.0 = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Debug|ARM64.Build.0 = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Debug|x64.ActiveCfg = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Debug|x64.Build.0 = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Debug|x86.ActiveCfg = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Debug|x86.Build.0 = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Release|Any CPU.ActiveCfg = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Release|Any CPU.Build.0 = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Release|ARM.ActiveCfg = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Release|ARM.Build.0 = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Release|ARM64.ActiveCfg = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Release|ARM64.Build.0 = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Release|x64.ActiveCfg = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Release|x64.Build.0 = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Release|x86.ActiveCfg = Debug|Any CPU
{41F2077F-FD59-4FDA-B54F-DF327A6DE29D}.Release|x86.Build.0 = Debug|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

BIN
ASCKU_PC.zip Normal file

Binary file not shown.

View File

@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "5.0.8",
"commands": [
"dotnet-ef"
]
}
}
}

View File

@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NLog" Version="4.7.10" />
<PackageReference Include="SharpZipLib" Version="1.3.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\DataClient\DataClient.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="Parametrs\Новая папка\" />
</ItemGroup>
<ProjectExtensions><VisualStudio><UserProperties config_4analog_4global_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
</Project>

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Controller_SelectedScaffolderID>MvcControllerEmptyScaffolder</Controller_SelectedScaffolderID>
<Controller_SelectedScaffolderCategoryPath>root/Common/MVC/Controller</Controller_SelectedScaffolderCategoryPath>
<ActiveDebugProfile>ApiServer</ActiveDebugProfile>
<NameOfLastUsedPublishProfile>F:\GIT\ASCKU_PC\ApiServer\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DebuggerFlavor>ProjectDebugger</DebuggerFlavor>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DataClient.Struct;
namespace ApiServer.ApiStruct
{
public class DataCheckApi
{
public bool Status { get; set; }
public DateTime DateAndTime { get; set; }
public string Name { get; set; }
}
public class DataCheckClient
{
public bool Status { get; set; }
public bool Exist { get; set; }
public ulong DataSize { get; set; }
}
public class DataCreateApi
{
public bool Status { get; set; }
public DateTime DateAndTime { get; set; }
public string Name { get; set; }
public byte[] Struct { get; set; }
}
public class DataCreateClient
{
public bool Status { get; set; }
}
}

View File

@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Structures;
using ApiServer.Parametrs;
namespace ApiServer.ApiStruct
{
public class DateGetAnalogApi
{
public int Vdp { get; set; }
public int Index { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
public class DateGetAnalogClient
{
public Analog[] Analog { get; set; }
}
public class DateGetAnalogsApi
{
public int Vdp { get; set; }
public int[] Index { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
public class DateGetAnalogsClient
{
public AnalogArr[] Analogs { get; set; }
}
public class DateGetTechCycleApi
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
public int Vdp { get; set; }
}
public class DateGetTechCycleClient
{
public TechCycle[] TechCycle { get; set; }
}
public class DateGetProtectApi
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
public int Vdp { get; set; }
}
public class DateGetProtectClient
{
public Protect[] Protect { get; set; }
}
public class DateGetDiscretApi
{
public int Vdp { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
}
public class DateGetDiscretClient
{
public Discret[] Discret { get; set; }
}
}

View File

@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Structures;
using ApiServer.Parametrs;
namespace ApiServer.ApiStruct
{
public class DiscretGetiscretsMatrixApi
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
public int Vdp { get; set; }
}
public class DiscretGetDscretsMatrixClient
{
public StateStruct[] StateParams { get; set; }
public DiscretParams[] DiscretParams { get; set; }
public DiscretMatrix[] Discrets { get; set; }
}
public class DiscretGetiscretsApi
{
public DateTime Start { get; set; }
public DateTime End { get; set; }
public int Vdp { get; set; }
}
public class DiscretGetDscretsClient
{
public StateStruct[] StateParams { get; set; }
public DiscretParams[] DiscretParams { get; set; }
public Discret[] Discrets { get; set; }
}
}

View File

@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Structures;
using ApiServer.Parametrs;
namespace ApiServer.ApiStruct
{
public class ParamsGetAnalogApi
{
public string Name { get; set; }
}
public class ParamsGetAnalogClient
{
public AnalogParams[] Analog_params { get; set; }
}
public class ParamsGetMetricClient
{
public Metric[] Metrics { get; set; }
}
public class ParamsGetTechCycleNameClient
{
public TechCycleName[] Name { get; set; }
}
public class ParamsGetTechCycleColorClient
{
public TechCycleColor[] Color { get; set; }
}
public class ParamsGetStateStructClient
{
public StateStruct[] StateStruct { get; set; }
}
public class ParamsGetProtectStateApi
{
public string Name { get; set; }
}
public class ParamsGetProtectStateClient
{
public ProtectState[] ProtectState { get; set; }
}
public class ParamsGetDiscretApi
{
public string Name { get; set; }
}
public class ParamsGetDiscretClient
{
public DiscretParams[] Discret_params { get; set; }
}
}

View File

@ -0,0 +1,81 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using DataClient.Struct;
namespace ApiServer.ApiStruct
{
public class PasportCheckApi
{
public bool Status { get; set; }
public DateTime DateAndTime { get; set; }
public string Name { get; set; }
}
public class PasportCheckClient
{
public bool Status { get; set; }
public bool Exist { get; set; }
public ulong PaspSum { get; set; }
}
public class PasportCreateApi
{
public bool Status { get; set; }
public Pasport Pasp { get; set; }
}
public class PasportCreateClient
{
public bool Status { get; set; }
}
public class PasportGetListApi
{
public DateTime Date { get; set; }
}
public class PasportGetListClient
{
public string[] Name { get; set; }
public string[] Time { get; set; }
}
public class PasportGetPasportApi
{
public DateTime Date { get; set; }
public string Name { get; set; }
}
public class PasportGetPasportClient
{
public bool HasData { get; set; }
public byte? NumVDP { get; set; }
public string DStart { get; set; }
public string DEnd { get; set; }
public bool HasPasport { get; set; }
public int Kod_npl { get; set; }
public string Nplav { get; set; }
public string Rm { get; set; }
public string Splav { get; set; }
public string IS { get; set; }
public ushort Notd { get; set; }
public ushort Vessl { get; set; }
public ushort Diam { get; set; }
public ushort Prpl { get; set; }
public string Tin { get; set; }
public string Dzap { get; set; }
public short Dlog { get; set; }
public short Last { get; set; }
public short Dlper { get; set; }
public string Nazn { get; set; }
public ushort Kompl { get; set; }
public ushort Izl { get; set; }
public float Robm { get; set; }
public float Rizol { get; set; }
public ushort Dkr { get; set; }
public string Nkon { get; set; }
public string Pos { get; set; }
public string Ukaz { get; set; }
public string Zakaz { get; set; }
public string Kat { get; set; }
public string Pril { get; set; }
public string Rezerved { get; set; }
}
}

View File

@ -0,0 +1,56 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": { "parent": [ "default" ] },
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": { "parent": [ "default" ] },
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

View File

@ -0,0 +1,380 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Ток дуги",
"s_name": "I д",
"metric": "кА",
"mul": 0.1,
"show_default": true,
"bytes": [ 0, 1 ]
},
{
"index": 1,
"name": "Напряжение дуги",
"s_name": "U д",
"metric": "В",
"mul": 0.1,
"show_default": true,
"bytes": [ 2, 3 ]
},
{
"index": 2,
"name": "Ток рабочего двигателя",
"s_name": "I рд",
"metric": "А",
"mul": 0.1,
"bytes": [ 4, 5 ]
},
{
"index": 3,
"name": "U рабочего двигателя",
"s_name": "U рд",
"metric": "В",
"mul": 0.1,
"bytes": [ 6, 7 ]
},
{
"index": 4,
"name": "Ток соленоида",
"s_name": "I сол",
"metric": "А",
"mul": 0.1,
"bytes": [ 8, 9 ]
},
{
"index": 5,
"name": "U соленоида",
"s_name": "U сол",
"metric": "В",
"mul": 0.1,
"bytes": [ 10, 11 ]
},
{
"index": 6,
"name": "Ток задания",
"s_name": "I рз",
"metric": "кА",
"mul": 0.1,
"show_default": true,
"bytes": [ 12, 13 ]
},
{
"index": 7,
"name": "t кристаллизатора на входе",
"s_name": "t кр.вых",
"metric": "гр.С",
"mul": 1,
"bytes": [ 14, 15 ]
},
{
"index": 8,
"name": "t кристаллизатора на выходе",
"s_name": "t кр.вх",
"metric": "гр.С",
"mul": 1,
"bytes": [ 16, 17 ]
},
{
"index": 9,
"name": "t вакуум-камеры",
"s_name": "t вак-кам",
"metric": "гр.С",
"mul": 1,
"bytes": [ 18, 19 ]
},
{
"index": 10,
"name": "t штока",
"s_name": "t шт",
"metric": "гр.С",
"mul": 1,
"bytes": [ 20, 21 ]
},
{
"index": 11,
"name": "U контроля",
"s_name": "U конт",
"metric": "В",
"mul": 0.1,
"bytes": [ 22, 23 ]
},
{
"index": 12,
"name": "Перемещение",
"s_name": "S шт",
"metric": "мм",
"mul": 1,
"bytes": [ 24, 25 ]
},
{
"index": 13,
"name": "Вакуум",
"s_name": "Вакуум",
"metric": "мкм.рт.ст",
"mul": 1,
"show_default": true,
"bytes": [ 26, 27 ]
},
{
"index": 14,
"name": "Изоляция шток-крышка",
"s_name": "R шт-кр",
"metric": "В",
"mul": 0.1,
"bytes": [ 28, 29 ]
},
{
"index": 15,
"name": "Изоляция крышка-камера",
"s_name": "R кр-кам",
"metric": "В",
"mul": 0.1,
"bytes": [ 30, 31 ]
},
{
"index": 16,
"name": "Расход воды",
"s_name": "Q в.кр",
"metric": "м^3/ч",
"mul": 1,
"bytes": [ 32, 33 ]
},
{
"index": 17,
"name": "Капельные замыкания",
"s_name": "Кап.зам.",
"metric": "УЕ",
"mul": 0.01,
"bytes": [ 34, 35 ]
},
{
"index": 18,
"name": "Усреднённая ширина импульсов КЗ",
"s_name": "Кап.зым.",
"metric": "УЕ",
"mul": 0.1,
"bytes": [ 36, 37 ]
},
{
"index": 19,
"name": "Проток воды фланца",
"s_name": "Qв. фл.",
"metric": "м^3/ч",
"mul": 0.01,
"bytes": [ 38, 39 ]
},
{
"index": 20,
"name": "Проток воды штока",
"s_name": "Qв. шт.",
"metric": "м^3/ч",
"mul": 0.01,
"bytes": [ 40, 41 ]
},
{
"index": 21,
"name": "Давление воды крист.+1,5",
"s_name": "P в.кр",
"metric": "кгс/см^2",
"mul": 0.01,
"bytes": [ 42, 43 ]
},
{
"index": 22,
"name": "Проток воды камеры",
"s_name": "Qв. кам.",
"metric": "м^3/ч",
"mul": 0.01,
"bytes": [ 44, 45 ]
},
{
"index": 23,
"name": "Ток задания источника(САУ)",
"s_name": "I з.ист САУ",
"metric": "кА",
"mul": 0.1,
"bytes": [ 58, 59 ]
},
{
"index": 24,
"name": "",
"s_name": "",
"metric": "УЕ",
"mul": 0.1,
"bytes": [ 60, 61 ]
},
{
"index": 25,
"name": "ПИД-рег. основная уставка",
"s_name": "ПИД-осн",
"metric": "В",
"mul": 0.1,
"bytes": [ 62, 63 ]
},
{
"index": 26,
"name": "ПИД-рег. макс. скорость",
"s_name": "ПИД-макс",
"metric": "В",
"mul": 0.1,
"bytes": [ 64, 65 ]
},
{
"index": 27,
"name": "t фланца вакуум-камеры",
"s_name": "t фл.",
"metric": "гр.С",
"mul": 1,
"bytes": [ 66, 67 ]
},
{
"index": 28,
"name": "t подставки",
"s_name": "t под.",
"metric": "гр.С",
"mul": 1,
"bytes": [ 68, 69 ]
},
{
"index": 29,
"name": "Проток воды подставки",
"s_name": "Qв. под.",
"metric": "м^3/ч",
"mul": 0.01,
"bytes": [ 70, 71 ]
},
{
"index": 30,
"name": "Задание соленоида",
"s_name": "Зад. сол.",
"metric": "А",
"mul": 0.1,
"bytes": [ 72, 73 ]
},
{
"index": 31,
"name": "Ток задания источника(преобраз.)",
"s_name": "I з.ист. преоб.",
"metric": "кА",
"mul": 0.1,
"bytes": [ 74, 75 ]
},
{
"index": 32,
"name": "Резерв",
"s_name": "",
"metric": "УЕ",
"mul": 0.1,
"bytes": [ 76, 77 ]
},
{
"index": 33,
"name": "Вакуум по МЕТРАН-1200",
"s_name": "МЕТРАН-1200",
"metric": "мм.рт.ст",
"mul": 0.1,
"show_default": true,
"bytes": [ 78, 79 ]
},
{
"index": 34,
"name": "Вакуум по МЕТРАН-18,75",
"s_name": "МЕТРАН-18,25",
"metric": "мм.рт.ст",
"mul": 0.001,
"show_default": true,
"bytes": [ 80, 81 ]
},
{
"index": 35,
"name": "Давление газа в баллоне",
"s_name": "P г.балл.",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": [ 82, 83 ]
},
{
"index": 36,
"name": "Давление воды поддона",
"s_name": "P в.подд.",
"metric": "кгс/см^2",
"mul": 1,
"bytes": [ 84, 85 ]
},
{
"index": 37,
"name": "Задание тока дуги (ЦАП)",
"s_name": "Зад.I, ЦАП",
"metric": "кА",
"mul": 0.1,
"bytes": [ 86, 87 ]
},
{
"index": 38,
"name": "Задкние скорости рабочего двигателя",
"s_name": "Зад.ск.раб.дв",
"metric": "В",
"mul": 0.1,
"bytes": [ 88, 89 ]
},
{
"index": 39,
"name": "Ток двигателя насоса ARPW",
"s_name": "I дв. ARPW",
"metric": "А",
"mul": 0.01,
"bytes": [ 90, 91 ]
},
{
"index": 40,
"name": "Энергия плавильного пролёта",
"s_name": "Эн.пролёта, МВт",
"metric": "МВт",
"mul": 0.1,
"bytes": [ 92, 93 ]
},
{
"index": 41,
"name": "Среднее напряжение плавления",
"s_name": "U средн, В",
"metric": "В",
"mul": 0.1,
"bytes": [ 94, 95 ]
},
{
"index": 42,
"name": "ГМП: ток катушки 1",
"s_name": "I кат1 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 96, 97 ]
},
{
"index": 43,
"name": "ГМП: ток катушки 2",
"s_name": "I кат2 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 98, 99 ]
},
{
"index": 44,
"name": "ГМП: ток катушки 3",
"s_name": "I кат3 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 100, 101 ]
},
{
"index": 45,
"name": "ГМП: частота",
"s_name": "Част. ГМП",
"metric": "Гц",
"mul": 1,
"bytes": [ 102, 103 ]
}
]
}
}

View File

@ -0,0 +1,110 @@
{
"00": {
"struct": [
{
"index": 0,
"name": "Общий: t воды водооборота",
"s_name": "t в",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 1,
"name": "Общий: Давление воды водооборота",
"s_name": "P в",
"metric": "кгс/см^2",
"mul": 0.01,
"bytes": []
},
{
"index": 2,
"name": "Общий: Давление масла в бутыли",
"s_name": "P масла бут",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 3,
"name": "Общий: t воздуха в машинном зале",
"s_name": "t машзал",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 4,
"name": "Общий: t воздуха на улице",
"s_name": "t улица",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 5,
"name": "Общий: Атмосферное давление",
"s_name": "p атм",
"metric": "мм.рт.ст",
"mul": 0.1,
"bytes": []
},
{
"index": 6,
"name": "Общий: Давление масла в магистрали",
"s_name": "P масла маг",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 7,
"name": "Общий: Давление воды водооборота-К90",
"s_name": "P в-90",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 8,
"name": "Скорость штока за 1 мин",
"s_name": "V шт",
"metric": "мм/мин",
"mul": 0.01,
"bytes": []
},
{
"index": 9,
"name": "Вакуум по МЕТРАН 1,2",
"s_name": "МЕТРАН1,2",
"metric": "мм.рт.ст",
"mul": 0.001,
"bytes": []
},
{
"index": 10,
"name": "ВС: Ток дуги",
"s_name": "ВС:I д",
"metric": "кА",
"mul": 0.1,
"bytes": []
},
{
"index": 12,
"name": "ВС: Напряжение дуги",
"s_name": "ВС:U д",
"metric": "В",
"mul": 0.1,
"bytes": []
},
{
"index": 13,
"name": "ВС: Ток задания",
"s_name": "ВС:I рз",
"metric": "кА",
"mul": 0.1,
"bytes": []
}
]
}
}

View File

@ -0,0 +1,3 @@
{
"red" : "#ff0000"
}

View File

@ -0,0 +1,87 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": {
"parent": [ "default" ],
"struct": [
{
"index": 2,
"name": "Âîäà êàìåðû (ýêñï.)",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 2
}
]
}
]
},
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": {
"parent": [ "default" ],
"struct": [
{
"index": 1,
"name": "Âîäà øòîêà (ýêñï.)",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 1
}
]
}
]
},
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

View File

@ -0,0 +1,823 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Дискрет №0",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 46,
"bit_index": 0
}
]
},
{
"index": 1,
"name": "P1 воды кристаллизатора",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 1
}
]
},
{
"index": 2,
"name": "P2 воды кристаллизатора",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 2
}
]
},
{
"index": 3,
"name": "Вода камеры",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 3
}
]
},
{
"index": 4,
"name": "Вода штока",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 4
}
]
},
{
"index": 5,
"name": "Дверь - А",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 5
}
]
},
{
"index": 6,
"name": "Дверь - Б",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 6
}
]
},
{
"index": 7,
"name": "Дверь - В",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 7
}
]
},
{
"index": 8,
"name": "Дверь - Г",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 0
}
]
},
{
"index": 9,
"name": "Дверь - Д",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 1
}
]
},
{
"index": 10,
"name": "Люк",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 2
}
]
},
{
"index": 11,
"name": "Пенал",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 3
}
]
},
{
"index": 12,
"name": "Упоры",
"state_struct": "out_in_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 4
}
]
},
{
"index": 13,
"name": "Прижимы",
"state_struct": "spinn_clamp_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 5
}
]
},
{
"index": 14,
"name": "Вакуумный выключатель",
"state_struct": "none_on_off_err_3_4",
"bits": [
{
"byte_index": 47,
"bit_index": 6
},
{
"byte_index": 47,
"bit_index": 7
}
]
},
{
"index": 15,
"skip": true
},
{
"index": 16,
"name": "\"Автоматика\"",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 0
},
{
"byte_index": 49,
"bit_index": 7
}
]
},
{
"index": 31,
"skip": true
},
{
"index": 17,
"name": "БПС",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 1
},
{
"byte_index": 50,
"bit_index": 0
}
]
},
{
"index": 32,
"skip": true
},
{
"index": 18,
"name": "Соленоид",
"state_struct": "none_err_const_puls_1_2",
"bits": [
{
"byte_index": 48,
"bit_index": 2
},
{
"byte_index": 48,
"bit_index": 3
}
]
},
{
"index": 19,
"skip": true
},
{
"index": 20,
"name": "ARPW",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 4
},
{
"byte_index": 48,
"bit_index": 7
}
]
},
{
"index": 23,
"skip": true
},
{
"index": 21,
"name": "ДВН",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 5
},
{
"byte_index": 49,
"bit_index": 3
}
]
},
{
"index": 27,
"skip": true
},
{
"index": 22,
"name": "SZO",
"state_struct": "off_on",
"bits": [
{
"byte_index": 48,
"bit_index": 6
}
]
},
{
"index": 24,
"name": "ДУ-260",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 0
},
{
"byte_index": 49,
"bit_index": 1
}
]
},
{
"index": 25,
"skip": true
},
{
"index": 26,
"name": "ДУ-100",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 2
},
{
"byte_index": 50,
"bit_index": 2
}
]
},
{
"index": 34,
"skip": true
},
{
"index": 28,
"name": "ДУ-32",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 4
},
{
"byte_index": 50,
"bit_index": 3
}
]
},
{
"index": 35,
"skip": true
},
{
"index": 29,
"name": "Шток вверху",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 49,
"bit_index": 5
}
]
},
{
"index": 30,
"name": "Шток внизу",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 49,
"bit_index": 6
}
]
},
{
"index": 33,
"name": "Плохой вакуум",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 50,
"bit_index": 1
}
]
},
{
"index": 36,
"name": "Напряжение аварийной сигнализации",
"state_struct": "no_yes_ok",
"bits": [
{
"byte_index": 50,
"bit_index": 4
}
]
},
{
"index": 37,
"name": "Взрывной клапан",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 50,
"bit_index": 5
}
]
},
{
"index": 38,
"name": "Ключ УП в положении \"Автоматика\"",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 50,
"bit_index": 6
}
]
},
{
"index": 39,
"name": "off_on_err",
"state_struct": "Реле \"Авария источника\"",
"bits": [
{
"byte_index": 50,
"bit_index": 7
}
]
},
{
"index": 40,
"name": "Сброс звуковой сигнализации",
"state_struct": "spinn_press",
"bits": [
{
"byte_index": 51,
"bit_index": 0
}
]
},
{
"index": 41,
"name": "Вакуум по ЭКМВ",
"state_struct": "have_no_err",
"bits": [
{
"byte_index": 51,
"bit_index": 1
}
]
},
{
"index": 42,
"name": "Реле \"Имитация тока дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 2
}
]
},
{
"index": 43,
"name": "Реле \"АУ током дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 3
}
]
},
{
"index": 44,
"name": "Реле \"Имитация напряжения дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 4
}
]
},
{
"index": 45,
"name": "Реле \"Имитация вакуума печи\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 5
}
]
},
{
"index": 46,
"name": "Реле \"Имитация T воды кристаллизатора\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 6
}
]
},
{
"index": 47,
"name": "Реле \"Имитация T воды вакуумкамеры\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 7
}
]
},
{
"index": 48,
"name": "Реле \"Имитация T воды штока\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 0
}
]
},
{
"index": 49,
"name": "Реле 1 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 1
}
]
},
{
"index": 50,
"name": "Реле 2 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 2
}
]
},
{
"index": 51,
"name": "Реле 3 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 3
}
]
},
{
"index": 52,
"name": "Реле 4 \"Контроль метрологии\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 4
}
]
},
{
"index": 53,
"name": "Реле 5 \"Измерение изоляции (соленоид)\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 5
}
]
},
{
"index": 54,
"name": "Реле \"АУ штоком\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 6
}
]
},
{
"index": 55,
"name": "Реле \"Включение Uкалибровки\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 7
}
]
},
{
"index": 56,
"name": "Реле \"Движение штока вверх\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 53,
"bit_index": 0
}
]
},
{
"index": 57,
"name": "УП в положении КЗ",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 53,
"bit_index": 1
}
]
},
{
"index": 58,
"name": "Нет питания, включено \"резервное\" UPS",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 2
}
]
},
{
"index": 59,
"name": "Вода подставки",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 3
}
]
},
{
"index": 60,
"name": "Реле \"Разрешение на вакуумирование печи\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 53,
"bit_index": 4
}
]
},
{
"index": 61,
"name": "Низкий заряд аккумулятора UPS",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 53,
"bit_index": 5
}
]
},
{
"index": 62,
"name": "КВ рамы",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 6
}
]
},
{
"index": 63,
"name": "Источник: +24В",
"state_struct": "no_have_ok",
"bits": [
{
"byte_index": 53,
"bit_index": 7
}
]
},
{
"index": 64,
"name": "Реле \"Движение штока вниз\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 54,
"bit_index": 0
}
]
},
{
"index": 65,
"name": "Проверка источника",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 54,
"bit_index": 1
}
]
},
{
"index": 66,
"name": "Станция",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 54,
"bit_index": 2
},
{
"byte_index": 54,
"bit_index": 3
}
]
},
{
"index": 67,
"skip": true
},
{
"index": 68,
"name": "Постоянное U=220В",
"state_struct": "no_have",
"bits": [
{
"byte_index": 54,
"bit_index": 4
}
]
},
{
"index": 69,
"name": "Источник готов",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 54,
"bit_index": 5
}
]
},
{
"index": 70,
"name": "Авария привода",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 6
}
]
},
{
"index": 71,
"name": "Реле \"Напуск газа в печь\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 54,
"bit_index": 7
}
]
},
{
"index": 74,
"name": "Реле \"АУ током дуги ВДП №46\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 2
}
]
},
{
"index": 76,
"name": "Готовность привода",
"state_struct": "no_have_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 4
}
]
},
{
"index": 78,
"name": "Реле \"Авария источника ВДП №46\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 6
}
]
},
{
"index": 79,
"name": "Клапан подачи аргона",
"state_struct": "close_open_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 7
}
]
},
{
"index": 95,
"name": "Разрешение на вкл. вакуумного выключателя",
"state_struct": "off_on",
"bits": [
{
"byte_index": 57,
"bit_index": 7
}
]
}
]
}
}

View File

@ -0,0 +1,127 @@
{
"power_new": {
"struct": [
{
"index": 39,
"name": "Àâàðèéíàÿ ñèãíàëèçàöèÿ èñòî÷íèêà",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 50,
"bit_index": 7
}
]
},
{
"index": 63,
"name": "Ñòàíöèÿ âêëþ÷åíà",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 53,
"bit_index": 7
}
]
},
{
"index": 66,
"name": "Ïðîáîé òèðèñòîðà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 2
}
]
},
{
"index": 67,
"name": "Ìàêñ. òîê âûïðÿìèòåëüíîãî áëîêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 3
}
]
},
{
"index": 68,
"name": "Ïåðåãðóçêà âûïðÿìèòåëüíîãî áëîêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 4
}
]
},
{
"index": 69,
"name": "Ðåëå ìàêñèìàëüíîãî òîêà",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 54,
"bit_index": 5
}
]
},
{
"index": 72,
"name": "Íåèñïðàâíîñòü ÓÇÏ",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 0
}
]
},
{
"index": 73,
"name": "Íåèñïðàâíîñòü èñòî÷íèêà ïèòàíèÿ",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 1
}
]
},
{
"index": 74,
"name": "Ãîòîâíîñòü èñòî÷íèêà",
"state_struct": "no_yes_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 2
}
]
},
{
"index": 75,
"name": "Ïåðåãðåâ èñòî÷íèêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 3
}
]
},
{
"index": 77,
"name": "Ïðåäóïðåäèòåëüíàÿ ñèãíàëèçàöèÿ èñòî÷íèêà",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 5
}
]
}
]
}
}

View File

@ -0,0 +1,13 @@
{
"кА": false,
"В": false,
"А": false,
"гр.С": false,
"мм": false,
"мкм.рт.ст": true,
"м^3/ч": false,
"кгс/см^2": false,
"мм.рт.ст": true,
"МВт": false,
"Гц": true
}

View File

@ -0,0 +1,56 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": { "parent": [ "default" ] },
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": { "parent": [ "default" ] },
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

View File

@ -0,0 +1,356 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Alarm ! Zero signal !",
"state_struct": "protect_1"
},
{
"index":1,
"name": "Шток внизу !",
"state_struct": "protect_1"
},
{
"index":2,
"name": "Шток вверху !",
"state_struct": "protect_1"
},
{
"index": 3,
"name": "Uдуги > Uмакс !",
"state_struct": "protect_1"
},
{
"index": 4,
"name": "Uдуги < Uмин !",
"state_struct": "protect_1"
},
{
"index": 5,
"name": "Qводы кристаллизатора !",
"state_struct": "protect_1"
},
{
"index": 6,
"name": "P2 воды кристаллизатора ЭКМ отметка -5м !",
"state_struct": "protect_1"
},
{
"index": 7,
"name": "P1 воды кристаллизатора ЭКМ отметка +1.5м !",
"state_struct": "protect_1"
},
{
"index": 8,
"name": "P1 воды кристаллизатора ЭКМ отметка +1.5м !",
"state_struct": "protect_1"
},
{
"index": 9,
"name": "Вода штока !",
"state_struct": "protect_1"
},
{
"index":10,
"name": "tводы штока !",
"state_struct": "protect_1"
},
{
"index":11,
"name": "Вода вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index":12,
"name": "tводы вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index":13,
"name": "Ухудшение вакуума !",
"state_struct": "protect_1"
},
{
"index": 14,
"name": "Нет готовности к токовой операции!",
"state_struct": "protect_1"
},
{
"index": 15,
"name": "Дверь А открыта !",
"state_struct": "protect_1"
},
{
"index": 16,
"name": "Дверь Б открыта !",
"state_struct": "protect_1"
},
{
"index": 17,
"name": "Дверь В открыта !",
"state_struct": "protect_1"
},
{
"index": 18,
"name": "Дверь Г открыта !",
"state_struct": "protect_1"
},
{
"index": 19,
"name": "Дверь Д открыта !",
"state_struct": "protect_1"
},
{
"index": 20,
"name": "Прижимы !",
"state_struct": "protect_1"
},
{
"index": 21,
"name": "Упоры !",
"state_struct": "protect_1"
},
{
"index": 22,
"name": "Люк открыт !",
"state_struct": "protect_1"
},
{
"index": 23,
"name": "Пенал открыт !",
"state_struct": "protect_1"
},
{
"index": 24,
"name": "Вода подставки !",
"state_struct": "protect_1"
},
{
"index": 25,
"name": "Нет U аварийной сигнализации !",
"state_struct": "protect_1"
},
{
"index": 26,
"name": "Плохой вакуум !",
"state_struct": "protect_1"
},
{
"index": 27,
"name": "tводы подставки !",
"state_struct": "protect_1"
},
{
"index": 28,
"name": "Давление газа в печи выше атмосферного !",
"state_struct": "protect_1"
},
{
"index": 29,
"name": "Вода фланца вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index": 30,
"name": "Отключение ВВ!",
"state_struct": "protect_1"
},
{
"index": 31,
"name": "tводы фланца вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index": 32,
"name": "P воды поддона !",
"state_struct": "protect_1"
},
{
"index": 33,
"name": "Отсутствует связь с сервером 1 %s!*3",
"state_struct": "protect_1"
},
{
"index": 34,
"name": "Отсутствует связь с сервером 2 %s!*3",
"state_struct": "protect_1"
},
{
"index": 35,
"name": "Отсутствует связь с контроллером ГМП !",
"state_struct": "protect_1"
},
{
"index": 36,
"name": "Неисправность в работе ARPW !",
"state_struct": "protect_1"
},
{
"index": 37,
"name": "Неисправность в работе ДВН !",
"state_struct": "protect_1"
},
{
"index": 38,
"name": "Неисправность в работе ВВ !",
"state_struct": "protect_1"
},
{
"index": 39,
"name": "Неисправность в работе ДУ-260 !",
"state_struct": "protect_1"
},
{
"index": 40,
"name": "Неисправность в работе ДУ-100 !",
"state_struct": "protect_1"
},
{
"index": 41,
"name": "Неисправность в работе ДУ-32 !",
"state_struct": "protect_1"
},
{
"index": 43,
"name": "Неисправность в работе БПС !",
"state_struct": "protect_1"
},
{
"index": 44,
"name": "Неисправность в режиме работы соленоида !",
"state_struct": "protect_1"
},
{
"index": 45,
"name": "Нет питания сети !",
"state_struct": "protect_1"
},
{
"index": 46,
"name": "КВ рамы",
"state_struct": "protect_1"
},
{
"index": 48,
"name": "Нет сигнала датчика (МЕТРАН отм.+1.5м) !",
"state_struct": "protect_1"
},
{
"index": 49,
"name": "БПС ГМП отключен!",
"state_struct": "protect_1"
},
{
"index": 50,
"name": "Неисправность источника питания ВДП !",
"state_struct": "protect_1"
},
{
"index": 51,
"name": "Нет принимаемых данных !",
"state_struct": "protect_1"
},
{
"index": 52,
"name": "Разрыв дуги !",
"state_struct": "protect_1"
},
{
"index": 53,
"name": "Нет готовности привода!",
"state_struct": "protect_1"
},
{
"index": 54,
"name": "Alarm ! Signal A1_22 is set.",
"state_struct": "protect_1"
},
{
"index": 55,
"name": "Короткое замыкание !",
"state_struct": "protect_1"
},
{
"index": 56,
"name": "Переключатель УП не в положении АВТ !",
"state_struct": "protect_1"
},
{
"index": 57,
"name": "Проверить перевод разьединителей печей!",
"state_struct": "protect_1"
},
{
"index": 58,
"name": "Снижение протока воды штока!",
"state_struct": "protect_1"
},
{
"index": 59,
"name": "Снижение протока воды камеры!",
"state_struct": "protect_1"
},
{
"index": 60,
"name": "Снижение протока воды фланца!",
"state_struct": "protect_1"
},
{
"index": 61,
"name": "Запрет зажигания дуги по времени вакуумирования!",
"state_struct": "protect_1"
},
{
"index": 62,
"name": "Отсутствует ток соленоида !",
"state_struct": "protect_1"
},
{
"index": 63,
"name": "Отсутствует перемещение штока !",
"state_struct": "protect_1"
},
{
"index": 64,
"name": "Отсутствует перемещение штока > 15 минут!",
"state_struct": "protect_1"
},
{
"index": 65,
"name": "Запрет на включение вакуумных насосов !",
"state_struct": "protect_1"
},
{
"index": 67,
"name": "ВДП развакуумирована !",
"state_struct": "protect_1"
},
{
"index": 70,
"name": "Смещение начала архивации %s !*1",
"state_struct": "protect_1"
},
{
"index": 71,
"name": "Смещение конца архивации %s !*1",
"state_struct": "protect_1"
},
{
"index": 74,
"name": "",
"state_struct": "protect_1"
},
{
"index": 75,
"name": "Alarm ! Signal A1_43 is set.",
"state_struct": "protect_1"
},
{
"index": 76,
"name": "Alarm ! Signal A1_44 is set.",
"state_struct": "protect_1"
}
]
}
}

View File

@ -0,0 +1,265 @@
{
"protect_1": [
{
"index": 0,
"name": "Отсутствует",
"color": "#00ff00"
},
{
"index": 1,
"name": "Сработало",
"color": "#ffff00"
},
{
"index": 2,
"name": "Сброс тока",
"color": "#ff0000"
}
],
"no_yes_err": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Да",
"color": "#ff0000"
}
],
"no_yes_ok": [
{
"index": 0,
"name": "Нет",
"color": "#ff0000"
},
{
"index": 1,
"name": "Да",
"color": "#00ff00"
}
],
"no_yes": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Да",
"color": "#00ff00"
}
],
"have_no_err": [
{
"index": 0,
"name": "Есть",
"color": "#00ff00"
},
{
"index": 1,
"name": "Нет",
"color": "#ff0000"
}
],
"no_have_ok": [
{
"index": 0,
"name": "Нет",
"color": "#ff0000"
},
{
"index": 1,
"name": "Есть",
"color": "#00ff00"
}
],
"no_have": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Есть",
"color": "#00ff00"
}
],
"off_on_err": [
{
"index": 0,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 1,
"name": "Вкл",
"color": "#ff0000"
}
],
"off_on": [
{
"index": 0,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
}
],
"open_close_ok": [
{
"index": 0,
"name": "Откр",
"color": "#ff0000"
},
{
"index": 1,
"name": "Закр",
"color": "#00ff00"
}
],
"close_open_ok": [
{
"index": 0,
"name": "Закр",
"color": "#ff0000"
},
{
"index": 1,
"name": "Откр",
"color": "#00ff00"
}
],
"out_in_ok": [
{
"index": 0,
"name": "Не введ",
"color": "#ff0000"
},
{
"index": 1,
"name": "Введ",
"color": "#00ff00"
}
],
"spinn_clamp_ok": [
{
"index": 0,
"name": "Отж",
"color": "#ff0000"
},
{
"index": 1,
"name": "Приж",
"color": "#00ff00"
}
],
"spinn_press": [
{
"index": 0,
"name": "Отж",
"color": "#00ff00"
},
{
"index": 1,
"name": "Наж",
"color": "#00ff00"
}
],
"none_on_off_err_3_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
},
{
"index": 2,
"name": "Выкл",
"color": "#ff0000"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
],
"none_on_off_err_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
},
{
"index": 2,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
],
"none_err_const_puls_1_2": [
{
"index": 0,
"name": "Авария",
"color": "#ff0000"
},
{
"index": 1,
"name": "Авария",
"color": "#ff0000"
},
{
"index": 2,
"name": "Пост",
"color": "#00ff00"
},
{
"index": 3,
"name": "Пульс",
"color": "#00ff00"
}
],
"none_open_close_err_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Откр",
"color": "#00ff00"
},
{
"index": 2,
"name": "Закр",
"color": "#00ff00"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
]
}

View File

@ -0,0 +1,94 @@
{
"tech_cycle_conf": [
{
"index": -1,
"name": "Конец технологического цикла (ручной)",
"color": "#00ffff"
},
{
"index": 0,
"name": "Конец технологического цикла",
"color": "#00ffff"
},
{
"index": 1,
"name": "Выгрузка-загрузка",
"color": "#00ffff"
},
{
"index": 2,
"name": "Вакуумирование на приварку",
"color": "#0000ff"
},
{
"index": 5,
"name": "Приварка",
"color": "#ff0000"
},
{
"index": 6,
"name": "Охлаждение приварки",
"color": "#00ff00"
},
{
"index": 7,
"name": "Осмотр приварки",
"color": "#00ffff"
},
{
"index": 8,
"name": "Вакуумирование на плавку",
"color": "#0000ff"
},
{
"index": 9,
"name": "Разведение ванны",
"color": "#8500b6"
},
{
"index": 10,
"name": "Плавка (основной режим)",
"color": "#ff0000"
},
{
"index": 11,
"name": "ВУР",
"color": "#ff00ff"
},
{
"index": 12,
"name": "Охлаждение слитка",
"color": "#00ff00"
},
{
"index": 13,
"name": "Выгрузка комплекта",
"color": "#00ffff"
},
{
"index": 14,
"name": "Вакуумирование на оплавление",
"color": "#0000ff"
},
{
"index": 15,
"name": "Оплавление",
"color": "#ff0000"
},
{
"index": 16,
"name": "Охлаждение оплавыша",
"color": "#00ff00"
},
{
"index": 17,
"name": "Слив металла",
"color": "#8500b6"
},
{
"index": 25,
"name": "Проверка защит",
"color": "#00ffff"
}
]
}

View File

@ -0,0 +1,86 @@
using Microsoft.AspNetCore.Mvc;
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.ApiStruct;
using Newtonsoft.Json;
using System.IO;
namespace ApiServer.Controllers
{
[ApiController, Route("[controller]")]
public class DataController : ControllerBase
{
private Logger log = LogManager.GetCurrentClassLogger();
[HttpPost, Route("check")]
public DataCheckClient Check([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DataCheckApi>(value.ToString());
if (!getResult.Status || string.IsNullOrEmpty(getResult.Name))
{
log.Warn("Wrong answer.");
return new DataCheckClient();
}
var dataDir = Path.Combine(
Directory.GetCurrentDirectory(),
"data", "data",
getResult.DateAndTime.Year.ToString("D4"),
getResult.DateAndTime.Month.ToString("D2"),
getResult.DateAndTime.Day.ToString("D2"),
getResult.Name);
log.Info("Search data: " + dataDir);
if (!System.IO.File.Exists(dataDir))
{
log.Info("Data not exist: " + dataDir);
return new DataCheckClient { Status = true, Exist = false, DataSize = 0 };
}
var dataArr = System.IO.File.ReadAllBytes(dataDir);
log.Info("Send data size: " + dataArr.Length + " | " + dataDir);
return new DataCheckClient { Status = true, Exist = true, DataSize = (ulong)dataArr.Length };
}
catch (Exception e)
{
log.Warn(e);
return new DataCheckClient();
}
}
[DisableRequestSizeLimit]
[HttpPost, Route("create")]
public DataCreateClient Create([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DataCreateApi>(value.ToString());
if (!getResult.Status ||
string.IsNullOrEmpty(getResult.Name) ||
getResult.Struct.Length == 0)
{
log.Warn("Wrong answer.");
return new DataCreateClient();
}
var dataDir = Path.Combine(
Directory.GetCurrentDirectory(),
"data", "data",
getResult.DateAndTime.Year.ToString("D4"),
getResult.DateAndTime.Month.ToString("D2"),
getResult.DateAndTime.Day.ToString("D2"));
if (!Directory.Exists(dataDir))
Directory.CreateDirectory(dataDir);
dataDir = Path.Combine(dataDir, getResult.Name);
System.IO.File.WriteAllBytes(dataDir, getResult.Struct);
log.Info("Save data: " + dataDir);
return new DataCreateClient { Status = true };
}
catch (Exception e)
{
log.Warn(e);
return new DataCreateClient();
}
}
}
}

View File

@ -0,0 +1,324 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using Newtonsoft;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
using NLog;
using DataClient.Struct;
using System.IO;
using ApiServer.ApiStruct;
namespace ApiServer.Controllers
{
[ApiController, Route("[controller]")]
public class DateController : ControllerBase
{
private Logger log = LogManager.GetCurrentClassLogger();
[HttpPost, Route("getanalog")]
public DateGetAnalogClient GetAnalog([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DateGetAnalogApi>(
value.ToString());
log.Info("Ask analog: vdp-" +
getResult.Vdp.ToString() + " index-" +
getResult.Index.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " " +
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_analogs = new Dictionary<int, List<Structures.Analog>>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0, 0, 0
);
var sub_res = new List<Structures.Analog>();
while (flagDate <= getResult.End)
{
var analogs = WorkWithFiles.GetAnalogs(flagDate, getResult.Vdp);
foreach (var analog_arr in analogs)
{
if (analog_arr.Index != getResult.Index)
continue;
Structures.Analog first_analog = null;
for (var i = 0; i < analog_arr.Analogs.Length; i++)
{
if (analog_arr.Analogs[i].start < getResult.Start)
{
first_analog = analog_arr.Analogs[i];
first_analog.start = getResult.Start;
continue;
}
if (analog_arr.Analogs[i].start > getResult.End)
continue;
if (sub_res.Count == 0 && first_analog != null)
sub_res.Add(first_analog);
sub_res.Add(analog_arr.Analogs[i]);
}
}
flagDate = flagDate.AddDays(1);
}
return new DateGetAnalogClient()
{
Analog = sub_res.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
throw;
//return new DateGetAnalogClient();
}
}
[HttpPost, Route("getanalogs")]
public DateGetAnalogsClient GetAnalogs([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DateGetAnalogsApi>(
value.ToString());
log.Info("Ask analog: vdp-" +
getResult.Vdp.ToString() + " index-" +
getResult.Index.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " " +
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_analogs = new Dictionary<int, List<Structures.Analog>>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0, 0, 0
);
var sub_res = new Dictionary<int, List<Structures.Analog>>();
while (flagDate <= getResult.End)
{
var analogs = WorkWithFiles.GetAnalogs(flagDate, getResult.Vdp);
foreach (var analog_arr in analogs)
{
if (!getResult.Index.Contains(analog_arr.Index))
continue;
if (!sub_res.ContainsKey(analog_arr.Index))
sub_res.Add(analog_arr.Index, new List<Structures.Analog>());
Structures.Analog first_analog = null;
for (var i = 0; i < analog_arr.Analogs.Length; i++)
{
if (analog_arr.Analogs[i].start < getResult.Start)
{
first_analog = analog_arr.Analogs[i];
first_analog.start = getResult.Start;
continue;
}
if (analog_arr.Analogs[i].start > getResult.End)
continue;
if (sub_res[analog_arr.Index].Count == 0 && first_analog != null)
sub_res[analog_arr.Index].Add(first_analog);
sub_res[analog_arr.Index].Add(analog_arr.Analogs[i]);
}
}
flagDate = flagDate.AddDays(1);
}
var result = new List<Structures.AnalogArr>();
foreach (var d in sub_res)
result.Add(new Structures.AnalogArr() {
Index = d.Key,
Analogs = d.Value.ToArray()
});
return new DateGetAnalogsClient()
{
Analogs = result.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new DateGetAnalogsClient();
}
}
[HttpPost, Route("gettechcycle")]
public DateGetTechCycleClient GetTechCycle([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DateGetTechCycleApi>(
value.ToString());
log.Info("Ask tech cycle: " +
getResult.Vdp.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " " +
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_tech_cycles = new List<Structures.TechCycle>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0, 0, 0
);
while (flagDate <= getResult.End)
{
var lines = WorkWithFiles.GetFile(
flagDate.Year.ToString("D4") +
flagDate.Month.ToString("D2") +
flagDate.Day.ToString("D2") +
"." +
getResult.Vdp.ToString("D2") +
"3"
);
Structures.TechCycle first_tech_cycle = null;
for (var i = 0; i < lines.Length; i++)
{
var tc = new Structures.TechCycle(flagDate, lines[i]);
if (tc.start < getResult.Start)
{
first_tech_cycle = tc;
continue;
}
if (tc.start > getResult.End)
continue;
if (list_tech_cycles.Count == 0 && first_tech_cycle != null)
{
first_tech_cycle.start = getResult.Start;
list_tech_cycles.Add(first_tech_cycle);
}
list_tech_cycles.Add(tc);
}
flagDate = flagDate.AddDays(1);
}
return new DateGetTechCycleClient()
{
TechCycle = list_tech_cycles.ToArray(),
};
}
catch (Exception e)
{
log.Warn(e);
return new DateGetTechCycleClient();
}
}
[HttpPost, Route("getprotect")]
public DateGetProtectClient GetProtect([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DateGetProtectApi>(
value.ToString());
log.Info("Ask protects: " +
getResult.Vdp.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " " +
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_protects = new List<Structures.Protect>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0, 0, 0
);
while (flagDate <= getResult.End)
{
var protects = WorkWithFiles.GetProtects(flagDate, getResult.Vdp);
for (var i = 0; i < protects.Length; i++)
{
if (protects[i].start < getResult.Start)
continue;
if (protects[i].start > getResult.End)
continue;
list_protects.Add(protects[i]);
}
flagDate = flagDate.AddDays(1);
}
return new DateGetProtectClient()
{
Protect = list_protects.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new DateGetProtectClient();
}
}
[HttpPost, Route("getdiscret")]
public DateGetDiscretClient GetDiscret([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DateGetDiscretApi>(
value.ToString());
log.Info("Ask discrets: " +
getResult.Vdp.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " " +
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_discrets = new List<Structures.Discret>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0, 0, 0
);
while (flagDate <= getResult.End)
{
var discrets = WorkWithFiles.GetDiscrets(flagDate, getResult.Vdp);
var first_discrets = new Dictionary<int, Structures.Discret>();
for (var i = 0; i < discrets.Length; i++)
{
if (discrets[i].start < getResult.Start)
{
if (first_discrets.ContainsKey(discrets[i].Index))
first_discrets[discrets[i].Index] = discrets[i];
else
first_discrets.Add(discrets[i].Index, discrets[i]);
first_discrets[discrets[i].Index].start = getResult.Start;
continue;
}
if (discrets[i].start > getResult.End)
continue;
var last_id = list_discrets.FindLastIndex(x => x.Index == discrets[i].Index);
if (first_discrets.ContainsKey(discrets[i].Index) &&
last_id == -1 &&
discrets[i].start != getResult.Start)
{
list_discrets.Add(first_discrets[discrets[i].Index]);
first_discrets.Remove(discrets[i].Index);
}
if (last_id != -1 &&
list_discrets[last_id].State == discrets[i].State)
continue;
list_discrets.Add(discrets[i]);
}
flagDate = flagDate.AddDays(1);
}
return new DateGetDiscretClient()
{
Discret = list_discrets.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new DateGetDiscretClient();
}
}
}
}

View File

@ -0,0 +1,138 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using Newtonsoft;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
using NLog;
using DataClient.Struct;
using System.IO;
using ApiServer.ApiStruct;
namespace ApiServer.Controllers
{
[ApiController, Route("[controller]")]
public class DiscretController : ControllerBase
{
private Logger log = LogManager.GetCurrentClassLogger();
[HttpPost, Route("getdiscrets")]
public DiscretGetDscretsClient GetDiscrets([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DiscretGetiscretsApi>(
value.ToString());
log.Info("Ask discrets: " +
getResult.Vdp.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " "+
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_discrets = new List<Structures.Discret>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0,0,0
);
while (flagDate <= getResult.End)
{
var discrets = WorkWithFiles.GetDiscrets(flagDate, getResult.Vdp);
var first_discrets = new Dictionary<int, Structures.Discret>();
for (var i = 0; i < discrets.Length; i++)
{
if (discrets[i].start < getResult.Start)
{
if (first_discrets.ContainsKey(discrets[i].Index))
first_discrets[discrets[i].Index] = discrets[i];
else
first_discrets.Add(discrets[i].Index, discrets[i]);
first_discrets[discrets[i].Index].start = getResult.Start;
continue;
}
if (discrets[i].start > getResult.End)
continue;
var last_id = list_discrets.FindLastIndex(x => x.Index == discrets[i].Index);
if (first_discrets.ContainsKey(discrets[i].Index) &&
last_id == -1 &&
discrets[i].start != getResult.Start)
{
list_discrets.Add(first_discrets[discrets[i].Index]);
first_discrets.Remove(discrets[i].Index);
}
if (last_id != -1 &&
list_discrets[last_id].State == discrets[i].State)
continue;
list_discrets.Add(discrets[i]);
}
flagDate = flagDate.AddDays(1);
}
return new DiscretGetDscretsClient()
{
StateParams = Configuration.GetStateStructArray(),
DiscretParams = Configuration.GetDiscretParams(getResult.Vdp.ToString("D2")),
Discrets = list_discrets.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new DiscretGetDscretsClient();
}
}
[HttpPost, Route("getdiscretsmatrix")]
public DiscretGetDscretsMatrixClient GetDiscretsMatrix([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<DiscretGetiscretsApi>(
value.ToString());
log.Info("Ask discrets: " +
getResult.Vdp.ToString() + " " +
getResult.Start.ToString("yyyy-MM-dd HH:mm:ss") + " " +
getResult.End.ToString("yyyy-MM-dd HH:mm:ss"));
var list_discrets = new List<Structures.DiscretMatrix>();
var flagDate = new DateTime(
getResult.Start.Year,
getResult.Start.Month,
getResult.Start.Day,
0, 0, 0
);
while (flagDate <= getResult.End)
{
var discrets = WorkWithFiles.GetDiscretsMatrix(flagDate, getResult.Vdp);
for (var i = 0; i < discrets.Length; i++)
{
if (discrets[i].start < getResult.Start)
continue;
if (discrets[i].start > getResult.End)
continue;
list_discrets.Add(discrets[i]);
}
flagDate = flagDate.AddDays(1);
}
log.Info("Send discret");
return new DiscretGetDscretsMatrixClient()
{
StateParams = Configuration.GetStateStructArray(),
DiscretParams = Configuration.GetDiscretParams(getResult.Vdp.ToString("D2")),
Discrets = list_discrets.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new DiscretGetDscretsMatrixClient();
}
}
}
}

View File

@ -0,0 +1,158 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using Newtonsoft;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
using NLog;
using DataClient.Struct;
using System.IO;
using ApiServer.ApiStruct;
namespace ApiServer.Controllers
{
[ApiController, Route("[controller]")]
public class ParamsController : ControllerBase
{
private Logger log = LogManager.GetCurrentClassLogger();
[HttpPost, Route("getanalogs")]
public ParamsGetAnalogClient GetAnalogs([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<ParamsGetAnalogApi>(
value.ToString());
log.Info("Ask analog params for \"" + getResult.Name + "\"");
return new ParamsGetAnalogClient()
{
Analog_params = Configuration.GetAnalogParams(getResult.Name)
};
}
catch (Exception e)
{
log.Error(e);
return new ParamsGetAnalogClient();
}
}
[HttpPost, Route("getmetrics")]
public ParamsGetMetricClient GetMetrics([FromBody] object value)
{
try
{
log.Info("Ask metrics");
return new ParamsGetMetricClient()
{
Metrics = Configuration.GetMetricsArray()
};
}
catch (Exception e)
{
log.Error(e);
return new ParamsGetMetricClient();
}
}
[HttpPost, Route("gettechcyclename")]
public ParamsGetTechCycleNameClient GetTechCycleName([FromBody] object value)
{
try
{
log.Info("Ask tech cycle name");
return new ParamsGetTechCycleNameClient()
{
Name = Configuration.GetTechCycleNames()
};
}
catch (Exception e)
{
log.Warn(e);
return new ParamsGetTechCycleNameClient();
}
}
[HttpPost, Route("gettechcyclecolor")]
public ParamsGetTechCycleColorClient GetTechCycleColor([FromBody] object value)
{
try
{
log.Info("Ask tech cycle color");
return new ParamsGetTechCycleColorClient()
{
Color = Configuration.GetTechCycleColor()
};
}
catch (Exception e)
{
log.Warn(e);
return new ParamsGetTechCycleColorClient();
}
}
[HttpPost, Route("getstatestruct")]
public ParamsGetStateStructClient GetStateStruct([FromBody] object value)
{
try
{
log.Info("Ask state struct");
return new ParamsGetStateStructClient()
{
StateStruct = Configuration.GetStateStructArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new ParamsGetStateStructClient();
}
}
[HttpPost, Route("getprotectstate")]
public ParamsGetProtectStateClient GetProtectState([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<ParamsGetProtectStateApi>(
value.ToString());
log.Info("Ask protect state for vdp: " + getResult.Name);
return new ParamsGetProtectStateClient()
{
ProtectState = Configuration.GetProtectState(getResult.Name)
};
}
catch (Exception e)
{
log.Warn(e);
return new ParamsGetProtectStateClient();
}
}
[HttpPost, Route("getdiscret")]
public ParamsGetDiscretClient GetDiscrets([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<ParamsGetDiscretApi>(
value.ToString());
log.Info("Ask discret params for \"" + getResult.Name + "\"");
return new ParamsGetDiscretClient()
{
Discret_params = Configuration.GetDiscretParams(getResult.Name)
};
}
catch (Exception e)
{
log.Error(e);
return new ParamsGetDiscretClient();
}
}
}
}

View File

@ -0,0 +1,228 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using Newtonsoft;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Newtonsoft.Json;
using NLog;
using DataClient.Struct;
using System.IO;
using ApiServer.ApiStruct;
namespace ApiServer.Controllers
{
[ApiController, Route("[controller]")]
public class PasportController : ControllerBase
{
private Logger log = LogManager.GetCurrentClassLogger();
[HttpPost, Route("check")]
public PasportCheckClient Check([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<PasportCheckApi>(value.ToString());
if (!getResult.Status || string.IsNullOrEmpty(getResult.Name))
{
log.Warn("Wrong answer.");
return new PasportCheckClient();
}
var paspName =
getResult.DateAndTime.Hour.ToString("D2") +
getResult.DateAndTime.Minute.ToString("D2") +
getResult.DateAndTime.Second.ToString("D2") +
"-" + getResult.Name;
var paspDir = Path.Combine(
Directory.GetCurrentDirectory(),
"data", "pasport",
getResult.DateAndTime.Year.ToString("D4"),
getResult.DateAndTime.Month.ToString("D2"),
getResult.DateAndTime.Day.ToString("D2"),
paspName);
log.Info("Search pasport: " + paspDir);
if (!System.IO.File.Exists(paspDir))
{
log.Info("Psport not exist: " + paspDir);
return new PasportCheckClient { Status = true, Exist = false, PaspSum = 0 };
}
var pasport = System.IO.File.ReadAllBytes(paspDir);
ulong paspResult = 0;
foreach (var b in pasport)
paspResult += b;
log.Info("Send pasport size: " + paspResult + " | " + paspDir);
return new PasportCheckClient { Status = true, Exist = true, PaspSum = paspResult };
}
catch(Exception e)
{
log.Warn(e);
return new PasportCheckClient();
}
}
[HttpPost, Route("create")]
public PasportCreateClient Create([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<PasportCreateApi>(value.ToString());
if (!getResult.Status ||
getResult.Pasp == null ||
!getResult.Pasp.HasData)
{
log.Warn("Wrong answer.");
return new PasportCreateClient();
}
var paspName =
getResult.Pasp.dEnd.Value.Hour.ToString("D2") +
getResult.Pasp.dEnd.Value.Minute.ToString("D2") +
getResult.Pasp.dEnd.Value.Second.ToString("D2") +
"-" + (string.IsNullOrEmpty(getResult.Pasp.nplav) ?
getResult.Pasp.numVDP.Value.ToString("D2") :
getResult.Pasp.nplav);
var dir = Path.Combine(
Directory.GetCurrentDirectory(),
"data", "pasport",
getResult.Pasp.dEnd.Value.Year.ToString("D4"),
getResult.Pasp.dEnd.Value.Month.ToString("D2"),
getResult.Pasp.dEnd.Value.Day.ToString("D2"));
var paspDir = Path.Combine(dir, paspName);
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
System.IO.File.WriteAllBytes(paspDir, getResult.Pasp.PaspByte);
log.Info("Save pasport: " + paspDir);
return new PasportCreateClient { Status = true };
}
catch (Exception e)
{
log.Warn(e);
return new PasportCreateClient();
}
}
[HttpPost, Route("getlist")]
public PasportGetListClient GetList([FromBody] object value)
{
try
{
var pasportNameList = new List<string>();
var pasportTimeList = new List<string>();
var getResult = JsonConvert.DeserializeObject<PasportGetListApi>(
value.ToString(),
new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd" });
log.Info("Ask pasport list: " + getResult.Date.ToString("yyyy-MM-dd"));
var pasportDir = Path.Combine(
Directory.GetCurrentDirectory(),
"data",
"pasport",
getResult.Date.Year.ToString("D4"),
getResult.Date.Month.ToString("D2"),
getResult.Date.Day.ToString("D2")
);
if (!Directory.Exists(pasportDir))
throw new Exception("Directory not exist: " + pasportDir);
var allPasportFiles = Directory.GetFiles(pasportDir);
foreach (var fullPasportName in allPasportFiles)
{
var name = Path.GetFileNameWithoutExtension(fullPasportName);
var pasportParts = name.Split('-');
var pasport = "";
for (var i = 1; i < pasportParts.Length; i++)
{
if (pasport.Length != 0)
pasport += "-";
pasport += pasportParts[i];
}
pasportTimeList.Add(pasportParts[0]);
pasportNameList.Add(pasport);
}
log.Info("Send pasport list: " + pasportNameList);
return new PasportGetListClient()
{
Name = pasportNameList.ToArray(),
Time = pasportTimeList.ToArray()
};
}
catch (Exception e)
{
log.Warn(e);
return new PasportGetListClient();
}
}
[HttpPost, Route("getpasport")]
public PasportGetPasportClient GetPasport([FromBody] object value)
{
try
{
var getResult = JsonConvert.DeserializeObject<PasportGetPasportApi>(
value.ToString(),
new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd" });
log.Info("Ask pasport: " + getResult.Date.ToString("yyyy-MM-dd") + " " + getResult.Name);
var pasportFile = Path.Combine(
Directory.GetCurrentDirectory(),
"data",
"pasport",
getResult.Date.Year.ToString("D4"),
getResult.Date.Month.ToString("D2"),
getResult.Date.Day.ToString("D2"),
getResult.Name
);
if (!System.IO.File.Exists(pasportFile))
throw new Exception("File not exist: " + pasportFile);
var pasport = new Pasport(System.IO.File.ReadAllBytes(pasportFile));
return new PasportGetPasportClient()
{
HasData = pasport.HasData,
NumVDP = pasport.numVDP,
DStart = pasport.dStart.HasValue ? pasport.dStart.Value.ToString("yyyy.MM.dd HH:mm:ss") : "",
DEnd = pasport.dEnd.HasValue ? pasport.dEnd.Value.ToString("yyyy.MM.dd HH:mm:ss") : "",
HasPasport = pasport.hasPasport,
Kod_npl = pasport.kod_npl,
Nplav = pasport.nplav,
Rm = pasport.rm,
Splav = pasport.splav,
IS = pasport.iS,
Notd = pasport.notd,
Vessl = pasport.vessl,
Diam = pasport.diam,
Prpl = pasport.prpl,
Tin = pasport.tin,
Dzap = pasport.dzap,
Dlog = pasport.dlog,
Last = pasport.last,
Dlper = pasport.dlper,
Nazn = pasport.nazn,
Kompl = pasport.kompl,
Izl = pasport.izl,
Robm = pasport.robm,
Rizol = pasport.rizol,
Dkr = pasport.dkr,
Nkon = pasport.nkon,
Pos = pasport.pos,
Ukaz = pasport.ukaz,
Zakaz = pasport.zakaz,
Kat = pasport.kat,
Pril = pasport.pril,
Rezerved = pasport.rezerved,
};
}
catch (Exception e)
{
log.Warn(e);
return new PasportGetPasportClient()
{
HasData = false,
HasPasport = false
};
}
}
}
}

View File

@ -0,0 +1,171 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
<Class Name="ApiServer.Controllers.DateController">
<Position X="0.5" Y="0.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAQAAAAAAAAAAABAAACCAAAAIAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Controllers\DateController.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogApi">
<Position X="0.5" Y="3.25" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogClient">
<Position X="0.5" Y="5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analog" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogsApi">
<Position X="0.5" Y="6" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogsClient">
<Position X="0.5" Y="7.75" Width="2.25" />
<AssociationLine Name="Analogs" Type="ApiServer.Structures.AnalogArr" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="2.75" Y="8.184" />
<Point X="5" Y="8.184" />
<Point X="5" Y="7.103" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analogs" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetTechCycleApi">
<Position X="5.5" Y="6" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetTechCycleClient">
<Position X="5.5" Y="7.75" Width="2.25" />
<AssociationLine Name="TechCycle" Type="ApiServer.Structures.TechCycle" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="7.75" Y="8.5" />
<Point X="10.5" Y="8.5" />
<Point X="10.5" Y="8.199" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="TechCycle" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetProtectApi">
<Position X="5.5" Y="3.25" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetProtectClient">
<Position X="5.5" Y="5" Width="2.25" />
<AssociationLine Name="Protect" Type="ApiServer.Structures.Protect" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="7.75" Y="5.529" />
<Point X="10.444" Y="5.529" />
<Point X="10.444" Y="5.19" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Protect" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetDiscretApi">
<Position X="5.5" Y="0.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetDiscretClient">
<Position X="5.5" Y="2.25" Width="2.25" />
<AssociationLine Name="Discret" Type="ApiServer.Structures.Discret" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="7.75" Y="2.779" />
<Point X="10.521" Y="2.779" />
<Point X="10.521" Y="2.44" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Discret" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Structures.Analog">
<Position X="3" Y="3.25" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
<FileName>Structures\Analog.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.AnalogArr">
<Position X="3" Y="6" Width="2.25" />
<AssociationLine Name="Analogs" Type="ApiServer.Structures.Analog" FixedToPoint="true">
<Path>
<Point X="5" Y="6" />
<Point X="5" Y="4.997" />
</Path>
<MemberNameLabel ManuallyPlaced="true">
<Position X="0.11" Y="0.677" />
</MemberNameLabel>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAEAAAAAAAA=</HashCode>
<FileName>Structures\Analog.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analogs" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Structures.Discret">
<Position X="8" Y="0.5" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAEABAAAAAA=</HashCode>
<FileName>Structures\Discret.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.Protect">
<Position X="8" Y="3.25" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAEABAAAAAA=</HashCode>
<FileName>Structures\Protect.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.TechCycle">
<Position X="8" Y="6" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>Structures\TechCycle.cs</FileName>
</TypeIdentifier>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
<Class Name="ApiServer.WorkWithFiles">
<Position X="0.5" Y="4.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAgAgAAACEIAAIAAAAAAAAAECAAAABA=</HashCode>
<FileName>WorkWithFiles.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Startup">
<Position X="0.5" Y="2.25" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAACAAAAAA=</HashCode>
<FileName>Startup.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Program">
<Position X="0.5" Y="0.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAAIAAAAgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA=</HashCode>
<FileName>Program.cs</FileName>
</TypeIdentifier>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

View File

@ -0,0 +1,237 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
<Class Name="ApiServer.Controllers.ParamsController">
<Position X="0.5" Y="0.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAQAAAAAAAAAAAAAiAAACAAAAIAAIAAAEAAAAAAAAAA=</HashCode>
<FileName>Controllers\ParamsController.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetAnalogApi">
<Position X="0.5" Y="3.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetAnalogClient">
<Position X="0.5" Y="4.75" Width="2.25" />
<AssociationLine Name="Analog_params" Type="ApiServer.Parametrs.AnalogParams" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="0.669" Y="5.618" />
<Point X="0.669" Y="5.976" />
<Point X="3" Y="5.976" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analog_params" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetMetricClient">
<Position X="6" Y="5.25" Width="2.5" />
<AssociationLine Name="Metrics" Type="ApiServer.Parametrs.Metric" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="6.062" Y="6.118" />
<Point X="6.062" Y="6.5" />
<Point X="8.75" Y="6.5" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Metrics" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetTechCycleNameClient">
<Position X="6" Y="12" Width="2.5" />
<AssociationLine Name="Name" Type="ApiServer.Parametrs.TechCycleName" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="6.125" Y="12.868" />
<Point X="6.125" Y="13.188" />
<Point X="8.75" Y="13.188" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Name" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetTechCycleColorClient">
<Position X="6" Y="8.75" Width="2.5" />
<AssociationLine Name="Color" Type="ApiServer.Parametrs.TechCycleColor" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="6.188" Y="9.618" />
<Point X="6.188" Y="9.938" />
<Point X="8.75" Y="9.938" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Color" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetStateStructClient">
<Position X="0.5" Y="11" Width="2.25" />
<AssociationLine Name="StateStruct" Type="ApiServer.Parametrs.StateStruct" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="0.625" Y="11.868" />
<Point X="0.625" Y="12.312" />
<Point X="3" Y="12.312" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="StateStruct" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetProtectStateApi">
<Position X="0.5" Y="8.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetProtectStateClient">
<Position X="0.5" Y="10" Width="2.25" />
<AssociationLine Name="ProtectState" Type="ApiServer.Parametrs.ProtectState" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="2.75" Y="10.688" />
<Point X="5.562" Y="10.688" />
<Point X="5.562" Y="10.238" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="ProtectState" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetDiscretApi">
<Position X="0.5" Y="6.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetDiscretClient">
<Position X="0.5" Y="7.75" Width="2.25" />
<AssociationLine Name="Discret_params" Type="ApiServer.Parametrs.DiscretParams" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="2.75" Y="8.5" />
<Point X="5.5" Y="8.5" />
<Point X="5.5" Y="8.18" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Discret_params" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Parametrs.AnalogParams">
<Position X="3" Y="3.5" Width="2.75" />
<TypeIdentifier>
<HashCode>AAEAAAAAABAAAAAAEAAAAAQAAAACAgACAAEIAAAAEAA=</HashCode>
<FileName>Parametrs\Analog.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.DiscretParams">
<Position X="3" Y="6.5" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAQAAAAAAAAAAAAQAAAAAgAAAAAEAAAAAEAA=</HashCode>
<FileName>Parametrs\Discret.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Bits" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Parametrs.ByteBit">
<Position X="7" Y="7" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Parametrs\Discret.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.Metric">
<Position X="8.75" Y="5.25" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Parametrs\Metrics.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.ProtectState">
<Position X="3" Y="8.75" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAgAAAAAEAAAAAAAA=</HashCode>
<FileName>Parametrs\Protect.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.State">
<Position X="7" Y="10.25" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAEAgAAAAAA=</HashCode>
<FileName>Parametrs\States.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.StateStruct">
<Position X="3" Y="11.25" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAA=</HashCode>
<FileName>Parametrs\States.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="States" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Parametrs.TechCycleName">
<Position X="8.75" Y="12" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>Parametrs\TechCycle.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.TechCycleColor">
<Position X="8.75" Y="8.75" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgAAAAAA=</HashCode>
<FileName>Parametrs\TechCycle.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Configuration">
<Position X="6" Y="0.5" Width="3.75" />
<AssociationLine Name="r_analogParams" Type="ApiServer.Parametrs.AnalogParams" FixedFromPoint="true" FixedToPoint="true">
<Path>
<Point X="9.5" Y="4.363" />
<Point X="9.5" Y="4.927" />
<Point X="5.75" Y="4.927" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAEAAAAEAAAAACgAgCAAAIAAAAAAAEEAAAAAAAEA=</HashCode>
<FileName>Parametrs\Analog.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Field Name="r_analogParams" />
</ShowAsCollectionAssociation>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
<Class Name="ApiServer.Controllers.PasportController">
<Position X="0.5" Y="0.5" Width="3.5" />
<TypeIdentifier>
<HashCode>AAAAEAgAAAAAAAAAAAAACAAAAAAAAEAAAAAAAAAAAAI=</HashCode>
<FileName>Controllers\PasportController.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetListApi">
<Position X="0.5" Y="4.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetListClient">
<Position X="0.5" Y="5.75" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQA=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetPasportApi">
<Position X="0.5" Y="3" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAABAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetPasportClient">
<Position X="4.25" Y="0.5" Width="2.5" />
<TypeIdentifier>
<HashCode>UAAgEAIAEQgEIAACADAAggAIIACAARAAIBACAoIBAgQ=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

View File

@ -0,0 +1,380 @@
<?xml version="1.0" encoding="utf-8"?>
<ClassDiagram MajorVersion="1" MinorVersion="1" MembersFormat="FullSignature">
<Class Name="ApiServer.WorkWithFiles">
<Position X="19" Y="4.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAgAgAAACEIAAIAAAAAAAAAECAAAABA=</HashCode>
<FileName>WorkWithFiles.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Startup">
<Position X="19" Y="2.25" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAgAAACAAAAAA=</HashCode>
<FileName>Startup.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Program">
<Position X="19" Y="0.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAAIAAAAgAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAA=</HashCode>
<FileName>Program.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Controllers.DateController">
<Position X="0.5" Y="0.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAQAAAAAAAAAAABAAACCAAAAIAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Controllers\DateController.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Controllers.ParamsController">
<Position X="0.5" Y="11.75" Width="4.5" />
<TypeIdentifier>
<HashCode>AAQAAAAAAAAAAAAAiAAACAAAAIAAIAAAEAAAAAAAAAA=</HashCode>
<FileName>Controllers\ParamsController.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Controllers.PasportController">
<Position X="0.5" Y="24.5" Width="4.5" />
<TypeIdentifier>
<HashCode>AAAAEAgAAAAAAAAAAAAACAAAAAAAAEAAAAAAAAAAAAI=</HashCode>
<FileName>Controllers\PasportController.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogApi">
<Position X="5.25" Y="0.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogClient">
<Position X="7.75" Y="0.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analog" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogsApi">
<Position X="5.25" Y="2.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetAnalogsClient">
<Position X="7.75" Y="2.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analogs" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetTechCycleApi">
<Position X="5.25" Y="9.25" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetTechCycleClient">
<Position X="7.75" Y="9.25" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="TechCycle" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetProtectApi">
<Position X="5.25" Y="7" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetProtectClient">
<Position X="7.75" Y="7" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Protect" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetDiscretApi">
<Position X="5.25" Y="4.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAIAAQAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.DateGetDiscretClient">
<Position X="7.75" Y="4.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Date.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Discret" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetAnalogApi">
<Position X="5.25" Y="11.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetAnalogClient">
<Position X="7.75" Y="11.75" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analog_params" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetMetricClient">
<Position X="7.75" Y="16.5" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Metrics" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetTechCycleNameClient">
<Position X="7.75" Y="23" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Name" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetTechCycleColorClient">
<Position X="7.75" Y="21.5" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Color" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetStateStructClient">
<Position X="7.75" Y="19.75" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="StateStruct" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetProtectStateApi">
<Position X="5.25" Y="18" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetProtectStateClient">
<Position X="7.75" Y="18" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="ProtectState" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetDiscretApi">
<Position X="5.25" Y="14.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.ParamsGetDiscretClient">
<Position X="7.75" Y="14.75" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Params.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Discret_params" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetListApi">
<Position X="5.25" Y="24.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetListClient">
<Position X="7.75" Y="24.5" Width="2.5" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQA=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetPasportApi">
<Position X="5.25" Y="26" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAABAAAAAAAAAAA=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.ApiStruct.PasportGetPasportClient">
<Position X="7.75" Y="26" Width="2.5" />
<TypeIdentifier>
<HashCode>UAAgEAIAEQgEIAACADAAggAIIACAARAAIBACAoIBAgQ=</HashCode>
<FileName>ApiStruct\Pasport.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.AnalogParams">
<Position X="12.25" Y="11.75" Width="2.75" />
<TypeIdentifier>
<HashCode>AAEAAAAAABAAAAAAEAAAAAQAAAACAgACAAEIAAAAEAA=</HashCode>
<FileName>Parametrs\Analog.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.DiscretParams">
<Position X="12.25" Y="14.75" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAQAAAAAAAAAAAAQAAAAAgAAAAAEAAAAAEAA=</HashCode>
<FileName>Parametrs\Discret.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Bits" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Parametrs.ByteBit">
<Position X="16.5" Y="14.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Parametrs\Discret.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.Metric">
<Position X="12.25" Y="16.5" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAgAAAAAAAAAAAAAAAA=</HashCode>
<FileName>Parametrs\Metrics.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.ProtectState">
<Position X="12.25" Y="18" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAgAAAAAEAAAAAAAA=</HashCode>
<FileName>Parametrs\Protect.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.State">
<Position X="16.5" Y="19.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAEAgAAAAAA=</HashCode>
<FileName>Parametrs\States.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.StateStruct">
<Position X="12.25" Y="19.75" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAA=</HashCode>
<FileName>Parametrs\States.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="States" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Parametrs.TechCycleName">
<Position X="12.25" Y="23" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>Parametrs\TechCycle.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Parametrs.TechCycleColor">
<Position X="12.25" Y="21.5" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAgAAAAAA=</HashCode>
<FileName>Parametrs\TechCycle.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Configuration">
<Position X="19" Y="11.75" Width="3.75" />
<TypeIdentifier>
<HashCode>AAAAAEAAAAEAAAAACgAgCAAAIAAAAAAAEEAAAAAAAEA=</HashCode>
<FileName>Parametrs\Analog.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Field Name="r_analogParams" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Structures.Analog">
<Position X="11.75" Y="0.5" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAAgAAAAAAA=</HashCode>
<FileName>Structures\Analog.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.AnalogArr">
<Position X="11.75" Y="2.75" Width="2.25" />
<AssociationLine Name="Analogs" Type="ApiServer.Structures.Analog" FixedToPoint="true">
<Path>
<Point X="13.75" Y="2.75" />
<Point X="13.75" Y="2.247" />
</Path>
</AssociationLine>
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAEAAAAAAAA=</HashCode>
<FileName>Structures\Analog.cs</FileName>
</TypeIdentifier>
<ShowAsCollectionAssociation>
<Property Name="Analogs" />
</ShowAsCollectionAssociation>
</Class>
<Class Name="ApiServer.Structures.Discret">
<Position X="11.75" Y="4.75" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAEABAAAAAA=</HashCode>
<FileName>Structures\Discret.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.DiscretMatrix">
<Position X="16.5" Y="4.75" Width="2" />
<TypeIdentifier>
<HashCode>AAAAAAAAAAAAAAAgAAAAAAAAAAAABAAAAAAAAAIAAAA=</HashCode>
<FileName>Structures\Discret.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.Protect">
<Position X="11.75" Y="7" Width="2.25" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAEABAAAAAA=</HashCode>
<FileName>Structures\Protect.cs</FileName>
</TypeIdentifier>
</Class>
<Class Name="ApiServer.Structures.TechCycle">
<Position X="12.25" Y="9.25" Width="2.75" />
<TypeIdentifier>
<HashCode>AAAAAAAAACAAAAAgAAAAAAAAAAAAAAAAAAEAAAAAAAA=</HashCode>
<FileName>Structures\TechCycle.cs</FileName>
</TypeIdentifier>
</Class>
<Font Name="Segoe UI" Size="9" />
</ClassDiagram>

View File

@ -0,0 +1,161 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Parametrs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
namespace ApiServer.Parametrs
{
public class AnalogParams
{
public int Index { get; set; }
public bool ShowDefault { get; set; }
public bool Skip { get; set; }
public string Name { get; set; }
public string Sname { get; set; }
public string Metric { get; set; }
public double? Min { get; set; }
public double? Max { get; set; }
public double Mul { get; set; }
public int[] Bytes {get;set;}
}
}
namespace ApiServer
{
public static partial class Configuration
{
private static Logger log = LogManager.GetCurrentClassLogger();
public static Dictionary<string,AnalogParams[]> r_analogParams = null;
public static AnalogParams[] GetAnalogParams(string name_analog)
{
log.Info("Ask analog parasm: " + name_analog);
if (r_analogParams != null && r_analogParams.ContainsKey(name_analog))
{
log.Info("Exist: " + name_analog);
return r_analogParams[name_analog];
}
var result = new List<AnalogParams>();
var list_files = Directory.GetFiles(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"Analog"
)
);
foreach (var file in list_files) {
log.Info("Try read " + file);
var json_conf =
JObject.Parse(
File.ReadAllText(
file
)
);
if (!json_conf.ContainsKey(name_analog))
continue;
var analog = json_conf.Value<JObject>(name_analog);
if (analog.ContainsKey("struct"))
{
var struct_arr = analog.Value<JArray>("struct");
foreach (JObject struct_el in struct_arr)
{
var analog_param = GetAnalogParam(struct_el);
if (analog_param != null)
if (result.Find(x => x.Index == analog_param.Index) == null)
result.Add(analog_param);
}
}
if (analog.ContainsKey("parent"))
{
var parent_list = analog.Value<JArray>("parent");
for(var i = parent_list.Count - 1; i >= 0; i--)
{
var parent_states = GetAnalogParams(parent_list[i].Value<string>());
foreach (var state in parent_states)
{
if (state != null)
if (result.Find(x => x.Index == state.Index) == null)
result.Add(state);
}
}
}
break;
}
if (r_analogParams == null)
r_analogParams = new Dictionary<string, AnalogParams[]>();
if (r_analogParams.ContainsKey(name_analog))
r_analogParams[name_analog] = result.ToArray();
else
r_analogParams.Add(name_analog, result.ToArray());
return result.ToArray();
}
private static AnalogParams GetAnalogParam(JObject data)
{
if ( data == null || !data.ContainsKey("index"))
return null;
var index = data.Value<int>("index");
var result = new AnalogParams()
{
Index = index,
Name = "Аналог " + index,
Sname = "Аналог " + index,
Min = null,
Max = null,
Mul = 1,
Metric = "УЕ",
Skip = false,
ShowDefault = false,
Bytes = new int[0]
};
if (data.ContainsKey("skip"))
{
var skip = data.Value<bool>("skip");
if (skip)
{
result.Skip = true;
return result;
}
}
if (data.ContainsKey("name"))
result.Name = data.Value<string>("name");
if (data.ContainsKey("s_name"))
result.Sname = data.Value<string>("s_name");
if (data.ContainsKey("metric"))
result.Metric = data.Value<string>("metric");
if (data.ContainsKey("min"))
result.Min = data.Value<double>("min");
if (data.ContainsKey("max"))
result.Max = data.Value<double>("max");
if (data.ContainsKey("mul"))
result.Mul = data.Value<double>("mul");
if (data.ContainsKey("show_default"))
result.ShowDefault = data.Value<bool>("show_default");
if (data.ContainsKey("bytes"))
{
var bytes = data.Value<JArray>("bytes");
var arr = new List<int>();
try
{
for (var i = 0; i < bytes.Count; i++)
arr.Add(bytes[i].Value<int>());
result.Bytes = arr.ToArray();
}
catch
{
result.Bytes = new int[0];
}
}
return result;
}
}
}

View File

@ -0,0 +1,142 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Parametrs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace ApiServer.Parametrs
{
public class DiscretParams
{
public int Index { get; set; }
public bool Skip { get; set; }
public string Name { get; set; }
public ByteBit[] Bits {get;set;}
public string StateStruct { get; set; }
}
public class ByteBit
{
public int ByteIndex { get; set; }
public byte BitIndex { get; set; }
}
}
namespace ApiServer
{
public static partial class Configuration
{
public static DiscretParams[] GetDiscretParams(string name_discret)
{
var result = new List<DiscretParams>();
var list_files = Directory.GetFiles(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"Discret"
)
);
foreach (var file in list_files) {
var json_conf =
JObject.Parse(
File.ReadAllText(
file
)
);
if (!json_conf.ContainsKey(name_discret))
continue;
var discret = json_conf.Value<JObject>(name_discret);
if (discret.ContainsKey("struct"))
{
var struct_arr = discret.Value<JArray>("struct");
foreach (JObject struct_el in struct_arr)
{
var discret_param = GetDiscretParam(struct_el);
if (discret_param != null)
if (result.Find(x => x.Index == discret_param.Index) == null)
result.Add(discret_param);
}
}
if (discret.ContainsKey("parent"))
{
var parent_list = discret.Value<JArray>("parent");
for(var i = parent_list.Count - 1; i >= 0; i--)
{
var parent_states = GetDiscretParams(parent_list[i].Value<string>());
foreach (var state in parent_states)
{
if (state != null)
if (result.Find(x => x.Index == state.Index) == null)
result.Add(state);
}
}
}
break;
}
return result.ToArray();
}
private static DiscretParams GetDiscretParam(JObject data)
{
if (
data == null ||
!data.ContainsKey("index"))
return null;
if (data.ContainsKey("skip"))
{
var skip = data.Value<bool>("skip");
if (skip)
{
return new DiscretParams()
{
Index = data.Value<int>("index"),
Skip = true
};
}
}
if (
data == null ||
!data.ContainsKey("index") ||
!data.ContainsKey("name") ||
!data.ContainsKey("state_struct") ||
!data.ContainsKey("bits")
)
return null;
var bits = data.Value<JArray>("bits");
var arr = new List<ByteBit>();
try
{
for (var i = 0; i < bits.Count; i++)
{
if (
bits[i] == null ||
!((JObject)bits[i]).ContainsKey("byte_index") ||
!((JObject)bits[i]).ContainsKey("bit_index")
)
continue;
arr.Add(new ByteBit()
{
ByteIndex = ((JObject)bits[i]).Value<int>("byte_index"),
BitIndex = ((JObject)bits[i]).Value<byte>("bit_index")
});
}
}
catch
{
return null;
}
return new DiscretParams()
{
Index = data.Value<int>("index"),
Skip = false,
Name = data.Value<string>("name"),
Bits = arr.ToArray(),
StateStruct = data.Value<string>("state_struct")
};
}
}
}

View File

@ -0,0 +1,58 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Parametrs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace ApiServer.Parametrs
{
public class Metric
{
public string Name { get; set; }
public bool Log { get; set; }
}
}
namespace ApiServer
{
public static partial class Configuration
{
public static Metric[] GetMetricsArray()
{
var result = new List<Metric>();
var json_conf =
JObject.Parse(
File.ReadAllText(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"Metrics.json"
)
)
);
var list_objects = json_conf.GetEnumerator();
while (list_objects.MoveNext())
{
try
{
var name = list_objects.Current.Key;
var log = (bool)list_objects.Current.Value;
if (result.FindIndex(x => x.Name == name) == -1)
result.Add(new Metric()
{
Name = name,
Log = log
});
}
catch
{
continue;
}
}
return result.ToArray();
}
}
}

View File

@ -0,0 +1,94 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Parametrs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace ApiServer.Parametrs
{
public class ProtectState
{
public byte Index { get; set; }
public string Name { get; set; }
public string StateStruct { get; set; }
}
}
namespace ApiServer
{
public static partial class Configuration
{
public static ProtectState[] GetProtectState(string name_protect)
{
var result = new List<ProtectState>();
var list_files = Directory.GetFiles(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"Protect"
)
);
foreach (var file in list_files) {
var json_conf =
JObject.Parse(
File.ReadAllText(
file
)
);
if (!json_conf.ContainsKey(name_protect))
continue;
var protect = json_conf.Value<JObject>(name_protect);
if (protect.ContainsKey("struct"))
{
var struct_arr = protect.Value<JArray>("struct");
foreach (JObject struct_el in struct_arr)
{
var protect_state = GetProtect(struct_el);
if (protect_state != null)
if (result.Find(x => x.Index == protect_state.Index) == null)
result.Add(protect_state);
}
}
if (protect.ContainsKey("parent"))
{
var parent_list = protect.Value<JArray>("parent");
for(var i = parent_list.Count - 1; i >= 0; i--)
{
var parent_states = GetProtectState(parent_list[i].Value<string>());
foreach (var state in parent_states)
{
if (state != null)
if (result.Find(x => x.Index == state.Index) == null)
result.Add(state);
}
}
}
break;
}
return result.ToArray();
}
private static ProtectState GetProtect(JObject data)
{
if (
data == null ||
!data.ContainsKey("index") ||
!data.ContainsKey("name") ||
!data.ContainsKey("state_struct")
)
return null;
return new ProtectState()
{
Index = data.Value<byte>("index"),
Name = data.Value<string>("name"),
StateStruct = data.Value<string>("state_struct")
};
}
}
}

View File

@ -0,0 +1,105 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Parametrs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace ApiServer.Parametrs
{
public class State
{
public byte Index { get; set; }
public string Name { get; set; }
public string Color { get; set; }
}
public class StateStruct
{
public string Name { get; set; }
public State[] States { get; set; }
}
}
namespace ApiServer
{
public static partial class Configuration
{
public static StateStruct[] GetStateStructArray()
{
var result = new List<StateStruct>();
var json_conf =
JObject.Parse(
File.ReadAllText(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"StateStruct.json"
)
)
);
var list_objects = json_conf.GetEnumerator();
while (list_objects.MoveNext())
{
var sub_res = GetStateStruct(
list_objects.Current.Key,
(JArray)list_objects.Current.Value
);
if (sub_res != null)
result.Add(sub_res);
}
return result.ToArray();
}
public static StateStruct GetStateStruct(string name)
{
var json_conf =
JObject.Parse(
File.ReadAllText(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"StateStruct.json"
)
)
);
if (!json_conf.ContainsKey(name))
return null;
return GetStateStruct(name, json_conf.Value<JArray>(name));
}
private static StateStruct GetStateStruct(string name, JArray data)
{
if (data == null)
return null;
var result = new StateStruct() { Name = name };
var sub_res = new List<State>();
foreach (JObject j_state_struct in data)
{
var state = GetState(j_state_struct);
if (state == null)
continue;
sub_res.Add(state);
}
result.States = sub_res.ToArray();
return result;
}
private static State GetState(JObject data)
{
if (
data == null ||
!data.ContainsKey("index") ||
!data.ContainsKey("name") ||
!data.ContainsKey("color")
)
return null;
return new State()
{
Index = data.Value<byte>("index"),
Name = data.Value<string>("name"),
Color = data.Value<string>("color")
};
}
}
}

View File

@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using ApiServer.Parametrs;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace ApiServer.Parametrs
{
public class TechCycleName
{
public int Index { get; set; }
public string Name { get; set; }
}
public class TechCycleColor
{
public int Index { get; set; }
public string Color { get; set; }
}
}
namespace ApiServer
{
public static partial class Configuration
{
public static TechCycleName[] GetTechCycleNames()
{
var result = new List<TechCycleName>();
var json_conf =
JObject.Parse(
File.ReadAllText(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"TechCycle.json"
)
)
);
if (!json_conf.ContainsKey("tech_cycle_conf"))
return result.ToArray();
var tc_array = json_conf.Value<JArray>("tech_cycle_conf");
foreach(JObject tc in tc_array)
{
int? index = null;
string name = null;
if (tc.ContainsKey("index"))
index = tc.Value<int>("index");
if (tc.ContainsKey("name"))
name = tc.Value<string>("name");
if (!string.IsNullOrEmpty(name) && index.HasValue)
result.Add(
new TechCycleName()
{
Index = index.Value,
Name = name
}
);
}
return result.ToArray();
}
public static TechCycleColor[] GetTechCycleColor()
{
var result = new List<TechCycleColor>();
var json_conf =
JObject.Parse(
File.ReadAllText(
Path.Combine(
Directory.GetCurrentDirectory(),
"Config",
"TechCycle.json"
)
)
);
if (!json_conf.ContainsKey("tech_cycle_conf"))
return result.ToArray();
var tc_array = json_conf.Value<JArray>("tech_cycle_conf");
foreach (JObject tc in tc_array)
{
int? index = null;
string color = null;
if (tc.ContainsKey("index"))
index = tc.Value<int>("index");
if (tc.ContainsKey("color"))
color = tc.Value<string>("color");
if (!string.IsNullOrEmpty(color) && index.HasValue)
result.Add(
new TechCycleColor()
{
Index = index.Value,
Color = color
}
);
}
return result.ToArray();
}
}
}

51
ApiServer/Program.cs Normal file
View File

@ -0,0 +1,51 @@
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using NLog;
using NLog.Config;
using NLog.Targets;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ApiServer
{
public class Program
{
public static void Main(string[] args)
{
LogConf();
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls("http://*:64400/");
//webBuilder.UseUrls("http://127.0.0.1:5000/");
webBuilder.UseStartup<Startup>();
webBuilder.UseKestrel(options =>
{
options.Limits.MaxRequestBodySize = long.MaxValue;
options.Limits.MaxRequestBufferSize = long.MaxValue;
options.Limits.MaxRequestLineSize = int.MaxValue;
options.Limits.MaxResponseBufferSize = long.MaxValue;
});
});
static void LogConf()
{
var conf = new LoggingConfiguration();
var logcon = new ConsoleTarget()
{
Name = "logcon",
Layout = @"${time}|${level:uppercase=true}|${logger}|${message}${when:when=length('${exception}')>0:Inner=|}${exception:format=ToString,StackTrace}"
};
conf.AddRule(LogLevel.Trace, LogLevel.Fatal, logcon);
LogManager.Configuration = conf;
}
}
}

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<DeleteExistingFiles>False</DeleteExistingFiles>
<ExcludeApp_Data>False</ExcludeApp_Data>
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<PublishProvider>FileSystem</PublishProvider>
<PublishUrl>bin\Release\</PublishUrl>
<WebPublishMethod>FileSystem</WebPublishMethod>
<SiteUrlToLaunchAfterPublish />
<TargetFramework>net5.0</TargetFramework>
<ProjectGuid>618ef8a3-70d7-42a8-a407-aa3e47fe184c</ProjectGuid>
<SelfContained>false</SelfContained>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<History>True|2021-08-05T17:16:00.1453908Z;True|2021-08-02T21:42:10.4757931+05:00;True|2021-08-01T19:33:24.0605718+05:00;True|2021-08-01T19:29:09.0622642+05:00;True|2021-08-01T16:14:00.2837619+05:00;True|2021-07-31T17:43:14.2797709+05:00;False|2021-07-31T17:41:49.3152422+05:00;True|2021-07-31T14:07:45.4057263+05:00;False|2021-07-31T13:53:38.4952669+05:00;</History>
<_PublishTargetUrl>F:\GIT\ASCKU_PC\ApiServer\bin\Release\</_PublishTargetUrl>
</PropertyGroup>
</Project>

View File

@ -0,0 +1,28 @@
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:44714",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": false,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"ApiServer": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": false,
"applicationUrl": "http://localhost:64400",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

27
ApiServer/Startup.cs Normal file
View File

@ -0,0 +1,27 @@
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ApiServer
{
public class Startup
{
public Startup(IConfiguration configuration) { Configuration = configuration; }
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); }
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); }
app.UseRouting();
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
}
}

View File

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ApiServer.Structures
{
public class Analog
{
public string Start { get { return start.ToString("yyyy.MM.dd HH:mm:ss"); } }
public DateTime start = new DateTime();
public double? Value { get; set; }
}
public class AnalogArr
{
public int Index { get; set; }
public Analog[] Analogs { get; set; }
}
}

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ApiServer.Structures
{
public class Discret
{
public int Index { get; set; }
public string Start { get { return start.ToString("yyyy.MM.dd HH:mm:ss"); } }
public DateTime start = new DateTime();
public byte? State { get; set; }
}
public class DiscretMatrix
{
public string Dt { get { return start.ToString("yyyy.MM.dd HH:mm:ss"); } }
public DateTime start = new DateTime();
public byte?[] M { get; set; }
}
}

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ApiServer.Structures
{
public class Protect
{
public byte Index { get; set; }
public byte State { get; set; }
public DateTime start;
public string Start { get { return start.ToString("yyyy.MM.dd HH.mm.ss.fff"); } }
}
}

View File

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace ApiServer.Structures
{
public class TechCycle
{
public sbyte Index { get; set; }
public string Start { get { return start.ToString("yyyy.MM.dd HH:mm:ss"); } }
public DateTime start = new DateTime();
public TechCycle(DateTime date, string line)
{
var splits = line.Split('\t');
if (splits[0] == "00")
this.Index = -1;
else
this.Index = sbyte.Parse(splits[0]);
var times = splits[1].Split(":");
this.start = new DateTime(
date.Year,
date.Month,
date.Day,
int.Parse(times[0]),
int.Parse(times[1]),
int.Parse(times[2])
);
}
}
}

544
ApiServer/WorkWithFiles.cs Normal file
View File

@ -0,0 +1,544 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Tar;
using System.IO;
using ApiServer.Structures;
using NLog;
namespace ApiServer
{
public static class WorkWithFiles
{
private static Logger log = LogManager.GetCurrentClassLogger();
public static string[] GetFile(string fileName)
{
var vdp = fileName.Substring(9, 2);
var dir_archive = Path.Combine(
Directory.GetCurrentDirectory(),
"data",
"data",
fileName.Substring(0,4),
fileName.Substring(4, 2),
fileName.Substring(6, 2)
);
var tmp = Path.Combine(
Directory.GetCurrentDirectory(),
"temp",
System.Guid.NewGuid().ToString()
);
if (!Directory.Exists(tmp))
Directory.CreateDirectory(tmp);
var flag_exist = false;
var tar_gz = false;
if (File.Exists(Path.Combine(dir_archive, vdp + ".tar.gz")))
{
flag_exist = true;
tar_gz = true;
dir_archive = Path.Combine(dir_archive, vdp + ".tar.gz");
}
if (File.Exists(Path.Combine(dir_archive, vdp + ".tar")))
{
flag_exist = true;
dir_archive = Path.Combine(dir_archive, vdp + ".tar");
}
if (!flag_exist)
return Array.Empty<string>();
if (tar_gz)
ExtractTarGZ(dir_archive, tmp);
else
ExtractTar(dir_archive, tmp);
if (!File.Exists(Path.Combine(tmp, fileName)))
{
Directory.Delete(tmp, true);
return Array.Empty<string>();
}
var result = File.ReadAllLines(Path.Combine(tmp, fileName));
Directory.Delete(tmp, true);
return result;
}
public static byte[] GetFileBytes(string fileName)
{
var vdp = fileName.Substring(9, 2);
var dir_archive = Path.Combine(
Directory.GetCurrentDirectory(),
"data",
"data",
fileName.Substring(0, 4),
fileName.Substring(4, 2),
fileName.Substring(6, 2)
);
var tmp = Path.Combine(
Directory.GetCurrentDirectory(),
"temp",
System.Guid.NewGuid().ToString()
);
log.Info("Path: " + dir_archive);
if (!Directory.Exists(tmp))
Directory.CreateDirectory(tmp);
var flag_exist = false;
var tar_gz = false;
if (File.Exists(Path.Combine(dir_archive, vdp + ".tar.gz")))
{
flag_exist = true;
tar_gz = true;
dir_archive = Path.Combine(dir_archive, vdp + ".tar.gz");
}
if (File.Exists(Path.Combine(dir_archive, vdp + ".tar")))
{
flag_exist = true;
dir_archive = Path.Combine(dir_archive, vdp + ".tar");
}
if (!flag_exist)
return Array.Empty<byte>();
if (tar_gz)
ExtractTarGZ(dir_archive, tmp);
else
ExtractTar(dir_archive, tmp);
if (!File.Exists(Path.Combine(tmp, fileName)))
{
Directory.Delete(tmp, true);
return Array.Empty<byte>();
}
var result = File.ReadAllBytes(Path.Combine(tmp, fileName));
Directory.Delete(tmp, true);
return result;
}
private static void ExtractTarGZ(String gzArchiveName, String destFolder)
{
using (var a = (Stream)File.OpenRead(gzArchiveName))
using (var b = (Stream)new GZipInputStream(a))
using (var c = TarArchive.CreateInputTarArchive(b))
c.ExtractContents(destFolder);
}
private static void ExtractTar(String tarFileName, String destFolder)
{
using (var a = (Stream)File.OpenRead(tarFileName))
using (var b = TarArchive.CreateInputTarArchive(a))
b.ExtractContents(destFolder);
}
public static Protect[] GetProtects(DateTime date, int vdp)
{
var result = new List<Protect>();
var byte_arr = GetFileBytes(
date.Year.ToString("D4") +
date.Month.ToString("D2") +
date.Day.ToString("D2") +
"." +
vdp.ToString("D2") +
"4"
);
for (var i = 0; i < byte_arr.Length; i++)
{
if (i + 3 >= byte_arr.Length)
break;
var unix_date = BitConverter.ToUInt32(byte_arr, i);
i += 4;
var date_time = new DateTime(1970, 1, 1, 0, 0, 0, 0);
date_time = date_time.AddSeconds(unix_date).ToLocalTime();
if (i + 3 >= byte_arr.Length)
break;
var nanosec = BitConverter.ToUInt32(byte_arr, i);
i += 4;
date_time.AddMilliseconds(nanosec / 1000000);
while (byte_arr[i] != 0xff)
{
if (i >= byte_arr.Length)
break;
var index = byte_arr[i];
i++;
if (i >= byte_arr.Length)
break;
var state = byte_arr[i];
i++;
result.Add(
new Protect()
{
Index = index,
start = date_time,
State = state
}
);
}
}
return result.ToArray();
}
public static Discret[] GetDiscrets(DateTime date, int vdp)
{
var desc_struct = Configuration.GetDiscretParams(vdp.ToString("D2"));
var result = new List<Discret>();
var byte_arr = GetFileBytes(
date.Year.ToString("D4") +
date.Month.ToString("D2") +
date.Day.ToString("D2") +
"." +
vdp.ToString("D2") +
"1"
);
var date_bytes_struct = new List<(DateTime dt, byte?[] arr)>();
var curr_date = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0);
var curr_byte_arr = new List<byte?>();
var halfsec = 0D;
var curr_byte = 0;
while (curr_byte < byte_arr.Length)
{
switch (byte_arr[curr_byte])
{
case 0xfb:
curr_byte++;
if (curr_byte + 3 >= byte_arr.Length)
{
curr_byte += 3;
break;
}
halfsec = BitConverter.ToUInt32(byte_arr, curr_byte);
curr_byte += 4;
break;
case 0xfc:
curr_byte_arr = new List<byte?>();
date_bytes_struct.Add((
curr_date.AddSeconds(halfsec / 2),
curr_byte_arr.ToArray()
));
curr_byte++;
if (curr_byte + 3 >= byte_arr.Length)
{
curr_byte += 3;
break;
}
halfsec = BitConverter.ToUInt32(byte_arr, curr_byte);
curr_byte += 4;
break;
case 0xfe:
curr_byte++;
if (curr_byte + 1 >= byte_arr.Length)
{
curr_byte++;
break;
}
halfsec += BitConverter.ToInt16(byte_arr, curr_byte);
curr_byte += 2;
break;
case 0xff:
date_bytes_struct.Add((
curr_date.AddSeconds(halfsec / 2),
curr_byte_arr.ToArray()
));
halfsec++;
curr_byte++;
break;
default:
while (curr_byte_arr.Count <= byte_arr[curr_byte])
curr_byte_arr.Add(null);
curr_byte++;
if (curr_byte >= byte_arr.Length)
break;
curr_byte_arr[byte_arr[curr_byte - 1]] = byte_arr[curr_byte];
curr_byte++;
break;
}
}
foreach (var dm in date_bytes_struct)
{
foreach (var dp in desc_struct)
{
if (dp.Skip)
continue;
byte? state = 0;
for (var i = 0; i < dp.Bits.Length; i++)
{
if (
dm.arr.Length <= dp.Bits[i].ByteIndex ||
!dm.arr[dp.Bits[i].ByteIndex].HasValue
)
{
state = null;
break;
}
var curr_bit = (dm.arr[dp.Bits[i].ByteIndex].Value >> dp.Bits[i].BitIndex) & 1;
state += (byte)(curr_bit * Math.Pow(2, i));
}
var last = result.FindLastIndex(x => x.Index == dp.Index);
if (last != -1 && result[last].State == state)
continue;
result.Add(new Discret()
{
Index = dp.Index,
start = dm.dt,
State = state
});
}
}
return result.ToArray();
}
public static AnalogArr[] GetAnalogs(DateTime date, int vdp)
{
var analog_struct = Configuration.GetAnalogParams(vdp.ToString("D2"));
var result = new List<AnalogArr>();
var byte_arr = GetFileBytes(
date.Year.ToString("D4") +
date.Month.ToString("D2") +
date.Day.ToString("D2") +
"." +
vdp.ToString("D2") +
"1"
);
var date_bytes_struct = new List<(DateTime dt, byte?[] arr)>();
var curr_date = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0);
var curr_byte_arr = new List<byte?>();
var halfsec = 0D;
var curr_byte = 0;
while (curr_byte < byte_arr.Length)
{
switch (byte_arr[curr_byte])
{
case 0xfb:
curr_byte++;
if (curr_byte + 3 >= byte_arr.Length)
{
curr_byte += 3;
break;
}
halfsec = BitConverter.ToUInt32(byte_arr, curr_byte);
curr_byte += 4;
break;
case 0xfc:
curr_byte_arr = new List<byte?>();
date_bytes_struct.Add((
curr_date.AddSeconds(halfsec / 2),
curr_byte_arr.ToArray()
));
curr_byte++;
if (curr_byte + 3 >= byte_arr.Length)
{
curr_byte += 3;
break;
}
halfsec = BitConverter.ToUInt32(byte_arr, curr_byte);
curr_byte += 4;
break;
case 0xfe:
curr_byte++;
if (curr_byte + 1 >= byte_arr.Length)
{
curr_byte++;
break;
}
halfsec += BitConverter.ToInt16(byte_arr, curr_byte);
curr_byte += 2;
break;
case 0xff:
date_bytes_struct.Add((
curr_date.AddSeconds(halfsec / 2),
curr_byte_arr.ToArray()
));
halfsec++;
curr_byte++;
break;
default:
while (curr_byte_arr.Count <= byte_arr[curr_byte])
curr_byte_arr.Add(null);
curr_byte++;
if (curr_byte >= byte_arr.Length)
break;
curr_byte_arr[byte_arr[curr_byte - 1]] = byte_arr[curr_byte];
curr_byte++;
break;
}
}
var sub_res = new Dictionary<int, List<Analog>>();
foreach (var dm in date_bytes_struct)
{
foreach (var dp in analog_struct)
{
if (dp.Skip)
continue;
double? value = 0;
var val_arr = new List<byte>();
for (var i = 0; i < dp.Bytes.Length; i++)
{
if (
dm.arr.Length <= dp.Bytes[i] ||
!dm.arr[dp.Bytes[i]].HasValue
)
{
value = null;
break;
}
val_arr.Add(dm.arr[dp.Bytes[i]].Value);
}
if (val_arr != null)
{
if (val_arr.Count == 1)
value = val_arr[0];
else if (val_arr.Count == 2)
value = BitConverter.ToInt16(val_arr.ToArray(), 0);
else if (val_arr.Count == 4)
value = BitConverter.ToInt32(val_arr.ToArray(), 0);
else if (val_arr.Count == 8)
value = BitConverter.ToInt64(val_arr.ToArray(), 0);
else
for (var i = 0; i < val_arr.Count; i++)
value += (val_arr[i] * Math.Pow(256, i));
}
if (value != null)
{
value = Math.Round(value.Value);
value = value.Value * dp.Mul;
}
if (!sub_res.ContainsKey(dp.Index))
sub_res.Add(dp.Index, new List<Analog>());
if (sub_res[dp.Index].Count != 0 &&
sub_res[dp.Index][sub_res[dp.Index].Count - 1].Value == value)
continue;
sub_res[dp.Index].Add(new Analog()
{
start = dm.dt,
Value = value
});
}
}
foreach (var d in sub_res)
result.Add(new AnalogArr()
{
Index = d.Key,
Analogs = d.Value.ToArray()
});
return result.ToArray();
}
public static DiscretMatrix[] GetDiscretsMatrix(DateTime date, int vdp)
{
log.Info("Load discret struct for vpd " + vdp);
var desc_struct = Configuration.GetDiscretParams(vdp.ToString("D2"));
var result = new List<DiscretMatrix>();
log.Info("Load file " +
date.Year.ToString("D4") +
date.Month.ToString("D2") +
date.Day.ToString("D2") +
"." +
vdp.ToString("D2") +
"1");
var byte_arr = GetFileBytes(
date.Year.ToString("D4") +
date.Month.ToString("D2") +
date.Day.ToString("D2") +
"." +
vdp.ToString("D2") +
"1"
);
var date_bytes_struct = new List<(DateTime dt, byte?[] arr)>();
var curr_date = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0);
var curr_byte_arr = new List<byte?>();
var halfsec = 0D;
var curr_byte = 0;
log.Info("Parse file to structs.");
while (curr_byte < byte_arr.Length)
{
switch (byte_arr[curr_byte])
{
case 0xfb:
curr_byte++;
if (curr_byte + 3 >= byte_arr.Length)
{
curr_byte += 3;
break;
}
halfsec = BitConverter.ToUInt32(byte_arr, curr_byte);
curr_byte += 4;
break;
case 0xfc:
curr_byte_arr = new List<byte?>();
date_bytes_struct.Add((
curr_date.AddSeconds(halfsec / 2),
curr_byte_arr.ToArray()
));
curr_byte++;
if (curr_byte + 3 >= byte_arr.Length)
{
curr_byte += 3;
break;
}
halfsec = BitConverter.ToUInt32(byte_arr, curr_byte);
curr_byte += 4;
break;
case 0xfe:
curr_byte++;
if (curr_byte + 1 >= byte_arr.Length)
{
curr_byte++;
break;
}
halfsec += BitConverter.ToInt16(byte_arr, curr_byte);
curr_byte += 2;
break;
case 0xff:
date_bytes_struct.Add((
curr_date.AddSeconds(halfsec / 2),
curr_byte_arr.ToArray()
));
halfsec++;
curr_byte++;
break;
default:
while (curr_byte_arr.Count <= byte_arr[curr_byte])
curr_byte_arr.Add(null);
curr_byte++;
if (curr_byte >= byte_arr.Length)
break;
curr_byte_arr[byte_arr[curr_byte - 1]] = byte_arr[curr_byte];
curr_byte++;
break;
}
}
var b_matrix = new List<byte?>();
foreach(var d_slice in date_bytes_struct)
{
var sub_res = new DiscretMatrix() { start = d_slice.dt };
foreach (var d_struct in desc_struct)
{
while (b_matrix.Count <= d_struct.Index)
b_matrix.Add(null);
byte? state = 0;
for (var i = 0; i < d_struct.Bits.Length; i++)
{
if (
d_slice.arr.Length <= d_struct.Bits[i].ByteIndex ||
!d_slice.arr[d_struct.Bits[i].ByteIndex].HasValue
)
{
state = null;
break;
}
var curr_bit = (d_slice.arr[d_struct.Bits[i].ByteIndex].Value >> d_struct.Bits[i].BitIndex) & 1;
state += (byte)(curr_bit * Math.Pow(2, i));
}
b_matrix[d_struct.Index] = state;
}
sub_res.M = b_matrix.ToArray();
result.Add(sub_res);
}
return result.ToArray();
}
}
}

View File

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}

View File

@ -0,0 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,10 @@
{
"runtimeOptions": {
"additionalProbingPaths": [
"C:\\Users\\Admin\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\Admin\\.nuget\\packages",
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet"
]
}
}

View File

@ -0,0 +1,13 @@
{
"runtimeOptions": {
"tfm": "net5.0",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "5.0.0"
},
"configProperties": {
"System.GC.Server": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

View File

@ -0,0 +1,3 @@
{
"red" : "#ff0000"
}

View File

@ -0,0 +1,87 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": {
"parent": [ "default" ],
"struct": [
{
"index": 2,
"name": "Âîäà êàìåðû (ýêñï.)",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 2
}
]
}
]
},
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": {
"parent": [ "default" ],
"struct": [
{
"index": 1,
"name": "Âîäà øòîêà (ýêñï.)",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 1
}
]
}
]
},
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

View File

@ -0,0 +1,823 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Дискрет №0",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 46,
"bit_index": 0
}
]
},
{
"index": 1,
"name": "P1 воды кристаллизатора",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 1
}
]
},
{
"index": 2,
"name": "P2 воды кристаллизатора",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 2
}
]
},
{
"index": 3,
"name": "Вода камеры",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 3
}
]
},
{
"index": 4,
"name": "Вода штока",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 4
}
]
},
{
"index": 5,
"name": "Дверь - А",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 5
}
]
},
{
"index": 6,
"name": "Дверь - Б",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 6
}
]
},
{
"index": 7,
"name": "Дверь - В",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 7
}
]
},
{
"index": 8,
"name": "Дверь - Г",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 0
}
]
},
{
"index": 9,
"name": "Дверь - Д",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 1
}
]
},
{
"index": 10,
"name": "Люк",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 2
}
]
},
{
"index": 11,
"name": "Пенал",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 3
}
]
},
{
"index": 12,
"name": "Упоры",
"state_struct": "out_in_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 4
}
]
},
{
"index": 13,
"name": "Прижимы",
"state_struct": "spinn_clamp_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 5
}
]
},
{
"index": 14,
"name": "Вакуумный выключатель",
"state_struct": "none_on_off_err_3_4",
"bits": [
{
"byte_index": 47,
"bit_index": 6
},
{
"byte_index": 47,
"bit_index": 7
}
]
},
{
"index": 15,
"skip": true
},
{
"index": 16,
"name": "\"Автоматика\"",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 0
},
{
"byte_index": 49,
"bit_index": 7
}
]
},
{
"index": 31,
"skip": true
},
{
"index": 17,
"name": "БПС",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 1
},
{
"byte_index": 50,
"bit_index": 0
}
]
},
{
"index": 32,
"skip": true
},
{
"index": 18,
"name": "Соленоид",
"state_struct": "none_err_const_puls_1_2",
"bits": [
{
"byte_index": 48,
"bit_index": 2
},
{
"byte_index": 48,
"bit_index": 3
}
]
},
{
"index": 19,
"skip": true
},
{
"index": 20,
"name": "ARPW",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 4
},
{
"byte_index": 48,
"bit_index": 7
}
]
},
{
"index": 23,
"skip": true
},
{
"index": 21,
"name": "ДВН",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 5
},
{
"byte_index": 49,
"bit_index": 3
}
]
},
{
"index": 27,
"skip": true
},
{
"index": 22,
"name": "SZO",
"state_struct": "off_on",
"bits": [
{
"byte_index": 48,
"bit_index": 6
}
]
},
{
"index": 24,
"name": "ДУ-260",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 0
},
{
"byte_index": 49,
"bit_index": 1
}
]
},
{
"index": 25,
"skip": true
},
{
"index": 26,
"name": "ДУ-100",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 2
},
{
"byte_index": 50,
"bit_index": 2
}
]
},
{
"index": 34,
"skip": true
},
{
"index": 28,
"name": "ДУ-32",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 4
},
{
"byte_index": 50,
"bit_index": 3
}
]
},
{
"index": 35,
"skip": true
},
{
"index": 29,
"name": "Шток вверху",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 49,
"bit_index": 5
}
]
},
{
"index": 30,
"name": "Шток внизу",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 49,
"bit_index": 6
}
]
},
{
"index": 33,
"name": "Плохой вакуум",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 50,
"bit_index": 1
}
]
},
{
"index": 36,
"name": "Напряжение аварийной сигнализации",
"state_struct": "no_yes_ok",
"bits": [
{
"byte_index": 50,
"bit_index": 4
}
]
},
{
"index": 37,
"name": "Взрывной клапан",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 50,
"bit_index": 5
}
]
},
{
"index": 38,
"name": "Ключ УП в положении \"Автоматика\"",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 50,
"bit_index": 6
}
]
},
{
"index": 39,
"name": "off_on_err",
"state_struct": "Реле \"Авария источника\"",
"bits": [
{
"byte_index": 50,
"bit_index": 7
}
]
},
{
"index": 40,
"name": "Сброс звуковой сигнализации",
"state_struct": "spinn_press",
"bits": [
{
"byte_index": 51,
"bit_index": 0
}
]
},
{
"index": 41,
"name": "Вакуум по ЭКМВ",
"state_struct": "have_no_err",
"bits": [
{
"byte_index": 51,
"bit_index": 1
}
]
},
{
"index": 42,
"name": "Реле \"Имитация тока дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 2
}
]
},
{
"index": 43,
"name": "Реле \"АУ током дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 3
}
]
},
{
"index": 44,
"name": "Реле \"Имитация напряжения дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 4
}
]
},
{
"index": 45,
"name": "Реле \"Имитация вакуума печи\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 5
}
]
},
{
"index": 46,
"name": "Реле \"Имитация T воды кристаллизатора\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 6
}
]
},
{
"index": 47,
"name": "Реле \"Имитация T воды вакуумкамеры\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 7
}
]
},
{
"index": 48,
"name": "Реле \"Имитация T воды штока\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 0
}
]
},
{
"index": 49,
"name": "Реле 1 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 1
}
]
},
{
"index": 50,
"name": "Реле 2 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 2
}
]
},
{
"index": 51,
"name": "Реле 3 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 3
}
]
},
{
"index": 52,
"name": "Реле 4 \"Контроль метрологии\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 4
}
]
},
{
"index": 53,
"name": "Реле 5 \"Измерение изоляции (соленоид)\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 5
}
]
},
{
"index": 54,
"name": "Реле \"АУ штоком\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 6
}
]
},
{
"index": 55,
"name": "Реле \"Включение Uкалибровки\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 7
}
]
},
{
"index": 56,
"name": "Реле \"Движение штока вверх\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 53,
"bit_index": 0
}
]
},
{
"index": 57,
"name": "УП в положении КЗ",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 53,
"bit_index": 1
}
]
},
{
"index": 58,
"name": "Нет питания, включено \"резервное\" UPS",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 2
}
]
},
{
"index": 59,
"name": "Вода подставки",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 3
}
]
},
{
"index": 60,
"name": "Реле \"Разрешение на вакуумирование печи\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 53,
"bit_index": 4
}
]
},
{
"index": 61,
"name": "Низкий заряд аккумулятора UPS",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 53,
"bit_index": 5
}
]
},
{
"index": 62,
"name": "КВ рамы",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 6
}
]
},
{
"index": 63,
"name": "Источник: +24В",
"state_struct": "no_have_ok",
"bits": [
{
"byte_index": 53,
"bit_index": 7
}
]
},
{
"index": 64,
"name": "Реле \"Движение штока вниз\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 54,
"bit_index": 0
}
]
},
{
"index": 65,
"name": "Проверка источника",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 54,
"bit_index": 1
}
]
},
{
"index": 66,
"name": "Станция",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 54,
"bit_index": 2
},
{
"byte_index": 54,
"bit_index": 3
}
]
},
{
"index": 67,
"skip": true
},
{
"index": 68,
"name": "Постоянное U=220В",
"state_struct": "no_have",
"bits": [
{
"byte_index": 54,
"bit_index": 4
}
]
},
{
"index": 69,
"name": "Источник готов",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 54,
"bit_index": 5
}
]
},
{
"index": 70,
"name": "Авария привода",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 6
}
]
},
{
"index": 71,
"name": "Реле \"Напуск газа в печь\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 54,
"bit_index": 7
}
]
},
{
"index": 74,
"name": "Реле \"АУ током дуги ВДП №46\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 2
}
]
},
{
"index": 76,
"name": "Готовность привода",
"state_struct": "no_have_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 4
}
]
},
{
"index": 78,
"name": "Реле \"Авария источника ВДП №46\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 6
}
]
},
{
"index": 79,
"name": "Клапан подачи аргона",
"state_struct": "close_open_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 7
}
]
},
{
"index": 95,
"name": "Разрешение на вкл. вакуумного выключателя",
"state_struct": "off_on",
"bits": [
{
"byte_index": 57,
"bit_index": 7
}
]
}
]
}
}

View File

@ -0,0 +1,127 @@
{
"power_new": {
"struct": [
{
"index": 39,
"name": "Àâàðèéíàÿ ñèãíàëèçàöèÿ èñòî÷íèêà",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 50,
"bit_index": 7
}
]
},
{
"index": 63,
"name": "Ñòàíöèÿ âêëþ÷åíà",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 53,
"bit_index": 7
}
]
},
{
"index": 66,
"name": "Ïðîáîé òèðèñòîðà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 2
}
]
},
{
"index": 67,
"name": "Ìàêñ. òîê âûïðÿìèòåëüíîãî áëîêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 3
}
]
},
{
"index": 68,
"name": "Ïåðåãðóçêà âûïðÿìèòåëüíîãî áëîêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 4
}
]
},
{
"index": 69,
"name": "Ðåëå ìàêñèìàëüíîãî òîêà",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 54,
"bit_index": 5
}
]
},
{
"index": 72,
"name": "Íåèñïðàâíîñòü ÓÇÏ",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 0
}
]
},
{
"index": 73,
"name": "Íåèñïðàâíîñòü èñòî÷íèêà ïèòàíèÿ",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 1
}
]
},
{
"index": 74,
"name": "Ãîòîâíîñòü èñòî÷íèêà",
"state_struct": "no_yes_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 2
}
]
},
{
"index": 75,
"name": "Ïåðåãðåâ èñòî÷íèêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 3
}
]
},
{
"index": 77,
"name": "Ïðåäóïðåäèòåëüíàÿ ñèãíàëèçàöèÿ èñòî÷íèêà",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 5
}
]
}
]
}
}

View File

@ -0,0 +1,13 @@
{
"кА": false,
"В": false,
"А": false,
"гр.С": false,
"мм": false,
"мкм.рт.ст": true,
"м^3/ч": false,
"кгс/см^2": false,
"мм.рт.ст": true,
"МВт": false,
"Гц": true
}

View File

@ -0,0 +1,56 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": { "parent": [ "default" ] },
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": { "parent": [ "default" ] },
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

View File

@ -0,0 +1,356 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Alarm ! Zero signal !",
"state_struct": "protect_1"
},
{
"index":1,
"name": "Шток внизу !",
"state_struct": "protect_1"
},
{
"index":2,
"name": "Шток вверху !",
"state_struct": "protect_1"
},
{
"index": 3,
"name": "Uдуги > Uмакс !",
"state_struct": "protect_1"
},
{
"index": 4,
"name": "Uдуги < Uмин !",
"state_struct": "protect_1"
},
{
"index": 5,
"name": "Qводы кристаллизатора !",
"state_struct": "protect_1"
},
{
"index": 6,
"name": "P2 воды кристаллизатора ЭКМ отметка -5м !",
"state_struct": "protect_1"
},
{
"index": 7,
"name": "P1 воды кристаллизатора ЭКМ отметка +1.5м !",
"state_struct": "protect_1"
},
{
"index": 8,
"name": "P1 воды кристаллизатора ЭКМ отметка +1.5м !",
"state_struct": "protect_1"
},
{
"index": 9,
"name": "Вода штока !",
"state_struct": "protect_1"
},
{
"index":10,
"name": "tводы штока !",
"state_struct": "protect_1"
},
{
"index":11,
"name": "Вода вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index":12,
"name": "tводы вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index":13,
"name": "Ухудшение вакуума !",
"state_struct": "protect_1"
},
{
"index": 14,
"name": "Нет готовности к токовой операции!",
"state_struct": "protect_1"
},
{
"index": 15,
"name": "Дверь А открыта !",
"state_struct": "protect_1"
},
{
"index": 16,
"name": "Дверь Б открыта !",
"state_struct": "protect_1"
},
{
"index": 17,
"name": "Дверь В открыта !",
"state_struct": "protect_1"
},
{
"index": 18,
"name": "Дверь Г открыта !",
"state_struct": "protect_1"
},
{
"index": 19,
"name": "Дверь Д открыта !",
"state_struct": "protect_1"
},
{
"index": 20,
"name": "Прижимы !",
"state_struct": "protect_1"
},
{
"index": 21,
"name": "Упоры !",
"state_struct": "protect_1"
},
{
"index": 22,
"name": "Люк открыт !",
"state_struct": "protect_1"
},
{
"index": 23,
"name": "Пенал открыт !",
"state_struct": "protect_1"
},
{
"index": 24,
"name": "Вода подставки !",
"state_struct": "protect_1"
},
{
"index": 25,
"name": "Нет U аварийной сигнализации !",
"state_struct": "protect_1"
},
{
"index": 26,
"name": "Плохой вакуум !",
"state_struct": "protect_1"
},
{
"index": 27,
"name": "tводы подставки !",
"state_struct": "protect_1"
},
{
"index": 28,
"name": "Давление газа в печи выше атмосферного !",
"state_struct": "protect_1"
},
{
"index": 29,
"name": "Вода фланца вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index": 30,
"name": "Отключение ВВ!",
"state_struct": "protect_1"
},
{
"index": 31,
"name": "tводы фланца вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index": 32,
"name": "P воды поддона !",
"state_struct": "protect_1"
},
{
"index": 33,
"name": "Отсутствует связь с сервером 1 %s!*3",
"state_struct": "protect_1"
},
{
"index": 34,
"name": "Отсутствует связь с сервером 2 %s!*3",
"state_struct": "protect_1"
},
{
"index": 35,
"name": "Отсутствует связь с контроллером ГМП !",
"state_struct": "protect_1"
},
{
"index": 36,
"name": "Неисправность в работе ARPW !",
"state_struct": "protect_1"
},
{
"index": 37,
"name": "Неисправность в работе ДВН !",
"state_struct": "protect_1"
},
{
"index": 38,
"name": "Неисправность в работе ВВ !",
"state_struct": "protect_1"
},
{
"index": 39,
"name": "Неисправность в работе ДУ-260 !",
"state_struct": "protect_1"
},
{
"index": 40,
"name": "Неисправность в работе ДУ-100 !",
"state_struct": "protect_1"
},
{
"index": 41,
"name": "Неисправность в работе ДУ-32 !",
"state_struct": "protect_1"
},
{
"index": 43,
"name": "Неисправность в работе БПС !",
"state_struct": "protect_1"
},
{
"index": 44,
"name": "Неисправность в режиме работы соленоида !",
"state_struct": "protect_1"
},
{
"index": 45,
"name": "Нет питания сети !",
"state_struct": "protect_1"
},
{
"index": 46,
"name": "КВ рамы",
"state_struct": "protect_1"
},
{
"index": 48,
"name": "Нет сигнала датчика (МЕТРАН отм.+1.5м) !",
"state_struct": "protect_1"
},
{
"index": 49,
"name": "БПС ГМП отключен!",
"state_struct": "protect_1"
},
{
"index": 50,
"name": "Неисправность источника питания ВДП !",
"state_struct": "protect_1"
},
{
"index": 51,
"name": "Нет принимаемых данных !",
"state_struct": "protect_1"
},
{
"index": 52,
"name": "Разрыв дуги !",
"state_struct": "protect_1"
},
{
"index": 53,
"name": "Нет готовности привода!",
"state_struct": "protect_1"
},
{
"index": 54,
"name": "Alarm ! Signal A1_22 is set.",
"state_struct": "protect_1"
},
{
"index": 55,
"name": "Короткое замыкание !",
"state_struct": "protect_1"
},
{
"index": 56,
"name": "Переключатель УП не в положении АВТ !",
"state_struct": "protect_1"
},
{
"index": 57,
"name": "Проверить перевод разьединителей печей!",
"state_struct": "protect_1"
},
{
"index": 58,
"name": "Снижение протока воды штока!",
"state_struct": "protect_1"
},
{
"index": 59,
"name": "Снижение протока воды камеры!",
"state_struct": "protect_1"
},
{
"index": 60,
"name": "Снижение протока воды фланца!",
"state_struct": "protect_1"
},
{
"index": 61,
"name": "Запрет зажигания дуги по времени вакуумирования!",
"state_struct": "protect_1"
},
{
"index": 62,
"name": "Отсутствует ток соленоида !",
"state_struct": "protect_1"
},
{
"index": 63,
"name": "Отсутствует перемещение штока !",
"state_struct": "protect_1"
},
{
"index": 64,
"name": "Отсутствует перемещение штока > 15 минут!",
"state_struct": "protect_1"
},
{
"index": 65,
"name": "Запрет на включение вакуумных насосов !",
"state_struct": "protect_1"
},
{
"index": 67,
"name": "ВДП развакуумирована !",
"state_struct": "protect_1"
},
{
"index": 70,
"name": "Смещение начала архивации %s !*1",
"state_struct": "protect_1"
},
{
"index": 71,
"name": "Смещение конца архивации %s !*1",
"state_struct": "protect_1"
},
{
"index": 74,
"name": "",
"state_struct": "protect_1"
},
{
"index": 75,
"name": "Alarm ! Signal A1_43 is set.",
"state_struct": "protect_1"
},
{
"index": 76,
"name": "Alarm ! Signal A1_44 is set.",
"state_struct": "protect_1"
}
]
}
}

View File

@ -0,0 +1,265 @@
{
"protect_1": [
{
"index": 0,
"name": "Отсутствует",
"color": "#00ff00"
},
{
"index": 1,
"name": "Сработало",
"color": "#ffff00"
},
{
"index": 2,
"name": "Сброс тока",
"color": "#ff0000"
}
],
"no_yes_err": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Да",
"color": "#ff0000"
}
],
"no_yes_ok": [
{
"index": 0,
"name": "Нет",
"color": "#ff0000"
},
{
"index": 1,
"name": "Да",
"color": "#00ff00"
}
],
"no_yes": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Да",
"color": "#00ff00"
}
],
"have_no_err": [
{
"index": 0,
"name": "Есть",
"color": "#00ff00"
},
{
"index": 1,
"name": "Нет",
"color": "#ff0000"
}
],
"no_have_ok": [
{
"index": 0,
"name": "Нет",
"color": "#ff0000"
},
{
"index": 1,
"name": "Есть",
"color": "#00ff00"
}
],
"no_have": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Есть",
"color": "#00ff00"
}
],
"off_on_err": [
{
"index": 0,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 1,
"name": "Вкл",
"color": "#ff0000"
}
],
"off_on": [
{
"index": 0,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
}
],
"open_close_ok": [
{
"index": 0,
"name": "Откр",
"color": "#ff0000"
},
{
"index": 1,
"name": "Закр",
"color": "#00ff00"
}
],
"close_open_ok": [
{
"index": 0,
"name": "Закр",
"color": "#ff0000"
},
{
"index": 1,
"name": "Откр",
"color": "#00ff00"
}
],
"out_in_ok": [
{
"index": 0,
"name": "Не введ",
"color": "#ff0000"
},
{
"index": 1,
"name": "Введ",
"color": "#00ff00"
}
],
"spinn_clamp_ok": [
{
"index": 0,
"name": "Отж",
"color": "#ff0000"
},
{
"index": 1,
"name": "Приж",
"color": "#00ff00"
}
],
"spinn_press": [
{
"index": 0,
"name": "Отж",
"color": "#00ff00"
},
{
"index": 1,
"name": "Наж",
"color": "#00ff00"
}
],
"none_on_off_err_3_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
},
{
"index": 2,
"name": "Выкл",
"color": "#ff0000"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
],
"none_on_off_err_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
},
{
"index": 2,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
],
"none_err_const_puls_1_2": [
{
"index": 0,
"name": "Авария",
"color": "#ff0000"
},
{
"index": 1,
"name": "Авария",
"color": "#ff0000"
},
{
"index": 2,
"name": "Пост",
"color": "#00ff00"
},
{
"index": 3,
"name": "Пульс",
"color": "#00ff00"
}
],
"none_open_close_err_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Откр",
"color": "#00ff00"
},
{
"index": 2,
"name": "Закр",
"color": "#00ff00"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
]
}

View File

@ -0,0 +1,94 @@
{
"tech_cycle_conf": [
{
"index": -1,
"name": "Конец технологического цикла (ручной)",
"color": "#00ffff"
},
{
"index": 0,
"name": "Конец технологического цикла",
"color": "#00ffff"
},
{
"index": 1,
"name": "Выгрузка-загрузка",
"color": "#00ffff"
},
{
"index": 2,
"name": "Вакуумирование на приварку",
"color": "#0000ff"
},
{
"index": 5,
"name": "Приварка",
"color": "#ff0000"
},
{
"index": 6,
"name": "Охлаждение приварки",
"color": "#00ff00"
},
{
"index": 7,
"name": "Осмотр приварки",
"color": "#00ffff"
},
{
"index": 8,
"name": "Вакуумирование на плавку",
"color": "#0000ff"
},
{
"index": 9,
"name": "Разведение ванны",
"color": "#8500b6"
},
{
"index": 10,
"name": "Плавка (основной режим)",
"color": "#ff0000"
},
{
"index": 11,
"name": "ВУР",
"color": "#ff00ff"
},
{
"index": 12,
"name": "Охлаждение слитка",
"color": "#00ff00"
},
{
"index": 13,
"name": "Выгрузка комплекта",
"color": "#00ffff"
},
{
"index": 14,
"name": "Вакуумирование на оплавление",
"color": "#0000ff"
},
{
"index": 15,
"name": "Оплавление",
"color": "#ff0000"
},
{
"index": 16,
"name": "Охлаждение оплавыша",
"color": "#00ff00"
},
{
"index": 17,
"name": "Слив металла",
"color": "#8500b6"
},
{
"index": 25,
"name": "Проверка защит",
"color": "#00ffff"
}
]
}

View File

@ -0,0 +1,56 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": { "parent": [ "default" ] },
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": { "parent": [ "default" ] },
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

View File

@ -0,0 +1,380 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Ток дуги",
"s_name": "I д",
"metric": "кА",
"mul": 0.1,
"show_default": true,
"bytes": [ 0, 1 ]
},
{
"index": 1,
"name": "Напряжение дуги",
"s_name": "U д",
"metric": "В",
"mul": 0.1,
"show_default": true,
"bytes": [ 2, 3 ]
},
{
"index": 2,
"name": "Ток рабочего двигателя",
"s_name": "I рд",
"metric": "А",
"mul": 0.1,
"bytes": [ 4, 5 ]
},
{
"index": 3,
"name": "U рабочего двигателя",
"s_name": "U рд",
"metric": "В",
"mul": 0.1,
"bytes": [ 6, 7 ]
},
{
"index": 4,
"name": "Ток соленоида",
"s_name": "I сол",
"metric": "А",
"mul": 0.1,
"bytes": [ 8, 9 ]
},
{
"index": 5,
"name": "U соленоида",
"s_name": "U сол",
"metric": "В",
"mul": 0.1,
"bytes": [ 10, 11 ]
},
{
"index": 6,
"name": "Ток задания",
"s_name": "I рз",
"metric": "кА",
"mul": 0.1,
"show_default": true,
"bytes": [ 12, 13 ]
},
{
"index": 7,
"name": "t кристаллизатора на входе",
"s_name": "t кр.вых",
"metric": "гр.С",
"mul": 1,
"bytes": [ 14, 15 ]
},
{
"index": 8,
"name": "t кристаллизатора на выходе",
"s_name": "t кр.вх",
"metric": "гр.С",
"mul": 1,
"bytes": [ 16, 17 ]
},
{
"index": 9,
"name": "t вакуум-камеры",
"s_name": "t вак-кам",
"metric": "гр.С",
"mul": 1,
"bytes": [ 18, 19 ]
},
{
"index": 10,
"name": "t штока",
"s_name": "t шт",
"metric": "гр.С",
"mul": 1,
"bytes": [ 20, 21 ]
},
{
"index": 11,
"name": "U контроля",
"s_name": "U конт",
"metric": "В",
"mul": 0.1,
"bytes": [ 22, 23 ]
},
{
"index": 12,
"name": "Перемещение",
"s_name": "S шт",
"metric": "мм",
"mul": 1,
"bytes": [ 24, 25 ]
},
{
"index": 13,
"name": "Вакуум",
"s_name": "Вакуум",
"metric": "мкм.рт.ст",
"mul": -1,
"show_default": true,
"bytes": [ 26, 27 ]
},
{
"index": 14,
"name": "Изоляция шток-крышка",
"s_name": "R шт-кр",
"metric": "В",
"mul": 0.1,
"bytes": [ 28, 29 ]
},
{
"index": 15,
"name": "Изоляция крышка-камера",
"s_name": "R кр-кам",
"metric": "В",
"mul": 0.1,
"bytes": [ 30, 31 ]
},
{
"index": 16,
"name": "Расход воды",
"s_name": "Q в.кр",
"metric": "м^3/ч",
"mul": 1,
"bytes": [ 32, 33 ]
},
{
"index": 17,
"name": "Капельные замыкания",
"s_name": "Кап.зам.",
"metric": "УЕ",
"mul": 0.01,
"bytes": [ 34, 35 ]
},
{
"index": 18,
"name": "Усреднённая ширина импульсов КЗ",
"s_name": "Кап.зым.",
"metric": "УЕ",
"mul": 0.1,
"bytes": [ 36, 37 ]
},
{
"index": 19,
"name": "Проток воды фланца",
"s_name": "Qв. фл.",
"metric": "м^3/ч",
"mul": 0.01,
"bytes": [ 38, 39 ]
},
{
"index": 20,
"name": "Проток воды штока",
"s_name": "Qв. шт.",
"metric": "м^3/ч",
"mul": 0.01,
"bytes": [ 40, 41 ]
},
{
"index": 21,
"name": "Давление воды крист.+1,5",
"s_name": "P в.кр",
"metric": "кгс/см^2",
"mul": 0.01,
"bytes": [ 42, 43 ]
},
{
"index": 22,
"name": "Проток воды камеры",
"s_name": "Qв. кам.",
"metric": "м^3/ч",
"mul": 0.01,
"bytes": [ 44, 45 ]
},
{
"index": 23,
"name": "Ток задания источника(САУ)",
"s_name": "I з.ист САУ",
"metric": "кА",
"mul": 0.1,
"bytes": [ 58, 59 ]
},
{
"index": 24,
"name": "",
"s_name": "",
"metric": "УЕ",
"mul": 0.1,
"bytes": [ 60, 61 ]
},
{
"index": 25,
"name": "ПИД-рег. основная уставка",
"s_name": "ПИД-осн",
"metric": "В",
"mul": 0.1,
"bytes": [ 62, 63 ]
},
{
"index": 26,
"name": "ПИД-рег. макс. скорость",
"s_name": "ПИД-макс",
"metric": "В",
"mul": 0.1,
"bytes": [ 64, 65 ]
},
{
"index": 27,
"name": "t фланца вакуум-камеры",
"s_name": "t фл.",
"metric": "гр.С",
"mul": 1,
"bytes": [ 66, 67 ]
},
{
"index": 28,
"name": "t подставки",
"s_name": "t под.",
"metric": "гр.С",
"mul": 1,
"bytes": [ 68, 69 ]
},
{
"index": 29,
"name": "Проток воды подставки",
"s_name": "Qв. под.",
"metric": "м^3/ч",
"mul": 0.01,
"bytes": [ 70, 71 ]
},
{
"index": 30,
"name": "Задание соленоида",
"s_name": "Зад. сол.",
"metric": "А",
"mul": 0.1,
"bytes": [ 72, 73 ]
},
{
"index": 31,
"name": "Ток задания источника(преобраз.)",
"s_name": "I з.ист. преоб.",
"metric": "кА",
"mul": 0.1,
"bytes": [ 74, 75 ]
},
{
"index": 32,
"name": "Резерв",
"s_name": "",
"metric": "УЕ",
"mul": 0.1,
"bytes": [ 76, 77 ]
},
{
"index": 33,
"name": "Вакуум по МЕТРАН-1200",
"s_name": "МЕТРАН-1200",
"metric": "мм.рт.ст",
"mul": 0.1,
"show_default": true,
"bytes": [ 78, 79 ]
},
{
"index": 34,
"name": "Вакуум по МЕТРАН-18,75",
"s_name": "МЕТРАН-18,25",
"metric": "мм.рт.ст",
"mul": 0.001,
"show_default": true,
"bytes": [ 80, 81 ]
},
{
"index": 35,
"name": "Давление газа в баллоне",
"s_name": "P г.балл.",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": [ 82, 83 ]
},
{
"index": 36,
"name": "Давление воды поддона",
"s_name": "P в.подд.",
"metric": "кгс/см^2",
"mul": 1,
"bytes": [ 84, 85 ]
},
{
"index": 37,
"name": "Задание тока дуги (ЦАП)",
"s_name": "Зад.I, ЦАП",
"metric": "кА",
"mul": 0.1,
"bytes": [ 86, 87 ]
},
{
"index": 38,
"name": "Задкние скорости рабочего двигателя",
"s_name": "Зад.ск.раб.дв",
"metric": "В",
"mul": 0.1,
"bytes": [ 88, 89 ]
},
{
"index": 39,
"name": "Ток двигателя насоса ARPW",
"s_name": "I дв. ARPW",
"metric": "А",
"mul": 0.01,
"bytes": [ 90, 91 ]
},
{
"index": 40,
"name": "Энергия плавильного пролёта",
"s_name": "Эн.пролёта, МВт",
"metric": "МВт",
"mul": 0.1,
"bytes": [ 92, 93 ]
},
{
"index": 41,
"name": "Среднее напряжение плавления",
"s_name": "U средн, В",
"metric": "В",
"mul": 0.1,
"bytes": [ 94, 95 ]
},
{
"index": 42,
"name": "ГМП: ток катушки 1",
"s_name": "I кат1 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 96, 97 ]
},
{
"index": 43,
"name": "ГМП: ток катушки 2",
"s_name": "I кат2 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 98, 99 ]
},
{
"index": 44,
"name": "ГМП: ток катушки 3",
"s_name": "I кат3 ГМП",
"metric": "А",
"mul": 1,
"bytes": [ 100, 101 ]
},
{
"index": 45,
"name": "ГМП: частота",
"s_name": "Част. ГМП",
"metric": "Гц",
"mul": 1,
"bytes": [ 102, 103 ]
}
]
}
}

View File

@ -0,0 +1,110 @@
{
"00": {
"struct": [
{
"index": 0,
"name": "Общий: t воды водооборота",
"s_name": "t в",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 1,
"name": "Общий: Давление воды водооборота",
"s_name": "P в",
"metric": "кгс/см^2",
"mul": 0.01,
"bytes": []
},
{
"index": 2,
"name": "Общий: Давление масла в бутыли",
"s_name": "P масла бут",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 3,
"name": "Общий: t воздуха в машинном зале",
"s_name": "t машзал",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 4,
"name": "Общий: t воздуха на улице",
"s_name": "t улица",
"metric": "гр.С",
"mul": 0.1,
"bytes": []
},
{
"index": 5,
"name": "Общий: Атмосферное давление",
"s_name": "p атм",
"metric": "мм.рт.ст",
"mul": 0.1,
"bytes": []
},
{
"index": 6,
"name": "Общий: Давление масла в магистрали",
"s_name": "P масла маг",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 7,
"name": "Общий: Давление воды водооборота-К90",
"s_name": "P в-90",
"metric": "кгс/см^2",
"mul": 0.1,
"bytes": []
},
{
"index": 8,
"name": "Скорость штока за 1 мин",
"s_name": "V шт",
"metric": "мм/мин",
"mul": 0.01,
"bytes": []
},
{
"index": 9,
"name": "Вакуум по МЕТРАН 1,2",
"s_name": "МЕТРАН1,2",
"metric": "мм.рт.ст",
"mul": 0.001,
"bytes": []
},
{
"index": 10,
"name": "ВС: Ток дуги",
"s_name": "ВС:I д",
"metric": "кА",
"mul": 0.1,
"bytes": []
},
{
"index": 12,
"name": "ВС: Напряжение дуги",
"s_name": "ВС:U д",
"metric": "В",
"mul": 0.1,
"bytes": []
},
{
"index": 13,
"name": "ВС: Ток задания",
"s_name": "ВС:I рз",
"metric": "кА",
"mul": 0.1,
"bytes": []
}
]
}
}

View File

@ -0,0 +1 @@
{}

View File

@ -0,0 +1,16 @@
{
"servers": [
{
"name": "STP 1",
"ip": "10.10.45.151",
"port": 1070,
"dir": "Y:\\data"
},
{
"name": "STP 2",
"ip": "10.10.45.152",
"port": 1070,
"dir": "Z:\\data"
}
]
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,249 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>DataClient</name>
</assembly>
<members>
<member name="T:DataClient.NETClient">
<summary>Класс для связи с СТП сервером по проботоколу TCP.</summary>
</member>
<member name="P:DataClient.NETClient.Status">
<summary>
Статус процесса выполнения запроса.
Предполагается использовать только на больших
загрузках и в ассинхронных задачах
</summary>
</member>
<member name="T:DataClient.NETClient.Code">
<summary>Коды для работы с СТП.</summary>
</member>
<member name="F:DataClient.NETClient.Code.version">
<summary>Версия.</summary>
</member>
<member name="F:DataClient.NETClient.Code.download">
<summary>Загрузка.</summary>
</member>
<member name="F:DataClient.NETClient.Code.pasp_download">
<summary>Загрузка паспорта.</summary>
</member>
<member name="F:DataClient.NETClient.Code.server_time">
<summary>Время сервера.</summary>
</member>
<member name="F:DataClient.NETClient.Code.keep_alive">
<summary>Оставаться на связи.</summary>
</member>
<member name="F:DataClient.NETClient.Code.download_nh">
<summary>Загрузка (nh).</summary>
</member>
<member name="F:DataClient.NETClient.Code.dir_browse">
<summary>Структура директории.</summary>
</member>
<member name="F:DataClient.NETClient.Code.by_name">
<summary>Поиск команды по имени.</summary>
</member>
<member name="P:DataClient.NETClient.Ip">
<summary>IP адрес СТП.</summary>
</member>
<member name="P:DataClient.NETClient.Port">
<summary>Порт СТП.</summary>
</member>
<member name="P:DataClient.NETClient.RetryCount">
<summary>Количество попыток переподключения.</summary>
</member>
<member name="P:DataClient.NETClient.RetryInterval">
<summary>Время в секундах между попытками переподключения.</summary>
</member>
<member name="M:DataClient.NETClient.#ctor">
<summary>Основной конструктор класса NetClient. Ip-адрес - 127.0.0.1; Порт - 1070;</summary>
</member>
<member name="M:DataClient.NETClient.#ctor(System.String,System.Int32)">
<summary>Конструктор класса NetClient с параметрами.</summary><param name="ip">Ip-адрес сервера.</param><param name="port">Порт сервера.</param>
</member>
<member name="M:DataClient.NETClient.ReceiveBytesFull(System.Net.Sockets.NetworkStream)">
<summary>Получение неопределенного количество байт с сервера. Количество ограничено максимальным значением типа UInt.</summary><param name="ns">Открытый сетевой поток.</param><returns>Массив байт.</returns><exception cref="T:System.InvalidOperationException">
Соединение с сервером закрыто.
</exception><exception cref="T:System.IO.IOException">
Стрим недоступен для Чтения.
</exception><exception cref="T:System.TimeoutException">
Сервер сбросил соединение.
</exception>
</member>
<member name="M:DataClient.NETClient.ReceiveBytesFixSize(System.Net.Sockets.NetworkStream,System.UInt32)">
<summary>Получение определенного количество байт с сервера.</summary><param name="ns">Открытый сетевой поток.</param><param name="size">Кол-во получаемых байт.</param><returns>Массив байт. Может быть меньше заданного количества.</returns><exception cref="T:System.ArgumentException">
Размер байт не должен равняться нулю.
</exception><exception cref="T:System.IO.IOException">
Стрим недоступен для записи.
</exception><exception cref="T:System.TimeoutException">
Сервер сбросил соединение.
</exception>
</member>
<member name="M:DataClient.NETClient.SendBytes(System.Net.Sockets.NetworkStream,System.Byte[])">
<summary>Отправка массива байт на СТП.</summary><param name="ns">Открытый сетевой поток.</param><param name="arr">Массив байт.</param><returns>Результат отправки.</returns><exception cref="T:System.ArgumentException">
Размер байт не должен равняться нулю.
</exception><exception cref="T:System.IO.IOException">
Стрим недоступен для записи.
</exception>
</member>
<member name="M:DataClient.NETClient.CreateCode(System.UInt32,System.String,System.Byte[],System.Byte[])">
<summary>Формирование массива байт на отправку.</summary><param name="code">Код комманды. Конвертируется в 4 байта. (0x00 0x00 0x00 0x00)</param><param name="val">Передаваемая строка.</param><param name="prefix">Байты перед передаваемой строкой.</param><param name="postfix">Байты после передаваемой строкой.</param><returns>Массив байт для отправки на СТП.</returns>
</member>
<member name="M:DataClient.NETClient.Connect">
<summary>Открытие соединения к серверу.</summary><remarks>Информирует только о подключении к серверу. Исключения опускает.</remarks><returns>Состояние подключения.</returns>
</member>
<member name="M:DataClient.NETClient.Connected">
<summary>Проверка подключения.</summary><returns>Состояние подключения.</returns>
</member>
<member name="M:DataClient.NETClient.Close">
<summary>Закрыть подключение.</summary>
</member>
<member name="M:DataClient.NETClient.SendBytes(System.Byte[])">
<summary>Отправка массива байт на СТП.</summary><param name="send">Массив байт для отправки.</param><returns>Результат отправки.</returns><exception cref="T:System.ArgumentException">
Размер байт не должен равняться нулю.
</exception><exception cref="T:System.IO.IOException">
Поток недоступен для записи.
</exception>
</member>
<member name="M:DataClient.NETClient.ReceiveBytes">
<summary>Получение неизвестного количество байт.</summary><remarks>Возвращает null, если что-то пошло не так.</remarks><returns>Массив байт.</returns>
</member>
<member name="M:DataClient.NETClient.ReceiveBytes(System.UInt32)">
<summary>Получение определенного количество байт.</summary><param name="size">Количество байт.</param><remarks>Возвращает null, если что-то пошло не так.</remarks><returns>Массив байт определенного размера. Может массив быть меньше, если в буфере не будет достаточно данных.</returns>
</member>
<member name="M:DataClient.NETClient.My_Connect">
<summary>Внутренняя функция для создания подключения.</summary><returns>Возвращает флаг необходимости закрытия соединения.</returns><exception cref="T:System.InvalidOperationException">
Не получилось соединиться с сервером.
</exception>
</member>
<member name="M:DataClient.NETClient.My_Close(System.Boolean)">
<summary>Внетренняя функция для закрытия соединения.</summary><param name="needClose">Флаг о необходимости закрыть соединение.</param>
</member>
<member name="M:DataClient.NETClient.GetFile(DataClient.NETClient.Code,System.DateTime,System.Int32,System.Int32)">
<summary>Внутренняя функция получения файлов.</summary><param name="code">Код, который будет отправлен на сервер.</param><param name="date">Дата. Из неё формируется строка в формате YYYMMDD.</param><param name="vdp">Номер печи. 00 - общецеховые параметры.</param><param name="idx">Индекс файла. От 0 до 15.</param><returns>Массив байт, соответствующий запрашиваемому файлу.</returns><exception cref="T:System.ArgumentException">
Неверный код, для получения файла.
Неверный флаг во время получения файла.
</exception><exception cref="T:System.IO.IOException">
Предыдущий запрос не закончен.
Поток недоступен для записи.
</exception><exception cref="T:System.InvalidOperationException">
Не получилось соединиться с сервером.
</exception>
</member>
<member name="M:DataClient.NETClient.Full_Download_NH(System.DateTime,System.Int32,System.Int32)">
<summary>Получение файла данных (байтами) с СТП.</summary><param name="date">Дата. Из неё формируется строка в формате YYYMMDD.</param><param name="vdp">Номер печи. 00 - общецеховые параметры.</param><param name="idx">Индекс файла. От 0 до 15.</param><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Обработанный массив байт.</returns><exception cref="T:System.ArgumentException">
Неверный код, для получения файла.
Неверный флаг во время получения файла.
</exception><exception cref="T:System.IO.IOException">
Предыдущий запрос не закончен.
Поток недоступен для записи.
</exception><exception cref="T:System.InvalidOperationException">
Не получилось соединиться с сервером.
</exception>
</member>
<member name="M:DataClient.NETClient.Full_Download(System.DateTime,System.Int32,System.Int32)">
<summary>Получение файла данных (байтами) с СТП.</summary><param name="date">Дата. Из неё формируется строка в формате YYYMMDD.</param><param name="vdp">Номер печи. 00 - общецеховые параметры.</param><param name="idx">Индекс файла. От 0 до 15.</param><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Обработанный массив байт.</returns><exception cref="T:System.ArgumentException">
Неверный код, для получения файла.
Неверный флаг во время получения файла.
</exception><exception cref="T:System.IO.IOException">
Предыдущий запрос не закончен.
Поток недоступен для записи.
</exception><exception cref="T:System.InvalidOperationException">
Не получилось соединиться с сервером.
</exception>
</member>
<member name="M:DataClient.NETClient.Full_By_Name(System.String)">
<summary>Получение файла данных (байтами) с СТП.</summary><param name="val">Название команды.</param><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Массив байт, соответствующий этой команде. Может вернуть null.</returns><exception cref="T:System.ArgumentException">
Неверный флаг во время получения файла.
</exception><exception cref="T:System.IO.IOException">
Предыдущий запрос не закончен.
Поток недоступен для записи.
</exception><exception cref="T:System.InvalidOperationException">
Не получилось соединиться с сервером.
</exception>
</member>
<member name="M:DataClient.NETClient.Full_Dir_Browse(System.String)">
<summary>Получение структуры файлов и папок в запрашиваемой директории.</summary><param name="dir">Путь, структуру которого надо отобразить.</param><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Массив строк. Полные пути к файлам и папкам. Может вернуть null.</returns><exception cref="T:System.ArgumentException">
Неверный флаг окончания строки.
Неверный флаг во время получения файла.
</exception><exception cref="T:System.IO.IOException">
Предыдущий запрос не закончен.
Поток недоступен для записи.
</exception><exception cref="T:System.InvalidOperationException">
Не получилось соединиться с сервером.
</exception>
</member>
<member name="M:DataClient.NETClient.Full_Server_Time">
<summary>Получение текущее время на сервере.</summary><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>Текущее время на сервере.</returns><exception cref="T:System.ArgumentException">
Неверный флаг окончания строки.
Неверный флаг во время получения файла.
</exception><exception cref="T:System.IO.IOException">
Предыдущий запрос не закончен.
Поток недоступен для записи.
</exception><exception cref="T:System.InvalidOperationException">
Не получилось соединиться с сервером.
</exception>
</member>
<member name="M:DataClient.NETClient.Full_Version">
<summary>Получение текущую версию сервера.</summary><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><returns>строку с названием версии сервера.</returns><exception cref="T:System.ArgumentException">
Неверный флаг окончания строки.
Неверный флаг во время получения файла.
</exception><exception cref="T:System.IO.IOException">
Предыдущий запрос не закончен.
Поток недоступен для записи.
</exception><exception cref="T:System.InvalidOperationException">
Не получилось соединиться с сервером.
</exception>
</member>
<member name="M:DataClient.NETClient.Full_Keep_Alive">
<summary>Отправка команды для поддержания соединения.</summary><remarks>Выполняет автоподключение, если оно не установлено. Не все ошибки описаны в документации.</remarks><exception cref="T:System.IO.IOException">
Предыдущий запрос не закончен.
Поток недоступен для записи.
</exception><exception cref="T:System.InvalidOperationException">
Не получилось соединиться с сервером.
</exception>
</member>
<member name="T:DataClient.STPClient">
<summary>Класс для связи с СТП. Содержит все инструменты, для получения данных.</summary>
</member>
<member name="M:DataClient.STPClient.Config">
<summary>Чтение конфигурационнного файла и установка параметров по умолчанию.</summary>
</member>
<member name="P:DataClient.STPClient.UseServer">
<summary>Номер сервера, используемого по умолчанию.</summary>
</member>
<member name="P:DataClient.STPClient.ListServers">
<summary>Массив серверов, инициализированных в экземпляре класса.</summary>
</member>
<member name="P:DataClient.STPClient.Server">
<summary> Текущий рабочий сервер </summary>
</member>
<member name="M:DataClient.STPClient.CheckDataServer(System.String,System.Int32,System.String)">
<summary>
Проверка параметров сервера.
</summary>
<param name="ip">Ip адрес сервера СТП.</param>
<param name="port">Порт сервера СТП.</param>
<param name="dir">Путь к архивным данным.</param>
<returns>Результат проверки.</returns>
</member>
<member name="M:DataClient.STPClient.AddServer(System.String,System.String,System.Int32,System.String)">
<summary>Добавление сервера в список серверов.</summary>
<param name="name">Название сервера</param>
<param name="ip">IP адресс сервера.</param>
<param name="port">Порт сервера.</param>
<param name="dir">Путь к архиву.</param>
<returns>Результат выполнения функции.</returns>
</member>
<member name="M:DataClient.STPClient.RemoveServer(System.Int32)">
<summary>Удаление сервера из списка серверов по его номеру.</summary>
<param name="id">Номер сервера в списке серверов.</param>
<returns>Результат выполнения функции.</returns>
</member>
<member name="M:DataClient.STPClient.#ctor">
<summary>Создание экземпляра класса.</summary>
</member>
<member name="M:DataClient.STPClient.#ctor(System.String)">
<summary>Создание экземпляра класса с указанием конфигурационного файла.</summary>
<param name="confDir">Путь к файлу конфигурации.</param>
</member>
</members>
</doc>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,9 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
}
}

View File

@ -0,0 +1,10 @@
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,10 @@
{
"runtimeOptions": {
"additionalProbingPaths": [
"C:\\Users\\Admin\\.dotnet\\store\\|arch|\\|tfm|",
"C:\\Users\\Admin\\.nuget\\packages",
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages",
"C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet"
]
}
}

View File

@ -0,0 +1,13 @@
{
"runtimeOptions": {
"tfm": "net5.0",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "5.0.0"
},
"configProperties": {
"System.GC.Server": true,
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
}
}
}

View File

@ -0,0 +1,3 @@
{
"red" : "#ff0000"
}

View File

@ -0,0 +1,87 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": {
"parent": [ "default" ],
"struct": [
{
"index": 2,
"name": "Âîäà êàìåðû (ýêñï.)",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 2
}
]
}
]
},
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": {
"parent": [ "default" ],
"struct": [
{
"index": 1,
"name": "Âîäà øòîêà (ýêñï.)",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 1
}
]
}
]
},
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

View File

@ -0,0 +1,823 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Дискрет №0",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 46,
"bit_index": 0
}
]
},
{
"index": 1,
"name": "P1 воды кристаллизатора",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 1
}
]
},
{
"index": 2,
"name": "P2 воды кристаллизатора",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 2
}
]
},
{
"index": 3,
"name": "Вода камеры",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 3
}
]
},
{
"index": 4,
"name": "Вода штока",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 46,
"bit_index": 4
}
]
},
{
"index": 5,
"name": "Дверь - А",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 5
}
]
},
{
"index": 6,
"name": "Дверь - Б",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 6
}
]
},
{
"index": 7,
"name": "Дверь - В",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 46,
"bit_index": 7
}
]
},
{
"index": 8,
"name": "Дверь - Г",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 0
}
]
},
{
"index": 9,
"name": "Дверь - Д",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 1
}
]
},
{
"index": 10,
"name": "Люк",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 2
}
]
},
{
"index": 11,
"name": "Пенал",
"state_struct": "open_close_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 3
}
]
},
{
"index": 12,
"name": "Упоры",
"state_struct": "out_in_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 4
}
]
},
{
"index": 13,
"name": "Прижимы",
"state_struct": "spinn_clamp_ok",
"bits": [
{
"byte_index": 47,
"bit_index": 5
}
]
},
{
"index": 14,
"name": "Вакуумный выключатель",
"state_struct": "none_on_off_err_3_4",
"bits": [
{
"byte_index": 47,
"bit_index": 6
},
{
"byte_index": 47,
"bit_index": 7
}
]
},
{
"index": 15,
"skip": true
},
{
"index": 16,
"name": "\"Автоматика\"",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 0
},
{
"byte_index": 49,
"bit_index": 7
}
]
},
{
"index": 31,
"skip": true
},
{
"index": 17,
"name": "БПС",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 1
},
{
"byte_index": 50,
"bit_index": 0
}
]
},
{
"index": 32,
"skip": true
},
{
"index": 18,
"name": "Соленоид",
"state_struct": "none_err_const_puls_1_2",
"bits": [
{
"byte_index": 48,
"bit_index": 2
},
{
"byte_index": 48,
"bit_index": 3
}
]
},
{
"index": 19,
"skip": true
},
{
"index": 20,
"name": "ARPW",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 4
},
{
"byte_index": 48,
"bit_index": 7
}
]
},
{
"index": 23,
"skip": true
},
{
"index": 21,
"name": "ДВН",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 48,
"bit_index": 5
},
{
"byte_index": 49,
"bit_index": 3
}
]
},
{
"index": 27,
"skip": true
},
{
"index": 22,
"name": "SZO",
"state_struct": "off_on",
"bits": [
{
"byte_index": 48,
"bit_index": 6
}
]
},
{
"index": 24,
"name": "ДУ-260",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 0
},
{
"byte_index": 49,
"bit_index": 1
}
]
},
{
"index": 25,
"skip": true
},
{
"index": 26,
"name": "ДУ-100",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 2
},
{
"byte_index": 50,
"bit_index": 2
}
]
},
{
"index": 34,
"skip": true
},
{
"index": 28,
"name": "ДУ-32",
"state_struct": "none_open_close_err_4",
"bits": [
{
"byte_index": 49,
"bit_index": 4
},
{
"byte_index": 50,
"bit_index": 3
}
]
},
{
"index": 35,
"skip": true
},
{
"index": 29,
"name": "Шток вверху",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 49,
"bit_index": 5
}
]
},
{
"index": 30,
"name": "Шток внизу",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 49,
"bit_index": 6
}
]
},
{
"index": 33,
"name": "Плохой вакуум",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 50,
"bit_index": 1
}
]
},
{
"index": 36,
"name": "Напряжение аварийной сигнализации",
"state_struct": "no_yes_ok",
"bits": [
{
"byte_index": 50,
"bit_index": 4
}
]
},
{
"index": 37,
"name": "Взрывной клапан",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 50,
"bit_index": 5
}
]
},
{
"index": 38,
"name": "Ключ УП в положении \"Автоматика\"",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 50,
"bit_index": 6
}
]
},
{
"index": 39,
"name": "off_on_err",
"state_struct": "Реле \"Авария источника\"",
"bits": [
{
"byte_index": 50,
"bit_index": 7
}
]
},
{
"index": 40,
"name": "Сброс звуковой сигнализации",
"state_struct": "spinn_press",
"bits": [
{
"byte_index": 51,
"bit_index": 0
}
]
},
{
"index": 41,
"name": "Вакуум по ЭКМВ",
"state_struct": "have_no_err",
"bits": [
{
"byte_index": 51,
"bit_index": 1
}
]
},
{
"index": 42,
"name": "Реле \"Имитация тока дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 2
}
]
},
{
"index": 43,
"name": "Реле \"АУ током дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 3
}
]
},
{
"index": 44,
"name": "Реле \"Имитация напряжения дуги\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 4
}
]
},
{
"index": 45,
"name": "Реле \"Имитация вакуума печи\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 5
}
]
},
{
"index": 46,
"name": "Реле \"Имитация T воды кристаллизатора\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 6
}
]
},
{
"index": 47,
"name": "Реле \"Имитация T воды вакуумкамеры\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 51,
"bit_index": 7
}
]
},
{
"index": 48,
"name": "Реле \"Имитация T воды штока\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 0
}
]
},
{
"index": 49,
"name": "Реле 1 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 1
}
]
},
{
"index": 50,
"name": "Реле 2 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 2
}
]
},
{
"index": 51,
"name": "Реле 3 \"Измерение изоляции\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 3
}
]
},
{
"index": 52,
"name": "Реле 4 \"Контроль метрологии\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 4
}
]
},
{
"index": 53,
"name": "Реле 5 \"Измерение изоляции (соленоид)\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 5
}
]
},
{
"index": 54,
"name": "Реле \"АУ штоком\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 6
}
]
},
{
"index": 55,
"name": "Реле \"Включение Uкалибровки\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 52,
"bit_index": 7
}
]
},
{
"index": 56,
"name": "Реле \"Движение штока вверх\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 53,
"bit_index": 0
}
]
},
{
"index": 57,
"name": "УП в положении КЗ",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 53,
"bit_index": 1
}
]
},
{
"index": 58,
"name": "Нет питания, включено \"резервное\" UPS",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 2
}
]
},
{
"index": 59,
"name": "Вода подставки",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 3
}
]
},
{
"index": 60,
"name": "Реле \"Разрешение на вакуумирование печи\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 53,
"bit_index": 4
}
]
},
{
"index": 61,
"name": "Низкий заряд аккумулятора UPS",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 53,
"bit_index": 5
}
]
},
{
"index": 62,
"name": "КВ рамы",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 53,
"bit_index": 6
}
]
},
{
"index": 63,
"name": "Источник: +24В",
"state_struct": "no_have_ok",
"bits": [
{
"byte_index": 53,
"bit_index": 7
}
]
},
{
"index": 64,
"name": "Реле \"Движение штока вниз\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 54,
"bit_index": 0
}
]
},
{
"index": 65,
"name": "Проверка источника",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 54,
"bit_index": 1
}
]
},
{
"index": 66,
"name": "Станция",
"state_struct": "none_on_off_err_4",
"bits": [
{
"byte_index": 54,
"bit_index": 2
},
{
"byte_index": 54,
"bit_index": 3
}
]
},
{
"index": 67,
"skip": true
},
{
"index": 68,
"name": "Постоянное U=220В",
"state_struct": "no_have",
"bits": [
{
"byte_index": 54,
"bit_index": 4
}
]
},
{
"index": 69,
"name": "Источник готов",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 54,
"bit_index": 5
}
]
},
{
"index": 70,
"name": "Авария привода",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 6
}
]
},
{
"index": 71,
"name": "Реле \"Напуск газа в печь\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 54,
"bit_index": 7
}
]
},
{
"index": 74,
"name": "Реле \"АУ током дуги ВДП №46\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 2
}
]
},
{
"index": 76,
"name": "Готовность привода",
"state_struct": "no_have_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 4
}
]
},
{
"index": 78,
"name": "Реле \"Авария источника ВДП №46\"",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 6
}
]
},
{
"index": 79,
"name": "Клапан подачи аргона",
"state_struct": "close_open_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 7
}
]
},
{
"index": 95,
"name": "Разрешение на вкл. вакуумного выключателя",
"state_struct": "off_on",
"bits": [
{
"byte_index": 57,
"bit_index": 7
}
]
}
]
}
}

View File

@ -0,0 +1,127 @@
{
"power_new": {
"struct": [
{
"index": 39,
"name": "Àâàðèéíàÿ ñèãíàëèçàöèÿ èñòî÷íèêà",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 50,
"bit_index": 7
}
]
},
{
"index": 63,
"name": "Ñòàíöèÿ âêëþ÷åíà",
"state_struct": "no_yes",
"bits": [
{
"byte_index": 53,
"bit_index": 7
}
]
},
{
"index": 66,
"name": "Ïðîáîé òèðèñòîðà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 2
}
]
},
{
"index": 67,
"name": "Ìàêñ. òîê âûïðÿìèòåëüíîãî áëîêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 3
}
]
},
{
"index": 68,
"name": "Ïåðåãðóçêà âûïðÿìèòåëüíîãî áëîêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 54,
"bit_index": 4
}
]
},
{
"index": 69,
"name": "Ðåëå ìàêñèìàëüíîãî òîêà",
"state_struct": "off_on_err",
"bits": [
{
"byte_index": 54,
"bit_index": 5
}
]
},
{
"index": 72,
"name": "Íåèñïðàâíîñòü ÓÇÏ",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 0
}
]
},
{
"index": 73,
"name": "Íåèñïðàâíîñòü èñòî÷íèêà ïèòàíèÿ",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 1
}
]
},
{
"index": 74,
"name": "Ãîòîâíîñòü èñòî÷íèêà",
"state_struct": "no_yes_ok",
"bits": [
{
"byte_index": 55,
"bit_index": 2
}
]
},
{
"index": 75,
"name": "Ïåðåãðåâ èñòî÷íèêà",
"state_struct": "no_yes_err",
"bits": [
{
"byte_index": 55,
"bit_index": 3
}
]
},
{
"index": 77,
"name": "Ïðåäóïðåäèòåëüíàÿ ñèãíàëèçàöèÿ èñòî÷íèêà",
"state_struct": "off_on",
"bits": [
{
"byte_index": 55,
"bit_index": 5
}
]
}
]
}
}

View File

@ -0,0 +1,13 @@
{
"кА": false,
"В": false,
"А": false,
"гр.С": false,
"мм": false,
"мкм.рт.ст": true,
"м^3/ч": false,
"кгс/см^2": false,
"мм.рт.ст": true,
"МВт": false,
"Гц": true
}

View File

@ -0,0 +1,56 @@
{
"01": { "parent": [ "default" ] },
"02": { "parent": [ "default" ] },
"03": { "parent": [ "default" ] },
"04": { "parent": [ "default" ] },
"05": { "parent": [ "default" ] },
"06": { "parent": [ "default" ] },
"07": { "parent": [ "default" ] },
"08": { "parent": [ "default" ] },
"09": { "parent": [ "default" ] },
"10": { "parent": [ "default" ] },
"11": { "parent": [ "default" ] },
"12": { "parent": [ "default" ] },
"13": { "parent": [ "default" ] },
"14": { "parent": [ "default" ] },
"15": { "parent": [ "default" ] },
"16": { "parent": [ "default" ] },
"17": { "parent": [ "default" ] },
"18": { "parent": [ "default" ] },
"19": { "parent": [ "default" ] },
"20": { "parent": [ "default" ] },
"21": { "parent": [ "default" ] },
"22": { "parent": [ "default" ] },
"23": { "parent": [ "default" ] },
"24": { "parent": [ "default" ] },
"25": { "parent": [ "default" ] },
"26": { "parent": [ "default" ] },
"27": { "parent": [ "default" ] },
"28": { "parent": [ "default" ] },
"29": { "parent": [ "default" ] },
"30": { "parent": [ "default" ] },
"31": { "parent": [ "default" ] },
"32": { "parent": [ "default" ] },
"33": { "parent": [ "default" ] },
"34": { "parent": [ "default" ] },
"35": { "parent": [ "default" ] },
"36": { "parent": [ "default" ] },
"37": { "parent": [ "default" ] },
"38": { "parent": [ "default" ] },
"39": { "parent": [ "default" ] },
"40": { "parent": [ "default" ] },
"41": { "parent": [ "default" ] },
"42": { "parent": [ "default" ] },
"43": { "parent": [ "default" ] },
"44": { "parent": [ "default" ] },
"45": { "parent": [ "default" ] },
"46": { "parent": [ "default" ] },
"47": { "parent": [ "default" ] },
"48": { "parent": [ "default" ] },
"49": { "parent": [ "default" ] },
"50": { "parent": [ "default" ] },
"91": { "parent": [ "default" ] },
"92": { "parent": [ "default" ] },
"93": { "parent": [ "default" ] },
"94": { "parent": [ "default" ] }
}

View File

@ -0,0 +1,356 @@
{
"default": {
"struct": [
{
"index": 0,
"name": "Alarm ! Zero signal !",
"state_struct": "protect_1"
},
{
"index":1,
"name": "Шток внизу !",
"state_struct": "protect_1"
},
{
"index":2,
"name": "Шток вверху !",
"state_struct": "protect_1"
},
{
"index": 3,
"name": "Uдуги > Uмакс !",
"state_struct": "protect_1"
},
{
"index": 4,
"name": "Uдуги < Uмин !",
"state_struct": "protect_1"
},
{
"index": 5,
"name": "Qводы кристаллизатора !",
"state_struct": "protect_1"
},
{
"index": 6,
"name": "P2 воды кристаллизатора ЭКМ отметка -5м !",
"state_struct": "protect_1"
},
{
"index": 7,
"name": "P1 воды кристаллизатора ЭКМ отметка +1.5м !",
"state_struct": "protect_1"
},
{
"index": 8,
"name": "P1 воды кристаллизатора ЭКМ отметка +1.5м !",
"state_struct": "protect_1"
},
{
"index": 9,
"name": "Вода штока !",
"state_struct": "protect_1"
},
{
"index":10,
"name": "tводы штока !",
"state_struct": "protect_1"
},
{
"index":11,
"name": "Вода вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index":12,
"name": "tводы вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index":13,
"name": "Ухудшение вакуума !",
"state_struct": "protect_1"
},
{
"index": 14,
"name": "Нет готовности к токовой операции!",
"state_struct": "protect_1"
},
{
"index": 15,
"name": "Дверь А открыта !",
"state_struct": "protect_1"
},
{
"index": 16,
"name": "Дверь Б открыта !",
"state_struct": "protect_1"
},
{
"index": 17,
"name": "Дверь В открыта !",
"state_struct": "protect_1"
},
{
"index": 18,
"name": "Дверь Г открыта !",
"state_struct": "protect_1"
},
{
"index": 19,
"name": "Дверь Д открыта !",
"state_struct": "protect_1"
},
{
"index": 20,
"name": "Прижимы !",
"state_struct": "protect_1"
},
{
"index": 21,
"name": "Упоры !",
"state_struct": "protect_1"
},
{
"index": 22,
"name": "Люк открыт !",
"state_struct": "protect_1"
},
{
"index": 23,
"name": "Пенал открыт !",
"state_struct": "protect_1"
},
{
"index": 24,
"name": "Вода подставки !",
"state_struct": "protect_1"
},
{
"index": 25,
"name": "Нет U аварийной сигнализации !",
"state_struct": "protect_1"
},
{
"index": 26,
"name": "Плохой вакуум !",
"state_struct": "protect_1"
},
{
"index": 27,
"name": "tводы подставки !",
"state_struct": "protect_1"
},
{
"index": 28,
"name": "Давление газа в печи выше атмосферного !",
"state_struct": "protect_1"
},
{
"index": 29,
"name": "Вода фланца вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index": 30,
"name": "Отключение ВВ!",
"state_struct": "protect_1"
},
{
"index": 31,
"name": "tводы фланца вакуум-камеры !",
"state_struct": "protect_1"
},
{
"index": 32,
"name": "P воды поддона !",
"state_struct": "protect_1"
},
{
"index": 33,
"name": "Отсутствует связь с сервером 1 %s!*3",
"state_struct": "protect_1"
},
{
"index": 34,
"name": "Отсутствует связь с сервером 2 %s!*3",
"state_struct": "protect_1"
},
{
"index": 35,
"name": "Отсутствует связь с контроллером ГМП !",
"state_struct": "protect_1"
},
{
"index": 36,
"name": "Неисправность в работе ARPW !",
"state_struct": "protect_1"
},
{
"index": 37,
"name": "Неисправность в работе ДВН !",
"state_struct": "protect_1"
},
{
"index": 38,
"name": "Неисправность в работе ВВ !",
"state_struct": "protect_1"
},
{
"index": 39,
"name": "Неисправность в работе ДУ-260 !",
"state_struct": "protect_1"
},
{
"index": 40,
"name": "Неисправность в работе ДУ-100 !",
"state_struct": "protect_1"
},
{
"index": 41,
"name": "Неисправность в работе ДУ-32 !",
"state_struct": "protect_1"
},
{
"index": 43,
"name": "Неисправность в работе БПС !",
"state_struct": "protect_1"
},
{
"index": 44,
"name": "Неисправность в режиме работы соленоида !",
"state_struct": "protect_1"
},
{
"index": 45,
"name": "Нет питания сети !",
"state_struct": "protect_1"
},
{
"index": 46,
"name": "КВ рамы",
"state_struct": "protect_1"
},
{
"index": 48,
"name": "Нет сигнала датчика (МЕТРАН отм.+1.5м) !",
"state_struct": "protect_1"
},
{
"index": 49,
"name": "БПС ГМП отключен!",
"state_struct": "protect_1"
},
{
"index": 50,
"name": "Неисправность источника питания ВДП !",
"state_struct": "protect_1"
},
{
"index": 51,
"name": "Нет принимаемых данных !",
"state_struct": "protect_1"
},
{
"index": 52,
"name": "Разрыв дуги !",
"state_struct": "protect_1"
},
{
"index": 53,
"name": "Нет готовности привода!",
"state_struct": "protect_1"
},
{
"index": 54,
"name": "Alarm ! Signal A1_22 is set.",
"state_struct": "protect_1"
},
{
"index": 55,
"name": "Короткое замыкание !",
"state_struct": "protect_1"
},
{
"index": 56,
"name": "Переключатель УП не в положении АВТ !",
"state_struct": "protect_1"
},
{
"index": 57,
"name": "Проверить перевод разьединителей печей!",
"state_struct": "protect_1"
},
{
"index": 58,
"name": "Снижение протока воды штока!",
"state_struct": "protect_1"
},
{
"index": 59,
"name": "Снижение протока воды камеры!",
"state_struct": "protect_1"
},
{
"index": 60,
"name": "Снижение протока воды фланца!",
"state_struct": "protect_1"
},
{
"index": 61,
"name": "Запрет зажигания дуги по времени вакуумирования!",
"state_struct": "protect_1"
},
{
"index": 62,
"name": "Отсутствует ток соленоида !",
"state_struct": "protect_1"
},
{
"index": 63,
"name": "Отсутствует перемещение штока !",
"state_struct": "protect_1"
},
{
"index": 64,
"name": "Отсутствует перемещение штока > 15 минут!",
"state_struct": "protect_1"
},
{
"index": 65,
"name": "Запрет на включение вакуумных насосов !",
"state_struct": "protect_1"
},
{
"index": 67,
"name": "ВДП развакуумирована !",
"state_struct": "protect_1"
},
{
"index": 70,
"name": "Смещение начала архивации %s !*1",
"state_struct": "protect_1"
},
{
"index": 71,
"name": "Смещение конца архивации %s !*1",
"state_struct": "protect_1"
},
{
"index": 74,
"name": "",
"state_struct": "protect_1"
},
{
"index": 75,
"name": "Alarm ! Signal A1_43 is set.",
"state_struct": "protect_1"
},
{
"index": 76,
"name": "Alarm ! Signal A1_44 is set.",
"state_struct": "protect_1"
}
]
}
}

View File

@ -0,0 +1,265 @@
{
"protect_1": [
{
"index": 0,
"name": "Отсутствует",
"color": "#00ff00"
},
{
"index": 1,
"name": "Сработало",
"color": "#ffff00"
},
{
"index": 2,
"name": "Сброс тока",
"color": "#ff0000"
}
],
"no_yes_err": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Да",
"color": "#ff0000"
}
],
"no_yes_ok": [
{
"index": 0,
"name": "Нет",
"color": "#ff0000"
},
{
"index": 1,
"name": "Да",
"color": "#00ff00"
}
],
"no_yes": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Да",
"color": "#00ff00"
}
],
"have_no_err": [
{
"index": 0,
"name": "Есть",
"color": "#00ff00"
},
{
"index": 1,
"name": "Нет",
"color": "#ff0000"
}
],
"no_have_ok": [
{
"index": 0,
"name": "Нет",
"color": "#ff0000"
},
{
"index": 1,
"name": "Есть",
"color": "#00ff00"
}
],
"no_have": [
{
"index": 0,
"name": "Нет",
"color": "#00ff00"
},
{
"index": 1,
"name": "Есть",
"color": "#00ff00"
}
],
"off_on_err": [
{
"index": 0,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 1,
"name": "Вкл",
"color": "#ff0000"
}
],
"off_on": [
{
"index": 0,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
}
],
"open_close_ok": [
{
"index": 0,
"name": "Откр",
"color": "#ff0000"
},
{
"index": 1,
"name": "Закр",
"color": "#00ff00"
}
],
"close_open_ok": [
{
"index": 0,
"name": "Закр",
"color": "#ff0000"
},
{
"index": 1,
"name": "Откр",
"color": "#00ff00"
}
],
"out_in_ok": [
{
"index": 0,
"name": "Не введ",
"color": "#ff0000"
},
{
"index": 1,
"name": "Введ",
"color": "#00ff00"
}
],
"spinn_clamp_ok": [
{
"index": 0,
"name": "Отж",
"color": "#ff0000"
},
{
"index": 1,
"name": "Приж",
"color": "#00ff00"
}
],
"spinn_press": [
{
"index": 0,
"name": "Отж",
"color": "#00ff00"
},
{
"index": 1,
"name": "Наж",
"color": "#00ff00"
}
],
"none_on_off_err_3_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
},
{
"index": 2,
"name": "Выкл",
"color": "#ff0000"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
],
"none_on_off_err_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Вкл",
"color": "#00ff00"
},
{
"index": 2,
"name": "Выкл",
"color": "#00ff00"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
],
"none_err_const_puls_1_2": [
{
"index": 0,
"name": "Авария",
"color": "#ff0000"
},
{
"index": 1,
"name": "Авария",
"color": "#ff0000"
},
{
"index": 2,
"name": "Пост",
"color": "#00ff00"
},
{
"index": 3,
"name": "Пульс",
"color": "#00ff00"
}
],
"none_open_close_err_4": [
{
"index": 0,
"name": "Неопр",
"color": "#ffffff"
},
{
"index": 1,
"name": "Откр",
"color": "#00ff00"
},
{
"index": 2,
"name": "Закр",
"color": "#00ff00"
},
{
"index": 3,
"name": "Авария",
"color": "#ff0000"
}
]
}

View File

@ -0,0 +1,94 @@
{
"tech_cycle_conf": [
{
"index": -1,
"name": "Конец технологического цикла (ручной)",
"color": "#00ffff"
},
{
"index": 0,
"name": "Конец технологического цикла",
"color": "#00ffff"
},
{
"index": 1,
"name": "Выгрузка-загрузка",
"color": "#00ffff"
},
{
"index": 2,
"name": "Вакуумирование на приварку",
"color": "#0000ff"
},
{
"index": 5,
"name": "Приварка",
"color": "#ff0000"
},
{
"index": 6,
"name": "Охлаждение приварки",
"color": "#00ff00"
},
{
"index": 7,
"name": "Осмотр приварки",
"color": "#00ffff"
},
{
"index": 8,
"name": "Вакуумирование на плавку",
"color": "#0000ff"
},
{
"index": 9,
"name": "Разведение ванны",
"color": "#8500b6"
},
{
"index": 10,
"name": "Плавка (основной режим)",
"color": "#ff0000"
},
{
"index": 11,
"name": "ВУР",
"color": "#ff00ff"
},
{
"index": 12,
"name": "Охлаждение слитка",
"color": "#00ff00"
},
{
"index": 13,
"name": "Выгрузка комплекта",
"color": "#00ffff"
},
{
"index": 14,
"name": "Вакуумирование на оплавление",
"color": "#0000ff"
},
{
"index": 15,
"name": "Оплавление",
"color": "#ff0000"
},
{
"index": 16,
"name": "Охлаждение оплавыша",
"color": "#00ff00"
},
{
"index": 17,
"name": "Слив металла",
"color": "#8500b6"
},
{
"index": 25,
"name": "Проверка защит",
"color": "#00ffff"
}
]
}

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