From 0a5066397db8e993dfe226f297acabd3935c5620 Mon Sep 17 00:00:00 2001 From: 2mik Date: Tue, 24 Oct 2017 16:36:39 +0300 Subject: [PATCH 01/61] ScadaComm: UDP channel fixes --- .../ScadaCommCommon/Channels/CommUdpLogic.cs | 82 ++++++++++++------- .../ScadaCommCommon/Channels/UdpConnection.cs | 58 +++++++++++-- ScadaComm/ScadaCommCommon/CommUtils.cs | 2 +- .../version-history/communicator-history.html | 5 +- 4 files changed, 108 insertions(+), 39 deletions(-) diff --git a/ScadaComm/ScadaCommCommon/Channels/CommUdpLogic.cs b/ScadaComm/ScadaCommCommon/Channels/CommUdpLogic.cs index b6be586da..71a45db42 100644 --- a/ScadaComm/ScadaCommCommon/Channels/CommUdpLogic.cs +++ b/ScadaComm/ScadaCommCommon/Channels/CommUdpLogic.cs @@ -175,7 +175,19 @@ public override OperatingBehaviors Behavior /// protected void StartUdpReceive() { - udpConn.UdpClient.BeginReceive(new AsyncCallback(UdpReceiveCallback), null); + try + { + if (!udpConn.Connected) + udpConn.Renew(); + + udpConn.UdpClient.BeginReceive(new AsyncCallback(UdpReceiveCallback), null); + } + catch (Exception ex) + { + WriteToLog(string.Format(Localization.UseRussian ? + "Ошибка при запуске приёма данных: {0}" : + "Error starting to receive data: {0}", ex.Message)); + } } /// @@ -183,33 +195,37 @@ protected void StartUdpReceive() /// protected void UdpReceiveCallback(IAsyncResult ar) { - // приём данных - byte[] buf; - try - { - IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0); - buf = udpConn.UdpClient.EndReceive(ar, ref remoteEP); - udpConn.RemoteAddress = remoteEP.Address.ToString(); - udpConn.RemotePort = remoteEP.Port; - WriteToLog(""); - WriteToLog(string.Format(Localization.UseRussian ? - "{0} Получены данные от {1}:{2}" : - "{0} Data received from {1}:{2}", - CommUtils.GetNowDT(), udpConn.RemoteAddress, udpConn.RemotePort)); + // приём данных, если соединение установлено + byte[] buf = null; - if (buf == null) + if (udpConn.Connected) + { + try { - WriteToLog(Localization.UseRussian ? - "Данные пусты" : - "Data is empty"); + IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0); + buf = udpConn.UdpClient.EndReceive(ar, ref remoteEP); + udpConn.RemoteAddress = remoteEP.Address.ToString(); + udpConn.RemotePort = remoteEP.Port; + + WriteToLog(""); + WriteToLog(string.Format(Localization.UseRussian ? + "{0} Получены данные от {1}:{2}" : + "{0} Data received from {1}:{2}", + CommUtils.GetNowDT(), udpConn.RemoteAddress, udpConn.RemotePort)); + + if (buf == null) + { + WriteToLog(Localization.UseRussian ? + "Данные пусты" : + "Data is empty"); + } + } + catch (Exception ex) + { + WriteToLog(string.Format(Localization.UseRussian ? + "Ошибка при приёме данных: {0}" : + "Error receiving data: {0}", ex.Message)); } - } - catch (Exception ex) - { - buf = null; - WriteToLog(string.Format(Localization.UseRussian ? - "Ошибка при приёме данных: {0}" : - "Error receiving data: {0}", ex.Message)); } if (buf != null && kpListNotEmpty) @@ -238,7 +254,8 @@ protected void UdpReceiveCallback(IAsyncResult ar) } } - StartUdpReceive(); + if (!terminated) + StartUdpReceive(); } @@ -276,6 +293,7 @@ public override void Start() "{0} Локальный UDP-порт {1} открыт" : "{0} Local UDP port {1} is open", CommUtils.GetNowDT(), settings.LocalUdpPort)); + terminated = false; udpConn = new UdpConnection(udpClient, settings.LocalUdpPort, settings.RemoteUdpPort); // установка соединения всем КП на линии связи @@ -305,7 +323,10 @@ public override void Stop() kpCallNumDict.Clear(); // закрытие соединения - udpConn.Close(); + terminated = true; + if (udpConn != null) + udpConn.Close(); + WriteToLog(""); WriteToLog(string.Format(Localization.UseRussian ? "{0} Завершение приёма данных по UDP" : @@ -318,8 +339,11 @@ public override void Stop() public override void BeforeSession(KPLogic kpLogic) { if (udpConn != null && Behavior == OperatingBehaviors.Master) - udpConn.RemoteAddress = string.IsNullOrEmpty(kpLogic.CallNum) ? - settings.RemoteIpAddress : kpLogic.CallNum; + { + udpConn.RemoteAddress = string.IsNullOrEmpty(kpLogic.CallNum) ? + settings.RemoteIpAddress : + kpLogic.CallNum; + } } /// diff --git a/ScadaComm/ScadaCommCommon/Channels/UdpConnection.cs b/ScadaComm/ScadaCommCommon/Channels/UdpConnection.cs index 282088092..c9dfebba5 100644 --- a/ScadaComm/ScadaCommCommon/Channels/UdpConnection.cs +++ b/ScadaComm/ScadaCommCommon/Channels/UdpConnection.cs @@ -20,7 +20,7 @@ * * Author : Mikhail Shiryaev * Created : 2015 - * Modified : 2015 + * Modified : 2017 */ using System; @@ -45,6 +45,10 @@ public class UdpConnection : Connection /// protected const int DatagramReceiveTimeout = 10; + /// + /// Признак, что соединение установлено + /// + protected bool connected; /// /// Буфер неполностью считанной датаграммы /// @@ -71,16 +75,23 @@ public UdpConnection(UdpClient udpClient, int localPort, int remotePort) if (udpClient == null) throw new ArgumentNullException("udpClient"); - datagramBuf = null; - bufReadPos = 0; - - UdpClient = udpClient; - UdpClient.Client.SendTimeout = DefaultWriteTimeout; LocalPort = localPort; RemotePort = remotePort; + InternalInit(udpClient); } + /// + /// Получить признак, что соединение установлено + /// + public override bool Connected + { + get + { + return connected; + } + } + /// /// Получить UDP-клиента /// @@ -97,6 +108,19 @@ public UdpConnection(UdpClient udpClient, int localPort, int remotePort) public int RemotePort { get; set; } + /// + /// Инициализировать соединение + /// + protected void InternalInit(UdpClient udpClient) + { + connected = true; + datagramBuf = null; + bufReadPos = 0; + + UdpClient = udpClient; + UdpClient.Client.SendTimeout = DefaultWriteTimeout; + } + /// /// Создать объект IPEndPoint, описывающий удалённый хост /// @@ -389,8 +413,26 @@ public override void WriteLine(string text, out string logText) /// public void Close() { - try { UdpClient.Close(); } - catch { } + try + { + UdpClient.Close(); + } + catch + { + } + finally + { + connected = false; + } + } + + /// + /// Восстановить UDP-соединение + /// + public void Renew() + { + Close(); + InternalInit(new UdpClient(LocalPort)); } /// diff --git a/ScadaComm/ScadaCommCommon/CommUtils.cs b/ScadaComm/ScadaCommCommon/CommUtils.cs index 7c95425bb..865228fc5 100644 --- a/ScadaComm/ScadaCommCommon/CommUtils.cs +++ b/ScadaComm/ScadaCommCommon/CommUtils.cs @@ -58,7 +58,7 @@ public enum ProtocolLogFormats /// /// Версия Коммуникатора /// - public const string AppVersion = "5.1.0.1"; + public const string AppVersion = "5.1.0.2"; /// /// Формат даты и времени для вывода в журнал линии связи diff --git a/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-history.html b/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-history.html index cd42a3ba0..cfa07d879 100644 --- a/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-history.html +++ b/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-history.html @@ -10,7 +10,10 @@

История приложения Коммуникатор

-
5.1.0.1 (18.10.2017)
+    
5.1.0.2 (В разработке)
+- Исправлена ошибка при разрыве соединения в канале связи UDP
+
+5.1.0.1 (18.10.2017)
 - Вывод подробной информации об исключении в оболочке Коммуникатора
 - Исправлена ошибка прекращения работы Коммуникатора при использовании UDP
 

From a0d8e8393958596560d8d14a3a972d63c1f64753 Mon Sep 17 00:00:00 2001
From: 2mik 
Date: Wed, 25 Oct 2017 12:59:44 +0300
Subject: [PATCH 02/61] Initial commit of PlgSchBasicComp

---
 .../PlgSchBasicComp/PlgSchBasicComp.csproj    | 114 ++++++++++++++++++
 .../Properties/AssemblyInfo.cs                |  35 ++++++
 .../PlgSchBasicComp/Web.Debug.config          |  30 +++++
 .../PlgSchBasicComp/Web.Release.config        |  31 +++++
 .../ScadaScheme/PlgSchBasicComp/Web.config    |  13 ++
 ScadaWeb/ScadaScheme/ScadaScheme.sln          |   8 +-
 6 files changed, 230 insertions(+), 1 deletion(-)
 create mode 100644 ScadaWeb/ScadaScheme/PlgSchBasicComp/PlgSchBasicComp.csproj
 create mode 100644 ScadaWeb/ScadaScheme/PlgSchBasicComp/Properties/AssemblyInfo.cs
 create mode 100644 ScadaWeb/ScadaScheme/PlgSchBasicComp/Web.Debug.config
 create mode 100644 ScadaWeb/ScadaScheme/PlgSchBasicComp/Web.Release.config
 create mode 100644 ScadaWeb/ScadaScheme/PlgSchBasicComp/Web.config

diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/PlgSchBasicComp.csproj b/ScadaWeb/ScadaScheme/PlgSchBasicComp/PlgSchBasicComp.csproj
new file mode 100644
index 000000000..66f603836
--- /dev/null
+++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/PlgSchBasicComp.csproj
@@ -0,0 +1,114 @@
+
+
+  
+  
+    Debug
+    AnyCPU
+    
+    
+    2.0
+    {85BD72F3-A9FC-4F6F-BE3A-5A045CF734AE}
+    {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
+    Library
+    Properties
+    PlgSchBasicComp
+    PlgSchBasicComp
+    v4.0
+    true
+    
+    
+    
+    
+    
+  
+  
+    true
+    full
+    false
+    bin\
+    DEBUG;TRACE
+    prompt
+    4
+  
+  
+    pdbonly
+    true
+    bin\
+    TRACE
+    prompt
+    4
+  
+  
+    
+      ..\..\..\Log\bin\Release\Log.dll
+    
+    
+      ..\..\..\ScadaData\ScadaData\bin\Release\ScadaData.dll
+    
+    
+      ..\..\ScadaWebCommon5\bin\Release\ScadaWebCommon5.dll
+    
+    
+    
+    
+    
+    
+    
+    
+  
+  
+    
+  
+  
+    
+  
+  
+    
+      Web.config
+    
+    
+      Web.config
+    
+  
+  
+    
+      {b61c631d-5ab8-431a-93c9-3dc8b36878bb}
+      ScadaSchemeCommon
+    
+  
+  
+    
+  
+  
+    10.0
+    $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+  
+  
+  
+  
+  
+    
+      
+        
+          True
+          True
+          63687
+          /
+          http://localhost:63687/
+          False
+          False
+          
+          
+          False
+        
+      
+    
+  
+  
+
\ No newline at end of file
diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/Properties/AssemblyInfo.cs b/ScadaWeb/ScadaScheme/PlgSchBasicComp/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..f99cdefdb
--- /dev/null
+++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("PlgSchBasicComp")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("PlgSchBasicComp")]
+[assembly: AssemblyCopyright("Copyright ©  2017")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("85bd72f3-a9fc-4f6f-be3a-5a045cf734ae")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers 
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/Web.Debug.config b/ScadaWeb/ScadaScheme/PlgSchBasicComp/Web.Debug.config
new file mode 100644
index 000000000..2e302f9f9
--- /dev/null
+++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/Web.Debug.config
@@ -0,0 +1,30 @@
+
+
+
+
+
+  
+  
+    
+  
+
\ No newline at end of file
diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/Web.Release.config b/ScadaWeb/ScadaScheme/PlgSchBasicComp/Web.Release.config
new file mode 100644
index 000000000..c35844462
--- /dev/null
+++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/Web.Release.config
@@ -0,0 +1,31 @@
+
+
+
+
+
+  
+  
+    
+    
+  
+
\ No newline at end of file
diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/Web.config b/ScadaWeb/ScadaScheme/PlgSchBasicComp/Web.config
new file mode 100644
index 000000000..c72873f34
--- /dev/null
+++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/Web.config
@@ -0,0 +1,13 @@
+
+
+
+
+
+    
+      
+    
+
+
diff --git a/ScadaWeb/ScadaScheme/ScadaScheme.sln b/ScadaWeb/ScadaScheme/ScadaScheme.sln
index 63641d7c3..f3f7132fa 100644
--- a/ScadaWeb/ScadaScheme/ScadaScheme.sln
+++ b/ScadaWeb/ScadaScheme/ScadaScheme.sln
@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 14
-VisualStudioVersion = 14.0.24720.0
+VisualStudioVersion = 14.0.25420.1
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScadaSchemeCommon", "ScadaSchemeCommon\ScadaSchemeCommon.csproj", "{B61C631D-5AB8-431A-93C9-3DC8B36878BB}"
 EndProject
@@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScadaSchemeEditor", "ScadaS
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlgScheme", "PlgScheme\PlgScheme.csproj", "{36CBF606-7F85-4E46-BC7A-C86CACF675B2}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlgSchBasicComp", "PlgSchBasicComp\PlgSchBasicComp.csproj", "{85BD72F3-A9FC-4F6F-BE3A-5A045CF734AE}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -27,6 +29,10 @@ Global
 		{36CBF606-7F85-4E46-BC7A-C86CACF675B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{36CBF606-7F85-4E46-BC7A-C86CACF675B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{36CBF606-7F85-4E46-BC7A-C86CACF675B2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{85BD72F3-A9FC-4F6F-BE3A-5A045CF734AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{85BD72F3-A9FC-4F6F-BE3A-5A045CF734AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{85BD72F3-A9FC-4F6F-BE3A-5A045CF734AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{85BD72F3-A9FC-4F6F-BE3A-5A045CF734AE}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

From 6c5d0a7cb4e72aab1ad2cc44ce8fcd33eea4f1e8 Mon Sep 17 00:00:00 2001
From: 2mik 
Date: Thu, 26 Oct 2017 12:42:04 +0300
Subject: [PATCH 03/61] ScadaScheme: components

---
 .../AppCode/PlgSchBasicCompSpec.cs            | 53 +++++++++++++++++++
 .../PlgSchBasicComp/PlgSchBasicComp.csproj    |  3 +-
 .../Properties/AssemblyInfo.cs                | 12 ++---
 .../ScadaSchemeCommon/ISchemeComp.cs          | 35 ++++++++++++
 .../ScadaSchemeCommon.csproj                  |  1 +
 .../ScadaSchemeEditor/AppCode/IMainForm.cs    |  2 +-
 6 files changed, 98 insertions(+), 8 deletions(-)
 create mode 100644 ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs
 create mode 100644 ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs

diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs
new file mode 100644
index 000000000..53a7a169d
--- /dev/null
+++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs
@@ -0,0 +1,53 @@
+using Scada.Scheme;
+using System;
+using System.Collections.Generic;
+using System.Web;
+
+namespace Scada.Web.Plugins
+{
+    public class PlgSchBasicCompSpec : PluginSpec, ISchemeComp
+    {
+        /// 
+        /// Версия плагина
+        /// 
+        internal const string PlgVersion = "5.0.0.0";
+
+
+        /// 
+        /// Получить наименование плагина
+        /// 
+        public override string Name
+        {
+            get
+            {
+                return Localization.UseRussian ?
+                    "Основные компоненты схем" :
+                    "Basic scheme components";
+            }
+        }
+
+        /// 
+        /// Получить описание плагина
+        /// 
+        public override string Descr
+        {
+            get
+            {
+                return Localization.UseRussian ?
+                    "Набор основных компонентов для отображения на мнемосхемах." :
+                    "A set of basic components for display on schemes.";
+            }
+        }
+
+        /// 
+        /// Получить версию плагина
+        /// 
+        public override string Version
+        {
+            get
+            {
+                return PlgVersion;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/PlgSchBasicComp.csproj b/ScadaWeb/ScadaScheme/PlgSchBasicComp/PlgSchBasicComp.csproj
index 66f603836..5d37a75c9 100644
--- a/ScadaWeb/ScadaScheme/PlgSchBasicComp/PlgSchBasicComp.csproj
+++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/PlgSchBasicComp.csproj
@@ -11,7 +11,7 @@
     {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}
     Library
     Properties
-    PlgSchBasicComp
+    Scada.Web
     PlgSchBasicComp
     v4.0
     true
@@ -60,6 +60,7 @@
     
   
   
+    
     
   
   
diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/Properties/AssemblyInfo.cs b/ScadaWeb/ScadaScheme/PlgSchBasicComp/Properties/AssemblyInfo.cs
index f99cdefdb..cfeb3ce0b 100644
--- a/ScadaWeb/ScadaScheme/PlgSchBasicComp/Properties/AssemblyInfo.cs
+++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/Properties/AssemblyInfo.cs
@@ -1,5 +1,5 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
+using Scada.Web.Plugins;
+using System.Reflection;
 using System.Runtime.InteropServices;
 
 // General Information about an assembly is controlled through the following 
@@ -9,8 +9,8 @@
 [assembly: AssemblyDescription("")]
 [assembly: AssemblyConfiguration("")]
 [assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("PlgSchBasicComp")]
-[assembly: AssemblyCopyright("Copyright ©  2017")]
+[assembly: AssemblyProduct("Rapid SCADA")]
+[assembly: AssemblyCopyright("Copyright © 2017")]
 [assembly: AssemblyTrademark("")]
 [assembly: AssemblyCulture("")]
 
@@ -31,5 +31,5 @@
 //
 // You can specify all the values or you can default the Revision and Build Numbers 
 // by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: AssemblyVersion(PlgSchBasicCompSpec.PlgVersion)]
+[assembly: AssemblyFileVersion(PlgSchBasicCompSpec.PlgVersion)]
diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs
new file mode 100644
index 000000000..4e3f3ab69
--- /dev/null
+++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2017 Mikhail Shiryaev
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ * 
+ * Product  : Rapid SCADA
+ * Module   : ScadaSchemeCommon
+ * Summary  : Indicates that a plugin provides scheme components
+ * 
+ * Author   : Mikhail Shiryaev
+ * Created  : 2017
+ * Modified : 2017
+ */
+
+namespace Scada.Scheme
+{
+    /// 
+    /// Indicates that a plugin provides scheme components
+    /// Показывает, что плагин предоставляет компоненты схем
+    /// 
+    public interface ISchemeComp
+    {
+    }
+}
diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ScadaSchemeCommon.csproj b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ScadaSchemeCommon.csproj
index 9f67c6d6a..9f02120dc 100644
--- a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ScadaSchemeCommon.csproj
+++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ScadaSchemeCommon.csproj
@@ -53,6 +53,7 @@
     
     
     
+    
     
     
     
diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/IMainForm.cs b/ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/IMainForm.cs
index 8db271c21..1157ea395 100644
--- a/ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/IMainForm.cs
+++ b/ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/IMainForm.cs
@@ -15,7 +15,7 @@
  * 
  * 
  * Product  : Rapid SCADA
- * Module   : ScadaSchemeCommon
+ * Module   : Scheme Editor
  * Summary  : Specifies the functionality provided by the main form
  * 
  * Author   : Mikhail Shiryaev

From fea5b27c43cc59694d37452a640c048bc5d9a7cc Mon Sep 17 00:00:00 2001
From: 2mik 
Date: Thu, 26 Oct 2017 15:06:03 +0300
Subject: [PATCH 04/61] ScadaScheme: dev

---
 .../PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs    | 11 +++++++++++
 ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs |  9 +++++++++
 2 files changed, 20 insertions(+)

diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs
index 53a7a169d..3d3684a7c 100644
--- a/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs
+++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs
@@ -49,5 +49,16 @@ public override string Version
                 return PlgVersion;
             }
         }
+
+        /// 
+        /// Получить префикс XML-элементов, содержащих свойства компонентов
+        /// 
+        string ISchemeComp.XmlPrefix
+        {
+            get
+            {
+                return "basic";
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs
index 4e3f3ab69..01daa5e96 100644
--- a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs
+++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs
@@ -31,5 +31,14 @@ namespace Scada.Scheme
     /// 
public interface ISchemeComp { + /// + /// Получить префикс XML-элементов, содержащих свойства компонентов + /// + string XmlPrefix { get; } + + /// + /// + /// + //object GetComponentFactory(); } } From dca6a12365c86fc1dd44b0ac4924ed0a4b215b17 Mon Sep 17 00:00:00 2001 From: 2mik Date: Fri, 27 Oct 2017 20:36:01 +0300 Subject: [PATCH 05/61] ScadaScheme: dev components --- .../AppCode/PlgSchBasicCompSpec.cs | 11 +++++ .../ScadaSchemeCommon/ComponentFactory.cs | 41 +++++++++++++++++++ .../ScadaSchemeCommon/ISchemeComp.cs | 4 +- .../ScadaSchemeCommon.csproj | 1 + .../ScadaSchemeCommon/SchemeUtils.cs | 2 +- .../ScadaSchemeCommon/SchemeView.cs | 2 +- 6 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 ScadaWeb/ScadaScheme/ScadaSchemeCommon/ComponentFactory.cs diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs index 3d3684a7c..ab4203959 100644 --- a/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs +++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs @@ -60,5 +60,16 @@ string ISchemeComp.XmlPrefix return "basic"; } } + + /// + /// Получить фабрику для создания компонентов + /// + ComponentFactory ISchemeComp.ComponentFactory + { + get + { + return null; + } + } } } \ No newline at end of file diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ComponentFactory.cs b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ComponentFactory.cs new file mode 100644 index 000000000..de0f0915a --- /dev/null +++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ComponentFactory.cs @@ -0,0 +1,41 @@ +/* + * Copyright 2017 Mikhail Shiryaev + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * Product : Rapid SCADA + * Module : ScadaSchemeCommon + * Summary : The base class for creating scheme components + * + * Author : Mikhail Shiryaev + * Created : 2017 + * Modified : 2017 + */ + +using Scada.Scheme.Model; + +namespace Scada.Scheme +{ + /// + /// The base class for creating scheme components + /// Базовый класс для создания компонентов схемы + /// + public abstract class ComponentFactory + { + /// + /// Создать компонент схемы + /// + public abstract BaseComponent CreateComponent(string typeShortName); + } +} diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs index 01daa5e96..3b2b8aaf0 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs +++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs @@ -37,8 +37,8 @@ public interface ISchemeComp string XmlPrefix { get; } /// - /// + /// Получить фабрику для создания компонентов /// - //object GetComponentFactory(); + ComponentFactory ComponentFactory { get; } } } diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ScadaSchemeCommon.csproj b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ScadaSchemeCommon.csproj index 9f02120dc..b3f572a36 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ScadaSchemeCommon.csproj +++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ScadaSchemeCommon.csproj @@ -48,6 +48,7 @@ + diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/SchemeUtils.cs b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/SchemeUtils.cs index 16e2b3e94..28ede6b2f 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/SchemeUtils.cs +++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/SchemeUtils.cs @@ -34,7 +34,7 @@ public static class SchemeUtils /// /// Версия схем /// - public const string SchemeVersion = "5.1.0.4"; + public const string SchemeVersion = "5.2.0.0"; /// /// Проверить, что метки представления соответствуют друг другу diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/SchemeView.cs b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/SchemeView.cs index 6341771bc..2d4e38718 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/SchemeView.cs +++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/SchemeView.cs @@ -211,7 +211,7 @@ public bool SaveToFile(string fileName, out string errMsg) SchemeDoc.SaveToXml(documentElem); // запись компонентов схемы - XmlElement componentsElem = xmlDoc.CreateElement("Elements"); + XmlElement componentsElem = xmlDoc.CreateElement("Components"); rootElem.AppendChild(componentsElem); foreach (BaseComponent component in Components.Values) From 0f119d58c0abd677bf94a6381e42724246bc0518 Mon Sep 17 00:00:00 2001 From: 2mik Date: Mon, 30 Oct 2017 16:46:25 +0300 Subject: [PATCH 06/61] ScadaServer: remove unused constant --- ScadaServer/ScadaServerSvc/MainLogic.cs | 6 ------ 1 file changed, 6 deletions(-) diff --git a/ScadaServer/ScadaServerSvc/MainLogic.cs b/ScadaServer/ScadaServerSvc/MainLogic.cs index 51371d03f..11bb4d50d 100644 --- a/ScadaServer/ScadaServerSvc/MainLogic.cs +++ b/ScadaServer/ScadaServerSvc/MainLogic.cs @@ -139,12 +139,6 @@ static WorkStateNames() "Execution time : {1}" + Environment.NewLine + "State : {2}" + Environment.NewLine + "Version : {3}"; - /// - /// Формат описания события на команду ТУ - /// - private static readonly string EventOnCmdFormat = Localization.UseRussian ? - "Команда ТУ: канал упр. = {0}, ид. польз. = {1}, значение = {2}, данные = {3}" : - "Command: out channel = {0}, user ID = {1}, value = {2}, data = {3}"; private string infoFileName; // полное имя файла информации private Thread thread; // поток работы сервера From af227bf2036853468363408c91bcb810a38a4981 Mon Sep 17 00:00:00 2001 From: 2mik Date: Mon, 30 Oct 2017 17:44:15 +0300 Subject: [PATCH 07/61] ScadaScheme: components --- .../AppCode/PlgSchBasicCompSpec.cs | 33 ++++++++- .../AppCode/SchBasicComp/BasicCompFactory.cs | 52 ++++++++++++++ .../AppCode/SchBasicComp/Led.cs | 37 ++++++++++ .../PlgSchBasicComp/PlgSchBasicComp.csproj | 2 + .../{ComponentFactory.cs => CompFactory.cs} | 2 +- .../ScadaSchemeCommon/CompManager.cs | 68 +++++++++++++++++++ .../ScadaSchemeCommon/ISchemeComp.cs | 2 +- .../ScadaSchemeCommon/Model/DynamicPicture.cs | 3 +- .../ScadaSchemeCommon.csproj | 3 +- 9 files changed, 196 insertions(+), 6 deletions(-) create mode 100644 ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/SchBasicComp/BasicCompFactory.cs create mode 100644 ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/SchBasicComp/Led.cs rename ScadaWeb/ScadaScheme/ScadaSchemeCommon/{ComponentFactory.cs => CompFactory.cs} (96%) create mode 100644 ScadaWeb/ScadaScheme/ScadaSchemeCommon/CompManager.cs diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs index ab4203959..57464fc47 100644 --- a/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs +++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/PlgSchBasicCompSpec.cs @@ -1,10 +1,39 @@ -using Scada.Scheme; +/* + * Copyright 2017 Mikhail Shiryaev + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * Product : Rapid SCADA + * Module : PlgSchBasicComp + * Summary : Basic scheme components plugin specification + * + * Author : Mikhail Shiryaev + * Created : 2017 + * Modified : 2017 + */ + +using Scada.Scheme; using System; using System.Collections.Generic; using System.Web; namespace Scada.Web.Plugins { + /// + /// Basic scheme components plugin specification + /// Спецификация плагина основных компонентов схем + /// public class PlgSchBasicCompSpec : PluginSpec, ISchemeComp { /// @@ -64,7 +93,7 @@ string ISchemeComp.XmlPrefix /// /// Получить фабрику для создания компонентов /// - ComponentFactory ISchemeComp.ComponentFactory + CompFactory ISchemeComp.CompFactory { get { diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/SchBasicComp/BasicCompFactory.cs b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/SchBasicComp/BasicCompFactory.cs new file mode 100644 index 000000000..7f4d49cdf --- /dev/null +++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/SchBasicComp/BasicCompFactory.cs @@ -0,0 +1,52 @@ +/* + * Copyright 2017 Mikhail Shiryaev + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * Product : Rapid SCADA + * Module : PlgSchBasicComp + * Summary : The factory for creating basic scheme components + * + * Author : Mikhail Shiryaev + * Created : 2017 + * Modified : 2017 + */ + +using Scada.Scheme; +using Scada.Scheme.Model; +using System; + +namespace Scada.Web.Plugins.SchBasicComp +{ + /// + /// The factory for creating basic scheme components + /// Фабрика для для создания основных компонентов схемы + /// + public class BasicCompFactory : CompFactory + { + /// + /// Создать компонент схемы + /// + public override BaseComponent CreateComponent(string typeShortName) + { + if (typeShortName == null) + throw new ArgumentNullException("typeShortName"); + + if (typeShortName.Equals("Led", StringComparison.OrdinalIgnoreCase)) + return new Led(); + else + return null; + } + } +} \ No newline at end of file diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/SchBasicComp/Led.cs b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/SchBasicComp/Led.cs new file mode 100644 index 000000000..9a9c44dce --- /dev/null +++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/SchBasicComp/Led.cs @@ -0,0 +1,37 @@ +/* + * Copyright 2017 Mikhail Shiryaev + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * Product : Rapid SCADA + * Module : PlgSchBasicComp + * Summary : Scheme component that represents led + * + * Author : Mikhail Shiryaev + * Created : 2017 + * Modified : 2017 + */ + +using Scada.Scheme.Model; + +namespace Scada.Web.Plugins.SchBasicComp +{ + /// + /// Scheme component that represents led + /// Компонент схемы, представляющий светодиод + /// + public class Led : BaseComponent + { + } +} \ No newline at end of file diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/PlgSchBasicComp.csproj b/ScadaWeb/ScadaScheme/PlgSchBasicComp/PlgSchBasicComp.csproj index 5d37a75c9..0bb944960 100644 --- a/ScadaWeb/ScadaScheme/PlgSchBasicComp/PlgSchBasicComp.csproj +++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/PlgSchBasicComp.csproj @@ -61,6 +61,8 @@ + + diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ComponentFactory.cs b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/CompFactory.cs similarity index 96% rename from ScadaWeb/ScadaScheme/ScadaSchemeCommon/ComponentFactory.cs rename to ScadaWeb/ScadaScheme/ScadaSchemeCommon/CompFactory.cs index de0f0915a..70aaa50dd 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ComponentFactory.cs +++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/CompFactory.cs @@ -31,7 +31,7 @@ namespace Scada.Scheme /// The base class for creating scheme components /// Базовый класс для создания компонентов схемы /// - public abstract class ComponentFactory + public abstract class CompFactory { /// /// Создать компонент схемы diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/CompManager.cs b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/CompManager.cs new file mode 100644 index 000000000..aa621f00e --- /dev/null +++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/CompManager.cs @@ -0,0 +1,68 @@ +/* + * Copyright 2017 Mikhail Shiryaev + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * + * Product : Rapid SCADA + * Module : ScadaSchemeCommon + * Summary : Manages scheme components + * + * Author : Mikhail Shiryaev + * Created : 2017 + * Modified : 2017 + */ + +namespace Scada.Scheme +{ + /// + /// Manages scheme components + /// Менеджер, управляющий компонентами схемы + /// + public sealed class CompManager + { + private static readonly CompManager instance; // экземпляр объекта менеджера + + /// + /// Статический конструктор + /// + static CompManager() + { + instance = new CompManager(); + } + + /// + /// Конструктор, ограничивающий создание объекта из других классов + /// + private CompManager() + { + } + + + /// + /// Получить фабрику компонентов по префиксу XML-элементов + /// + public CompFactory GetCompFactory(string xmlPrefix) + { + return null; + } + + /// + /// Получить единственный экземпляр менеджера + /// + public static CompManager GetInstance() + { + return instance; + } + } +} diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs index 3b2b8aaf0..ad2f27d5c 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs +++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ISchemeComp.cs @@ -39,6 +39,6 @@ public interface ISchemeComp /// /// Получить фабрику для создания компонентов /// - ComponentFactory ComponentFactory { get; } + CompFactory CompFactory { get; } } } diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/Model/DynamicPicture.cs b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/Model/DynamicPicture.cs index b6e31c665..9cd1b41e9 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/Model/DynamicPicture.cs +++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/Model/DynamicPicture.cs @@ -34,7 +34,8 @@ namespace Scada.Scheme.Model { /// - /// Динамический рисунок + /// Scheme component that represents dynamic picture + /// Компонент схемы, представляющий динамический рисунок /// [Serializable] public class DynamicPicture : StaticPicture, IDynamicComponent diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ScadaSchemeCommon.csproj b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ScadaSchemeCommon.csproj index b3f572a36..117a040e0 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ScadaSchemeCommon.csproj +++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/ScadaSchemeCommon.csproj @@ -48,7 +48,8 @@ - + + From 2caf3d16caa56e306b051d14aba8e75548306f55 Mon Sep 17 00:00:00 2001 From: 2mik Date: Tue, 31 Oct 2017 22:40:42 +0300 Subject: [PATCH 08/61] ScadaScheme: dev --- .../PlgScheme/AppCode/PlgSchemeSpec.cs | 10 ++ .../ScadaSchemeCommon/CompManager.cs | 117 +++++++++++++++++- .../ScadaSchemeCommon/SchemeView.cs | 18 +-- .../ScadaSchemeEditor/AppCode/AppData.cs | 5 + 4 files changed, 135 insertions(+), 15 deletions(-) diff --git a/ScadaWeb/ScadaScheme/PlgScheme/AppCode/PlgSchemeSpec.cs b/ScadaWeb/ScadaScheme/PlgScheme/AppCode/PlgSchemeSpec.cs index fd30a242c..4a0829d66 100644 --- a/ScadaWeb/ScadaScheme/PlgScheme/AppCode/PlgSchemeSpec.cs +++ b/ScadaWeb/ScadaScheme/PlgScheme/AppCode/PlgSchemeSpec.cs @@ -103,9 +103,14 @@ public override List ViewSpecs /// public override void Init() { + // создание объекта для обновления словаря dictUpdater = new DictUpdater( string.Format("{0}Scheme{1}lang{1}", AppDirs.PluginsDir, Path.DirectorySeparatorChar), "PlgScheme", null, Log); + + // инициализация менеджера компонентов + CompManager compManager = CompManager.GetInstance(); + compManager.Init(AppData.GetAppData().AppDirs, Log); } /// @@ -113,7 +118,12 @@ public override void Init() /// public override void OnUserLogin(UserData userData) { + // обновление словаря dictUpdater.Update(); + + // извлечение компонентов из плагинов + CompManager compManager = CompManager.GetInstance(); + compManager.RetrieveCompFromPlugins(userData.PluginSpecs); } } } \ No newline at end of file diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/CompManager.cs b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/CompManager.cs index aa621f00e..c3aa1cf74 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/CompManager.cs +++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/CompManager.cs @@ -23,6 +23,13 @@ * Modified : 2017 */ +using Scada.Scheme.Model; +using Scada.Web.Plugins; +using System; +using System.Collections.Generic; +using System.Xml; +using Utils; + namespace Scada.Scheme { /// @@ -33,6 +40,11 @@ public sealed class CompManager { private static readonly CompManager instance; // экземпляр объекта менеджера + private Web.AppDirs webAppDirs; // директории веб-приложения + private ILog log; // журнал приложения + private Dictionary compFactories; // фабрики компонентов + + /// /// Статический конструктор /// @@ -46,14 +58,115 @@ static CompManager() /// private CompManager() { + webAppDirs = new Web.AppDirs(); + log = new LogStub(); + compFactories = new Dictionary(); } /// - /// Получить фабрику компонентов по префиксу XML-элементов + /// Инициализировать менеджер компонентов + /// + public void Init(string webAppDir, Log log) + { + if (log == null) + throw new ArgumentNullException("log"); + + webAppDirs.Init(webAppDir); + this.log = log; + } + + /// + /// Инициализировать менеджер компонентов + /// + public void Init(Web.AppDirs webAppDirs, Log log) + { + if (webAppDirs == null) + throw new ArgumentNullException("webAppDirs"); + if (log == null) + throw new ArgumentNullException("log"); + + this.webAppDirs = webAppDirs; + this.log = log; + } + + /// + /// Загрузить компоненты из файлов /// - public CompFactory GetCompFactory(string xmlPrefix) + public void LoadCompFromFiles() { + try + { + log.WriteAction(Localization.UseRussian ? + "Загрузка компонентов из файлов" : + "Load components from files"); + } + catch (Exception ex) + { + log.WriteException(ex, Localization.UseRussian ? + "Ошибка при загрузке компонентов из файлов" : + "Error loading components from files"); + } + } + + /// + /// Извлечь компоненты из загруженных плагинов + /// + public void RetrieveCompFromPlugins(List pluginSpecs) + { + try + { + log.WriteAction(Localization.UseRussian ? + "Извлечение компонентов из установленных плагинов" : + "Retrieve components from the installed plugins"); + + if (pluginSpecs != null) + { + foreach (PluginSpec pluginSpec in pluginSpecs) + { + if (pluginSpec is ISchemeComp) + { + ISchemeComp schemeComp = (ISchemeComp)pluginSpec; + } + } + } + } + catch (Exception ex) + { + log.WriteException(ex, Localization.UseRussian ? + "Ошибка при извлечении компонентов из установленных плагинов" : + "Error retrieving components from the installed plugins"); + } + } + + /// + /// Создать компонент на основе XML-узла + /// + public BaseComponent CreateComponent(XmlNode compNode) + { + if (compNode == null) + throw new ArgumentNullException("compNode"); + + string xmlPrefix = compNode.Prefix; + string nodeName = compNode.Name.ToLowerInvariant(); + CompFactory compFactory; + + if (string.IsNullOrEmpty(xmlPrefix)) + { + if (nodeName == "statictext") + return new StaticText(); + else if (nodeName == "dynamictext") + return new DynamicText(); + else if (nodeName == "staticpicture") + return new StaticPicture(); + else if (nodeName == "dynamicpicture") + return new DynamicPicture(); + } + else if (compFactories.TryGetValue(xmlPrefix, out compFactory)) + { + return compFactory.CreateComponent(nodeName); + } + return null; } diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/SchemeView.cs b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/SchemeView.cs index 2d4e38718..ba4aa4fd2 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeCommon/SchemeView.cs +++ b/ScadaWeb/ScadaScheme/ScadaSchemeCommon/SchemeView.cs @@ -112,26 +112,18 @@ public override void LoadFromStream(Stream stream) XmlNode componentsNode = rootElem.SelectSingleNode("Components") ?? rootElem.SelectSingleNode("Elements"); if (componentsNode != null) { - foreach (XmlNode componentNode in componentsNode.ChildNodes) + CompManager compManager = CompManager.GetInstance(); + + foreach (XmlNode compNode in componentsNode.ChildNodes) { // создание компонента - string nodeName = componentNode.Name.ToLowerInvariant(); - BaseComponent component = null; - - if (nodeName == "statictext") - component = new StaticText(); - else if (nodeName == "dynamictext") - component = new DynamicText(); - else if (nodeName == "staticpicture") - component = new StaticPicture(); - else if (nodeName == "dynamicpicture") - component = new DynamicPicture(); + BaseComponent component = compManager.CreateComponent(compNode); if (component != null) { // загрузка компонента и добавление его в представление component.SchemeDoc = SchemeDoc; - component.LoadFromXml(componentNode); + component.LoadFromXml(compNode); Components[component.ID] = component; // добавление входных каналов представления diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/AppData.cs b/ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/AppData.cs index 425357716..6635dec0b 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/AppData.cs +++ b/ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/AppData.cs @@ -169,6 +169,11 @@ public void Init(string exeDir, IMainForm mainForm) Log.WriteAction(Localization.UseRussian ? "Инициализация общих данных Редактора схем" : "Initialize common data of Scheme Editor"); + + // инициализация менеджера компонентов и загрузка компонентов + CompManager compManager = CompManager.GetInstance(); + compManager.Init(AppDirs.WebDir, Log); + compManager.LoadCompFromFiles(); } /// From f685155c714a649dfe8036a3f4f415c4d9408a1b Mon Sep 17 00:00:00 2001 From: 2mik Date: Wed, 1 Nov 2017 16:07:10 +0300 Subject: [PATCH 09/61] KpModbus: fix setting command address --- ScadaComm/OpenKPs/KpModbus/KpModbusView.cs | 2 +- ScadaComm/OpenKPs/KpModbus/Modbus/UI/CtrlCmd.cs | 2 +- .../ru/version-history/communicator-drivers-history.html | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ScadaComm/OpenKPs/KpModbus/KpModbusView.cs b/ScadaComm/OpenKPs/KpModbus/KpModbusView.cs index 4964d3586..b43a0ab10 100644 --- a/ScadaComm/OpenKPs/KpModbus/KpModbusView.cs +++ b/ScadaComm/OpenKPs/KpModbus/KpModbusView.cs @@ -42,7 +42,7 @@ public class KpModbusView : KPView /// /// Версия библиотеки КП /// - internal const string KpVersion = "5.1.0.0"; + internal const string KpVersion = "5.1.0.1"; /// diff --git a/ScadaComm/OpenKPs/KpModbus/Modbus/UI/CtrlCmd.cs b/ScadaComm/OpenKPs/KpModbus/Modbus/UI/CtrlCmd.cs index b6cbeab14..a072faa99 100644 --- a/ScadaComm/OpenKPs/KpModbus/Modbus/UI/CtrlCmd.cs +++ b/ScadaComm/OpenKPs/KpModbus/Modbus/UI/CtrlCmd.cs @@ -271,7 +271,7 @@ private void numCmdAddress_ValueChanged(object sender, EventArgs e) // изменение адреса команды if (modbusCmd != null) { - modbusCmd.Address = (ushort)(numCmdAddress.Value - 1); + modbusCmd.Address = (ushort)(numCmdAddress.Value - AddrShift); OnObjectChanged(TreeUpdateTypes.CurrentNode); } } diff --git a/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html b/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html index db0578d55..62bd8568f 100644 --- a/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html +++ b/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html @@ -17,7 +17,10 @@

Email

Modbus

-
KpModbus 5.1.0.0 (18.10.2017)
+    
KpModbus 5.1.0.1 (В разработке)
+- Исправлена ошибка установки адреса команд при адресации с 0
+
+KpModbus 5.1.0.0 (18.10.2017)
 - Выбор адресации в шаблоне с 0 или 1, Hex или Dec
 - Настройка порядка байт по умолчанию
 - Тип данных и порядок байт в команде

From 1b65a67db5494ed4efb9a857963721235c574b0c Mon Sep 17 00:00:00 2001
From: 2mik 
Date: Fri, 3 Nov 2017 14:39:43 +0300
Subject: [PATCH 10/61] ScadaComm: allow creating KPProperties with
 cmdLine=null

---
 ScadaComm/ScadaCommCommon/Devices/KPView.cs | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/ScadaComm/ScadaCommCommon/Devices/KPView.cs b/ScadaComm/ScadaCommCommon/Devices/KPView.cs
index 18511b955..edf3f945e 100644
--- a/ScadaComm/ScadaCommCommon/Devices/KPView.cs
+++ b/ScadaComm/ScadaCommCommon/Devices/KPView.cs
@@ -125,11 +125,9 @@ public KPProperties(SortedList customParams, string cmdLine)
             {
                 if (customParams == null)
                     throw new ArgumentNullException("customParams");
-                if (cmdLine == null)
-                    throw new ArgumentNullException("cmdLine");
 
                 CustomParams = customParams;
-                CmdLine = cmdLine;
+                CmdLine = cmdLine ?? "";
                 Modified = false;
             }
 

From cb772996e344da5601e7ef375f880a9c9d278901 Mon Sep 17 00:00:00 2001
From: 2mik 
Date: Fri, 3 Nov 2017 14:39:54 +0300
Subject: [PATCH 11/61] ScadaDoc: update history

---
 .../ru/version-history/communicator-drivers-history.html     | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html b/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html
index 62bd8568f..2b8ba2958 100644
--- a/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html
+++ b/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html
@@ -59,7 +59,10 @@ 

SNMP

Telegram

-
KpTelegram 5.0.0.0 (25.09.2017)
+    
KpTelegram 5.0.0.1 (В разработке)
+- Исправлена ошибка при открытии свойств КП после его импорта
+
+KpTelegram 5.0.0.0 (25.09.2017)
 - Первоначальная разработка драйвера
 
From 1303bf49f860c8f4361c0ab099163618ee14894c Mon Sep 17 00:00:00 2001 From: 2mik Date: Fri, 3 Nov 2017 14:49:34 +0300 Subject: [PATCH 12/61] KPs: fix new KPReqParams() --- ScadaComm/OpenKPs/KpEmail/KpEmailView.cs | 4 ++-- ScadaComm/OpenKPs/KpHttpNotif/KpHttpNotifView.cs | 4 ++-- ScadaComm/OpenKPs/KpSms/KpSmsView.cs | 4 ++-- .../version-history/communicator-drivers-history.html | 10 ++++++++-- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/ScadaComm/OpenKPs/KpEmail/KpEmailView.cs b/ScadaComm/OpenKPs/KpEmail/KpEmailView.cs index 8b4a0a1d8..568c1934b 100644 --- a/ScadaComm/OpenKPs/KpEmail/KpEmailView.cs +++ b/ScadaComm/OpenKPs/KpEmail/KpEmailView.cs @@ -38,7 +38,7 @@ public class KpEmailView : KPView /// /// Версия библиотеки КП /// - internal const string KpVersion = "5.0.0.1"; + internal const string KpVersion = "5.0.0.2"; /// @@ -133,7 +133,7 @@ public override KPReqParams DefaultReqParams { get { - return new KPReqParams() { Timeout = 10000, Delay = 200 }; + return new KPReqParams(10000, 200); } } diff --git a/ScadaComm/OpenKPs/KpHttpNotif/KpHttpNotifView.cs b/ScadaComm/OpenKPs/KpHttpNotif/KpHttpNotifView.cs index 4680c65de..4909ce7f4 100644 --- a/ScadaComm/OpenKPs/KpHttpNotif/KpHttpNotifView.cs +++ b/ScadaComm/OpenKPs/KpHttpNotif/KpHttpNotifView.cs @@ -40,7 +40,7 @@ public class KpHttpNotifView : KPView /// /// Версия библиотеки КП /// - internal const string KpVersion = "5.0.0.1"; + internal const string KpVersion = "5.0.0.2"; /// @@ -139,7 +139,7 @@ public override KPReqParams DefaultReqParams { get { - return new KPReqParams() { Timeout = 10000, Delay = 200 }; + return new KPReqParams(10000, 200); } } diff --git a/ScadaComm/OpenKPs/KpSms/KpSmsView.cs b/ScadaComm/OpenKPs/KpSms/KpSmsView.cs index a893b4d8f..1af98ea2d 100644 --- a/ScadaComm/OpenKPs/KpSms/KpSmsView.cs +++ b/ScadaComm/OpenKPs/KpSms/KpSmsView.cs @@ -38,7 +38,7 @@ public sealed class KpSmsView : KPView /// /// Версия библиотеки КП /// - internal const string KpVersion = "5.0.0.1"; + internal const string KpVersion = "5.0.0.2"; /// @@ -147,7 +147,7 @@ public override KPReqParams DefaultReqParams { get { - return new KPReqParams() { Timeout = 5000, Delay = 500 }; + return new KPReqParams(5000, 500); } } diff --git a/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html b/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html index 2b8ba2958..be336c2e6 100644 --- a/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html +++ b/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html @@ -11,7 +11,10 @@

История драйверов Коммуникатора

Email

-
KpEmail 5.0.0.1 (17.08.2017)
+    
KpEmail 5.0.0.2 (В разработке)
+- Исправлена некорректная инициализация свойств КП по умолчанию
+
+KpEmail 5.0.0.1 (17.08.2017)
 - Добавлена пауза после отправки письма
 - Обновление в связи с изменениями в базовых библиотеках
 
@@ -46,7 +49,10 @@

OPC

SMS

-
KpSms 5.0.0.1 (17.08.2017)
+    
KpSms 5.0.0.2 (В разработке)
+- Исправлена некорректная инициализация свойств КП по умолчанию
+
+KpSms 5.0.0.1 (17.08.2017)
 - Обновление в связи с изменениями в базовых библиотеках
 
From b4cd4f50cc11fcb83f63b7605dfe50249de99b08 Mon Sep 17 00:00:00 2001 From: 2mik Date: Wed, 8 Nov 2017 16:40:28 +0300 Subject: [PATCH 13/61] KpModbus: fix line eindings in ASCII mode --- ScadaComm/OpenKPs/KpModbus/KpModbusLogic.cs | 14 ++++++++++++-- .../communicator-drivers-history.html | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ScadaComm/OpenKPs/KpModbus/KpModbusLogic.cs b/ScadaComm/OpenKPs/KpModbus/KpModbusLogic.cs index efb1aa158..0e415bf60 100644 --- a/ScadaComm/OpenKPs/KpModbus/KpModbusLogic.cs +++ b/ScadaComm/OpenKPs/KpModbus/KpModbusLogic.cs @@ -97,6 +97,15 @@ private Dictionary GetTemplates() return templates; } + /// + /// Установить окончание строки в соединении для режима ASCII + /// + private void SetNewLine() + { + if (Connection != null && transMode == TransModes.ASCII) + Connection.NewLine = ModbusUtils.CRLF; + } + /// /// Установить значения тегов КП в соответствии со значениями элементов группы /// @@ -353,6 +362,8 @@ public override void OnCommLineStart() break; } + SetNewLine(); + // настройка объекта, реализующего протокол Modbus modbusPoll.Timeout = ReqParams.Timeout; modbusPoll.WriteToLog = WriteToLog; @@ -375,8 +386,7 @@ public override void OnCommLineStart() ///
public override void OnConnectionSet() { - if (transMode == TransModes.ASCII) - Connection.NewLine = ModbusUtils.CRLF; + SetNewLine(); modbusPoll.Connection = Connection; } } diff --git a/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html b/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html index be336c2e6..73ee8fa1a 100644 --- a/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html +++ b/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html @@ -22,6 +22,7 @@

Email

Modbus

KpModbus 5.1.0.1 (В разработке)
 - Исправлена ошибка установки адреса команд при адресации с 0
+- Исправлено некорректное окончание строки в режиме ASCII
 
 KpModbus 5.1.0.0 (18.10.2017)
 - Выбор адресации в шаблоне с 0 или 1, Hex или Dec

From 6f3f144caff234dea7b5c1791262e8194140e35e Mon Sep 17 00:00:00 2001
From: 2mik 
Date: Mon, 13 Nov 2017 10:25:41 +0300
Subject: [PATCH 14/61] KpModbus: add template for OWEN MV110-8DF

---
 .../Templates/KpModbus_OWEN_MV110-8DF.xml     | 28 +++++++++++++++++++
 1 file changed, 28 insertions(+)
 create mode 100644 ScadaComm/OpenKPs/KpModbus/Templates/KpModbus_OWEN_MV110-8DF.xml

diff --git a/ScadaComm/OpenKPs/KpModbus/Templates/KpModbus_OWEN_MV110-8DF.xml b/ScadaComm/OpenKPs/KpModbus/Templates/KpModbus_OWEN_MV110-8DF.xml
new file mode 100644
index 000000000..a786937d4
--- /dev/null
+++ b/ScadaComm/OpenKPs/KpModbus/Templates/KpModbus_OWEN_MV110-8DF.xml
@@ -0,0 +1,28 @@
+
+
+  
+    
+      
+    
+    
+      
+      
+      
+      
+      
+      
+      
+      
+    
+  
+  
+    
+    
+    
+    
+    
+    
+    
+    
+  
+
\ No newline at end of file

From 49052963dffe95933b0de91fbb3899166e69a43f Mon Sep 17 00:00:00 2001
From: 2mik 
Date: Mon, 13 Nov 2017 17:17:46 +0300
Subject: [PATCH 15/61] KpModbus: fix open template with nonexistent file

---
 .../KpModbus/Modbus/UI/FrmDevTemplate.cs      | 20 ++++++++-----------
 .../communicator-drivers-history.html         |  3 ++-
 2 files changed, 10 insertions(+), 13 deletions(-)

diff --git a/ScadaComm/OpenKPs/KpModbus/Modbus/UI/FrmDevTemplate.cs b/ScadaComm/OpenKPs/KpModbus/Modbus/UI/FrmDevTemplate.cs
index c38b37126..509951adb 100644
--- a/ScadaComm/OpenKPs/KpModbus/Modbus/UI/FrmDevTemplate.cs
+++ b/ScadaComm/OpenKPs/KpModbus/Modbus/UI/FrmDevTemplate.cs
@@ -103,7 +103,8 @@ private bool Modified
         /// 
private void SetFormTitle() { - Text = KpPhrases.TemplFormTitle + " - " + (fileName == "" ? NewFileName : Path.GetFileName(fileName)) + + Text = KpPhrases.TemplFormTitle + " - " + + (fileName == "" ? NewFileName : Path.GetFileName(fileName)) + (Modified ? "*" : ""); } @@ -112,20 +113,15 @@ private void SetFormTitle() ///
private void LoadTemplate(string fname) { - DeviceTemplate templ = new DeviceTemplate(); + template = new DeviceTemplate(); + fileName = fname; + SetFormTitle(); string errMsg; - if (templ.Load(fname, out errMsg)) - { - template = templ; - fileName = fname; - SetFormTitle(); - FillTree(); - } - else - { + if (!template.Load(fname, out errMsg)) ScadaUiUtils.ShowError(errMsg); - } + + FillTree(); } /// diff --git a/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html b/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html index 73ee8fa1a..797324c00 100644 --- a/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html +++ b/ScadaDoc/ScadaDoc/content/ru/version-history/communicator-drivers-history.html @@ -21,8 +21,9 @@

Email

Modbus

KpModbus 5.1.0.1 (В разработке)
-- Исправлена ошибка установки адреса команд при адресации с 0
 - Исправлено некорректное окончание строки в режиме ASCII
+- Исправлена ошибка установки адреса команд при адресации с 0
+- Исправлена ошибка при открытии несуществующего файла шаблона
 
 KpModbus 5.1.0.0 (18.10.2017)
 - Выбор адресации в шаблоне с 0 или 1, Hex или Dec

From b1a10ca436ad708aa46d0ea51bd92614cc5b62f5 Mon Sep 17 00:00:00 2001
From: 2mik 
Date: Tue, 14 Nov 2017 12:05:30 +0300
Subject: [PATCH 16/61] ModDBExport: transaction

---
 .../OpenModules/ModDBExport/Exporter.cs       | 48 ++++++++++++++++---
 .../ModDBExport/ModDBExportView.cs            | 22 ++++++++-
 .../ModDBExport/Properties/AssemblyInfo.cs    | 12 ++---
 3 files changed, 68 insertions(+), 14 deletions(-)

diff --git a/ScadaServer/OpenModules/ModDBExport/Exporter.cs b/ScadaServer/OpenModules/ModDBExport/Exporter.cs
index 8377b0c5d..80f662904 100644
--- a/ScadaServer/OpenModules/ModDBExport/Exporter.cs
+++ b/ScadaServer/OpenModules/ModDBExport/Exporter.cs
@@ -237,9 +237,14 @@ private void ExportCurData()
         {
             if (ExportParams.ExportCurData)
             {
+                DbTransaction trans = null;
                 SrezTableLight.Srez srez = null;
+
                 try
                 {
+                    trans = DataSource.Connection.BeginTransaction();
+                    DataSource.ExportCurDataCmd.Transaction = trans;
+
                     for (int i = 0; i < BundleSize; i++)
                     {
                         // извлечение среза из очереди
@@ -257,13 +262,20 @@ private void ExportCurData()
                         expCurSrezCnt++;
                         exportError = false;
                     }
+
+                    trans.Commit();
                 }
                 catch (Exception ex)
                 {
+                    if (trans != null)
+                        trans.Rollback();
+
                     // возврат среза в очередь
                     if (srez != null)
+                    {
                         lock (curSrezQueue)
                             curSrezQueue.Enqueue(srez);
+                    }
 
                     log.WriteAction(string.Format(Localization.UseRussian ?
                         "Ошибка при экспорте текущих данных в БД {0}: {1}" :
@@ -281,33 +293,45 @@ private void ExportArcData()
         {
             if (ExportParams.ExportArcData)
             {
-                SrezTableLight.Srez sres = null;
+                DbTransaction trans = null;
+                SrezTableLight.Srez srez = null;
+
                 try
                 {
+                    trans = DataSource.Connection.BeginTransaction();
+                    DataSource.ExportArcDataCmd.Transaction = trans;
+
                     for (int i = 0; i < BundleSize; i++)
                     {
                         // извлечение среза из очереди
                         lock (arcSrezQueue)
                         {
                             if (arcSrezQueue.Count > 0)
-                                sres = arcSrezQueue.Dequeue();
+                                srez = arcSrezQueue.Dequeue();
                             else
                                 break;
                         }
 
                         // экспорт
-                        ExportSrez(DataSource.ExportArcDataCmd, sres);
+                        ExportSrez(DataSource.ExportArcDataCmd, srez);
 
                         expArcSrezCnt++;
                         exportError = false;
                     }
+
+                    trans.Commit();
                 }
                 catch (Exception ex)
                 {
+                    if (trans != null)
+                        trans.Rollback();
+
                     // возврат среза в очередь
-                    if (sres != null)
+                    if (srez != null)
+                    {
                         lock (arcSrezQueue)
-                            arcSrezQueue.Enqueue(sres);
+                            arcSrezQueue.Enqueue(srez);
+                    }
 
                     log.WriteAction(string.Format(Localization.UseRussian ?
                         "Ошибка при экспорте архивных данных в БД {0}: {1}" :
@@ -325,9 +349,14 @@ private void ExportEvents()
         {
             if (ExportParams.ExportEvents)
             {
+                DbTransaction trans = null;
                 EventTableLight.Event ev = null;
+
                 try
                 {
+                    trans = DataSource.Connection.BeginTransaction();
+                    DataSource.ExportEventCmd.Transaction = trans;
+
                     for (int i = 0; i < BundleSize; i++)
                     {
                         // извлечение события из очереди
@@ -345,13 +374,20 @@ private void ExportEvents()
                         expEvCnt++;
                         exportError = false;
                     }
+
+                    trans.Commit();
                 }
                 catch (Exception ex)
                 {
-                    // возврат среза в очередь
+                    if (trans != null)
+                        trans.Rollback();
+
+                    // возврат события в очередь
                     if (ev != null)
+                    {
                         lock (evQueue)
                             evQueue.Enqueue(ev);
+                    }
 
                     log.WriteAction(string.Format(Localization.UseRussian ?
                         "Ошибка при экспорте событий в БД {0}: {1}" :
diff --git a/ScadaServer/OpenModules/ModDBExport/ModDBExportView.cs b/ScadaServer/OpenModules/ModDBExport/ModDBExportView.cs
index 56fe6cdeb..531351ddf 100644
--- a/ScadaServer/OpenModules/ModDBExport/ModDBExportView.cs
+++ b/ScadaServer/OpenModules/ModDBExport/ModDBExportView.cs
@@ -1,5 +1,5 @@
 /*
- * Copyright 2015 Mikhail Shiryaev
+ * Copyright 2017 Mikhail Shiryaev
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@
  * 
  * Author   : Mikhail Shiryaev
  * Created  : 2015
- * Modified : 2015
+ * Modified : 2017
  */
 
 using Scada.Server.Modules.DBExport;
@@ -33,6 +33,12 @@ namespace Scada.Server.Modules
     /// 
public class ModDBExportView : ModView { + /// + /// Версия модуля + /// + internal const string ModVersion = "5.0.0.1"; + + /// /// Конструктор /// @@ -52,6 +58,18 @@ public override string Descr } } + /// + /// Получить версию плагина + /// + public override string Version + { + get + { + return ModVersion; + } + } + + /// /// Отобразить свойства модуля /// diff --git a/ScadaServer/OpenModules/ModDBExport/Properties/AssemblyInfo.cs b/ScadaServer/OpenModules/ModDBExport/Properties/AssemblyInfo.cs index fd819668c..943532ad7 100644 --- a/ScadaServer/OpenModules/ModDBExport/Properties/AssemblyInfo.cs +++ b/ScadaServer/OpenModules/ModDBExport/Properties/AssemblyInfo.cs @@ -1,5 +1,5 @@ -using System.Reflection; -using System.Runtime.CompilerServices; +using Scada.Server.Modules; +using System.Reflection; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following @@ -9,8 +9,8 @@ [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ModDBExport")] -[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyProduct("Rapid SCADA")] +[assembly: AssemblyCopyright("Copyright © 2015-2017")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -32,5 +32,5 @@ // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: AssemblyVersion(ModDBExportView.ModVersion)] +[assembly: AssemblyFileVersion(ModDBExportView.ModVersion)] \ No newline at end of file From 0ed8066e16a4358b97ff08a0c2cbf4a93767e4c2 Mon Sep 17 00:00:00 2001 From: 2mik Date: Tue, 14 Nov 2017 12:39:21 +0300 Subject: [PATCH 17/61] ModDBExport: minor change --- ScadaServer/OpenModules/ModDBExport/Exporter.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ScadaServer/OpenModules/ModDBExport/Exporter.cs b/ScadaServer/OpenModules/ModDBExport/Exporter.cs index 80f662904..d9bc78ac8 100644 --- a/ScadaServer/OpenModules/ModDBExport/Exporter.cs +++ b/ScadaServer/OpenModules/ModDBExport/Exporter.cs @@ -1,5 +1,5 @@ /* - * Copyright 2015 Mikhail Shiryaev + * Copyright 2017 Mikhail Shiryaev * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ * * Author : Mikhail Shiryaev * Created : 2015 - * Modified : 2015 + * Modified : 2017 * * Description * Server module for real time data export from Rapid SCADA to DB. From 41b89d5baf9820d4f86c74141726afd25e151018 Mon Sep 17 00:00:00 2001 From: 2mik Date: Tue, 14 Nov 2017 17:21:49 +0300 Subject: [PATCH 18/61] ScadaDoc: update history --- .../content/ru/version-history/server-modules-history.html | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ScadaDoc/ScadaDoc/content/ru/version-history/server-modules-history.html b/ScadaDoc/ScadaDoc/content/ru/version-history/server-modules-history.html index 8d1516580..c2f4b9cae 100644 --- a/ScadaDoc/ScadaDoc/content/ru/version-history/server-modules-history.html +++ b/ScadaDoc/ScadaDoc/content/ru/version-history/server-modules-history.html @@ -37,6 +37,11 @@

Модуль автоматического управления

ModAutoControl 5.0.0.0 (04.03.2017) - Триггеры на данные каналов не срабатывают при запуске Сервера +
+ +

Экпорт в БД

+
ModDBExport 5.0.0.1 (В разработке)
+- Увеличено быстродействие за счёт использования транзакций
 

Быстрый шлюз

From 3075a68b2590397e09a4b21da09fbf6388b18aa5 Mon Sep 17 00:00:00 2001 From: 2mik Date: Sun, 19 Nov 2017 12:05:21 +0300 Subject: [PATCH 19/61] ScadaSchemeEditor: minor fix --- ScadaWeb/ScadaScheme/ScadaSchemeEditor/FrmMain.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeEditor/FrmMain.cs b/ScadaWeb/ScadaScheme/ScadaSchemeEditor/FrmMain.cs index a3cc03c3e..129eae069 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeEditor/FrmMain.cs +++ b/ScadaWeb/ScadaScheme/ScadaSchemeEditor/FrmMain.cs @@ -176,7 +176,7 @@ private void InitScheme(string fileName = "") } else { - loadOK = editor.LoadSchemeFromFile(ofdScheme.FileName, out errMsg); + loadOK = editor.LoadSchemeFromFile(fileName, out errMsg); } appData.AssignViewStamp(editor.SchemeView); From 9b2a68e5099abdbd80064f28b8eb4073d085d5c4 Mon Sep 17 00:00:00 2001 From: 2mik Date: Sun, 19 Nov 2017 18:27:10 +0300 Subject: [PATCH 20/61] ScadaSchemeEditor: fix web page path --- ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/Editor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/Editor.cs b/ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/Editor.cs index 5cef68e06..3454b4fd4 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/Editor.cs +++ b/ScadaWeb/ScadaScheme/ScadaSchemeEditor/AppCode/Editor.cs @@ -531,7 +531,7 @@ private void Scheme_ItemChanged(object sender, SchemeChangeTypes changeType, obj ///
public string GetWebPageFilePath(string webDir) { - return webDir + @"plugins\SchemeEditor\" + WebPageFileName; + return Path.Combine(webDir, "plugins", "SchemeEditor", WebPageFileName); } /// From 512be4fb2b0e02becd0589eef2ceacf7688e636f Mon Sep 17 00:00:00 2001 From: 2mik Date: Sun, 19 Nov 2017 18:46:51 +0300 Subject: [PATCH 21/61] Config: add Mono config --- .../ScadaComm/Config/ScadaCommSvcConfig.xml | 103 ++++++++++++++++++ .../Config/ScadaServerSvcConfig.xml | 37 +++++++ .../SCADA/ScadaWeb/config/WebSettings.xml | 37 +++++++ Config/DefaultMono/SCADA/scadarestart.sh | 6 + Config/DefaultMono/SCADA/scadastart.sh | 4 + Config/DefaultMono/SCADA/scadastop.sh | 4 + Config/DefaultMono/SCADA/svc_install.sh | 6 + Config/DefaultMono/SCADA/svc_uninstall.sh | 3 + Config/DefaultMono/SCADA/webrestart.sh | 2 + 9 files changed, 202 insertions(+) create mode 100644 Config/DefaultMono/SCADA/ScadaComm/Config/ScadaCommSvcConfig.xml create mode 100644 Config/DefaultMono/SCADA/ScadaServer/Config/ScadaServerSvcConfig.xml create mode 100644 Config/DefaultMono/SCADA/ScadaWeb/config/WebSettings.xml create mode 100644 Config/DefaultMono/SCADA/scadarestart.sh create mode 100644 Config/DefaultMono/SCADA/scadastart.sh create mode 100644 Config/DefaultMono/SCADA/scadastop.sh create mode 100644 Config/DefaultMono/SCADA/svc_install.sh create mode 100644 Config/DefaultMono/SCADA/svc_uninstall.sh create mode 100644 Config/DefaultMono/SCADA/webrestart.sh diff --git a/Config/DefaultMono/SCADA/ScadaComm/Config/ScadaCommSvcConfig.xml b/Config/DefaultMono/SCADA/ScadaComm/Config/ScadaCommSvcConfig.xml new file mode 100644 index 000000000..8cb19fc10 --- /dev/null +++ b/Config/DefaultMono/SCADA/ScadaComm/Config/ScadaCommSvcConfig.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Config/DefaultMono/SCADA/ScadaServer/Config/ScadaServerSvcConfig.xml b/Config/DefaultMono/SCADA/ScadaServer/Config/ScadaServerSvcConfig.xml new file mode 100644 index 000000000..81de0225a --- /dev/null +++ b/Config/DefaultMono/SCADA/ScadaServer/Config/ScadaServerSvcConfig.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Config/DefaultMono/SCADA/ScadaWeb/config/WebSettings.xml b/Config/DefaultMono/SCADA/ScadaWeb/config/WebSettings.xml new file mode 100644 index 000000000..7ea00e403 --- /dev/null +++ b/Config/DefaultMono/SCADA/ScadaWeb/config/WebSettings.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + "; StringBuilder sbHtml = new StringBuilder(); if (!string.IsNullOrEmpty(ChartScriptPath)) - sbHtml.AppendLine(string.Format(ScriptTemplate, VirtualPathUtility.ToAbsolute(ChartScriptPath))); + sbHtml.AppendLine(string.Format(WebUtils.ScriptTemplate, VirtualPathUtility.ToAbsolute(ChartScriptPath))); if (!string.IsNullOrEmpty(CmdScriptPath)) - sbHtml.AppendLine(string.Format(ScriptTemplate, VirtualPathUtility.ToAbsolute(CmdScriptPath))); + sbHtml.AppendLine(string.Format(WebUtils.ScriptTemplate, VirtualPathUtility.ToAbsolute(CmdScriptPath))); if (!string.IsNullOrEmpty(EventAckScriptPath)) - sbHtml.AppendLine(string.Format(ScriptTemplate, VirtualPathUtility.ToAbsolute(EventAckScriptPath))); + sbHtml.AppendLine(string.Format(WebUtils.ScriptTemplate, VirtualPathUtility.ToAbsolute(EventAckScriptPath))); return sbHtml.ToString(); } diff --git a/ScadaWeb/ScadaWebCommon5/WebUtils.cs b/ScadaWeb/ScadaWebCommon5/WebUtils.cs index 331adcf2c..584f6150c 100644 --- a/ScadaWeb/ScadaWebCommon5/WebUtils.cs +++ b/ScadaWeb/ScadaWebCommon5/WebUtils.cs @@ -42,6 +42,14 @@ public static partial class WebUtils /// public const string AppVersion = "5.0.3.0"; /// + /// Шиблон для вставки стилей на веб-страницу + /// + public const string StyleTemplate = ""; + /// + /// Шиблон для вставки скрипта на веб-страницу + /// + public const string ScriptTemplate = ""; + /// /// Начало отчёта времени в Unix, которое используется в Javascript реализации даты /// public static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); From 4ceea555975ff9d8c71394c85ed7f3ad5e4e8de1 Mon Sep 17 00:00:00 2001 From: 2mik Date: Wed, 29 Nov 2017 17:24:25 +0300 Subject: [PATCH 34/61] ScadaScheme: dev --- .../webstation-plugins-history.html | 5 +- .../AppCode/SchBasicComp/BasicCompLibSpec.cs | 28 ++++++++++ .../PlgScheme/plugins/Scheme/Scheme.aspx | 2 + .../PlgScheme/plugins/Scheme/Scheme.aspx.cs | 51 ++++++++++++++++++- .../ScadaSchemeCommon/CompLibSpec.cs | 24 +++++++++ .../ScadaSchemeCommon/CompManager.cs | 30 +++++++++++ .../ScadaSchemeEditor/AppCode/Editor.cs | 43 +++++++++++++--- .../Web/plugins/SchemeEditor/editor.html | 6 +-- 8 files changed, 177 insertions(+), 12 deletions(-) diff --git a/ScadaDoc/ScadaDoc/content/ru/version-history/webstation-plugins-history.html b/ScadaDoc/ScadaDoc/content/ru/version-history/webstation-plugins-history.html index ea2fac071..c1135e1ed 100644 --- a/ScadaDoc/ScadaDoc/content/ru/version-history/webstation-plugins-history.html +++ b/ScadaDoc/ScadaDoc/content/ru/version-history/webstation-plugins-history.html @@ -86,7 +86,10 @@

Таблицы

- Возможность отправки бинарных команд с выбором значений из списка

Схемы

-
PlgScheme 5.1.0.2 (12.07.2017)
+    
PlgScheme 5.2.0.0 (В разработке)
+- Поддержка библиотек компонентов схем
+
+PlgScheme 5.1.0.2 (12.07.2017)
 - Исправлена ошибка отображения динамических рисунков
 - Исправлена ошибка отсутствия прав при отправке команды из схемы
diff --git a/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/SchBasicComp/BasicCompLibSpec.cs b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/SchBasicComp/BasicCompLibSpec.cs index a3488377a..e97e46751 100644 --- a/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/SchBasicComp/BasicCompLibSpec.cs +++ b/ScadaWeb/ScadaScheme/PlgSchBasicComp/AppCode/SchBasicComp/BasicCompLibSpec.cs @@ -68,6 +68,34 @@ public override string GroupHeader } } + /// + /// Получить ссылки на файлы CSS, которые необходимы для работы компонентов + /// + public override List Styles + { + get + { + return new List() + { + "SchBasicComp/css/basiccomp.min.css" + }; + } + } + + /// + /// Получить ссылки на файлы JavaScript, которые необходимы для работы компонентов + /// + public override List Scripts + { + get + { + return new List() + { + "SchBasicComp/js/basiccomprender.js" + }; + } + } + /// /// Создать элементы списка компонентов diff --git a/ScadaWeb/ScadaScheme/PlgScheme/plugins/Scheme/Scheme.aspx b/ScadaWeb/ScadaScheme/PlgScheme/plugins/Scheme/Scheme.aspx index 20f6d6ea2..102e96590 100644 --- a/ScadaWeb/ScadaScheme/PlgScheme/plugins/Scheme/Scheme.aspx +++ b/ScadaWeb/ScadaScheme/PlgScheme/plugins/Scheme/Scheme.aspx @@ -10,6 +10,7 @@ + <%= compStyles %> @@ -19,6 +20,7 @@ + <%= compScripts %> "); + + // формирование содержимого веб-страницы + string webPageContent = string.Format(webPageTemplate, + sbCompStyles.ToString(), + sbCompScripts.ToString(), + sbEditorScript.ToString()); + // запись файла веб-страницы using (StreamWriter writer = new StreamWriter(GetWebPageFilePath(webDir), false, Encoding.UTF8)) { writer.Write(webPageContent); diff --git a/ScadaWeb/ScadaScheme/ScadaSchemeEditor/Web/plugins/SchemeEditor/editor.html b/ScadaWeb/ScadaScheme/ScadaSchemeEditor/Web/plugins/SchemeEditor/editor.html index 359d0c2e2..c6fd97f46 100644 --- a/ScadaWeb/ScadaScheme/ScadaSchemeEditor/Web/plugins/SchemeEditor/editor.html +++ b/ScadaWeb/ScadaScheme/ScadaSchemeEditor/Web/plugins/SchemeEditor/editor.html @@ -5,17 +5,17 @@ Scheme Editor +{0} +{1} - +{2}