Merge branch 'develop'

This commit is contained in:
Ferdinando Sodano
2020-11-03 16:45:46 +01:00
167 changed files with 232388 additions and 0 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

+4
View File
@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Vendored
+169
View File
@@ -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"
)
}
+25
View File
@@ -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
+6
View File
@@ -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>
+65
View File
@@ -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>
+251
View File
@@ -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
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="11.0.2" targetFramework="net462" />
</packages>
File diff suppressed because it is too large Load Diff
+55
View File
@@ -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 |
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1001
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
@@ -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 &lt;install_location&gt;/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>
Binary file not shown.

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));
+7
View File
@@ -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...
+15
View File
@@ -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
+687
View 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);
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

+189
View File
@@ -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>
+38
View File
@@ -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
File diff suppressed because it is too large Load Diff
+42
View File
@@ -0,0 +1,42 @@
<MsiWrapper>
<Installer>
<IconFile Detect="executable" Value="base64:AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABMLAAATCwAAAAAA&#xD;&#xA;AAAAAAD/////////////////////////////////////////////////////////////////////&#xD;&#xA;////////////////np6e/2JjZP9tbW7/bXBz/2tsbf9rbW//bG5w/2tsbf9sbW//a21u/2xtbv9r&#xD;&#xA;bG3/bW1t/2xsbP9iYmL/0dHR/15fYP+zopH/ya2Q/9PGuP/EqY3/x66V/9rRyP+/oID/zLmk/9HC&#xD;&#xA;sv/Ux7n/0sGv/9fZ3P/x8PD/kJCQ/5KSkv9iZGX/zLag/+jJqP/WsYr/8OLU/+vXw//TqoD/8OLT&#xD;&#xA;/+LHqv/at5P/1q2D//Heyv8zNjr/vb28/7Ozs/+Pj4//YmRn/7+li//gwaL/69zN/9u+oP/fxar/&#xD;&#xA;4Miu//Dk2P/l0bz/27+h/9WzkP/o1L//z9PW//79/P+lpaX/kJCQ/2FhYf9MTEz/Y19b/2Vnaf9e&#xD;&#xA;Wlb/YF5c/2VmZ/9fX17/YWFg/2JhYP9eWVX/ZGVm/2xsbP9vb2//NjY2/6urq/+Kior/nZ2e////&#xD;&#xA;///u7u3/8/T1//Pz9P/v7+7//f39//j4+P/v8PD/9PX2//Ly8f/t7e3//v7+/2lpaf/Q0ND/u7u7&#xD;&#xA;/35+fv//////+/v7///////+/v7//////7Ozs//T09P///////39/f////////////b29v9jY2P/&#xD;&#xA;9/f3/+jo6P9mZmb///////7+/v/7+/v//////6Kiov8RERH/Ly8v/9jY2P//////+vr6///////N&#xD;&#xA;zc3/cXFx////////////aWlp/+Dg4P///////////5KSkv9qamr/iIiI/5aWlv9PT0//0dHR////&#xD;&#xA;////////n5+f/5WVlf///////////4WFhf+xsbH//////7e3t/9XV1f//////35+fv/ExMT/4uLi&#xD;&#xA;/05OTv/u7u7//////3V1df/Dw8P///////////+wsLD/hoaG///////m5ub/7+/v//////9/f3//&#xD;&#xA;urq6///////n5+f/9PT0//////9hYWH/7Ozs////////////3d3d/2VlZf///////f39//v7+///&#xD;&#xA;////f39//729vf//////+/v7///////e3t7/ZWVl///////9/f3//v7+//////9eXl7/YmJi/3Fx&#xD;&#xA;cf9eXl7/xMTE/4uLi/+8vLz/lZWV/2NjY/91dXX/TU1N/5WVlf//////+/v7////////////8vLy&#xD;&#xA;/9bW1v/Z2dn/0dHR//39/f+CgoL/vLy8/+3t7f/U1NT/19fX/9vb2//8/Pz/////////////////&#xD;&#xA;//////7+/v////////////z8/P//////ra2t/9XV1f///////f39/////////////v7+////////&#xD;&#xA;////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&#xD;&#xA;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>
+4
View File
@@ -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>
+458
View File
@@ -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
+461
View File
@@ -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
+653
View File
@@ -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
+656
View File
@@ -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
+21
View File
@@ -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 '@', ''} |
+1
View File
@@ -0,0 +1 @@

+99
View File
@@ -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);
}
}
}
}
+154
View File
@@ -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
}
}
+60
View File
@@ -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;
}
}
}
+129
View File
@@ -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
}
}
+8
View File
@@ -0,0 +1,8 @@
namespace OpcUaCommon.Services
{
public interface IPrinter
{
void Print(string message);
void PrintVariable(string key, object value);
}
}
+27
View File
@@ -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);
}
}
}
+512
View File
@@ -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
}
}
+14
View File
@@ -0,0 +1,14 @@
namespace OpcUaCommon.Services
{
public class NullPrinter : IPrinter
{
public void Print(string message)
{
}
public void PrintVariable(string key, object value)
{
}
}
}
+16
View File
@@ -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>
+210
View File
@@ -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 @@

+20
View File
@@ -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;
}
}
+130
View File
@@ -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;
}
}
+45
View File
@@ -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; }
}
}
+7
View File
@@ -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>
+9
View File
@@ -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")]
+219
View File
@@ -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>
+204
View File
@@ -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()
{
}
}
}
+126
View File
@@ -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");
}
}
}
}
}

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