Merge branch 'develop'
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50">
|
||||
<path d="M 24.90625 1.96875 A 1.0001 1.0001 0 0 0 24.78125 2 A 1.0001 1.0001 0 0 0 24 3 L 24 23.5625 L 16.71875 16.28125 A 1.0001 1.0001 0 0 0 15.78125 16 A 1.0001 1.0001 0 0 0 15.28125 17.71875 L 24.28125 26.71875 A 1.0001 1.0001 0 0 0 25.71875 26.71875 L 34.71875 17.71875 A 1.016466 1.016466 0 1 0 33.28125 16.28125 L 26 23.5625 L 26 3 A 1.0001 1.0001 0 0 0 24.90625 1.96875 z M 9.6875 7 C 8.7552773 7 8.0273614 7.6377344 7.84375 8.53125 L 7.8125 8.53125 L 7.8125 8.59375 L 2.125 33.34375 C 2.0520996 33.549675 2 33.77114 2 34 L 2 44 C 2 45.093063 2.9069372 46 4 46 L 46 46 C 47.093063 46 48 45.093063 48 44 L 48 34 C 48 33.747229 47.931836 33.5052 47.84375 33.28125 L 47.84375 33.21875 C 47.838222 33.205825 47.818292 33.200289 47.8125 33.1875 L 42.1875 8.59375 L 42.1875 8.53125 L 42.15625 8.53125 C 41.972365 7.6364104 41.244723 7 40.3125 7 L 29 7 L 29 9 L 40.21875 9 L 45.46875 32 L 4.46875 32 L 9.78125 9 L 21 9 L 21 7 L 9.6875 7 z M 4 34 L 46 34 L 46 44 L 4 44 L 4 34 z M 40 37 C 38.895 37 38 37.896 38 39 C 38 40.104 38.895 41 40 41 C 41.105 41 42 40.104 42 39 C 42 37.896 41.105 37 40 37 z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 34 KiB |
@@ -0,0 +1,169 @@
|
||||
pipeline {
|
||||
agent none
|
||||
environment {
|
||||
EMAIL_RECIPIENTS = 'samuele@steamware.net'
|
||||
}
|
||||
stages {
|
||||
stage('Checkout') {
|
||||
agent any
|
||||
steps {
|
||||
|
||||
/* calcolo numero versione... diverso x branch MASTER/DEVELOP */
|
||||
script {
|
||||
withEnv(['NEXT_BUILD_NUMBER=288']) {
|
||||
// env.versionNumber = VersionNumber(versionNumberString : '2.3.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true)
|
||||
env.versionNumber = VersionNumber(versionNumberString : '2.3.${BUILD_DATE_FORMATTED, "yyMM"}.${BUILDS_ALL_TIME}', projectStartDate : '2006-01-01', skipFailedBuilds: true, overrideBuildsAllTime: '${NEXT_BUILD_NUMBER}')
|
||||
env.APP_NAME = 'SOUR'
|
||||
}
|
||||
}
|
||||
script {
|
||||
currentBuild.displayName = "${env.versionNumber}"
|
||||
if (env.BRANCH_NAME == "develop" || env.BRANCH_NAME.contains("DEMO") || env.BRANCH_NAME.contains("UnitTesting")) {
|
||||
currentBuild.description = "TEST ${env.versionNumber}"
|
||||
}
|
||||
else {
|
||||
currentBuild.description = "BUILD ${env.versionNumber}"
|
||||
}
|
||||
}
|
||||
|
||||
/* CAMBIO numero versione in file sorgente!!! */
|
||||
bat "e:\\fart.exe src\\SharedAssemblyInfo.cs 1.0.0.0 ${env.versionNumber} || EXIT /B 0"
|
||||
}
|
||||
}
|
||||
stage('Build') {
|
||||
agent any
|
||||
steps {
|
||||
script {
|
||||
// calcolo il config...
|
||||
if (env.BRANCH_NAME == "develop") {
|
||||
env.config = "Debug"
|
||||
}
|
||||
else if (env.BRANCH_NAME == "master") {
|
||||
env.config = "Release"
|
||||
}
|
||||
|
||||
// compilo installers in base al BRANCH...
|
||||
if (env.BRANCH_NAME == "develop" || env.BRANCH_NAME == "master") {
|
||||
// CAMBIO numero versione in file sorgente!!!
|
||||
bat "e:\\fart.exe src\\SharedAssemblyInfo.cs 1.0.0.0 ${env.versionNumber} || EXIT /B 0"
|
||||
// restore nuget packages
|
||||
bat "e:\\nuget.exe restore ${WORKSPACE}\\src\\SOUR.sln"
|
||||
// BUILD Develop!
|
||||
bat "\"${tool 'MSBuild-16.0'}\" src/SOUR/SOUR.csproj -target:Build /p:Configuration=${env.config} /p:Platform=\"x86\" /p:OutputPath=bin/${env.config}/ /m"
|
||||
}
|
||||
else {
|
||||
echo 'NON faccio test di Build se non per BRANCH DEVELOP...'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stage('Test') {
|
||||
steps {
|
||||
echo 'Testing.. 2 be done...'
|
||||
}
|
||||
}
|
||||
stage('Deploy') {
|
||||
agent any
|
||||
steps {
|
||||
// in primis compilo a seconda del branch... TUTTO tranne develop...
|
||||
script {
|
||||
// calcolo il config...
|
||||
if (env.BRANCH_NAME == "develop") {
|
||||
env.config = "Debug"
|
||||
env.classifier = "unstable"
|
||||
}
|
||||
else if (env.BRANCH_NAME == "master") {
|
||||
env.config = "Release"
|
||||
env.classifier = ""
|
||||
}
|
||||
// procedo solo se NON si tratta di commit in ramo UnitTesting...
|
||||
if (env.BRANCH_NAME != "UnitTesting") {
|
||||
// CAMBIO numero versione in file sorgente!!!
|
||||
bat "e:\\fart.exe src\\SharedAssemblyInfo.cs 1.0.0.0 ${env.versionNumber} || EXIT /B 0"
|
||||
// restore nuget packages
|
||||
bat "e:\\nuget.exe restore ${WORKSPACE}\\src\\SOUR.sln"
|
||||
// BUILD!
|
||||
bat "\"${tool 'MSBuild-16.0'}\" src/SOUR/SOUR.csproj -target:Build /p:Configuration=${env.config} /p:Platform=\"x86\" /p:OutputPath=bin/ /m"
|
||||
// creo installer MSI...
|
||||
bat "\"${tool 'MSBuild-16.0'}\" src/SOUR.Setup/SOUR.Setup.wixproj /p:Configuration=${env.config} /p:ProdVersion=${env.versionNumber} /p:Platform=\"x86\" /p:OutputPath=bin/ /m"
|
||||
}
|
||||
else
|
||||
{
|
||||
echo 'Nessun Deploy x UnitTesting'
|
||||
}
|
||||
}
|
||||
// ora mi occupo delle operazioni di invio a NEXUS...
|
||||
script {
|
||||
|
||||
if (env.BRANCH_NAME != "UnitTesting") {
|
||||
nexusArtifactUploader(
|
||||
nexusVersion: 'nexus3',
|
||||
protocol: 'https',
|
||||
nexusUrl: 'repository.scmgroup.com',
|
||||
//groupId: 'SOUR',
|
||||
version: "${env.versionNumber}",
|
||||
repository: 'mconnect-raw',
|
||||
credentialsId: 'b1dcea22-0d35-4092-80a1-973e6be41c78',
|
||||
artifacts: [
|
||||
[artifactId: 'SOUR',
|
||||
classifier: "${env.classifier}",
|
||||
file: "src\\SOUR.Setup\\bin\\SOUR.msi",
|
||||
type: 'msi']
|
||||
]
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
post {
|
||||
success {
|
||||
sendSlack("Successful", "good")
|
||||
}
|
||||
failure {
|
||||
sendSlack("Failed", "danger")
|
||||
}
|
||||
unstable {
|
||||
sendSlack("Unstable", "warning")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@NonCPS
|
||||
def getChangeString() {
|
||||
MAX_MSG_LEN = 100
|
||||
def changeString = ""
|
||||
|
||||
echo "Gathering SCM changes"
|
||||
def changeLogSets = currentBuild.changeSets
|
||||
for (int i = 0; i < changeLogSets.size(); i++) {
|
||||
def entries = changeLogSets[i].items
|
||||
for (int j = 0; j < entries.length; j++) {
|
||||
def entry = entries[j]
|
||||
truncated_msg = entry.msg.take(MAX_MSG_LEN)
|
||||
changeString += " - ${truncated_msg} [${entry.author}]\n"
|
||||
}
|
||||
}
|
||||
|
||||
if (!changeString) {
|
||||
changeString = " - Nessuna Modifica"
|
||||
}
|
||||
return changeString
|
||||
}
|
||||
|
||||
def sendEmail(status) {
|
||||
mail (
|
||||
to: "$EMAIL_RECIPIENTS",
|
||||
subject: "Build $BUILD_NUMBER - " + status + " ($JOB_NAME)",
|
||||
body: "Modifiche:\n " + getChangeString() + "\n\n Verifica console output: $BUILD_URL/console" + "\n")
|
||||
}
|
||||
|
||||
// Funzione x invio slack
|
||||
def sendSlack(status, colorCode) {
|
||||
slackSend (
|
||||
color: colorCode,
|
||||
channel: "#sour-dev",
|
||||
message: "${env.JOB_NAME} ${env.versionNumber} | " + status + ": Build ${env.BUILD_NUMBER}\n\n" +
|
||||
"Modifiche:\n " + getChangeString() + "\n\n Verifica build: <${env.BUILD_URL}|Apri>" + "\n"
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.28010.2019
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LogParser", ".\LogParser\LogParser.csproj", "{A49A795D-11BD-4CC9-9EEE-CC995696608B}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{A49A795D-11BD-4CC9-9EEE-CC995696608B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A49A795D-11BD-4CC9-9EEE-CC995696608B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A49A795D-11BD-4CC9-9EEE-CC995696608B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A49A795D-11BD-4CC9-9EEE-CC995696608B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {37E62FCE-44DF-48DA-8B57-C4B2253B0B2C}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
|
||||
</startup>
|
||||
</configuration>
|
||||
@@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{A49A795D-11BD-4CC9-9EEE-CC995696608B}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>LogParser</RootNamespace>
|
||||
<AssemblyName>LogParser</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>true</Deterministic>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<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" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
<None Include="packages.config" />
|
||||
<None Include="Resources\example.csv" />
|
||||
<None Include="Resources\rawData.log" />
|
||||
<None Include="rawData.log">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Resources\AppuntiFormato.txt" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -0,0 +1,251 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.IO;
|
||||
//using System.Collections.Generic;
|
||||
//using System.Linq;
|
||||
//using System.Text;
|
||||
//using System.Threading.Tasks;
|
||||
|
||||
namespace ANTLR_LogParser
|
||||
{
|
||||
class Program
|
||||
{
|
||||
|
||||
public static int numEventId = 1000;
|
||||
static void Main(string[] args)
|
||||
{
|
||||
string fileInName = "rawData.log";
|
||||
string fileOutName = "dataStream.csv";
|
||||
bool doWrite = true;
|
||||
Console.WriteLine("--------------------------------------------");
|
||||
Console.WriteLine("SOUR LOG CONVERTER");
|
||||
Console.WriteLine("--------------------------------------------");
|
||||
Console.WriteLine(string.Format("Conversione file: {0} --> {1}", fileInName, fileOutName));
|
||||
|
||||
// carica da file...
|
||||
StreamReader fileIn = new StreamReader(fileInName);
|
||||
StreamWriter fileOut = new StreamWriter(fileOutName);
|
||||
|
||||
// header preliminare...
|
||||
string headLine = "\"CreatedAt\",\"PlugId\",\"Channel\",\"ExpiresOn\",\"ReadOnly\",\"DataValues\"";
|
||||
Console.WriteLine(headLine);
|
||||
if (doWrite)
|
||||
{
|
||||
fileOut.WriteLine(headLine);
|
||||
}
|
||||
// leggo 1 linea alla volta...
|
||||
string lineaIn;
|
||||
string lineaOut;
|
||||
string[] words;
|
||||
string lineaInProc = "";
|
||||
while ((lineaIn = fileIn.ReadLine()) != null)
|
||||
{
|
||||
lineaInProc = "";
|
||||
if (lineaIn.Length > 10)
|
||||
{
|
||||
words = lineaIn.Split(' ');
|
||||
// switch su 6° blocco...
|
||||
if (words.Length > 6)
|
||||
{
|
||||
switch (words[5])
|
||||
{
|
||||
case ">>>>":
|
||||
// preprocesso sostituzioni
|
||||
lineaInProc = doSubstCond(lineaIn);
|
||||
// INIZIO ALLARME
|
||||
lineaOut = formatCondition(lineaInProc, true);
|
||||
if (doWrite)
|
||||
{
|
||||
fileOut.WriteLine(lineaOut);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(lineaOut);
|
||||
}
|
||||
break;
|
||||
case "<<<<":
|
||||
// preprocesso sostituzioni
|
||||
lineaInProc = doSubstCond(lineaIn);
|
||||
// FINE ALLARME
|
||||
lineaOut = formatCondition(lineaInProc, false);
|
||||
if (doWrite)
|
||||
{
|
||||
fileOut.WriteLine(lineaOut);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(lineaOut);
|
||||
}
|
||||
break;
|
||||
case "DATA":
|
||||
// preprocesso sostituzioni
|
||||
lineaInProc = doSubst(lineaIn);
|
||||
// variazione valore
|
||||
lineaOut = formatVariable(lineaInProc);
|
||||
// filtro FORZAT x conditions...
|
||||
if (!(lineaOut.Contains("ns=2;s=Machine/PLC") || lineaOut.Contains("ns=2;s=Machine/CNC")))
|
||||
{
|
||||
if (doWrite)
|
||||
{
|
||||
fileOut.WriteLine(lineaOut);
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine(lineaOut);
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// commenti o altro, non faccio nulla
|
||||
break;
|
||||
}
|
||||
}
|
||||
//// SOLO SE è una riga con dati pertineti la scrivo...
|
||||
//if (words[5] == ">>>>>")
|
||||
//{
|
||||
// Console.WriteLine(linea);
|
||||
//}
|
||||
}
|
||||
}
|
||||
// chiudo file
|
||||
fileIn.Close();
|
||||
fileOut.Flush();
|
||||
fileOut.Close();
|
||||
Console.WriteLine("END PROCEDURE");
|
||||
}
|
||||
/// <summary>
|
||||
/// Effettuo sostituzioni cablate x naming sbagliato
|
||||
/// </summary>
|
||||
/// <param name="lineaIn"></param>
|
||||
/// <returns></returns>
|
||||
private static string doSubst(string lineaIn)
|
||||
{
|
||||
string answ = lineaIn;
|
||||
answ = answ.Replace("isEmergencyState", "EmergencyState");
|
||||
answ = answ.Replace("isExecutingState", "ExecutionState");
|
||||
answ = answ.Replace("isHoldState", "HoldState");
|
||||
answ = answ.Replace("Path/01/RunMode", "Mode");
|
||||
answ = answ.Replace("inversions", "Inversions");
|
||||
answ = answ.Replace("currentAng", "CurrentAng");
|
||||
answ = answ.Replace("targetAng", "TargetAng");
|
||||
answ = answ.Replace("spindeActiveDuration", "SpindeActiveDuration");
|
||||
answ = answ.Replace("load", "Load");
|
||||
answ = answ.Replace("speed", "Speed");
|
||||
answ = answ.Replace("spindleRevs", "SpindleRevs");
|
||||
answ = answ.Replace("toolId", "ToolId");
|
||||
answ = answ.Replace("toolChanges", "ToolChanges");
|
||||
answ = answ.Replace("VacuumPump1", "VacuumPump/VacuumPump_1");
|
||||
answ = answ.Replace("VacuumPump2", "VacuumPump/VacuumPump_2");
|
||||
answ = answ.Replace("Lube1", "Lubro/Lube1");
|
||||
answ = answ.Replace("WorkingArea1", "WorkingArea/Area_1");
|
||||
answ = answ.Replace("Program", "Program_1");
|
||||
answ = answ.Replace("name", "Name");
|
||||
answ = answ.Replace("repsLeft", "RepsLeft");
|
||||
answ = answ.Replace("feedRate", "FeedRate");
|
||||
answ = answ.Replace("override", "Override");
|
||||
answ = answ.Replace("currentPos", "CurrentPos");
|
||||
answ = answ.Replace("distance", "Distance");
|
||||
answ = answ.Replace("targetPos", "TargetPos");
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettuo sostituzioni cablate x naming sbagliato
|
||||
/// </summary>
|
||||
/// <param name="lineaIn"></param>
|
||||
/// <returns></returns>
|
||||
private static string doSubstCond(string lineaIn)
|
||||
{
|
||||
string answ = lineaIn;
|
||||
answ = answ.Replace(": 900", ": 500");
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Calcola il valore EPOCH corrispondente
|
||||
/// </summary>
|
||||
/// <param name="szDataRif"></param>
|
||||
/// <returns></returns>
|
||||
private static long getUnixEpoch(string szDataRif)
|
||||
{
|
||||
DateTime dataRif = DateTime.ParseExact(szDataRif, "yyyy-MM-dd HH:mm:ss,fff", null);
|
||||
var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||
long epochSec = Convert.ToInt64((dataRif - epoch).TotalSeconds);
|
||||
return epochSec;
|
||||
}
|
||||
/// <summary>
|
||||
/// Formatta riga x variabili
|
||||
/// </summary>
|
||||
/// <param name="linea"></param>
|
||||
/// <returns></returns>
|
||||
public static string formatVariable(string linea)
|
||||
{
|
||||
#if false
|
||||
//"2018-08-24T11:43:27.006Z","dev-5b22299cc35d6e9a01f290c9","Machine/ReadyState","","","{""q"":0,""st"":1535111038798,""k"":""ns=2;s=Machine/ReadyState"",""v"":true,""ts"":1535110906933}"
|
||||
//string strFormatVar = @"""{0}T{1}Z"",""dev-CMS-SOUR"",""{2}"","""","""",""{""""q"""":0,""""st"""":{3},""""k"""":""""ns=2;s={4}"""",""""v"""":{5},""""ts"""":{3}}""";
|
||||
#endif
|
||||
// out var
|
||||
string answ = "";
|
||||
// formato
|
||||
string strFormatVar = @"""{0}T{1}Z"",""dev-CMS-SOUR"",""{2}"","""","""",""";
|
||||
// splitto linea
|
||||
string[] words = linea.Split(' ');
|
||||
// calcolo vari parametri
|
||||
string szDataRif = words[0] + " " + words[1];
|
||||
long epochSec = getUnixEpoch(szDataRif);
|
||||
// formatto la componente JSon
|
||||
string jsonPLoad = JsonConvert.SerializeObject(new { q = 0, st = epochSec, k = "ns=2;s=" + words[7], v = words[9], ts = epochSec });
|
||||
try
|
||||
{
|
||||
// sostituisco variabili nel formato indicato
|
||||
answ = string.Format(strFormatVar, words[0], words[1].Replace(",", "."), words[7], epochSec, words[9]);
|
||||
answ += jsonPLoad.Replace("\"", "\"\"") + "\"";
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Formatta riga x Conditions allarmi
|
||||
/// </summary>
|
||||
/// <param name="linea"></param>
|
||||
/// <param name="active"></param>
|
||||
/// <returns></returns>
|
||||
public static string formatCondition(string linea, bool active)
|
||||
{
|
||||
#if false
|
||||
"2018-08-24T12:11:34.592Z","dev-5b22299cc35d6e9a01f290c9","Machine/Condition/PLC/152","","","{""k"":""PLC"",""ts"":""2018-08-24T12:12:04Z"",""v"":""EMERGENCY STOP PUSH-BUTTON PRESSED"",""severity"":""900"",""eventType"":""AlarmConditionType"",""eventId"":""134076472320496700576454373114770234103"",""conditionName"":""152"",""activeState"":""Active""}"
|
||||
#endif
|
||||
|
||||
// out var
|
||||
string answ = "";
|
||||
// formato generale
|
||||
string strFormatVar = @"""{0}T{1}Z"",""dev-CMS-SOUR"",""{2}"","""","""",""";
|
||||
// splitto linea
|
||||
string[] words = linea.Split(' ');
|
||||
// calcolo vari parametri
|
||||
string szDataRif = words[0] + " " + words[1];
|
||||
string tsDataRif = words[0] + "T" + words[1].Substring(0, 8) + "Z";
|
||||
long epochSec = getUnixEpoch(szDataRif);
|
||||
string stato = active ? "Active" : "Inactive";
|
||||
string allarme = linea.Substring(linea.IndexOf("Message") + 9);
|
||||
// formatto la componente JSon
|
||||
numEventId += 100;
|
||||
string jsonPLoad = JsonConvert.SerializeObject(new { k = words[9].Replace("Machine/", ""), ts = tsDataRif, v = allarme, severity = words[14], eventType = "AlarmConditionType", eventId = numEventId, conditionName = words[11], activeState = stato });
|
||||
try
|
||||
{
|
||||
// sostituisco il namespace PLC --> condition/PLC...
|
||||
string nSpace = words[9].Replace("PLC", "Condition/PLC").Replace("CNC", "Condition/CNC");
|
||||
// aggiungo il NUMERO allarme al namespace...
|
||||
nSpace += "/" + words[11];
|
||||
// sostituisco variabili nel formato indicato
|
||||
answ = string.Format(strFormatVar, words[0], words[1].Replace(",", "."), nSpace);//, epochSec, words[11]);
|
||||
answ += jsonPLoad.Replace("\"", "\"\"") + "\"";
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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("ANTLR-LogParser")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("ANTLR-LogParser")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[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("a49a795d-11bd-4cc9-9eee-cc995696608b")]
|
||||
|
||||
// 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,30 @@
|
||||
Nota da Fabrizio Morroia
|
||||
|
||||
Questo è il set minimo di informazioni che servono ad MSIM per creare il DB del player.
|
||||
|
||||
NodeID viene preso dal campo Channel
|
||||
|
||||
il campo DataValues contiene un JSON serializzato diverso nel caso di allarmi o variabili.
|
||||
|
||||
Nel caso degli allarmi viene preso:
|
||||
* st (server time)
|
||||
* lastEvent (server time)
|
||||
* conditionName
|
||||
* v (messaggio di errore)
|
||||
* severity
|
||||
* activeState
|
||||
|
||||
Nel caso delle variabili viene preso:
|
||||
* st (server time)
|
||||
* v (valore della variabile)
|
||||
|
||||
|
||||
|
||||
|
||||
Potremmo pensare di abbondonare il CSV con JSON serializzato per un JSON puro.
|
||||
Teniamo presente che se passiamo al JSON puro perdiamo la compatibilità con i log Cloud Plugs,
|
||||
sempre perchè avere più formati e più parser a seconda del punto di registrazione non ci sembra
|
||||
una buona soluzione.
|
||||
|
||||
Saluti.
|
||||
Fabrizio
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net462" />
|
||||
</packages>
|
||||
@@ -0,0 +1,55 @@
|
||||
# SOUR (SCM OPC-UA REDIS)
|
||||
|
||||
Progetto per l'implementazione del server OPC-UA di gruppo basato su REDIS per acquisizione dati dai PLC / MSIM
|
||||
|
||||
<!-- TOC -->
|
||||
|
||||
- [SOUR (SCM OPC-UA REDIS)](#sour-scm-opc-ua-redis)
|
||||
- [Organizzazione documenti e codice](#organizzazione-documenti-e-codice)
|
||||
- [MQTT](#mqtt)
|
||||
- [MSI installer](#msi-installer)
|
||||
- [Versioni](#versioni)
|
||||
|
||||
## Organizzazione documenti e codice
|
||||
|
||||
| Oggetto | Funzionalità |
|
||||
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| images | Files supporto documentazione |
|
||||
| LogConversion | Gestione conversione traccaito di LOG SOUR in formato leggibile per MSIM (superato da versioni > 1.*) |
|
||||
| Rilasci | Folder dei rilasci (in versione release/debug) del server SOUR, IN PHASE OUT con impiego del nuovo server NEXUS |
|
||||
| Specifiche.pdf | File contenente le specifiche di interfaccia per SOUR (che devono essere note ai vari Adapters) e tutte le definizioni a livello di interfaccia |
|
||||
| Specifiche.md | File sorgente (in formato Markdown) delle specifiche |
|
||||
| src | Folder contenente i sorgenti di SOUR |
|
||||
| TestClients | Client di riferimento per testing funzionalità OPC-UA |
|
||||
| Utility | script ed utility varie |
|
||||
| Varie | Documentazioni ed esempi a corredo |
|
||||
| Video | Brevi demo dell'utilizzo |
|
||||
|
||||
## MQTT
|
||||
|
||||
Dalla versione 2.2 è attivo un broker di pubblicazione MQTT verso il cloud.
|
||||
|
||||
Condizioni necessarie al funzionamento:
|
||||
|
||||
- Non sia presente la chiave di vet in REDIS all'indirizzo `SOUR:GwHw:Vers`, se vuoto/nullo = nessun veto, se presente il numero di versioni (o anceh solo una stringa non vuota) riferita al Gateway Hw viene inibito il funzionamento della sezione MQTT
|
||||
- macchina attivata con SDK (quindi disponibili le informaizoni di user e pwd per il broker)
|
||||
|
||||
|
||||
## MSI installer
|
||||
|
||||
Aggiunto il progetto di generazione installer con wix, il processo jenkis crea l'installer come ultimo step di deploy
|
||||
|
||||
Modalità di installaizone file installer msi:
|
||||
|
||||
```powershell
|
||||
SOUR.Setup.msi INSTALLFOLDER=C:\IOT\SOUR /quiet
|
||||
```
|
||||
|
||||
|
||||
## Versioni
|
||||
|
||||
| Vers | Data | Descrizione |
|
||||
| ------ | ---------- | --------------------------------------------------------------------------------------------------------- |
|
||||
| <= 1.2 | 2018.12.06 | Documento impiegato epr definizione specifiche SOUR |
|
||||
| >= 1.3 | 2018.12.06 | Documento suddiviso tra organizzaizone progetto (corrente) e specifiche progetto SOUR (Specifiche.md/pdf) |
|
||||
| >= 2.2 | 2019.08.02 | Aggiunta MQTT server embedded, generazione installer msi |
|
||||
@@ -0,0 +1,174 @@
|
||||
<html class="wf-callunasans-n4-active wf-callunasans-i4-active wf-futurapt-n5-active wf-opensans-n4-active wf-firamono-n4-active wf-firamono-n7-active wf-futurapt-n7-active wf-futurapt-n4-active wf-active"><head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<meta charset="utf-8">
|
||||
<title>Prosys OPC - OPC UA Client Downloads</title>
|
||||
<link href="Prosys%20OPC%20-%20OPC%20UA%20Client%20Downloads_files/style.html" rel="stylesheet" type="text/css">
|
||||
<script type="text/javascript" src="Prosys%20OPC%20-%20OPC%20UA%20Client%20Downloads_files/yho4tsp.js"></script>
|
||||
<style type="text/css">.tk-calluna-sans{font-family:"calluna-sans",sans-serif;}.tk-futura-pt{font-family:"futura-pt",sans-serif;}.tk-open-sans{font-family:"open-sans",sans-serif;}.tk-fira-mono{font-family:"fira-mono",sans-serif;}</style><style type="text/css">@font-face{font-family:calluna-sans;src:url(https://use.typekit.net/af/3f38e7/00000000000000000000ebe8/27/l?subset_id=2&fvd=n4&v=3) format("woff2"),url(https://use.typekit.net/af/3f38e7/00000000000000000000ebe8/27/d?subset_id=2&fvd=n4&v=3) format("woff"),url(https://use.typekit.net/af/3f38e7/00000000000000000000ebe8/27/a?subset_id=2&fvd=n4&v=3) format("opentype");font-weight:400;font-style:normal;}@font-face{font-family:calluna-sans;src:url(https://use.typekit.net/af/1e5026/00000000000000000000ebe9/27/l?subset_id=2&fvd=i4&v=3) format("woff2"),url(https://use.typekit.net/af/1e5026/00000000000000000000ebe9/27/d?subset_id=2&fvd=i4&v=3) format("woff"),url(https://use.typekit.net/af/1e5026/00000000000000000000ebe9/27/a?subset_id=2&fvd=i4&v=3) format("opentype");font-weight:400;font-style:italic;}@font-face{font-family:futura-pt;src:url(https://use.typekit.net/af/2cd6bf/00000000000000000001008f/27/l?subset_id=2&fvd=n5&v=3) format("woff2"),url(https://use.typekit.net/af/2cd6bf/00000000000000000001008f/27/d?subset_id=2&fvd=n5&v=3) format("woff"),url(https://use.typekit.net/af/2cd6bf/00000000000000000001008f/27/a?subset_id=2&fvd=n5&v=3) format("opentype");font-weight:500;font-style:normal;}@font-face{font-family:futura-pt;src:url(https://use.typekit.net/af/309dfe/000000000000000000010091/27/l?subset_id=2&fvd=n7&v=3) format("woff2"),url(https://use.typekit.net/af/309dfe/000000000000000000010091/27/d?subset_id=2&fvd=n7&v=3) format("woff"),url(https://use.typekit.net/af/309dfe/000000000000000000010091/27/a?subset_id=2&fvd=n7&v=3) format("opentype");font-weight:700;font-style:normal;}@font-face{font-family:futura-pt;src:url(https://use.typekit.net/af/9b05f3/000000000000000000013365/27/l?subset_id=2&fvd=n4&v=3) format("woff2"),url(https://use.typekit.net/af/9b05f3/000000000000000000013365/27/d?subset_id=2&fvd=n4&v=3) format("woff"),url(https://use.typekit.net/af/9b05f3/000000000000000000013365/27/a?subset_id=2&fvd=n4&v=3) format("opentype");font-weight:400;font-style:normal;}@font-face{font-family:open-sans;src:url(https://use.typekit.net/af/827015/000000000000000000011c3b/27/l?subset_id=2&fvd=n4&v=3) format("woff2"),url(https://use.typekit.net/af/827015/000000000000000000011c3b/27/d?subset_id=2&fvd=n4&v=3) format("woff"),url(https://use.typekit.net/af/827015/000000000000000000011c3b/27/a?subset_id=2&fvd=n4&v=3) format("opentype");font-weight:400;font-style:normal;}@font-face{font-family:fira-mono;src:url(https://use.typekit.net/af/f654d3/000000000000000000014766/27/l?subset_id=2&fvd=n4&v=3) format("woff2"),url(https://use.typekit.net/af/f654d3/000000000000000000014766/27/d?subset_id=2&fvd=n4&v=3) format("woff"),url(https://use.typekit.net/af/f654d3/000000000000000000014766/27/a?subset_id=2&fvd=n4&v=3) format("opentype");font-weight:400;font-style:normal;}@font-face{font-family:fira-mono;src:url(https://use.typekit.net/af/3fb4ba/000000000000000000014767/27/l?subset_id=2&fvd=n7&v=3) format("woff2"),url(https://use.typekit.net/af/3fb4ba/000000000000000000014767/27/d?subset_id=2&fvd=n7&v=3) format("woff"),url(https://use.typekit.net/af/3fb4ba/000000000000000000014767/27/a?subset_id=2&fvd=n7&v=3) format("opentype");font-weight:700;font-style:normal;}</style><script type="text/javascript">try{Typekit.load();}catch(e){}</script>
|
||||
<style>
|
||||
h1 {
|
||||
color: #DE7C00;
|
||||
}
|
||||
body {
|
||||
font-family:'open-sans';
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
<!-- CONTENT alkaa -->
|
||||
<div id="content" class="pageContent" style="width: 900px; margin: 0 auto;">
|
||||
|
||||
<a href="http://www.prosysopc.com/"><img style="width: 300px;" src="Prosys%20OPC%20-%20OPC%20UA%20Client%20Downloads_files/logo-blue-whitebg.png"></a>
|
||||
|
||||
|
||||
<!-- CONTENT LEFT alkaa -->
|
||||
<div id="main" class="pageContent">
|
||||
|
||||
|
||||
|
||||
|
||||
<title>
|
||||
Prosys OPC UA Client 3.1.4-293 Download</title>
|
||||
|
||||
|
||||
<h1>
|
||||
Prosys OPC UA Client 3.1.4-293 Download</h1>
|
||||
<p>Release date: 14.06.2018</p>
|
||||
<p>
|
||||
Here you will find the official distribution of the Prosys OPC UA Client application.
|
||||
</p>
|
||||
<h2> LICENSE </h2>
|
||||
<h3> Prosys OPC UA Client License</h3>
|
||||
<p>
|
||||
Prosys OPCUA Client is covered by the license terms in <a href="https://www.prosysopc.com/opcua/apps/JavaClient/dist/3.1.4-293/Prosys_OPC_UA_Client_License.pdf">Prosys_OPC_UA_Client_License.pdf</a>
|
||||
</p>
|
||||
<h3> Libraries</h3>
|
||||
|
||||
<p>The application uses the following libraries, which are covered by individual licenses.</p>
|
||||
|
||||
<table border="1">
|
||||
<tbody><tr><th>Library</th><th style="width: 310px">License</th>
|
||||
</tr><tr><td>OPC Foundation Java Stack</td><td style="width: 310px"><a href="https://opcfoundation.org/license/redistributables/1.3/">OPC
|
||||
Foundation Redistributables License</a></td></tr>
|
||||
<tr><td><a href="https://swingx.java.net/">SwingLabs SwingX</a></td>
|
||||
<td><a href="http://www.gnu.org/licenses/lgpl-2.1.html">LGPL v2.1</a></td></tr>
|
||||
<tr><td><a href="http://www.jfree.org/jcommon/">JCommon</a></td>
|
||||
<td><a href="http://www.gnu.org/licenses/lgpl-2.1.html">LGPL v2.1</a></td></tr>
|
||||
<tr><td><a href="http://www.jfree.org/jfreechart/">JFreeChart</a></td>
|
||||
<td><a href="http://www.gnu.org/licenses/lgpl-2.1.html">LGPL v2.1</a></td></tr>
|
||||
|
||||
<tr><td><a href="http://www.bouncycastle.org/">Bouncy Castle</a> Crypto API</td>
|
||||
<td><a href="http://www.bouncycastle.org/licence.html">The
|
||||
Bouncy Castle License</a></td></tr>
|
||||
<tr><td><a href="http://hc.apache.org/">Apache HttpComponents</a></td>
|
||||
<td><a href="http://www.apache.org/licenses/LICENSE-2.0">The
|
||||
Apache License, Version 2.0</a></td></tr>
|
||||
<tr><td><a href="http://www.slf4j.org/">Simple Logging Facade for Java (SLF4J)</a></td><td>
|
||||
<a href="http://www.slf4j.org/license.html">MIT License</a></td></tr>
|
||||
<tr><td><a href="http://logging.apache.org/log4j/1.2/">Apache Logging Services</a></td>
|
||||
<td><a href="http://www.apache.org/licenses/LICENSE-2.0">The
|
||||
Apache License, Version 2.0</a></td></tr>
|
||||
<tr><td><a href="http://commons.apache.org/logging/">Apache Commons Logging Component</a></td>
|
||||
<td><a href="http://www.apache.org/licenses/LICENSE-2.0">The
|
||||
Apache License, Version 2.0</a></td></tr>
|
||||
<tr><td><a href="https://poi.apache.org/">Apache POI</a></td>
|
||||
<td><a href="http://www.apache.org/licenses/LICENSE-2.0">The
|
||||
Apache License, Version 2.0</a></td></tr>
|
||||
<tr><td><a href="http://xmlbeans.apache.org/">Apache XMLBeans</a></td>
|
||||
<td><a href="http://www.apache.org/licenses/LICENSE-2.0">The
|
||||
Apache License, Version 2.0</a></td></tr>
|
||||
<tr><td><a href="https://github.com/virtuald/curvesapi">curvesapi</a></td>
|
||||
<td><a href="https://github.com/virtuald/curvesapi/blob/master/license.txt">BSD 3-clause</a></td></tr>
|
||||
<tr><td><a href="https://commons.apache.org/proper/commons-collections/">Apache Commons Collections</a></td>
|
||||
<td><a href="http://www.apache.org/licenses/LICENSE-2.0">The Apache License, Version 2.0</a></td></tr>
|
||||
<tr><td><a href="https://commons.apache.org/proper/commons-codec/">Apache Commons Codec</a></td>
|
||||
<td><a href="http://www.apache.org/licenses/LICENSE-2.0">The Apache License, Version 2.0</a></td></tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2> System Requirements </h2>
|
||||
<p>
|
||||
The application is a "self-contained" package
|
||||
(made with JavaFX packaging tools), it contains a private JRE for
|
||||
running the application, so no Java install is required.</p>
|
||||
|
||||
<h2> Download </h2>
|
||||
<p>
|
||||
<b>By downloading the Prosys OPC UA Client, you accept all the license terms.</b>
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="https://www.prosysopc.com/opcua/apps/JavaClient/dist/3.1.4-293/prosys-opc-ua-client-3.1.4-293.exe">
|
||||
prosys-opc-ua-client-3.1.4-293.exe</a> - Prosys OPC UA Client application installer (32-bit, Windows
|
||||
Vista or later).</li>
|
||||
<li><a href="https://www.prosysopc.com/opcua/apps/JavaClient/dist/3.1.4-293/prosys-opc-ua-client-3.1.4-293.dmg">
|
||||
prosys-opc-ua-client-3.1.4-293.dmg</a> - Prosys OPC UA Client application installer (64-bit, OS X).</li>
|
||||
<li><a href="https://www.prosysopc.com/opcua/apps/JavaClient/dist/3.1.4-293/prosys-opc-ua-client-3.1.4-293.deb">
|
||||
prosys-opc-ua-client-3.1.4-293.deb</a> - Prosys OPC UA Client application installer (64-bit, Linux).</li>
|
||||
<li><a href="https://www.prosysopc.com/opcua/apps/JavaClient/dist/3.1.4-293/prosys-opc-ua-client-3.1.4-293.x86_64.rpm">
|
||||
prosys-opc-ua-client-3.1.4-293.x86_64.rpm</a> - Prosys OPC UA Client application installer (64-bit, Linux).</li>
|
||||
</ul>
|
||||
|
||||
<h3> Installation </h3>
|
||||
<p>
|
||||
On Windows, run the installer executable and follow instructions. By
|
||||
default the application is installed with normal user privileges under
|
||||
your home directory. If you
|
||||
want to install it to, for example, Program Files, you need to run the
|
||||
installer as administrator.
|
||||
</p>
|
||||
<p>
|
||||
On OS X, you can just install it normally from the dmg-package. Just note that the application is not signed,
|
||||
so you need to accept it in the first startup. Since OSX 10.8 (Mountain Lion), this requires that you
|
||||
open the application using the right-click menu - Open. You can then accept the application
|
||||
to be run, although it is not signed. After the first startup, you can run it normally from the
|
||||
Launch Pad as well. See <a href="http://www.wikihow.com/Install-Software-from-Unsigned-Developers-on-a-Mac">this</a>
|
||||
for more information about the Apple Gatekeeper options.
|
||||
</p>
|
||||
<p>
|
||||
On Debian-based Linux (such as Ubuntu), use <br>
|
||||
</p><pre>sudo dpkg -i prosys-opc-ua-client-3.1.4-293.deb</pre>
|
||||
<p></p>
|
||||
<p>
|
||||
On RPM-based Linux (such as Fedora), use <br>
|
||||
</p><pre>sudo rpm -i prosys-opc-ua-client-3.1.4-293.x86_64.rpm</pre>
|
||||
<p></p>
|
||||
<p>
|
||||
NOTE! there
|
||||
might be problems in running the application if the Linux desktop environment has any
|
||||
<em>effects</em> on.
|
||||
</p>
|
||||
|
||||
<h3> Uninstallation</h3>
|
||||
<p> On Windows the application can be uninstalled through the Control Panel, or with the uninstaller (in the installation folder).</p>
|
||||
<p> On OS X you can just remove the application directory from the Applications folder.</p>
|
||||
<p> On Debian-based Linux use <br>
|
||||
</p><pre>sudo dpkg -r prosys-opc-ua-client</pre>
|
||||
<p></p>
|
||||
<p> On RPM-based Linux use <br>
|
||||
</p><pre>sudo rpm -e prosys-opc-ua-client</pre>
|
||||
<p></p>
|
||||
|
||||
<h3>Documentation</h3>
|
||||
<p> The User Manual for the application is installed into <install_location>/app/doc,
|
||||
or you can read it here: <a href="https://www.prosysopc.com/opcua/apps/JavaClient/dist/3.1.4-293/Prosys_OPC_UA_Client_UserManual.pdf">Prosys_OPC_UA_Client_UserManual.pdf</a></p>
|
||||
|
||||
<h2>Feedback</h2>
|
||||
|
||||
<p>For additional queries and all feedback, please contact
|
||||
<a href="mailto:uajava-support@prosysopc.com">uajava-support@prosysopc.com</a></p><br>
|
||||
|
||||
<div class="separator"></div><br>
|
||||
<p><i>14.06.2018</i>
|
||||
|
||||
|
||||
|
||||
</p></div>
|
||||
<!-- CONTENT LEFT loppuu -->
|
||||
|
||||
</div>
|
||||
<!-- CONTENT loppuu -->
|
||||
|
||||
|
||||
</body></html>
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,9 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
||||
<html><head>
|
||||
<title>404 Not Found</title>
|
||||
</head><body>
|
||||
<h1>Not Found</h1>
|
||||
<p>The requested URL /style.css was not found on this server.</p>
|
||||
<hr>
|
||||
<address>Apache/2.2.22 (Ubuntu) Server at downloads.prosysopc.com Port 443</address>
|
||||
</body></html>
|
||||
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* The Typekit service used to deliver this font or fonts for use on websites
|
||||
* is provided by Adobe and is subject to these Terms of Use
|
||||
* http://www.adobe.com/products/eulas/tou_typekit. For font license
|
||||
* information, see the list below.
|
||||
*
|
||||
* calluna-sans:
|
||||
* - http://typekit.com/eulas/00000000000000000000ebe8
|
||||
* - http://typekit.com/eulas/00000000000000000000ebe9
|
||||
* fira-mono:
|
||||
* - http://typekit.com/eulas/000000000000000000014766
|
||||
* - http://typekit.com/eulas/000000000000000000014767
|
||||
* futura-pt:
|
||||
* - http://typekit.com/eulas/00000000000000000001008f
|
||||
* - http://typekit.com/eulas/000000000000000000010091
|
||||
* - http://typekit.com/eulas/000000000000000000013365
|
||||
* open-sans:
|
||||
* - http://typekit.com/eulas/000000000000000000011c3b
|
||||
*
|
||||
* © 2009-2018 Adobe Systems Incorporated. All Rights Reserved.
|
||||
*/
|
||||
if(!window.Typekit)window.Typekit={};window.Typekit.config={"a":"1024296","c":[".tk-calluna-sans","\"calluna-sans\",sans-serif",".tk-futura-pt","\"futura-pt\",sans-serif",".tk-open-sans","\"open-sans\",sans-serif",".tk-fira-mono","\"fira-mono\",sans-serif"],"dl":"AAAAggAAAAqZxROi1KwArUpBZuNs9s6yAAAAAA","fi":[8546,8547,10879,10881,10884,14548,22487,22488],"fc":[{"id":8546,"family":"calluna-sans","src":"https://use.typekit.net/af/3f38e7/00000000000000000000ebe8/27/{format}{?primer,subset_id,fvd,v}","descriptors":{"weight":"400","style":"normal","subset_id":2}},{"id":8547,"family":"calluna-sans","src":"https://use.typekit.net/af/1e5026/00000000000000000000ebe9/27/{format}{?primer,subset_id,fvd,v}","descriptors":{"weight":"400","style":"italic","subset_id":2}},{"id":10879,"family":"futura-pt","src":"https://use.typekit.net/af/2cd6bf/00000000000000000001008f/27/{format}{?primer,subset_id,fvd,v}","descriptors":{"weight":"500","style":"normal","subset_id":2}},{"id":10881,"family":"futura-pt","src":"https://use.typekit.net/af/309dfe/000000000000000000010091/27/{format}{?primer,subset_id,fvd,v}","descriptors":{"weight":"700","style":"normal","subset_id":2}},{"id":10884,"family":"futura-pt","src":"https://use.typekit.net/af/9b05f3/000000000000000000013365/27/{format}{?primer,subset_id,fvd,v}","descriptors":{"weight":"400","style":"normal","subset_id":2}},{"id":14548,"family":"open-sans","src":"https://use.typekit.net/af/827015/000000000000000000011c3b/27/{format}{?primer,subset_id,fvd,v}","descriptors":{"weight":"400","style":"normal","subset_id":2}},{"id":22487,"family":"fira-mono","src":"https://use.typekit.net/af/f654d3/000000000000000000014766/27/{format}{?primer,subset_id,fvd,v}","descriptors":{"weight":"400","style":"normal","subset_id":2}},{"id":22488,"family":"fira-mono","src":"https://use.typekit.net/af/3fb4ba/000000000000000000014767/27/{format}{?primer,subset_id,fvd,v}","descriptors":{"weight":"700","style":"normal","subset_id":2}}],"fn":["calluna-sans",["i4","n4"],"fira-mono",["n4","n7"],"futura-pt",["n4","n5","n7"],"open-sans",["n4"]],"hn":"use.typekit.net","ht":"tk","js":"1.19.2","kt":"yho4tsp","l":"typekit","ps":1,"ping":"https://p.typekit.net/p.gif{?s,k,ht,h,f,a,js,app,e,_}","pm":true,"type":"configurable","vft":false};
|
||||
/*{"k":"1.19.2","auto_updating":true,"last_published":"2017-06-12 10:36:28 UTC"}*/
|
||||
;(function(window,document,undefined){if(!document.querySelector){document.documentElement.className+=" wf-inactive";return;}function aa(a,b,c){return a.call.apply(a.bind,arguments)}function ba(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function h(a,b,c){h=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?aa:ba;return h.apply(null,arguments)}var l=Date.now||function(){return+new Date};function ca(a){this.g=a||"-"}ca.prototype.b=function(a){for(var b=[],c=0;c<arguments.length;c++)b.push(arguments[c].replace(/[\W_]+/g,"").toLowerCase());return b.join(this.g)};function da(){var a=[{name:"font-family",value:m.c[n+1]}];this.g=[m.c[n]];this.b=a}function fa(a){for(var b=a.g.join(","),c=[],d=0;d<a.b.length;d++){var e=a.b[d];c.push(e.name+":"+e.value+";")}return b+"{"+c.join("")+"}"};function q(a,b){return(a&65535)*b+(((a>>>16)*b&65535)<<16)};function r(a,b){this.b=b||Array(Math.ceil(a/32));if(!b)for(var c=0;c<this.b.length;c++)this.b[c]=0}r.prototype.set=function(a){if(Math.floor(a/32+1)>this.b.length)throw Error("Index is out of bounds.");var b=Math.floor(a/32);this.b[b]|=1<<a-32*b};r.prototype.has=function(a){if(Math.floor(a/32+1)>this.b.length)throw Error("Index is out of bounds.");var b=Math.floor(a/32);return!!(this.b[b]&1<<a-32*b)};function ga(a,b,c){this.b=a;this.i=b;this.g=new r(a,c)}var ha=[2449897292,4218179547,2675077685,1031960064,1478620578,1386343184,3194259988,2656050674,3012733295,2193273665];
|
||||
ga.prototype.has=function(a){if("string"!==typeof a&&"number"!==typeof a)throw Error("Value should be a string or number.");for(var b="number"===typeof a,c=0;c<this.i;c++){var d;if(b)d=q(a&4294967295,3432918353),d=d<<15|d>>>17,d=q(d,461845907),d^=ha[c]||0,d=d<<13|d>>>19,d=q(d,5)+3864292196,d^=4,d^=d>>>16,d=q(d,2246822507),d^=d>>>13,d=q(d,3266489909),d^=d>>>16,d=(d>>>0)%this.b;else{d=ha[c]||0;var e,f,g=a.length%4,k=a.length-g;for(f=0;f<k;f+=4)e=(a.charCodeAt(f+0)&4294967295)<<0|(a.charCodeAt(f+1)&
|
||||
4294967295)<<8|(a.charCodeAt(f+2)&4294967295)<<16|(a.charCodeAt(f+3)&4294967295)<<24,e=q(e,3432918353),e=e<<15|e>>>17,e=q(e,461845907),d^=e,d=d<<13|d>>>19,d=q(d,5)+3864292196;e=0;switch(g){case 3:e^=(a.charCodeAt(f+2)&4294967295)<<16;case 2:e^=(a.charCodeAt(f+1)&4294967295)<<8;case 1:e^=(a.charCodeAt(f+0)&4294967295)<<0,e=q(e,3432918353),e=e<<15|e>>>17,e=q(e,461845907),d^=e}d^=a.length;d=q(d^d>>>16,2246822507);d=q(d^d>>>13,3266489909);d=((d^d>>>16)>>>0)%this.b}if(!this.g.has(d))return!1}return!0};function ia(a){a.length%4&&(a+=Array(5-a.length%4).join("="));a=a.replace(/\-/g,"+").replace(/\_/g,"/");if(window.atob)a=window.atob(a);else{a=a.replace(/=+$/,"");if(1==a.length%4)throw Error("'atob' failed: The string to be decoded is not correctly encoded.");for(var b=0,c,d,e=0,f="";d=a.charAt(e++);~d&&(c=b%4?64*c+d:d,b++%4)?f+=String.fromCharCode(255&c>>(-2*b&6)):0)d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(d);a=f}c=[];for(b=0;b<a.length;b+=4)c.push(a.charCodeAt(b)<<
|
||||
24|a.charCodeAt(b+1)<<16|a.charCodeAt(b+2)<<8|a.charCodeAt(b+3)<<0);a=c.shift();b=c.shift();this.b=new ga(a,b,c)}ia.prototype.has=function(a){if(""===a)return!0;for(a=a.split(".");a.length;){var b=a.join("."),c="*."+b;if(this.b.has(b)||this.b.has(c)||this.b.has(encodeURIComponent(b))||this.b.has(encodeURIComponent(c)))return!0;a.shift()}return!1};function t(a,b,c,d){b=a.b.createElement(b);if(c)for(var e in c)c.hasOwnProperty(e)&&("style"==e?b.style.cssText=c[e]:b.setAttribute(e,c[e]));d&&b.appendChild(a.b.createTextNode(d));return b}function u(a,b,c){a=a.b.getElementsByTagName(b)[0];a||(a=document.documentElement);a.insertBefore(c,a.lastChild)}
|
||||
function ja(a,b){a.b.body?b():a.b.addEventListener?a.b.addEventListener("DOMContentLoaded",b):a.b.attachEvent("onreadystatechange",function(){"interactive"!=a.b.readyState&&"complete"!=a.b.readyState||b()})}function v(a){a.parentNode&&a.parentNode.removeChild(a)}
|
||||
function w(a,b,c){var d=b||[];c=c||[];b=a.className.split(/\s+/);for(var e,f=0;f<d.length;f+=1){e=!1;for(var g=0;g<b.length;g+=1)if(d[f]===b[g]){e=!0;break}e||b.push(d[f])}d=[];for(f=0;f<b.length;f+=1){e=!1;for(g=0;g<c.length;g+=1)if(b[f]===c[g]){e=!0;break}e||d.push(b[f])}a.className=d.join(" ").replace(/\s+/g," ").replace(/^\s+|\s+$/,"")}function ka(a,b){for(var c=a.className.split(/\s+/),d=0,e=c.length;d<e;d++)if(c[d]==b)return!0;return!1}
|
||||
function x(a,b){var c=t(a,"style");c.setAttribute("type","text/css");c.styleSheet?(u(a,"head",c),c.styleSheet.cssText=b):(c.appendChild(document.createTextNode(b)),u(a,"head",c))}
|
||||
function la(a,b,c){var d=a.b.getElementsByTagName("head")[0];if(d){var e=t(a,"script",{src:b}),f=!1;e.onload=e.onreadystatechange=function(){f||this.readyState&&"loaded"!=this.readyState&&"complete"!=this.readyState||(f=!0,c&&c(null),e.onload=e.onreadystatechange=null,"HEAD"==e.parentNode.tagName&&d.removeChild(e))};d.appendChild(e);setTimeout(function(){f||(f=!0,c&&c(Error("Script load timeout")))},5E3)}};function A(a,b,c){this.g=a.g.document.documentElement;this.j=b;this.m=c;this.b=new ca("-");this.o=!1!==b.events;this.i=!1!==b.classes}function B(a){if(a.i){var b=ka(a.g,a.b.b("wf","active")),c=[],d=[a.b.b("wf","loading")];b||c.push(a.b.b("wf","inactive"));w(a.g,c,d)}C(a,"inactive")}function C(a,b,c){if(a.o&&a.j[b])try{if(c)a.j[b](c.b,D(c));else a.j[b]()}catch(d){console.error('Typekit: Error in "'+b+'" callback',d)}if(a.m[b])if(c)a.m[b](c.b,D(c));else a.m[b]()};function ma(a,b,c){c=c||{};this.b=a;this.g=b;this.weight=c.weight||"400";this.style=c.style||"normal";this.B=c.primer||void 0;this.C=c.subset_id||void 0}function E(a){return("tk-"+a.b).slice(0,26)+"-"+D(a)}function F(a,b){return new ma(b,a.g,{weight:a.weight,style:a.style,B:a.B,C:a.C})}function D(a){return a.style.charAt(0)+a.weight.charAt(0)}function na(a){var b=a.charAt(0);a=a.charAt(1);/[1-9]/.test(a)||(a=4);return{style:"i"===b?"italic":"o"===b?"oblique":"normal",weight:a+"00"}};function oa(){var a=document,b=navigator.userAgent;if(/MSIE|Trident/.test(b)&&(a.documentMode?9>a.documentMode:1))b="i";else{a:{if(/AppleWebKit/.test(b)&&/Android/.test(b)&&!/OPR|Chrome|CrMo|CriOS/.test(b)&&(a=/Android ([^;)]+)/.exec(b))&&a[1]){a=parseFloat(a[1]);a=3.1<=a&&4.1>a;break a}a=!1}if(!a)a:{if(/Silk/.test(b)&&/Linux|Ubuntu|Android/.test(b)&&(b=/Silk\/([\d\._]+)/.exec(b))&&b[1]){a=2<=parseFloat(b[1]);break a}a=!1}b=a?"j":"k"}return b};function G(a){this.b=a}function H(a,b){return a.b.replace(/\{([^\{\}]+)\}/g,function(a,d){if("?"==d.charAt(0)){for(var e=d.slice(1).split(","),f=[],g=0;g<e.length;g++)b[e[g]]&&f.push(e[g]+"="+encodeURIComponent(b[e[g]]));return f.length?"?"+f.join("&"):""}return encodeURIComponent(b[d]||"")})};function I(){this.b=[]}function qa(a,b){for(var c=0;c<b.length;c++)a.b.push(b[c])}function J(a,b){for(var c=0;c<a.b.length;c++)b(a.b[c],c,a)}
|
||||
function ra(a,b){if("i"===b){var c={},d=new I;J(a,function(a){c[a.b]||(c[a.b]={});c[a.b][a.weight]||(c[a.b][a.weight]=[]);c[a.b][a.weight].push(a)});for(var e in c){for(var f=[400,300,200,100,500,600,700,800,900],g=400,k=0;k<f.length;k++)if(g=f[k],c[e][g]){qa(d,c[e][g]);break}f=[700,800,900,600,500,400,300,200,100];for(k=0;k<f.length;k++){var p=f[k];if(c[e][p]&&g!==p){qa(d,c[e][p]);break}}}J(a,function(a){a=F(a,a.b.replace(/(-1|-2)$/,"").slice(0,28)+"-"+D(a));d.b.push(a)});return d}return"x"===b?
|
||||
new I:a}function sa(a,b,c){for(var d=[],e=0;e<b.length;e++){var f=b[e],g=H(new G(a.g),{format:f,primer:a.B,subset_id:a.C,fvd:D(a),extension:ta(f),token:c,v:"3"});"i"===f?d.push("url("+g+")"):d.push("url("+g+') format("'+ua(f)+'")')}return d.join(",")}function va(a,b,c,d){if("x"===b)return"";var e=[];e.push("font-family:"+(d?E(a):a.b));b="k"===b?sa(a,["l","d","a"],c):sa(a,[b],c);e.push("src:"+b);e.push("font-weight:"+a.weight);e.push("font-style:"+a.style);return"@font-face{"+e.join(";")+";}"}
|
||||
function ua(a){switch(a){case "d":return"woff";case "i":return"eot";case "l":return"woff2";default:return"opentype"}}function ta(a){switch(a){case "d":return"woff";case "i":return"eot";case "l":return"woff2";default:return"otf"}}function K(a,b,c,d){var e=[];J(a,function(a){e.push(va(a,b,c,d))});return e.join("")};function L(a,b){this.g=a;this.i=b;this.b=t(this.g,"span",{"aria-hidden":"true"},this.i)}function M(a){u(a.g,"body",a.b)}
|
||||
function N(a){return"display:block !important;position:absolute !important;top:-9999px !important;left:-9999px !important;font-size:300px !important;width:auto !important;height:auto !important;line-height:normal !important;margin:0 !important;padding:0 !important;font-variant:normal !important;white-space:nowrap !important;font-family:"+a.b+" !important;font-weight:"+a.weight+" !important;font-style:"+a.style+" !important;"};function wa(a,b,c,d,e,f,g,k){this.D=a;this.H=b;this.u=c;this.b=d;this.w=g||"BESbswy";this.g={};this.I=e||3E3;this.G=k;this.A=f||null;this.i=new L(this.u,this.w);this.j=new L(this.u,this.w);this.m=new L(this.u,this.w);this.o=new L(this.u,this.w);a=this.G?E(this.b):this.b.b;this.i.b.style.cssText=N(F(this.b,a+",serif"));this.j.b.style.cssText=N(F(this.b,a+",sans-serif"));this.m.b.style.cssText=N(F(this.b,"serif"));this.o.b.style.cssText=N(F(this.b,"sans-serif"));M(this.i);M(this.j);M(this.m);M(this.o)}
|
||||
var O={K:"serif",J:"sans-serif"},P=null;function ya(){if(null===P){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent);P=!!a&&(536>parseInt(a[1],10)||536===parseInt(a[1],10)&&11>=parseInt(a[2],10))}return P}wa.prototype.start=function(){this.g.serif=this.m.b.offsetWidth;this.g["sans-serif"]=this.o.b.offsetWidth;this.F=l();za(this)};function Aa(a,b,c){for(var d in O)if(O.hasOwnProperty(d)&&b===a.g[O[d]]&&c===a.g[O[d]])return!0;return!1}
|
||||
function za(a){var b=a.i.b.offsetWidth,c=a.j.b.offsetWidth,d;(d=b===a.g.serif&&c===a.g["sans-serif"])||(d=ya()&&Aa(a,b,c));d?l()-a.F>=a.I?ya()&&Aa(a,b,c)&&(!a.A||a.A.hasOwnProperty(a.b.b))?Ba(a,a.D):Ba(a,a.H):Ca(a):Ba(a,a.D)}function Ca(a){setTimeout(h(function(){za(this)},a),50)}function Ba(a,b){setTimeout(h(function(){v(this.i.b);v(this.j.b);v(this.m.b);v(this.o.b);b(this.b)},a),0)};function Da(a,b,c,d,e,f,g){this.i=a;this.u=b;this.b=d;this.m=c;this.g=e||3E3;this.o=f||void 0;this.j=g}Da.prototype.start=function(){var a=this.m.g.document,b=this,c=l(),d=new Promise(function(d,e){function k(){l()-c>=b.g?e():a.fonts.load(b.b.style+" "+b.b.weight+" 300px "+(b.j?E(b.b):b.b.b),b.o).then(function(a){1<=a.length?d():setTimeout(k,25)},function(){e()})}k()}),e=new Promise(function(a,c){setTimeout(c,b.g)});Promise.race([e,d]).then(function(){b.i(b.b)},function(){b.u(b.b)})};function Ea(a,b,c,d){this.w=a;this.b=b;this.g=0;this.o=this.m=!1;this.A=c;this.u=d}var Q=null;
|
||||
function Fa(a,b,c){var d={},e=b.b.length;if(!e&&c)B(a.b);else{a.g+=e;c&&(a.m=c);var f=[];J(b,function(b){var c=a.b;c.i&&w(c.g,[c.b.b("wf",b.b,D(b),"loading")]);C(c,"fontloading",b);c=null;if(null===Q)if(window.FontFace){var e=/Gecko.*Firefox\/(\d+)/.exec(window.navigator.userAgent),pa=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent);Q=e?42<parseInt(e[1],10):pa&&/Apple/.exec(window.navigator.vendor)?603<=parseInt(pa[1],10):!0}else Q=!1;Q?c=new Da(h(a.i,a),h(a.j,
|
||||
a),a.w,b,a.A,"BESbswy\ue000\ue001\ue002\ue003\ue004\ue005\ue006",a.u):c=new wa(h(a.i,a),h(a.j,a),a.w,b,a.A,d,"BESbswy\ue000\ue001\ue002\ue003\ue004\ue005\ue006",a.u);f.push(c)});for(b=0;b<f.length;b++)f[b].start()}}Ea.prototype.i=function(a){var b=this.b;b.i&&w(b.g,[b.b.b("wf",a.b,D(a),"active")],[b.b.b("wf",a.b,D(a),"loading"),b.b.b("wf",a.b,D(a),"inactive")]);C(b,"fontactive",a);this.o=!0;Ga(this)};
|
||||
Ea.prototype.j=function(a){var b=this.b;if(b.i){var c=ka(b.g,b.b.b("wf",a.b,D(a),"active")),d=[],e=[b.b.b("wf",a.b,D(a),"loading")];c||d.push(b.b.b("wf",a.b,D(a),"inactive"));w(b.g,d,e)}C(b,"fontinactive",a);Ga(this)};function Ga(a){!--a.g&&a.m&&(a.o?(a=a.b,a.i&&w(a.g,[a.b.b("wf","active")],[a.b.b("wf","loading"),a.b.b("wf","inactive")]),C(a,"active")):B(a.b))};function R(a){this.b=a;this.m=null;this.g=[];this.j=this.w=null;this.u=new I;this.o=this.i=null}var Ha=null,S="00000000000000003b9b12ea 00000000000000003b9b12ed 00000000000000003b9b12ef 00000000000000003b9b12f0 00000000000000003b9b12f2 00000000000000003b9b12f3".split(" ");function Ia(){null===Ha&&(Ha=window.CSS&&window.CSS.supports&&CSS.supports("font-variation-settings",'"wght" 400'));return Ha}R.prototype.supportsConfiguredBrowser=function(){return!0};
|
||||
R.prototype.init=function(){if(0<this.g.length){for(var a=[],b=0;b<this.g.length;b++)a.push(fa(this.g[b]));x(this.b,a.join(""))}};
|
||||
R.prototype.load=function(a,b,c){var d=this;c=c||{};if(this.j&&(a=location.hostname,!this.j.has(a))){console.error('Typekit: the domain "'+a+'" isn\'t in the list of published domains for kit "'+this.w+'".');B(new A(this.b,c,{}));return}a=c.timeout;var e=!!c.async,f=oa(),g=ra(this.u,f);c=new A(this.b,c,{active:function(){if(e){var a=K(g,f,d.i,!1);x(d.b,a)}if(d.m){var a=d.m,b=d.b,c=a.m,k=(window.__adobewebfontsappname__||a.app||"").toString().substr(0,20),b=b.g.location.hostname||b.i.location.hostname,
|
||||
p=[],y=[];window.Typekit?(window.Typekit.fonts||(window.Typekit.fonts=[]),y=window.Typekit.fonts):window.TypekitPreview&&(window.TypekitPreview.fonts||(window.TypekitPreview.fonts=[]),y=window.TypekitPreview.fonts);for(var z=0;z<a.b.length;z++){for(var xa=!1,ea=0;ea<y.length;ea++)if(a.b[z]===y[ea]){xa=!0;break}xa||(p.push(a.b[z]),y.push(a.b[z]))}p.length&&Ja(H(c,{s:a.j,k:a.o,app:k,ht:a.i,h:b,f:p.join("."),a:a.g,js:a.version,e:"js",_:(+new Date).toString()}))}},inactive:function(){if(e){var a=K(g,
|
||||
f,d.i,!1);x(d.b,a)}}});if(g.b.length){var k=K(g,f,this.i,e);x(this.b,k);var p=new Ea(this.b,c,a,e);ja(d.b,function(){Fa(p,g,b)})}else B(c)};function Ka(a,b){this.j=a;this.g=b;this.b=[]}Ka.prototype.i=function(a){this.b.push(a)};Ka.prototype.load=function(a,b){var c=a,d=b||{};"string"==typeof c?c=[c]:c&&c.length||(d=c||{},c=[]);if(c.length)for(var e=this,f=c.length,g=0;g<c.length;g++)La(this,c[g],function(){--f||Ma(e,d)});else Ma(this,d)};function La(a,b,c){b=H(a.j,{id:b});la(a.g,b,c)}
|
||||
function Ma(a,b){if(a.b.length){for(var c=new A(a.g,b,{}),d=0;d<a.b.length;d++)a.b[d].init();c.i&&w(c.g,[c.b.b("wf","loading")]);C(c,"loading");for(c=0;c<a.b.length;c++)a.b[c].load(null,c==a.b.length-1,b);a.b=[]}};function Na(){var a=m.ps,b=m.ht,c=Oa,d=m.a,e=m.kt,f=m.js,g=m.l;this.m=new G(m.ping);this.j=a;this.i=b;this.b=c||[];this.g=d||null;this.o=e||null;this.version=f||null;this.app=g||null}function Ja(a){var b=new Image(1,1),c=!1;b.src=a;b.onload=function(){c=!0;b.onload=null};setTimeout(function(){c||(b.src="about:blank",b.onload=null)},3E3)};var Pa=new function(){var a=window;this.g=this.i=a;this.b=this.g.document};window.Typekit||(window.Typekit={});if(!window.Typekit.load){var T=new Ka(new G("//"+(window.Typekit.config||{}).hn+"/{id}.js"),Pa);window.Typekit.load=function(){T.load.apply(T,arguments)};window.Typekit.addKit=function(){T.i.apply(T,arguments)}}for(var U,m=window.Typekit.config||{},Oa=[],V=m.fc,Qa=0;Qa<V.length;Qa++)Oa.push(V[Qa].id);U=new R(Pa);m.ping&&(U.m=new Na);m.vft&&(U.o=m.vft);
|
||||
if(m.fc)for(var W=m.fc,X=0;X<W.length;X++){var Y=W[X].src,Ra=W[X].descriptors||{};if(U.o&&Ia()&&1===Ra.subset_id)for(var Z=0;Z<S.length;Z++)if(-1!==Y.indexOf(S[Z])){Y=Y.replace(S[Z],"00000000000000003b9b12ef");break}U.u.b.push(new ma(W[X].family,Y,W[X].descriptors))}if(m.dl){var Sa=m.dl;try{U.j=new ia(Sa)}catch(a){}}m.kt&&(U.w=m.kt);m.token&&(U.i=m.token);if(m.c)for(var n=0;n<m.c.length;n+=2)U.g.push(new da);window.Typekit.addKit(U);
|
||||
function Ta(){if(!Ia())return!1;for(var a=m.fc,b=0;b<a.length;b++)if(1===a[b].descriptors.subset_id)for(var c=0;c<S.length;c++)if(-1!==a[b].src.indexOf(S[c]))return!0;return!1}function Ua(a,b){var c=m.fc,d=na(b);if(!Ia()||!m.vft)return!1;for(var e=0;e<c.length;e++)if(c[e].family===a&&c[e].descriptors.weight===d.weight&&c[e].descriptors.style===d.style&&1===c[e].descriptors.subset_id)for(var f=0;f<S.length;f++)if(-1!==c[e].src.indexOf(S[f]))return!0;return!1}
|
||||
if(m.pm&&!window.WebFont&&1===Math.round(30*Math.random())){var Va=window.Typekit.load,Wa=[];window.Typekit.load=function(a){a=a||{};var b=a.active||function(){},c=a.fontactive||function(){},d=(new Date).getTime();a.active=function(){b();if(!window.XDomainRequest){var a=new Image,c=function(a){a={fonts:Wa,augmentations:[],font_loading:window.FontFace?"native":"non-native",active_duration:(new Date).getTime()-d,javascript_version:m.js,kit_type:"configurable",ad_blocker:a,test_group:Ta()};a=JSON.stringify(a);
|
||||
if(!window.XDomainRequest){var b=new XMLHttpRequest;b.open("POST","https://performance.typekit.net/");b.send(a)}};a.src="https://p.typekit.net/p.gif?";a.onload=function(){for(var a=!1,b=0;b<document.styleSheets.length;b++)if(null===document.styleSheets[b].href&&/ghostery-purple-box/.test(document.styleSheets[b].ownerNode.textContent)){a=!0;break}c(a)};a.onerror=function(){c(!0)}}};a.fontactive=function(a,b){c(a,b);var g;a:{g=na(b);for(var k=0;k<V.length;k++)if(V[k].family===a&&V[k].descriptors.weight===
|
||||
g.weight&&V[k].descriptors.style===g.style){g=V[k].id;break a}g=0}Wa.push({id:g,duration:(new Date).getTime()-d,dynamic:!1,weight:b.charAt(1)+"00",variable:Ua(a,b)})};Va(a)}}if(window.WebFont)try{window.Typekit.load()}catch(a){};}(this,document));
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
------------------------------------------------
|
||||
- Check e todo's
|
||||
------------------------------------------------
|
||||
|
||||
OK - Inserire Costura Fody x fare ILMerge di dll + assembly vari x SOUR
|
||||
- Verifica distinzione caso release e debug: https://tech.trailmax.info/2014/01/bundling-all-your-assemblies-into-one-or-alternative-to-ilmerge/
|
||||
- Continuare costruzione MSI con WIX con soli files di assembly merged...
|
||||
@@ -0,0 +1,15 @@
|
||||
# Gestione fix files di log in caso di errore di formattazione (separatore ora formattata con "." al posto di ":")
|
||||
#
|
||||
# ./RecorderLogFixer .ps1 nomefile_senza_virgole
|
||||
|
||||
# Get-Help about_regular_expressions
|
||||
# https://www.itprotoday.com/powershell/replacing-strings-files-using-powershell
|
||||
# https://regex101.com/
|
||||
|
||||
param([string] $file = "SOUR.log")
|
||||
|
||||
# leggo file
|
||||
Get-Content $file |
|
||||
# sostituisco 2 volte x i 2 item
|
||||
ForEach-Object { $_ -replace "([\w|\W]+)T(\w+)[.](\w+)[.](\w+)[.](\w+)", '$1T$2:$3:$4.$5' } |
|
||||
ForEach-Object { $_ -replace "([\w|\W]+)T(\w+)[.](\w+)[.](\w+)[.](\w+)", '$1T$2:$3:$4.$5' } | Out-file -encoding UTF8 fix_$file
|
||||
@@ -0,0 +1,687 @@
|
||||
using ProEdge.Model;
|
||||
using ProEdge.Model.Report;
|
||||
using ProEdge.Model.Report.MachineEvents;
|
||||
using ProEdge.Report;
|
||||
using Schneider.PLC;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Xml;
|
||||
using TeamDev.SDK;
|
||||
using TeamDev.SDK.MVVM;
|
||||
|
||||
namespace ProEdge.IOT
|
||||
{
|
||||
public class RedisManager
|
||||
{
|
||||
private enum Status
|
||||
{
|
||||
EXE,
|
||||
READY,
|
||||
AZZERAMENTO, // Stato aggiuntivo da non inviare a Redis
|
||||
RISCALDAMENTO, // Stato aggiuntivo da non inviare a Redis
|
||||
SETUP,
|
||||
FAIL,
|
||||
POWER_OFF
|
||||
}
|
||||
|
||||
private static Dictionary<Type, Dictionary<string, string>> _mappingProperties;
|
||||
private static Dictionary<Type, Type> _nonPlcGroupsMappingTypes;
|
||||
private static Dictionary<Type, Dictionary<int, int>> _axisToTypeMapping;
|
||||
private static Dictionary<Type, Dictionary<int, string>> _activeTimesToTypeMapping;
|
||||
private static Dictionary<Type, Dictionary<int, string>> _loadsToTypeMapping;
|
||||
|
||||
private Dictionary<string, string>[] _mappingGroups;
|
||||
private Dictionary<int, List<int>> _mappingNonPLCGroupsToPLCGroups;
|
||||
private Dictionary<int, string> _mappingLoads;
|
||||
private Dictionary<int, string> _mappingActiveTimes;
|
||||
private Dictionary<int, string> _mappingAxes;
|
||||
|
||||
private int[] ActiveAlarms;
|
||||
private int[] ActiveWarnings;
|
||||
private int[] ActiveMessages;
|
||||
private bool[] ActiveStatuses = new bool[Enum.GetNames(typeof(Status)).Length];
|
||||
static RedisManager()
|
||||
{
|
||||
_mappingProperties = new Dictionary<Type, Dictionary<string, string>>();
|
||||
_nonPlcGroupsMappingTypes = new Dictionary<Type, Type>();
|
||||
_loadsToTypeMapping = new Dictionary<Type, Dictionary<int, string>>();
|
||||
_activeTimesToTypeMapping = new Dictionary<Type, Dictionary<int, string>>();
|
||||
_axisToTypeMapping = new Dictionary<Type, Dictionary<int, int>>();
|
||||
// PREFIX
|
||||
var subgroups = "Subgroups:";
|
||||
// SUFFIXES
|
||||
var distance = ":Distance";
|
||||
var feedrate = ":FeedRate";
|
||||
var activetime = ":ActiveTime";
|
||||
var repetition = ":Repetition";
|
||||
var value = ":Value";
|
||||
var load = ":Load";
|
||||
|
||||
Dictionary<string, string> dict;
|
||||
Dictionary<int, string> loadDict;
|
||||
Dictionary<int, string> activeTimeDict;
|
||||
Dictionary<int, int> axisDict;
|
||||
|
||||
// BASE MACCHINA
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.BaseMacchina.KmCingolo), $"{subgroups}01{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.BaseMacchina.VelocitaCingolo), $"{subgroups}01{feedrate}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.BaseMacchina.ActiveTimeCingolo), $"{subgroups}01{activetime}");
|
||||
_mappingProperties.Add(typeof(BaseMacchina), dict);
|
||||
loadDict = new Dictionary<int, string>();
|
||||
loadDict.Add(1, $"{subgroups}01{load}");
|
||||
_loadsToTypeMapping.Add(typeof(BaseMacchina), loadDict);
|
||||
axisDict = new Dictionary<int, int>();
|
||||
axisDict.Add(1, 2);
|
||||
axisDict.Add(2, 3);
|
||||
_axisToTypeMapping.Add(typeof(BaseMacchina), axisDict);
|
||||
|
||||
// RETTIFICATORE 2 INVERTER
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Rettificatore2Inverter.MetriFresaAnteriore), $"{subgroups}05{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Rettificatore2Inverter.MetriFresaPosteriore), $"{subgroups}06{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Rettificatore2Inverter.NumeroPannelloAnteriore), $"{subgroups}07{repetition}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Rettificatore2Inverter.NumeroPannelliPosteriore), $"{subgroups}08{repetition}");
|
||||
_mappingProperties.Add(typeof(Rettificatore2Inverter), dict);
|
||||
loadDict = new Dictionary<int, string>();
|
||||
loadDict.Add(2, $"{subgroups}01{load}");
|
||||
loadDict.Add(8, $"{subgroups}02{load}");
|
||||
_loadsToTypeMapping.Add(typeof(Rettificatore2Inverter), loadDict);
|
||||
activeTimeDict = new Dictionary<int, string>();
|
||||
activeTimeDict.Add(3, $"{subgroups}03{activetime}");
|
||||
activeTimeDict.Add(4, $"{subgroups}04{activetime}");
|
||||
_activeTimesToTypeMapping.Add(typeof(Rettificatore2Inverter), activeTimeDict);
|
||||
axisDict = new Dictionary<int, int>();
|
||||
axisDict.Add(4, 9);
|
||||
_axisToTypeMapping.Add(typeof(Rettificatore2Inverter), axisDict);
|
||||
|
||||
// INCOLLAGGIO VC1000
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.IncollaggioVC1000.NumeroPannelliLavorati), "Repetition");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.IncollaggioVC1000.NumeroInterventiCesoia), $"{subgroups}04{repetition}");
|
||||
_mappingProperties.Add(typeof(IncollatoreVC1000), dict);
|
||||
loadDict = new Dictionary<int, string>();
|
||||
loadDict.Add(5, $"{subgroups}02{load}");
|
||||
_loadsToTypeMapping.Add(typeof(IncollatoreVC1000), loadDict);
|
||||
activeTimeDict = new Dictionary<int, string>();
|
||||
activeTimeDict.Add(15, $"{subgroups}03{activetime}");
|
||||
_activeTimesToTypeMapping.Add(typeof(IncollatoreVC1000), activeTimeDict);
|
||||
axisDict = new Dictionary<int, int>();
|
||||
axisDict.Add(4, 1);
|
||||
axisDict.Add(25, 1);
|
||||
_axisToTypeMapping.Add(typeof(IncollatoreVC1000), axisDict);
|
||||
|
||||
// PREFUSORE
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Prefusore.TemperaturaPrefusore), $"{subgroups}01{value}");
|
||||
_mappingProperties.Add(typeof(Prefusore), dict);
|
||||
|
||||
// VASCA COLLA VC1000
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.VascaCollaVC1000.TemperaturaVasca), $"{subgroups}01{value}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.VascaCollaVC1000.TemperaturaRullo), $"{subgroups}02{value}");
|
||||
_mappingProperties.Add(typeof(VascaCollaVC1000), dict);
|
||||
loadDict = new Dictionary<int, string>();
|
||||
loadDict.Add(4, $"{subgroups}04{load}");
|
||||
_loadsToTypeMapping.Add(typeof(VascaCollaVC1000), loadDict);
|
||||
activeTimeDict = new Dictionary<int, string>();
|
||||
activeTimeDict.Add(14, $"{subgroups}05{activetime}");
|
||||
_activeTimesToTypeMapping.Add(typeof(VascaCollaVC1000), activeTimeDict);
|
||||
axisDict = new Dictionary<int, int>();
|
||||
axisDict.Add(17, 2);
|
||||
_axisToTypeMapping.Add(typeof(VascaCollaVC1000), axisDict);
|
||||
|
||||
// AIR FUSION
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.AirFusion.TemperaturaLeister1), $"{subgroups}01{value}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.AirFusion.TemperaturaLeister2), $"{subgroups}02{value}");
|
||||
_mappingProperties.Add(typeof(AirFusion), dict);
|
||||
|
||||
// LAMPADE
|
||||
_nonPlcGroupsMappingTypes.Add(typeof(Lampada), typeof(IncollatoreVC1000));
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.IncollaggioVC1000.TempoAccensioneLampade), $"ActiveTime");
|
||||
_mappingProperties.Add(typeof(Lampada), dict);
|
||||
|
||||
// INTESTATORE KSEL
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.IntestatoreKSEL.MetriLamaAnteriore), $"{subgroups}04{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.IntestatoreKSEL.MetriLamaPosteriore), $"{subgroups}05{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.IntestatoreKSEL.NumeroPannelliAnteriore), $"{subgroups}06{repetition}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.IntestatoreKSEL.NumeroPannelliPosteriore), $"{subgroups}07{repetition}");
|
||||
_mappingProperties.Add(typeof(IntestatoreKSEL), dict);
|
||||
loadDict = new Dictionary<int, string>();
|
||||
loadDict.Add(6, $"{subgroups}01{load}");
|
||||
_loadsToTypeMapping.Add(typeof(IntestatoreKSEL), loadDict);
|
||||
activeTimeDict = new Dictionary<int, string>();
|
||||
activeTimeDict.Add(3, $"{subgroups}02{activetime}");
|
||||
activeTimeDict.Add(4, $"{subgroups}03{activetime}");
|
||||
_activeTimesToTypeMapping.Add(typeof(IntestatoreKSEL), activeTimeDict);
|
||||
|
||||
// REFILATORE RSINV
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.RefilatoreRSINV.MetriFresaSuperiore), $"{subgroups}04{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.RefilatoreRSINV.MetriFresaInferiore), $"{subgroups}05{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.RefilatoreRSINV.NumeroPannelliSuperiore), $"{subgroups}06{repetition}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.RefilatoreRSINV.NumeroPannelliInferiore), $"{subgroups}07{repetition}");
|
||||
_mappingProperties.Add(typeof(RefilatoreRSINV), dict);
|
||||
loadDict = new Dictionary<int, string>();
|
||||
loadDict.Add(3, $"{subgroups}01{load}");
|
||||
_loadsToTypeMapping.Add(typeof(RefilatoreRSINV), loadDict);
|
||||
activeTimeDict = new Dictionary<int, string>();
|
||||
activeTimeDict.Add(6, $"{subgroups}02{activetime}");
|
||||
activeTimeDict.Add(5, $"{subgroups}03{activetime}");
|
||||
_activeTimesToTypeMapping.Add(typeof(RefilatoreRSINV), activeTimeDict);
|
||||
|
||||
// SPIGOLATORE 6 ASSI
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Spigolatore6Assi.MetriFresaSuperiore1), $"{subgroups}09{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Spigolatore6Assi.MetriFresaInferiore1), $"{subgroups}05{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Spigolatore6Assi.MetriFresaSuperiore2), $"{subgroups}10{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Spigolatore6Assi.MetriFresaInferiore2), $"{subgroups}06{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Spigolatore6Assi.MetriFresaSuperiore3), $"{subgroups}11{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Spigolatore6Assi.MetriFresaInferiore3), $"{subgroups}07{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Spigolatore6Assi.MetriFresaSuperiore4), $"{subgroups}12{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Spigolatore6Assi.MetriFresaInferiore4), $"{subgroups}08{distance}");
|
||||
// TODO
|
||||
//dict.Add(nameof(ProEdge.Model.IOT.Spigolatore6Assi.NumeroPannelliSuperiore), $"{subgroups}04{repetition}");
|
||||
//dict.Add(nameof(ProEdge.Model.IOT.Spigolatore6Assi.NumeroPannelliInferiore), $"{subgroups}05{repetition}");
|
||||
_mappingProperties.Add(typeof(Spigolatore6Assi), dict);
|
||||
loadDict = new Dictionary<int, string>();
|
||||
loadDict.Add(9, $"{subgroups}01{load}");
|
||||
loadDict.Add(12, $"{subgroups}02{load}");
|
||||
_loadsToTypeMapping.Add(typeof(Spigolatore6Assi), loadDict);
|
||||
activeTimeDict = new Dictionary<int, string>();
|
||||
activeTimeDict.Add(7, $"{subgroups}03{activetime}");
|
||||
activeTimeDict.Add(8, $"{subgroups}04{activetime}");
|
||||
_activeTimesToTypeMapping.Add(typeof(Spigolatore6Assi), activeTimeDict);
|
||||
axisDict = new Dictionary<int, int>();
|
||||
axisDict.Add(7, 13);
|
||||
axisDict.Add(8, 15);
|
||||
axisDict.Add(9, 17);
|
||||
axisDict.Add(10, 14);
|
||||
axisDict.Add(11, 16);
|
||||
axisDict.Add(12, 18);
|
||||
_axisToTypeMapping.Add(typeof(Spigolatore6Assi), axisDict);
|
||||
|
||||
// ROUND SK2
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.RoundSK2.MetriFresaSuperiore), $"{subgroups}06{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.RoundSK2.MetriFresaInferiore), $"{subgroups}05{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.RoundSK2.NumeroCicliLavorazione1Superiore), $"{subgroups}09{repetition}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.RoundSK2.NumeroCicliLavorazione1Inferiore), $"{subgroups}07{repetition}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.RoundSK2.NumeroCicliLavorazione2Superiore), $"{subgroups}10{repetition}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.RoundSK2.NumeroCicliLavorazione2Inferiore), $"{subgroups}08{repetition}");
|
||||
_mappingProperties.Add(typeof(RoundSK2), dict);
|
||||
loadDict = new Dictionary<int, string>();
|
||||
loadDict.Add(10, $"{subgroups}01{load}");
|
||||
_loadsToTypeMapping.Add(typeof(RoundSK2), loadDict);
|
||||
activeTimeDict = new Dictionary<int, string>();
|
||||
activeTimeDict.Add(9, $"{subgroups}02{activetime}");
|
||||
activeTimeDict.Add(10, $"{subgroups}03{activetime}");
|
||||
_activeTimesToTypeMapping.Add(typeof(RoundSK2), activeTimeDict);
|
||||
axisDict = new Dictionary<int, int>();
|
||||
axisDict.Add(15, 10);
|
||||
axisDict.Add(16, 11);
|
||||
_axisToTypeMapping.Add(typeof(RoundSK2), axisDict);
|
||||
|
||||
// RASCHIABORDO 4 ASSI
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Raschiabordo4Assi.MetriColtelloSuperiore1), $"{subgroups}05{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Raschiabordo4Assi.MetriColtelloInferiore1), $"{subgroups}01{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Raschiabordo4Assi.MetriColtelloSuperiore2), $"{subgroups}06{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Raschiabordo4Assi.MetriColtelloInferiore2), $"{subgroups}02{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Raschiabordo4Assi.MetriColtelloSuperiore3), $"{subgroups}07{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Raschiabordo4Assi.MetriColtelloInferiore3), $"{subgroups}03{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Raschiabordo4Assi.MetriColtelloSuperiore4), $"{subgroups}08{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Raschiabordo4Assi.MetriColtelloInferiore4), $"{subgroups}04{distance}");
|
||||
// TODO
|
||||
//dict.Add(nameof(ProEdge.Model.IOT.Raschiabordo4Assi.NumeroPannelliSuperiore), $"{subgroups}06{distance}");
|
||||
//dict.Add(nameof(ProEdge.Model.IOT.Raschiabordo4Assi.NumeroPannelliInferiore), $"{subgroups}05{distance}");
|
||||
_mappingProperties.Add(typeof(Raschiabordo4Assi), dict);
|
||||
axisDict = new Dictionary<int, int>();
|
||||
axisDict.Add(19, 11);
|
||||
axisDict.Add(20, 13);
|
||||
axisDict.Add(22, 12);
|
||||
axisDict.Add(23, 14);
|
||||
_axisToTypeMapping.Add(typeof(Raschiabordo4Assi), axisDict);
|
||||
|
||||
// TOUPIE
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Toupie.MetriLavorati), $"{subgroups}03{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Toupie.NumeroPannelli), $"{subgroups}04{repetition}");
|
||||
_mappingProperties.Add(typeof(Toupie), dict);
|
||||
loadDict = new Dictionary<int, string>();
|
||||
loadDict.Add(7, $"{subgroups}01{load}");
|
||||
_loadsToTypeMapping.Add(typeof(Toupie), loadDict);
|
||||
activeTimeDict = new Dictionary<int, string>();
|
||||
activeTimeDict.Add(13, $"{subgroups}02{activetime}");
|
||||
_activeTimesToTypeMapping.Add(typeof(Toupie), activeTimeDict);
|
||||
|
||||
// RASCHIACOLLA
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Raschiacolla.MetriLavoratiSuperiore), $"{subgroups}02{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Raschiacolla.MetriLavoratiInferiore), $"{subgroups}01{distance}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Raschiacolla.NumeroPannelliSuperiore), $"{subgroups}04{repetition}");
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Raschiacolla.NumeroPannelliInferiore), $"{subgroups}03{repetition}");
|
||||
_mappingProperties.Add(typeof(RCA), dict);
|
||||
|
||||
// SPAZZOLE
|
||||
dict = new Dictionary<string, string>();
|
||||
dict.Add(nameof(ProEdge.Model.IOT.Spazzole.MetriLavorati), $"Distance");
|
||||
_mappingProperties.Add(typeof(SpazzoleSPK), dict);
|
||||
}
|
||||
|
||||
public static RedisManager Current { get; set; } = new RedisManager();
|
||||
private RedisManager() { }
|
||||
|
||||
// Indica se lo scambio di dati con Redis è attivo
|
||||
private bool Active { get; set; }
|
||||
|
||||
public void Init(GruppoBase[] groups)
|
||||
{
|
||||
Active = true;
|
||||
if (!Active) return;
|
||||
|
||||
initMapping(groups);
|
||||
|
||||
// Messaggio per terminare l'heartbeat e le comunicazioni in generale
|
||||
MessageServices.Current.Subscribe("REDIS_END_COMUNICATION", (o1, o2) => { Active = false; });
|
||||
|
||||
// Ricezione stato di allarme
|
||||
MessageServices.Current.Subscribe<StatoMacchina>("CLIENTNOTIFY_UPDATED_STATUS_MACHINE", (o, status) =>
|
||||
{
|
||||
Write("Machine:Power", (status.Stato > 50 && status.Stato < 54) || (status.Stato > 60 && status.Stato < 64) ? "true" : "false");
|
||||
Write("Machine:Alarm", status.Alarms ? "true" : "false");
|
||||
});
|
||||
|
||||
// resetto TUTTE le aree di competenza
|
||||
redUtil.man.redFlushKey(redUtil.man.redHash("AdpVeto*"));
|
||||
redUtil.man.redFlushKey(redUtil.man.redHash("AdpConf*"));
|
||||
redUtil.man.redFlushKey(redUtil.man.redHash("Adp*"));
|
||||
|
||||
// Imposto CONF
|
||||
Write("Adp:Vers", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString());
|
||||
|
||||
Write("Adp:Status", "started");
|
||||
|
||||
// Thread per l'heartbeat
|
||||
new Thread(() =>
|
||||
{
|
||||
// una volta al secondo
|
||||
while (Active)
|
||||
{
|
||||
Write("Adp:Heartbeat", DateTime.UtcNow.ToString("yyyy-MM-dd\\THH:mm:ss.fffK"));
|
||||
Thread.Sleep(1000);
|
||||
}
|
||||
redUtil.man.setRSV(redUtil.man.redHash("Adp:Status"), "stopped");
|
||||
}).Start();
|
||||
|
||||
// Scrittura datamodel
|
||||
var datamodelPath = Path.Combine(AppContext.BaseDirectory, ConfigurationManager.AppSettings["DataModelFile"]);
|
||||
if (File.Exists(datamodelPath))
|
||||
{
|
||||
using (StreamReader sr = new StreamReader(new FileStream(datamodelPath, FileMode.Open, FileAccess.Read)))
|
||||
{
|
||||
var datamodel = xmlSanitize(sr.ReadToEnd());
|
||||
WriteConf("DataModel", datamodel);
|
||||
}
|
||||
}
|
||||
|
||||
// imposto VETO (codici allarme da ignorare)
|
||||
WriteVeto("Hmi:Condition", "000000000000|000");
|
||||
WriteVeto("Plc:Condition", "000000000000|000");
|
||||
|
||||
// Versione PLC
|
||||
Write("Machine:Plc:Version", PlcStatus.PLCVersion());
|
||||
|
||||
// Versione HMI (TODO: Aggiorna con la versione del client)
|
||||
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetEntryAssembly();
|
||||
FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
|
||||
Write("Machine:Hmi:Version", fvi.FileVersion);
|
||||
|
||||
// Utente Collegato
|
||||
Write("Machine:Hmi:User", "null");
|
||||
MessageServices.Current.Subscribe<DbOperator>("LOGGED_IN", (o, u) => Write("Machine:Hmi:User", u.User));
|
||||
MessageServices.Current.Subscribe("LOGGED_OUT", (o, u) => Write("Machine:Hmi:User", "null"));
|
||||
|
||||
// STATUS
|
||||
/*
|
||||
EXE=Macchina piena cingolo in moto ===> MachineWorkPieces
|
||||
READY=Macchina in work e (cingolo in moto e vuota o cingolo fermo e abilitato ma mancano consensi esterni) ===> MachineWorkNoPieces/MachineStopTrackWithPieces
|
||||
SETUP=Azzeramento assi in corso e/o riscaldamento colla ===> stati vari, non c'è in eventi (e se AirFusion?)
|
||||
FAIL=Macchina in allarme ===> MachineInAlarm
|
||||
POWER_OFF=Macchina in stop" ===> !(quelli sopra)
|
||||
*/
|
||||
Write("Machine:Status", "POWER_OFF");
|
||||
ActiveStatuses[(int)Status.POWER_OFF] = true;
|
||||
WriteStatus();
|
||||
Action<string, bool> updateStatusArray = (s, b) =>
|
||||
{
|
||||
switch (s)
|
||||
{
|
||||
case nameof(MachineEventTypeIds.General.MachineInAlarm):
|
||||
ActiveStatuses[(int)Status.FAIL] = b;
|
||||
break;
|
||||
case nameof(MachineEventTypeIds.General.MachineWorkNoPieces):
|
||||
case nameof(MachineEventTypeIds.General.MachineStopTrackWithPieces):
|
||||
ActiveStatuses[(int)Status.READY] = b;
|
||||
break;
|
||||
case nameof(MachineEventTypeIds.General.MachineWorkPieces):
|
||||
ActiveStatuses[(int)Status.EXE] = b;
|
||||
break;
|
||||
default: return;
|
||||
}
|
||||
WriteStatus();
|
||||
};
|
||||
MessageServices.Current.Subscribe<Event>("CLIENTNOTIFY_UPDATED_NEW_EVENT", (o, e) => updateStatusArray(e.Description, true));
|
||||
MessageServices.Current.Subscribe<Event>("CLIENTNOTIFY_UPDATED_EVENT_CLOSED", (o, e) => updateStatusArray(e.Description, false));
|
||||
var vc = groups.Where(g => g is IVascaColla).FirstOrDefault();
|
||||
if (vc != null)
|
||||
MessageServices.Current.Subscribe<StatoVascaColla>("CLIENTNOTIFY_UPDATED_STATUS_" + vc.UniqueID, (o, s) =>
|
||||
{
|
||||
ActiveStatuses[(int)Status.RISCALDAMENTO] = s.Stato == 3 && !s.ConsensoVascaColla;
|
||||
ActiveStatuses[(int)Status.SETUP] = ActiveStatuses[(int)Status.AZZERAMENTO] || ActiveStatuses[(int)Status.RISCALDAMENTO];
|
||||
WriteStatus();
|
||||
});
|
||||
MessageServices.Current.Subscribe<StatoComandiManuali>("CLIENTNOTIFY_UPDATED_STATUS_MANUAL", (o, s) =>
|
||||
{
|
||||
ActiveStatuses[(int)Status.AZZERAMENTO] = s.AzzeramentoAssiInCorso;
|
||||
ActiveStatuses[(int)Status.SETUP] = ActiveStatuses[(int)Status.AZZERAMENTO] || ActiveStatuses[(int)Status.RISCALDAMENTO];
|
||||
WriteStatus();
|
||||
});
|
||||
}
|
||||
|
||||
private void initMapping(GruppoBase[] groups)
|
||||
{
|
||||
_mappingGroups = new Dictionary<string, string>[groups.Max(g => g.Id)];
|
||||
_mappingNonPLCGroupsToPLCGroups = new Dictionary<int, List<int>>();
|
||||
_mappingLoads = new Dictionary<int, string>();
|
||||
_mappingActiveTimes = new Dictionary<int, string>();
|
||||
_mappingAxes = new Dictionary<int, string>();
|
||||
|
||||
foreach (var g in groups)
|
||||
{
|
||||
var gType = g.GetType();
|
||||
// Dati dei gruppi
|
||||
if (_mappingProperties.ContainsKey(gType))
|
||||
_mappingGroups[g.Id] = _mappingProperties[gType];
|
||||
// Carico inverter
|
||||
if (_loadsToTypeMapping.ContainsKey(gType))
|
||||
foreach (var l in _loadsToTypeMapping[gType])
|
||||
_mappingLoads[l.Key] = $"{g.Id:00}:{l.Value}";
|
||||
// Active Time mandrini
|
||||
if (_activeTimesToTypeMapping.ContainsKey(gType))
|
||||
foreach (var l in _activeTimesToTypeMapping[gType])
|
||||
_mappingActiveTimes[l.Key] = $"{g.Id:00}:{l.Value}";
|
||||
// Dati assi
|
||||
if (_axisToTypeMapping.ContainsKey(gType))
|
||||
foreach (var l in _axisToTypeMapping[gType])
|
||||
_mappingAxes[l.Key] = $"{g.Id:00}:Subgroups:{l.Value:00}";
|
||||
}
|
||||
|
||||
// GRUPPI NON PLC
|
||||
foreach (var g in groups)
|
||||
{
|
||||
var gType = g.GetType();
|
||||
if (_nonPlcGroupsMappingTypes.ContainsKey(gType))
|
||||
{
|
||||
var plcType = _nonPlcGroupsMappingTypes[gType];
|
||||
var realGroupId = groups.Where(gr => gr.GetType() == plcType).Select(gr => gr.Id).First();
|
||||
if (!_mappingNonPLCGroupsToPLCGroups.ContainsKey(realGroupId))
|
||||
_mappingNonPLCGroupsToPLCGroups.Add(realGroupId, new List<int>());
|
||||
_mappingNonPLCGroupsToPLCGroups[realGroupId].Add(g.Id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteAlarmsList()
|
||||
{
|
||||
string result = "000000000000|000";
|
||||
if (ActiveAlarms != null)
|
||||
lock (ActiveAlarms)
|
||||
foreach (var alm in ActiveAlarms)
|
||||
result += $",000A{alm:0000}|900";
|
||||
if (ActiveWarnings != null)
|
||||
lock (ActiveWarnings)
|
||||
foreach (var wrn in ActiveWarnings)
|
||||
result += $",000W{wrn:0000}|500";
|
||||
if (ActiveMessages != null)
|
||||
lock (ActiveMessages)
|
||||
foreach (var msg in ActiveMessages)
|
||||
result += $",000M{msg:0000}|100";
|
||||
Write("Machine:Plc:Condition", result);
|
||||
}
|
||||
|
||||
private void WriteStatus()
|
||||
{
|
||||
Status result = Status.POWER_OFF;
|
||||
if (ActiveStatuses[(int)Status.SETUP]) result = Status.SETUP;
|
||||
if (ActiveStatuses[(int)Status.READY]) result = Status.READY;
|
||||
if (ActiveStatuses[(int)Status.EXE]) result = Status.EXE;
|
||||
if (ActiveStatuses[(int)Status.FAIL]) result = Status.FAIL;
|
||||
|
||||
Write("Machine:Status", result.ToString());
|
||||
}
|
||||
|
||||
private void WriteConf(string key, string value)
|
||||
{
|
||||
Write($"AdpConf:{key}", value);
|
||||
}
|
||||
|
||||
private void WriteVeto(string key, string value)
|
||||
{
|
||||
Write($"AdpVeto:{key}", value);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Metodo di sanitizzazione XML
|
||||
/// - elimina commenti
|
||||
/// - formatta
|
||||
/// </summary>
|
||||
/// <param name="xmlOrig"></param>
|
||||
/// <returns></returns>
|
||||
private string xmlSanitize(string xmlOrig)
|
||||
{
|
||||
string sXml = xmlOrig;
|
||||
bool xmlSanitize = false;
|
||||
#if DEBUG
|
||||
xmlSanitize = true;// utils.CRB("xmlSanitize");
|
||||
#endif
|
||||
// se richeisto faccio sanitize xml (pulizia commenti...)
|
||||
if (xmlSanitize)
|
||||
{
|
||||
// primo step: converto stringa in dox XML
|
||||
XmlDocument xmlDoc = new XmlDocument();
|
||||
xmlDoc.PreserveWhitespace = false;
|
||||
xmlDoc.LoadXml(sXml);
|
||||
// ora lo parso come lista eliminando i commenti
|
||||
XmlNodeList list = xmlDoc.SelectNodes("//comment()");
|
||||
foreach (XmlNode node in list)
|
||||
{
|
||||
node.ParentNode.RemoveChild(node);
|
||||
}
|
||||
// fix formattazione "riscrivendo" indentazione...
|
||||
StringWriter string_writer = new StringWriter();
|
||||
XmlTextWriter xml_text_writer = new XmlTextWriter(string_writer);
|
||||
xml_text_writer.Formatting = Formatting.Indented;
|
||||
xmlDoc.WriteTo(xml_text_writer);
|
||||
sXml = string_writer.ToString();
|
||||
}
|
||||
// restituisco
|
||||
return sXml;
|
||||
}
|
||||
|
||||
public bool Write(string key, string value)
|
||||
{
|
||||
// TODO: se non connesso, attendi che si riconnetta
|
||||
|
||||
if (Active && redUtil.connRedis.IsConnected)
|
||||
{
|
||||
string hashKey = redUtil.man.redHash(key);
|
||||
string hashVal = string.Format(value);
|
||||
redUtil.man.setRSV(hashKey, hashVal);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Scrive la lista di tutti i possibili allarmi/warning/messaggi con la loro traduzione nella lingua corrente, in inglese ed in italiano
|
||||
public void WriteAlarms(string currentLanguage, Dictionary<string, string> curr, Dictionary<string, string> en, Dictionary<string, string> it)
|
||||
{
|
||||
if (!Active) return;
|
||||
|
||||
// Scrivo la lingua attuale
|
||||
Write("Machine:Hmi:Language", currentLanguage);
|
||||
|
||||
//var listCNC_curr = new List<KeyValuePair<string, string>>();
|
||||
var listPLC_curr = new List<KeyValuePair<string, string>>();
|
||||
var listHMI_curr = new List<KeyValuePair<string, string>>();
|
||||
//var listCNC_it = new List<KeyValuePair<string, string>>();
|
||||
var listPLC_it = new List<KeyValuePair<string, string>>();
|
||||
var listHMI_it = new List<KeyValuePair<string, string>>();
|
||||
//var listCNC_en = new List<KeyValuePair<string, string>>();
|
||||
var listPLC_en = new List<KeyValuePair<string, string>>();
|
||||
var listHMI_en = new List<KeyValuePair<string, string>>();
|
||||
// imposto valori "empty" di default....
|
||||
//listCNC_curr.Add(new KeyValuePair<string, string>("000A0001|900", "NONE")); // Allarmi: 900, Warning: 500, Messaggi: 100
|
||||
//listCNC_en.Add(new KeyValuePair<string, string>("000000000000|000", "NONE"));
|
||||
//listCNC_it.Add(new KeyValuePair<string, string>("000000000000|000", "NONE"));
|
||||
listHMI_curr.Add(new KeyValuePair<string, string>("000000000000|000", "NONE"));
|
||||
listHMI_en.Add(new KeyValuePair<string, string>("000000000000|000", "NONE"));
|
||||
listHMI_it.Add(new KeyValuePair<string, string>("000000000000|000", "NONE"));
|
||||
listPLC_curr.Add(new KeyValuePair<string, string>("000000000000|000", "NONE"));
|
||||
listPLC_en.Add(new KeyValuePair<string, string>("000000000000|000", "NONE"));
|
||||
listPLC_it.Add(new KeyValuePair<string, string>("000000000000|000", "NONE"));
|
||||
|
||||
foreach (var key in curr.Keys)
|
||||
{
|
||||
string type = key.StartsWith("SCH_A") ? "900" : key.StartsWith("SCH_W") ? "500" : key.StartsWith("SCH_M") ? "100" : null;
|
||||
if (type == null) continue;
|
||||
int number = -1;
|
||||
if (int.TryParse(key.Substring(5), out number))
|
||||
{
|
||||
string prefix = type == "900" ? "000A" : type == "500" ? "000W" : "000M";
|
||||
var almKey = $"{prefix}{number:0000}|{type}";
|
||||
listPLC_curr.Add(new KeyValuePair<string, string>(almKey, !curr.ContainsKey(key) || string.IsNullOrEmpty(curr[key]) ? number.ToString() : curr[key]));
|
||||
listPLC_en.Add(new KeyValuePair<string, string>(almKey, !en.ContainsKey(key) || string.IsNullOrEmpty(en[key]) ? number.ToString() : en[key]));
|
||||
listPLC_it.Add(new KeyValuePair<string, string>(almKey, !it.ContainsKey(key) || string.IsNullOrEmpty(it[key]) ? number.ToString() : it[key]));
|
||||
//listPLC_curr.Add(new KeyValuePair<string, string>(almKey, curr[key]));
|
||||
//listPLC_en.Add(new KeyValuePair<string, string>(almKey, en[key]));
|
||||
//listPLC_it.Add(new KeyValuePair<string, string>(almKey, it[key]));
|
||||
}
|
||||
}
|
||||
|
||||
// salvo vettori lingua CURR
|
||||
//var hashKey = redUtil.man.redHash("AdpConf:Cnc:Condition:Curr");
|
||||
//redUtil.man.redFlushKey(hashKey);
|
||||
//redUtil.man.redSaveHashList(hashKey, listCNC_curr);
|
||||
var hashKey = redUtil.man.redHash("AdpConf:Hmi:Condition:Curr");
|
||||
redUtil.man.redFlushKey(hashKey);
|
||||
redUtil.man.redSaveHashList(hashKey, listHMI_curr);
|
||||
hashKey = redUtil.man.redHash("AdpConf:Plc:Condition:Curr");
|
||||
redUtil.man.redFlushKey(hashKey);
|
||||
redUtil.man.redSaveHashList(hashKey, listPLC_curr);
|
||||
// salvo vettori lingua EN
|
||||
//hashKey = redUtil.man.redHash("AdpConf:Cnc:Condition:En");
|
||||
//redUtil.man.redFlushKey(hashKey);
|
||||
//redUtil.man.redSaveHashList(hashKey, listCNC_en);
|
||||
hashKey = redUtil.man.redHash("AdpConf:Hmi:Condition:En");
|
||||
redUtil.man.redFlushKey(hashKey);
|
||||
redUtil.man.redSaveHashList(hashKey, listHMI_en);
|
||||
hashKey = redUtil.man.redHash("AdpConf:Plc:Condition:En");
|
||||
redUtil.man.redFlushKey(hashKey);
|
||||
redUtil.man.redSaveHashList(hashKey, listPLC_en);
|
||||
// salvo vettori lingua IT
|
||||
//hashKey = redUtil.man.redHash("AdpConf:Cnc:Condition:It");
|
||||
//redUtil.man.redFlushKey(hashKey);
|
||||
//redUtil.man.redSaveHashList(hashKey, listCNC_it);
|
||||
hashKey = redUtil.man.redHash("AdpConf:Hmi:Condition:It");
|
||||
redUtil.man.redFlushKey(hashKey);
|
||||
redUtil.man.redSaveHashList(hashKey, listHMI_it);
|
||||
hashKey = redUtil.man.redHash("AdpConf:Plc:Condition:It");
|
||||
redUtil.man.redFlushKey(hashKey);
|
||||
redUtil.man.redSaveHashList(hashKey, listPLC_it);
|
||||
|
||||
// Valori di default
|
||||
Write("Machine:Hmi:Condition", "000000000000|000");
|
||||
Write("Machine:Plc:Condition", "000000000000|000");
|
||||
|
||||
// Scritto l'elenco di allarmi, comincio a ricevere le variazioni degli allarmi
|
||||
MessageServices.Current.Subscribe<AlarmWarningList>("CLIENTNOTIFY_UPDATED_MESSAGES", (o, msgs) => { ActiveMessages = msgs.List.Select(m => m.ID).ToArray(); WriteAlarmsList(); });
|
||||
MessageServices.Current.Subscribe<AlarmWarningList>("CLIENTNOTIFY_UPDATED_WARNINGS", (o, wrns) => { ActiveWarnings = wrns.List.Select(m => m.ID).ToArray(); WriteAlarmsList(); });
|
||||
MessageServices.Current.Subscribe<AlarmWarningList>("CLIENTNOTIFY_UPDATED_ALARMS", (o, alms) => { ActiveAlarms = alms.List.Select(m => m.ID).ToArray(); WriteAlarmsList(); });
|
||||
|
||||
}
|
||||
|
||||
// Dati dei gruppi
|
||||
public void WriteGroupData(int idGroup, string property, string value)
|
||||
{
|
||||
// Lo stato di emergenza è contenuto nel gruppo Base Macchina
|
||||
if (property == nameof(ProEdge.Model.IOT.BaseMacchina.Emergenza))
|
||||
Write("Machine:Emergency", value);
|
||||
|
||||
if (_mappingGroups != null && _mappingGroups[idGroup] != null && _mappingGroups[idGroup].ContainsKey(property))
|
||||
{
|
||||
string key = $"Machine:OperatingGroups:{idGroup:00}:{_mappingGroups[idGroup][property]}";
|
||||
Write(key, value.ToString());
|
||||
}
|
||||
else if (_mappingNonPLCGroupsToPLCGroups != null && _mappingNonPLCGroupsToPLCGroups.ContainsKey(idGroup))
|
||||
{
|
||||
foreach (var i in _mappingNonPLCGroupsToPLCGroups[idGroup])
|
||||
WriteGroupData(i, property, value);
|
||||
}
|
||||
}
|
||||
|
||||
// Assorbimenti inverter
|
||||
public void WriteLoad(int id, string value)
|
||||
{
|
||||
if (_mappingLoads != null && _mappingLoads.ContainsKey(id))
|
||||
{
|
||||
Write("Machine:OperatingGroups:" + _mappingLoads[id], value.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
// Active Time motori
|
||||
public void WriteActiveTime(int id, string value)
|
||||
{
|
||||
if (_mappingActiveTimes != null && _mappingActiveTimes.ContainsKey(id))
|
||||
{
|
||||
Write("Machine:OperatingGroups:" + _mappingActiveTimes[id], value.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
// Dati Assi
|
||||
public void WriteAxis(int id, string distance, string repetition)
|
||||
{
|
||||
if (_mappingAxes != null && _mappingAxes.ContainsKey(id))
|
||||
{
|
||||
Write("Machine:OperatingGroups:" + _mappingAxes[id] + ":Distance", distance.ToString());
|
||||
Write("Machine:OperatingGroups:" + _mappingAxes[id] + ":Repetition", repetition.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public void WriteTotalActiveTime(TimeSpan value)
|
||||
{
|
||||
Write("Machine:ActiveTime", Math.Truncate(value.TotalHours).ToString());
|
||||
}
|
||||
|
||||
public void WriteActualActiveTime(TimeSpan value)
|
||||
{
|
||||
Write("Machine:Hmi:ActiveTimeSession", Math.Truncate(value.TotalHours).ToString());
|
||||
}
|
||||
|
||||
public void WriteActualSection(string section)
|
||||
{
|
||||
Write("Machine:Hmi:ActiveSection", section);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 203 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 178 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 22 KiB |
@@ -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,38 @@
|
||||
; Script generated by the Inno Script Studio Wizard.
|
||||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
||||
|
||||
[Setup]
|
||||
; NOTE: The value of AppId uniquely identifies this application.
|
||||
; Do not use the same AppId value in installers for other applications.
|
||||
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
||||
AppId={{C553C9E7-9D53-4FEB-B6B3-E0D99D23F5F1}
|
||||
AppName=SOUR
|
||||
AppVersion=2.2.1907.255
|
||||
;AppVerName=SOUR 2.2.1907.255
|
||||
AppPublisher=Steamware srl
|
||||
AppPublisherURL=http://www.steamware.net
|
||||
AppSupportURL=http://www.steamware.net
|
||||
AppUpdatesURL=http://www.steamware.net
|
||||
DefaultDirName=C:/IOT/SOUR
|
||||
DefaultGroupName=IOT
|
||||
DisableProgramGroupPage=yes
|
||||
OutputBaseFilename=SOUR
|
||||
Compression=lzma
|
||||
SolidCompression=yes
|
||||
AppCopyright=Steamware srl 2019+
|
||||
SetupIconFile=userdocs:VisualStudioProject\OPC-UA-REDIS\Graphics\favicon.ico
|
||||
VersionInfoVersion=2.2.1907.255
|
||||
VersionInfoCompany=Steamware srl
|
||||
VersionInfoProductName=SOUR
|
||||
VersionInfoProductVersion=2.2.1907.255
|
||||
|
||||
[Files]
|
||||
Source: "userdocs:\VisualStudioProject\OPC-UA-REDIS\src\SOUR\bin\Release\SOUR.exe"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "userdocs:\VisualStudioProject\OPC-UA-REDIS\src\SOUR\bin\Release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
|
||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\SOUR"; Filename: "{app}\SOUR.exe"
|
||||
|
||||
[Run]
|
||||
Filename: "{app}\SOUR.exe"; Description: "{cm:LaunchProgram,SOUR}"; Flags: nowait postinstall skipifsilent
|
||||
@@ -0,0 +1,42 @@
|
||||
<MsiWrapper>
|
||||
<Installer>
|
||||
<IconFile Detect="executable" Value="base64:AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABMLAAATCwAAAAAA
AAAAAAD/////////////////////////////////////////////////////////////////////
////////////////np6e/2JjZP9tbW7/bXBz/2tsbf9rbW//bG5w/2tsbf9sbW//a21u/2xtbv9r
bG3/bW1t/2xsbP9iYmL/0dHR/15fYP+zopH/ya2Q/9PGuP/EqY3/x66V/9rRyP+/oID/zLmk/9HC
sv/Ux7n/0sGv/9fZ3P/x8PD/kJCQ/5KSkv9iZGX/zLag/+jJqP/WsYr/8OLU/+vXw//TqoD/8OLT
/+LHqv/at5P/1q2D//Heyv8zNjr/vb28/7Ozs/+Pj4//YmRn/7+li//gwaL/69zN/9u+oP/fxar/
4Miu//Dk2P/l0bz/27+h/9WzkP/o1L//z9PW//79/P+lpaX/kJCQ/2FhYf9MTEz/Y19b/2Vnaf9e
Wlb/YF5c/2VmZ/9fX17/YWFg/2JhYP9eWVX/ZGVm/2xsbP9vb2//NjY2/6urq/+Kior/nZ2e////
///u7u3/8/T1//Pz9P/v7+7//f39//j4+P/v8PD/9PX2//Ly8f/t7e3//v7+/2lpaf/Q0ND/u7u7
/35+fv//////+/v7///////+/v7//////7Ozs//T09P///////39/f////////////b29v9jY2P/
9/f3/+jo6P9mZmb///////7+/v/7+/v//////6Kiov8RERH/Ly8v/9jY2P//////+vr6///////N
zc3/cXFx////////////aWlp/+Dg4P///////////5KSkv9qamr/iIiI/5aWlv9PT0//0dHR////
////////n5+f/5WVlf///////////4WFhf+xsbH//////7e3t/9XV1f//////35+fv/ExMT/4uLi
/05OTv/u7u7//////3V1df/Dw8P///////////+wsLD/hoaG///////m5ub/7+/v//////9/f3//
urq6///////n5+f/9PT0//////9hYWH/7Ozs////////////3d3d/2VlZf///////f39//v7+///
////f39//729vf//////+/v7///////e3t7/ZWVl///////9/f3//v7+//////9eXl7/YmJi/3Fx
cf9eXl7/xMTE/4uLi/+8vLz/lZWV/2NjY/91dXX/TU1N/5WVlf//////+/v7////////////8vLy
/9bW1v/Z2dn/0dHR//39/f+CgoL/vLy8/+3t7f/U1NT/19fX/9vb2//8/Pz/////////////////
//////7+/v////////////z8/P//////ra2t/9XV1f///////f39/////////////v7+////////
////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAA==" />
|
||||
<Output FileName="C:\Users\samuele.steamw\Documents\VisualStudioProject\OPC-UA-REDIS\src\Output\SOUR.msi" />
|
||||
<InstallPrivileges Value="Elevated" />
|
||||
<PerUser Value="auto" />
|
||||
<ElevateExecutable Value="administrators" />
|
||||
<UpgradeCode Value="{84D03C2F-C9A3-4D2E-AA30-90A174ACA22B}" />
|
||||
<ProductId Value="" />
|
||||
<Registration Value="Visible" />
|
||||
<Manufacturer Detect="executable" Value="Steamware srl" />
|
||||
<ProductVersion Detect="executable" Value="2.2.1907.255" />
|
||||
<ProductName Detect="executable" Value="SOUR" />
|
||||
<Comments Detect="executable" Value="This installation was built with Inno Setup." />
|
||||
<Contact Detect="" Value="" />
|
||||
<HelpLink Detect="" Value="http://www.steamware.net/SOUR" />
|
||||
<UpdateLink Detect="" Value="" />
|
||||
<AboutLink Detect="" Value="http://www.steamware.net/" />
|
||||
</Installer>
|
||||
<WrappedInstaller>
|
||||
<Executable FileName="C:\Users\samuele.steamw\Documents\VisualStudioProject\OPC-UA-REDIS\src\Output\SOUR.exe" SuccessCodes="" Impersonate="no" IncludeFiles="no" CompressionLevel="None" />
|
||||
<ApplicationId Value="SOUR 2.2.1907.255" />
|
||||
<Install>
|
||||
<Arguments Value="/SILENT">
|
||||
<UILevelNone Value="" />
|
||||
<UILevelBasic Value="" />
|
||||
<UILevelReduced Value="" />
|
||||
<UILevelFull Value="" />
|
||||
</Arguments>
|
||||
<RunBeforeInstall Value="" />
|
||||
<RunAfterInstall Value="" />
|
||||
</Install>
|
||||
<Uninstall>
|
||||
<Arguments Value="/SILENT">
|
||||
<UILevelNone Value="" />
|
||||
<UILevelBasic Value="" />
|
||||
<UILevelReduced Value="" />
|
||||
<UILevelFull Value="" />
|
||||
</Arguments>
|
||||
</Uninstall>
|
||||
</WrappedInstaller>
|
||||
</MsiWrapper>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--For more information on using transformations see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
|
||||
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
|
||||
</configuration>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--For more information on using transformations see the web.config examples at http://go.microsoft.com/fwlink/?LinkId=214134. -->
|
||||
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
|
||||
<appSettings>
|
||||
<add key="RedisConn" value="localhost,abortConnect=false,ssl=false" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
|
||||
<add key="RedisConnAdmin" value="localhost,abortConnect=false,ssl=false" xdt:Transform="Replace" xdt:Locator="Match(key)"/>
|
||||
</appSettings>
|
||||
</configuration>
|
||||
@@ -0,0 +1,458 @@
|
||||
1|900|[1] MANDRINO 1 NON BLOCCATO
|
||||
2|900|[2] MANDRINO 2 NON BLOCCATO
|
||||
3|900|[3] MANDRINO SUPPLEMENTARE NON BLOCCATO
|
||||
4|900|[4] ZONA DI COLLISIONE CON CAMBIO UTENSILE ESTERNO
|
||||
5|900|[5] ZONA DI COLLISIONE CON CAMBIO UTENSILE LINEARE
|
||||
6|900|[6] GRUPPO ASSI NON VALIDO
|
||||
7|900|[7] INVERTER 1 NON OK
|
||||
8|900|[8] INVERTER 2 NON OK
|
||||
9|900|[9] INVERTER MANDRINO SUPPLEMENTARE NON OK
|
||||
10|500|[10] SAVE ENERGY ATTIVO
|
||||
11|900|[11] B;[WD] SUPERATO NUMERO PEZZI MASSIMO CARICABILE SU TRANSFER
|
||||
12|900|[12] VERIFICA CONTATTORI NON OK
|
||||
13|900|[13] TIMEOUT COMUNICAZIONE XILOG
|
||||
14|900|[14] INTERVENTO MAGNETOTERMICI
|
||||
15|900|[15] PORTE PROTEZIONE APERTE
|
||||
16|900|[16] TAPPETO CONVOGLIA TRUCIOLI NON IN POSIZIONE
|
||||
17|900|[17] COLLISIONE RILEVATA DAL SIMULATORE
|
||||
18|900|[18] BUMPER MOBILE NON IN POSIZIONE
|
||||
19|900|[19] FORATRICE NON IN POSIZIONE
|
||||
20|500|[20] STOP MACCHINA DA CODICI M SUPPLEMENTARI
|
||||
21|500|[21] M00 ATTIVO: START CICLO
|
||||
22|500|[22] BATTERIA SCARICA ENCODER ASSI YASKAWA
|
||||
23|900|[23] AZIONAMENTI ASSI XYZ... NON OK
|
||||
24|900|[24] AZIONAMENTI ASSI ROTATIVI NON OK
|
||||
25|900|[25] CNC NON OK
|
||||
26|900|[26] PRESSOSTATO ARIA INTERVENUTO
|
||||
27|900|[27] BATTERIA CNC NON CARICA
|
||||
28|900|[28] ERRORE CANOPEN RING 0
|
||||
29|900|[29] ERRORE CANOPEN RING 1
|
||||
30|500|[30] ABILITAZIONE BL/SBL UTENSILE MANDRINO 1
|
||||
31|500|[31] ABILITAZIONE BL/SBL UTENSILE MANDRINO 2
|
||||
32|500|[32] ABILITAZIONE BL/SBL UTENSILE MANDRINO SUPPLEMENTARE
|
||||
33|500|[33] CICLO ETICHETTATURA IN CORSO
|
||||
34|900|[34] ETICHETTATRICE NON PRONTA
|
||||
35|900|[35] ETICHETTATRICE NON IN POSIZIONE
|
||||
36|900|[36] ERRORE ETICHETTATRICE
|
||||
37|900|[37] SONDA TERMICA/VENTOLA MANDRINO 1
|
||||
38|900|[38] SONDA TERMICA/VENTOLA MANDRINO 2
|
||||
39|900|[39] SONDA TERMICA/VENTOLA MANDRINO SUPPLEMENTARE
|
||||
40|900|[40] INTERVENTO MAGNETOTERMICO GRUPPO LAMA
|
||||
41|900|[41] RICARICARE POMPA LUBRIFICAZIONE
|
||||
42|900|[42] LUBRIFICAZIONE ASSI NON OK
|
||||
43|500|[43] LUBRIFICAZIONE ASSI IN CORSO
|
||||
44|500|[44] RICHIESTA VUOTO/ATTREZZATURA
|
||||
45|900|[45] EMERGENZA CAUSA VUOTO ZONA 1
|
||||
46|900|[46] EMERGENZA CAUSA VUOTO ZONA 2
|
||||
47|900|[47] ASSI IN FINE CORSA
|
||||
48|900|[48] CUFFIA ESTERNA NON IN POSIZIONE
|
||||
49|900|[49] CUFFIA INTERNA NON IN POSIZIONE
|
||||
50|900|[50] CUFFIA PULIZIA PIANO NON IN POSIZIONE
|
||||
51|900|[51] EMERGENZA CAUSA VUOTO ZONA 3
|
||||
52|900|[52] EMERGENZA CAUSA VUOTO ZONA 4
|
||||
53|500|[53] ESEGUIRE RIFERIMENTO ASSI
|
||||
54|500|[54] ESEGUIRE RIFERIMENTO MAGAZZINO UTENSILE 1
|
||||
55|500|[55] ESEGUIRE RIFERIMENTO MAGAZZINO UTENSILE 2
|
||||
56|500|[56] ESEGUIRE RIFERIMENTO MAGAZZINO UTENSILE MANDRINO SUPPLEMENTARE
|
||||
57|500|[57] ESEGUIRE RIFERIMENTO MAGAZZINO ESTERNO 1
|
||||
58|500|[58] ESEGUIRE RIFERIMENTO NAVETTA HS
|
||||
59|500|[59] ESEGUIRE RIFERIMENTO PINZE ROBOT CELLA WD
|
||||
60|900|[60] CONVOGLIATORE TRUCIOLI NON OK
|
||||
61|500|[61] SERBATOIO LUBRIFICAZIONE CONVOGLIATORE TRUCIOLI VUOTO
|
||||
62|900|[62] ASSE X IN FINE CORSA
|
||||
63|900|[63] ASSE Y IN FINE CORSA
|
||||
64|900|[64] ASSE Z IN FINE CORSA
|
||||
65|900|[65] PALPATORE SYNCRO NON IN POSIZIONE
|
||||
66|500|[66] ALLINEAMENTO ASSI GANTRY IN CORSO
|
||||
67|900|[67] ASSE B IN FINE CORSA
|
||||
68|900|[68] ASSE C IN FINE CORSA
|
||||
69|900|[69] ASSE Y NON IN POSIZIONE
|
||||
70|500|[70] ESEGUIRE RIFERIMENTO PALPATORE SYNCRO
|
||||
71|900|[71] PERNO BLOCCAGGIO TAVOLO ELEVATORE NON IN POSIZIONE
|
||||
72|900|[72] FOTOCELLULA PRESENZA UTENSILE
|
||||
73|900|[73] MANDRINO 1 NON OK
|
||||
74|900|[74] MANDRINO 2 NON OK
|
||||
75|900|[75] MANDRINO SUPPLEMENTARE NON OK
|
||||
76|900|[76] FOTOCELLULA PRESENZA UTENSILE (CATENA)
|
||||
77|900|[77] ALLARME SENSORE ROTAZIONE MANDRINO 1
|
||||
78|900|[78] ALLARME SENSORE ROTAZIONE MANDRINO 2
|
||||
79|900|[79] ALLARME SENSORE ROTAZIONE MANDRINO SUPPLEMENTARE
|
||||
80|900|[80] CAMBIO UTENSILE TESTA 1(ONBOARD) NON IN POSIZIONE
|
||||
81|900|[81] CAMBIO UTENSILE MANDRINO SUPPLEMENTARE (ONBOARD) NON IN POSIZIONE
|
||||
82|900|[82] CAMBIO UTENSILE LINEARE NON IN POSIZIONE
|
||||
83|900|[83] CAMBIO UTENSILE HS NON IN POSIZIONE
|
||||
84|900|[84] [TM] NAVETTA TOOL MANAGEMENT NON IN POSIZIONE
|
||||
85|900|[85] [TM] LETTORE CHIP TOOL MANAGMENT NON IN POSIZIONE
|
||||
86|900|[86] [TM] LIBERARE PINZA DI CARICO TOOL MANAGMENT
|
||||
87|900|[87] [TM] COLLISIONE CON TOOL MANAGMENT
|
||||
88|900|[88] [TM] CARICARE UTENSILE SULLA PINZA DI CARICO DEL TOOL MANAGMENT
|
||||
89|900|[89] BANDELLA NON IN POSIZIONE
|
||||
90|900|[90] PANNELLO PRELEVATO FUORI ALLINEAMENTO
|
||||
91|900|[91] SCARICATORE NON IN POSIZIONE
|
||||
92|900|[92] SPONDE/BATTUTE DI SCARICO NON IN POSIZIONE
|
||||
93|500|[93] ZONA DI SCARICO OCCUPATA
|
||||
94|900|[94] VERIFICARE DIMENSIONI PILA
|
||||
95|500|[95] CARICARE NUOVA PILA
|
||||
96|900|[96] CARICATORE NON IN POSIZIONE
|
||||
97|900|[97] TAVOLO ELEVATORE NON OK
|
||||
98|900|[98] PANNELLO NON PRELEVATO DA TAVOLO ELEVATORE
|
||||
99|900|[99] FOTOCELLULA RIFERIMENTO PANNELLO NON OK
|
||||
100|900|[100] ALLARME CELLA WD
|
||||
101|900|[101] REFRIGERANTE MANDRINO 1 NON OK
|
||||
102|900|[102] REFRIGERANTE MANDRINO 2 NON OK
|
||||
103|900|[103] INVERTER NASTRO DI SCARICO NON OK
|
||||
104|900|[104] ARRESTO OPERATIVO: RESETTARE LE FOTOCELLULE DI SICUREZZA
|
||||
105|500|[105] C.UTENSILE LINEARE IN CORSO: ABBASSARE GLI INNALZATORI E RESETTARE LE FOTOCELLULE DI SICUREZZA
|
||||
106|900|[106] CARICO PANNELLO NON AMMESSO
|
||||
107|900|[107] BYPASS COLLISIONI ATTIVO
|
||||
108|900|[108] SPORTELLO CAMBIO UTENSILE LINEARE DESTRO NON IN POSIZIONE
|
||||
109|900|[109] VERIFICA FUNZIONAMENTO SICUREZZE
|
||||
110|900|[110] RESETTARE LE FOTOCELLULE DI SICUREZZA
|
||||
111|900|[111] INSERIMENTO UTENSILE NON OK
|
||||
112|900|[112] GUASTO MICRO CONTROLLO PEDANE
|
||||
113|900|[113] INSERIMENTO UTENSILE IN NAVETTA HS NON OK
|
||||
114|500|[114] TABELLA NON AGGIORNATA
|
||||
115|900|[115] MANDRINO 1 NON SBLOCCATO
|
||||
116|900|[116] MANDRINO SUPPLEMENTARE NON SBLOCCATO
|
||||
117|900|[117] CONTROLLARE CICLO CHIUSURA BORDO
|
||||
118|500|[118] PM: SETUP NON POSSIBILE ZONA 3 [VUOTO ON/TESTE DW]
|
||||
119|500|[119] PM: SETUP NON POSSIBILE ZONA 4 [VUOTO ON/TESTE DW]
|
||||
120|500|[120] UTENSILE SPECIALE: OPERAZIONE NON AMMESSA
|
||||
121|900|[121] ERRORE CICLO CHIUSURA BORDO
|
||||
122|900|[122] MAGAZZINO UTENSILE ESTERNO 1 NON IN POSIZIONE
|
||||
123|900|[123] SPORTELLO MAGAZZINO ESTERNO NON IN POSIZIONE
|
||||
124|900|[124] ERRATA PROGRAMMAZIONE
|
||||
125|900|[125] ERRORE UTENSILE TESTA 1
|
||||
126|900|[126] ERRORE UTENSILE TESTA 2
|
||||
127|900|[127] SPORTELLO CAMBIO UTENSILE LINEARE SINISTRO NON IN POSIZIONE
|
||||
128|900|[128] TIME OUT PIGNA MOBILE
|
||||
129|500|[129] CAMBIO MODALITA' MACCHINA (M103)
|
||||
130|900|[130] PORTE ARMADIO ELETTRICO APERTE
|
||||
131|500|[131] ESEGUIRE MANUTENZIONE CONDIZIONATORE ARMADIO ELETTRICO
|
||||
132|900|[132] AGGREGATO PRESSATORE/CONVOGLIATORE TRUCIOLI NON OK
|
||||
133|500|[133] SERBATOIO LUBROREFRIGERATORE UTENSILE VUOTO
|
||||
134|500|[134] BATTERIA SCARICA TASTATORE RADIO
|
||||
135|900|[135] RILEVATORE SPESSORE PEZZO NON IN POSIZIONE
|
||||
136|900|[136] CICLO TASTATURA NON OK
|
||||
137|900|[137] BATTUTE DI RIFERIMENTO ZONA 1 NON OK
|
||||
138|900|[138] BATTUTE DI RIFERIMENTO ZONA 2 NON OK
|
||||
139|900|[139] ASSI PRISMA BC NON IN POSIZIONE
|
||||
140|900|[140] AZIONAMENTI ASSI PRISMA BC NON OK
|
||||
141|900|[141] TASTATORE RADIO NON OK
|
||||
142|900|[142] GRUPPO ACCOSTAMENTO PANNELLO NON IN POSIZIONE
|
||||
143|900|[143] ACCOSTAMENTO PANNELLO NON AVVENUTO
|
||||
144|900|[144] VACUOSTATO CARICATORE NON OK
|
||||
145|500|[145] RIAGGANCIO MANDRINO IN CORSO
|
||||
146|900|[146] RIAGGANCIO MANDRINO FALLITO
|
||||
147|900|[147] RIAGGANCIO MANDRINO AVVENUTO
|
||||
148|900|[148] INTERVENTO FUNE DI SICUREZZA
|
||||
149|900|[149] INTERVENTO OVERSPEED ASSI
|
||||
150|900|[150] INTERVENTO BUMPERS
|
||||
151|500|[151] MACCHINA SPENTA
|
||||
152|900|[152] EMERGENZA PREMUTA
|
||||
153|500|[153] PM: SETUP NON POSSIBILE ZONA 1 [VUOTO ON / TESTE DW]
|
||||
154|500|[154] PM: SETUP NON POSSIBILE ZONA 2 [VUOTO ON / TESTE DW]
|
||||
155|500|[155] BARRA MOBILE CENTRALE 1 NON IN POSIZIONE
|
||||
156|500|[156] BARRA MOBILE CENTRALE 2 NON IN POSIZIONE
|
||||
157|500|[157] PM: COLLISIONE BATTUTE CON SUPPORTI VENTOSE / MORSETTI
|
||||
158|900|[158] CUFFIA MANDRINO SUPPLEMENTARE NON IN POSIZIONE
|
||||
159|900|[159] TESTA GRUPPO MANDRINO SUPPLEMENTARE NON IN POSIZIONE
|
||||
160|900|[160] TESTA GRUPPO LAMA NON IN POSIZIONE
|
||||
161|500|[161] CICLO DI CARICO IN CORSO
|
||||
162|500|[162] CICLO DI SCARICO IN CORSO
|
||||
163|900|[163] BATTUTE DI CARICO NON IN POSIZIONE ZONA 1
|
||||
164|500|[164] ATTESA ROBOT IN POSIZIONE
|
||||
165|900|[165] INVERTER GUASTO POMPA VUOTO 1 (MASTER)
|
||||
166|900|[166] INVERTER GUASTO POMPA VUOTO 2 (SLAVE)
|
||||
167|900|[167] BATTUTE DI CARICO NON IN POSIZIONE ZONA 2
|
||||
168|500|[168] SALITA CUFFIA DA OPERATORE
|
||||
169|500|[169] TRAVERSA 1 NON IN POSIZIONE
|
||||
170|500|[170] TRAVERSA 2 NON IN POSIZIONE
|
||||
171|500|[171] TRAVERSA 3 NON IN POSIZIONE
|
||||
172|500|[172] TRAVERSA 4 NON IN POSIZIONE
|
||||
173|500|[173] TRAVERSA 5 NON IN POSIZIONE
|
||||
174|500|[174] TRAVERSA 6 NON IN POSIZIONE
|
||||
175|500|[175] TRAVERSA 7 NON IN POSIZIONE
|
||||
176|500|[176] TRAVERSA 8 NON IN POSIZIONE
|
||||
177|500|[177] TRAVERSA 9 NON IN POSIZIONE
|
||||
178|500|[178] TRAVERSA 10 NON IN POSIZIONE
|
||||
179|500|[179] TRAVERSA 11 NON IN POSIZIONE
|
||||
180|500|[180] TRAVERSA 12 NON IN POSIZIONE
|
||||
181|500|[181] SOSTITUZIONE VENTOSE IN CORSO AREA 1
|
||||
182|500|[182] SOSTITUZIONE VENTOSE IN CORSO AREA 2
|
||||
183|900|[183] BATTUTE DI RIFERIMENTO ZONA 3 NON OK
|
||||
184|900|[184] BATTUTE DI RIFERIMENTO ZONA 4 NON OK
|
||||
185|900|[185] [BRC] GR5: GRUPPO FUSI ORIZZONTALI NON IN POSIZIONE (FORI SPINE)
|
||||
186|900|[186] [BRC] GR6: GRUPPO FRESA VERTICALE NON IN POSIZIONE
|
||||
187|900|[187] [BRC] GR7: GRUPPO FRESA ORIZZONTALE NON IN POSIZIONE
|
||||
188|900|[188] [BRC] GR8: GRUPPO LAMA NON IN POSIZIONE
|
||||
189|900|[189] [BRC] ATTESA INNESTO PER ROTAZIONE GRUPPO LAMA
|
||||
190|900|[190] SELETTORI CONTROSAGOMA NON OK [AREA UNICA]
|
||||
191|900|[191] BATTUTE DI RIFERIMENTO BARRA 1 NON OK
|
||||
192|900|[192] BATTUTE DI RIFERIMENTO BARRA 2 NON OK
|
||||
193|900|[193] BATTUTE DI RIFERIMENTO BARRA 3 NON OK
|
||||
194|900|[194] BATTUTE DI RIFERIMENTO BARRA 4 NON OK
|
||||
195|900|[195] BATTUTE DI RIFERIMENTO BARRA 5 NON OK
|
||||
196|900|[196] BATTUTE DI RIFERIMENTO BARRA 6 NON OK
|
||||
197|900|[197] BATTUTE DI RIFERIMENTO BARRA 7 NON OK
|
||||
198|900|[198] BATTUTE DI RIFERIMENTO BARRA 8 NON OK
|
||||
199|900|[199] BATTUTE DI RIFERIMENTO BARRA 9 NON OK
|
||||
200|900|[200] BATTUTE DI RIFERIMENTO BARRA 10 NON OK
|
||||
201|900|[201] BATTUTE DI RIFERIMENTO BARRA 11 NON OK
|
||||
202|900|[202] BATTUTE DI RIFERIMENTO BARRA 12 NON OK
|
||||
203|900|[203] BATTUTE DI RIFERIMENTO BARRA FISSA SX NON OK
|
||||
204|900|[204] BATTUTE DI RIFERIMENTO BARRA FISSA DX NON OK
|
||||
205|900|[205] BASI NON BLOCCATE ZONA 1
|
||||
206|900|[206] BASI NON BLOCCATE ZONA 2
|
||||
207|900|[207] BASI NON BLOCCATE ZONA 3
|
||||
208|900|[208] BASI NON BLOCCATE ZONA 4
|
||||
209|500|[209] SOSTITUZIONE VENTOSE IN CORSO AREA 3
|
||||
210|500|[210] SOSTITUZIONE VENTOSE IN CORSO AREA 4
|
||||
211|900|[211] [BORDATORE POWER] ATTESA GRUPPO A BORDARE ALTO
|
||||
212|900|[212] [BORDATORE POWER] ATTESA GRUPPO A BORDARE BASSO
|
||||
213|900|[213] [BORDATORE POWER] ATTESA GRUPPO A BORDARE POSIZ. CAMBIO RULLO
|
||||
214|900|[214] [BORDATORE POWER] ATTESA PIANO CARICAMENTO BORDI ALTO
|
||||
215|900|[215] [BORDATORE POWER] ATTESA PIANO CARICAMENTO BORDI BASSO
|
||||
216|900|[216] [BORDATORE POWER] MANCATA LETTURA BORDO GIUNZIONE
|
||||
217|900|[217] [BORDATORE POWER] ERRORE BORDO SU FOTOCELLULA DI CARICO
|
||||
218|500|[218] VASCA COLLA NON IN TEMPERATURA
|
||||
219|900|[219] [BORDATORE POWER] ASSENZA BORDO IN MULTIROTOLO
|
||||
220|900|[220] [BORDATORE POWER] ATTESA CICLO CARICO COLLA DA PREFUSORE
|
||||
221|900|[221] [BORDATORE POWER] MANCATO TAGLIO TRANCIA MAGAZZINO BORDI
|
||||
222|900|[222] [BORDATORE POWER] ATTESA CARICO COLLA DA PREFUSORE
|
||||
223|900|[223] [BORDATORE POWER] ANOMALIA SENSORI CILINDRO TESTA A BORDARE
|
||||
224|900|[224] SENSORE TESTA A BORDARE IN COLLISIONE
|
||||
225|900|[225] [BORDATORE POWER] TIMEOUT INTESTATURA BORDO TESTA A BORDARE
|
||||
226|900|[226] INTERVENTO TERMICI VASCA COLLA
|
||||
227|900|[227] INTERVENTO TERMICI PREFUSORE
|
||||
228|900|[228] INTERVENTO TERMICI LAMPADE ONDE CORTE
|
||||
229|900|[229] ESEGUIRE RIFERIMENTO MOT. ALTEZZA BORDO TESTA B.
|
||||
230|900|[230] ESEGUIRE RIFERIMENTO MOT. ALTEZZA BORDO MAGAZZINO B.
|
||||
231|900|[231] ESEGUIRE RIFERIMENTO MOT. CAMBIO RULLO PRESSIONE
|
||||
232|900|[232] TIMEOUT SENSORE CHIUSURA CILINDRO PREFUSORE
|
||||
233|500|[233] ESEGUIRE TARATURA TRAVERSE/VENTOSE
|
||||
234|900|[234] VENTOSE NON BLOCCATE AREA 1
|
||||
235|900|[235] VENTOSE NON BLOCCATE AREA 2
|
||||
236|500|[236] ATTESA SBLOCCO VENTOSA
|
||||
237|500|[237] ATTESA BLOCCO VENTOSA
|
||||
238|500|[238] RIMUOVERE VENTOSA: START CICLO
|
||||
239|500|[239] INSERIRE VENTOSA: START CICLO
|
||||
240|900|[240] ANOMALIA FOTOCELLULA MAGAZZINO BORDI
|
||||
241|500|[241] BARRA 1
|
||||
242|500|[242] BARRA 2
|
||||
243|500|[243] BARRA 3
|
||||
244|500|[244] BARRA 4
|
||||
245|500|[245] BARRA 5
|
||||
246|500|[246] BARRA 6
|
||||
247|500|[247] BARRA 7
|
||||
248|500|[248] BARRA 8
|
||||
249|500|[249] BARRA 9
|
||||
250|500|[250] BARRA 10
|
||||
251|500|[251] BARRA 11
|
||||
252|500|[252] BARRA 12
|
||||
253|500|[253] RIMUOVERE/INSERIRE VENTOSA COME DA GRAFICA SU AREA 1: START CICLO
|
||||
254|500|[254] RIMUOVERE/INSERIRE VENTOSA COME DA GRAFICA SU AREA 2: START CICLO
|
||||
255|900|[255] PORTE PROTEZIONE SBLOCCATE
|
||||
256|900|[256] ERRORE MODULO ZERO SPEED MANDRINO
|
||||
257|900|[257] INTESTATORE NON IN POSIZIONE
|
||||
258|900|[258] INTESTATORE 92 VUOTO
|
||||
259|900|[259] INTESTATORE 93 VUOTO
|
||||
260|900|[260] LIVELLO COLLA BASSO B.BASIC
|
||||
261|900|[261] [WD]EMERGENZA TRANSFER PREMUTA
|
||||
262|900|[262] [WD]INTERVENTO MAGNETOTERMICI TRANSFER
|
||||
263|900|[263] [WD]PORTE ARMADIO ELETTRICO TRANSFER APERTE
|
||||
264|900|[264] [WD]SVUOTARE TRANSFER
|
||||
265|900|[265] [WD]PEZZO IN ZONA DI SCARICO
|
||||
266|900|[266] [WD]ATTESA ROBOT 1 IN POSIZIONE
|
||||
267|900|[267] [WD]ATTESA ROBOT 2 IN POSIZIONE
|
||||
268|900|[268] [WD]SVUOTARE RULLIERE
|
||||
269|900|[269] [WD]DIMENSIONI PEZZO NON OK
|
||||
270|900|[270] [WD]SVUOTARE PIANO MACCHINA E PINZE ROBOT
|
||||
271|900|[271] [WD]PINZA ROBOT 1 NON IN POSIZIONE
|
||||
272|900|[272] [WD]PINZA ROBOT 2 NON IN POSIZIONE
|
||||
273|900|[273] MORSETTI ZONA 1 ALTI PNEUMATICAMENTE
|
||||
274|900|[274] MORSETTI ZONA 2 ALTI PNEUMATICAMENTE
|
||||
275|900|[275] EMERGENZA CAUSA MORSETTI ZONA 1
|
||||
276|900|[276] EMERGENZA CAUSA MORSETTI ZONA 2
|
||||
277|900|[277] ZONA DI COLLISIONE REFILATORE / RAS
|
||||
278|900|[278] PERICOLO SPORTELLO PANTOGRAFO APERTO
|
||||
279|900|[279] ZONA DI COLLISIONE BORDATORE
|
||||
280|900|[280] POSIZIONE DEL SELETTORE DELLA PULSANTIERA NON OK
|
||||
281|900|[281] PREMERE PULSANTE UOMO-MORTO
|
||||
282|900|[282] METTERE LA MACCHINA IN EMERGENZA
|
||||
283|900|[283] EMERGENZA TAPPETO ZONA 1
|
||||
284|900|[284] EMERGENZA TAPPETO ZONA 2
|
||||
285|900|[285] ZONA DI COLLISIONE MAGAZZINO RULLI PRESSIONE
|
||||
286|900|[286] TAPPETO AREA 1 IMPEGNATO
|
||||
287|900|[287] TAPPETO CENTRALE IMPEGNATO
|
||||
288|900|[288] TAPPETO AREA 2 IMPEGNATO
|
||||
289|900|[289] NUMERO RULLO PRESSORE ERRATO
|
||||
290|900|[290] CHECK VASCA COLLA
|
||||
291|900|[291] TIMEOUT GRUPPO VENTOSE NON ESCLUSO
|
||||
292|900|[292] TIMEOUT GRUPPO VENTOSE NON INSERITO
|
||||
293|900|[293] ASSE C BORDATORE IN QUOTA COLLISIONE CON G.VENTOSE
|
||||
294|900|[294] CICLO INSERIMENTO SPINA GRUPPO 92 NON OK(MUOVERE IN JOG+ L'ASSE X)
|
||||
295|900|[295] CICLO INSERIMENTO SPINA GRUPPO 93 NON OK(MUOVERE IN JOG- L'ASSE X)
|
||||
296|900|[296] RULLI NON IN POSIZIONE
|
||||
297|900|[297] ASSE X FUORI LIMITE PER RULLI
|
||||
298|900|[298] COLLISIONE RULLI CON GRUPPO TESTE
|
||||
299|500|[299] ATTESA SBLOCCO VUOTO/ATTREZZATURA
|
||||
300|900|[300] PERICOLO COLLISIONE BORDATORE PIANO MULTIFUNZIONE
|
||||
301|900|[301] MODALITÀ CELLA NON ATTIVA
|
||||
302|900|[302] ZONA DI COLLISIONE BORDATORE IN Y
|
||||
303|900|[303] ERRORE SEQUENZA CAMBIO RULLO PRESSORE / SENSORE BLOCCO RULLO
|
||||
304|900|[304] ANOMALIA FRENO ASSE Z1
|
||||
305|900|[305] ANOMALIA FRENO ASSE Z2
|
||||
306|900|[306] ANOMALIA STATO CAMBIO UTENSILE
|
||||
307|900|[307] UTENSILE NON INCLINABILE
|
||||
308|900|[308] RIPORTARE ASSE B A QUOTA 0.0 IN MANUALE
|
||||
309|900|[309] AVARIA TELERUTTORE/TERMICO FORATRICE
|
||||
310|900|[310] RAPID 1 NON IN POSIZIONE
|
||||
311|900|[311]
|
||||
312|900|[312] ASSE Z NON IN POSIZIONE
|
||||
313|900|[313] PRESSORE 1 TESTA 1 NON IN POSIZIONE
|
||||
314|900|[314] PRESSORE 2 TESTA 1 NON IN POSIZIONE
|
||||
315|900|[315] PRESSORE 3 TESTA 1 NON IN POSIZIONE
|
||||
316|900|[316] PRESSORE 4 TESTA 1 NON IN POSIZIONE
|
||||
317|900|[317] PRESSORE 1 TESTA 2 NON IN POSIZIONE
|
||||
318|900|[318] PRESSORE 2 TESTA 2 NON IN POSIZIONE
|
||||
319|900|[319] PRESSORE 3 TESTA 2 NON IN POSIZIONE
|
||||
320|900|[320] PRESSORE 4 TESTA 2 NON IN POSIZIONE
|
||||
321|500|[321] ATTESA FINE CAMBIO UTENSILE
|
||||
322|900|[322] PERICOLO DI COLLISIONE IN ZONA DI CARICO
|
||||
323|900|[323] TAVOLO PNEUMATICO DI SCARICO NON IN POSIZIONE
|
||||
324|500|[324] ATTESA TAVOLO PNEUMATICO DI SCARICO A RIPOSO
|
||||
325|500|[325] ZERO FEED RATE
|
||||
326|500|[326] ATTESA PANNELLO ALLINEATO DA FLEXSTORE
|
||||
327|500|[327] ATTESA PANNELLO PRONTO DA FLEXSTORE
|
||||
328|900|[328] FEED HOLD DA FLEXSTORE
|
||||
329|900|[329] INTERVENTO TAPPETO DA FLEXSTORE
|
||||
330|900|[330] CELLA FLEXSTORE NON OK
|
||||
331|900|[331] EMERGENZA DA FLEXSTORE
|
||||
332|900|[332] EMERGENZA DA LINEA
|
||||
333|900|[333] FRESATORE VERTICALE NON IN POSIZIONE
|
||||
334|900|[334] FRESATORE ORIZZONTALE NON IN POSIZIONE
|
||||
335|900|[335] MANDRINO FRESATORE VERTICALE NON OK
|
||||
336|900|[336] MANDRINO FRESATORE ORIZZONTALE NON OK
|
||||
337|900|[337] MANDRINO GRUPPO LAMA NON OK
|
||||
338|900|[338] SONDA TERMICA FRESATORE VERTICALE
|
||||
339|900|[339] ERRORE MODULO ZERO SPEED GRUPPO FRESATORE VERTICALE
|
||||
340|900|[340] ERRORE MODULO ZERO SPEED GRUPPO FRESATORE ORIZZONTALE
|
||||
341|900|[341] TIMEOUT SENSORE NAVETTA BARRA 1
|
||||
342|900|[342] TIMEOUT SENSORE NAVETTA BARRA 2
|
||||
343|900|[343] TIMEOUT SENSORE NAVETTA BARRA 3
|
||||
344|900|[344] TIMEOUT SENSORE NAVETTA BARRA 4
|
||||
345|900|[345] TIMEOUT SENSORE NAVETTA BARRA 5
|
||||
346|900|[346] TIMEOUT SENSORE NAVETTA BARRA 6
|
||||
347|900|[347] TIMEOUT SENSORE NAVETTA BARRA 7
|
||||
348|900|[348] TIMEOUT SENSORE NAVETTA BARRA 8
|
||||
349|900|[349] TIMEOUT SENSORE NAVETTA BARRA 9
|
||||
350|900|[350] TIMEOUT SENSORE NAVETTA BARRA 10
|
||||
351|900|[351] TIMEOUT SENSORE NAVETTA BARRA 11
|
||||
352|900|[352] TIMEOUT SENSORE NAVETTA BARRA 12
|
||||
353|500|[353] ESEGUIRE TARATURA BARRE TVA
|
||||
354|900|[354] SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 1
|
||||
355|900|[355] SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 2
|
||||
356|900|[356] SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 3
|
||||
357|900|[357] SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 4
|
||||
358|900|[358] SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 5
|
||||
359|900|[359] SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 6
|
||||
360|900|[360] SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 7
|
||||
361|900|[361] SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 8
|
||||
362|900|[362] SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 9
|
||||
363|900|[363] SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 10
|
||||
364|900|[364] SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 11
|
||||
365|900|[365] SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 12
|
||||
366|900|[366] ALLARME TIMEOUT COPERCHIO MAGAZZINO RULLI PRESSORE
|
||||
367|900|[367] ALLARME TIMEOUT MAGAZZINO RULLI PRESSORE
|
||||
368|900|[368] SCARICO RULLO PRESSIONE ABILITATO
|
||||
369|900|[369] EMERGENZE ESTERNE ATTIVE
|
||||
370|500|[370] ESEGUIRE RIFERIMENTO ASSE V PRECENTRATORE
|
||||
371|500|[371] ATTESA VACUOSTATO PRECENTRATORE/ACCOSTATORE
|
||||
372|900|[372] EMERGENZA ASSE V PRECENTRATORE
|
||||
373|900|[373] ESECUZIONE NON AMMESSA
|
||||
374|900|[374] FORATRICE 2 NON IN POSIZIONE
|
||||
375|900|[375]
|
||||
376|900|[376] (PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA1
|
||||
377|900|[377] (PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA2
|
||||
378|900|[378] (PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA3
|
||||
379|900|[379] (PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA4
|
||||
380|900|[380] (PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA5
|
||||
381|900|[381] (PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA6
|
||||
382|900|[382] (PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA7
|
||||
383|900|[383] (PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA8
|
||||
384|900|[384] (PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA9
|
||||
385|900|[385] (PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA10
|
||||
386|900|[386] (PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA11
|
||||
387|900|[387] (PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA12
|
||||
388|900|[388] (PIANO FLEXMATIC) MODALITA DI TEST
|
||||
389|900|[389] (PIANO FLEXMATIC) CHECK POSIZIONE VENTOSE OFF
|
||||
390|900|[390] UTENSILE INGOMBRANTE PER DISCESA CUFFIA
|
||||
391|900|[391] PARCHEGGIO NON AMMESSO AREA 1 [PEZZO BLOCCATO/PROGRAMMA ATTIVO]
|
||||
392|900|[392] PARCHEGGIO NON AMMESSO AREA 2 [PEZZO BLOCCATO/PROGRAMMA ATTIVO]
|
||||
393|900|[393] PARCHEGGIO NON AMMESSO AREA 3 [PEZZO BLOCCATO/PROGRAMMA ATTIVO]
|
||||
394|900|[394] PARCHEGGIO NON AMMESSO AREA 4 [PEZZO BLOCCATO/PROGRAMMA ATTIVO]
|
||||
395|900|[395] PERDITA FINECORSA TIRANTE MANDRINO
|
||||
396|900|[396] PERDITA FINECORSA CILINDRO MANDRINO
|
||||
397|900|[397] [BRC] ARRESTO OPERATIVO CAUSA ASSORBIMENTO ELEVATO
|
||||
398|900|[398] [BRC] VELOCITA' RIDOTTA CAUSA ASSORBIMENTO ELEVATO
|
||||
399|900|[399]
|
||||
400|900|[400] UTENSILE NON INCLINABILE
|
||||
401|900|[401] INTERVENTO ANTICOLLISIONE CNC Y1-Y4
|
||||
402|900|[402] RIPORTARE ASSE B A QUOTA 0.0 IN MANUALE
|
||||
403|900|[403] PROTEZIONE Y4 NON IN POSIZIONE
|
||||
404|900|[404] FLUSSOSTATO GRUPPO SOFFIATORE NON OK
|
||||
405|900|[405] GRUPPO SOFFIATORE NON IN POSIZIONE
|
||||
406|900|[406] ERRORE CORTOCIRCUITO SONDA TERMICA
|
||||
407|900|[407] ERRORE CAVO INTERROTTO SONDA TERMICA
|
||||
408|900|[408] MAX Q.TA Y+ CON FORATRICE BASSA
|
||||
409|900|[409] ATTESA PULSANTE CARICO BORDO MANUALE
|
||||
410|900|[410] ATTESA RIPRISTINO HEPOD
|
||||
411|500|[411] ZONE DI VUOTO SELEZIONATE DA PROGRAMMA NON CONGRUENTI CON QUELLE BLOCCATE: SBLOCCARE AREA 1
|
||||
412|500|[412] ZONE DI VUOTO SELEZIONATE DA PROGRAMMA NON CONGRUENTI CON QUELLE BLOCCATE: SBLOCCARE AREA 2
|
||||
413|900|[413]
|
||||
414|900|[414]
|
||||
415|900|[415]
|
||||
416|900|[416]
|
||||
417|900|[417]
|
||||
418|500|[418] M00 ATTIVO: START CICLO + UOMO MORTO
|
||||
419|900|[419] CROSSLASER ABILITATO
|
||||
420|900|[420] BYPASS SBLOCCO PEZZO
|
||||
421|900|[421] TIMEOUT SENSORE SBLOCCAGGIO BORDO
|
||||
422|900|[422] GRUPPO LAMA 360 NON IN POSIZIONE UP
|
||||
423|900|[423] GRUPPO LAMA 360 NON IN POSIZIONE DW
|
||||
424|900|[424] GRUPPO LAMA 360 NON IN POSIZIONE (SENSORI NON OK)
|
||||
425|900|[425] GRUPPO LAMA 360 MAGNETOTERMICO / PILZ IN ERRORE
|
||||
426|500|[426] ESCLUSIONE CONTROLLO VUOTO
|
||||
427|500|[427] POSIZIONAMENTO MOTORE ALTEZZA BORDO IN CORSO
|
||||
428|500|[428] ATTESA GRUPPO SOFFIATORE IN TEMPERATURA
|
||||
429|900|[429] [SRF21] OVERSPEED MANDRINO
|
||||
430|900|[430] [SRF21] ERRORE SCHEDA SEPRI
|
||||
431|900|[431] SBLOCCARE LA CONTROSAGOMA DAL PIANO SX
|
||||
432|900|[432] SBLOCCARE LA CONTROSAGOMA DAL PIANO DX
|
||||
433|500|[433] BLOCCARE LA CONTROSAGOMA AL PIANO SX
|
||||
434|500|[434] BLOCCARE LA CONTROSAGOMA AL PIANO DX
|
||||
435|500|[435] SBLOCCARE IL PEZZO DALLA CONTROSAGOMA SX
|
||||
436|500|[436] SBLOCCARE IL PEZZO DALLA CONTROSAGOMA DX
|
||||
437|500|[437] GESTIONE CONTROSAGOME SX ABILITATA
|
||||
438|500|[438] GESTIONE CONTROSAGOME DX ABILITATA
|
||||
439|900|[439]
|
||||
440|900|[440] PERICOLO COLLISIONE ASSI X-U
|
||||
441|900|[441] PERICOLO COLLISIONE ASSI Y-V
|
||||
442|900|[442] PIGNA MOBILE ATTIVA - PADDLE DISABILITATO
|
||||
443|900|[443] APERTURA PINZE BLOCCATO DA ASSI Z-W BASSI
|
||||
444|900|[444] ATTENZIONE! PERICOLO COLLISIONE
|
||||
445|900|[445] CUFFIA LAMA NON IN POSIZIONE
|
||||
446|900|[446] BATTUTA RIFERIMENTO NON ESCLUSA
|
||||
447|900|[447] SCARICO PANNELLO: CONFERMARE CON START CICLO
|
||||
448|900|[448] VELOCITA' RIDOTTA A 25MT/MIN
|
||||
449|900|[449] DISCESA PRESSORE BLOCCATA DA ASSI Z-W BASSI
|
||||
450|900|[450] DISCESA MANDRINO BLOCCATA DA ASSI Z-W BASSI
|
||||
451|900|[451] DISCESA FUSO/LAMA BLOCCATA DA ASSI Z-W BASSI
|
||||
452|900|[452] DISCESA BATTUTA RIFERIMENTO BLOCCATA DA ASSI Z-W BASSI
|
||||
453|900|[453] MOVIMENTO ASSI X BLOCCATO DA PINZA APERTA E TESTE BASSE
|
||||
454|900|[454] MOVIMENTO ASSI U BLOCCATO DA PINZA APERTA E TESTE BASSE
|
||||
455|900|[455] MOVIMENTO ASSI YZ BLOCCATO DA PINZE APERTE
|
||||
456|900|[456] MOVIMENTO ASSI VW BLOCCATO DA PINZE APERTE
|
||||
457|900|[457] PINZA 1 NON IN POSIZIONE
|
||||
458|900|[458] PINZA 2 NON IN POSIZIONE
|
||||
@@ -0,0 +1,461 @@
|
||||
MODULE 1,PLC%d: ,458
|
||||
@0;"20171102"
|
||||
@1;"MANDRINO 1 NON BLOCCATO"
|
||||
@2;"MANDRINO 2 NON BLOCCATO"
|
||||
@3;"MANDRINO SUPPLEMENTARE NON BLOCCATO"
|
||||
@4;"ZONA DI COLLISIONE CON CAMBIO UTENSILE ESTERNO"
|
||||
@5;"ZONA DI COLLISIONE CON CAMBIO UTENSILE LINEARE"
|
||||
@6;"GRUPPO ASSI NON VALIDO"
|
||||
@7;"INVERTER 1 NON OK"
|
||||
@8;"INVERTER 2 NON OK"
|
||||
@9;"INVERTER MANDRINO SUPPLEMENTARE NON OK"
|
||||
@10;B;"SAVE ENERGY ATTIVO"
|
||||
@11;B;"[WD] SUPERATO NUMERO PEZZI MASSIMO CARICABILE SU TRANSFER"
|
||||
@12;"VERIFICA CONTATTORI NON OK"
|
||||
@13;"TIMEOUT COMUNICAZIONE XILOG"
|
||||
@14;"INTERVENTO MAGNETOTERMICI"
|
||||
@15;"PORTE PROTEZIONE APERTE"
|
||||
@16;"TAPPETO CONVOGLIA TRUCIOLI NON IN POSIZIONE"
|
||||
@17;"COLLISIONE RILEVATA DAL SIMULATORE"
|
||||
@18;"BUMPER MOBILE NON IN POSIZIONE"
|
||||
@19;"FORATRICE NON IN POSIZIONE"
|
||||
@20;B;"STOP MACCHINA DA CODICI M SUPPLEMENTARI"
|
||||
@21;B;"M00 ATTIVO: START CICLO"
|
||||
@22;M;"BATTERIA SCARICA ENCODER ASSI YASKAWA"
|
||||
@23;"AZIONAMENTI ASSI XYZ... NON OK"
|
||||
@24;"AZIONAMENTI ASSI ROTATIVI NON OK"
|
||||
@25;"CNC NON OK"
|
||||
@26;"PRESSOSTATO ARIA INTERVENUTO"
|
||||
@27;"BATTERIA CNC NON CARICA"
|
||||
@28;"ERRORE CANOPEN RING 0"
|
||||
@29;"ERRORE CANOPEN RING 1"
|
||||
@30;B;"ABILITAZIONE BL/SBL UTENSILE MANDRINO 1"
|
||||
@31;B;"ABILITAZIONE BL/SBL UTENSILE MANDRINO 2"
|
||||
@32;B;"ABILITAZIONE BL/SBL UTENSILE MANDRINO SUPPLEMENTARE"
|
||||
@33;B;"CICLO ETICHETTATURA IN CORSO"
|
||||
@34;"ETICHETTATRICE NON PRONTA"
|
||||
@35;"ETICHETTATRICE NON IN POSIZIONE"
|
||||
@36;"ERRORE ETICHETTATRICE"
|
||||
@37;"SONDA TERMICA/VENTOLA MANDRINO 1"
|
||||
@38;"SONDA TERMICA/VENTOLA MANDRINO 2"
|
||||
@39;"SONDA TERMICA/VENTOLA MANDRINO SUPPLEMENTARE"
|
||||
@40;"INTERVENTO MAGNETOTERMICO GRUPPO LAMA"
|
||||
@41;"RICARICARE POMPA LUBRIFICAZIONE"
|
||||
@42;"LUBRIFICAZIONE ASSI NON OK"
|
||||
@43;B;"LUBRIFICAZIONE ASSI IN CORSO"
|
||||
@44;B;"RICHIESTA VUOTO/ATTREZZATURA"
|
||||
@45;"EMERGENZA CAUSA VUOTO ZONA 1"
|
||||
@46;"EMERGENZA CAUSA VUOTO ZONA 2"
|
||||
@47;"ASSI IN FINE CORSA"
|
||||
@48;"CUFFIA ESTERNA NON IN POSIZIONE"
|
||||
@49;"CUFFIA INTERNA NON IN POSIZIONE"
|
||||
@50;"CUFFIA PULIZIA PIANO NON IN POSIZIONE"
|
||||
@51;"EMERGENZA CAUSA VUOTO ZONA 3"
|
||||
@52;"EMERGENZA CAUSA VUOTO ZONA 4"
|
||||
@53;B;"ESEGUIRE RIFERIMENTO ASSI"
|
||||
@54;B;"ESEGUIRE RIFERIMENTO MAGAZZINO UTENSILE 1"
|
||||
@55;B;"ESEGUIRE RIFERIMENTO MAGAZZINO UTENSILE 2"
|
||||
@56;B;"ESEGUIRE RIFERIMENTO MAGAZZINO UTENSILE MANDRINO SUPPLEMENTARE"
|
||||
@57;B;"ESEGUIRE RIFERIMENTO MAGAZZINO ESTERNO 1"
|
||||
@58;B;"ESEGUIRE RIFERIMENTO NAVETTA HS"
|
||||
@59;B;"ESEGUIRE RIFERIMENTO PINZE ROBOT CELLA WD"
|
||||
@60;"CONVOGLIATORE TRUCIOLI NON OK"
|
||||
@61;B;"SERBATOIO LUBRIFICAZIONE CONVOGLIATORE TRUCIOLI VUOTO"
|
||||
@62;"ASSE X IN FINE CORSA"
|
||||
@63;"ASSE Y IN FINE CORSA"
|
||||
@64;"ASSE Z IN FINE CORSA"
|
||||
@65;"PALPATORE SYNCRO NON IN POSIZIONE"
|
||||
@66;B;"ALLINEAMENTO ASSI GANTRY IN CORSO"
|
||||
@67;"ASSE B IN FINE CORSA"
|
||||
@68;"ASSE C IN FINE CORSA"
|
||||
@69;"ASSE Y NON IN POSIZIONE"
|
||||
@70;B;"ESEGUIRE RIFERIMENTO PALPATORE SYNCRO"
|
||||
@71;"PERNO BLOCCAGGIO TAVOLO ELEVATORE NON IN POSIZIONE"
|
||||
@72;"FOTOCELLULA PRESENZA UTENSILE"
|
||||
@73;"MANDRINO 1 NON OK"
|
||||
@74;"MANDRINO 2 NON OK"
|
||||
@75;"MANDRINO SUPPLEMENTARE NON OK"
|
||||
@76;"FOTOCELLULA PRESENZA UTENSILE (CATENA)"
|
||||
@77;"ALLARME SENSORE ROTAZIONE MANDRINO 1"
|
||||
@78;"ALLARME SENSORE ROTAZIONE MANDRINO 2"
|
||||
@79;"ALLARME SENSORE ROTAZIONE MANDRINO SUPPLEMENTARE"
|
||||
@80;"CAMBIO UTENSILE TESTA 1(ONBOARD) NON IN POSIZIONE"
|
||||
@81;"CAMBIO UTENSILE MANDRINO SUPPLEMENTARE (ONBOARD) NON IN POSIZIONE"
|
||||
@82;"CAMBIO UTENSILE LINEARE NON IN POSIZIONE"
|
||||
@83;"CAMBIO UTENSILE HS NON IN POSIZIONE"
|
||||
@84;"[TM] NAVETTA TOOL MANAGEMENT NON IN POSIZIONE"
|
||||
@85;"[TM] LETTORE CHIP TOOL MANAGMENT NON IN POSIZIONE"
|
||||
@86;"[TM] LIBERARE PINZA DI CARICO TOOL MANAGMENT"
|
||||
@87;"[TM] COLLISIONE CON TOOL MANAGMENT"
|
||||
@88;"[TM] CARICARE UTENSILE SULLA PINZA DI CARICO DEL TOOL MANAGMENT"
|
||||
@89;"BANDELLA NON IN POSIZIONE"
|
||||
@90;"PANNELLO PRELEVATO FUORI ALLINEAMENTO"
|
||||
@91;"SCARICATORE NON IN POSIZIONE"
|
||||
@92;"SPONDE/BATTUTE DI SCARICO NON IN POSIZIONE"
|
||||
@93;B;"ZONA DI SCARICO OCCUPATA"
|
||||
@94;"VERIFICARE DIMENSIONI PILA"
|
||||
@95;B;"CARICARE NUOVA PILA"
|
||||
@96;"CARICATORE NON IN POSIZIONE"
|
||||
@97;"TAVOLO ELEVATORE NON OK"
|
||||
@98;"PANNELLO NON PRELEVATO DA TAVOLO ELEVATORE"
|
||||
@99;"FOTOCELLULA RIFERIMENTO PANNELLO NON OK"
|
||||
@100;"ALLARME CELLA WD"
|
||||
@101;"REFRIGERANTE MANDRINO 1 NON OK"
|
||||
@102;"REFRIGERANTE MANDRINO 2 NON OK"
|
||||
@103;"INVERTER NASTRO DI SCARICO NON OK"
|
||||
@104;"ARRESTO OPERATIVO: RESETTARE LE FOTOCELLULE DI SICUREZZA"
|
||||
@105;B;"C.UTENSILE LINEARE IN CORSO: ABBASSARE GLI INNALZATORI E RESETTARE LE FOTOCELLULE DI SICUREZZA"
|
||||
@106;"CARICO PANNELLO NON AMMESSO"
|
||||
@107;"BYPASS COLLISIONI ATTIVO"
|
||||
@108;"SPORTELLO CAMBIO UTENSILE LINEARE DESTRO NON IN POSIZIONE"
|
||||
@109;"VERIFICA FUNZIONAMENTO SICUREZZE"
|
||||
@110;"RESETTARE LE FOTOCELLULE DI SICUREZZA"
|
||||
@111;"INSERIMENTO UTENSILE NON OK"
|
||||
@112;"GUASTO MICRO CONTROLLO PEDANE"
|
||||
@113;"INSERIMENTO UTENSILE IN NAVETTA HS NON OK"
|
||||
@114;B;"TABELLA NON AGGIORNATA"
|
||||
@115;"MANDRINO 1 NON SBLOCCATO"
|
||||
@116;"MANDRINO SUPPLEMENTARE NON SBLOCCATO"
|
||||
@117;"CONTROLLARE CICLO CHIUSURA BORDO"
|
||||
@118;B;"PM: SETUP NON POSSIBILE ZONA 3 [VUOTO ON/TESTE DW]"
|
||||
@119;B;"PM: SETUP NON POSSIBILE ZONA 4 [VUOTO ON/TESTE DW]"
|
||||
@120;B;"UTENSILE SPECIALE: OPERAZIONE NON AMMESSA"
|
||||
@121;"ERRORE CICLO CHIUSURA BORDO"
|
||||
@122;"MAGAZZINO UTENSILE ESTERNO 1 NON IN POSIZIONE"
|
||||
@123;"SPORTELLO MAGAZZINO ESTERNO NON IN POSIZIONE"
|
||||
@124;"ERRATA PROGRAMMAZIONE"
|
||||
@125;"ERRORE UTENSILE TESTA 1"
|
||||
@126;"ERRORE UTENSILE TESTA 2"
|
||||
@127;"SPORTELLO CAMBIO UTENSILE LINEARE SINISTRO NON IN POSIZIONE"
|
||||
@128;"TIME OUT PIGNA MOBILE"
|
||||
@129;B;"CAMBIO MODALITA' MACCHINA (M103)"
|
||||
@130;"PORTE ARMADIO ELETTRICO APERTE"
|
||||
@131;B;"ESEGUIRE MANUTENZIONE CONDIZIONATORE ARMADIO ELETTRICO"
|
||||
@132;"AGGREGATO PRESSATORE/CONVOGLIATORE TRUCIOLI NON OK"
|
||||
@133;B;"SERBATOIO LUBROREFRIGERATORE UTENSILE VUOTO"
|
||||
@134;B;"BATTERIA SCARICA TASTATORE RADIO"
|
||||
@135;"RILEVATORE SPESSORE PEZZO NON IN POSIZIONE"
|
||||
@136;"CICLO TASTATURA NON OK"
|
||||
@137;"BATTUTE DI RIFERIMENTO ZONA 1 NON OK"
|
||||
@138;"BATTUTE DI RIFERIMENTO ZONA 2 NON OK"
|
||||
@139;"ASSI PRISMA BC NON IN POSIZIONE"
|
||||
@140;"AZIONAMENTI ASSI PRISMA BC NON OK"
|
||||
@141;"TASTATORE RADIO NON OK"
|
||||
@142;"GRUPPO ACCOSTAMENTO PANNELLO NON IN POSIZIONE"
|
||||
@143;"ACCOSTAMENTO PANNELLO NON AVVENUTO"
|
||||
@144;"VACUOSTATO CARICATORE NON OK"
|
||||
@145;B;"RIAGGANCIO MANDRINO IN CORSO"
|
||||
@146;"RIAGGANCIO MANDRINO FALLITO"
|
||||
@147;"RIAGGANCIO MANDRINO AVVENUTO"
|
||||
@148;"INTERVENTO FUNE DI SICUREZZA"
|
||||
@149;"INTERVENTO OVERSPEED ASSI"
|
||||
@150;"INTERVENTO BUMPERS"
|
||||
@151;B;"MACCHINA SPENTA"
|
||||
@152;"EMERGENZA PREMUTA"
|
||||
@153;B;"PM: SETUP NON POSSIBILE ZONA 1 [VUOTO ON / TESTE DW]"
|
||||
@154;B;"PM: SETUP NON POSSIBILE ZONA 2 [VUOTO ON / TESTE DW]"
|
||||
@155;B;"BARRA MOBILE CENTRALE 1 NON IN POSIZIONE"
|
||||
@156;B;"BARRA MOBILE CENTRALE 2 NON IN POSIZIONE"
|
||||
@157;B;"PM: COLLISIONE BATTUTE CON SUPPORTI VENTOSE / MORSETTI"
|
||||
@158;"CUFFIA MANDRINO SUPPLEMENTARE NON IN POSIZIONE"
|
||||
@159;"TESTA GRUPPO MANDRINO SUPPLEMENTARE NON IN POSIZIONE"
|
||||
@160;"TESTA GRUPPO LAMA NON IN POSIZIONE"
|
||||
@161;B;"CICLO DI CARICO IN CORSO"
|
||||
@162;B;"CICLO DI SCARICO IN CORSO"
|
||||
@163;"BATTUTE DI CARICO NON IN POSIZIONE ZONA 1"
|
||||
@164;B;"ATTESA ROBOT IN POSIZIONE"
|
||||
@165;"INVERTER GUASTO POMPA VUOTO 1 (MASTER)"
|
||||
@166;"INVERTER GUASTO POMPA VUOTO 2 (SLAVE)"
|
||||
@167;"BATTUTE DI CARICO NON IN POSIZIONE ZONA 2"
|
||||
@168;B;"SALITA CUFFIA DA OPERATORE"
|
||||
@169;B;"TRAVERSA 1 NON IN POSIZIONE"
|
||||
@170;B;"TRAVERSA 2 NON IN POSIZIONE"
|
||||
@171;B;"TRAVERSA 3 NON IN POSIZIONE"
|
||||
@172;B;"TRAVERSA 4 NON IN POSIZIONE"
|
||||
@173;B;"TRAVERSA 5 NON IN POSIZIONE"
|
||||
@174;B;"TRAVERSA 6 NON IN POSIZIONE"
|
||||
@175;B;"TRAVERSA 7 NON IN POSIZIONE"
|
||||
@176;B;"TRAVERSA 8 NON IN POSIZIONE"
|
||||
@177;B;"TRAVERSA 9 NON IN POSIZIONE"
|
||||
@178;B;"TRAVERSA 10 NON IN POSIZIONE"
|
||||
@179;B;"TRAVERSA 11 NON IN POSIZIONE"
|
||||
@180;B;"TRAVERSA 12 NON IN POSIZIONE"
|
||||
@181;B;"SOSTITUZIONE VENTOSE IN CORSO AREA 1"
|
||||
@182;B;"SOSTITUZIONE VENTOSE IN CORSO AREA 2"
|
||||
@183;"BATTUTE DI RIFERIMENTO ZONA 3 NON OK"
|
||||
@184;"BATTUTE DI RIFERIMENTO ZONA 4 NON OK"
|
||||
@185;"[BRC] GR5: GRUPPO FUSI ORIZZONTALI NON IN POSIZIONE (FORI SPINE)"
|
||||
@186;"[BRC] GR6: GRUPPO FRESA VERTICALE NON IN POSIZIONE"
|
||||
@187;"[BRC] GR7: GRUPPO FRESA ORIZZONTALE NON IN POSIZIONE"
|
||||
@188;"[BRC] GR8: GRUPPO LAMA NON IN POSIZIONE"
|
||||
@189;"[BRC] ATTESA INNESTO PER ROTAZIONE GRUPPO LAMA"
|
||||
@190;"SELETTORI CONTROSAGOMA NON OK [AREA UNICA]"
|
||||
@191;"BATTUTE DI RIFERIMENTO BARRA 1 NON OK"
|
||||
@192;"BATTUTE DI RIFERIMENTO BARRA 2 NON OK"
|
||||
@193;"BATTUTE DI RIFERIMENTO BARRA 3 NON OK"
|
||||
@194;"BATTUTE DI RIFERIMENTO BARRA 4 NON OK"
|
||||
@195;"BATTUTE DI RIFERIMENTO BARRA 5 NON OK"
|
||||
@196;"BATTUTE DI RIFERIMENTO BARRA 6 NON OK"
|
||||
@197;"BATTUTE DI RIFERIMENTO BARRA 7 NON OK"
|
||||
@198;"BATTUTE DI RIFERIMENTO BARRA 8 NON OK"
|
||||
@199;"BATTUTE DI RIFERIMENTO BARRA 9 NON OK"
|
||||
@200;"BATTUTE DI RIFERIMENTO BARRA 10 NON OK"
|
||||
@201;"BATTUTE DI RIFERIMENTO BARRA 11 NON OK"
|
||||
@202;"BATTUTE DI RIFERIMENTO BARRA 12 NON OK"
|
||||
@203;"BATTUTE DI RIFERIMENTO BARRA FISSA SX NON OK"
|
||||
@204;"BATTUTE DI RIFERIMENTO BARRA FISSA DX NON OK"
|
||||
@205;"BASI NON BLOCCATE ZONA 1"
|
||||
@206;"BASI NON BLOCCATE ZONA 2"
|
||||
@207;"BASI NON BLOCCATE ZONA 3"
|
||||
@208;"BASI NON BLOCCATE ZONA 4"
|
||||
@209;B;"SOSTITUZIONE VENTOSE IN CORSO AREA 3"
|
||||
@210;B;"SOSTITUZIONE VENTOSE IN CORSO AREA 4"
|
||||
@211;"[BORDATORE POWER] ATTESA GRUPPO A BORDARE ALTO"
|
||||
@212;"[BORDATORE POWER] ATTESA GRUPPO A BORDARE BASSO"
|
||||
@213;"[BORDATORE POWER] ATTESA GRUPPO A BORDARE POSIZ. CAMBIO RULLO"
|
||||
@214;"[BORDATORE POWER] ATTESA PIANO CARICAMENTO BORDI ALTO"
|
||||
@215;"[BORDATORE POWER] ATTESA PIANO CARICAMENTO BORDI BASSO"
|
||||
@216;"[BORDATORE POWER] MANCATA LETTURA BORDO GIUNZIONE"
|
||||
@217;"[BORDATORE POWER] ERRORE BORDO SU FOTOCELLULA DI CARICO"
|
||||
@218;B;"VASCA COLLA NON IN TEMPERATURA"
|
||||
@219;"[BORDATORE POWER] ASSENZA BORDO IN MULTIROTOLO"
|
||||
@220;"[BORDATORE POWER] ATTESA CICLO CARICO COLLA DA PREFUSORE"
|
||||
@221;"[BORDATORE POWER] MANCATO TAGLIO TRANCIA MAGAZZINO BORDI"
|
||||
@222;"[BORDATORE POWER] ATTESA CARICO COLLA DA PREFUSORE"
|
||||
@223;"[BORDATORE POWER] ANOMALIA SENSORI CILINDRO TESTA A BORDARE"
|
||||
@224;"SENSORE TESTA A BORDARE IN COLLISIONE"
|
||||
@225;"[BORDATORE POWER] TIMEOUT INTESTATURA BORDO TESTA A BORDARE"
|
||||
@226;"INTERVENTO TERMICI VASCA COLLA"
|
||||
@227;"INTERVENTO TERMICI PREFUSORE"
|
||||
@228;"INTERVENTO TERMICI LAMPADE ONDE CORTE"
|
||||
@229;"ESEGUIRE RIFERIMENTO MOT. ALTEZZA BORDO TESTA B."
|
||||
@230;"ESEGUIRE RIFERIMENTO MOT. ALTEZZA BORDO MAGAZZINO B."
|
||||
@231;"ESEGUIRE RIFERIMENTO MOT. CAMBIO RULLO PRESSIONE"
|
||||
@232;"TIMEOUT SENSORE CHIUSURA CILINDRO PREFUSORE"
|
||||
@233;B;"ESEGUIRE TARATURA TRAVERSE/VENTOSE"
|
||||
@234;"VENTOSE NON BLOCCATE AREA 1"
|
||||
@235;"VENTOSE NON BLOCCATE AREA 2"
|
||||
@236;B;"ATTESA SBLOCCO VENTOSA"
|
||||
@237;B;"ATTESA BLOCCO VENTOSA"
|
||||
@238;B;"RIMUOVERE VENTOSA: START CICLO"
|
||||
@239;B;"INSERIRE VENTOSA: START CICLO"
|
||||
@240;"ANOMALIA FOTOCELLULA MAGAZZINO BORDI"
|
||||
@241;B;"BARRA 1"
|
||||
@242;B;"BARRA 2"
|
||||
@243;B;"BARRA 3"
|
||||
@244;B;"BARRA 4"
|
||||
@245;B;"BARRA 5"
|
||||
@246;B;"BARRA 6"
|
||||
@247;B;"BARRA 7"
|
||||
@248;B;"BARRA 8"
|
||||
@249;B;"BARRA 9"
|
||||
@250;B;"BARRA 10"
|
||||
@251;B;"BARRA 11"
|
||||
@252;B;"BARRA 12"
|
||||
@253;B;"RIMUOVERE/INSERIRE VENTOSA COME DA GRAFICA SU AREA 1: START CICLO"
|
||||
@254;B;"RIMUOVERE/INSERIRE VENTOSA COME DA GRAFICA SU AREA 2: START CICLO"
|
||||
@255;"PORTE PROTEZIONE SBLOCCATE"
|
||||
@256;"ERRORE MODULO ZERO SPEED MANDRINO"
|
||||
@257;"INTESTATORE NON IN POSIZIONE"
|
||||
@258;"INTESTATORE 92 VUOTO"
|
||||
@259;"INTESTATORE 93 VUOTO"
|
||||
@260;"LIVELLO COLLA BASSO B.BASIC"
|
||||
@261;"[WD]EMERGENZA TRANSFER PREMUTA"
|
||||
@262;"[WD]INTERVENTO MAGNETOTERMICI TRANSFER"
|
||||
@263;"[WD]PORTE ARMADIO ELETTRICO TRANSFER APERTE"
|
||||
@264;"[WD]SVUOTARE TRANSFER"
|
||||
@265;"[WD]PEZZO IN ZONA DI SCARICO"
|
||||
@266;"[WD]ATTESA ROBOT 1 IN POSIZIONE"
|
||||
@267;"[WD]ATTESA ROBOT 2 IN POSIZIONE"
|
||||
@268;"[WD]SVUOTARE RULLIERE"
|
||||
@269;"[WD]DIMENSIONI PEZZO NON OK"
|
||||
@270;"[WD]SVUOTARE PIANO MACCHINA E PINZE ROBOT"
|
||||
@271;"[WD]PINZA ROBOT 1 NON IN POSIZIONE"
|
||||
@272;"[WD]PINZA ROBOT 2 NON IN POSIZIONE"
|
||||
@273;"MORSETTI ZONA 1 ALTI PNEUMATICAMENTE"
|
||||
@274;"MORSETTI ZONA 2 ALTI PNEUMATICAMENTE"
|
||||
@275;"EMERGENZA CAUSA MORSETTI ZONA 1"
|
||||
@276;"EMERGENZA CAUSA MORSETTI ZONA 2"
|
||||
@277;"ZONA DI COLLISIONE REFILATORE / RAS"
|
||||
@278;"PERICOLO SPORTELLO PANTOGRAFO APERTO"
|
||||
@279;"ZONA DI COLLISIONE BORDATORE"
|
||||
@280;"POSIZIONE DEL SELETTORE DELLA PULSANTIERA NON OK"
|
||||
@281;"PREMERE PULSANTE UOMO-MORTO"
|
||||
@282;"METTERE LA MACCHINA IN EMERGENZA"
|
||||
@283;"EMERGENZA TAPPETO ZONA 1"
|
||||
@284;"EMERGENZA TAPPETO ZONA 2"
|
||||
@285;"ZONA DI COLLISIONE MAGAZZINO RULLI PRESSIONE"
|
||||
@286;"TAPPETO AREA 1 IMPEGNATO"
|
||||
@287;"TAPPETO CENTRALE IMPEGNATO"
|
||||
@288;"TAPPETO AREA 2 IMPEGNATO"
|
||||
@289;"NUMERO RULLO PRESSORE ERRATO"
|
||||
@290;"CHECK VASCA COLLA"
|
||||
@291;"TIMEOUT GRUPPO VENTOSE NON ESCLUSO"
|
||||
@292;"TIMEOUT GRUPPO VENTOSE NON INSERITO"
|
||||
@293;"ASSE C BORDATORE IN QUOTA COLLISIONE CON G.VENTOSE"
|
||||
@294;"CICLO INSERIMENTO SPINA GRUPPO 92 NON OK(MUOVERE IN JOG+ L'ASSE X)"
|
||||
@295;"CICLO INSERIMENTO SPINA GRUPPO 93 NON OK(MUOVERE IN JOG- L'ASSE X)"
|
||||
@296;"RULLI NON IN POSIZIONE"
|
||||
@297;"ASSE X FUORI LIMITE PER RULLI"
|
||||
@298;"COLLISIONE RULLI CON GRUPPO TESTE"
|
||||
@299;B;"ATTESA SBLOCCO VUOTO/ATTREZZATURA"
|
||||
@300;"PERICOLO COLLISIONE BORDATORE PIANO MULTIFUNZIONE"
|
||||
@301;"MODALITÀ CELLA NON ATTIVA"
|
||||
@302;"ZONA DI COLLISIONE BORDATORE IN Y"
|
||||
@303;"ERRORE SEQUENZA CAMBIO RULLO PRESSORE / SENSORE BLOCCO RULLO"
|
||||
@304;"ANOMALIA FRENO ASSE Z1"
|
||||
@305;"ANOMALIA FRENO ASSE Z2"
|
||||
@306;"ANOMALIA STATO CAMBIO UTENSILE"
|
||||
@307;"UTENSILE NON INCLINABILE"
|
||||
@308;"RIPORTARE ASSE B A QUOTA 0.0 IN MANUALE"
|
||||
@309;"AVARIA TELERUTTORE/TERMICO FORATRICE"
|
||||
@310;"RAPID 1 NON IN POSIZIONE"
|
||||
@311;" "
|
||||
@312;"ASSE Z NON IN POSIZIONE"
|
||||
@313;"PRESSORE 1 TESTA 1 NON IN POSIZIONE"
|
||||
@314;"PRESSORE 2 TESTA 1 NON IN POSIZIONE"
|
||||
@315;"PRESSORE 3 TESTA 1 NON IN POSIZIONE"
|
||||
@316;"PRESSORE 4 TESTA 1 NON IN POSIZIONE"
|
||||
@317;"PRESSORE 1 TESTA 2 NON IN POSIZIONE"
|
||||
@318;"PRESSORE 2 TESTA 2 NON IN POSIZIONE"
|
||||
@319;"PRESSORE 3 TESTA 2 NON IN POSIZIONE"
|
||||
@320;"PRESSORE 4 TESTA 2 NON IN POSIZIONE"
|
||||
@321;B;"ATTESA FINE CAMBIO UTENSILE"
|
||||
@322;"PERICOLO DI COLLISIONE IN ZONA DI CARICO"
|
||||
@323;"TAVOLO PNEUMATICO DI SCARICO NON IN POSIZIONE"
|
||||
@324;B;"ATTESA TAVOLO PNEUMATICO DI SCARICO A RIPOSO"
|
||||
@325;B;"ZERO FEED RATE"
|
||||
@326;B;"ATTESA PANNELLO ALLINEATO DA FLEXSTORE"
|
||||
@327;B;"ATTESA PANNELLO PRONTO DA FLEXSTORE"
|
||||
@328;"FEED HOLD DA FLEXSTORE"
|
||||
@329;"INTERVENTO TAPPETO DA FLEXSTORE"
|
||||
@330;"CELLA FLEXSTORE NON OK"
|
||||
@331;"EMERGENZA DA FLEXSTORE"
|
||||
@332;"EMERGENZA DA LINEA"
|
||||
@333;"FRESATORE VERTICALE NON IN POSIZIONE"
|
||||
@334;"FRESATORE ORIZZONTALE NON IN POSIZIONE"
|
||||
@335;"MANDRINO FRESATORE VERTICALE NON OK"
|
||||
@336;"MANDRINO FRESATORE ORIZZONTALE NON OK"
|
||||
@337;"MANDRINO GRUPPO LAMA NON OK"
|
||||
@338;"SONDA TERMICA FRESATORE VERTICALE"
|
||||
@339;"ERRORE MODULO ZERO SPEED GRUPPO FRESATORE VERTICALE"
|
||||
@340;"ERRORE MODULO ZERO SPEED GRUPPO FRESATORE ORIZZONTALE"
|
||||
@341;"TIMEOUT SENSORE NAVETTA BARRA 1"
|
||||
@342;"TIMEOUT SENSORE NAVETTA BARRA 2"
|
||||
@343;"TIMEOUT SENSORE NAVETTA BARRA 3"
|
||||
@344;"TIMEOUT SENSORE NAVETTA BARRA 4"
|
||||
@345;"TIMEOUT SENSORE NAVETTA BARRA 5"
|
||||
@346;"TIMEOUT SENSORE NAVETTA BARRA 6"
|
||||
@347;"TIMEOUT SENSORE NAVETTA BARRA 7"
|
||||
@348;"TIMEOUT SENSORE NAVETTA BARRA 8"
|
||||
@349;"TIMEOUT SENSORE NAVETTA BARRA 9"
|
||||
@350;"TIMEOUT SENSORE NAVETTA BARRA 10"
|
||||
@351;"TIMEOUT SENSORE NAVETTA BARRA 11"
|
||||
@352;"TIMEOUT SENSORE NAVETTA BARRA 12"
|
||||
@353;B;"ESEGUIRE TARATURA BARRE TVA"
|
||||
@354;"SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 1"
|
||||
@355;"SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 2"
|
||||
@356;"SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 3"
|
||||
@357;"SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 4"
|
||||
@358;"SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 5"
|
||||
@359;"SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 6"
|
||||
@360;"SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 7"
|
||||
@361;"SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 8"
|
||||
@362;"SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 9"
|
||||
@363;"SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 10"
|
||||
@364;"SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 11"
|
||||
@365;"SUPERATO IL NUMERO DIPOSITIVI MAX.(6) BARRA 12"
|
||||
@366;"ALLARME TIMEOUT COPERCHIO MAGAZZINO RULLI PRESSORE"
|
||||
@367;"ALLARME TIMEOUT MAGAZZINO RULLI PRESSORE"
|
||||
@368;"SCARICO RULLO PRESSIONE ABILITATO"
|
||||
@369;"EMERGENZE ESTERNE ATTIVE"
|
||||
@370;B;"ESEGUIRE RIFERIMENTO ASSE V PRECENTRATORE"
|
||||
@371;B;"ATTESA VACUOSTATO PRECENTRATORE/ACCOSTATORE"
|
||||
@372;"EMERGENZA ASSE V PRECENTRATORE"
|
||||
@373;"ESECUZIONE NON AMMESSA"
|
||||
@374;"FORATRICE 2 NON IN POSIZIONE"
|
||||
@375;" "
|
||||
@376;"(PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA1"
|
||||
@377;"(PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA2"
|
||||
@378;"(PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA3"
|
||||
@379;"(PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA4"
|
||||
@380;"(PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA5"
|
||||
@381;"(PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA6"
|
||||
@382;"(PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA7"
|
||||
@383;"(PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA8"
|
||||
@384;"(PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA9"
|
||||
@385;"(PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA10"
|
||||
@386;"(PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA11"
|
||||
@387;"(PIANO POP-UP) TIMEOUT SENSORI POP-UP BARRA12"
|
||||
@388;"(PIANO FLEXMATIC) MODALITA DI TEST"
|
||||
@389;"(PIANO FLEXMATIC) CHECK POSIZIONE VENTOSE OFF"
|
||||
@390;"UTENSILE INGOMBRANTE PER DISCESA CUFFIA"
|
||||
@391;"PARCHEGGIO NON AMMESSO AREA 1 [PEZZO BLOCCATO/PROGRAMMA ATTIVO]"
|
||||
@392;"PARCHEGGIO NON AMMESSO AREA 2 [PEZZO BLOCCATO/PROGRAMMA ATTIVO]"
|
||||
@393;"PARCHEGGIO NON AMMESSO AREA 3 [PEZZO BLOCCATO/PROGRAMMA ATTIVO]"
|
||||
@394;"PARCHEGGIO NON AMMESSO AREA 4 [PEZZO BLOCCATO/PROGRAMMA ATTIVO]"
|
||||
@395;"PERDITA FINECORSA TIRANTE MANDRINO"
|
||||
@396;"PERDITA FINECORSA CILINDRO MANDRINO"
|
||||
@397;"[BRC] ARRESTO OPERATIVO CAUSA ASSORBIMENTO ELEVATO"
|
||||
@398;"[BRC] VELOCITA' RIDOTTA CAUSA ASSORBIMENTO ELEVATO"
|
||||
@399;" "
|
||||
@400;"UTENSILE NON INCLINABILE"
|
||||
@401;"INTERVENTO ANTICOLLISIONE CNC Y1-Y4"
|
||||
@402;"RIPORTARE ASSE B A QUOTA 0.0 IN MANUALE"
|
||||
@403;"PROTEZIONE Y4 NON IN POSIZIONE"
|
||||
@404;"FLUSSOSTATO GRUPPO SOFFIATORE NON OK"
|
||||
@405;"GRUPPO SOFFIATORE NON IN POSIZIONE"
|
||||
@406;"ERRORE CORTOCIRCUITO SONDA TERMICA"
|
||||
@407;"ERRORE CAVO INTERROTTO SONDA TERMICA"
|
||||
@408;"MAX Q.TA Y+ CON FORATRICE BASSA"
|
||||
@409;"ATTESA PULSANTE CARICO BORDO MANUALE"
|
||||
@410;"ATTESA RIPRISTINO HEPOD"
|
||||
@411;B;"ZONE DI VUOTO SELEZIONATE DA PROGRAMMA NON CONGRUENTI CON QUELLE BLOCCATE: SBLOCCARE AREA 1"
|
||||
@412;B;"ZONE DI VUOTO SELEZIONATE DA PROGRAMMA NON CONGRUENTI CON QUELLE BLOCCATE: SBLOCCARE AREA 2"
|
||||
@413;" "
|
||||
@414;" "
|
||||
@415;" "
|
||||
@416;" "
|
||||
@417;" "
|
||||
@418;B;"M00 ATTIVO: START CICLO + UOMO MORTO"
|
||||
@419;"CROSSLASER ABILITATO"
|
||||
@420;"BYPASS SBLOCCO PEZZO"
|
||||
@421;"TIMEOUT SENSORE SBLOCCAGGIO BORDO"
|
||||
@422;"GRUPPO LAMA 360 NON IN POSIZIONE UP"
|
||||
@423;"GRUPPO LAMA 360 NON IN POSIZIONE DW"
|
||||
@424;"GRUPPO LAMA 360 NON IN POSIZIONE (SENSORI NON OK)"
|
||||
@425;"GRUPPO LAMA 360 MAGNETOTERMICO / PILZ IN ERRORE"
|
||||
@426;B;"ESCLUSIONE CONTROLLO VUOTO"
|
||||
@427;B;"POSIZIONAMENTO MOTORE ALTEZZA BORDO IN CORSO"
|
||||
@428;B;"ATTESA GRUPPO SOFFIATORE IN TEMPERATURA"
|
||||
@429;"[SRF21] OVERSPEED MANDRINO"
|
||||
@430;"[SRF21] ERRORE SCHEDA SEPRI"
|
||||
@431;"SBLOCCARE LA CONTROSAGOMA DAL PIANO SX"
|
||||
@432;"SBLOCCARE LA CONTROSAGOMA DAL PIANO DX"
|
||||
@433;B;"BLOCCARE LA CONTROSAGOMA AL PIANO SX"
|
||||
@434;B;"BLOCCARE LA CONTROSAGOMA AL PIANO DX"
|
||||
@435;B;"SBLOCCARE IL PEZZO DALLA CONTROSAGOMA SX"
|
||||
@436;B;"SBLOCCARE IL PEZZO DALLA CONTROSAGOMA DX"
|
||||
@437;B;"GESTIONE CONTROSAGOME SX ABILITATA"
|
||||
@438;B;"GESTIONE CONTROSAGOME DX ABILITATA"
|
||||
@439;" "
|
||||
@440;"PERICOLO COLLISIONE ASSI X-U"
|
||||
@441;"PERICOLO COLLISIONE ASSI Y-V"
|
||||
@442;"PIGNA MOBILE ATTIVA - PADDLE DISABILITATO"
|
||||
@443;"APERTURA PINZE BLOCCATO DA ASSI Z-W BASSI"
|
||||
@444;"ATTENZIONE! PERICOLO COLLISIONE"
|
||||
@445;"CUFFIA LAMA NON IN POSIZIONE"
|
||||
@446;"BATTUTA RIFERIMENTO NON ESCLUSA"
|
||||
@447;"SCARICO PANNELLO: CONFERMARE CON START CICLO"
|
||||
@448;"VELOCITA' RIDOTTA A 25MT/MIN"
|
||||
@449;"DISCESA PRESSORE BLOCCATA DA ASSI Z-W BASSI"
|
||||
@450;"DISCESA MANDRINO BLOCCATA DA ASSI Z-W BASSI"
|
||||
@451;"DISCESA FUSO/LAMA BLOCCATA DA ASSI Z-W BASSI"
|
||||
@452;"DISCESA BATTUTA RIFERIMENTO BLOCCATA DA ASSI Z-W BASSI"
|
||||
@453;"MOVIMENTO ASSI X BLOCCATO DA PINZA APERTA E TESTE BASSE"
|
||||
@454;"MOVIMENTO ASSI U BLOCCATO DA PINZA APERTA E TESTE BASSE"
|
||||
@455;"MOVIMENTO ASSI YZ BLOCCATO DA PINZE APERTE"
|
||||
@456;"MOVIMENTO ASSI VW BLOCCATO DA PINZE APERTE"
|
||||
@457;"PINZA 1 NON IN POSIZIONE"
|
||||
@458;"PINZA 2 NON IN POSIZIONE"
|
||||
END
|
||||
@@ -0,0 +1,653 @@
|
||||
1|900|[1] Atteso carattere [
|
||||
2|900|[2] Numero Registro Errato
|
||||
3|900|[3] Funzione non valida
|
||||
4|900|[4] Parametrica: carattere non valido
|
||||
5|900|[5] IF: Atteso carattere =
|
||||
6|900|[6] JSR: Livello Annidamento Subroutine Errato
|
||||
7|900|[7] RET: Annidamento Subroutine Errato
|
||||
8|900|[8] Funzione non disponibile
|
||||
9|900|[9] Troppe funzioni M consecutive
|
||||
10|900|[10] Raggio senza G2/G3
|
||||
11|900|[11] Raggio Inconsistente
|
||||
12|900|[12] Errore inizializzazione canale
|
||||
13|900|[13] Canale in stallo (deadlock)
|
||||
14|900|[14] Ciclo Fisso non esistente
|
||||
15|900|[15] Troppi livelli di parentesi (
|
||||
16|900|[16] Assegnamento: atteso carattere =
|
||||
17|900|[17] Atteso carattere CR
|
||||
18|900|[18] Modo operativo cambiato
|
||||
19|900|[19] JMP: Numero Blocco non trovato
|
||||
20|900|[20] Programma non trovato
|
||||
21|900|[21] Errore da procedura esterna
|
||||
22|900|[22] Quota Fuori Limite
|
||||
23|900|[23] Asse non configurato
|
||||
24|900|[24] Mandrino non configurato
|
||||
25|900|[25] Piano Selezionato Errato
|
||||
26|900|[26] Asse non Disponibile
|
||||
27|900|[27] Passo Maschiatura Nullo
|
||||
28|900|[28] Asse in Allarme
|
||||
29|900|[29] Feed Nulla
|
||||
30|900|[30] Raggio Utensile Nullo
|
||||
31|900|[31] Simbolo % non trovato
|
||||
32|900|[32] Cambio Piano o Lato con CUT Attiva
|
||||
33|900|[33] Mandrino senza Encoder
|
||||
34|900|[34] Indirizzo senza numero
|
||||
35|900|[35] SQRT: Argomento negativo
|
||||
36|900|[36] TAN: Valore Infinito
|
||||
37|900|[37] ASIN, ACOS: Argomento fuori range
|
||||
38|900|[38] Divisione per zero
|
||||
39|900|[39] Indirizzo non usato
|
||||
40|900|[40] Numero senza indirizzo
|
||||
41|900|[41] Parametro su indirizzo G
|
||||
42|900|[42] Programma senza M2-M30
|
||||
43|900|[43] Interpolazione con assi incompatibili
|
||||
44|900|[44] Velocità mandrino troppo elevata
|
||||
45|900|[45] Vel Asse Z > Vel Max Canale
|
||||
46|900|[46] Correzione Tornio G18
|
||||
47|900|[47] Tipo Geometria Utensile non gestita
|
||||
48|900|[48] Coda Trasmissione Esaurita
|
||||
49|900|[49] Coda Pacchetti Liberi Esaurita
|
||||
50|900|[50] Raggio profilo minore Raggio Utensile
|
||||
51|900|[51] Punto Finale Arco inconsistente
|
||||
52|900|[52] Il Percorso non puo' essere seguito
|
||||
53|900|[53] Segmento nullo
|
||||
54|900|[54] Angolo nullo
|
||||
55|900|[55] Operazione Illegale
|
||||
56|900|[56] Intersezione tra segmenti o archi
|
||||
57|900|[57] Attacco Profilo non permesso: usare G0
|
||||
58|900|[58] Sovrataglio su Segmento Lineare
|
||||
59|900|[59] Sovrataglio su Arco di Circonferenza
|
||||
60|900|[60] Atteso carattere ]
|
||||
61|900|[61] Valore troppo elevato
|
||||
62|900|[62] Errore accesso file
|
||||
63|900|[63] Descrittore Utensile Errato
|
||||
64|900|[64] Troppi parametri
|
||||
65|900|[65] Troppi caratteri nei campi stringa
|
||||
66|900|[66] Atteso oggetto dopo ^
|
||||
67|900|[67] Assegnazione a registro inesistente
|
||||
68|900|[68] Argomento inesistente
|
||||
69|900|[69] Codice SPC non riconosciuto
|
||||
70|900|[70] Violazione semantica blocco APND
|
||||
71|900|[71] Per spiegazioni vedere il Manuale
|
||||
72|900|[72] CFC: Subroutine non trovata
|
||||
73|900|[73] CFC: Parametri errati
|
||||
74|900|[74] CFC: Errore di gestione risorse
|
||||
75|900|[75] CFC: Nessuna risorsa
|
||||
76|900|[76] CFC: Errore di chiusura
|
||||
77|900|[77] CFC: Non specificato
|
||||
78|900|[78] CFC: <DEBUG 1>
|
||||
79|900|[79] CFC: (Per spiegazioni vedere il Manuale)
|
||||
80|900|[80] CFC: Task eseguito correttamente
|
||||
81|900|[81] CVB: Codice operativo sconosciuto
|
||||
82|900|[82] CVB: Errore di gestione risorse
|
||||
83|900|[83] CVB: Nessuna risorsa
|
||||
84|900|[84] CVB: Errore di chiusura
|
||||
85|900|[85] CVB: Pipe interrotta
|
||||
86|900|[86] CVB: Ripristinato da stallo/Fine file inattesa
|
||||
87|900|[87] CVB: Non specificato
|
||||
88|900|[88] CVB: <DEBUG 1>
|
||||
89|900|[89] CVB: (Per le spiegazioni vedere il Manuale)
|
||||
90|900|[90] CVB: Task eseguito correttamente
|
||||
93|900|[93] APIO: Nessuna risorsa
|
||||
94|900|[94] APIO: Errore di chiusura
|
||||
95|900|[95] APIO: Non specificato
|
||||
96|900|[96] APIO: <DEBUG 1>
|
||||
97|900|[97] APIO: (Per spiegazioni vedere il Manuale)
|
||||
98|900|[98] APIO: Task eseguito correttamente
|
||||
99|900|[99] XCL: Codice operativo sconosciuto
|
||||
100|900|[100] XCL: Errore di gestione risorse
|
||||
101|900|[101] XCL: Nessuna risorsa
|
||||
102|900|[102] XCL: Errore di chiusura
|
||||
103|900|[103] XCL: Pipe interrotta
|
||||
104|900|[104] XCL: Ripristinato da stallo/Fine file inattesa
|
||||
105|900|[105] XCL: Non specificato
|
||||
106|900|[106] XCL: <DEBUG 1>
|
||||
107|900|[107] XCL: (Per le spiegazioni vedere il Manuale)
|
||||
108|900|[108] XCL: Compito eseguito correttamente
|
||||
109|900|[109] XAM: Codice operativo sconosciuto
|
||||
110|900|[110] XAM: Errore di gestione risorse
|
||||
111|900|[111] XAM: Nessuna risorsa
|
||||
112|900|[112] XAM: Errore di chiusura
|
||||
113|900|[113] XAM: Pipe interrotta
|
||||
114|900|[114] XAM: Ripristinato da stallo/Fine file inattesa
|
||||
115|900|[115] XAM: Non specificato
|
||||
116|900|[116] XAM: <DEBUG 1>
|
||||
117|900|[117] XAM: (Per le spiegazioni vedere il Manuale)
|
||||
118|900|[118] XAM: Task eseguito correttamente
|
||||
119|900|[119] RETR: Codice operativo sconosciuto
|
||||
120|900|[120] RETR: Errore di gestione risorse
|
||||
121|900|[121] RETR: Nessuna risorsa
|
||||
122|900|[122] RETR: Errore di chiusura
|
||||
123|900|[123] RETR: Pipe interrotta
|
||||
124|900|[124] RETR: Ripristinato da stallo/Fine file inattesa
|
||||
125|900|[125] RETR: Non specificato
|
||||
126|900|[126] RETR: <DEBUG 1>
|
||||
127|900|[127] RETR: (Per le spiegazioni vedere il Manuale)
|
||||
128|900|[128] RETR: Task eseguito correttamente
|
||||
129|900|[129] PG2: Codice operativo sconosciuto
|
||||
130|900|[130] PG2: Errore di gestione risorse
|
||||
131|900|[131] PG2: Nessuna risorsa
|
||||
132|900|[132] PG2: Errore di chiusura
|
||||
133|900|[133] PG2: Pipe interrotta
|
||||
134|900|[134] PG2: Ripristinato da stallo/Fine file inattesa
|
||||
135|900|[135] PG2: Non specificato
|
||||
136|900|[136] PG2: <DEBUG 1>
|
||||
137|900|[137] PG2: (Per le spiegazioni vedere il Manuale)
|
||||
138|900|[138] PG2: Task eseguito correttamente
|
||||
139|900|[139] WARP: Codice operativo sconosciuto
|
||||
140|900|[140] WARP: Errore di gestione risorse
|
||||
141|900|[141] WARP: Nessuna risorsa
|
||||
142|900|[142] WARP: Errore di chiusura
|
||||
143|900|[143] WARP: Pipe interrotta
|
||||
144|900|[144] WARP: Ripristinato da stallo/Fine file inattesa
|
||||
145|900|[145] WARP: Non specificato
|
||||
146|900|[146] WARP: <DEBUG 1>
|
||||
147|900|[147] WARP: (Per le spiegazioni vedere il Manuale)
|
||||
148|900|[148] WARP: Task eseguito correttamente
|
||||
149|900|[149] PAG: Codice operativo sconosciuto
|
||||
150|900|[150] PAG: Errore di gestione risorse
|
||||
151|900|[151] PAG: Nessuna risorsa
|
||||
152|900|[152] PAG: Errore di chiusura
|
||||
153|900|[153] PAG: Pipe interrotta
|
||||
154|900|[154] PAG: Ripristinato da stallo/Fine file inattesa
|
||||
155|900|[155] PAG: Non specificato
|
||||
156|900|[156] PAG: <DEBUG 1>
|
||||
157|900|[157] PAG: (Per le spiegazioni vedere il Manuale)
|
||||
158|900|[158] PAG: Task eseguito correttamente
|
||||
159|900|[159] Codice di errore sconosciuto
|
||||
160|900|[160] Asse X Quota Fuori Limite
|
||||
161|900|[161] Asse Y Quota Fuori Limite
|
||||
162|900|[162] Asse Z Quota Fuori Limite
|
||||
163|900|[163] Asse U Quota Fuori Limite
|
||||
164|900|[164] Asse V Quota Fuori Limite
|
||||
165|900|[165] Asse W Quota Fuori Limite
|
||||
166|900|[166] Asse A Quota Fuori Limite
|
||||
167|900|[167] Asse B Quota Fuori Limite
|
||||
168|900|[168] Asse C Quota Fuori Limite
|
||||
170|900|[170] Errore definizione variabile record [simbolo]
|
||||
171|900|[171] Errore assegnazione variabile record [simbolo]
|
||||
172|900|[172] Errore definizione variabile record [var defcn]
|
||||
173|900|[173] Errore assegnazione variabile record [var defcn]
|
||||
174|900|[174] Errore definizione variabile record [INPUT]
|
||||
175|900|[175] Impossibile assegnare registro di input
|
||||
176|900|[176] Errore definizione variabile record [OUT]
|
||||
177|900|[177] Errore assegnazione variabile record [OUT]
|
||||
178|900|[178] Errore definizione variabile record [registro logico]
|
||||
179|900|[179] Errore definizione variabile record [variabile automatica]
|
||||
180|900|[180] Atteso valore da assegnare a variabile record
|
||||
181|900|[181] Array oltre il massimo consentito
|
||||
182|900|[182] Simbolo giá definito
|
||||
183|900|[183] Impossibile inizializzare gli Array
|
||||
184|900|[184] Errore inizializzazione variabile
|
||||
185|900|[185] Errore sintattico definizione parametrica
|
||||
186|900|[186] Tipo di dato incompatibile
|
||||
187|900|[187] Impossibile definire altri simboli
|
||||
188|900|[188] Simbolo non definito
|
||||
189|900|[189] Errore assegnamento stringa
|
||||
190|900|[190] Errore assegnamento numerico
|
||||
191|900|[191] Simbolo inesistente
|
||||
192|900|[192] Errore definizione variabile record [registro logico]
|
||||
193|900|[193] Atteso simbolo parametrica
|
||||
194|900|[194] Errore accesso registro in defcn
|
||||
195|900|[195] Superato numero massimo di variabili simboliche
|
||||
197|900|[197] Out of memory/Memory not awarded
|
||||
199|900|[199] Errore di inizializzazione
|
||||
200|900|[200] <DEBUG: TCO: Codice operativo sconosciuto>
|
||||
201|900|[201] <DEBUG: TCO: Errore di gestione risorse>
|
||||
202|900|[202] <DEBUG: TCO: Nessuna risorsa>
|
||||
203|900|[203] <DEBUG: TCO: Errore di chiusura>
|
||||
204|900|[204] <DEBUG: TCO: Pipe interrotta>
|
||||
205|900|[205] <DEBUG: TCO: Ripristinato da stallo/Fine file inattesa>
|
||||
206|900|[206] <DEBUG: TCO: Non specificato>
|
||||
207|900|[207] <DEBUG: TCO: <DEBUG 1>>
|
||||
208|900|[208] <DEBUG: TCO: (Per le spiegazioni vedere il Manuale)>
|
||||
209|900|[209] <DEBUG: TCO: Task eseguito correttamente>
|
||||
210|900|[210] XCL: Violazione Semantica Blocco APND
|
||||
211|900|[211] XAM: Violazione Semantica Blocco APND
|
||||
212|900|[212] <DEBUG: PMI: Codice operativo non valido>
|
||||
213|900|[213] <DEBUG: PMI: Paratetri vettore di I/O errati>
|
||||
214|900|[214] <DEBUG: PMI: Ricevuto segnale di terminazione>
|
||||
215|900|[215] <DEBUG: PMI: Errore di inizializzazione>
|
||||
216|900|[216] <DEBUG: PMI: Errore di chiusura>
|
||||
217|900|[217] <DEBUG: PMI: Non specificato>
|
||||
218|900|[218] <DEBUG: PMI: (Per le spiegazioni vedere il Manuale)>
|
||||
219|900|[219] <DEBUG: PMI: Task eseguito correttamente>
|
||||
220|900|[220] Dati Tagliente non trovati
|
||||
221|900|[221] Cinematica non supportata
|
||||
222|900|[222] Errato orientamento entità TWI
|
||||
223|900|[223] Orientamento utensile non definito
|
||||
224|900|[224] TCP non trovato
|
||||
225|900|[225] Trasformazione THD non supportata
|
||||
226|900|[226] Impossibile selezionare tagliente, IJK assenti
|
||||
227|900|[227] Violazione tagliente
|
||||
228|900|[228] XCL: Vedi manuale
|
||||
229|900|[229] Orientamento utensile impossibile
|
||||
230|900|[230] Driver assi polari non supportato
|
||||
231|900|[231] Beccheggio incoerente
|
||||
232|900|[232] Imbardata incoerente
|
||||
233|900|[233] Modalità ICDSID non supportata
|
||||
234|900|[234] Relazione ambigua tra tagliente e lavorazione
|
||||
235|900|[235] Richiesto blocco di movimento dopo G00
|
||||
236|900|[236] Troppi blocchi non di movimento
|
||||
237|900|[237] Sequenza assi di percorso non gestita
|
||||
238|900|[238] Errore interno XCL
|
||||
240|900|[240] Overflow buffer DLE
|
||||
241|900|[241] Deceleration Look-Ahead: Troppi blocchi non di movimento
|
||||
242|900|[242] Formato non riconosciuto da DLE
|
||||
243|900|[243] La Pipe interna di DLE é interrotta
|
||||
244|900|[244] Errore interno DLE
|
||||
245|900|[245] DLE: (Per le spiegazioni vedere il Manuale)
|
||||
250|900|[250] TCO: Violazione Semantica Blocco APND
|
||||
251|900|[251] PG2: Violazione Semantica Blocco APND
|
||||
256|900|[256] Orientamento utensile non definito con ICDSID
|
||||
257|900|[257] Vettore di superficie non definito con ICDSID
|
||||
258|900|[258] Beccheggio utensile incompatibile con la lavorazione
|
||||
259|900|[259] Imbardata utensile indeterminata con PADSID attivo
|
||||
260|900|[260] Modalità PADSID non supportata
|
||||
261|900|[261] Modalità PADCHK non supportata
|
||||
262|900|[262] Discontinuità superficie troppo elevata
|
||||
263|900|[263] Avanzamento nel materiale incompatibile con l'utensile
|
||||
265|900|[265] Codice TWI troppo elevato
|
||||
266|900|[266] Codice THD troppo elevato
|
||||
267|900|[267] Codice D troppo elevato
|
||||
270|900|[270] Richiesto idoneo orientamento utensile con xSCMOD
|
||||
271|900|[271] Richiesto idoneo vettore di superficie con xSCMOD
|
||||
272|900|[272] Orientamento utensile non definito con xSCMOD
|
||||
273|900|[273] Vettore di superficie non definito con xSCMOD
|
||||
274|900|[274] Soli blocchi G1 consentiti con xSCMOD
|
||||
275|900|[275] Lunghezza blocco in testa incompatibile con ESCMOD
|
||||
276|900|[276] Lunghezza unico blocco incompatibile con xSCMOD
|
||||
277|900|[277] Lunghezza blocco in coda incompatibile con XSCMOD
|
||||
282|900|[282] PAG: Implementation restriction
|
||||
283|900|[283] PAG: Not enough data
|
||||
284|900|[284] PAG: Ambiguous data
|
||||
285|900|[285] PAG: Undetermined solution
|
||||
286|900|[286] PAG: No solution found
|
||||
287|900|[287] PAG: Invalid feed command
|
||||
290|900|[290] <DEBUG: PMI: Estensione utente non inizializzata>
|
||||
292|900|[292] Speed Mandrino < Speed Min
|
||||
400|900|[400] Superato numero massimo strutture di controllo
|
||||
401|900|[401] IF () THEN non sono sullo stesso blocco
|
||||
402|900|[402] BREAK non inserito in struttura di controllo
|
||||
403|900|[403] ELSE senza IF/THEN
|
||||
404|900|[404] Due ELSE consecutivi
|
||||
405|900|[405] Disallineamento strutture di controllo
|
||||
406|900|[406] ENDW,ENDFOR,REPEAT non devono essere seguiti da codice
|
||||
407|900|[407] UNTIL senza REPEAT
|
||||
408|900|[408] FOR senza valore limite
|
||||
409|900|[409] RPT/BREAK: errore salto fuori dal ciclo
|
||||
412|900|[412] Errore accesso dati ricerca blocco in DEFCN
|
||||
413|900|[413] Procedura Overstore: blocchi di movimentazione non ammessi
|
||||
420|900|[420] Errore di condivisione file
|
||||
421|900|[421] Memoria insufficiente per aprire il file
|
||||
422|900|[422] Errore sconosciuto sul file
|
||||
424|900|[424] Vita utensile esaurita
|
||||
513|900|[513] <DEBUG: Errore accesso dati limiti assi>
|
||||
514|900|[514] <DEBUG: Errore interno>
|
||||
522|900|[522] Asse X Quota Fuori Limite
|
||||
523|900|[523] Asse Y Quota Fuori Limite
|
||||
524|900|[524] Asse Z Quota Fuori Limite
|
||||
525|900|[525] Asse U Quota Fuori Limite
|
||||
526|900|[526] Asse V Quota Fuori Limite
|
||||
527|900|[527] Asse W Quota Fuori Limite
|
||||
528|900|[528] Asse A Quota Fuori Limite
|
||||
529|900|[529] Asse B Quota Fuori Limite
|
||||
530|900|[530] Asse C Quota Fuori Limite
|
||||
549|900|[549] <DEBUG: Errore sulla pipe di uscita della grafica>
|
||||
550|900|[550] <DEBUG: Chiamata alle TMAPI non implementata>
|
||||
554|900|[554] <DEBUG: Connessione al server grafico gia' stabilita>
|
||||
555|900|[555] <DEBUG: Impossibile registrarsi presso il server grafico>
|
||||
556|900|[556] <DEBUG: Nessuna connessione stabilita col server grafico>
|
||||
557|900|[557] <DEBUG: Il server grafico ha interrotto le attivita'>
|
||||
560|900|[560] <DEBUG: L'evento di chiusura e' stato segnalato dal Kernel>
|
||||
564|900|[564] <DEBUG: Non c'e' abbastanza memoria per inizializzare TMAPI>
|
||||
565|900|[565] <DEBUG: Non e' stato possibile liberare tutte le risorse>
|
||||
566|900|[566] <DEBUG: Non specificato>
|
||||
569|900|[569] <DEBUG: Vedere il manuale>
|
||||
609|900|[609] <DEBUG: Configurazione di assi non gestita>
|
||||
610|900|[610] <DEBUG: La prestazione non e' implementata>
|
||||
612|900|[612] <DEBUG: GRAPH Multitool setup has bad freecells>
|
||||
613|900|[613] <DEBUG: GRAPH Multitool setup has NO freecells>
|
||||
625|900|[625] <DEBUG: Errore nella lettura della configurazione del server grafico>
|
||||
641|900|[641] <DEBUG: Fallita scrittura di dati packed>
|
||||
642|900|[642] <DEBUG: Errato tipo di destinazione per dato packed>
|
||||
643|900|[643] <DEBUG: Errato tipo di sorgente per dato packed>
|
||||
644|900|[644] <DEBUG: Impossibile arrotondare il valore del dato packed>
|
||||
649|900|[649] <DEBUG: Fallita scrittura di dati unpacked>
|
||||
650|900|[650] <DEBUG: Errato tipo di destinazione per dato unpacked>
|
||||
657|900|[657] <DEBUG: Semantica errata>
|
||||
658|900|[658] <DEBUG: Comando sconosciuto>
|
||||
659|900|[659] Codice SPC non riconosciuto
|
||||
673|900|[673] <DEBUG: Errore accesso dati CED, THD o TWI>
|
||||
674|900|[674] Memoria insufficiente per il tool caching
|
||||
682|900|[682] Cinematica non supportata
|
||||
692|900|[692] Codice TWI troppo elevato
|
||||
693|900|[693] Codice THD troppo elevato
|
||||
694|900|[694] Codice D troppo elevato
|
||||
695|900|[695] Driver assi polari non supportato
|
||||
714|900|[714] Cinematica non supportata
|
||||
715|900|[715] Errato orientamento entità TWI
|
||||
716|900|[716] Orientamento utensile non definito
|
||||
717|900|[717] TCP non trovato
|
||||
718|900|[718] Trasformazione THD non supportata
|
||||
719|900|[719] Impossibile selezionare tagliente, IJK assenti
|
||||
720|900|[720] Violazione tagliente
|
||||
724|900|[724] <DEBUG: Vedere il manuale>
|
||||
738|900|[738] <DEBUG: Errore pipe di ingresso esec. passante>
|
||||
743|900|[743] <DEBUG: Il server della esec. passante ha interrotto le attivita'>
|
||||
746|900|[746] <DEBUG: Troppi file non remoti aperti in esec. passante>
|
||||
749|900|[749] Salto ad etichetta impossibile in esecuzione passante
|
||||
750|900|[750] <DEBUG: Errore nella lettura della configurazione in esec. passante>
|
||||
751|900|[751] Linea troppo lunga in esecuzione passante
|
||||
1001|900|[1001] PLC IN BLOCCO
|
||||
1002|900|[1002] ERRORE CARICAMENTO PLC
|
||||
1003|900|[1003] PLC LENTO TIMEOUT
|
||||
1005|900|[1005] PLC VELOCE TIMEOUT
|
||||
1006|900|[1006] CN IN BLOCCO
|
||||
1007|900|[1007] CONFIGURAZIONE NULLA
|
||||
1008|900|[1008] DATI MACCHINA ERRATI
|
||||
1033|900|[1033] Errore I/O: CRC
|
||||
1034|900|[1034] Errore I/O: TIMEOUT
|
||||
1035|900|[1035] Errore I/O: NACK
|
||||
1036|900|[1036] Errore I/O: INVALID ID
|
||||
1039|900|[1039] Errore I/O: RX not READY
|
||||
1040|900|[1040] Errore I/O: ERRORE GENERICO
|
||||
1041|900|[1041] Errore I/O: ALIMENTAZIONE NODO KO
|
||||
1042|900|[1042] Errore I/O: USCITA IN PROTEZIONE
|
||||
1043|900|[1043] Errore I/O: MANCA 24 VOLT
|
||||
1044|900|[1044] Errore I/O: ADC BUSY
|
||||
1047|900|[1047] Errore I/O: SCHEDA NON PRESENTE
|
||||
1049|900|[1049] V+12 FUORI SOGLIA
|
||||
1050|900|[1050] V-12 FUORI SOGLIA
|
||||
1051|900|[1051] V ENCODER FUORI SOGLIA
|
||||
1052|900|[1052] V BATTERIA FUORI SOGLIA
|
||||
1056|900|[1056] TEMPERATURA FUORI SOGLIA
|
||||
1057|900|[1057] CN HARDWARE ERROR: BOARD OR NODE ERROR
|
||||
1058|900|[1058] X:F.C. Avanti
|
||||
1059|900|[1059] X:F.C. Indietro
|
||||
1060|900|[1060] X:F.C. Software
|
||||
1061|900|[1061] X:Allarme Asse: Richiesta esterna
|
||||
1062|900|[1062] X:Errore Taratura
|
||||
1063|900|[1063] X:Asse non definito
|
||||
1064|900|[1064] X:Asse non presente e fly
|
||||
1065|900|[1065] X:Errore Tolleranza
|
||||
1066|900|[1066] X:Errore d'inseguimento
|
||||
1067|900|[1067] X:Errore Offset
|
||||
1068|900|[1068] X:Richiesta Allarme I/O di controllo
|
||||
1069|900|[1069] X:Interfaccia DAC o Encoder mancante
|
||||
1070|900|[1070] X:Mancanza conteggio Encoder
|
||||
1071|900|[1071] X:Asse in collisione
|
||||
1072|900|[1072] X:Gamma non presente
|
||||
1073|900|[1073] X:Encoder non collegato
|
||||
1074|900|[1074] X:Asse non disponibile
|
||||
1075|900|[1075] X:Allarme Servodrive Digitale
|
||||
1076|900|[1076] X:Disallineamento assi Gantry
|
||||
1077|900|[1077] X:Allarme Protocollo CanOpen
|
||||
1078|900|[1078] X:Drive in Allarme
|
||||
1079|900|[1079] X:Errore Comando
|
||||
1080|900|[1080] X:Reserved
|
||||
1081|900|[1081] X:Reserved
|
||||
1082|900|[1082] X:Reserved
|
||||
1083|900|[1083] X:Reserved
|
||||
1084|900|[1084] X:Reserved
|
||||
1085|900|[1085] X:Azionamento digitale non pronto
|
||||
1086|900|[1086] X:Dati non validi
|
||||
1087|900|[1087] X:Pacchetto dati corrotto errore di BCC
|
||||
1088|900|[1088] X:Rumore sulla linea di comunicazione con l'azionamento
|
||||
1089|900|[1089] X:Timeout comunicazione con azionamento digitale
|
||||
1090|900|[1090] Y:F.C. Avanti
|
||||
1091|900|[1091] Y:F.C. Indietro
|
||||
1092|900|[1092] Y:F.C. Software
|
||||
1093|900|[1093] Y:Allarme Asse: Richiesta esterna
|
||||
1094|900|[1094] Y:Errore Taratura
|
||||
1095|900|[1095] Y:Asse non definito
|
||||
1096|900|[1096] Y:Asse non presente e fly
|
||||
1097|900|[1097] Y:Errore Tolleranza
|
||||
1098|900|[1098] Y:Errore d'inseguimento
|
||||
1099|900|[1099] Y:Errore Offset
|
||||
1100|900|[1100] Y:Richiesta Allarme I/O di controllo
|
||||
1101|900|[1101] Y:Interfaccia DAC o Encoder mancante
|
||||
1102|900|[1102] Y:Mancanza conteggio Encoder
|
||||
1103|900|[1103] Y:Asse in collisione
|
||||
1104|900|[1104] Y:Gamma non presente
|
||||
1105|900|[1105] Y:Encoder non collegato
|
||||
1106|900|[1106] Y:Asse non disponibile
|
||||
1107|900|[1107] Y:Allarme Servodrive Digitale
|
||||
1108|900|[1108] Y:Disallineamento assi Gantry
|
||||
1109|900|[1109] Y:Allarme Protocollo CanOpen
|
||||
1110|900|[1110] Y:Drive in Allarme
|
||||
1111|900|[1111] Y:Errore Comando
|
||||
1112|900|[1112] Y:Reserved
|
||||
1113|900|[1113] Y:Reserved
|
||||
1114|900|[1114] Y:Reserved
|
||||
1115|900|[1115] Y:Reserved
|
||||
1116|900|[1116] Y:Reserved
|
||||
1117|900|[1117] Y:Azionamento digitale non pronto
|
||||
1118|900|[1118] Y:Dati non validi
|
||||
1119|900|[1119] Y:Pacchetto dati corrotto errore di BCC
|
||||
1120|900|[1120] Y:Rumore sulla linea di comunicazione con l'azionamento
|
||||
1121|900|[1121] Y:Timeout comunicazione con azionamento digitale
|
||||
1122|900|[1122] Z:F.C. Avanti
|
||||
1123|900|[1123] Z:F.C. Indietro
|
||||
1124|900|[1124] Z:F.C. Software
|
||||
1125|900|[1125] Z:Allarme Asse: Richiesta esterna
|
||||
1126|900|[1126] Z:Errore Taratura
|
||||
1127|900|[1127] Z:Asse non definito
|
||||
1128|900|[1128] Z:Asse non presente e fly
|
||||
1129|900|[1129] Z:Errore Tolleranza
|
||||
1130|900|[1130] Z:Errore d'inseguimento
|
||||
1131|900|[1131] Z:Errore Offset
|
||||
1132|900|[1132] Z:Richiesta Allarme I/O di controllo
|
||||
1133|900|[1133] Z:Interfaccia DAC o Encoder mancante
|
||||
1134|900|[1134] Z:Mancanza conteggio Encoder
|
||||
1135|900|[1135] Z:Asse in collisione
|
||||
1136|900|[1136] Z:Gamma non presente
|
||||
1137|900|[1137] Z:Encoder non collegato
|
||||
1138|900|[1138] Z:Asse non disponibile
|
||||
1139|900|[1139] Z:Allarme Servodrive Digitale
|
||||
1140|900|[1140] Z:Disallineamento assi Gantry
|
||||
1141|900|[1141] Z:Allarme Protocollo CanOpen
|
||||
1142|900|[1142] Z:Drive in Allarme
|
||||
1143|900|[1143] Z:Errore Comando
|
||||
1144|900|[1144] Z:Reserved
|
||||
1145|900|[1145] Z:Reserved
|
||||
1146|900|[1146] Z:Reserved
|
||||
1147|900|[1147] Z:Reserved
|
||||
1148|900|[1148] Z:Reserved
|
||||
1149|900|[1149] Z:Azionamento digitale non pronto
|
||||
1150|900|[1150] Z:Dati non validi
|
||||
1151|900|[1151] Z:Pacchetto dati corrotto errore di BCC
|
||||
1152|900|[1152] Z:Rumore sulla linea di comunicazione con l'azionamento
|
||||
1153|900|[1153] Z:Timeout comunicazione con azionamento digitale
|
||||
1154|900|[1154] U:F.C. Avanti
|
||||
1155|900|[1155] U:F.C. Indietro
|
||||
1156|900|[1156] U:F.C. Software
|
||||
1157|900|[1157] U:Allarme Asse: Richiesta esterna
|
||||
1158|900|[1158] U:Errore Taratura
|
||||
1159|900|[1159] U:Asse non definito
|
||||
1160|900|[1160] U:Asse non presente e fly
|
||||
1161|900|[1161] U:Errore Tolleranza
|
||||
1162|900|[1162] U:Errore d'inseguimento
|
||||
1163|900|[1163] U:Errore Offset
|
||||
1164|900|[1164] U:Richiesta Allarme I/O di controllo
|
||||
1165|900|[1165] U:Interfaccia DAC o Encoder mancante
|
||||
1166|900|[1166] U:Mancanza conteggio Encoder
|
||||
1167|900|[1167] U:Asse in collisione
|
||||
1168|900|[1168] U:Gamma non presente
|
||||
1169|900|[1169] U:Encoder non collegato
|
||||
1170|900|[1170] U:Asse non disponibile
|
||||
1171|900|[1171] U:Allarme Servodrive Digitale
|
||||
1172|900|[1172] U:Disallineamento assi Gantry
|
||||
1173|900|[1173] U:Allarme Protocollo CanOpen
|
||||
1174|900|[1174] U:Drive in Allarme
|
||||
1175|900|[1175] U:Errore Comando
|
||||
1176|900|[1176] U:Reserved
|
||||
1177|900|[1177] U:Reserved
|
||||
1178|900|[1178] U:Reserved
|
||||
1179|900|[1179] U:Reserved
|
||||
1180|900|[1180] U:Reserved
|
||||
1181|900|[1181] U:Azionamento digitale non pronto
|
||||
1182|900|[1182] U:Dati non validi
|
||||
1183|900|[1183] U:Pacchetto dati corrotto errore di BCC
|
||||
1184|900|[1184] U:Rumore sulla linea di comunicazione con l'azionamento
|
||||
1185|900|[1185] U:Timeout comunicazione con azionamento digitale
|
||||
1186|900|[1186] V:F.C. Avanti
|
||||
1187|900|[1187] V:F.C. Indietro
|
||||
1188|900|[1188] V:F.C. Software
|
||||
1189|900|[1189] V:Allarme Asse: Richiesta esterna
|
||||
1190|900|[1190] V:Errore Taratura
|
||||
1191|900|[1191] V:Asse non definito
|
||||
1192|900|[1192] V:Asse non presente e fly
|
||||
1193|900|[1193] V:Errore Tolleranza
|
||||
1194|900|[1194] V:Errore d'inseguimento
|
||||
1195|900|[1195] V:Errore Offset
|
||||
1196|900|[1196] V:Richiesta Allarme I/O di controllo
|
||||
1197|900|[1197] V:Interfaccia DAC o Encoder mancante
|
||||
1198|900|[1198] V:Mancanza conteggio Encoder
|
||||
1199|900|[1199] V:Asse in collisione
|
||||
1200|900|[1200] V:Gamma non presente
|
||||
1201|900|[1201] V:Encoder non collegato
|
||||
1202|900|[1202] V:Asse non disponibile
|
||||
1203|900|[1203] V:Allarme Servodrive Digitale
|
||||
1204|900|[1204] V:Disallineamento assi Gantry
|
||||
1205|900|[1205] V:Allarme Protocollo CanOpen
|
||||
1206|900|[1206] V:Drive in Allarme
|
||||
1207|900|[1207] V:Errore Comando
|
||||
1208|900|[1208] V:Reserved
|
||||
1209|900|[1209] V:Reserved
|
||||
1210|900|[1210] V:Reserved
|
||||
1211|900|[1211] V:Reserved
|
||||
1212|900|[1212] V:Reserved
|
||||
1213|900|[1213] V:Azionamento digitale non pronto
|
||||
1214|900|[1214] V:Dati non validi
|
||||
1215|900|[1215] V:Pacchetto dati corrotto errore di BCC
|
||||
1216|900|[1216] V:Rumore sulla linea di comunicazione con l'azionamento
|
||||
1217|900|[1217] V:Timeout comunicazione con azionamento digitale
|
||||
1218|900|[1218] W:F.C. Avanti
|
||||
1219|900|[1219] W:F.C. Indietro
|
||||
1220|900|[1220] W:F.C. Software
|
||||
1221|900|[1221] W:Allarme Asse: Richiesta esterna
|
||||
1222|900|[1222] W:Errore Taratura
|
||||
1223|900|[1223] W:Asse non definito
|
||||
1224|900|[1224] W:Asse non presente e fly
|
||||
1225|900|[1225] W:Errore Tolleranza
|
||||
1226|900|[1226] W:Errore d'inseguimento
|
||||
1227|900|[1227] W:Errore Offset
|
||||
1228|900|[1228] W:Richiesta Allarme I/O di controllo
|
||||
1229|900|[1229] W:Interfaccia DAC o Encoder mancante
|
||||
1230|900|[1230] W:Mancanza conteggio Encoder
|
||||
1231|900|[1231] W:Asse in collisione
|
||||
1232|900|[1232] W:Gamma non presente
|
||||
1233|900|[1233] W:Encoder non collegato
|
||||
1234|900|[1234] W:Asse non disponibile
|
||||
1235|900|[1235] W:Allarme Servodrive Digitale
|
||||
1236|900|[1236] W:Disallineamento assi Gantry
|
||||
1237|900|[1237] W:Allarme Protocollo CanOpen
|
||||
1238|900|[1238] W:Drive in Allarme
|
||||
1239|900|[1239] W:Errore Comando
|
||||
1240|900|[1240] W:Reserved
|
||||
1241|900|[1241] W:Reserved
|
||||
1242|900|[1242] W:Reserved
|
||||
1243|900|[1243] W:Reserved
|
||||
1244|900|[1244] W:Reserved
|
||||
1245|900|[1245] W:Azionamento digitale non pronto
|
||||
1246|900|[1246] W:Dati non validi
|
||||
1247|900|[1247] W:Pacchetto dati corrotto errore di BCC
|
||||
1248|900|[1248] W:Rumore sulla linea di comunicazione con l'azionamento
|
||||
1249|900|[1249] W:Timeout comunicazione con azionamento digitale
|
||||
1250|900|[1250] A:F.C. Avanti
|
||||
1251|900|[1251] A:F.C. Indietro
|
||||
1252|900|[1252] A:F.C. Software
|
||||
1253|900|[1253] A:Allarme Asse: Richiesta esterna
|
||||
1254|900|[1254] A:Errore Taratura
|
||||
1255|900|[1255] A:Asse non definito
|
||||
1256|900|[1256] A:Asse non presente e fly
|
||||
1257|900|[1257] A:Errore Tolleranza
|
||||
1258|900|[1258] A:Errore d'inseguimento
|
||||
1259|900|[1259] A:Errore Offset
|
||||
1260|900|[1260] A:Richiesta Allarme I/O di controllo
|
||||
1261|900|[1261] A:Interfaccia DAC o Encoder mancante
|
||||
1262|900|[1262] A:Mancanza conteggio Encoder
|
||||
1263|900|[1263] A:Asse in collisione
|
||||
1264|900|[1264] A:Gamma non presente
|
||||
1265|900|[1265] A:Encoder non collegato
|
||||
1266|900|[1266] A:Asse non disponibile
|
||||
1267|900|[1267] A:Allarme Servodrive Digitale
|
||||
1268|900|[1268] A:Disallineamento assi Gantry
|
||||
1269|900|[1269] A:Allarme Protocollo CanOpen
|
||||
1270|900|[1270] A:Drive in Allarme
|
||||
1271|900|[1271] A:Errore Comando
|
||||
1272|900|[1272] A:Reserved
|
||||
1273|900|[1273] A:Reserved
|
||||
1274|900|[1274] A:Reserved
|
||||
1275|900|[1275] A:Reserved
|
||||
1276|900|[1276] A:Reserved
|
||||
1277|900|[1277] A:Azionamento digitale non pronto
|
||||
1278|900|[1278] A:Dati non validi
|
||||
1279|900|[1279] A:Pacchetto dati corrotto errore di BCC
|
||||
1280|900|[1280] A:Rumore sulla linea di comunicazione con l'azionamento
|
||||
1281|900|[1281] A:Timeout comunicazione con azionamento digitale
|
||||
1282|900|[1282] B:F.C. Avanti
|
||||
1283|900|[1283] B:F.C. Indietro
|
||||
1284|900|[1284] B:F.C. Software
|
||||
1285|900|[1285] B:Allarme Asse: Richiesta esterna
|
||||
1286|900|[1286] B:Errore Taratura
|
||||
1287|900|[1287] B:Asse non definito
|
||||
1288|900|[1288] B:Asse non presente e fly
|
||||
1289|900|[1289] B:Errore Tolleranza
|
||||
1290|900|[1290] B:Errore d'inseguimento
|
||||
1291|900|[1291] B:Errore Offset
|
||||
1292|900|[1292] B:Richiesta Allarme I/O di controllo
|
||||
1293|900|[1293] B:Interfaccia DAC o Encoder mancante
|
||||
1294|900|[1294] B:Mancanza conteggio Encoder
|
||||
1295|900|[1295] B:Asse in collisione
|
||||
1296|900|[1296] B:Gamma non presente
|
||||
1297|900|[1297] B:Encoder non collegato
|
||||
1298|900|[1298] B:Asse non disponibile
|
||||
1299|900|[1299] B:Allarme Servodrive Digitale
|
||||
1300|900|[1300] B:Disallineamento assi Gantry
|
||||
1301|900|[1301] B:Allarme Protocollo CanOpen
|
||||
1302|900|[1302] B:Drive in Allarme
|
||||
1303|900|[1303] B:Errore Comando
|
||||
1304|900|[1304] B:Reserved
|
||||
1305|900|[1305] B:Reserved
|
||||
1306|900|[1306] B:Reserved
|
||||
1307|900|[1307] B:Reserved
|
||||
1308|900|[1308] B:Reserved
|
||||
1309|900|[1309] B:Azionamento digitale non pronto
|
||||
1310|900|[1310] B:Dati non validi
|
||||
1311|900|[1311] B:Pacchetto dati corrotto errore di BCC
|
||||
1312|900|[1312] B:Rumore sulla linea di comunicazione con l'azionamento
|
||||
1313|900|[1313] B:Timeout comunicazione con azionamento digitale
|
||||
1314|900|[1314] C:F.C. Avanti
|
||||
1315|900|[1315] C:F.C. Indietro
|
||||
1316|900|[1316] C:F.C. Software
|
||||
1317|900|[1317] C:Allarme Asse: Richiesta esterna
|
||||
1318|900|[1318] C:Errore Taratura
|
||||
1319|900|[1319] C:Asse non definito
|
||||
1320|900|[1320] C:Asse non presente e fly
|
||||
1321|900|[1321] C:Errore Tolleranza
|
||||
1322|900|[1322] C:Errore d'inseguimento
|
||||
1323|900|[1323] C:Errore Offset
|
||||
1324|900|[1324] C:Richiesta Allarme I/O di controllo
|
||||
1325|900|[1325] C:Interfaccia DAC o Encoder mancante
|
||||
1326|900|[1326] C:Mancanza conteggio Encoder
|
||||
1327|900|[1327] C:Asse in collisione
|
||||
1328|900|[1328] C:Gamma non presente
|
||||
1329|900|[1329] C:Encoder non collegato
|
||||
1330|900|[1330] C:Asse non disponibile
|
||||
1331|900|[1331] C:Allarme Servodrive Digitale
|
||||
1332|900|[1332] C:Disallineamento Assi Gantry
|
||||
1333|900|[1333] C:Allarme Protocollo CanOpen
|
||||
1334|900|[1334] C:Drive Guasto
|
||||
1335|900|[1335] C:Errore Comando
|
||||
1336|900|[1336] C:Reserved
|
||||
1337|900|[1337] C:Reserved
|
||||
1338|900|[1338] C:Reserved
|
||||
1339|900|[1339] C:Reserved
|
||||
1340|900|[1340] C:Reserved
|
||||
1341|900|[1341] C:Azionamento digitale non pronto
|
||||
1342|900|[1342] C:Dati non validi
|
||||
1343|900|[1343] C:Pacchetto dati corrotto errore di BCC
|
||||
1344|900|[1344] C:Rumore sulla linea di comunicazione con l'azionamento
|
||||
1345|900|[1345] C:Timeout comunicazione con azionamento digitale
|
||||
@@ -0,0 +1,656 @@
|
||||
MODULE 2,CN%d: ,1345
|
||||
@0;"?"
|
||||
@1;"Atteso carattere ["
|
||||
@2;"Numero Registro Errato"
|
||||
@3;"Funzione non valida"
|
||||
@4;"Parametrica: carattere non valido"
|
||||
@5;"IF: Atteso carattere ="
|
||||
@6;"JSR: Livello Annidamento Subroutine Errato"
|
||||
@7;"RET: Annidamento Subroutine Errato"
|
||||
@8;"Funzione non disponibile"
|
||||
@9;"Troppe funzioni M consecutive"
|
||||
@10;"Raggio senza G2/G3"
|
||||
@11;"Raggio Inconsistente"
|
||||
@12;"Errore inizializzazione canale"
|
||||
@13;"Canale in stallo (deadlock)"
|
||||
@14;"Ciclo Fisso non esistente"
|
||||
@15;"Troppi livelli di parentesi ("
|
||||
@16;"Assegnamento: atteso carattere ="
|
||||
@17;"Atteso carattere CR"
|
||||
@18;"Modo operativo cambiato"
|
||||
@19;"JMP: Numero Blocco non trovato"
|
||||
@20;"Programma non trovato"
|
||||
@21;"Errore da procedura esterna"
|
||||
@22;"Quota Fuori Limite"
|
||||
@23;"Asse non configurato"
|
||||
@24;"Mandrino non configurato"
|
||||
@25;"Piano Selezionato Errato"
|
||||
@26;"Asse non Disponibile"
|
||||
@27;"Passo Maschiatura Nullo"
|
||||
@28;"Asse in Allarme"
|
||||
@29;"Feed Nulla"
|
||||
@30;"Raggio Utensile Nullo"
|
||||
@31;"Simbolo % non trovato"
|
||||
@32;"Cambio Piano o Lato con CUT Attiva"
|
||||
@33;"Mandrino senza Encoder"
|
||||
@34;"Indirizzo senza numero"
|
||||
@35;"SQRT: Argomento negativo"
|
||||
@36;"TAN: Valore Infinito"
|
||||
@37;"ASIN, ACOS: Argomento fuori range"
|
||||
@38;"Divisione per zero"
|
||||
@39;"Indirizzo non usato"
|
||||
@40;"Numero senza indirizzo"
|
||||
@41;"Parametro su indirizzo G"
|
||||
@42;"Programma senza M2-M30"
|
||||
@43;"Interpolazione con assi incompatibili"
|
||||
@44;"Velocità mandrino troppo elevata"
|
||||
@45;"Vel Asse Z > Vel Max Canale"
|
||||
@46;"Correzione Tornio G18"
|
||||
@47;"Tipo Geometria Utensile non gestita"
|
||||
@48;"Coda Trasmissione Esaurita"
|
||||
@49;"Coda Pacchetti Liberi Esaurita"
|
||||
@50;"Raggio profilo minore Raggio Utensile"
|
||||
@51;"Punto Finale Arco inconsistente"
|
||||
@52;"Il Percorso non puo' essere seguito"
|
||||
@53;"Segmento nullo"
|
||||
@54;"Angolo nullo"
|
||||
@55;"Operazione Illegale"
|
||||
@56;"Intersezione tra segmenti o archi"
|
||||
@57;"Attacco Profilo non permesso: usare G0"
|
||||
@58;"Sovrataglio su Segmento Lineare"
|
||||
@59;"Sovrataglio su Arco di Circonferenza"
|
||||
@60;"Atteso carattere ]"
|
||||
@61;"Valore troppo elevato"
|
||||
@62;"Errore accesso file"
|
||||
@63;"Descrittore Utensile Errato"
|
||||
@64;"Troppi parametri"
|
||||
@65;"Troppi caratteri nei campi stringa"
|
||||
@66;"Atteso oggetto dopo ^"
|
||||
@67;"Assegnazione a registro inesistente"
|
||||
@68;"Argomento inesistente"
|
||||
@69;"Codice SPC non riconosciuto"
|
||||
@70;"Violazione semantica blocco APND"
|
||||
@71;"Per spiegazioni vedere il Manuale"
|
||||
@72;"CFC: Subroutine non trovata"
|
||||
@73;"CFC: Parametri errati"
|
||||
@74;"CFC: Errore di gestione risorse"
|
||||
@75;"CFC: Nessuna risorsa"
|
||||
@76;"CFC: Errore di chiusura"
|
||||
@77;"CFC: Non specificato"
|
||||
@78;"CFC: <DEBUG 1>"
|
||||
@79;"CFC: (Per spiegazioni vedere il Manuale)"
|
||||
@80;"CFC: Task eseguito correttamente"
|
||||
@81;"CVB: Codice operativo sconosciuto"
|
||||
@82;"CVB: Errore di gestione risorse"
|
||||
@83;"CVB: Nessuna risorsa"
|
||||
@84;"CVB: Errore di chiusura"
|
||||
@85;"CVB: Pipe interrotta"
|
||||
@86;"CVB: Ripristinato da stallo/Fine file inattesa"
|
||||
@87;"CVB: Non specificato"
|
||||
@88;"CVB: <DEBUG 1>"
|
||||
@89;"CVB: (Per le spiegazioni vedere il Manuale)"
|
||||
@90;"CVB: Task eseguito correttamente"
|
||||
@93;"APIO: Nessuna risorsa"
|
||||
@94;"APIO: Errore di chiusura"
|
||||
@95;"APIO: Non specificato"
|
||||
@96;"APIO: <DEBUG 1>"
|
||||
@97;"APIO: (Per spiegazioni vedere il Manuale)"
|
||||
@98;"APIO: Task eseguito correttamente"
|
||||
@99;"XCL: Codice operativo sconosciuto"
|
||||
@100;"XCL: Errore di gestione risorse"
|
||||
@101;"XCL: Nessuna risorsa"
|
||||
@102;"XCL: Errore di chiusura"
|
||||
@103;"XCL: Pipe interrotta"
|
||||
@104;"XCL: Ripristinato da stallo/Fine file inattesa"
|
||||
@105;"XCL: Non specificato"
|
||||
@106;"XCL: <DEBUG 1>"
|
||||
@107;"XCL: (Per le spiegazioni vedere il Manuale)"
|
||||
@108;"XCL: Compito eseguito correttamente"
|
||||
@109;"XAM: Codice operativo sconosciuto"
|
||||
@110;"XAM: Errore di gestione risorse"
|
||||
@111;"XAM: Nessuna risorsa"
|
||||
@112;"XAM: Errore di chiusura"
|
||||
@113;"XAM: Pipe interrotta"
|
||||
@114;"XAM: Ripristinato da stallo/Fine file inattesa"
|
||||
@115;"XAM: Non specificato"
|
||||
@116;"XAM: <DEBUG 1>"
|
||||
@117;"XAM: (Per le spiegazioni vedere il Manuale)"
|
||||
@118;"XAM: Task eseguito correttamente"
|
||||
@119;"RETR: Codice operativo sconosciuto"
|
||||
@120;"RETR: Errore di gestione risorse"
|
||||
@121;"RETR: Nessuna risorsa"
|
||||
@122;"RETR: Errore di chiusura"
|
||||
@123;"RETR: Pipe interrotta"
|
||||
@124;"RETR: Ripristinato da stallo/Fine file inattesa"
|
||||
@125;"RETR: Non specificato"
|
||||
@126;"RETR: <DEBUG 1>"
|
||||
@127;"RETR: (Per le spiegazioni vedere il Manuale)"
|
||||
@128;"RETR: Task eseguito correttamente"
|
||||
@129;"PG2: Codice operativo sconosciuto"
|
||||
@130;"PG2: Errore di gestione risorse"
|
||||
@131;"PG2: Nessuna risorsa"
|
||||
@132;"PG2: Errore di chiusura"
|
||||
@133;"PG2: Pipe interrotta"
|
||||
@134;"PG2: Ripristinato da stallo/Fine file inattesa"
|
||||
@135;"PG2: Non specificato"
|
||||
@136;"PG2: <DEBUG 1>"
|
||||
@137;"PG2: (Per le spiegazioni vedere il Manuale)"
|
||||
@138;"PG2: Task eseguito correttamente"
|
||||
@139;"WARP: Codice operativo sconosciuto"
|
||||
@140;"WARP: Errore di gestione risorse"
|
||||
@141;"WARP: Nessuna risorsa"
|
||||
@142;"WARP: Errore di chiusura"
|
||||
@143;"WARP: Pipe interrotta"
|
||||
@144;"WARP: Ripristinato da stallo/Fine file inattesa"
|
||||
@145;"WARP: Non specificato"
|
||||
@146;"WARP: <DEBUG 1>"
|
||||
@147;"WARP: (Per le spiegazioni vedere il Manuale)"
|
||||
@148;"WARP: Task eseguito correttamente"
|
||||
@149;"PAG: Codice operativo sconosciuto"
|
||||
@150;"PAG: Errore di gestione risorse"
|
||||
@151;"PAG: Nessuna risorsa"
|
||||
@152;"PAG: Errore di chiusura"
|
||||
@153;"PAG: Pipe interrotta"
|
||||
@154;"PAG: Ripristinato da stallo/Fine file inattesa"
|
||||
@155;"PAG: Non specificato"
|
||||
@156;"PAG: <DEBUG 1>"
|
||||
@157;"PAG: (Per le spiegazioni vedere il Manuale)"
|
||||
@158;"PAG: Task eseguito correttamente"
|
||||
@159;"Codice di errore sconosciuto"
|
||||
@160;"Asse X Quota Fuori Limite"
|
||||
@161;"Asse Y Quota Fuori Limite"
|
||||
@162;"Asse Z Quota Fuori Limite"
|
||||
@163;"Asse U Quota Fuori Limite"
|
||||
@164;"Asse V Quota Fuori Limite"
|
||||
@165;"Asse W Quota Fuori Limite"
|
||||
@166;"Asse A Quota Fuori Limite"
|
||||
@167;"Asse B Quota Fuori Limite"
|
||||
@168;"Asse C Quota Fuori Limite"
|
||||
@170;"Errore definizione variabile record [simbolo]"
|
||||
@171;"Errore assegnazione variabile record [simbolo]"
|
||||
@172;"Errore definizione variabile record [var defcn]"
|
||||
@173;"Errore assegnazione variabile record [var defcn]"
|
||||
@174;"Errore definizione variabile record [INPUT]"
|
||||
@175;"Impossibile assegnare registro di input"
|
||||
@176;"Errore definizione variabile record [OUT]"
|
||||
@177;"Errore assegnazione variabile record [OUT]"
|
||||
@178;"Errore definizione variabile record [registro logico]"
|
||||
@179;"Errore definizione variabile record [variabile automatica]"
|
||||
@180;"Atteso valore da assegnare a variabile record"
|
||||
@181;"Array oltre il massimo consentito"
|
||||
@182;"Simbolo giá definito"
|
||||
@183;"Impossibile inizializzare gli Array"
|
||||
@184;"Errore inizializzazione variabile"
|
||||
@185;"Errore sintattico definizione parametrica"
|
||||
@186;"Tipo di dato incompatibile"
|
||||
@187;"Impossibile definire altri simboli"
|
||||
@188;"Simbolo non definito"
|
||||
@189;"Errore assegnamento stringa"
|
||||
@190;"Errore assegnamento numerico"
|
||||
@191;"Simbolo inesistente"
|
||||
@192;"Errore definizione variabile record [registro logico]"
|
||||
@193;"Atteso simbolo parametrica"
|
||||
@194;"Errore accesso registro in defcn"
|
||||
@195;"Superato numero massimo di variabili simboliche"
|
||||
@197;"Out of memory/Memory not awarded"
|
||||
@199;"Errore di inizializzazione"
|
||||
@200;"<DEBUG: TCO: Codice operativo sconosciuto>"
|
||||
@201;"<DEBUG: TCO: Errore di gestione risorse>"
|
||||
@202;"<DEBUG: TCO: Nessuna risorsa>"
|
||||
@203;"<DEBUG: TCO: Errore di chiusura>"
|
||||
@204;"<DEBUG: TCO: Pipe interrotta>"
|
||||
@205;"<DEBUG: TCO: Ripristinato da stallo/Fine file inattesa>"
|
||||
@206;"<DEBUG: TCO: Non specificato>"
|
||||
@207;"<DEBUG: TCO: <DEBUG 1>>"
|
||||
@208;"<DEBUG: TCO: (Per le spiegazioni vedere il Manuale)>"
|
||||
@209;"<DEBUG: TCO: Task eseguito correttamente>"
|
||||
@210;"XCL: Violazione Semantica Blocco APND"
|
||||
@211;"XAM: Violazione Semantica Blocco APND"
|
||||
@212;"<DEBUG: PMI: Codice operativo non valido>"
|
||||
@213;"<DEBUG: PMI: Paratetri vettore di I/O errati>"
|
||||
@214;"<DEBUG: PMI: Ricevuto segnale di terminazione>"
|
||||
@215;"<DEBUG: PMI: Errore di inizializzazione>"
|
||||
@216;"<DEBUG: PMI: Errore di chiusura>"
|
||||
@217;"<DEBUG: PMI: Non specificato>"
|
||||
@218;"<DEBUG: PMI: (Per le spiegazioni vedere il Manuale)>"
|
||||
@219;"<DEBUG: PMI: Task eseguito correttamente>"
|
||||
@220;"Dati Tagliente non trovati"
|
||||
@221;"Cinematica non supportata"
|
||||
@222;"Errato orientamento entità TWI"
|
||||
@223;"Orientamento utensile non definito"
|
||||
@224;"TCP non trovato"
|
||||
@225;"Trasformazione THD non supportata"
|
||||
@226;"Impossibile selezionare tagliente, IJK assenti"
|
||||
@227;"Violazione tagliente"
|
||||
@228;"XCL: Vedi manuale"
|
||||
@229;"Orientamento utensile impossibile"
|
||||
@230;"Driver assi polari non supportato"
|
||||
@231;"Beccheggio incoerente"
|
||||
@232;"Imbardata incoerente"
|
||||
@233;"Modalità ICDSID non supportata"
|
||||
@234;"Relazione ambigua tra tagliente e lavorazione"
|
||||
@235;"Richiesto blocco di movimento dopo G00"
|
||||
@236;"Troppi blocchi non di movimento"
|
||||
@237;"Sequenza assi di percorso non gestita"
|
||||
@238;"Errore interno XCL"
|
||||
@240;"Overflow buffer DLE"
|
||||
@241;"Deceleration Look-Ahead: Troppi blocchi non di movimento"
|
||||
@242;"Formato non riconosciuto da DLE"
|
||||
@243;"La Pipe interna di DLE é interrotta"
|
||||
@244;"Errore interno DLE"
|
||||
@245;"DLE: (Per le spiegazioni vedere il Manuale)"
|
||||
@250;"TCO: Violazione Semantica Blocco APND"
|
||||
@251;"PG2: Violazione Semantica Blocco APND"
|
||||
@256;"Orientamento utensile non definito con ICDSID"
|
||||
@257;"Vettore di superficie non definito con ICDSID"
|
||||
@258;"Beccheggio utensile incompatibile con la lavorazione"
|
||||
@259;"Imbardata utensile indeterminata con PADSID attivo"
|
||||
@260;"Modalità PADSID non supportata"
|
||||
@261;"Modalità PADCHK non supportata"
|
||||
@262;"Discontinuità superficie troppo elevata"
|
||||
@263;"Avanzamento nel materiale incompatibile con l'utensile"
|
||||
@265;"Codice TWI troppo elevato"
|
||||
@266;"Codice THD troppo elevato"
|
||||
@267;"Codice D troppo elevato"
|
||||
@270;"Richiesto idoneo orientamento utensile con xSCMOD"
|
||||
@271;"Richiesto idoneo vettore di superficie con xSCMOD"
|
||||
@272;"Orientamento utensile non definito con xSCMOD"
|
||||
@273;"Vettore di superficie non definito con xSCMOD"
|
||||
@274;"Soli blocchi G1 consentiti con xSCMOD"
|
||||
@275;"Lunghezza blocco in testa incompatibile con ESCMOD"
|
||||
@276;"Lunghezza unico blocco incompatibile con xSCMOD"
|
||||
@277;"Lunghezza blocco in coda incompatibile con XSCMOD"
|
||||
@282;"PAG: Implementation restriction"
|
||||
@283;"PAG: Not enough data"
|
||||
@284;"PAG: Ambiguous data"
|
||||
@285;"PAG: Undetermined solution"
|
||||
@286;"PAG: No solution found"
|
||||
@287;"PAG: Invalid feed command"
|
||||
@290;"<DEBUG: PMI: Estensione utente non inizializzata>"
|
||||
@292;"Speed Mandrino < Speed Min"
|
||||
@400;"Superato numero massimo strutture di controllo"
|
||||
@401;"IF () THEN non sono sullo stesso blocco"
|
||||
@402;"BREAK non inserito in struttura di controllo"
|
||||
@403;"ELSE senza IF/THEN"
|
||||
@404;"Due ELSE consecutivi"
|
||||
@405;"Disallineamento strutture di controllo"
|
||||
@406;"ENDW,ENDFOR,REPEAT non devono essere seguiti da codice"
|
||||
@407;"UNTIL senza REPEAT"
|
||||
@408;"FOR senza valore limite"
|
||||
@409;"RPT/BREAK: errore salto fuori dal ciclo"
|
||||
@412;"Errore accesso dati ricerca blocco in DEFCN"
|
||||
@413;"Procedura Overstore: blocchi di movimentazione non ammessi"
|
||||
@420;"Errore di condivisione file"
|
||||
@421;"Memoria insufficiente per aprire il file"
|
||||
@422;"Errore sconosciuto sul file"
|
||||
@424;"Vita utensile esaurita"
|
||||
@513;"<DEBUG: Errore accesso dati limiti assi>"
|
||||
@514;"<DEBUG: Errore interno>"
|
||||
@522;"Asse X Quota Fuori Limite"
|
||||
@523;"Asse Y Quota Fuori Limite"
|
||||
@524;"Asse Z Quota Fuori Limite"
|
||||
@525;"Asse U Quota Fuori Limite"
|
||||
@526;"Asse V Quota Fuori Limite"
|
||||
@527;"Asse W Quota Fuori Limite"
|
||||
@528;"Asse A Quota Fuori Limite"
|
||||
@529;"Asse B Quota Fuori Limite"
|
||||
@530;"Asse C Quota Fuori Limite"
|
||||
@549;"<DEBUG: Errore sulla pipe di uscita della grafica>"
|
||||
@550;"<DEBUG: Chiamata alle TMAPI non implementata>"
|
||||
@554;"<DEBUG: Connessione al server grafico gia' stabilita>"
|
||||
@555;"<DEBUG: Impossibile registrarsi presso il server grafico>"
|
||||
@556;"<DEBUG: Nessuna connessione stabilita col server grafico>"
|
||||
@557;"<DEBUG: Il server grafico ha interrotto le attivita'>"
|
||||
@560;"<DEBUG: L'evento di chiusura e' stato segnalato dal Kernel>"
|
||||
@564;"<DEBUG: Non c'e' abbastanza memoria per inizializzare TMAPI>"
|
||||
@565;"<DEBUG: Non e' stato possibile liberare tutte le risorse>"
|
||||
@566;"<DEBUG: Non specificato>"
|
||||
@569;"<DEBUG: Vedere il manuale>"
|
||||
@609;"<DEBUG: Configurazione di assi non gestita>"
|
||||
@610;"<DEBUG: La prestazione non e' implementata>"
|
||||
@612;"<DEBUG: GRAPH Multitool setup has bad freecells>"
|
||||
@613;"<DEBUG: GRAPH Multitool setup has NO freecells>"
|
||||
@625;"<DEBUG: Errore nella lettura della configurazione del server grafico>"
|
||||
@641;"<DEBUG: Fallita scrittura di dati packed>"
|
||||
@642;"<DEBUG: Errato tipo di destinazione per dato packed>"
|
||||
@643;"<DEBUG: Errato tipo di sorgente per dato packed>"
|
||||
@644;"<DEBUG: Impossibile arrotondare il valore del dato packed>"
|
||||
@649;"<DEBUG: Fallita scrittura di dati unpacked>"
|
||||
@650;"<DEBUG: Errato tipo di destinazione per dato unpacked>"
|
||||
@657;"<DEBUG: Semantica errata>"
|
||||
@658;"<DEBUG: Comando sconosciuto>"
|
||||
@659;"Codice SPC non riconosciuto"
|
||||
@673;"<DEBUG: Errore accesso dati CED, THD o TWI>"
|
||||
@674;"Memoria insufficiente per il tool caching"
|
||||
@682;"Cinematica non supportata"
|
||||
@692;"Codice TWI troppo elevato"
|
||||
@693;"Codice THD troppo elevato"
|
||||
@694;"Codice D troppo elevato"
|
||||
@695;"Driver assi polari non supportato"
|
||||
@714;"Cinematica non supportata"
|
||||
@715;"Errato orientamento entità TWI"
|
||||
@716;"Orientamento utensile non definito"
|
||||
@717;"TCP non trovato"
|
||||
@718;"Trasformazione THD non supportata"
|
||||
@719;"Impossibile selezionare tagliente, IJK assenti"
|
||||
@720;"Violazione tagliente"
|
||||
@724;"<DEBUG: Vedere il manuale>"
|
||||
@738;"<DEBUG: Errore pipe di ingresso esec. passante>"
|
||||
@743;"<DEBUG: Il server della esec. passante ha interrotto le attivita'>"
|
||||
@746;"<DEBUG: Troppi file non remoti aperti in esec. passante>"
|
||||
@749;"Salto ad etichetta impossibile in esecuzione passante"
|
||||
@750;"<DEBUG: Errore nella lettura della configurazione in esec. passante>"
|
||||
@751;"Linea troppo lunga in esecuzione passante"
|
||||
@1001;"PLC IN BLOCCO"
|
||||
@1002;"ERRORE CARICAMENTO PLC"
|
||||
@1003;"PLC LENTO TIMEOUT"
|
||||
@1005;"PLC VELOCE TIMEOUT"
|
||||
@1006;"CN IN BLOCCO"
|
||||
@1007;"CONFIGURAZIONE NULLA"
|
||||
@1008;"DATI MACCHINA ERRATI"
|
||||
@1033;"Errore I/O: CRC"
|
||||
@1034;"Errore I/O: TIMEOUT"
|
||||
@1035;"Errore I/O: NACK"
|
||||
@1036;"Errore I/O: INVALID ID"
|
||||
@1039;"Errore I/O: RX not READY"
|
||||
@1040;"Errore I/O: ERRORE GENERICO"
|
||||
@1041;"Errore I/O: ALIMENTAZIONE NODO KO"
|
||||
@1042;"Errore I/O: USCITA IN PROTEZIONE"
|
||||
@1043;"Errore I/O: MANCA 24 VOLT"
|
||||
@1044;"Errore I/O: ADC BUSY"
|
||||
@1047;"Errore I/O: SCHEDA NON PRESENTE"
|
||||
@1049;"V+12 FUORI SOGLIA"
|
||||
@1050;"V-12 FUORI SOGLIA"
|
||||
@1051;"V ENCODER FUORI SOGLIA"
|
||||
@1052;"V BATTERIA FUORI SOGLIA"
|
||||
@1056;"TEMPERATURA FUORI SOGLIA"
|
||||
@1057;"CN HARDWARE ERROR: BOARD OR NODE ERROR"
|
||||
@1058;"X:F.C. Avanti"
|
||||
@1059;"X:F.C. Indietro"
|
||||
@1060;"X:F.C. Software"
|
||||
@1061;"X:Allarme Asse: Richiesta esterna"
|
||||
@1062;"X:Errore Taratura"
|
||||
@1063;"X:Asse non definito"
|
||||
@1064;"X:Asse non presente e fly"
|
||||
@1065;"X:Errore Tolleranza"
|
||||
@1066;"X:Errore d'inseguimento"
|
||||
@1067;"X:Errore Offset"
|
||||
@1068;"X:Richiesta Allarme I/O di controllo"
|
||||
@1069;"X:Interfaccia DAC o Encoder mancante"
|
||||
@1070;"X:Mancanza conteggio Encoder"
|
||||
@1071;"X:Asse in collisione"
|
||||
@1072;"X:Gamma non presente"
|
||||
@1073;"X:Encoder non collegato"
|
||||
@1074;"X:Asse non disponibile"
|
||||
@1075;"X:Allarme Servodrive Digitale"
|
||||
@1076;"X:Disallineamento assi Gantry"
|
||||
@1077;"X:Allarme Protocollo CanOpen"
|
||||
@1078;"X:Drive in Allarme"
|
||||
@1079;"X:Errore Comando"
|
||||
@1080;"X:Reserved"
|
||||
@1081;"X:Reserved"
|
||||
@1082;"X:Reserved"
|
||||
@1083;"X:Reserved"
|
||||
@1084;"X:Reserved"
|
||||
@1085;"X:Azionamento digitale non pronto"
|
||||
@1086;"X:Dati non validi"
|
||||
@1087;"X:Pacchetto dati corrotto errore di BCC"
|
||||
@1088;"X:Rumore sulla linea di comunicazione con l'azionamento"
|
||||
@1089;"X:Timeout comunicazione con azionamento digitale"
|
||||
@1090;"Y:F.C. Avanti"
|
||||
@1091;"Y:F.C. Indietro"
|
||||
@1092;"Y:F.C. Software"
|
||||
@1093;"Y:Allarme Asse: Richiesta esterna"
|
||||
@1094;"Y:Errore Taratura"
|
||||
@1095;"Y:Asse non definito"
|
||||
@1096;"Y:Asse non presente e fly"
|
||||
@1097;"Y:Errore Tolleranza"
|
||||
@1098;"Y:Errore d'inseguimento"
|
||||
@1099;"Y:Errore Offset"
|
||||
@1100;"Y:Richiesta Allarme I/O di controllo"
|
||||
@1101;"Y:Interfaccia DAC o Encoder mancante"
|
||||
@1102;"Y:Mancanza conteggio Encoder"
|
||||
@1103;"Y:Asse in collisione"
|
||||
@1104;"Y:Gamma non presente"
|
||||
@1105;"Y:Encoder non collegato"
|
||||
@1106;"Y:Asse non disponibile"
|
||||
@1107;"Y:Allarme Servodrive Digitale"
|
||||
@1108;"Y:Disallineamento assi Gantry"
|
||||
@1109;"Y:Allarme Protocollo CanOpen"
|
||||
@1110;"Y:Drive in Allarme"
|
||||
@1111;"Y:Errore Comando"
|
||||
@1112;"Y:Reserved"
|
||||
@1113;"Y:Reserved"
|
||||
@1114;"Y:Reserved"
|
||||
@1115;"Y:Reserved"
|
||||
@1116;"Y:Reserved"
|
||||
@1117;"Y:Azionamento digitale non pronto"
|
||||
@1118;"Y:Dati non validi"
|
||||
@1119;"Y:Pacchetto dati corrotto errore di BCC"
|
||||
@1120;"Y:Rumore sulla linea di comunicazione con l'azionamento"
|
||||
@1121;"Y:Timeout comunicazione con azionamento digitale"
|
||||
@1122;"Z:F.C. Avanti"
|
||||
@1123;"Z:F.C. Indietro"
|
||||
@1124;"Z:F.C. Software"
|
||||
@1125;"Z:Allarme Asse: Richiesta esterna"
|
||||
@1126;"Z:Errore Taratura"
|
||||
@1127;"Z:Asse non definito"
|
||||
@1128;"Z:Asse non presente e fly"
|
||||
@1129;"Z:Errore Tolleranza"
|
||||
@1130;"Z:Errore d'inseguimento"
|
||||
@1131;"Z:Errore Offset"
|
||||
@1132;"Z:Richiesta Allarme I/O di controllo"
|
||||
@1133;"Z:Interfaccia DAC o Encoder mancante"
|
||||
@1134;"Z:Mancanza conteggio Encoder"
|
||||
@1135;"Z:Asse in collisione"
|
||||
@1136;"Z:Gamma non presente"
|
||||
@1137;"Z:Encoder non collegato"
|
||||
@1138;"Z:Asse non disponibile"
|
||||
@1139;"Z:Allarme Servodrive Digitale"
|
||||
@1140;"Z:Disallineamento assi Gantry"
|
||||
@1141;"Z:Allarme Protocollo CanOpen"
|
||||
@1142;"Z:Drive in Allarme"
|
||||
@1143;"Z:Errore Comando"
|
||||
@1144;"Z:Reserved"
|
||||
@1145;"Z:Reserved"
|
||||
@1146;"Z:Reserved"
|
||||
@1147;"Z:Reserved"
|
||||
@1148;"Z:Reserved"
|
||||
@1149;"Z:Azionamento digitale non pronto"
|
||||
@1150;"Z:Dati non validi"
|
||||
@1151;"Z:Pacchetto dati corrotto errore di BCC"
|
||||
@1152;"Z:Rumore sulla linea di comunicazione con l'azionamento"
|
||||
@1153;"Z:Timeout comunicazione con azionamento digitale"
|
||||
@1154;"U:F.C. Avanti"
|
||||
@1155;"U:F.C. Indietro"
|
||||
@1156;"U:F.C. Software"
|
||||
@1157;"U:Allarme Asse: Richiesta esterna"
|
||||
@1158;"U:Errore Taratura"
|
||||
@1159;"U:Asse non definito"
|
||||
@1160;"U:Asse non presente e fly"
|
||||
@1161;"U:Errore Tolleranza"
|
||||
@1162;"U:Errore d'inseguimento"
|
||||
@1163;"U:Errore Offset"
|
||||
@1164;"U:Richiesta Allarme I/O di controllo"
|
||||
@1165;"U:Interfaccia DAC o Encoder mancante"
|
||||
@1166;"U:Mancanza conteggio Encoder"
|
||||
@1167;"U:Asse in collisione"
|
||||
@1168;"U:Gamma non presente"
|
||||
@1169;"U:Encoder non collegato"
|
||||
@1170;"U:Asse non disponibile"
|
||||
@1171;"U:Allarme Servodrive Digitale"
|
||||
@1172;"U:Disallineamento assi Gantry"
|
||||
@1173;"U:Allarme Protocollo CanOpen"
|
||||
@1174;"U:Drive in Allarme"
|
||||
@1175;"U:Errore Comando"
|
||||
@1176;"U:Reserved"
|
||||
@1177;"U:Reserved"
|
||||
@1178;"U:Reserved"
|
||||
@1179;"U:Reserved"
|
||||
@1180;"U:Reserved"
|
||||
@1181;"U:Azionamento digitale non pronto"
|
||||
@1182;"U:Dati non validi"
|
||||
@1183;"U:Pacchetto dati corrotto errore di BCC"
|
||||
@1184;"U:Rumore sulla linea di comunicazione con l'azionamento"
|
||||
@1185;"U:Timeout comunicazione con azionamento digitale"
|
||||
@1186;"V:F.C. Avanti"
|
||||
@1187;"V:F.C. Indietro"
|
||||
@1188;"V:F.C. Software"
|
||||
@1189;"V:Allarme Asse: Richiesta esterna"
|
||||
@1190;"V:Errore Taratura"
|
||||
@1191;"V:Asse non definito"
|
||||
@1192;"V:Asse non presente e fly"
|
||||
@1193;"V:Errore Tolleranza"
|
||||
@1194;"V:Errore d'inseguimento"
|
||||
@1195;"V:Errore Offset"
|
||||
@1196;"V:Richiesta Allarme I/O di controllo"
|
||||
@1197;"V:Interfaccia DAC o Encoder mancante"
|
||||
@1198;"V:Mancanza conteggio Encoder"
|
||||
@1199;"V:Asse in collisione"
|
||||
@1200;"V:Gamma non presente"
|
||||
@1201;"V:Encoder non collegato"
|
||||
@1202;"V:Asse non disponibile"
|
||||
@1203;"V:Allarme Servodrive Digitale"
|
||||
@1204;"V:Disallineamento assi Gantry"
|
||||
@1205;"V:Allarme Protocollo CanOpen"
|
||||
@1206;"V:Drive in Allarme"
|
||||
@1207;"V:Errore Comando"
|
||||
@1208;"V:Reserved"
|
||||
@1209;"V:Reserved"
|
||||
@1210;"V:Reserved"
|
||||
@1211;"V:Reserved"
|
||||
@1212;"V:Reserved"
|
||||
@1213;"V:Azionamento digitale non pronto"
|
||||
@1214;"V:Dati non validi"
|
||||
@1215;"V:Pacchetto dati corrotto errore di BCC"
|
||||
@1216;"V:Rumore sulla linea di comunicazione con l'azionamento"
|
||||
@1217;"V:Timeout comunicazione con azionamento digitale"
|
||||
@1218;"W:F.C. Avanti"
|
||||
@1219;"W:F.C. Indietro"
|
||||
@1220;"W:F.C. Software"
|
||||
@1221;"W:Allarme Asse: Richiesta esterna"
|
||||
@1222;"W:Errore Taratura"
|
||||
@1223;"W:Asse non definito"
|
||||
@1224;"W:Asse non presente e fly"
|
||||
@1225;"W:Errore Tolleranza"
|
||||
@1226;"W:Errore d'inseguimento"
|
||||
@1227;"W:Errore Offset"
|
||||
@1228;"W:Richiesta Allarme I/O di controllo"
|
||||
@1229;"W:Interfaccia DAC o Encoder mancante"
|
||||
@1230;"W:Mancanza conteggio Encoder"
|
||||
@1231;"W:Asse in collisione"
|
||||
@1232;"W:Gamma non presente"
|
||||
@1233;"W:Encoder non collegato"
|
||||
@1234;"W:Asse non disponibile"
|
||||
@1235;"W:Allarme Servodrive Digitale"
|
||||
@1236;"W:Disallineamento assi Gantry"
|
||||
@1237;"W:Allarme Protocollo CanOpen"
|
||||
@1238;"W:Drive in Allarme"
|
||||
@1239;"W:Errore Comando"
|
||||
@1240;"W:Reserved"
|
||||
@1241;"W:Reserved"
|
||||
@1242;"W:Reserved"
|
||||
@1243;"W:Reserved"
|
||||
@1244;"W:Reserved"
|
||||
@1245;"W:Azionamento digitale non pronto"
|
||||
@1246;"W:Dati non validi"
|
||||
@1247;"W:Pacchetto dati corrotto errore di BCC"
|
||||
@1248;"W:Rumore sulla linea di comunicazione con l'azionamento"
|
||||
@1249;"W:Timeout comunicazione con azionamento digitale"
|
||||
@1250;"A:F.C. Avanti"
|
||||
@1251;"A:F.C. Indietro"
|
||||
@1252;"A:F.C. Software"
|
||||
@1253;"A:Allarme Asse: Richiesta esterna"
|
||||
@1254;"A:Errore Taratura"
|
||||
@1255;"A:Asse non definito"
|
||||
@1256;"A:Asse non presente e fly"
|
||||
@1257;"A:Errore Tolleranza"
|
||||
@1258;"A:Errore d'inseguimento"
|
||||
@1259;"A:Errore Offset"
|
||||
@1260;"A:Richiesta Allarme I/O di controllo"
|
||||
@1261;"A:Interfaccia DAC o Encoder mancante"
|
||||
@1262;"A:Mancanza conteggio Encoder"
|
||||
@1263;"A:Asse in collisione"
|
||||
@1264;"A:Gamma non presente"
|
||||
@1265;"A:Encoder non collegato"
|
||||
@1266;"A:Asse non disponibile"
|
||||
@1267;"A:Allarme Servodrive Digitale"
|
||||
@1268;"A:Disallineamento assi Gantry"
|
||||
@1269;"A:Allarme Protocollo CanOpen"
|
||||
@1270;"A:Drive in Allarme"
|
||||
@1271;"A:Errore Comando"
|
||||
@1272;"A:Reserved"
|
||||
@1273;"A:Reserved"
|
||||
@1274;"A:Reserved"
|
||||
@1275;"A:Reserved"
|
||||
@1276;"A:Reserved"
|
||||
@1277;"A:Azionamento digitale non pronto"
|
||||
@1278;"A:Dati non validi"
|
||||
@1279;"A:Pacchetto dati corrotto errore di BCC"
|
||||
@1280;"A:Rumore sulla linea di comunicazione con l'azionamento"
|
||||
@1281;"A:Timeout comunicazione con azionamento digitale"
|
||||
@1282;"B:F.C. Avanti"
|
||||
@1283;"B:F.C. Indietro"
|
||||
@1284;"B:F.C. Software"
|
||||
@1285;"B:Allarme Asse: Richiesta esterna"
|
||||
@1286;"B:Errore Taratura"
|
||||
@1287;"B:Asse non definito"
|
||||
@1288;"B:Asse non presente e fly"
|
||||
@1289;"B:Errore Tolleranza"
|
||||
@1290;"B:Errore d'inseguimento"
|
||||
@1291;"B:Errore Offset"
|
||||
@1292;"B:Richiesta Allarme I/O di controllo"
|
||||
@1293;"B:Interfaccia DAC o Encoder mancante"
|
||||
@1294;"B:Mancanza conteggio Encoder"
|
||||
@1295;"B:Asse in collisione"
|
||||
@1296;"B:Gamma non presente"
|
||||
@1297;"B:Encoder non collegato"
|
||||
@1298;"B:Asse non disponibile"
|
||||
@1299;"B:Allarme Servodrive Digitale"
|
||||
@1300;"B:Disallineamento assi Gantry"
|
||||
@1301;"B:Allarme Protocollo CanOpen"
|
||||
@1302;"B:Drive in Allarme"
|
||||
@1303;"B:Errore Comando"
|
||||
@1304;"B:Reserved"
|
||||
@1305;"B:Reserved"
|
||||
@1306;"B:Reserved"
|
||||
@1307;"B:Reserved"
|
||||
@1308;"B:Reserved"
|
||||
@1309;"B:Azionamento digitale non pronto"
|
||||
@1310;"B:Dati non validi"
|
||||
@1311;"B:Pacchetto dati corrotto errore di BCC"
|
||||
@1312;"B:Rumore sulla linea di comunicazione con l'azionamento"
|
||||
@1313;"B:Timeout comunicazione con azionamento digitale"
|
||||
@1314;"C:F.C. Avanti"
|
||||
@1315;"C:F.C. Indietro"
|
||||
@1316;"C:F.C. Software"
|
||||
@1317;"C:Allarme Asse: Richiesta esterna"
|
||||
@1318;"C:Errore Taratura"
|
||||
@1319;"C:Asse non definito"
|
||||
@1320;"C:Asse non presente e fly"
|
||||
@1321;"C:Errore Tolleranza"
|
||||
@1322;"C:Errore d'inseguimento"
|
||||
@1323;"C:Errore Offset"
|
||||
@1324;"C:Richiesta Allarme I/O di controllo"
|
||||
@1325;"C:Interfaccia DAC o Encoder mancante"
|
||||
@1326;"C:Mancanza conteggio Encoder"
|
||||
@1327;"C:Asse in collisione"
|
||||
@1328;"C:Gamma non presente"
|
||||
@1329;"C:Encoder non collegato"
|
||||
@1330;"C:Asse non disponibile"
|
||||
@1331;"C:Allarme Servodrive Digitale"
|
||||
@1332;"C:Disallineamento Assi Gantry"
|
||||
@1333;"C:Allarme Protocollo CanOpen"
|
||||
@1334;"C:Drive Guasto"
|
||||
@1335;"C:Errore Comando"
|
||||
@1336;"C:Reserved"
|
||||
@1337;"C:Reserved"
|
||||
@1338;"C:Reserved"
|
||||
@1339;"C:Reserved"
|
||||
@1340;"C:Reserved"
|
||||
@1341;"C:Azionamento digitale non pronto"
|
||||
@1342;"C:Dati non validi"
|
||||
@1343;"C:Pacchetto dati corrotto errore di BCC"
|
||||
@1344;"C:Rumore sulla linea di comunicazione con l'azionamento"
|
||||
@1345;"C:Timeout comunicazione con azionamento digitale"
|
||||
END
|
||||
@@ -0,0 +1,21 @@
|
||||
|
||||
<!--Esempi configurazioni REDIS-->
|
||||
|
||||
<!--Redis in localhost-->
|
||||
<add key="RedisConn" value="localhost,abortConnect=false,ssl=false" />
|
||||
<add key="RedisConnAdmin" value="localhost,abortConnect=false,ssl=false,allowAdmin=true" />
|
||||
<!--Redis in test su virtual OSAI SERIATE-->
|
||||
<add key="RedisConn" value="10.74.82.66,abortConnect=false,ssl=false" />
|
||||
<add key="RedisConnAdmin" value="10.74.82.66,abortConnect=false,ssl=false,allowAdmin=true" />
|
||||
<!--Redis in test su virtual OSAI NEMBRO-->
|
||||
<add key="RedisConn" value="10.82.74.122,abortConnect=false,ssl=false" />
|
||||
<add key="RedisConnAdmin" value="10.82.74.122,abortConnect=false,ssl=false,allowAdmin=true" />
|
||||
<!--Redis in test su virtual OSAI SCAI.BO-->
|
||||
<add key="RedisConn" value="192.168.3.80,abortConnect=false,ssl=false" />
|
||||
<add key="RedisConnAdmin" value="192.168.3.80,abortConnect=false,ssl=false,allowAdmin=true" />
|
||||
<!--Redis in test su virtual SCM UTE-->
|
||||
<add key="RedisConn" value="130.130.2.98,abortConnect=false,ssl=false" />
|
||||
<add key="RedisConnAdmin" value="130.130.2.98,abortConnect=false,ssl=false,allowAdmin=true" />
|
||||
<!--Redis in test su CMS PROD-->
|
||||
<add key="RedisConn" value="192.168.139.100,abortConnect=false,ssl=false" />
|
||||
<add key="RedisConnAdmin" value="192.168.139.100,abortConnect=false,ssl=false,allowAdmin=true" />
|
||||
@@ -0,0 +1,45 @@
|
||||
# convertScmAlarm.ps1 orig_file new_file
|
||||
#----------------------------------------------
|
||||
# Script conversione alarm list
|
||||
#
|
||||
# parte da file di input (tipicamente C:\Kvara\Xilog Plus Default\Country\Ita\app.msg)
|
||||
# e genera un file di output nel formato necessario per MTConnect Adapter
|
||||
#----------------------------------------------
|
||||
#
|
||||
# abilitazione script:
|
||||
# Set-ExecutionPolicy -Scope Process -ExecutionPolicy unrestricted
|
||||
#.\convertScmAlarm.ps1 .\app.msg AlarmListEsaGv.map
|
||||
|
||||
|
||||
|
||||
param(
|
||||
[string]$orig_file_path = '',
|
||||
[string]$new_file_path = ''
|
||||
)
|
||||
|
||||
#$orig_file = Get-Content $orig_file_path
|
||||
|
||||
#Write-Output $orig_file -replace "@","###"
|
||||
#Write-Output $orig_file -replace "@","###"
|
||||
|
||||
|
||||
#(Get-Content $orig_file_path) `
|
||||
# -replace '"(\d+),(\d{1,})"', '$1.$2' `
|
||||
# -replace '@', '#' |
|
||||
# Out-File $new_file_path
|
||||
|
||||
|
||||
(Get-Content $orig_file_path) |
|
||||
Where-Object {$_ -match '@' } |
|
||||
Where-Object {$_ -notmatch '@0' } |
|
||||
#cerco righe complete (3 oggetti)
|
||||
Foreach-Object {$_ -replace '"', ''} |
|
||||
#righe con colore Blu --> WARNING=500
|
||||
Foreach-Object {$_ -replace "^@(\d+);(\w+);(\w+)", '$1|500|[$1] $3'} |
|
||||
# cerca righe SENZA codice colore --> FAULT=900
|
||||
Foreach-Object {$_ -replace "^@(\d+);(\w?)", '$1|900|[$1] $2'} |
|
||||
|
||||
Set-Content $new_file_path
|
||||
|
||||
#"@21,B,M00 ATTIVO: START CICLO" -replace "^@(\d+),(\w+),(\w+)", '$1|$2|$3'
|
||||
#Foreach-Object {$_ -replace '@', ''} |
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{4C09FE6B-20FE-4A16-8443-F8BE8AE0849A}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>OpcUaCommon</RootNamespace>
|
||||
<AssemblyName>OpcUaCommon</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<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>none</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MQTTnet, Version=3.0.8.0, Culture=neutral, PublicKeyToken=b69712f52770c0a7, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MQTTnet.3.0.8\lib\net461\MQTTnet.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="MQTTnet.Extensions.ManagedClient, Version=3.0.8.0, Culture=neutral, PublicKeyToken=b69712f52770c0a7, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\MQTTnet.Extensions.ManagedClient.3.0.8\lib\net452\MQTTnet.Extensions.ManagedClient.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Net.Security, Version=4.0.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Security.4.3.2\lib\net46\System.Net.Security.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.WebSockets, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.WebSockets.4.3.0\lib\net46\System.Net.WebSockets.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.WebSockets.Client, Version=4.0.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.WebSockets.Client.4.3.2\lib\net46\System.Net.WebSockets.Client.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net461\System.Security.Cryptography.Algorithms.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
|
||||
</Reference>
|
||||
<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" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Services\ConsolePrinter.cs" />
|
||||
<Compile Include="Services\CryptoUtils.cs" />
|
||||
<Compile Include="Services\DataRecorder.cs" />
|
||||
<Compile Include="Services\IPrinter.cs" />
|
||||
<Compile Include="Services\LogPrinter.cs" />
|
||||
<Compile Include="Services\MQTT_Client.cs" />
|
||||
<Compile Include="Services\NullPrinter.cs" />
|
||||
<Compile Include="Services\DTUtils.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.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\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
||||
@@ -0,0 +1,36 @@
|
||||
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("OpcUtils")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("OpcUtils")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2018")]
|
||||
[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("4c09fe6b-20fe-4a16-8443-f8be8ae0849a")]
|
||||
|
||||
// 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 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")]
|
||||
@@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace OpcUaCommon.Services
|
||||
{
|
||||
public class ConsolePrinter : IPrinter
|
||||
{
|
||||
public void Print(string message)
|
||||
{
|
||||
Console.WriteLine(message);
|
||||
}
|
||||
public void PrintVariable(string key, object value)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class ConsoleLogPrinter : IPrinter
|
||||
{
|
||||
private readonly IEnumerable<IPrinter> _printers;
|
||||
|
||||
public ConsoleLogPrinter(IEnumerable<IPrinter> printers)
|
||||
{
|
||||
_printers = printers;
|
||||
}
|
||||
|
||||
public void Print(string message)
|
||||
{
|
||||
foreach (var printer in _printers)
|
||||
{
|
||||
printer.Print(message);
|
||||
}
|
||||
}
|
||||
|
||||
public void PrintVariable(string key, object value)
|
||||
{
|
||||
foreach (var printer in _printers)
|
||||
{
|
||||
printer.PrintVariable(key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpcUaCommon.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// utils x cifrature passeword e Crypto functionality in genere
|
||||
/// </summary>
|
||||
public static class CryptoUtils
|
||||
{
|
||||
#region Public Methods
|
||||
|
||||
/// <summary>
|
||||
/// Decifra un messaggio AES
|
||||
/// </summary>
|
||||
/// <param name="Message"></param>
|
||||
/// <param name="Passphrase"></param>
|
||||
/// <returns></returns>
|
||||
public static string DecryptString(string Message, string Passphrase)
|
||||
{
|
||||
string answ = Message;
|
||||
byte[] Results = null;
|
||||
UTF8Encoding UTF8 = new UTF8Encoding();
|
||||
|
||||
// Step 1. faccio hash per ottenere la Key a 128 bit + l'InitVector a 256 bit
|
||||
// - MD5 hash generator --> 128 bit byte array
|
||||
// - Sha256 hash generator --> 256 bit byte array
|
||||
MD5CryptoServiceProvider MD5HashProv = new MD5CryptoServiceProvider();
|
||||
SHA256CryptoServiceProvider Sha256HashProv = new SHA256CryptoServiceProvider();
|
||||
byte[] AESKey = Sha256HashProv.ComputeHash(UTF8.GetBytes(Passphrase));
|
||||
byte[] AESIV = MD5HashProv.ComputeHash(UTF8.GetBytes(Passphrase));
|
||||
|
||||
// Step 2. Crea oggett AESCryptoServiceProvider
|
||||
AesCryptoServiceProvider AESAlgorithm = new AesCryptoServiceProvider();
|
||||
|
||||
// Step 3. Setup del dencoder
|
||||
AESAlgorithm.Key = AESKey;
|
||||
AESAlgorithm.IV = AESIV;
|
||||
|
||||
// Step 4. Conversione della stringa in ingresso in un byte[]
|
||||
byte[] DataToDecrypt = null;
|
||||
try
|
||||
{
|
||||
DataToDecrypt = Convert.FromBase64String(Message);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
if (DataToDecrypt != null)
|
||||
{
|
||||
// Step 5. Attempt to decrypt the string
|
||||
try
|
||||
{
|
||||
ICryptoTransform Decryptor = AESAlgorithm.CreateDecryptor();
|
||||
Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length);
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Clear the TripleDes and Hashprovider services of any sensitive information
|
||||
AESAlgorithm.Clear();
|
||||
MD5HashProv.Clear();
|
||||
Sha256HashProv.Clear();
|
||||
}
|
||||
// Step 6. Return the decrypted string in UTF8 format
|
||||
answ = UTF8.GetString(Results);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Cifra un messaggio con AES
|
||||
/// </summary>
|
||||
/// <param name="Message">Messaggio da cifrare (la password)</param>
|
||||
/// <param name="Passphrase">Stringa usate per generare le key/IV da 128/256bit</param>
|
||||
/// <returns></returns>
|
||||
public static string EncryptString(string Message, string Passphrase)
|
||||
{
|
||||
byte[] Results;
|
||||
UTF8Encoding UTF8 = new UTF8Encoding();
|
||||
|
||||
// Step 1. faccio hash per ottenere la Key a 128 bit + l'InitVector a 256 bit
|
||||
// - MD5 hash generator --> 128 bit byte array
|
||||
// - Sha256 hash generator --> 256 bit byte array
|
||||
MD5CryptoServiceProvider MD5HashProv = new MD5CryptoServiceProvider();
|
||||
SHA256CryptoServiceProvider Sha256HashProv = new SHA256CryptoServiceProvider();
|
||||
byte[] AESKey = Sha256HashProv.ComputeHash(UTF8.GetBytes(Passphrase));
|
||||
byte[] AESIV = MD5HashProv.ComputeHash(UTF8.GetBytes(Passphrase));
|
||||
|
||||
// Step 2. Crea oggett AESCryptoServiceProvider
|
||||
AesCryptoServiceProvider AESAlgorithm = new AesCryptoServiceProvider();
|
||||
|
||||
// Step 3. Setup dell'encoder
|
||||
AESAlgorithm.Key = AESKey;
|
||||
AESAlgorithm.IV = AESIV;
|
||||
|
||||
// Step 4. Conversione della stringa in ingresso in un byte[]
|
||||
byte[] DataToEncrypt = UTF8.GetBytes(Message);
|
||||
|
||||
// Step 5. Attempt to encrypt the string
|
||||
try
|
||||
{
|
||||
ICryptoTransform Encryptor = AESAlgorithm.CreateEncryptor();
|
||||
Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
|
||||
}
|
||||
finally
|
||||
{
|
||||
// ripulisce il provider di ogni informazione sensibile
|
||||
AESAlgorithm.Clear();
|
||||
MD5HashProv.Clear();
|
||||
Sha256HashProv.Clear();
|
||||
}
|
||||
|
||||
// Step 6. Restitusice stringa cifrata come una "base64 encoded string"
|
||||
return Convert.ToBase64String(Results);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Genera una password valida
|
||||
/// </summary>
|
||||
/// <param name="userName"></param>
|
||||
/// <param name="passphrase"></param>
|
||||
/// <returns></returns>
|
||||
public static string generatePwd(string userName, string passphrase)
|
||||
{
|
||||
// Check preliminare della "master password"
|
||||
return EncryptString(userName, passphrase);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Effettua validazione password
|
||||
/// </summary>
|
||||
/// <param name="userName"></param>
|
||||
/// <param name="password"></param>
|
||||
/// <param name="passphrase"></param>
|
||||
/// <returns></returns>
|
||||
public static bool validateUserPwd(string userName, string password, string passphrase)
|
||||
{
|
||||
// Check preliminare della "master password"
|
||||
bool answ = (userName == "scmAdmin" && password == "1PasswordDavveroDifficil3!");
|
||||
// verifico password avanzata
|
||||
if (!answ)
|
||||
{
|
||||
string plainText = DecryptString(password, passphrase);
|
||||
answ = (userName == plainText);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpcUaCommon.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// utility di supporto
|
||||
/// </summary>
|
||||
public class DTUtils
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// Formato output timestamp
|
||||
/// </summary>
|
||||
protected static string dataFormat = "yyyy-MM-dd\\THH:mm:ss.fffK";
|
||||
|
||||
/// <summary>
|
||||
/// Timestamp formattato...
|
||||
/// </summary>
|
||||
public static string timestamp
|
||||
{
|
||||
get
|
||||
{
|
||||
return DateTime.UtcNow.ToString(dataFormat);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Timestamp formattato...
|
||||
/// </summary>
|
||||
public static string formattedDT(DateTime origDT)
|
||||
{
|
||||
return origDT.ToString(dataFormat);
|
||||
}
|
||||
/// <summary>
|
||||
/// Converte in epoch (secondi dal 1 gennaio 1970)
|
||||
/// </summary>
|
||||
/// <param name="reqDate"></param>
|
||||
/// <returns></returns>
|
||||
public static double dt2Epoc(DateTime reqDate)
|
||||
{
|
||||
double epoch = reqDate.Subtract(new DateTime(1970, 1, 1)).TotalSeconds;
|
||||
//int epoch = (int)(reqDate - new DateTime(1970, 1, 1)).TotalSeconds;
|
||||
return epoch;
|
||||
}
|
||||
/// <summary>
|
||||
/// Formato x pubblicazione MQTT in ms
|
||||
/// </summary>
|
||||
/// <param name="reqDate"></param>
|
||||
/// <returns></returns>
|
||||
public static ulong dtAtMqtt(DateTime reqDate)
|
||||
{
|
||||
ulong answ = 0;
|
||||
answ = Convert.ToUInt64(dt2Epoc(reqDate) * 1000);
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
namespace OpcUaCommon.Services
|
||||
{
|
||||
public class DataRecorder
|
||||
{
|
||||
/// <summary>
|
||||
/// filepath x recorder
|
||||
/// </summary>
|
||||
protected string currFilePath = string.Format("{0:yyyyMMdd_HHmmss}.log", DateTime.Now);
|
||||
public DataRecorder(string filePath)
|
||||
{
|
||||
currFilePath = filePath;
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
// Create a file to write to.
|
||||
using (StreamWriter sw = File.CreateText(filePath))
|
||||
{
|
||||
sw.WriteLine("#------------- SOUR recorder -------------#");
|
||||
}
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Scrive una stringa nel file di recording
|
||||
/// </summary>
|
||||
/// <param name="lines">Singola stringa (linea) da accodare</param>
|
||||
public void Print(string line)
|
||||
{
|
||||
File.AppendAllText(currFilePath, line + Environment.NewLine);
|
||||
}
|
||||
/// <summary>
|
||||
/// Scrive una stringa nel file di recording
|
||||
/// </summary>
|
||||
/// <param name="lines">Array di linee da registrare</param>
|
||||
public void Print(string[] lines)
|
||||
{
|
||||
File.AppendAllLines(currFilePath, lines);
|
||||
}
|
||||
/// <summary>
|
||||
/// Scrive una stringa nel file di recording
|
||||
/// </summary>
|
||||
/// <param name="rowList">Array di linee da registrare</param>
|
||||
public void Print(List<string> rowList)
|
||||
{
|
||||
string[] lines = rowList.ToArray();
|
||||
Print(lines);
|
||||
}
|
||||
/// <summary>
|
||||
/// Formatta una linea x log recording secondo tipo, canale, valore
|
||||
/// </summary>
|
||||
/// <param name="dType"></param>
|
||||
/// <param name="channel"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public static string formatLine(dataType dType, string channel, string value)
|
||||
{
|
||||
string answ = "";
|
||||
// fix path
|
||||
channel = channel.Replace(":", "/");
|
||||
// compongo timestamp & co...
|
||||
string jsonPLoad = JsonConvert.SerializeObject(new { st = DTUtils.timestamp, v = value });
|
||||
//string jsonPLoad = JsonConvert.SerializeObject(new { st = timestamp, k = "ns=2;s=" + channel, v = value, ts = timestamp });
|
||||
jsonPLoad = jsonPLoad.Replace("\"", "\"\"") + "\"";
|
||||
|
||||
switch (dType)
|
||||
{
|
||||
case dataType.Condition:
|
||||
break;
|
||||
case dataType.Property:
|
||||
case dataType.Variable:
|
||||
answ = string.Format(@"""{0}"",""SOUR"",""{1}"",""{2}""", DTUtils.timestamp, channel, jsonPLoad);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return answ;
|
||||
}
|
||||
/// <summary>
|
||||
/// Formatta una linea x log recording secondo tipo, canale, valore
|
||||
/// </summary>
|
||||
/// <param name="dType"></param>
|
||||
/// <param name="channel"></param>
|
||||
/// <param name="actState"></param>
|
||||
/// <param name="alarmCode"></param>
|
||||
/// <param name="severity"></param>
|
||||
/// <param name="alarmText"></param>
|
||||
/// <returns></returns>
|
||||
public static string formatLine(dataType dType, string channel, string actState, string alarmCode, string alarmSeverity, string alarmText)
|
||||
{
|
||||
string answ = "";
|
||||
// fix path
|
||||
channel = channel.Replace(":", "/");
|
||||
string[] alarmSplit = alarmCode.Split('|');
|
||||
// 2018.11.20 aggiunto alarmCode al channel come da email Carmine Ingaldi (vers (b) del formato)
|
||||
channel += "/" + alarmSplit[0];
|
||||
// fix payload message
|
||||
string jsonPLoad = JsonConvert.SerializeObject(new { st = DTUtils.timestamp, v = alarmText, conditionName = alarmSplit[0], severity = alarmSeverity, activeState = actState, eventType = "AlarmConditionType" });
|
||||
//string jsonPLoad = JsonConvert.SerializeObject(new { st = timestamp, v = alarmText, conditionName = alarmCode, severity = alarmSeverity, activeState = actState, eventType = "AlarmConditionType" });
|
||||
//string jsonPLoad = JsonConvert.SerializeObject(new { st = timestamp, k = "ns=2;s=" + channel, v = alarmCode, conditionName = alarmCode, activeState = isActive ? "Active" : "Inactive", ts = timestamp });
|
||||
jsonPLoad = jsonPLoad.Replace("\"", "\"\"") + "\"";
|
||||
|
||||
switch (dType)
|
||||
{
|
||||
case dataType.Condition:
|
||||
answ = string.Format(@"""{0}"",""SOUR"",""{1}"",""{2}""", DTUtils.timestamp, channel, jsonPLoad);
|
||||
break;
|
||||
case dataType.Property:
|
||||
case dataType.Variable:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Tipo dati gestiti
|
||||
/// </summary>
|
||||
public enum dataType
|
||||
{
|
||||
Condition,
|
||||
Property,
|
||||
Variable
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace OpcUaCommon.Services
|
||||
{
|
||||
public interface IPrinter
|
||||
{
|
||||
void Print(string message);
|
||||
void PrintVariable(string key, object value);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using log4net;
|
||||
using log4net.Config;
|
||||
using System;
|
||||
|
||||
namespace OpcUaCommon.Services
|
||||
{
|
||||
public class LogPrinter : IPrinter
|
||||
{
|
||||
private static readonly ILog Log = LogManager.GetLogger(typeof(LogPrinter));
|
||||
|
||||
public LogPrinter()
|
||||
{
|
||||
//log4net.GlobalContext.Properties["LogFileName"] = @"D:\\Temp\\Log";
|
||||
XmlConfigurator.Configure();
|
||||
}
|
||||
|
||||
public void Print(string message)
|
||||
{
|
||||
Log.Info(message);
|
||||
}
|
||||
|
||||
public void PrintVariable(string key, object value)
|
||||
{
|
||||
Log.Info(DateTimeOffset.UtcNow.ToUniversalTime() + " - " + key + " - " + value);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,512 @@
|
||||
using MQTTnet;
|
||||
using MQTTnet.Client.Options;
|
||||
using MQTTnet.Extensions.ManagedClient;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpcUaCommon.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// Enum stati allarmi
|
||||
/// </summary>
|
||||
public enum alarmState
|
||||
{
|
||||
Active,
|
||||
Inactive
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Classe del contenuto DATA dell'oggetto (base)
|
||||
/// </summary>
|
||||
public class alarmPayload : dataPayload
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
/// <summary>
|
||||
/// Stato corrente della condition
|
||||
/// </summary>
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public alarmState activeState { get; set; } = alarmState.Inactive;
|
||||
|
||||
/// <summary>
|
||||
/// Chiave univoca allarme (CODICE|SEVERITY)
|
||||
/// </summary>
|
||||
public string conditionName { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// K rappresenta il channel della condition
|
||||
/// </summary>
|
||||
public string eventType { get; set; } = "AlarmConditionType";
|
||||
|
||||
/// <summary>
|
||||
/// K rappresenta il channel della condition
|
||||
/// </summary>
|
||||
public string k { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// rappresenta la severity della condition (0..1000) calcolata in automatico dalla condition name (dopo il simbolo pipe "|")
|
||||
/// </summary>
|
||||
public string severity
|
||||
{
|
||||
get
|
||||
{
|
||||
string answ = "0";
|
||||
int idx = conditionName.IndexOf("|");
|
||||
if (idx > 0)
|
||||
{
|
||||
try
|
||||
{
|
||||
answ = conditionName.Substring(idx + 1);
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Properties
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Classe del contenuto DATA dell'oggetto (base)
|
||||
/// </summary>
|
||||
public class dataPayload
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
/// <summary>
|
||||
/// ts = timestamp server
|
||||
/// </summary>
|
||||
public string ts { get; set; } = DTUtils.timestamp;
|
||||
|
||||
/// <summary>
|
||||
/// v = value
|
||||
/// </summary>
|
||||
public string v { get; set; } = "";
|
||||
|
||||
#endregion Public Properties
|
||||
}
|
||||
|
||||
public class MQTT_Client
|
||||
{
|
||||
#region Private Fields
|
||||
|
||||
private readonly IPrinter _printer;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Protected Fields
|
||||
|
||||
/// <summary>
|
||||
/// Configurazione attiva
|
||||
/// </summary>
|
||||
protected confData _currConf;
|
||||
|
||||
/// <summary>
|
||||
/// Cancellation token
|
||||
/// </summary>
|
||||
protected System.Threading.CancellationToken cancellationToken;
|
||||
|
||||
/// <summary>
|
||||
/// Obj factory MQTT
|
||||
/// </summary>
|
||||
protected MqttFactory factory;
|
||||
|
||||
/// <summary>
|
||||
/// Client MQTT (managed)
|
||||
/// </summary>
|
||||
protected IManagedMqttClient mqttClientMan;
|
||||
|
||||
/// <summary>
|
||||
/// Opzioni di connessione (managed client)
|
||||
/// </summary>
|
||||
protected ManagedMqttClientOptions options;
|
||||
|
||||
#endregion Protected Fields
|
||||
|
||||
#region Public Constructors
|
||||
|
||||
/// <summary>
|
||||
/// Inizializzazione obj gestione MQTT
|
||||
/// </summary>
|
||||
/// <param name="currConfig"></param>
|
||||
/// <param name="printer"></param>
|
||||
public MQTT_Client(confData currConfig, IPrinter printer)
|
||||
{
|
||||
// salvo config
|
||||
_currConf = currConfig;
|
||||
_printer = printer;
|
||||
mqttClientMan = new MqttFactory().CreateManagedMqttClient();
|
||||
}
|
||||
|
||||
#endregion Public Constructors
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
/// COntrolla se il channel contenga il valore baseNS da config, altrimenti aggiunge...
|
||||
/// </summary>
|
||||
/// <param name="channel"></param>
|
||||
/// <returns></returns>
|
||||
protected string fixChannel(string channel)
|
||||
{
|
||||
// verifico se aggiungere o meno il baseNS...
|
||||
string answ = channel.StartsWith(_currConf.baseNS) ? channel : _currConf.baseNS + channel;
|
||||
// fix in caso ci fossero ":" al psoto di "/"...
|
||||
answ = answ.Replace(":", "/");
|
||||
return answ;
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Public Methods
|
||||
|
||||
/// <summary>
|
||||
/// Formatta il payload in modo che sia un JSon valido x gli allarmi da trasmettere...
|
||||
/// </summary>
|
||||
/// <param name="conditionKey">KEY della condition nel formato codice+severity (codice_allarme|severity)</param>
|
||||
/// <param name="conditionValue">Valore condition = TESTO dell'allarme</param>
|
||||
/// <param name="alrmState">Stato dell'allarme</param>
|
||||
/// <param name="baseNS">Componente NS da togliere nel valore "K" del payload dell'allarme</param>
|
||||
/// <param name="ttlSec">TTL da impostare: -1 = never, null = default 100gg, >=0 imposta TTL</param>
|
||||
/// <returns></returns>
|
||||
public static string createAlarmPayload(string channel, string conditionKey, string conditionValue, alarmState alrmState, string baseNS, int? ttlSec)
|
||||
{
|
||||
string jsonData = "";
|
||||
// se ttl null --> imposto default 100 gg
|
||||
ttlSec = ttlSec == null ? 86400 * 100 : ttlSec;
|
||||
// se ttl < 0 --> imposto null (never expiry...)
|
||||
ttlSec = ttlSec < 0 ? null : ttlSec;
|
||||
// preparo oggetto
|
||||
mqttConditionPayload currData = new mqttConditionPayload()
|
||||
{
|
||||
data = new alarmPayload()
|
||||
{
|
||||
k = channel.Replace(baseNS, ""),
|
||||
v = conditionValue,
|
||||
conditionName = conditionKey,
|
||||
activeState = alrmState
|
||||
},
|
||||
ttl = ttlSec,
|
||||
at = DTUtils.dtAtMqtt(DateTime.UtcNow)
|
||||
};
|
||||
// serializzo
|
||||
jsonData = JsonConvert.SerializeObject(currData);
|
||||
// restituisco!
|
||||
return jsonData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Formatta il payload in modo che sia un JSon valido partendo dal VALUE che si vuole trasmettere...
|
||||
/// </summary>
|
||||
/// <param name="valore">Valore da inviare</param>
|
||||
/// <param name="ttlSec">Indica un TTL (inserisce meta se non vuoto)</param>
|
||||
/// <returns></returns>
|
||||
public static string createValuePayload(string valore, int? ttlSec)
|
||||
{
|
||||
string jsonData = "";
|
||||
// se ttl null --> imposto default 100 gg
|
||||
ttlSec = ttlSec == null ? 86400 * 100 : ttlSec;
|
||||
// se ttl < 0 --> imposto null (never expiry...)
|
||||
ttlSec = ttlSec < 0 ? null : ttlSec;
|
||||
// preparo oggetto
|
||||
mqttValuePayload currData = new mqttValuePayload()
|
||||
{
|
||||
data = new dataPayload()
|
||||
{
|
||||
v = valore
|
||||
},
|
||||
ttl = ttlSec,
|
||||
at = DTUtils.dtAtMqtt(DateTime.UtcNow)
|
||||
};
|
||||
// serializzo
|
||||
jsonData = JsonConvert.SerializeObject(currData);
|
||||
// restituisco!
|
||||
return jsonData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Formatta il payload in modo che sia un JSon valido partendo dal VALUE che si vuole trasmettere...
|
||||
/// </summary>
|
||||
/// <param name="valore">Valore da inviare</param>
|
||||
/// <param name="ttlSec">Indica un TTL (inserisce meta se non vuoto)</param>
|
||||
/// <param name="EventDT">Data-ora dell'evento da creare</param>
|
||||
/// <returns></returns>
|
||||
public static string createValuePayload(string valore, int? ttlSec, DateTime EventDT)
|
||||
{
|
||||
string jsonData = "";
|
||||
// se ttl null --> imposto default 100 gg
|
||||
ttlSec = ttlSec == null ? 86400 * 100 : ttlSec;
|
||||
// se ttl < 0 --> imposto null (never expiry...)
|
||||
ttlSec = ttlSec < 0 ? null : ttlSec;
|
||||
// preparo oggetto
|
||||
mqttValuePayload currData = new mqttValuePayload()
|
||||
{
|
||||
data = new dataPayload()
|
||||
{
|
||||
v = valore
|
||||
},
|
||||
ttl = ttlSec,
|
||||
at = DTUtils.dtAtMqtt(EventDT)
|
||||
};
|
||||
// serializzo
|
||||
jsonData = JsonConvert.SerializeObject(currData);
|
||||
// restituisco!
|
||||
return jsonData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invia 1:1 le stringhe di payload ricevute
|
||||
/// </summary>
|
||||
/// <param name="rowList">Array di linee da registrare</param>
|
||||
public void Send(List<string> rowList)
|
||||
{
|
||||
// spacchetta i payload
|
||||
foreach (var item in rowList)
|
||||
{
|
||||
// e li invia 1:1...
|
||||
|
||||
//string jsonData = MQTT_Client.createPayload("Starting", null);
|
||||
//await mqttCli.sendMessageAsync("data/SRG", jsonData);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invia messaggio richiesto
|
||||
/// </summary>
|
||||
/// <param name="channel">Channel su cui pubblicare</param>
|
||||
/// <param name="conditionKey">KEY della condition nel formato codice+severity (codice_allarme|severity)</param>
|
||||
/// <param name="conditionValue">Valore condition = TESTO dell'allarme</param>
|
||||
/// <param name="activeState">Stato dell'allarme</param>
|
||||
/// <param name="ttlSec">TTL da impostare: -1 = never, null = default 100gg, >=0 imposta TTL</param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> sendAlarmAsync(string channel, string conditionKey, string conditionValue, alarmState activeState, int? ttlSec)
|
||||
{
|
||||
bool answ = false;
|
||||
// invio SOLO SE il valore è != ""...
|
||||
if (conditionKey != "")
|
||||
{
|
||||
try
|
||||
{
|
||||
string payload = createAlarmPayload(channel, conditionKey, conditionValue, activeState, _currConf.baseNS, ttlSec);
|
||||
// registro esito...
|
||||
answ = await sendPayloadAsync($"{channel}/{conditionKey}", payload);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
_printer.Print($"EXCEPTION during sendAlarmAsync: channel {channel} | conditionKey = {conditionKey} | conditionValue = {conditionValue} | activeState = {activeState} | TTL = {ttlSec}");
|
||||
_printer.Print(exc.ToString());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// no invio se vuoto...
|
||||
}
|
||||
// restituico esito...
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invia messaggio richiesto
|
||||
/// </summary>
|
||||
/// <param name="channel">Channel su cui pubblicare</param>
|
||||
/// <param name="payload">Payload da trasmettere</param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> sendPayloadAsync(string channel, string payload)
|
||||
{
|
||||
bool answ = false;
|
||||
try
|
||||
{
|
||||
// impacchetto il messaggio
|
||||
var message = new MqttApplicationMessageBuilder()
|
||||
.WithTopic($"{_currConf.usr_broker}/{fixChannel(channel)}")
|
||||
.WithPayload(payload)
|
||||
.WithExactlyOnceQoS()
|
||||
.WithRetainFlag()
|
||||
.Build();
|
||||
// invio in modalità async
|
||||
await mqttClientMan.PublishAsync(message, cancellationToken);
|
||||
// registro esito...
|
||||
answ = true;
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
_printer.Print($"EXCEPTION during sendPayloadAsync: channel {channel} | payload = {payload}");
|
||||
_printer.Print(exc.ToString());
|
||||
}
|
||||
// restituico esito...
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invia messaggio richiesto
|
||||
/// </summary>
|
||||
/// <param name="channel">Channel su cui pubblicare</param>
|
||||
/// <param name="valore">Valore da trasmettere</param>
|
||||
/// <param name="ttlSec">TTL da impostare: -1 = never, null = default 100gg, >=0 imposta TTL</param>
|
||||
/// <returns></returns>
|
||||
public async Task<bool> sendValueAsync(string channel, string valore, int? ttlSec)
|
||||
{
|
||||
bool answ = false;
|
||||
// invio SOLO SE il valore è != ""...
|
||||
if (!string.IsNullOrEmpty(valore))
|
||||
{
|
||||
try
|
||||
{
|
||||
string payload = createValuePayload(valore, ttlSec);
|
||||
// registro esito...
|
||||
answ = await sendPayloadAsync(channel, payload);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
_printer.Print($"EXCEPTION during sendValueAsync: channel {channel} | valore = {valore} | TTL = {ttlSec}");
|
||||
_printer.Print(exc.ToString());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// no invio se vuoto...
|
||||
}
|
||||
// restituico esito...
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Avvio del client MQTT
|
||||
/// </summary>
|
||||
public async Task startAsync()
|
||||
{
|
||||
// preparo token cancellazione
|
||||
cancellationToken = new System.Threading.CancellationToken();
|
||||
|
||||
Guid newGuid = Guid.NewGuid();
|
||||
string clientId = $"SOUR-SRG-{newGuid}";
|
||||
|
||||
// Setup and start del client MQTT managed.
|
||||
options = new ManagedMqttClientOptionsBuilder()
|
||||
.WithAutoReconnectDelay(TimeSpan.FromMilliseconds(_currConf.autoReconnectDelayMs))
|
||||
.WithClientOptions(new MqttClientOptionsBuilder()
|
||||
.WithClientId(clientId)
|
||||
.WithTcpServer(_currConf.broker_address, _currConf.port_broker)
|
||||
.WithCredentials(_currConf.usr_broker, _currConf.pwd_broker)
|
||||
//.WithTls()
|
||||
.Build())
|
||||
.Build();
|
||||
// avvio client MQTT
|
||||
await mqttClientMan.StartAsync(options);
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Public Classes
|
||||
|
||||
/// <summary>
|
||||
/// Classe di configurazione per accesso MQTT
|
||||
/// "plugId": "dev-5c86dced371e9e980142167d", "auth_password": "9c4173da75"
|
||||
/// </summary>
|
||||
public class confData
|
||||
{
|
||||
#region Public Fields
|
||||
|
||||
/// <summary>
|
||||
/// Determina se sia abilitato o meno il protocollo
|
||||
/// </summary>
|
||||
public bool isEnabled = false;
|
||||
|
||||
#endregion Public Fields
|
||||
|
||||
#region Public Properties
|
||||
|
||||
/// <summary>
|
||||
/// Tempo di attesa prima di tentare una auto-reconnect (in ms)
|
||||
/// </summary>
|
||||
public int autoReconnectDelayMs { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Base NameSpace (se manca lo aggiunge al channel in fase di invio...
|
||||
/// </summary>
|
||||
public string baseNS { get; set; } = "data/";
|
||||
|
||||
/// <summary>
|
||||
/// URL del brooker
|
||||
/// api.cloudplugs.com
|
||||
/// </summary>
|
||||
public string broker_address { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// PORT del broker
|
||||
/// </summary>
|
||||
public int port_broker { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Password - da API mconnect
|
||||
/// "auth_password": "9c4173da75"
|
||||
/// </summary>
|
||||
public string pwd_broker { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// User - da API mconnect
|
||||
/// "plugId": "dev-5c86dced371e9e980142167d"
|
||||
/// </summary>
|
||||
public string usr_broker { get; set; }
|
||||
|
||||
#endregion Public Properties
|
||||
}
|
||||
|
||||
#endregion Public Classes
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Classe costruzione di un payload MQTT di tipo CONDITION da serializzare
|
||||
/// </summary>
|
||||
public class mqttConditionPayload
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
/// <summary>
|
||||
/// ts = timestamp pubblicazione
|
||||
/// </summary>
|
||||
public ulong at { get; set; } = DTUtils.dtAtMqtt(DateTime.UtcNow);
|
||||
|
||||
/// <summary>
|
||||
/// Payload del messaggio MQTT
|
||||
/// </summary>
|
||||
public alarmPayload data { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Time To Live, IN SECONDI, default 100 gg (86'400 * 100)
|
||||
/// </summary>
|
||||
public int? ttl { get; set; } = 8640000;
|
||||
|
||||
#endregion Public Properties
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Classe costruzione di un payload MQTT di tipo VALORE STANDARD da serializzare
|
||||
/// </summary>
|
||||
public class mqttValuePayload
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
/// <summary>
|
||||
/// ts = timestamp pubblicazione
|
||||
/// </summary>
|
||||
public ulong at { get; set; } = DTUtils.dtAtMqtt(DateTime.UtcNow);
|
||||
|
||||
/// <summary>
|
||||
/// Payload del messaggio MQTT
|
||||
/// </summary>
|
||||
public dataPayload data { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Time To Live, IN SECONDI, default 100 gg (86'400 * 100)
|
||||
/// </summary>
|
||||
public int? ttl { get; set; } = 8640000;
|
||||
|
||||
#endregion Public Properties
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
namespace OpcUaCommon.Services
|
||||
{
|
||||
public class NullPrinter : IPrinter
|
||||
{
|
||||
public void Print(string message)
|
||||
{
|
||||
}
|
||||
|
||||
public void PrintVariable(string key, object value)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="log4net" version="2.0.8" targetFramework="net461" />
|
||||
<package id="Microsoft.NETCore.Platforms" version="3.0.0" targetFramework="net461" />
|
||||
<package id="MQTTnet" version="3.0.8" targetFramework="net461" />
|
||||
<package id="MQTTnet.Extensions.ManagedClient" version="3.0.8" targetFramework="net461" />
|
||||
<package id="NETStandard.Library" version="2.0.3" targetFramework="net461" />
|
||||
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net461" />
|
||||
<package id="System.Net.Security" version="4.3.2" targetFramework="net461" />
|
||||
<package id="System.Net.WebSockets" version="4.3.0" targetFramework="net461" />
|
||||
<package id="System.Net.WebSockets.Client" version="4.3.2" targetFramework="net461" />
|
||||
<package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="net461" />
|
||||
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net461" />
|
||||
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net461" />
|
||||
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="net461" />
|
||||
</packages>
|
||||
@@ -0,0 +1,210 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<appSettings>
|
||||
<add key="waitResendCondition" value="1500" />
|
||||
</appSettings>
|
||||
<configSections>
|
||||
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
|
||||
</configSections>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.2.4.0" newVersion="1.2.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.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.Hosting" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-2.2.7.0" newVersion="2.2.7.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.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="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.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="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="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.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="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="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.Extensions.Primitives" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.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.Http.Features" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</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.Security.Cryptography.Cng" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.3.2.0" newVersion="4.3.2.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.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.IO.Pipelines" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.AspNetCore.Connections.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Configuration.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.FileProviders.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Configuration" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Configuration.Binder" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.DependencyInjection" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Hosting.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Configuration.EnvironmentVariables" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Configuration.FileExtensions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.FileProviders.Physical" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Options" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.ObjectPool" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Text.Encodings.Web" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.4.0" newVersion="4.0.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Extensions.Logging" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Reflection.Metadata" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-1.4.4.0" newVersion="1.4.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Principal.Windows" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Reflection.DispatchProxy" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.5.0" newVersion="4.0.5.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Cryptography.Xml" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
|
||||
<log4net>
|
||||
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
|
||||
<file type="log4net.Util.PatternString" value="D:\Temp\OPCUASERVER\log-%utcdate{dd-MM-yyyy}.txt" />
|
||||
<PreserveLogFileNameExtension value="true" />
|
||||
<appendToFile value="true" />
|
||||
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
|
||||
<maximumFileSize value="100KB" />
|
||||
<maxSizeRollBackups value="100" />
|
||||
<layout type="log4net.Layout.PatternLayout">
|
||||
<conversionPattern value="%level - %message%newline" />
|
||||
</layout>
|
||||
</appender>
|
||||
<root>
|
||||
<level value="ALL" />
|
||||
<appender-ref ref="RollingFile" />
|
||||
</root>
|
||||
</log4net>
|
||||
</configuration>
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpcUaServer.Server
|
||||
{
|
||||
/// <summary>
|
||||
/// Helper per salvataggio stato condition (last changed)
|
||||
/// </summary>
|
||||
public class CondHelper
|
||||
{
|
||||
public string nodeName { get; set; } = "";
|
||||
public string eventMessage { get; set; } = "";
|
||||
public string severity { get; set; } = "";
|
||||
public string conditionName { get; set; } = "";
|
||||
public bool activeStatus { get; set; } = false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
namespace OpcUaServer.Server
|
||||
{
|
||||
partial class HeaderBreading
|
||||
{
|
||||
/// <summary>
|
||||
/// Variabile di progettazione necessaria.
|
||||
/// </summary>
|
||||
private System.ComponentModel.IContainer components = null;
|
||||
|
||||
/// <summary>
|
||||
/// Pulire le risorse in uso.
|
||||
/// </summary>
|
||||
/// <param name="disposing">ha valore true se le risorse gestite devono essere eliminate, false in caso contrario.</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing && (components != null))
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Codice generato da Progettazione componenti
|
||||
|
||||
/// <summary>
|
||||
/// Metodo necessario per il supporto della finestra di progettazione. Non modificare
|
||||
/// il contenuto del metodo con l'editor di codice.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.components = new System.ComponentModel.Container();
|
||||
//System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(HeaderBreading));
|
||||
this.pictureBox1 = new System.Windows.Forms.PictureBox();
|
||||
this.linkLabel1 = new System.Windows.Forms.LinkLabel();
|
||||
this.label1 = new System.Windows.Forms.Label();
|
||||
this.label2 = new System.Windows.Forms.Label();
|
||||
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
|
||||
this.appName = new System.Windows.Forms.Label();
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// pictureBox1
|
||||
//
|
||||
this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
|
||||
//this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
|
||||
this.pictureBox1.Location = new System.Drawing.Point(7, 3);
|
||||
this.pictureBox1.Name = "pictureBox1";
|
||||
this.pictureBox1.Size = new System.Drawing.Size(177, 70);
|
||||
this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
||||
this.pictureBox1.TabIndex = 0;
|
||||
this.pictureBox1.TabStop = false;
|
||||
this.toolTip1.SetToolTip(this.pictureBox1, "Visit www.opcfoundation.org");
|
||||
//
|
||||
// linkLabel1
|
||||
//
|
||||
this.linkLabel1.AutoSize = true;
|
||||
this.linkLabel1.BackColor = System.Drawing.Color.White;
|
||||
this.linkLabel1.Location = new System.Drawing.Point(200, 22);
|
||||
this.linkLabel1.Name = "linkLabel1";
|
||||
this.linkLabel1.Size = new System.Drawing.Size(236, 25);
|
||||
this.linkLabel1.TabIndex = 2;
|
||||
this.linkLabel1.TabStop = true;
|
||||
this.linkLabel1.Text = "www.opcfoundation.org";
|
||||
this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
|
||||
this.linkLabel1.Click += new System.EventHandler(this.linkLabel1_Click);
|
||||
//
|
||||
// label1
|
||||
//
|
||||
this.label1.AutoSize = true;
|
||||
this.label1.BackColor = System.Drawing.Color.White;
|
||||
this.label1.Font = new System.Drawing.Font("Arial", 10F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.label1.Location = new System.Drawing.Point(200, 6);
|
||||
this.label1.Name = "label1";
|
||||
this.label1.Size = new System.Drawing.Size(389, 32);
|
||||
this.label1.TabIndex = 3;
|
||||
this.label1.Text = "OPC UA Technology Sample";
|
||||
//
|
||||
// label2
|
||||
//
|
||||
this.label2.BackColor = System.Drawing.Color.White;
|
||||
this.label2.Font = new System.Drawing.Font("Arial", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.label2.Location = new System.Drawing.Point(3, 74);
|
||||
this.label2.Name = "label2";
|
||||
this.label2.Size = new System.Drawing.Size(230, 16);
|
||||
this.label2.TabIndex = 4;
|
||||
this.label2.Text = "Unified Architecture demonstration app";
|
||||
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
|
||||
//
|
||||
// appName
|
||||
//
|
||||
this.appName.BackColor = System.Drawing.Color.White;
|
||||
this.appName.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
||||
this.appName.Location = new System.Drawing.Point(203, 44);
|
||||
this.appName.Name = "appName";
|
||||
this.appName.Size = new System.Drawing.Size(306, 19);
|
||||
this.appName.TabIndex = 8;
|
||||
this.appName.Text = "Sample Application";
|
||||
this.appName.TextAlign = System.Drawing.ContentAlignment.TopCenter;
|
||||
//
|
||||
// HeaderBranding
|
||||
//
|
||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Inherit;
|
||||
this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
|
||||
this.BackColor = System.Drawing.Color.White;
|
||||
this.Controls.Add(this.label2);
|
||||
this.Controls.Add(this.label1);
|
||||
this.Controls.Add(this.linkLabel1);
|
||||
this.Controls.Add(this.pictureBox1);
|
||||
this.Controls.Add(this.appName);
|
||||
this.MaximumSize = new System.Drawing.Size(0, 100);
|
||||
this.MinimumSize = new System.Drawing.Size(500, 90);
|
||||
this.Name = "HeaderBranding";
|
||||
this.Padding = new System.Windows.Forms.Padding(3);
|
||||
this.Size = new System.Drawing.Size(591, 90);
|
||||
this.Load += new System.EventHandler(this.ServerHeaderBranding_Load);
|
||||
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
|
||||
this.ResumeLayout(false);
|
||||
this.PerformLayout();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
private System.Windows.Forms.PictureBox pictureBox1;
|
||||
private System.Windows.Forms.LinkLabel linkLabel1;
|
||||
private System.Windows.Forms.Label label1;
|
||||
private System.Windows.Forms.Label label2;
|
||||
private System.Windows.Forms.ToolTip toolTip1;
|
||||
private System.Windows.Forms.Label appName;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace OpcUaServer.Server
|
||||
{
|
||||
public partial class HeaderBreading : UserControl
|
||||
{
|
||||
public HeaderBreading()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
System.Diagnostics.Process.Start(linkLabel1.Text);
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private void linkLabel1_Click(object sender, EventArgs e)
|
||||
{
|
||||
linkLabel1_LinkClicked(sender, null);
|
||||
}
|
||||
|
||||
private void pictureBox2_Click(object sender, EventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
System.Diagnostics.Process.Start("http://www.opcfoundation.org/certification");
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private void ServerHeaderBranding_Load(object sender, EventArgs e)
|
||||
{
|
||||
appName.Text = this.Parent.Text;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
namespace OpcUaServer.Server
|
||||
{
|
||||
public interface IServerDecorator
|
||||
{
|
||||
void SetNodeValue(string nodeName, object value);
|
||||
void ReportEvent(string nodeName, string eventMessage, string severity, string value, bool active);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using System.Collections.Generic;
|
||||
using Opc.Ua;
|
||||
|
||||
namespace OpcUaServer.Server.Model
|
||||
{
|
||||
public class FolderInstanceState
|
||||
{
|
||||
public FolderInstanceState()
|
||||
{
|
||||
Variables = new Dictionary<string, object>();
|
||||
}
|
||||
public FolderState Folder { get; set; }
|
||||
public Dictionary<string, object> Variables { get; }
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace OpcUaServer.Server
|
||||
{
|
||||
public static partial class Namespaces
|
||||
{
|
||||
public const string ServerApplications = "http://opcfoundation.org/Server";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
using Opc.Ua.Configuration;
|
||||
|
||||
namespace OpcUaServer.Server.OpcUa
|
||||
{
|
||||
public sealed class ApplicationMessageDlg : IApplicationMessageDlg
|
||||
{
|
||||
private string _message = string.Empty;
|
||||
private MessageBoxButtons _buttons = MessageBoxButtons.OK;
|
||||
|
||||
public override void Message(string text, bool ask = false)
|
||||
{
|
||||
_message = text;
|
||||
_buttons = ask ? MessageBoxButtons.YesNo : MessageBoxButtons.OK;
|
||||
}
|
||||
|
||||
public override async Task<bool> ShowAsync()
|
||||
{
|
||||
DialogResult result = MessageBox.Show(_message, "OPC UA", _buttons);
|
||||
return await Task.FromResult((result == DialogResult.OK) || (result == DialogResult.Yes));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,401 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{1E81F982-2E67-4F37-9D0D-C1E1F2C3C415}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>OpcUaServer.Server</RootNamespace>
|
||||
<AssemblyName>OpcUaServer.Server</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>none</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="BouncyCastle.Crypto, Version=1.8.5.0, Culture=neutral, PublicKeyToken=0e99375e54769942, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Portable.BouncyCastle.1.8.5.2\lib\net40\BouncyCastle.Crypto.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\log4net.2.0.8\lib\net45-full\log4net.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Connections.Abstractions, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Connections.Abstractions.3.0.0\lib\netstandard2.0\Microsoft.AspNetCore.Connections.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Hosting, Version=2.2.7.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Hosting.2.2.7\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Hosting.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Hosting.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Hosting.Server.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Hosting.Server.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Server.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Http, Version=2.2.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Http.2.2.2\lib\netstandard2.0\Microsoft.AspNetCore.Http.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Http.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Http.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Http.Extensions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Http.Extensions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Extensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Http.Features, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Http.Features.3.0.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Features.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Server.Kestrel, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Server.Kestrel.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Server.Kestrel.Core, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Server.Kestrel.Core.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Server.Kestrel.Https, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Server.Kestrel.Https.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Https.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets, Version=2.2.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.2.2.1\lib\netstandard2.0\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.AspNetCore.WebUtilities, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.AspNetCore.WebUtilities.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.WebUtilities.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.1.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Configuration, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.Configuration.3.0.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Configuration.Abstractions, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.Configuration.Abstractions.3.0.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Configuration.Binder, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.Configuration.Binder.3.0.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Configuration.EnvironmentVariables, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.Configuration.EnvironmentVariables.3.0.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.EnvironmentVariables.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Configuration.FileExtensions, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.Configuration.FileExtensions.3.0.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.FileExtensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.3.0.0\lib\net461\Microsoft.Extensions.DependencyInjection.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.3.0.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.FileProviders.Abstractions, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.FileProviders.Abstractions.3.0.0\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.FileProviders.Physical, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.FileProviders.Physical.3.0.0\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Physical.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.FileSystemGlobbing, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.FileSystemGlobbing.3.0.0\lib\netstandard2.0\Microsoft.Extensions.FileSystemGlobbing.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Hosting.Abstractions, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.Hosting.Abstractions.3.0.0\lib\netstandard2.0\Microsoft.Extensions.Hosting.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Logging, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.Logging.3.0.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.Logging.Abstractions.3.0.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.ObjectPool, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.ObjectPool.3.0.0\lib\netstandard2.0\Microsoft.Extensions.ObjectPool.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Options, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.Options.3.0.0\lib\netstandard2.0\Microsoft.Extensions.Options.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.PlatformAbstractions, Version=1.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.PlatformAbstractions.1.1.0\lib\net451\Microsoft.Extensions.PlatformAbstractions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Extensions.Primitives, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Extensions.Primitives.3.0.0\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Net.Http.Headers, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Net.Http.Headers.2.2.0\lib\netstandard2.0\Microsoft.Net.Http.Headers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Opc.Ua.Client, Version=1.4.354.0, Culture=neutral, PublicKeyToken=bfa7a73c5cf4b6e8, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\OPCFoundation.NetStandard.Opc.Ua.1.4.354.23\lib\net46\Opc.Ua.Client.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Opc.Ua.Configuration, Version=1.4.354.0, Culture=neutral, PublicKeyToken=bfa7a73c5cf4b6e8, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\OPCFoundation.NetStandard.Opc.Ua.1.4.354.23\lib\net46\Opc.Ua.Configuration.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Opc.Ua.Core, Version=1.4.354.0, Culture=neutral, PublicKeyToken=bfa7a73c5cf4b6e8, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\OPCFoundation.NetStandard.Opc.Ua.1.4.354.23\lib\net46\Opc.Ua.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Opc.Ua.Gds.Client.Common, Version=1.4.354.0, Culture=neutral, PublicKeyToken=bfa7a73c5cf4b6e8, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\OPCFoundation.NetStandard.Opc.Ua.1.4.354.23\lib\net46\Opc.Ua.Gds.Client.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Opc.Ua.Gds.Server.Common, Version=1.4.354.0, Culture=neutral, PublicKeyToken=bfa7a73c5cf4b6e8, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\OPCFoundation.NetStandard.Opc.Ua.1.4.354.23\lib\net46\Opc.Ua.Gds.Server.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Opc.Ua.Server, Version=1.4.354.0, Culture=neutral, PublicKeyToken=bfa7a73c5cf4b6e8, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\OPCFoundation.NetStandard.Opc.Ua.1.4.354.23\lib\net46\Opc.Ua.Server.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.AppContext, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Collections.Immutable, Version=1.2.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Collections.Immutable.1.6.0\lib\netstandard2.0\System.Collections.Immutable.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Collections.NonGeneric, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Collections.NonGeneric.4.3.0\lib\net46\System.Collections.NonGeneric.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Collections.Specialized, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Collections.Specialized.4.3.0\lib\net46\System.Collections.Specialized.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ComponentModel.Annotations, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.ComponentModel.Annotations.4.6.0\lib\net461\System.ComponentModel.Annotations.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.ComponentModel.DataAnnotations" />
|
||||
<Reference Include="System.Configuration" />
|
||||
<Reference Include="System.Console, Version=4.0.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Console.4.3.1\lib\net46\System.Console.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Data.Common, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Data.Common.4.3.0\lib\net451\System.Data.Common.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Data.OracleClient" />
|
||||
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.4.6.0\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.IdentityModel" />
|
||||
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Compression.FileSystem" />
|
||||
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Pipelines, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.Pipelines.4.6.0\lib\netstandard2.0\System.IO.Pipelines.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Net" />
|
||||
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.NameResolution, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.NameResolution.4.3.0\lib\net46\System.Net.NameResolution.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Security, Version=4.0.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Security.4.3.2\lib\net46\System.Net.Security.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.WebSockets, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.WebSockets.4.3.0\lib\net46\System.Net.WebSockets.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.WebSockets.Client, Version=4.0.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.WebSockets.Client.4.3.2\lib\net46\System.Net.WebSockets.Client.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Numerics" />
|
||||
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Private.ServiceModel, Version=4.6.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Private.ServiceModel.4.6.0\lib\netstandard2.0\System.Private.ServiceModel.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Reflection.DispatchProxy, Version=4.0.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Reflection.DispatchProxy.4.6.0\lib\net461\System.Reflection.DispatchProxy.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Reflection.Metadata, Version=1.4.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Reflection.Metadata.1.7.0\lib\netstandard2.0\System.Reflection.Metadata.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Reflection.TypeExtensions, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Reflection.TypeExtensions.4.6.0\lib\net461\System.Reflection.TypeExtensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.6.0\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.Serialization" />
|
||||
<Reference Include="System.Runtime.Serialization.Primitives, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.Serialization.Primitives.4.3.0\lib\net46\System.Runtime.Serialization.Primitives.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.Serialization.Xml, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.Serialization.Xml.4.3.0\lib\net46\System.Runtime.Serialization.Xml.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security" />
|
||||
<Reference Include="System.Security.AccessControl, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.AccessControl.4.6.0\lib\net461\System.Security.AccessControl.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Claims, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Claims.4.3.0\lib\net46\System.Security.Claims.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net461\System.Security.Cryptography.Algorithms.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Cng, Version=4.3.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Cng.4.6.0\lib\net461\System.Security.Cryptography.Cng.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Xml, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Xml.4.6.0\lib\net461\System.Security.Cryptography.Xml.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Permissions, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Permissions.4.6.0\lib\net461\System.Security.Permissions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Principal.Windows, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Principal.Windows.4.6.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ServiceModel" />
|
||||
<Reference Include="System.ServiceModel.Primitives, Version=4.6.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.ServiceModel.Primitives.4.6.0\lib\net461\System.ServiceModel.Primitives.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.ServiceProcess" />
|
||||
<Reference Include="System.Text.Encodings.Web, Version=4.0.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Text.Encodings.Web.4.6.0\lib\netstandard2.0\System.Text.Encodings.Web.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.3\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Transactions" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.XmlDocument, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Xml.XmlDocument.4.3.0\lib\net46\System.Xml.XmlDocument.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="WindowsBase" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\SharedAssemblyInfo.cs">
|
||||
<Link>SharedAssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="CondHelper.cs" />
|
||||
<Compile Include="IServerDecorator.cs" />
|
||||
<Compile Include="ServerDecorator.cs" />
|
||||
<Compile Include="Services\ServerAuthenticationService.cs" />
|
||||
<Compile Include="Services\INodeParser.cs" />
|
||||
<Compile Include="Model\FolderInstanceState.cs" />
|
||||
<Compile Include="Services\ApplicationInstanceBuilder.cs" />
|
||||
<Compile Include="OpcUa\ApplicationMessageDlg.cs" />
|
||||
<Compile Include="Services\ConsoleServerStarter.cs" />
|
||||
<Compile Include="HeaderBreading.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="HeaderBreading.Designer.cs">
|
||||
<DependentUpon>HeaderBreading.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Services\IServerStarter.cs" />
|
||||
<Compile Include="Server.cs" />
|
||||
<Compile Include="ServerConfiguration.cs" />
|
||||
<Compile Include="Services\ServerNodeManager.cs" />
|
||||
<Compile Include="Namespaces.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Services\XmlNodeParser.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
<None Include="CONF\DATA\.placeholder">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Server.Config.xml">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\OpcUaCommon\OpcUaCommon.csproj">
|
||||
<Project>{4C09FE6B-20FE-4A16-8443-F8BE8AE0849A}</Project>
|
||||
<Name>OpcUaCommon</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.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\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
||||
@@ -0,0 +1,9 @@
|
||||
namespace OpcUaServer.Server
|
||||
{
|
||||
internal static class Program
|
||||
{
|
||||
private static void Main(string[] args)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
using System.Reflection;
|
||||
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("OpcUaServer.Server")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Se il progetto viene esposto a COM, il GUID seguente verrà utilizzato come ID della libreria dei tipi
|
||||
[assembly: Guid("1e81f982-2e67-4f37-9d0d-c1e1f2c3c415")]
|
||||
|
||||
@@ -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,204 @@
|
||||
using Opc.Ua;
|
||||
using Opc.Ua.Server;
|
||||
using OpcUaCommon.Services;
|
||||
using OpcUaServer.Server.Services;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace OpcUaServer.Server
|
||||
{
|
||||
public class Server : StandardServer
|
||||
{
|
||||
#region Private Fields
|
||||
|
||||
private readonly string _pathXml;
|
||||
private readonly IPrinter _printer;
|
||||
private readonly ServerAuthenticationService _serverAuthenticationService;
|
||||
private ServerNodeManager _serverNodeManager;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Public Fields
|
||||
|
||||
/// <summary>
|
||||
/// Elenco dei nodi vietati ("P") per user non autenticati
|
||||
/// </summary>
|
||||
public static List<string> NodeVetoList = new List<string>();
|
||||
|
||||
#endregion Public Fields
|
||||
|
||||
#region Public Constructors
|
||||
|
||||
public Server(IPrinter printer, string pathXml)
|
||||
{
|
||||
_printer = printer;
|
||||
_pathXml = pathXml;
|
||||
_serverAuthenticationService = new ServerAuthenticationService(this);
|
||||
}
|
||||
|
||||
#endregion Public Constructors
|
||||
|
||||
#region Public Events
|
||||
|
||||
/// <summary>
|
||||
/// Evento richiesta refresh invio dellos tato attuale delel conditions
|
||||
/// </summary>
|
||||
public event EventHandler eh_reqRefreshCondition;
|
||||
|
||||
#endregion Public Events
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private void SessionManager_ImpersonateUser(Session session, ImpersonateEventArgs args)
|
||||
{
|
||||
// check for a user name token.
|
||||
_printer.Print(">>>>> Server: Authentication for session starting");
|
||||
|
||||
switch (args.NewIdentity)
|
||||
{
|
||||
case UserNameIdentityToken userNameToken:
|
||||
args.Identity =
|
||||
_serverAuthenticationService.VerifyPassword(userNameToken,
|
||||
LoadServerProperties().ProductUri);
|
||||
_printer.Print(">>>>> Server: Authentication for session userNameToken Accepted: " + args.Identity.DisplayName);
|
||||
break;
|
||||
|
||||
case X509IdentityToken x509Token:
|
||||
_serverAuthenticationService.VerifyUserTokenCertificate(x509Token.Certificate,
|
||||
LoadServerProperties().ProductUri);
|
||||
args.Identity = new UserIdentity(x509Token);
|
||||
|
||||
_printer.Print(">>>>> Server: Authentication for session X509 Token Accepted: " +
|
||||
args.Identity.DisplayName);
|
||||
break;
|
||||
|
||||
default:
|
||||
_printer.Print(">>>>> Server: Authentication for session Anonymous: ");
|
||||
break;
|
||||
}
|
||||
// 2019.04.08: aggiunta task x forzare il refresh/reinvio di TUTTE le conditions attive al momento in cui si è connesso il NUOVO client...
|
||||
sendCurrCond();
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected override MasterNodeManager CreateMasterNodeManager(IServerInternal server, ApplicationConfiguration configuration)
|
||||
{
|
||||
_printer.Print(">>>>> Server: Creating node manager");
|
||||
|
||||
_serverNodeManager = new ServerNodeManager(server, configuration, _printer, new XmlNodeParser(), _pathXml);
|
||||
var nodeManagers = new List<INodeManager>
|
||||
{
|
||||
_serverNodeManager
|
||||
};
|
||||
|
||||
return new MasterNodeManager(server, configuration, null, nodeManagers.ToArray());
|
||||
}
|
||||
|
||||
protected override ServerProperties LoadServerProperties()
|
||||
{
|
||||
var properties = new ServerProperties
|
||||
{
|
||||
ManufacturerName = "Steamware",
|
||||
ProductName = "Server",
|
||||
ProductUri = "http://opcfoundation.org/Quickstart/ReferenceServer/v1.03",
|
||||
SoftwareVersion = Utils.GetAssemblySoftwareVersion(),
|
||||
BuildNumber = Utils.GetAssemblyBuildNumber(),
|
||||
BuildDate = Utils.GetAssemblyTimestamp()
|
||||
};
|
||||
|
||||
return properties;
|
||||
}
|
||||
|
||||
protected override void OnServerStarted(IServerInternal server)
|
||||
{
|
||||
base.OnServerStarted(server);
|
||||
|
||||
server.SessionManager.ImpersonateUser += SessionManager_ImpersonateUser;
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public override ResponseHeader Browse(RequestHeader requestHeader, ViewDescription view, uint requestedMaxReferencesPerNode, BrowseDescriptionCollection nodesToBrowse, out BrowseResultCollection results, out DiagnosticInfoCollection diagnosticInfos)
|
||||
{
|
||||
results = null;
|
||||
diagnosticInfos = null;
|
||||
|
||||
OperationContext context = ValidateRequest(requestHeader, RequestType.Browse);
|
||||
|
||||
try
|
||||
{
|
||||
if (nodesToBrowse == null || nodesToBrowse.Count == 0)
|
||||
{
|
||||
throw new ServiceResultException(StatusCodes.BadNothingToDo);
|
||||
}
|
||||
|
||||
bool filter = false;
|
||||
|
||||
// return empty browse results for Anonymous users
|
||||
// This logic should be further extended....
|
||||
if (context.UserIdentity.TokenType == UserTokenType.Anonymous)
|
||||
filter = true;
|
||||
|
||||
// legge gli oggetti contenuti nell'elemento richeisto
|
||||
ServerInternal.NodeManager.Browse(context, view, requestedMaxReferencesPerNode, nodesToBrowse, out results, out diagnosticInfos);
|
||||
|
||||
// se attivato il filtro == utente anonimo
|
||||
if (filter)
|
||||
{
|
||||
foreach (var res in results)
|
||||
{
|
||||
// rimuove tutto tranne status...
|
||||
//res.References.RemoveAll(x => x.BrowseName.Name.StartsWith("Machine/") && x.BrowseName.Name != "Machine/Status");
|
||||
//res.References.RemoveAll(x => x.NodeClass == NodeClass.Variable && (x.BrowseName.Name.StartsWith("Machine/") && x.BrowseName.Name != "Machine/Status"));
|
||||
res.References.RemoveAll(x => x.BrowseName.Name.StartsWith("Machine/") && NodeVetoList.Contains(x.BrowseName.Name));
|
||||
}
|
||||
}
|
||||
|
||||
return CreateResponse(requestHeader, context.StringTable);
|
||||
}
|
||||
catch (ServiceResultException e)
|
||||
{
|
||||
lock (ServerInternal.DiagnosticsWriteLock)
|
||||
{
|
||||
ServerInternal.ServerDiagnostics.RejectedRequestsCount++;
|
||||
|
||||
if (IsSecurityError(e.StatusCode))
|
||||
{
|
||||
ServerInternal.ServerDiagnostics.SecurityRejectedRequestsCount++;
|
||||
}
|
||||
}
|
||||
|
||||
throw TranslateException(context, e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
OnRequestComplete(context);
|
||||
}
|
||||
}
|
||||
|
||||
public void ReportEvent(string nodeName, string eventMessage, string severity, string value, bool active)
|
||||
{
|
||||
_serverNodeManager.ReportEvent(nodeName, eventMessage, severity, value, active);
|
||||
}
|
||||
|
||||
public void sendCurrCond()
|
||||
{
|
||||
if (eh_reqRefreshCondition != null)
|
||||
{
|
||||
eh_reqRefreshCondition(this, new EventArgs());
|
||||
}
|
||||
}
|
||||
|
||||
public void SetNodeValue(string nodeName, object value)
|
||||
{
|
||||
_serverNodeManager.SetNodeValue(nodeName, value);
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
using System.Runtime.Serialization;
|
||||
|
||||
namespace OpcUaServer.Server
|
||||
{
|
||||
[DataContract(Namespace=Namespaces.ServerApplications)]
|
||||
public class ServerConfiguration
|
||||
{
|
||||
public ServerConfiguration()
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
[OnDeserializing()]
|
||||
private void Initialize(StreamingContext context)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
|
||||
private static void Initialize()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
using OpcUaCommon.Services;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpcUaServer.Server
|
||||
{
|
||||
public class ServerDecorator : IServerDecorator
|
||||
{
|
||||
public Server Server { get; }
|
||||
|
||||
/// <summary>
|
||||
/// lettore file configurazione
|
||||
/// </summary>
|
||||
protected AppSettingsReader configAppSetReader;
|
||||
/// <summary>
|
||||
/// Attesa x resend condition post connessione nuovo client
|
||||
/// </summary>
|
||||
protected int waitResendCondition = 1000;
|
||||
/// <summary>
|
||||
/// Dictionary dell'elenco delle condizioni passate dal server con ULTIMO stato disponibile (attiva/disattiva)
|
||||
/// </summary>
|
||||
protected Dictionary<string, CondHelper> currConditions;
|
||||
/// <summary>
|
||||
/// Elenco dei valori dei nodi (Property + Value)
|
||||
/// </summary>
|
||||
protected Dictionary<string, object> currNodeValues;
|
||||
|
||||
public ServerDecorator(IPrinter printer, string pathXml)
|
||||
{
|
||||
currConditions = new Dictionary<string, CondHelper>();
|
||||
currNodeValues = new Dictionary<string, object>();
|
||||
Server = new Server(printer, pathXml);
|
||||
Server.eh_reqRefreshCondition += Server_eh_reqRefreshConditionAsync;
|
||||
// conf x tempo std resend...
|
||||
configAppSetReader = new AppSettingsReader();
|
||||
var rawVal = configAppSetReader.GetValue("waitResendCondition", typeof(string)).ToString();
|
||||
int.TryParse(rawVal, out waitResendCondition);
|
||||
}
|
||||
/// <summary>
|
||||
/// Riporta richeista refresh delle condizioni
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
public async void Server_eh_reqRefreshConditionAsync(object sender, System.EventArgs e)
|
||||
{
|
||||
// attenzione con MQTT reinvia solo ULTIME VARIAZIONI ALLARMI (altri stati li considera come già inviati...)
|
||||
await sendCurrentConditions();
|
||||
// commentato invio valori on refresh che NON serve...
|
||||
//await sendAllPropVal();
|
||||
}
|
||||
|
||||
public async Task<string> sendCurrentConditions()
|
||||
{
|
||||
string answ = "";
|
||||
await Task.Run(() =>
|
||||
{
|
||||
Thread.Sleep(waitResendCondition);
|
||||
foreach (var item in currConditions)
|
||||
{
|
||||
// decifro valori...
|
||||
CondHelper currCond = item.Value;
|
||||
// invio con ReportEvent!
|
||||
Server.ReportEvent(currCond.nodeName, currCond.eventMessage, currCond.severity, currCond.conditionName, currCond.activeStatus);
|
||||
}
|
||||
});
|
||||
return answ;
|
||||
}
|
||||
/// <summary>
|
||||
/// Effettua refresh di TUTTI i nodi NON conditions (proprietà, valori)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<string> sendAllPropVal()
|
||||
{
|
||||
string answ = "";
|
||||
await Task.Run(() =>
|
||||
{
|
||||
Thread.Sleep(waitResendCondition);
|
||||
foreach (var item in currNodeValues)
|
||||
{
|
||||
// invio con ReportEvent!
|
||||
Server.SetNodeValue(item.Key, item.Value);
|
||||
}
|
||||
});
|
||||
return answ;
|
||||
}
|
||||
|
||||
public void SetNodeValue(string nodeName, object value)
|
||||
{
|
||||
// se c'è elimino
|
||||
if (currNodeValues.ContainsKey(nodeName))
|
||||
{
|
||||
currNodeValues.Remove(nodeName);
|
||||
}
|
||||
currNodeValues.Add(nodeName, value);
|
||||
// faccio report valore!
|
||||
Server.SetNodeValue(nodeName, value);
|
||||
}
|
||||
|
||||
public void ReportEvent(string nodeName, string eventMessage, string severity, string conditionName, bool activeStatus)
|
||||
{
|
||||
// salvo in dictionary delle condition quella corrente... key è nodeName + value...
|
||||
string cKey = $"{nodeName}:{conditionName}";
|
||||
CondHelper currStatus = new CondHelper()
|
||||
{
|
||||
nodeName = nodeName,
|
||||
eventMessage = eventMessage,
|
||||
severity = severity,
|
||||
conditionName = conditionName,
|
||||
activeStatus = activeStatus
|
||||
};
|
||||
|
||||
// se c'è elimino
|
||||
if (currConditions.ContainsKey(cKey))
|
||||
{
|
||||
currConditions.Remove(cKey);
|
||||
}
|
||||
currConditions.Add(cKey, currStatus);
|
||||
Server.ReportEvent(nodeName, eventMessage, severity, conditionName, activeStatus);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
using Opc.Ua;
|
||||
using Opc.Ua.Configuration;
|
||||
using OpcUaCommon.Services;
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace OpcUaServer.Server.Services
|
||||
{
|
||||
public class ApplicationInstanceBuilder
|
||||
{
|
||||
private readonly IPrinter _printer;
|
||||
private readonly Server _server;
|
||||
|
||||
public ApplicationInstanceBuilder(IPrinter printer, ServerDecorator server)
|
||||
{
|
||||
_printer = printer;
|
||||
_server = server.Server;
|
||||
}
|
||||
|
||||
public ApplicationInstance Build()
|
||||
{
|
||||
var application = new ApplicationInstance
|
||||
{
|
||||
ApplicationType = ApplicationType.Server,
|
||||
ConfigSectionName = "Server",
|
||||
};
|
||||
|
||||
application.LoadApplicationConfiguration(false).Wait();
|
||||
|
||||
var certificateIsOk = application.CheckApplicationInstanceCertificate(false, 0).Result;
|
||||
if (!certificateIsOk)
|
||||
{
|
||||
throw new Exception("Certificate is not valid.");
|
||||
}
|
||||
|
||||
_printer.Print("***** Server starting... *****");
|
||||
|
||||
|
||||
_printer.Print("***** Server instancing... *****");
|
||||
|
||||
application.Start(_server).Wait();
|
||||
|
||||
_printer.Print("***** Server instanced...*****");
|
||||
|
||||
|
||||
_printer.Print("***** Server endpoints...*****");
|
||||
|
||||
foreach (var endPointUrl in _server.GetEndpoints().Select(x => x.EndpointUrl).Distinct())
|
||||
{
|
||||
_printer.Print(">> Server endpoint: " + endPointUrl);
|
||||
}
|
||||
|
||||
return application;
|
||||
}
|
||||
|
||||
public ApplicationInstance Build(string configFileNamePath)
|
||||
{
|
||||
var application = new ApplicationInstance
|
||||
{
|
||||
ApplicationType = ApplicationType.Server,
|
||||
ConfigSectionName = "Server",
|
||||
};
|
||||
|
||||
if (configFileNamePath == null)
|
||||
{
|
||||
application.LoadApplicationConfiguration(false).Wait();
|
||||
}
|
||||
else
|
||||
{
|
||||
application.LoadApplicationConfiguration(configFileNamePath, false).Wait();
|
||||
}
|
||||
|
||||
var certificateIsOk = application.CheckApplicationInstanceCertificate(false, 0).Result;
|
||||
if (!certificateIsOk)
|
||||
{
|
||||
throw new Exception("Certificate is not valid.");
|
||||
}
|
||||
|
||||
_printer.Print("***** Server starting... *****");
|
||||
|
||||
|
||||
_printer.Print("***** Server instancing... *****");
|
||||
|
||||
application.Start(_server).Wait();
|
||||
|
||||
_printer.Print("***** Server instanced...*****");
|
||||
|
||||
|
||||
_printer.Print("***** Server endpoints...*****");
|
||||
|
||||
foreach (var endPointUrl in _server.GetEndpoints().Select(x => x.EndpointUrl).Distinct())
|
||||
{
|
||||
_printer.Print(">> Server endpoint: " + endPointUrl);
|
||||
}
|
||||
|
||||
return application;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
using OpcUaCommon.Services;
|
||||
using System;
|
||||
|
||||
namespace OpcUaServer.Server.Services
|
||||
{
|
||||
public class ConsoleServerStarter : IServerStarter
|
||||
{
|
||||
private readonly ApplicationInstanceBuilder _applicationInstanceBuilder;
|
||||
private readonly IPrinter _printer;
|
||||
|
||||
public ConsoleServerStarter(ApplicationInstanceBuilder applicationInstanceBuilder, IPrinter printer)
|
||||
{
|
||||
_applicationInstanceBuilder = applicationInstanceBuilder;
|
||||
_printer = printer;
|
||||
}
|
||||
|
||||
public void Start()
|
||||
{
|
||||
InternalStart(null);
|
||||
}
|
||||
|
||||
|
||||
public void Start(string serverConfigurationFilePath)
|
||||
{
|
||||
InternalStart(serverConfigurationFilePath);
|
||||
}
|
||||
|
||||
|
||||
private void InternalStart(string serverConfigurationFilePath)
|
||||
{
|
||||
bool certScaduto = false;
|
||||
certScaduto = startAndCheckCertificato(serverConfigurationFilePath, certScaduto);
|
||||
// se scaduto PROVO a cancellare e riavviare...
|
||||
if (certScaduto)
|
||||
{
|
||||
_printer.Print("Expired Certificate: tray move");
|
||||
string commAppData = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
|
||||
string sourceFolder = string.Format(@"{0}\OPC Foundation\CertificateStores", commAppData);
|
||||
string destFolder = string.Format(@"{0}\OPC Foundation\CertificateStores_{1:yyyy-MM-dd}", commAppData, DateTime.Now);
|
||||
// sposto!
|
||||
System.IO.Directory.Move(sourceFolder, destFolder);
|
||||
// ora riprovo
|
||||
certScaduto = startAndCheckCertificato(serverConfigurationFilePath, certScaduto);
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Prova ad avviare applicazione verificando se il certificato sia scaduto...
|
||||
/// </summary>
|
||||
/// <param name="serverConfigurationFilePath"></param>
|
||||
/// <param name="certScaduto"></param>
|
||||
/// <returns></returns>
|
||||
private bool startAndCheckCertificato(string serverConfigurationFilePath, bool certScaduto)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (serverConfigurationFilePath == null)
|
||||
{
|
||||
_applicationInstanceBuilder.Build();
|
||||
}
|
||||
else
|
||||
{
|
||||
_applicationInstanceBuilder.Build(serverConfigurationFilePath);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_printer.Print(ex.Message);
|
||||
_printer.Print(ex.InnerException.ToString());
|
||||
// controllo e fosse scaduto il certificato
|
||||
certScaduto = ex.InnerException.ToString().IndexOf("Certificate has is expired or not yet valid") >= 0;
|
||||
}
|
||||
|
||||
return certScaduto;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
using System.Collections.Generic;
|
||||
using Opc.Ua;
|
||||
using OpcUaServer.Server.Model;
|
||||
|
||||
namespace OpcUaServer.Server.Services
|
||||
{
|
||||
public interface INodeParser
|
||||
{
|
||||
FolderInstanceState Parse(SystemContext systemContext, IEnumerable<ushort> namespaceIndexes, IList<IReference> externalReferences, string pathXml);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
namespace OpcUaServer.Server.Services
|
||||
{
|
||||
public interface IServerStarter
|
||||
{
|
||||
void Start();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using Opc.Ua;
|
||||
using OpcUaCommon.Services;
|
||||
|
||||
namespace OpcUaServer.Server.Services
|
||||
{
|
||||
public class ServerAuthenticationService
|
||||
{
|
||||
#region Private Fields
|
||||
|
||||
private readonly Server _server;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Public Constructors
|
||||
|
||||
public ServerAuthenticationService(Server server)
|
||||
{
|
||||
_server = server;
|
||||
}
|
||||
|
||||
#endregion Public Constructors
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public static string ReverseString(string s)
|
||||
{
|
||||
char[] array = s.ToCharArray();
|
||||
Array.Reverse(array);
|
||||
return new string(array);
|
||||
}
|
||||
|
||||
public IUserIdentity VerifyPassword(UserNameIdentityToken userNameToken, string productUri)
|
||||
{
|
||||
var userName = userNameToken.UserName;
|
||||
var password = userNameToken.DecryptedPassword;
|
||||
if (string.IsNullOrEmpty(userName))
|
||||
{
|
||||
// an empty username is not accepted.
|
||||
throw ServiceResultException.Create(StatusCodes.BadIdentityTokenInvalid,
|
||||
"Security token is not a valid username token. An empty username is not accepted.");
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(password))
|
||||
{
|
||||
// an empty password is not accepted.
|
||||
throw ServiceResultException.Create(StatusCodes.BadIdentityTokenRejected,
|
||||
"Security token is not a valid username token. An empty password is not accepted.");
|
||||
}
|
||||
|
||||
// User with permission to configure server
|
||||
//if (userName == "sysadmin" && password == "demo")
|
||||
//{
|
||||
// return new SystemConfigurationIdentity(new UserIdentity(userNameToken));
|
||||
//}
|
||||
|
||||
// user / passphrase / pwd
|
||||
// 9206 / 9206_6029 / lH01JCwOzgPG5zjl26p1qA==
|
||||
|
||||
// standard users for CTT verification
|
||||
string passphrase = $"{userName}_{ReverseString(userName)}";
|
||||
//bool hashUser = CryptoUtils.validateUserPwd(userName, password, passphrase);
|
||||
//if ((userName == "scmAdmin" && password == "passwordDifficile"))
|
||||
if (CryptoUtils.validateUserPwd(userName, password, passphrase))
|
||||
return new UserIdentity(userNameToken);
|
||||
|
||||
// construct translation object with default text.
|
||||
var info = new TranslationInfo(
|
||||
"InvalidPassword",
|
||||
"en-US",
|
||||
"Invalid username or password.",
|
||||
userName);
|
||||
|
||||
// create an exception with a vendor defined sub-code.
|
||||
throw new ServiceResultException(new ServiceResult(
|
||||
StatusCodes.BadUserAccessDenied,
|
||||
"InvalidPassword",
|
||||
productUri,
|
||||
new LocalizedText(info)));
|
||||
}
|
||||
|
||||
public void VerifyUserTokenCertificate(X509Certificate2 certificate, string productUri)
|
||||
{
|
||||
try
|
||||
{
|
||||
_server.CertificateValidator.Validate(certificate);
|
||||
|
||||
// determine if self-signed.
|
||||
var isSelfSigned = Utils.CompareDistinguishedName(certificate.Subject, certificate.Issuer);
|
||||
|
||||
// do not allow self signed application certs as user token
|
||||
if (isSelfSigned && Utils.HasApplicationURN(certificate))
|
||||
{
|
||||
throw new ServiceResultException(StatusCodes.BadCertificateUseNotAllowed);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
TranslationInfo info;
|
||||
StatusCode result = StatusCodes.BadIdentityTokenRejected;
|
||||
if (e is ServiceResultException se && se.StatusCode == StatusCodes.BadCertificateUseNotAllowed)
|
||||
{
|
||||
info = new TranslationInfo(
|
||||
"InvalidCertificate",
|
||||
"en-US",
|
||||
"'{0}' is an invalid user certificate.",
|
||||
certificate.Subject);
|
||||
|
||||
result = StatusCodes.BadIdentityTokenInvalid;
|
||||
}
|
||||
else
|
||||
{
|
||||
// construct translation object with default text.
|
||||
info = new TranslationInfo(
|
||||
"UntrustedCertificate",
|
||||
"en-US",
|
||||
"'{0}' is not a trusted user certificate.",
|
||||
certificate.Subject);
|
||||
}
|
||||
|
||||
// create an exception with a vendor defined sub-code.
|
||||
throw new ServiceResultException(new ServiceResult(
|
||||
result,
|
||||
info.Key,
|
||||
productUri,
|
||||
new LocalizedText(info)));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,205 @@
|
||||
using Opc.Ua;
|
||||
using Opc.Ua.Server;
|
||||
using OpcUaCommon.Services;
|
||||
using OpcUaServer.Server.Model;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace OpcUaServer.Server.Services
|
||||
{
|
||||
public class Event
|
||||
{
|
||||
public string Message { get; set; }
|
||||
public string ActiveStatus { get; set; }
|
||||
//public byte[] EventId { get; set; }
|
||||
public PropertyState<byte[]> FullEvent { get; set; }
|
||||
public string ConditionName { get; set; }
|
||||
|
||||
public Event(string name, string status, string condition)
|
||||
{
|
||||
Message = name;
|
||||
ActiveStatus = status;
|
||||
ConditionName = condition;
|
||||
}
|
||||
//public Event(string name, string status, string condition, byte[] id)
|
||||
//{
|
||||
// Message = name;
|
||||
// ActiveStatus = status;
|
||||
// ConditionName = condition;
|
||||
// EventId = id;
|
||||
//}
|
||||
public Event(string name, string status, string condition, PropertyState<byte[]> id)
|
||||
{
|
||||
Message = name;
|
||||
ActiveStatus = status;
|
||||
ConditionName = condition;
|
||||
FullEvent = id;
|
||||
}
|
||||
}
|
||||
|
||||
public class ServerNodeManager : CustomNodeManager2
|
||||
{
|
||||
private readonly IPrinter _printer;
|
||||
private readonly INodeParser _nodeParser;
|
||||
private readonly string _pathXml;
|
||||
|
||||
private FolderInstanceState _folderInstanceState;
|
||||
public List<Event> EventConditionNameAndEventId { get; set; }
|
||||
//public Dictionary<string, byte[]> EventConditionNameAndEventId { get; set; }
|
||||
|
||||
|
||||
public ServerNodeManager(IServerInternal server, ApplicationConfiguration configuration, IPrinter printer, INodeParser nodeParser, string pathXml)
|
||||
: base(server, configuration, Namespaces.ServerApplications)
|
||||
{
|
||||
SystemContext.NodeIdFactory = this;
|
||||
_printer = printer;
|
||||
_nodeParser = nodeParser;
|
||||
_pathXml = pathXml;
|
||||
_folderInstanceState = new FolderInstanceState();
|
||||
EventConditionNameAndEventId = new List<Event>();
|
||||
}
|
||||
|
||||
public override void CreateAddressSpace(IDictionary<NodeId, IList<IReference>> externalReferences)
|
||||
{
|
||||
lock (Lock)
|
||||
{
|
||||
var references = SetExternalReferences(externalReferences);
|
||||
|
||||
try
|
||||
{
|
||||
_folderInstanceState = _nodeParser.Parse(SystemContext, NamespaceIndexes, references, _pathXml);
|
||||
AddRootNotifier(_folderInstanceState.Folder);
|
||||
AddPredefinedNode(SystemContext, _folderInstanceState.Folder);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_printer.Print(">>>>> Server: Error creating the address space, " + e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static IList<IReference> SetExternalReferences(IDictionary<NodeId, IList<IReference>> externalReferences)
|
||||
{
|
||||
if (!externalReferences.TryGetValue(ObjectIds.ObjectsFolder, out var references))
|
||||
{
|
||||
externalReferences[ObjectIds.ObjectsFolder] = references = new List<IReference>();
|
||||
}
|
||||
return references;
|
||||
}
|
||||
|
||||
public void SetNodeValue(string nodeName, object value)
|
||||
{
|
||||
var baseVariableState = ((BaseVariableState)_folderInstanceState.Variables[nodeName]);
|
||||
baseVariableState.Value = value;
|
||||
baseVariableState.Timestamp = DateTime.UtcNow;
|
||||
baseVariableState.ClearChangeMasks(SystemContext, false);
|
||||
}
|
||||
|
||||
public void ReportEvent(string nodeName, string eventMessage, string severity, string value, bool active = true)
|
||||
{
|
||||
if (value != "" && value != " ")
|
||||
{
|
||||
try
|
||||
{
|
||||
var reportedEvent = (BaseObjectState)_folderInstanceState.Variables[nodeName];
|
||||
|
||||
// construct the event.
|
||||
AlarmConditionState node = new AlarmConditionState(null);
|
||||
var symbolicName = nodeName;
|
||||
var _systemContext = SystemContext;
|
||||
var path = nodeName;
|
||||
ushort nameSpaceIndex = NamespaceIndexes.ToArray().First();
|
||||
|
||||
node.SymbolicName = symbolicName;
|
||||
|
||||
// add optional components.
|
||||
node.Comment = new ConditionVariableState<LocalizedText>(node);
|
||||
node.ClientUserId = new PropertyState<string>(node);
|
||||
node.AddComment = new AddCommentMethodState(node);
|
||||
node.ConfirmedState = new TwoStateVariableState(node);
|
||||
node.Confirm = new AddCommentMethodState(node);
|
||||
|
||||
node.SuppressedState = new TwoStateVariableState(node);
|
||||
node.ShelvingState = new ShelvedStateMachineState(node);
|
||||
|
||||
node.EnabledState = new TwoStateVariableState(node);
|
||||
node.EnabledState.TransitionTime = new PropertyState<DateTime>(node.EnabledState);
|
||||
node.EnabledState.EffectiveDisplayName = new PropertyState<LocalizedText>(node.EnabledState);
|
||||
node.EnabledState.Create(_systemContext, null, BrowseNames.EnabledState, null, false);
|
||||
|
||||
// same procedure add optional components to the ActiveState component.
|
||||
node.ActiveState = new TwoStateVariableState(node);
|
||||
node.ActiveState.TransitionTime = new PropertyState<DateTime>(node.ActiveState);
|
||||
node.ActiveState.EffectiveDisplayName = new PropertyState<LocalizedText>(node.ActiveState);
|
||||
node.ActiveState.Create(_systemContext, null, BrowseNames.ActiveState, null, false);
|
||||
|
||||
// specify reference type between the source and the alarm.
|
||||
node.ReferenceTypeId = ReferenceTypeIds.HasEventSource;
|
||||
//e.ReferenceTypeId = ReferenceTypeIds.HasComponent;
|
||||
node.EventNotifier = EventNotifiers.SubscribeToEvents;
|
||||
|
||||
node.Create(
|
||||
_systemContext,
|
||||
new NodeId(path, nameSpaceIndex),
|
||||
new QualifiedName(path, nameSpaceIndex),
|
||||
new LocalizedText("en", symbolicName),
|
||||
true);
|
||||
|
||||
// initialize event information.node
|
||||
node.EventType.Value = node.TypeDefinitionId;
|
||||
node.SourceNode.Value = new NodeId(path, nameSpaceIndex);
|
||||
node.SourceName.Value = path;
|
||||
|
||||
node.SetActiveState(SystemContext, active);
|
||||
node.ConditionName.Value = value;
|
||||
node.Time.Value = DateTime.UtcNow;
|
||||
node.ReceiveTime.Value = node.Time.Value;
|
||||
|
||||
// 2019.08.07 commentato che si pianta
|
||||
//node.LocalTime.Value = Utils.GetTimeZoneInfo();
|
||||
|
||||
// 2019.03.23 imposto forzatamente retain del valore
|
||||
node.EventId.Value = Guid.NewGuid().ToByteArray();
|
||||
node.Retain.Value = true;
|
||||
node.SetEnableState(SystemContext, active);
|
||||
node.SetAreEventsMonitored(_systemContext, true, true);
|
||||
node.ActiveState.Historizing = true;
|
||||
node.AutoReportStateChanges = true;
|
||||
//e.ActiveState.OnConditionRefresh +=
|
||||
|
||||
EventSeverity eventSeverity;
|
||||
|
||||
// fix parse severity da valore numerico
|
||||
eventSeverity = (EventSeverity)Enum.Parse(typeof(EventSeverity), severity);
|
||||
|
||||
node.Initialize(
|
||||
SystemContext,
|
||||
null,
|
||||
eventSeverity,
|
||||
new LocalizedText(eventMessage));
|
||||
|
||||
reportedEvent.ReportEvent(SystemContext, node);
|
||||
#if DEBUG
|
||||
if (active)
|
||||
{
|
||||
_printer.Print(string.Format("---> RepEvent Alarm started | {3} >> {0} | Severity: {1} | Message: {2}", value, severity, eventMessage, nodeName));
|
||||
}
|
||||
else
|
||||
{
|
||||
_printer.Print(string.Format("<--- RepEvent Alarm ceased | {3} >> {0} | Severity: {1} | Message: {2}", value, severity, eventMessage, nodeName));
|
||||
}
|
||||
#endif
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Utils.Trace(e, "Unexpected error in OnRaiseSystemEvents");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||