Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 972e9d9c49 | |||
| 82b34d6e22 | |||
| 27a5a8f111 | |||
| c41964222c | |||
| 3d82b58326 | |||
| 81bc796ab5 | |||
| 620962cb1e | |||
| 55bbc80a3d | |||
| 8a9c6f477f |
@@ -4,6 +4,7 @@ using OpcUaCommon.Services;
|
||||
using OpcUaServer.Server.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IdentityModel;
|
||||
|
||||
namespace OpcUaServer.Server
|
||||
{
|
||||
|
||||
@@ -24,7 +24,7 @@ namespace OpcUaServer.Server.Services
|
||||
foreach (var baseDataVariableState in treeInstance.Variables)
|
||||
{
|
||||
Console.WriteLine("NODE PATH >>>> CHIAVE {0}", baseDataVariableState.Key);
|
||||
}
|
||||
}
|
||||
return treeInstance;
|
||||
}
|
||||
|
||||
|
||||
+5
-5
@@ -13,7 +13,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SOUR", "SOUR\SOUR.csproj",
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApp", "TestApp\TestApp.csproj", "{C26EADFE-AEC9-45EC-BAF4-C699721496F6}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XUnitTestSOUR", "XUnitTestSOUR\XUnitTestSOUR.csproj", "{AEE9C41C-3D40-4DC6-B898-2099D58661FA}"
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XUnitTestSOUR", "XUnitTestSOUR\XUnitTestSOUR.csproj", "{72E9A21C-6D52-471C-BA6F-EDDC8CDE8D74}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -41,10 +41,10 @@ Global
|
||||
{C26EADFE-AEC9-45EC-BAF4-C699721496F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C26EADFE-AEC9-45EC-BAF4-C699721496F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C26EADFE-AEC9-45EC-BAF4-C699721496F6}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{AEE9C41C-3D40-4DC6-B898-2099D58661FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{AEE9C41C-3D40-4DC6-B898-2099D58661FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{AEE9C41C-3D40-4DC6-B898-2099D58661FA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{AEE9C41C-3D40-4DC6-B898-2099D58661FA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{72E9A21C-6D52-471C-BA6F-EDDC8CDE8D74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{72E9A21C-6D52-471C-BA6F-EDDC8CDE8D74}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{72E9A21C-6D52-471C-BA6F-EDDC8CDE8D74}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{72E9A21C-6D52-471C-BA6F-EDDC8CDE8D74}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -0,0 +1,219 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ApplicationConfiguration
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:ua="http://opcfoundation.org/UA/2008/02/Types.xsd"
|
||||
xmlns="http://opcfoundation.org/UA/SDK/Configuration.xsd"
|
||||
>
|
||||
<ApplicationName>Server</ApplicationName>
|
||||
<ApplicationUri>urn:localhost:UA:Server</ApplicationUri>
|
||||
<ProductUri>uri:opcfoundation.org:Server</ProductUri>
|
||||
<ApplicationType>Server_0</ApplicationType>
|
||||
|
||||
<SecurityConfiguration>
|
||||
|
||||
<!-- Where the application instance certificate is stored (MachineDefault) -->
|
||||
<ApplicationCertificate>
|
||||
<StoreType>Directory</StoreType>
|
||||
<StorePath>%CommonApplicationData%\OPC Foundation\CertificateStores\MachineDefault</StorePath>
|
||||
<SubjectName>CN=SOUR SCM OPC UA Server, C=IT, S=Rimini, O=SCM Group, DC=localhost</SubjectName>
|
||||
</ApplicationCertificate>
|
||||
|
||||
<!-- Where the issuer certificate are stored (certificate authorities) -->
|
||||
<TrustedIssuerCertificates>
|
||||
<StoreType>Directory</StoreType>
|
||||
<StorePath>%CommonApplicationData%\OPC Foundation\CertificateStores\UA Certificate Authorities</StorePath>
|
||||
</TrustedIssuerCertificates>
|
||||
|
||||
<!-- Where the trust list is stored (UA Applications) -->
|
||||
<TrustedPeerCertificates>
|
||||
<StoreType>Directory</StoreType>
|
||||
<StorePath>%CommonApplicationData%\OPC Foundation\CertificateStores\UA Applications</StorePath>
|
||||
</TrustedPeerCertificates>
|
||||
|
||||
<!-- The directory used to store invalid certficates for later review by the administrator. -->
|
||||
<RejectedCertificateStore>
|
||||
<StoreType>Directory</StoreType>
|
||||
<StorePath>%CommonApplicationData%\OPC Foundation\CertificateStores\RejectedCertificates</StorePath>
|
||||
</RejectedCertificateStore>
|
||||
|
||||
<!-- WARNING: The following setting (to automatically accept untrusted certificates) should be used
|
||||
for easy debugging purposes ONLY and turned off for production deployments! -->
|
||||
<AutoAcceptUntrustedCertificates>false</AutoAcceptUntrustedCertificates>
|
||||
|
||||
<!-- WARNING: SHA1 signed certficates are by default rejected and should be phased out.
|
||||
The setting below to allow them is only required for UACTT (1.02.336.244) which uses SHA-1 signed certs. -->
|
||||
<RejectSHA1SignedCertificates>false</RejectSHA1SignedCertificates>
|
||||
<MinimumCertificateKeySize>2048</MinimumCertificateKeySize>
|
||||
|
||||
</SecurityConfiguration>
|
||||
|
||||
<TransportConfigurations></TransportConfigurations>
|
||||
<TransportQuotas>
|
||||
<OperationTimeout>600000</OperationTimeout>
|
||||
<MaxStringLength>1048576</MaxStringLength>
|
||||
<MaxByteStringLength>1048576</MaxByteStringLength>
|
||||
<MaxArrayLength>65535</MaxArrayLength>
|
||||
<MaxMessageSize>4194304</MaxMessageSize>
|
||||
<MaxBufferSize>65535</MaxBufferSize>
|
||||
<ChannelLifetime>300000</ChannelLifetime>
|
||||
<SecurityTokenLifetime>3600000</SecurityTokenLifetime>
|
||||
</TransportQuotas>
|
||||
<ServerConfiguration>
|
||||
<BaseAddresses>
|
||||
<ua:String>opc.tcp://127.0.0.1:62541/Server</ua:String>
|
||||
</BaseAddresses>
|
||||
<SecurityPolicies>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>SignAndEncrypt_3</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>Sign_2</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>None_1</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#None</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>Sign_2</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>SignAndEncrypt_3</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>Sign_2</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>SignAndEncrypt_3</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
</SecurityPolicies>
|
||||
|
||||
<MinRequestThreadCount>5</MinRequestThreadCount>
|
||||
<MaxRequestThreadCount>100</MaxRequestThreadCount>
|
||||
<MaxQueuedRequestCount>2000</MaxQueuedRequestCount>
|
||||
|
||||
<!-- The SDK expects the server to support the same set of user tokens for every endpoint. -->
|
||||
<UserTokenPolicies>
|
||||
<!-- Allows anonymous users -->
|
||||
<ua:UserTokenPolicy>
|
||||
<ua:TokenType>Anonymous_0</ua:TokenType>
|
||||
<ua:SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#None</ua:SecurityPolicyUri>
|
||||
</ua:UserTokenPolicy>
|
||||
|
||||
<!-- Allows username/password -->
|
||||
<ua:UserTokenPolicy>
|
||||
<ua:TokenType>UserName_1</ua:TokenType>
|
||||
<!-- passwords must be encrypted - this specifies what algorithm to use -->
|
||||
<ua:SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256</ua:SecurityPolicyUri>
|
||||
</ua:UserTokenPolicy>
|
||||
|
||||
<!-- Allows user certificates -->
|
||||
<ua:UserTokenPolicy>
|
||||
<ua:TokenType>Certificate_2</ua:TokenType>
|
||||
<!-- certificate possession must be proven with a digital signature - this specifies what algorithm to use -->
|
||||
<ua:SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256</ua:SecurityPolicyUri>
|
||||
</ua:UserTokenPolicy>
|
||||
</UserTokenPolicies>
|
||||
<DiagnosticsEnabled>false</DiagnosticsEnabled>
|
||||
<MaxSessionCount>100</MaxSessionCount>
|
||||
<MinSessionTimeout>10000</MinSessionTimeout>
|
||||
<MaxSessionTimeout>3600000</MaxSessionTimeout>
|
||||
<MaxBrowseContinuationPoints>10</MaxBrowseContinuationPoints>
|
||||
<MaxQueryContinuationPoints>10</MaxQueryContinuationPoints>
|
||||
<MaxHistoryContinuationPoints>100</MaxHistoryContinuationPoints>
|
||||
<MaxRequestAge>600000</MaxRequestAge>
|
||||
<MinPublishingInterval>100</MinPublishingInterval>
|
||||
<MaxPublishingInterval>3600000</MaxPublishingInterval>
|
||||
<PublishingResolution>50</PublishingResolution>
|
||||
<MaxSubscriptionLifetime>3600000</MaxSubscriptionLifetime>
|
||||
<MaxMessageQueueSize>100</MaxMessageQueueSize>
|
||||
<MaxNotificationQueueSize>100</MaxNotificationQueueSize>
|
||||
<MaxNotificationsPerPublish>1000</MaxNotificationsPerPublish>
|
||||
<MinMetadataSamplingInterval>1000</MinMetadataSamplingInterval>
|
||||
<AvailableSamplingRates>
|
||||
<SamplingRateGroup>
|
||||
<Start>5</Start>
|
||||
<Increment>5</Increment>
|
||||
<Count>20</Count>
|
||||
</SamplingRateGroup>
|
||||
<SamplingRateGroup>
|
||||
<Start>100</Start>
|
||||
<Increment>100</Increment>
|
||||
<Count>4</Count>
|
||||
</SamplingRateGroup>
|
||||
<SamplingRateGroup>
|
||||
<Start>500</Start>
|
||||
<Increment>250</Increment>
|
||||
<Count>2</Count>
|
||||
</SamplingRateGroup>
|
||||
<SamplingRateGroup>
|
||||
<Start>1000</Start>
|
||||
<Increment>500</Increment>
|
||||
<Count>20</Count>
|
||||
</SamplingRateGroup>
|
||||
</AvailableSamplingRates>
|
||||
|
||||
<RegistrationEndpoint>
|
||||
<ua:EndpointUrl>opc.tcp://localhost:4840</ua:EndpointUrl>
|
||||
<ua:Server>
|
||||
<ua:ApplicationUri>opc.tcp://localhost:4840</ua:ApplicationUri>
|
||||
<ua:ApplicationType>DiscoveryServer_3</ua:ApplicationType>
|
||||
<ua:DiscoveryUrls>
|
||||
<ua:String>opc.tcp://localhost:4840</ua:String>
|
||||
</ua:DiscoveryUrls>
|
||||
</ua:Server>
|
||||
<ua:SecurityMode>SignAndEncrypt_3</ua:SecurityMode>
|
||||
<ua:SecurityPolicyUri />
|
||||
<ua:UserIdentityTokens />
|
||||
</RegistrationEndpoint>
|
||||
|
||||
<MaxRegistrationInterval>0</MaxRegistrationInterval>
|
||||
<NodeManagerSaveFile>Server.nodes.xml</NodeManagerSaveFile>
|
||||
<MinSubscriptionLifetime>10000</MinSubscriptionLifetime>
|
||||
<MaxPublishRequestCount>20</MaxPublishRequestCount>
|
||||
<MaxSubscriptionCount>100</MaxSubscriptionCount>
|
||||
<MaxEventQueueSize>10000</MaxEventQueueSize>
|
||||
|
||||
<!-- see https://opcfoundation-onlineapplications.org/profilereporting/ for list of available profiles -->
|
||||
<ServerProfileArray>
|
||||
<ua:String>Standard UA Server Profile</ua:String>
|
||||
<ua:String>Data Access Server Facet</ua:String>
|
||||
<ua:String>Method Server Facet</ua:String>
|
||||
</ServerProfileArray>
|
||||
|
||||
<ShutdownDelay>5</ShutdownDelay>
|
||||
<ServerCapabilities>
|
||||
<ua:String>UA</ua:String>
|
||||
</ServerCapabilities>
|
||||
<SupportedPrivateKeyFormats>
|
||||
<ua:String>PFX</ua:String>
|
||||
<ua:String>PEM</ua:String>
|
||||
</SupportedPrivateKeyFormats>
|
||||
<MaxTrustListSize>0</MaxTrustListSize>
|
||||
<MultiCastDnsEnabled>false</MultiCastDnsEnabled>
|
||||
|
||||
</ServerConfiguration>
|
||||
|
||||
<TraceConfiguration>
|
||||
<OutputFilePath>Logs\Server.log.txt</OutputFilePath>
|
||||
<DeleteOnLoad>true</DeleteOnLoad>
|
||||
<!-- Show Only Errors -->
|
||||
<!-- <TraceMasks>1</TraceMasks> -->
|
||||
<!-- Show Only Security and Errors -->
|
||||
<!-- <TraceMasks>513</TraceMasks> -->
|
||||
<!-- Show Only Security, Errors and Trace -->
|
||||
<!-- <TraceMasks>515</TraceMasks> -->
|
||||
<!-- Show Only Security, COM Calls, Errors and Trace -->
|
||||
<!-- <TraceMasks>771</TraceMasks> -->
|
||||
<!-- Show Only Security, Service Calls, Errors and Trace -->
|
||||
<!-- <TraceMasks>523</TraceMasks> -->
|
||||
<!-- Show Only Security, ServiceResultExceptions, Errors and Trace -->
|
||||
<!-- <TraceMasks>519</TraceMasks> -->
|
||||
</TraceConfiguration>
|
||||
|
||||
</ApplicationConfiguration>
|
||||
@@ -114,23 +114,21 @@ namespace XUnitTestProject1
|
||||
[Fact]
|
||||
public void sanitizeTest()
|
||||
{
|
||||
XmlDocument xmlOrig = new XmlDocument();
|
||||
xmlOrig.LoadXml("DataModel.xml");
|
||||
string xmlOrig = System.IO.File.ReadAllText(@"C:\Users\simone.terzi\Documents\Repo\OPC-UA-REDIS\src\XUnitTestSOUR\DataModel.xml");
|
||||
|
||||
//calcolo lunghezza stringa in ingresso
|
||||
int lenghtOrig;
|
||||
//int lenghtOrig = xmlOrig.Length;
|
||||
//calcolo lunghezza stringa in ingresso...
|
||||
|
||||
int lenghtOrig = xmlOrig.Length;
|
||||
|
||||
//ne scrivo uno di test
|
||||
//XmlDocument xmlRes = DataHelper.xmlSanitize(xmlOrig);
|
||||
//ne scrivo uno di test...
|
||||
string xmlRes = DataHelper.xmlSanitize(xmlOrig);
|
||||
|
||||
//calcolo lunghezza stringa in uscita
|
||||
int lenghtRes;
|
||||
//int lenghtRes= xmlRes.Lenght;
|
||||
//calcolo lunghezza stringa in uscita...
|
||||
int lenghtRes= xmlRes.Length;
|
||||
|
||||
//bool b = lenghtRes <= lenghtOrig;
|
||||
|
||||
//Assert.True(b);
|
||||
//verifico che la stringa di output da sanitize sia di lunghezza <= a quella data in input...
|
||||
bool b = lenghtRes <= lenghtOrig;
|
||||
Assert.True(b);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,107 @@
|
||||
using System;
|
||||
using Xunit;
|
||||
using SOUR.Core;
|
||||
using OpcUaCommon.Services;
|
||||
using SOUR.Core.Model;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Xml;
|
||||
using SOUR.Core.Services;
|
||||
using OpcUaServer.Server;
|
||||
using OpcUaServer.Server.Services;
|
||||
|
||||
namespace XUnitTestProject1
|
||||
{
|
||||
/*
|
||||
public class RedisSampler
|
||||
{
|
||||
/// <summary>
|
||||
/// Lista delle proprietà in XML (Eliminare... sono costanti)
|
||||
/// </summary>
|
||||
protected List<MemDataItem> Properties;
|
||||
/// <summary>
|
||||
/// Lista delle variabili da XML
|
||||
/// </summary>
|
||||
protected List<MemDataItem> Variables;
|
||||
/// <summary>
|
||||
/// Lista delle condizioni di allarme da XML
|
||||
/// </summary>
|
||||
protected List<MemDataItem> Conditions;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DObbiamo testare 2 cose
|
||||
|
||||
1) creazione oggetto
|
||||
|
||||
2) creazione + start oggetto
|
||||
*/
|
||||
|
||||
|
||||
public class UTS_SourCoreRedisSampler
|
||||
{
|
||||
|
||||
public IPrinter _printer;
|
||||
public XmlParser _xmlParser=new XmlParser(new EventMessageRepository("..\\archive"));
|
||||
public ServerManagerDecorator ServerMD { get; private set; }
|
||||
/// <summary>
|
||||
/// FIle conf XML (da sostituire con quello scaricato da REDIS)
|
||||
/// </summary>
|
||||
|
||||
public string _xmlConfigurationPath = (@"C:\Users\simone.terzi\Documents\Repo\OPC-UA-REDIS\src\XUnitTestSOUR\DataModel.xml");
|
||||
public string _serverConfigurationFilePath = ("Server.Config.xml");
|
||||
//public string _serverConfigurationFilePath = (@"C:\Users\simone.terzi\Documents\Repo\OPC-UA-REDIS\src\XUnitTestSOUR\Server.Config.xml");
|
||||
|
||||
private readonly DataRecorder _recorder;
|
||||
protected MQTT_Client.confData _mqttConf;
|
||||
protected MQTT_Client _mqttCli;
|
||||
|
||||
private static void StartServer(IPrinter printer, ServerDecorator server, string serverConfigurationFilePath)
|
||||
{
|
||||
new ConsoleServerStarter(new ApplicationInstanceBuilder(printer, server), printer).Start(serverConfigurationFilePath);
|
||||
}
|
||||
|
||||
|
||||
protected IRedisSampler GetSampler(ServerDecorator server)
|
||||
{
|
||||
var nodesDictionary = _xmlParser.CreateDictionaryFromXmlToGenerateValues(_xmlConfigurationPath);
|
||||
|
||||
ServerMD = new ServerManagerDecorator(server);
|
||||
|
||||
return new RedisSampler(ServerMD, _xmlConfigurationPath, this._printer,
|
||||
nodesDictionary, new EventMessageMan(), _recorder, _mqttConf, _mqttCli);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CreateTest()
|
||||
{
|
||||
// metodi da start...
|
||||
_printer = new ConsoleLogPrinter(new IPrinter[] { new NullPrinter() });
|
||||
var server = new ServerDecorator(_printer, _xmlConfigurationPath);
|
||||
// avvio server
|
||||
StartServer(_printer, server, _serverConfigurationFilePath);
|
||||
|
||||
var redSampler = GetSampler(server);
|
||||
//controllo che il redSampler non sia nullo
|
||||
Assert.NotNull(redSampler);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void StartTest()
|
||||
{
|
||||
// metodi da start...
|
||||
_printer = new ConsoleLogPrinter(new IPrinter[] { new NullPrinter() });
|
||||
var server = new ServerDecorator(_printer, _xmlConfigurationPath);
|
||||
// avvio server
|
||||
StartServer(_printer, server, _serverConfigurationFilePath);
|
||||
|
||||
var redSampler = GetSampler(server);
|
||||
redSampler.Start();
|
||||
//controllo che il redSampler non sia nullo
|
||||
Assert.NotNull(redSampler);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -8,10 +8,14 @@
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="DataModel.xml" />
|
||||
<None Remove="Server.Config.xml" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="DataModel.xml" />
|
||||
<Content Include="Server.Config.xml">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -27,6 +31,8 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpcUaCommon\OpcUaCommon.csproj" />
|
||||
<ProjectReference Include="..\OpcUaServer.Server\OpcUaServer.Server.csproj" />
|
||||
<ProjectReference Include="..\SOUR.Core\SOUR.Core.csproj" />
|
||||
<ProjectReference Include="..\SOUR\SOUR.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
@@ -0,0 +1,189 @@
|
||||
<ModelDesign>
|
||||
<Machine>
|
||||
<Property SymbolicName="Model" BrowseName="Model" DataType="ua:String" ValueRank="Scalar" Value="ANTARES26/15-PX5" />
|
||||
<Property SymbolicName="Manufacturer" BrowseName="Manufacturer" DataType="ua:String" ValueRank="Scalar" Value="CMS Industries" />
|
||||
<Property SymbolicName="Serial" BrowseName="Serial" DataType="ua:String" ValueRank="Scalar" Value="9206" />
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="CNC_MACHINE" />
|
||||
<Property SymbolicName="BuildYear" BrowseName="BuildYear" DataType="ua:String" ValueRank="Scalar" Value="2019" />
|
||||
<Variable SymbolicName="Status" BrowseName="Status" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Variable SymbolicName="Alarm" BrowseName="Alarm" DataType="ua:Boolean" ValueRank="Scalar" Units="Bool" />
|
||||
<Variable SymbolicName="Emergency" BrowseName="Emergency" DataType="ua:Boolean" ValueRank="Scalar" Units="Bool" />
|
||||
<Variable SymbolicName="Power" BrowseName="Power" DataType="ua:Boolean" ValueRank="Scalar" Units="Bool" />
|
||||
<!--<Variable SymbolicName="Mode" BrowseName="Mode" DataType="ua:String" ValueRank="Scalar" Units="Enum" />-->
|
||||
<Variable SymbolicName="ActiveTime" BrowseName="ActiveTime" DataType="ua:Float" ValueRank="Scalar" Units="h" CmsDataType="CounterList" CmsDataIndex="001" CmsDataOpt="HOURS" />
|
||||
<Variable SymbolicName="ActiveWorkingTime" BrowseName="ActiveTime" DataType="ua:Float" ValueRank="Scalar" Units="h" CmsDataType="CounterList" CmsDataIndex="002" CmsDataOpt="HOURS" />
|
||||
|
||||
<Component Name="Cnc">
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="OSAI" />
|
||||
<Property SymbolicName="Version" BrowseName="Version" DataType="ua:String" ValueRank="Scalar" Value="2019" />
|
||||
<Condition SymbolicName="Condition" BrowseName="Condition" DataType="ua:String" ValueRank="Scalar" Type="OffNormalAlarmState" Units="" />
|
||||
<Component Name="CncProcesses">
|
||||
<Component Name="01">
|
||||
<Variable SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<!--<Variable SymbolicName="ActiveAxes" BrowseName="ActiveAxes" DataType="ua:String" ValueRank="Scalar" Units="" />-->
|
||||
<Variable SymbolicName="CodG" BrowseName="CodG" DataType="ua:String" ValueRank="Scalar" Units="" SGroup="2" VGroup="P" />
|
||||
<Variable SymbolicName="CodM" BrowseName="CodM" DataType="ua:String" ValueRank="Scalar" Units="" SGroup="2" VGroup="P" />
|
||||
<Variable SymbolicName="CodS" BrowseName="CodS" DataType="ua:String" ValueRank="Scalar" Units="" SGroup="2" VGroup="P" />
|
||||
<Variable SymbolicName="CodT" BrowseName="CodT" DataType="ua:String" ValueRank="Scalar" Units="" SGroup="2" VGroup="P" />
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:String" ValueRank="Scalar" Units="" />
|
||||
<Variable SymbolicName="TargetPos" BrowseName="TargetPos" DataType="ua:String" ValueRank="Scalar" Units="" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:String" ValueRank="Scalar" Units="m/min" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedOverride" BrowseName="FeedOverride" DataType="ua:String" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="RapidOverride" BrowseName="RapidOverride" DataType="ua:String" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="SpeedOverride" BrowseName="SpeedOverride" DataType="ua:String" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="Mode" BrowseName="Mode" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Variable SymbolicName="SubMode" BrowseName="SubMode" DataType="ua:String" ValueRank="Scalar" Units="" />
|
||||
<Variable SymbolicName="Status" BrowseName="Status" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
</Component>
|
||||
</Component>
|
||||
</Component>
|
||||
<Component Name="Plc">
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="SIEMENS" />
|
||||
<Property SymbolicName="Version" BrowseName="Version" DataType="ua:String" ValueRank="Scalar" Value="2019" />
|
||||
<Condition SymbolicName="Condition" BrowseName="Condition" DataType="ua:String" ValueRank="Scalar" Type="OffNormalAlarmState" Units="" />
|
||||
</Component>
|
||||
<Component Name="Hmi">
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="CMS Active" />
|
||||
<Property SymbolicName="Version" BrowseName="Version" DataType="ua:String" ValueRank="Scalar" Value="1.00.02" />
|
||||
<Condition SymbolicName="Condition" BrowseName="Condition" DataType="ua:String" ValueRank="Scalar" Type="OffNormalAlarmState" Units="" />
|
||||
<Variable SymbolicName="User" BrowseName="User" DataType="ua:String" ValueRank="Scalar" Units="" />
|
||||
<Variable SymbolicName="Language" BrowseName="Language" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Variable SymbolicName="ActiveSection" BrowseName="ActiveSection" DataType="ua:String" ValueRank="Scalar" Units="h" />
|
||||
<Variable SymbolicName="ActiveTimeSession" BrowseName="ActiveTimeSession" DataType="ua:String" ValueRank="Scalar" Units="" />
|
||||
</Component>
|
||||
<Component Name="Axes">
|
||||
<Component Name="01">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Variable SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Property SymbolicName="Role" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Variable SymbolicName="ActiveTime" BrowseName="ActiveTime" DataType="ua:Float" ValueRank="Scalar" Units="h" CmsDataType="CounterList" CmsDataIndex="026" CmsDataOpt="HOURS" />
|
||||
<Variable SymbolicName="Direction" BrowseName="Direction" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Variable SymbolicName="MasterId" BrowseName="Type" DataType="ua:UInt32" ValueRank="Scalar" Value="0" Units="NUM" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc" CmsDataType="AnalogData" CmsDataIndex="001" CmsDataOpt="NUM" />
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="TargetPos" BrowseName="TargetPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="4" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="Inversions" BrowseName="Inversions" DataType="ua:UInt32" ValueRank="Scalar" Units="Count" SGroup="4" DBand="1" VGroup="P" CmsDataType="CounterList" CmsDataIndex="005" CmsDataOpt="COUNT" />
|
||||
<Variable SymbolicName="Distance" BrowseName="Distance" DataType="ua:Float" ValueRank="Scalar" Units="Km" SGroup="4" DBand="1" VGroup="P" CmsDataType="CounterList" CmsDataIndex="004" CmsDataOpt="METER"/>
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedOverride" BrowseName="FeedOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="RapidOverride" BrowseName="RapidOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="ParentProc" BrowseName="ParentProc" DataType="ua:UInt32" ValueRank="Scalar" Units="" />
|
||||
</Component>
|
||||
<Component Name="02">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Variable SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Property SymbolicName="Role" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Variable SymbolicName="ActiveTime" BrowseName="ActiveTime" DataType="ua:Float" ValueRank="Scalar" Units="h" CmsDataType="CounterList" CmsDataIndex="027" CmsDataOpt="HOURS" />
|
||||
<Variable SymbolicName="Direction" BrowseName="Direction" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Variable SymbolicName="MasterId" BrowseName="Type" DataType="ua:UInt32" ValueRank="Scalar" Value="0" Units="NUM" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc" CmsDataType="AnalogData" CmsDataIndex="002" CmsDataOpt="NUM" />
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="TargetPos" BrowseName="TargetPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="4" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="Inversions" BrowseName="Inversions" DataType="ua:UInt32" ValueRank="Scalar" Units="Count" SGroup="4" DBand="1" VGroup="P" CmsDataType="CounterList" CmsDataIndex="007" CmsDataOpt="COUNT" />
|
||||
<Variable SymbolicName="Distance" BrowseName="Distance" DataType="ua:Float" ValueRank="Scalar" Units="Km" CmsDataType="CounterList" CmsDataIndex="006" CmsDataOpt="METER" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedOverride" BrowseName="FeedOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="RapidOverride" BrowseName="RapidOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="ParentProc" BrowseName="ParentProc" DataType="ua:UInt32" ValueRank="Scalar" Units="" />
|
||||
</Component>
|
||||
<Component Name="03">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Variable SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Property SymbolicName="Role" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Variable SymbolicName="ActiveTime" BrowseName="ActiveTime" DataType="ua:Float" ValueRank="Scalar" Units="h" CmsDataType="CounterList" CmsDataIndex="028" CmsDataOpt="HOURS" />
|
||||
<Variable SymbolicName="Direction" BrowseName="Direction" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Variable SymbolicName="MasterId" BrowseName="Type" DataType="ua:UInt32" ValueRank="Scalar" Value="0" Units="NUM" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc" CmsDataType="AnalogData" CmsDataIndex="003" CmsDataOpt="NUM" />
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="TargetPos" BrowseName="TargetPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="4" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="Inversions" BrowseName="Inversions" DataType="ua:UInt32" ValueRank="Scalar" Units="Count" SGroup="4" DBand="1" VGroup="P" CmsDataType="CounterList" CmsDataIndex="009" CmsDataOpt="COUNT" />
|
||||
<Variable SymbolicName="Distance" BrowseName="Distance" DataType="ua:Float" ValueRank="Scalar" Units="Km" SGroup="4" DBand="1" VGroup="P" CmsDataType="CounterList" CmsDataIndex="008" CmsDataOpt="METER" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedOverride" BrowseName="FeedOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="RapidOverride" BrowseName="RapidOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="ParentProc" BrowseName="ParentProc" DataType="ua:UInt32" ValueRank="Scalar" Units="" />
|
||||
</Component>
|
||||
<Component Name="04">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="ROTATIONAL" />
|
||||
<Variable SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Property SymbolicName="Role" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Variable SymbolicName="ActiveTime" BrowseName="ActiveTime" DataType="ua:Float" ValueRank="Scalar" Units="h" CmsDataType="CounterList" CmsDataIndex="029" CmsDataOpt="HOURS" />
|
||||
<Variable SymbolicName="Direction" BrowseName="Direction" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Variable SymbolicName="MasterId" BrowseName="Type" DataType="ua:UInt32" ValueRank="Scalar" Value="0" Units="NUM" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc" CmsDataType="AnalogData" CmsDataIndex="004" CmsDataOpt="NUM" />
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="deg" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="TargetPos" BrowseName="TargetPos" DataType="ua:Float" ValueRank="Scalar" Units="deg" SGroup="4" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="Inversions" BrowseName="Inversions" DataType="ua:UInt32" ValueRank="Scalar" Units="Count" SGroup="4" DBand="1" VGroup="P" CmsDataType="CounterList" CmsDataIndex="011" CmsDataOpt="COUNT" />
|
||||
<Variable SymbolicName="Distance" BrowseName="Distance" DataType="ua:Float" ValueRank="Scalar" Units="KRev" SGroup="4" DBand="1" VGroup="P" CmsDataType="CounterList" CmsDataIndex="010" CmsDataOpt="NUM" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="rpm/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedOverride" BrowseName="FeedOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="RapidOverride" BrowseName="RapidOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="ParentProc" BrowseName="ParentProc" DataType="ua:UInt32" ValueRank="Scalar" Units="" />
|
||||
</Component>
|
||||
<Component Name="05">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="ROTATIONAL" />
|
||||
<Variable SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Property SymbolicName="Role" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Variable SymbolicName="ActiveTime" BrowseName="ActiveTime" DataType="ua:Float" ValueRank="Scalar" Units="h" CmsDataType="CounterList" CmsDataIndex="030" CmsDataOpt="HOURS" />
|
||||
<Variable SymbolicName="Direction" BrowseName="Direction" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Variable SymbolicName="MasterId" BrowseName="Type" DataType="ua:UInt32" ValueRank="Scalar" Value="0" Units="NUM" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc" CmsDataType="AnalogData" CmsDataIndex="005" CmsDataOpt="NUM" />
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="deg" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="TargetPos" BrowseName="TargetPos" DataType="ua:Float" ValueRank="Scalar" Units="deg" SGroup="4" DBand="1" VGroup="P" />
|
||||
<Variable CmsDataType="CounterList" SymbolicName="Inversions" BrowseName="Inversions" DataType="ua:UInt32" ValueRank="Scalar" Units="Count" SGroup="4" DBand="1" VGroup="P" CmsDataIndex="013" CmsDataOpt="COUNT" />
|
||||
<Variable SymbolicName="Distance" BrowseName="Distance" DataType="ua:Float" ValueRank="Scalar" Units="KRev" SGroup="4" DBand="1" VGroup="P" CmsDataType="CounterList" CmsDataIndex="012" CmsDataOpt="NUM"/>
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="rpm/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedOverride" BrowseName="FeedOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="RapidOverride" BrowseName="RapidOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="ParentProc" BrowseName="ParentProc" DataType="ua:UInt32" ValueRank="Scalar" Units="" />
|
||||
</Component>
|
||||
<Component Name="06">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Variable SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Property SymbolicName="Role" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="SLAVE" />
|
||||
<Variable SymbolicName="ActiveTime" BrowseName="ActiveTime" DataType="ua:Float" ValueRank="Scalar" Units="h" CmsDataType="CounterList" CmsDataIndex="031" CmsDataOpt="HOURS" />
|
||||
<Variable SymbolicName="Direction" BrowseName="Direction" DataType="ua:String" ValueRank="Scalar" Units="Enum" />
|
||||
<Variable SymbolicName="MasterId" BrowseName="Type" DataType="ua:UInt32" ValueRank="Scalar" Value="1" Units="NUM" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc" CmsDataType="AnalogData" CmsDataIndex="006" CmsDataOpt="NUM" />
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="TargetPos" BrowseName="TargetPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="Inversions" BrowseName="Inversions" DataType="ua:UInt32" ValueRank="Scalar" Units="Count" SGroup="4" DBand="1" VGroup="P" CmsDataType="CounterList" CmsDataIndex="015" CmsDataOpt="COUNT" />
|
||||
<Variable SymbolicName="Distance" BrowseName="Distance" DataType="ua:Float" ValueRank="Scalar" Units="Km" SGroup="4" DBand="1" VGroup="P" CmsDataType="CounterList" CmsDataIndex="014" CmsDataOpt="METER"/>
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedOverride" BrowseName="FeedOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="RapidOverride" BrowseName="RapidOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="ParentProc" BrowseName="ParentProc" DataType="ua:UInt32" ValueRank="Scalar" Units="" />
|
||||
</Component>
|
||||
</Component>
|
||||
<Component Name="OperatingGroups">
|
||||
<Component Name="01">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="SPINDLE" />
|
||||
<Property SymbolicName="Model" BrowseName="Model" DataType="ua:String" ValueRank="Scalar" Value="CMS-SPINDLE-01" />
|
||||
<Variable SymbolicName="Status" BrowseName="Status" DataType="ua:String" ValueRank="Scalar" Units="Enum" CmsDataType="StatusList" CmsDataIndex="006" CmsDataOpt="BIT" />
|
||||
<Variable SymbolicName="Distance" BrowseName="Distance" DataType="ua:Float" ValueRank="Scalar" Units="Krev" CmsDataType="CounterList" CmsDataIndex="016" CmsDataOpt="NUM" />
|
||||
<Variable SymbolicName="ActiveTime" BrowseName="ActiveTime" DataType="ua:Float" ValueRank="Scalar" Units="h" CmsDataType="CounterList" CmsDataIndex="016" CmsDataOpt="HOURS" />
|
||||
<Variable SymbolicName="SpeedRate" BrowseName="SpeedRate" DataType="ua:UInt32" ValueRank="Scalar" Units="rpm" />
|
||||
<Variable SymbolicName="SpeedOverride" BrowseName="SpeedOverride" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc" />
|
||||
<Variable SymbolicName="ToolChanges" BrowseName="ToolChanges" DataType="ua:Float" ValueRank="Scalar" Units="Count" CmsDataType="CounterList" CmsDataIndex="025" CmsDataOpt="NUM" />
|
||||
<Variable SymbolicName="ToolId" BrowseName="ToolId" DataType="ua:Float" ValueRank="Scalar" Units="" />
|
||||
<Variable SymbolicName="ParentProc" BrowseName="ParentProc" DataType="ua:UInt32" ValueRank="Scalar" Units="" />
|
||||
</Component>
|
||||
</Component>
|
||||
<Component Name="AuxiliaryGroups">
|
||||
<Component Name="01">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LUBRO" />
|
||||
<Variable SymbolicName="Repetitions" BrowseName="Repetitions" DataType="ua:Float" ValueRank="Scalar" Units="Count" CmsDataType="CounterList" CmsDataIndex="021" CmsDataOpt="NUM" />
|
||||
</Component>
|
||||
<Component Name="02">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="VACUUM_PUMP" />
|
||||
<Variable SymbolicName="Status" BrowseName="Status" DataType="ua:String" ValueRank="Scalar" Units="Enum" CmsDataType="StatusList" CmsDataIndex="002" CmsDataOpt="BIT" />
|
||||
<Variable SymbolicName="ActiveTime" BrowseName="ActiveTime" DataType="ua:Float" ValueRank="Scalar" Units="h" CmsDataType="CounterList" CmsDataIndex="017" CmsDataOpt="HOURS" />
|
||||
</Component>
|
||||
<Component Name="03">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="VACUUM_ACT" />
|
||||
<Variable SymbolicName="Repetitions" BrowseName="Repetitions" DataType="ua:Float" ValueRank="Scalar" Units="Count" CmsDataType="CounterList" CmsDataIndex="019" CmsDataOpt="NUM" />
|
||||
</Component>
|
||||
</Component>
|
||||
</Machine>
|
||||
</ModelDesign>
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// Le informazioni generali relative a un assembly sono controllate dal seguente
|
||||
// set di attributi. Modificare i valori di questi attributi per modificare le informazioni
|
||||
// associate a un assembly.
|
||||
[assembly: AssemblyTitle("xUnitTestSOUR")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("xUnitTestSOUR")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2019")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Se si imposta ComVisible su false, i tipi in questo assembly non saranno visibili
|
||||
// ai componenti COM. Se è necessario accedere a un tipo in questo assembly da
|
||||
// COM, impostare su true l'attributo ComVisible per tale tipo.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// Se il progetto viene esposto a COM, il GUID seguente verrà utilizzato come ID della libreria dei tipi
|
||||
[assembly: Guid("6a68226f-c5f2-4a04-ab31-4ad4b69a40d2")]
|
||||
|
||||
// Le informazioni sulla versione di un assembly sono costituite dai seguenti quattro valori:
|
||||
//
|
||||
// Versione principale
|
||||
// Versione secondaria
|
||||
// Numero di build
|
||||
// Revisione
|
||||
//
|
||||
// È possibile specificare tutti i valori oppure impostare valori predefiniti per i numeri relativi alla revisione e alla build
|
||||
// usando l'asterisco '*' come illustrato di seguito:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,219 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<ApplicationConfiguration
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xmlns:ua="http://opcfoundation.org/UA/2008/02/Types.xsd"
|
||||
xmlns="http://opcfoundation.org/UA/SDK/Configuration.xsd"
|
||||
>
|
||||
<ApplicationName>Server</ApplicationName>
|
||||
<ApplicationUri>urn:localhost:UA:Server</ApplicationUri>
|
||||
<ProductUri>uri:opcfoundation.org:Server</ProductUri>
|
||||
<ApplicationType>Server_0</ApplicationType>
|
||||
|
||||
<SecurityConfiguration>
|
||||
|
||||
<!-- Where the application instance certificate is stored (MachineDefault) -->
|
||||
<ApplicationCertificate>
|
||||
<StoreType>Directory</StoreType>
|
||||
<StorePath>%CommonApplicationData%\OPC Foundation\CertificateStores\MachineDefault</StorePath>
|
||||
<SubjectName>CN=SOUR SCM OPC UA Server, C=IT, S=Rimini, O=SCM Group, DC=localhost</SubjectName>
|
||||
</ApplicationCertificate>
|
||||
|
||||
<!-- Where the issuer certificate are stored (certificate authorities) -->
|
||||
<TrustedIssuerCertificates>
|
||||
<StoreType>Directory</StoreType>
|
||||
<StorePath>%CommonApplicationData%\OPC Foundation\CertificateStores\UA Certificate Authorities</StorePath>
|
||||
</TrustedIssuerCertificates>
|
||||
|
||||
<!-- Where the trust list is stored (UA Applications) -->
|
||||
<TrustedPeerCertificates>
|
||||
<StoreType>Directory</StoreType>
|
||||
<StorePath>%CommonApplicationData%\OPC Foundation\CertificateStores\UA Applications</StorePath>
|
||||
</TrustedPeerCertificates>
|
||||
|
||||
<!-- The directory used to store invalid certficates for later review by the administrator. -->
|
||||
<RejectedCertificateStore>
|
||||
<StoreType>Directory</StoreType>
|
||||
<StorePath>%CommonApplicationData%\OPC Foundation\CertificateStores\RejectedCertificates</StorePath>
|
||||
</RejectedCertificateStore>
|
||||
|
||||
<!-- WARNING: The following setting (to automatically accept untrusted certificates) should be used
|
||||
for easy debugging purposes ONLY and turned off for production deployments! -->
|
||||
<AutoAcceptUntrustedCertificates>false</AutoAcceptUntrustedCertificates>
|
||||
|
||||
<!-- WARNING: SHA1 signed certficates are by default rejected and should be phased out.
|
||||
The setting below to allow them is only required for UACTT (1.02.336.244) which uses SHA-1 signed certs. -->
|
||||
<RejectSHA1SignedCertificates>false</RejectSHA1SignedCertificates>
|
||||
<MinimumCertificateKeySize>2048</MinimumCertificateKeySize>
|
||||
|
||||
</SecurityConfiguration>
|
||||
|
||||
<TransportConfigurations></TransportConfigurations>
|
||||
<TransportQuotas>
|
||||
<OperationTimeout>600000</OperationTimeout>
|
||||
<MaxStringLength>1048576</MaxStringLength>
|
||||
<MaxByteStringLength>1048576</MaxByteStringLength>
|
||||
<MaxArrayLength>65535</MaxArrayLength>
|
||||
<MaxMessageSize>4194304</MaxMessageSize>
|
||||
<MaxBufferSize>65535</MaxBufferSize>
|
||||
<ChannelLifetime>300000</ChannelLifetime>
|
||||
<SecurityTokenLifetime>3600000</SecurityTokenLifetime>
|
||||
</TransportQuotas>
|
||||
<ServerConfiguration>
|
||||
<BaseAddresses>
|
||||
<ua:String>opc.tcp://127.0.0.1:62541/Server</ua:String>
|
||||
</BaseAddresses>
|
||||
<SecurityPolicies>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>SignAndEncrypt_3</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>Sign_2</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>None_1</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#None</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>Sign_2</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic128Rsa15</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>SignAndEncrypt_3</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>Sign_2</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
<ServerSecurityPolicy>
|
||||
<SecurityMode>SignAndEncrypt_3</SecurityMode>
|
||||
<SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256</SecurityPolicyUri>
|
||||
</ServerSecurityPolicy>
|
||||
</SecurityPolicies>
|
||||
|
||||
<MinRequestThreadCount>5</MinRequestThreadCount>
|
||||
<MaxRequestThreadCount>100</MaxRequestThreadCount>
|
||||
<MaxQueuedRequestCount>2000</MaxQueuedRequestCount>
|
||||
|
||||
<!-- The SDK expects the server to support the same set of user tokens for every endpoint. -->
|
||||
<UserTokenPolicies>
|
||||
<!-- Allows anonymous users -->
|
||||
<ua:UserTokenPolicy>
|
||||
<ua:TokenType>Anonymous_0</ua:TokenType>
|
||||
<ua:SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#None</ua:SecurityPolicyUri>
|
||||
</ua:UserTokenPolicy>
|
||||
|
||||
<!-- Allows username/password -->
|
||||
<ua:UserTokenPolicy>
|
||||
<ua:TokenType>UserName_1</ua:TokenType>
|
||||
<!-- passwords must be encrypted - this specifies what algorithm to use -->
|
||||
<ua:SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256</ua:SecurityPolicyUri>
|
||||
</ua:UserTokenPolicy>
|
||||
|
||||
<!-- Allows user certificates -->
|
||||
<ua:UserTokenPolicy>
|
||||
<ua:TokenType>Certificate_2</ua:TokenType>
|
||||
<!-- certificate possession must be proven with a digital signature - this specifies what algorithm to use -->
|
||||
<ua:SecurityPolicyUri>http://opcfoundation.org/UA/SecurityPolicy#Basic256</ua:SecurityPolicyUri>
|
||||
</ua:UserTokenPolicy>
|
||||
</UserTokenPolicies>
|
||||
<DiagnosticsEnabled>false</DiagnosticsEnabled>
|
||||
<MaxSessionCount>100</MaxSessionCount>
|
||||
<MinSessionTimeout>10000</MinSessionTimeout>
|
||||
<MaxSessionTimeout>3600000</MaxSessionTimeout>
|
||||
<MaxBrowseContinuationPoints>10</MaxBrowseContinuationPoints>
|
||||
<MaxQueryContinuationPoints>10</MaxQueryContinuationPoints>
|
||||
<MaxHistoryContinuationPoints>100</MaxHistoryContinuationPoints>
|
||||
<MaxRequestAge>600000</MaxRequestAge>
|
||||
<MinPublishingInterval>100</MinPublishingInterval>
|
||||
<MaxPublishingInterval>3600000</MaxPublishingInterval>
|
||||
<PublishingResolution>50</PublishingResolution>
|
||||
<MaxSubscriptionLifetime>3600000</MaxSubscriptionLifetime>
|
||||
<MaxMessageQueueSize>100</MaxMessageQueueSize>
|
||||
<MaxNotificationQueueSize>100</MaxNotificationQueueSize>
|
||||
<MaxNotificationsPerPublish>1000</MaxNotificationsPerPublish>
|
||||
<MinMetadataSamplingInterval>1000</MinMetadataSamplingInterval>
|
||||
<AvailableSamplingRates>
|
||||
<SamplingRateGroup>
|
||||
<Start>5</Start>
|
||||
<Increment>5</Increment>
|
||||
<Count>20</Count>
|
||||
</SamplingRateGroup>
|
||||
<SamplingRateGroup>
|
||||
<Start>100</Start>
|
||||
<Increment>100</Increment>
|
||||
<Count>4</Count>
|
||||
</SamplingRateGroup>
|
||||
<SamplingRateGroup>
|
||||
<Start>500</Start>
|
||||
<Increment>250</Increment>
|
||||
<Count>2</Count>
|
||||
</SamplingRateGroup>
|
||||
<SamplingRateGroup>
|
||||
<Start>1000</Start>
|
||||
<Increment>500</Increment>
|
||||
<Count>20</Count>
|
||||
</SamplingRateGroup>
|
||||
</AvailableSamplingRates>
|
||||
|
||||
<RegistrationEndpoint>
|
||||
<ua:EndpointUrl>opc.tcp://localhost:4840</ua:EndpointUrl>
|
||||
<ua:Server>
|
||||
<ua:ApplicationUri>opc.tcp://localhost:4840</ua:ApplicationUri>
|
||||
<ua:ApplicationType>DiscoveryServer_3</ua:ApplicationType>
|
||||
<ua:DiscoveryUrls>
|
||||
<ua:String>opc.tcp://localhost:4840</ua:String>
|
||||
</ua:DiscoveryUrls>
|
||||
</ua:Server>
|
||||
<ua:SecurityMode>SignAndEncrypt_3</ua:SecurityMode>
|
||||
<ua:SecurityPolicyUri />
|
||||
<ua:UserIdentityTokens />
|
||||
</RegistrationEndpoint>
|
||||
|
||||
<MaxRegistrationInterval>0</MaxRegistrationInterval>
|
||||
<NodeManagerSaveFile>Server.nodes.xml</NodeManagerSaveFile>
|
||||
<MinSubscriptionLifetime>10000</MinSubscriptionLifetime>
|
||||
<MaxPublishRequestCount>20</MaxPublishRequestCount>
|
||||
<MaxSubscriptionCount>100</MaxSubscriptionCount>
|
||||
<MaxEventQueueSize>10000</MaxEventQueueSize>
|
||||
|
||||
<!-- see https://opcfoundation-onlineapplications.org/profilereporting/ for list of available profiles -->
|
||||
<ServerProfileArray>
|
||||
<ua:String>Standard UA Server Profile</ua:String>
|
||||
<ua:String>Data Access Server Facet</ua:String>
|
||||
<ua:String>Method Server Facet</ua:String>
|
||||
</ServerProfileArray>
|
||||
|
||||
<ShutdownDelay>5</ShutdownDelay>
|
||||
<ServerCapabilities>
|
||||
<ua:String>UA</ua:String>
|
||||
</ServerCapabilities>
|
||||
<SupportedPrivateKeyFormats>
|
||||
<ua:String>PFX</ua:String>
|
||||
<ua:String>PEM</ua:String>
|
||||
</SupportedPrivateKeyFormats>
|
||||
<MaxTrustListSize>0</MaxTrustListSize>
|
||||
<MultiCastDnsEnabled>false</MultiCastDnsEnabled>
|
||||
|
||||
</ServerConfiguration>
|
||||
|
||||
<TraceConfiguration>
|
||||
<OutputFilePath>Logs\Server.log.txt</OutputFilePath>
|
||||
<DeleteOnLoad>true</DeleteOnLoad>
|
||||
<!-- Show Only Errors -->
|
||||
<!-- <TraceMasks>1</TraceMasks> -->
|
||||
<!-- Show Only Security and Errors -->
|
||||
<!-- <TraceMasks>513</TraceMasks> -->
|
||||
<!-- Show Only Security, Errors and Trace -->
|
||||
<!-- <TraceMasks>515</TraceMasks> -->
|
||||
<!-- Show Only Security, COM Calls, Errors and Trace -->
|
||||
<!-- <TraceMasks>771</TraceMasks> -->
|
||||
<!-- Show Only Security, Service Calls, Errors and Trace -->
|
||||
<!-- <TraceMasks>523</TraceMasks> -->
|
||||
<!-- Show Only Security, ServiceResultExceptions, Errors and Trace -->
|
||||
<!-- <TraceMasks>519</TraceMasks> -->
|
||||
</TraceConfiguration>
|
||||
|
||||
</ApplicationConfiguration>
|
||||
@@ -0,0 +1,205 @@
|
||||
using System;
|
||||
using Xunit;
|
||||
using SOUR.Core;
|
||||
using OpcUaCommon.Services;
|
||||
using System.Text;
|
||||
using System.Globalization;
|
||||
using SOUR.Core.Services;
|
||||
using System.Reflection;
|
||||
using System.Threading;
|
||||
using System.IO;
|
||||
|
||||
|
||||
namespace xUnitTestSOUR
|
||||
{
|
||||
public class UTS_SourCoreApplicationStarter
|
||||
{
|
||||
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
* Questa classe deve fare i test dei metodi pubblici di ApplicationStarter.cs
|
||||
*
|
||||
* In particolare vanno testati 3 metodi pubblici:
|
||||
* - ApplicationStarter
|
||||
* - Start
|
||||
* - GetSampler
|
||||
*
|
||||
* Andiamo a definire i test di
|
||||
* - creazione oggetti in modo corretto (passando parametri) --> assert success
|
||||
* - creazione oggetti in modo NON corretto (es non passando parametri) --> assert fail
|
||||
* - avvio metodo SENZA ERRORI (assert success)
|
||||
* - avvio ultimo metodo con oggetto restituito valido
|
||||
*
|
||||
* mod: 2019.07.23 S.Terzi
|
||||
* mod: 2019.07.24 S.E. Locatelli
|
||||
* mod: 2019.07.24 S.Terzi
|
||||
* mod: 2019.07.25 S.Terzi
|
||||
* mod: 2019.07.26 S.Terzi
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#region helpers e utility
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Effettua se abilitata registrazione apertura file con dt stop
|
||||
/// </summary>
|
||||
/// <param name="recorder"></param>
|
||||
private static void recorderStart(DataRecorder recorder)
|
||||
{
|
||||
if (true)
|
||||
{
|
||||
// provo a scrivere nel dataRecorder...
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine("#-----------------------------------------#");
|
||||
sb.AppendLine(string.Format("# Versione : v_{0}", Assembly.GetExecutingAssembly().GetName().Version));
|
||||
sb.AppendLine(string.Format("# Rec Start: {0:yyyy.MM.dd HH:mm:ss}", DateTime.Now));
|
||||
sb.AppendLine("#-----------------------------------------#");
|
||||
recorder.Print(sb.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Effettua se abilitata registrazione chiusura file con dt stop
|
||||
/// </summary>
|
||||
/// <param name="recorder"></param>
|
||||
private static void recorderClose(DataRecorder recorder)
|
||||
{
|
||||
if (true)
|
||||
{
|
||||
// salvo chiusura recorder
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine("#-----------------------------------------#");
|
||||
sb.AppendLine(string.Format("# Rec Stop: {0:yyyy.MM.dd HH:mm:ss}", DateTime.Now));
|
||||
sb.AppendLine("#-----------------------------------------#");
|
||||
recorder.Print(sb.ToString());
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Init console stsandard
|
||||
/// </summary>
|
||||
private static void initConsole()
|
||||
{
|
||||
// 2019.02.10 imposto culture EN + UTF8...
|
||||
Console.OutputEncoding = Encoding.UTF8;
|
||||
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
|
||||
CultureInfo.DefaultThreadCurrentCulture = culture;
|
||||
CultureInfo.DefaultThreadCurrentUICulture = culture;
|
||||
Thread.CurrentThread.CurrentCulture = culture;
|
||||
Thread.CurrentThread.CurrentUICulture = culture;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ApplicationStarterInitRecorder()
|
||||
{
|
||||
initConsole();
|
||||
|
||||
// avvio logprinter...
|
||||
var printer = new ConsoleLogPrinter(new IPrinter[] { new ConsolePrinter() });
|
||||
|
||||
string recFile = string.Format(@"{0}Rec\SOUR_{1:yyyyMMdd_HHmmss}.log", AppDomain.CurrentDomain.BaseDirectory, DateTime.Now);
|
||||
|
||||
// oggetto recorder
|
||||
var recorder = new DataRecorder(recFile);
|
||||
recorderStart(recorder);
|
||||
// verifico che il file esista e abbia almeno 1 riga contenuta...
|
||||
Assert.NotNull(recorder);
|
||||
// pulizia...
|
||||
File.Delete(recFile);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ApplicationStarterInitFile()
|
||||
{
|
||||
initConsole();
|
||||
|
||||
// avvio logprinter...
|
||||
var printer = new ConsoleLogPrinter(new IPrinter[] { new ConsolePrinter() });
|
||||
|
||||
string recFile = string.Format(@"{0}Rec\SOUR_{1:yyyyMMdd_HHmmss}.log", AppDomain.CurrentDomain.BaseDirectory, DateTime.Now);
|
||||
|
||||
// oggetto recorder
|
||||
var recorder = new DataRecorder(recFile);
|
||||
recorderStart(recorder);
|
||||
// verifico che il file esista e abbia almeno 1 riga contenuta...
|
||||
Assert.True(File.Exists(recFile));
|
||||
// pulizia...
|
||||
File.Delete(recFile);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void ApplicationStarterInitFail()
|
||||
{
|
||||
|
||||
initConsole();
|
||||
|
||||
// avvio logprinter... ma NULLA
|
||||
var printer = new ConsoleLogPrinter(new IPrinter[] { new NullPrinter() });
|
||||
|
||||
string recFile = string.Format(@"{0}Rec\SOUR_{1:yyyyMMdd_HHmmss}.log",
|
||||
AppDomain.CurrentDomain.BaseDirectory, DateTime.Now);
|
||||
|
||||
|
||||
// singolo file giornaliero in DEBUG locale...
|
||||
recFile = string.Format(@"{0}Rec\SOUR_{1:yyyyMMdd}.log", AppDomain.CurrentDomain.BaseDirectory, DateTime.Now);
|
||||
|
||||
// oggetto recorder
|
||||
var recorder = new DataRecorder(recFile);
|
||||
recorderStart(recorder);
|
||||
// init MQTT
|
||||
MQTT_Client.confData currConfig = new MQTT_Client.confData();
|
||||
currConfig = new MQTT_Client.confData();
|
||||
|
||||
try
|
||||
{
|
||||
printer.Print("***** SOUR.S (SCM OpcUa Redis SERVER) started... *****");
|
||||
|
||||
string xmlConfigurationPath = memLayer.man.confReadString("DataModelPath");
|
||||
|
||||
// init application starter
|
||||
var appStart = new ApplicationStarter(printer, xmlConfigurationPath, new XmlParser(new EventMessageRepository("..\\archive")), null, recorder, currConfig);
|
||||
|
||||
// avvio
|
||||
appStart.Start();
|
||||
|
||||
|
||||
|
||||
// chiusura
|
||||
printer.Print("***** SOUR.S closed... *****");
|
||||
// chiudo rec SE abilitata
|
||||
recorderClose(recorder);
|
||||
|
||||
// salvo chiusura...
|
||||
DataHelper.sendRedisStop();
|
||||
|
||||
var expected = typeof(SOUR.Core.ApplicationStarter);
|
||||
Assert.IsType(expected, appStart);
|
||||
// pulizia...
|
||||
File.Delete(recFile);
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
printer.Print("**** Error *****");
|
||||
printer.Print(ex.ToString());
|
||||
Console.ReadLine();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
using System;
|
||||
using Xunit;
|
||||
using SOUR.Core;
|
||||
using SOUR.Core.Services;
|
||||
using System.Xml;
|
||||
|
||||
namespace xUnitTestSOUR
|
||||
{
|
||||
|
||||
public class UTS_SourCoreDataHelper
|
||||
{
|
||||
/// <summary>
|
||||
/// Formato output timestamp
|
||||
/// </summary>
|
||||
protected static string dataFormat = "yyyy-MM-dd\\THH:mm:ss.fffK";
|
||||
// !!!TDB!!! provare questo formato ma ha 7 decimali...
|
||||
//protected string dataFormat = "O";
|
||||
|
||||
/// <summary>
|
||||
/// Timestamp formattato...
|
||||
/// </summary>
|
||||
protected static string timestamp
|
||||
{
|
||||
get
|
||||
{
|
||||
return DateTime.UtcNow.ToString(dataFormat);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// TTL eventi BREVI (15 sec)
|
||||
/// </summary>
|
||||
public static int shortTTL = 15;
|
||||
/// <summary>
|
||||
/// TTL eventi LUNGI (5 minuto)
|
||||
/// </summary>
|
||||
public static int longTTL = 300;
|
||||
|
||||
/// <summary>
|
||||
/// classe gestione accessi a Session, cache, viewstate, configuration...
|
||||
/// </summary>
|
||||
|
||||
|
||||
|
||||
|
||||
[Fact]
|
||||
public void redisSendTest()
|
||||
{
|
||||
// setup valori
|
||||
string currKey = "";
|
||||
string expected = "1.2.3.4";
|
||||
currKey = memLayer.man.redHash("Srv:Vers");
|
||||
// leggo il valore de versione da redis
|
||||
string currVers = memLayer.man.getRSV(currKey);
|
||||
// ne scrivo uno di test
|
||||
DataHelper.sendRedisStart(expected);
|
||||
|
||||
// rileggo
|
||||
string newVal = memLayer.man.getRSV(currKey);
|
||||
|
||||
// controllo sia corretto
|
||||
Assert.Equal(newVal, expected);
|
||||
|
||||
// riscrivo valore iniziale
|
||||
memLayer.man.setRSV(currKey, currVers);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void redisStopTest()
|
||||
{
|
||||
//setup valori
|
||||
string currKey= "";
|
||||
string expected = "stopped";
|
||||
currKey = memLayer.man.redHash("Srv:Status");
|
||||
|
||||
// ne scrivo uno di test
|
||||
DataHelper.sendRedisStop();
|
||||
|
||||
//rileggo
|
||||
string newVal = memLayer.man.getRSV(currKey);
|
||||
|
||||
//controllo
|
||||
Assert.Equal(expected, newVal);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void redisHBeatTest()
|
||||
{
|
||||
// test dell'hearbeat: priam di tutto lo invoco e verifico abbia scritto una delel chiavi di controllo, poia ttendo 15 sec e ricontrollo se sia scomparsa...
|
||||
|
||||
//setup valori
|
||||
string currKey = memLayer.man.redHash("Srv:Status");
|
||||
//ne scrivo uno di test
|
||||
DataHelper.sendRedisHBeat();
|
||||
|
||||
// leggo valore scritto
|
||||
string newVal = memLayer.man.getRSV(currKey);
|
||||
|
||||
//test con valore "running"
|
||||
Assert.Equal("running", newVal);
|
||||
//attesa 15 sec
|
||||
System.Threading.Thread.Sleep(15000);
|
||||
// rileggo --> mi aspetto null...
|
||||
newVal = memLayer.man.getRSV(currKey);
|
||||
//test 2
|
||||
Assert.Null(newVal);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// qui fai il iltest che la funzione sanitize restituisca una stringa di lunghezza <= di quella in ingresso, che DOVREBBE essere un XML letto da file...
|
||||
|
||||
[Fact]
|
||||
public void sanitizeTest()
|
||||
{
|
||||
string xmlOrig = System.IO.File.ReadAllText(@"C:\Users\simone.terzi\Documents\Repo\OPC-UA-REDIS\src\XUnitTestSOUR\DataModel.xml");
|
||||
|
||||
//calcolo lunghezza stringa in ingresso...
|
||||
|
||||
int lenghtOrig = xmlOrig.Length;
|
||||
|
||||
//ne scrivo uno di test...
|
||||
string xmlRes = DataHelper.xmlSanitize(xmlOrig);
|
||||
|
||||
//calcolo lunghezza stringa in uscita...
|
||||
int lenghtRes= xmlRes.Length;
|
||||
|
||||
//verifico che la stringa di output da sanitize sia di lunghezza <= a quella data in input...
|
||||
bool b = lenghtRes <= lenghtOrig;
|
||||
Assert.True(b);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
using System;
|
||||
using Xunit;
|
||||
using SOUR.Core;
|
||||
using OpcUaCommon.Services;
|
||||
using SOUR.Core.Model;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Xml;
|
||||
using SOUR.Core.Services;
|
||||
using OpcUaServer.Server;
|
||||
using OpcUaServer.Server.Services;
|
||||
|
||||
namespace xUnitTestSOUR
|
||||
{
|
||||
/*
|
||||
public class RedisSampler
|
||||
{
|
||||
/// <summary>
|
||||
/// Lista delle proprietà in XML (Eliminare... sono costanti)
|
||||
/// </summary>
|
||||
protected List<MemDataItem> Properties;
|
||||
/// <summary>
|
||||
/// Lista delle variabili da XML
|
||||
/// </summary>
|
||||
protected List<MemDataItem> Variables;
|
||||
/// <summary>
|
||||
/// Lista delle condizioni di allarme da XML
|
||||
/// </summary>
|
||||
protected List<MemDataItem> Conditions;
|
||||
}
|
||||
Dobbiamo testare 2 cose
|
||||
|
||||
1) creazione oggetto
|
||||
|
||||
2) creazione + start oggetto
|
||||
*/
|
||||
|
||||
|
||||
public class UTS_SourCoreRedisSampler
|
||||
{
|
||||
|
||||
public IPrinter _printer;
|
||||
public XmlParser _xmlParser=new XmlParser(new EventMessageRepository("..\\archive"));
|
||||
public ServerManagerDecorator ServerMD { get; private set; }
|
||||
/// <summary>
|
||||
/// FIle conf XML (da sostituire con quello scaricato da REDIS)
|
||||
/// </summary>
|
||||
|
||||
public string _xmlConfigurationPath = (@"C:\Users\simone.terzi\Documents\Repo\OPC-UA-REDIS\src\XUnitTestSOUR\DataModel.xml");
|
||||
public string _serverConfigurationFilePath = ("Server.Config.xml");
|
||||
//public string _serverConfigurationFilePath = (@"C:\Users\simone.terzi\Documents\Repo\OPC-UA-REDIS\src\XUnitTestSOUR\Server.Config.xml");
|
||||
|
||||
private readonly DataRecorder _recorder;
|
||||
protected MQTT_Client.confData _mqttConf;
|
||||
protected MQTT_Client _mqttCli;
|
||||
|
||||
private static void StartServer(IPrinter printer, ServerDecorator server, string serverConfigurationFilePath)
|
||||
{
|
||||
new ConsoleServerStarter(new ApplicationInstanceBuilder(printer, server), printer).Start(serverConfigurationFilePath);
|
||||
}
|
||||
|
||||
|
||||
protected IRedisSampler GetSampler(ServerDecorator server)
|
||||
{
|
||||
var nodesDictionary = _xmlParser.CreateDictionaryFromXmlToGenerateValues(_xmlConfigurationPath);
|
||||
|
||||
ServerMD = new ServerManagerDecorator(server);
|
||||
|
||||
return new RedisSampler(ServerMD, _xmlConfigurationPath, this._printer,
|
||||
nodesDictionary, new EventMessageMan(), _recorder, _mqttConf, _mqttCli);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CreateTest()
|
||||
{
|
||||
// metodi da start...
|
||||
_printer = new ConsoleLogPrinter(new IPrinter[] { new NullPrinter() });
|
||||
var server = new ServerDecorator(_printer, _xmlConfigurationPath);
|
||||
// avvio server
|
||||
StartServer(_printer, server, _serverConfigurationFilePath);
|
||||
|
||||
var redSampler = GetSampler(server);
|
||||
//controllo che il redSampler non sia nullo
|
||||
Assert.NotNull(redSampler);
|
||||
}
|
||||
|
||||
|
||||
[Fact]
|
||||
public void StartTest()
|
||||
{
|
||||
// metodi da start...
|
||||
_printer = new ConsoleLogPrinter(new IPrinter[] { new NullPrinter() });
|
||||
var server = new ServerDecorator(_printer, _xmlConfigurationPath);
|
||||
// avvio server
|
||||
StartServer(_printer, server, _serverConfigurationFilePath);
|
||||
|
||||
var redSampler = GetSampler(server);
|
||||
redSampler.Start();
|
||||
//controllo che il redSampler non sia nullo
|
||||
Assert.NotNull(redSampler);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.1" newVersion="4.0.3.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.AspNetCore.Http" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.2.2.0" newVersion="2.2.2.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.2.1.0" newVersion="2.2.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.4.0" newVersion="4.1.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Cryptography.Cng" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="BouncyCastle.Crypto" publicKeyToken="0e99375e54769942" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.8.5.0" newVersion="1.8.5.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.AspNetCore.Http.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.AspNetCore.Hosting.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.AspNetCore.Server.Kestrel.Https" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.AspNetCore.Server.Kestrel" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Primitives" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.AspNetCore.Hosting" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.AspNetCore.Http.Features" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.IO.Pipelines" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="xunit" version="2.4.1" targetFramework="net461" />
|
||||
<package id="xunit.abstractions" version="2.0.3" targetFramework="net461" />
|
||||
<package id="xunit.analyzers" version="0.10.0" targetFramework="net461" />
|
||||
<package id="xunit.assert" version="2.4.1" targetFramework="net461" />
|
||||
<package id="xunit.core" version="2.4.1" targetFramework="net461" />
|
||||
<package id="xunit.extensibility.core" version="2.4.1" targetFramework="net461" />
|
||||
<package id="xunit.extensibility.execution" version="2.4.1" targetFramework="net461" />
|
||||
</packages>
|
||||
@@ -0,0 +1,108 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\xunit.core.2.4.1\build\xunit.core.props" Condition="Exists('..\packages\xunit.core.2.4.1\build\xunit.core.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{6A68226F-C5F2-4A04-AB31-4AD4B69A40D2}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>xUnitTestSOUR</RootNamespace>
|
||||
<AssemblyName>xUnitTestSOUR</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
<TargetFrameworkProfile />
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="xunit.abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\xunit.abstractions.2.0.3\lib\net35\xunit.abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="xunit.assert, Version=2.4.1.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\xunit.assert.2.4.1\lib\netstandard1.1\xunit.assert.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="xunit.core, Version=2.4.1.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\xunit.extensibility.core.2.4.1\lib\net452\xunit.core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="xunit.execution.desktop, Version=2.4.1.0, Culture=neutral, PublicKeyToken=8d05b1bb7a6fdb6c, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\xunit.extensibility.execution.2.4.1\lib\net452\xunit.execution.desktop.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="UTS_SourCoreApplicationStarter.cs" />
|
||||
<Compile Include="UTS_SourCoreDataHelper.cs" />
|
||||
<Compile Include="UTS_SourCoreRedisSampler.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="DataModel.xml" />
|
||||
<Content Include="Server.Config.xml">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
<None Include="packages.config" />
|
||||
<None Include="Rec\.placeholder">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpcUaCommon\OpcUaCommon.csproj">
|
||||
<Project>{4c09fe6b-20fe-4a16-8443-f8be8ae0849a}</Project>
|
||||
<Name>OpcUaCommon</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\OpcUaServer.Server\OpcUaServer.Server.csproj">
|
||||
<Project>{1e81f982-2e67-4f37-9d0d-c1e1f2c3c415}</Project>
|
||||
<Name>OpcUaServer.Server</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\SOUR.Core\SOUR.Core.csproj">
|
||||
<Project>{c91082e5-3ec7-4ae7-b2f1-c7c194a02165}</Project>
|
||||
<Name>SOUR.Core</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\SOUR\SOUR.csproj">
|
||||
<Project>{a924c997-f587-429a-a492-867460320b81}</Project>
|
||||
<Name>SOUR</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Analyzer Include="..\packages\xunit.analyzers.0.10.0\analyzers\dotnet\cs\xunit.analyzers.dll" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>Questo progetto fa riferimento a uno o più pacchetti NuGet che non sono presenti in questo computer. Usare lo strumento di ripristino dei pacchetti NuGet per scaricarli. Per altre informazioni, vedere http://go.microsoft.com/fwlink/?LinkID=322105. Il file mancante è {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\xunit.core.2.4.1\build\xunit.core.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\xunit.core.2.4.1\build\xunit.core.props'))" />
|
||||
<Error Condition="!Exists('..\packages\xunit.core.2.4.1\build\xunit.core.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\xunit.core.2.4.1\build\xunit.core.targets'))" />
|
||||
</Target>
|
||||
<Import Project="..\packages\xunit.core.2.4.1\build\xunit.core.targets" Condition="Exists('..\packages\xunit.core.2.4.1\build\xunit.core.targets')" />
|
||||
</Project>
|
||||
Reference in New Issue
Block a user