forked from syndrome5/KpOpcUA
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathKpOpcUAView.cs
152 lines (132 loc) · 5.23 KB
/
KpOpcUAView.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/*
* Made by Syndrome5 - 2018
*/
using Scada.Comm.Devices.KpOpcUA;
using Scada.Data.Configuration;
using System;
using System.Collections.Generic;
using System.IO;
namespace Scada.Comm.Devices
{
/// <summary>
/// Работа с пользовательским интерфейсом КП
/// </summary>
public class KpOpcUAView : KPView
{
/// <summary>
/// Версия библиотеки КП
/// </summary>
internal const string KpVersion = "1.0.0.0";
/// <summary>
/// Конструктор для общей настройки библиотеки КП
/// </summary>
public KpOpcUAView()
: this(0)
{
}
/// <summary>
/// Конструктор для настройки конкретного КП
/// </summary>
public KpOpcUAView(int number)
: base(number)
{
CanShowProps = number > 0;
}
/// <summary>
/// Описание библиотеки КП
/// </summary>
public override string KPDescr
{
get
{
return Localization.UseRussian ?
"Взаимодействие с контроллерами по спецификации OPC UA.\n\n" +
"Команды ТУ:\n" +
"определяются конфигурацией КП (стандартные и бинарные)." :
"Interacting with controllers using OPC UA specification.\n\n" +
"Commands:\n" +
"defined by device configuration (standard or binary).";
}
}
/// <summary>
/// Получить версию библиотеки КП
/// </summary>
public override string Version
{
get
{
return KpVersion;
}
}
/// <summary>
/// Получить прототипы каналов КП по умолчанию
/// </summary>
public override KPCnlPrototypes DefaultCnls
{
get
{
// получение имени файла конфигурации КП
string fileName = Config.GetFileName(AppDirs.ConfigDir, Number);
if (!File.Exists(fileName))
return null;
// загрузка конфигурации КП
string errMsg;
Config config = new Config();
if (!config.Load(fileName, out errMsg))
throw new Exception(errMsg);
// создание прототипов каналов КП
KPCnlPrototypes prototypes = new KPCnlPrototypes();
List<InCnlPrototype> inCnls = prototypes.InCnls;
List<CtrlCnlPrototype> ctrlCnls = prototypes.CtrlCnls;
// создание прототипов входных каналов
foreach (Config.DataGroup dataGroup in config.DataGroups)
{
foreach (Config.DataItem dataItem in dataGroup.DataItems)
{
/*string tagNamePrefix = string.IsNullOrEmpty(dataItem.Name) ?
(Localization.UseRussian ? "Безымянный тег" : "Unnamed tag") : dataItem.Name;
int tagCntByItem = dataItem.IsArray && dataItem.ArrayLen > 0 ? dataItem.ArrayLen : 1;
for (int k = 0; k < tagCntByItem; k++)
{
if (dataItem.CnlNum <= 0)
{
string tagName = dataItem.IsArray ? tagNamePrefix + "[" + k + "]" : tagNamePrefix;
inCnls.Add(new InCnlPrototype(tagName, BaseValues.CnlTypes.TI) { Signal = signal });
}
signal++;
} TODO*/
}
}
// создание прототипов каналов управления
foreach (Config.Command cmd in config.Commands)
{
bool isArray = cmd.TypeName.EndsWith("[]", StringComparison.OrdinalIgnoreCase);
ctrlCnls.Add(new CtrlCnlPrototype(cmd.ItemName,
isArray ? BaseValues.CmdTypes.Binary : BaseValues.CmdTypes.Standard) { CmdNum = cmd.CmdNum });
}
return prototypes;
}
}
/// <summary>
/// Получить параметры опроса КП по умолчанию
/// </summary>
public override KPReqParams DefaultReqParams
{
get
{
return KPReqParams.Zero;
}
}
/// <summary>
/// Отобразить свойства КП
/// </summary>
public override void ShowProps()
{
FrmConfig form = new FrmConfig();
form.ConfigDir = AppDirs.ConfigDir;
form.LangDir = AppDirs.LangDir;
form.KPNum = Number;
form.ShowDialog();
}
}
}