Merge remote-tracking branch 'origin/Thermocamera' into develop
This commit is contained in:
@@ -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("THermo.Active.Thermocamera")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("THermo.Active.Thermocamera")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2020")]
|
||||
[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("8d8ec91a-3a15-4a1d-951b-a35e7068debd")]
|
||||
|
||||
// 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,49 @@
|
||||
<?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>{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>THermo.Active.Thermocamera</RootNamespace>
|
||||
<AssemblyName>THermo.Active.Thermocamera</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Xml" />
|
||||
<Reference Include="WindowsBase" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="ThermocameraComunicator.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -0,0 +1,181 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Globalization;
|
||||
using System.IO.MemoryMappedFiles;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
|
||||
namespace Thermo.Active.Thermocamera
|
||||
{
|
||||
|
||||
public class ThermocameraComunicator
|
||||
{
|
||||
const string MMF_REQ = "CMS_MMF_REQ";
|
||||
const string MMF_RES = "CMS_MMF_RES";
|
||||
const int NUM_CHAR_MSG = 5000;
|
||||
const int REQ = 1;
|
||||
const int RES = 2;
|
||||
const int DIM_MMF = NUM_CHAR_MSG * 2 + 2;
|
||||
|
||||
MemoryMappedFile mmf;
|
||||
MemoryMappedFile mmfRes;
|
||||
MemoryMappedViewAccessor accessor;
|
||||
MemoryMappedViewAccessor accessorResp;
|
||||
|
||||
private static ThermocameraComunicator _instance;
|
||||
|
||||
public static ThermocameraComunicator getInstance()
|
||||
{
|
||||
if (_instance == null)
|
||||
_instance = new ThermocameraComunicator();
|
||||
return _instance;
|
||||
}
|
||||
|
||||
private ThermocameraComunicator()
|
||||
{
|
||||
mmf = MemoryMappedFile.CreateOrOpen(MMF_REQ, DIM_MMF);
|
||||
mmfRes = MemoryMappedFile.CreateOrOpen(MMF_RES, DIM_MMF);
|
||||
accessor = mmf.CreateViewAccessor();
|
||||
accessorResp = mmfRes.CreateViewAccessor();
|
||||
}
|
||||
|
||||
public bool takePicture(int timeoutMS)
|
||||
{
|
||||
const string tempCommand = "SetParameter_Integer";
|
||||
string response;
|
||||
|
||||
if (!writeCommand(accessor, tempCommand + ";TAKE_IMAGE;"))
|
||||
return false;
|
||||
if (!readCommand(accessorResp, tempCommand, timeoutMS, out response))
|
||||
return false;
|
||||
if (response != "True;")
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
public bool showWindow(int x, int y, int dimX, int dimY, int timeoutMS)
|
||||
{
|
||||
const string tempCommand = "ShowWindow";
|
||||
string response;
|
||||
if (!writeCommand(accessor, tempCommand + ";" + x + ";" + y + ";" + dimX + ";" + dimY + ";"))
|
||||
return false;
|
||||
if (!readCommand(accessorResp, tempCommand, timeoutMS, out response))
|
||||
return false;
|
||||
if (response != "1;")
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool readTemperature(int x, int y, int timeoutMS, out float temp)
|
||||
{
|
||||
temp = 0f;
|
||||
const string tempCommand = "GetTemperature";
|
||||
string response;
|
||||
|
||||
if (!writeCommand(accessor, tempCommand + ";" + x + ";" + y + ";"))
|
||||
return false;
|
||||
if (!readCommand(accessorResp, tempCommand, timeoutMS, out response))
|
||||
return false;
|
||||
response = response.TrimEnd(';');
|
||||
if (!float.TryParse(response, NumberStyles.Float, CultureInfo.InvariantCulture, out temp))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
public bool readMultiTemperatures(IEnumerable<Point> points, int timeoutMS, out List<float> temp)
|
||||
{
|
||||
temp = new List<float>();
|
||||
const string tempCommand = "GetTemperature";
|
||||
string response;
|
||||
|
||||
string cmdRead = "";
|
||||
foreach (Point point in points)
|
||||
{
|
||||
cmdRead += point.X + ";" + point.Y + ";";
|
||||
}
|
||||
|
||||
if (!writeCommand(accessor, tempCommand + ";" + cmdRead))
|
||||
return false;
|
||||
if (!readCommand(accessorResp, tempCommand, timeoutMS, out response))
|
||||
return false;
|
||||
|
||||
string[] respSplitted = response.Split(';');
|
||||
foreach (string str in respSplitted)
|
||||
{
|
||||
float tmp;
|
||||
if (str.Trim() != "")
|
||||
{
|
||||
if (float.TryParse(str.Trim(), NumberStyles.Float, CultureInfo.InvariantCulture, out tmp))
|
||||
temp.Add(tmp);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private bool writeCommand(MemoryMappedViewAccessor accessor, string command)
|
||||
{
|
||||
char[] bufferToClean = Enumerable.Repeat('\0', NUM_CHAR_MSG).ToArray();
|
||||
accessor.WriteArray(0, bufferToClean, 0, bufferToClean.Length);
|
||||
|
||||
char[] bufferToWrite = command.ToCharArray();
|
||||
|
||||
//Write Pre-Command
|
||||
accessor.Write(0, REQ);
|
||||
|
||||
//Write Command
|
||||
accessor.WriteArray(1, bufferToWrite, 0, bufferToWrite.Length);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private bool readCommand(MemoryMappedViewAccessor accessor, string command, int timeoutMS, out string resp)
|
||||
{
|
||||
resp = "";
|
||||
byte response = 0;
|
||||
int totalCycle = 0;
|
||||
int sleepTime = 500;
|
||||
byte[] bytesToRead = new byte[NUM_CHAR_MSG];
|
||||
|
||||
if (!accessor.CanRead) return false;
|
||||
|
||||
//Read Pre-Command
|
||||
while (response != RES)
|
||||
{
|
||||
totalCycle++;
|
||||
accessor.Read(0, out response);
|
||||
if (response != RES)
|
||||
Thread.Sleep(sleepTime);
|
||||
if (totalCycle * sleepTime > timeoutMS)
|
||||
return false;
|
||||
}
|
||||
|
||||
//Read Command
|
||||
accessor.ReadArray(1, bytesToRead, 0, bytesToRead.Length);
|
||||
|
||||
//Elaborate String
|
||||
string textRecieved = Encoding.UTF8.GetString(bytesToRead);
|
||||
if (textRecieved == null) return false;
|
||||
|
||||
string[] textSplitted = textRecieved.Replace("\0", string.Empty).Split(';');
|
||||
if (textSplitted.Length < 2) return false;
|
||||
if (textSplitted[0] != command) return false;
|
||||
|
||||
char[] bufferToClean = Enumerable.Repeat('\0', NUM_CHAR_MSG).ToArray();
|
||||
accessor.WriteArray(0, bufferToClean, 0, bufferToClean.Length);
|
||||
|
||||
//Output
|
||||
textSplitted = textSplitted.Skip(1).ToArray();
|
||||
resp = String.Join(";", textSplitted);
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -113,7 +113,7 @@ namespace Thermo.Active.CmsConnectGateway
|
||||
List<string> alms = new List<string>();
|
||||
foreach (DTOPlcAlarmModel alarm in alarms.PlcAlarms) {
|
||||
int severity = alarm.IsWarning ? 500 : 900;
|
||||
alms.Add(alarm.Id + "|" + severity);
|
||||
alms.Add(alarm.Id.ToString("D6") + "|" + severity);
|
||||
}
|
||||
return string.Join(",", alms);
|
||||
}
|
||||
|
||||
@@ -1,107 +1,112 @@
|
||||
<ModelDesign>
|
||||
<Machine>
|
||||
<Property SymbolicName="Model" BrowseName="Model" DataType="ua:String" ValueRank="Scalar" Value="EIDOS" />
|
||||
<Property SymbolicName="Manufacturer" BrowseName="Manufacturer" DataType="ua:String" ValueRank="Scalar" Value="CMS Industries" />
|
||||
<Property SymbolicName="Serial" BrowseName="Serial" DataType="ua:String" ValueRank="Scalar" Value="9943" />
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="THERMOFORMING_MACHINE" />
|
||||
<Property SymbolicName="BuildYear" BrowseName="BuildYear" DataType="ua:String" ValueRank="Scalar" Value="2020" />
|
||||
<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="ActiveTime" BrowseName="ActiveTime" DataType="ua:Float" ValueRank="Scalar" Units="h" CmsDataType="CounterList" CmsDataIndex="001" CmsDataOpt="HOURS" />
|
||||
<Variable SymbolicName="ActiveWorkingTime" BrowseName="ActiveWorkingTime" 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="SIEMENS" />
|
||||
<Property SymbolicName="Version" BrowseName="Version" DataType="ua:String" ValueRank="Scalar" Value="S71500" />
|
||||
<Condition SymbolicName="Condition" BrowseName="Condition" DataType="ua:String" ValueRank="Scalar" Type="OffNormalAlarmState" Units="" />
|
||||
<Component Name="CncProcesses">
|
||||
<Component Name="01">
|
||||
<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" />
|
||||
<Machine>
|
||||
<Property SymbolicName="Model" BrowseName="Model" DataType="ua:String" ValueRank="Scalar" Value="EIDOS" />
|
||||
<Property SymbolicName="Manufacturer" BrowseName="Manufacturer" DataType="ua:String" ValueRank="Scalar" Value="CMS Industries" />
|
||||
<Property SymbolicName="Serial" BrowseName="Serial" DataType="ua:String" ValueRank="Scalar" Value="9943" />
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="CNC_MACHINE" />
|
||||
<Property SymbolicName="BuildYear" BrowseName="BuildYear" DataType="ua:String" ValueRank="Scalar" Value="2020" />
|
||||
<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="ActiveTime" BrowseName="ActiveTime" DataType="ua:Float" ValueRank="Scalar" Units="h" CmsDataType="CounterList" CmsDataIndex="001" CmsDataOpt="HOURS" />
|
||||
<Variable SymbolicName="ActiveWorkingTime" BrowseName="ActiveWorkingTime" 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="SIEMENS" />
|
||||
<Property SymbolicName="Version" BrowseName="Version" DataType="ua:String" ValueRank="Scalar" Value="S71500" />
|
||||
<Condition SymbolicName="Condition" BrowseName="Condition" DataType="ua:String" ValueRank="Scalar" Type="OffNormalAlarmState" Units="" />
|
||||
<Component Name="CncProcesses">
|
||||
<Component Name="01">
|
||||
<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" />
|
||||
|
||||
<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" />
|
||||
|
||||
</Component>
|
||||
</Component>
|
||||
</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="" />
|
||||
<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" />
|
||||
<Variable SymbolicName="Version" BrowseName="Version" DataType="ua:String" ValueRank="Scalar" Value="" />
|
||||
<Variable SymbolicName="User" BrowseName="User" 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" />
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="X" />
|
||||
<Property SymbolicName="Role" BrowseName="Role" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Property SymbolicName="MasterId" BrowseName="MasterId" DataType="ua:String" ValueRank="Scalar" Value="0" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc"/>
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
</Component>
|
||||
<Component Name="02">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="Y" />
|
||||
<Property SymbolicName="Role" BrowseName="Role" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Property SymbolicName="MasterId" BrowseName="MasterId" DataType="ua:String" ValueRank="Scalar" Value="0" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc"/>
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
</Component>
|
||||
<Component Name="03">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="Z" />
|
||||
<Property SymbolicName="Role" BrowseName="Role" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Property SymbolicName="MasterId" BrowseName="MasterId" DataType="ua:String" ValueRank="Scalar" Value="0" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc"/>
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
</Component>
|
||||
<Component Name="04">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="V" />
|
||||
<Property SymbolicName="Role" BrowseName="Role" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Property SymbolicName="MasterId" BrowseName="MasterId" DataType="ua:String" ValueRank="Scalar" Value="0" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc"/>
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
</Component>
|
||||
<Component Name="05">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="B" />
|
||||
<Property SymbolicName="Role" BrowseName="Role" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Property SymbolicName="MasterId" BrowseName="MasterId" DataType="ua:String" ValueRank="Scalar" Value="0" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc"/>
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
</Component>
|
||||
<Component Name="06">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="C" />
|
||||
<Property SymbolicName="Role" BrowseName="Role" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Property SymbolicName="MasterId" BrowseName="MasterId" DataType="ua:String" ValueRank="Scalar" Value="0" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc"/>
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
</Component>
|
||||
</Component>
|
||||
<Component Name="OperatingGroups">
|
||||
</Component>
|
||||
<Component Name="AuxiliaryGroups">
|
||||
</Component>
|
||||
<Component Name="ProductionProcesses">
|
||||
<Component Name="01">
|
||||
<Component Name="Programs">
|
||||
<Component Name="01">
|
||||
<Variable SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Units="" />
|
||||
</Component>
|
||||
</Component>
|
||||
</Component>
|
||||
</Component>
|
||||
</Machine>
|
||||
<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="" />
|
||||
<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" />
|
||||
<Variable SymbolicName="Version" BrowseName="Version" DataType="ua:String" ValueRank="Scalar" Value="" />
|
||||
<Variable SymbolicName="User" BrowseName="User" 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" />
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="X" />
|
||||
<Property SymbolicName="Role" BrowseName="Role" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Property SymbolicName="MasterId" BrowseName="MasterId" DataType="ua:String" ValueRank="Scalar" Value="0" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc"/>
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
</Component>
|
||||
<Component Name="02">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="Y" />
|
||||
<Property SymbolicName="Role" BrowseName="Role" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Property SymbolicName="MasterId" BrowseName="MasterId" DataType="ua:String" ValueRank="Scalar" Value="0" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc"/>
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
</Component>
|
||||
<Component Name="03">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="Z" />
|
||||
<Property SymbolicName="Role" BrowseName="Role" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Property SymbolicName="MasterId" BrowseName="MasterId" DataType="ua:String" ValueRank="Scalar" Value="0" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc"/>
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
</Component>
|
||||
<Component Name="04">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="V" />
|
||||
<Property SymbolicName="Role" BrowseName="Role" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Property SymbolicName="MasterId" BrowseName="MasterId" DataType="ua:String" ValueRank="Scalar" Value="0" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc"/>
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
</Component>
|
||||
<Component Name="05">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="B" />
|
||||
<Property SymbolicName="Role" BrowseName="Role" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Property SymbolicName="MasterId" BrowseName="MasterId" DataType="ua:String" ValueRank="Scalar" Value="0" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc"/>
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
</Component>
|
||||
<Component Name="06">
|
||||
<Property SymbolicName="Type" BrowseName="Type" DataType="ua:String" ValueRank="Scalar" Value="LINEAR" />
|
||||
<Property SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Value="C" />
|
||||
<Property SymbolicName="Role" BrowseName="Role" DataType="ua:String" ValueRank="Scalar" Value="MASTER" />
|
||||
<Property SymbolicName="MasterId" BrowseName="MasterId" DataType="ua:String" ValueRank="Scalar" Value="0" />
|
||||
<Variable SymbolicName="Load" BrowseName="Load" DataType="ua:Float" ValueRank="Scalar" Units="Perc"/>
|
||||
<Variable SymbolicName="CurrentPos" BrowseName="CurrentPos" DataType="ua:Float" ValueRank="Scalar" Units="mm" SGroup="2" DBand="1" VGroup="P" />
|
||||
<Variable SymbolicName="FeedRate" BrowseName="FeedRate" DataType="ua:Float" ValueRank="Scalar" Units="m/min" SGroup="4" DBand="1" VGroup="P" />
|
||||
</Component>
|
||||
</Component>
|
||||
<Component Name="OperatingGroups">
|
||||
</Component>
|
||||
<Component Name="AuxiliaryGroups">
|
||||
</Component>
|
||||
<Component Name="ProductionProcesses">
|
||||
<Component Name="01">
|
||||
<Component Name="Programs">
|
||||
<Component Name="01">
|
||||
<Variable SymbolicName="Name" BrowseName="Name" DataType="ua:String" ValueRank="Scalar" Units="" />
|
||||
</Component>
|
||||
</Component>
|
||||
</Component>
|
||||
</Component>
|
||||
</Machine>
|
||||
</ModelDesign>
|
||||
@@ -76,6 +76,22 @@
|
||||
<key>LoaderXsize</key>
|
||||
<value>1400</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>ThermoCameraXpos</key>
|
||||
<value>68</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>ThermoCameraYpos</key>
|
||||
<value>728</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>ThermoCameraXdim</key>
|
||||
<value>828</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>ThermoCameraYdim</key>
|
||||
<value>1004</value>
|
||||
</entry>
|
||||
</additionalParameters>
|
||||
<unitOfMeasures>
|
||||
<unitOfMeasure id="0" value="" />
|
||||
|
||||
@@ -310,7 +310,12 @@ namespace Thermo.Active.Config
|
||||
else if(elem.Name.LocalName == "Property")
|
||||
Paths.Add(Parent + ":" + elem.Attribute("SymbolicName").Value, elem.Attribute("Value").Value);
|
||||
else
|
||||
Paths.Add(Parent + ":" + elem.Attribute("SymbolicName").Value, "UNAVAILABLE");
|
||||
{
|
||||
if(elem.Attribute("SymbolicName") != null && elem.Attribute("SymbolicName").Value == "Condition")
|
||||
Paths.Add(Parent + ":" + elem.Attribute("SymbolicName").Value, "");
|
||||
else
|
||||
Paths.Add(Parent + ":" + elem.Attribute("SymbolicName").Value, "UNAVAILABLE");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1140,7 +1140,7 @@ public static class ThreadsFunctions
|
||||
NcAdapter ncAdapter = new NcAdapter();
|
||||
try
|
||||
{
|
||||
|
||||
|
||||
//Write all the datamodel
|
||||
if (!RedisController.WriteDatamodel(CMSConnectDataModel))
|
||||
ManageError(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
|
||||
@@ -1153,6 +1153,11 @@ public static class ThreadsFunctions
|
||||
if (!RedisController.WriteActiveVersion(SupportFunctions.GetSoftwareVersionAndBuildDate()))
|
||||
ManageError(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
|
||||
|
||||
//Write the Overrides
|
||||
if (!RedisController.WriteFakeOverrides(1))
|
||||
ManageError(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
|
||||
|
||||
|
||||
List<DTOLanguageModel> availableLanguages = LanguageController.GetLanguageListFromDirectory();
|
||||
if (availableLanguages == null)
|
||||
return;
|
||||
|
||||
@@ -23,12 +23,17 @@ namespace Thermo.Active.Database.Controllers
|
||||
private const string alarmsPath = "Machine:Plc:Condition";
|
||||
private const string processStatusPath = "Machine:Cnc:CncProcesses:%NN%:Status";
|
||||
private const string processModePath = "Machine:Cnc:CncProcesses:%NN%:Mode";
|
||||
private const string processFeedOverridePath = "Machine:Cnc:CncProcesses:%NN%:FeedOverride";
|
||||
private const string processRapidOverridePath = "Machine:Cnc:CncProcesses:%NN%:RapidOverride";
|
||||
private const string processSpeedOverridePath = "Machine:Cnc:CncProcesses:%NN%:SpeedOverride";
|
||||
|
||||
private const string datamodelPath = "AdpConf:DataModel";
|
||||
private const string currentActiveVersionPath = "Machine:Hmi:Version";
|
||||
private const string machineAxisPosition = "Machine:Axes:%NN%:CurrentPos";
|
||||
private const string machineAxisSpeed = "Machine:Axes:%NN%:FeedRate";
|
||||
private const string machineAxisLoad = "Machine:Axes:%NN%:Load";
|
||||
private const string machineAxisName = "Machine:Axes:%NN%:Name";
|
||||
private const string machineEventKpis = "Machine:Events:Kpis";
|
||||
|
||||
public static void WriteProductionNotification(uint ProductionProcess, string Notification)
|
||||
{
|
||||
@@ -122,6 +127,21 @@ namespace Thermo.Active.Database.Controllers
|
||||
return redUtil.man.setRSV(redisHash, status.ToString());
|
||||
}
|
||||
|
||||
public static bool WriteFakeOverrides(uint ProductionProcess)
|
||||
{
|
||||
string redisHash = redUtil.man.redHash(processFeedOverridePath).Replace("%NN%", ProductionProcess.ToString("00"));
|
||||
if (!redUtil.man.setRSV(redisHash, "100"))
|
||||
return false;
|
||||
redisHash = redUtil.man.redHash(processRapidOverridePath).Replace("%NN%", ProductionProcess.ToString("00"));
|
||||
if (!redUtil.man.setRSV(redisHash, "100"))
|
||||
return false;
|
||||
redisHash = redUtil.man.redHash(processSpeedOverridePath).Replace("%NN%", ProductionProcess.ToString("00"));
|
||||
if(!redUtil.man.setRSV(redisHash, "100"))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public static bool WriteCurrentMachinePowerPath(bool status)
|
||||
{
|
||||
string redisHash = redUtil.man.redHash(machinePowerPath);
|
||||
@@ -155,6 +175,14 @@ namespace Thermo.Active.Database.Controllers
|
||||
return redUtil.man.setRSV(redisHash, alarms);
|
||||
}
|
||||
|
||||
public static bool WriteMachineEventKpis(string alarms)
|
||||
{
|
||||
string redisHash = redUtil.man.redHash(machineEventKpis);
|
||||
redUtil.man.ListPush(redisHash, alarms);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public static bool WriteCurrentAxisStatus(Dictionary<int, DTOAxisInfoModel> axis)
|
||||
{
|
||||
foreach(KeyValuePair<int, DTOAxisInfoModel> asse in axis)
|
||||
|
||||
@@ -826,5 +826,70 @@ namespace Thermo.Active.Database.Redis
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region gestione Stack / List
|
||||
|
||||
/// <summary>
|
||||
/// Lunghezza Stack
|
||||
/// </summary>
|
||||
/// <param name="stackName"></param>
|
||||
/// <returns></returns>
|
||||
public long StackLen(string stackName)
|
||||
{
|
||||
return connRedis.GetDatabase().ListLength((RedisKey)stackName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Mette in Stack un valore (F.I.L.O.)
|
||||
/// </summary>
|
||||
/// <param name="stackName"></param>
|
||||
/// <param name="value"></param>
|
||||
public void StackPush(string stackName, string value)
|
||||
{
|
||||
connRedis.GetDatabase().ListRightPush((RedisKey)stackName, (RedisValue)value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupera valore da Stack (F.I.L.O.)
|
||||
/// </summary>
|
||||
/// <param name="stackName"></param>
|
||||
/// <returns></returns>
|
||||
public string StackPop(string stackName)
|
||||
{
|
||||
return connRedis.GetDatabase().ListRightPop((RedisKey)stackName).ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Lunghezza List
|
||||
/// </summary>
|
||||
/// <param name="queueName"></param>
|
||||
/// <returns></returns>
|
||||
public long ListLen(string queueName)
|
||||
{
|
||||
return connRedis.GetDatabase().ListLength((RedisKey)queueName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Mette un valore in List (F.I.F.O.)
|
||||
/// </summary>
|
||||
/// <param name="queueName"></param>
|
||||
/// <returns></returns>
|
||||
public void ListPush(string queueName, string value)
|
||||
{
|
||||
connRedis.GetDatabase().ListRightPush((RedisKey)queueName, (RedisValue)value);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Recupera valore da List (F.I.F.O.)
|
||||
/// </summary>
|
||||
/// <param name="queueName"></param>
|
||||
/// <returns></returns>
|
||||
public string ListPop(string queueName)
|
||||
{
|
||||
return connRedis.GetDatabase().ListLeftPop((RedisKey)queueName).ToString();
|
||||
}
|
||||
|
||||
#endregion gestione Stack / List
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,6 +41,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thermo.Active.CmsConnectGat
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CMS_CORE_Library", "..\cms_core_library\CMS_CORE_Library\CMS_CORE_Library.csproj", "{4ABF8EEF-2B23-483E-ACDC-53214FE28681}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Thermo.Active.Thermocamera", "THermo.Active.Thermocamera\Thermo.Active.Thermocamera.csproj", "{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -219,6 +221,18 @@ Global
|
||||
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x64.Build.0 = Release|x64
|
||||
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x86.ActiveCfg = Release|x86
|
||||
{4ABF8EEF-2B23-483E-ACDC-53214FE28681}.Release|x86.Build.0 = Release|x86
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
@@ -237,6 +251,7 @@ Global
|
||||
{B2366B08-96BD-4F6B-B748-B45089B87A14} = {0769EE3C-4259-4C72-97B4-0CCAEBFA7724}
|
||||
{F9F17F23-660E-488C-A7FA-6A5B35D64313} = {2F873243-A483-40B6-A0F7-65FC3541A269}
|
||||
{49B04D99-0ECD-4900-86D3-7098D61314D7} = {0769EE3C-4259-4C72-97B4-0CCAEBFA7724}
|
||||
{8D8EC91A-3A15-4A1D-951B-A35E7068DEBD} = {0769EE3C-4259-4C72-97B4-0CCAEBFA7724}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {51D459FB-B45B-4A47-984E-46C35F933A82}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Security.Claims;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Web.Http;
|
||||
using Thermo.Active.Database.Controllers;
|
||||
using Thermo.Active.Listeners;
|
||||
using Thermo.Active.Model.DatabaseModels;
|
||||
using Thermo.Active.Model.DTOModels.AlarmModels;
|
||||
using Thermo.Active.Provider;
|
||||
using Thermo.Active.Thermocamera;
|
||||
using static Thermo.Active.Config.ServerConfig;
|
||||
using static Thermo.Active.Model.Constants;
|
||||
|
||||
namespace Thermo.Active.Controllers.WebApi
|
||||
{
|
||||
[RoutePrefix("api/thermocamera")]
|
||||
public class ThermocameraController : ApiController
|
||||
{
|
||||
[Route("show"), HttpPost]
|
||||
public IHttpActionResult GetDataPaginated()
|
||||
{
|
||||
String ThermoCameraXpos = AdditionalParametersConfig["ThermoCameraXpos"];
|
||||
String ThermoCameraYpos = AdditionalParametersConfig["ThermoCameraYpos"];
|
||||
String ThermoCameraXdim = AdditionalParametersConfig["ThermoCameraXdim"];
|
||||
String ThermoCameraYdim = AdditionalParametersConfig["ThermoCameraYdim"];
|
||||
if(ThermoCameraXpos != null && ThermoCameraYpos != null && ThermoCameraXdim != null && ThermoCameraYdim != null)
|
||||
{
|
||||
|
||||
if (ThermocameraComunicator.getInstance().showWindow(Int32.Parse(ThermoCameraXpos), Int32.Parse(ThermoCameraYpos), Int32.Parse(ThermoCameraXdim), Int32.Parse(ThermoCameraYdim), 3000))
|
||||
return Ok();
|
||||
else
|
||||
return BadRequest();
|
||||
|
||||
}
|
||||
return BadRequest();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -459,7 +459,9 @@ namespace Thermo.Active.Listeners.SignalR
|
||||
|
||||
if (Config.ServerConfig.ServerStartupConfig.CmsConnectReady && currProdPanel.NumDone > 0 && currProdPanel.NumDone != LastProdPanelData.NumDone)
|
||||
{
|
||||
//TODO
|
||||
var ts = DateTime.UtcNow.ToString("o");
|
||||
var a = "{\"v\": { \"PART_COUNT\": 1}\"ts\": " + ts + "}";
|
||||
RedisController.WriteMachineEventKpis(a);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -612,6 +614,16 @@ namespace Thermo.Active.Listeners.SignalR
|
||||
// THERMO prod cycle data
|
||||
group.prodCycleData(LastProdCycleData);
|
||||
|
||||
if (Config.ServerConfig.ServerStartupConfig.CmsConnectReady)
|
||||
{
|
||||
RedisController.WriteCurrentAlarms(CMSConnectConstants.ConvertThermoToConnectAlarms(LastAlarms));
|
||||
RedisController.WriteCurrentMachineAlarmPath(CMSConnectConstants.ConvertThermoToConnectMachineAlarm(LastAlarms));
|
||||
RedisController.WriteCurrentMachineStatus(CMSConnectConstants.ConvertThermoToConnectStatus(LastProdCycleData.Status));
|
||||
RedisController.WriteCurrentMachinePowerPath(CMSConnectConstants.ConvertThermoToConnectPower(LastProdCycleData.Status));
|
||||
RedisController.WriteCurrentProcessStatus(1, CMSConnectConstants.ConvertThermoToConnectProcessStatus(LastProdCycleData.Status));
|
||||
RedisController.WriteCurrentProcessMode(1, CMSConnectConstants.ConvertThermoToConnectProcessMode(LastProdCycleData.Mode));
|
||||
}
|
||||
|
||||
Debug.WriteLine(string.Format("{0} {1} Broadcast..completed", DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"), DateTime.Now.Millisecond));
|
||||
Monitor.Exit(_broadcastlock);
|
||||
}
|
||||
|
||||
@@ -227,6 +227,7 @@
|
||||
<Compile Include="Controllers\WebApi\ModulesController.cs" />
|
||||
<Compile Include="Controllers\WebApi\ProdController.cs" />
|
||||
<Compile Include="Controllers\WebApi\StarredUserSoftKeyController.cs" />
|
||||
<Compile Include="Controllers\WebApi\ThermocameraController.cs" />
|
||||
<Compile Include="Controllers\WebApi\WarmersController.cs" />
|
||||
<Compile Include="Controllers\WebApi\RecipeController.cs" />
|
||||
<Compile Include="Controllers\WebApi\AuthorizationController.cs" />
|
||||
@@ -16195,6 +16196,10 @@
|
||||
<Project>{b2366b08-96bd-4f6b-b748-b45089b87a14}</Project>
|
||||
<Name>Thermo.Active.NC</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\THermo.Active.Thermocamera\Thermo.Active.Thermocamera.csproj">
|
||||
<Project>{8d8ec91a-3a15-4a1d-951b-a35e7068debd}</Project>
|
||||
<Name>Thermo.Active.Thermocamera</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\Thermo.Active.UI\Thermo.Active.UI.csproj">
|
||||
<Project>{20fc0937-e7ca-4693-95f9-7a948efd173b}</Project>
|
||||
<Name>Thermo.Active.UI</Name>
|
||||
|
||||
@@ -30,6 +30,17 @@
|
||||
font-size: 32px;
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
|
||||
&.temp{
|
||||
grid-template-columns: 50% 50%;
|
||||
grid-template-rows: 50% 50%;
|
||||
display: grid;
|
||||
font-size: 22px;
|
||||
span{
|
||||
text-align: right;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4683,6 +4683,16 @@ article .box .body {
|
||||
font-weight: bold;
|
||||
color: #fff;
|
||||
}
|
||||
.warmers svg .resistance.temp {
|
||||
grid-template-columns: 50% 50%;
|
||||
grid-template-rows: 50% 50%;
|
||||
display: grid;
|
||||
font-size: 22px;
|
||||
}
|
||||
.warmers svg .resistance.temp span {
|
||||
text-align: right;
|
||||
margin-right: 5px;
|
||||
}
|
||||
.warmers .icon {
|
||||
font-size: 30px;
|
||||
margin-left: 10px;
|
||||
|
||||
+3
@@ -15,6 +15,9 @@ export default class Resistance extends Vue {
|
||||
@Prop({ default: false })
|
||||
selected: boolean;
|
||||
|
||||
@Prop({ default: false })
|
||||
temperature: boolean;
|
||||
|
||||
@Prop({ default: function () { return [253, 216, 53] } })
|
||||
colorFrom: number[];
|
||||
|
||||
|
||||
+14
@@ -2,9 +2,23 @@
|
||||
<div
|
||||
class="resistance"
|
||||
:key="selected"
|
||||
v-if="!temperature"
|
||||
@click="$emit('click')"
|
||||
v-on:touchend="$emit('click')"
|
||||
:style="{backgroundColor:`rgb(${currentColor})`}"
|
||||
>{{channel.setpointHMI}} %</div>
|
||||
<div
|
||||
class="resistance temp"
|
||||
:key="selected"
|
||||
@click="$emit('click')"
|
||||
v-on:touchend="$emit('click')"
|
||||
v-else
|
||||
:style="{backgroundColor:`rgb(${currentColor})`}"
|
||||
>
|
||||
<span>{{channel.setpointHMI}} °C</span>
|
||||
<span>{{channel.setpointHMI}} °C</span>
|
||||
<span>{{channel.setpointHMI}} %</span>
|
||||
<span>{{channel.setpointHMI}} %</span>
|
||||
</div>
|
||||
</template>
|
||||
<script src="./resistance.ts" lang="ts"></script>
|
||||
+92
@@ -0,0 +1,92 @@
|
||||
import Vue from 'vue';
|
||||
import Component from 'vue-class-component';
|
||||
import { Prop } from 'vue-property-decorator';
|
||||
import warmers from "./warmers.vue";
|
||||
import { store } from '@/store';
|
||||
import { thermocameraService } from "@/services/thermocameraService";
|
||||
|
||||
@Component({
|
||||
name: "thermocamera", components: {
|
||||
|
||||
warmers
|
||||
}
|
||||
})
|
||||
export default class Thermocamera extends Vue {
|
||||
|
||||
@Prop()
|
||||
recipe: Recipe.IRecipe;
|
||||
|
||||
selectedChannelIds: number[] = [];
|
||||
uniformChannelValue: number = -1;
|
||||
|
||||
beforeMount(){
|
||||
this.uniformChannelValue = -1;
|
||||
}
|
||||
|
||||
get selectedChannels(): Warmers.IChannel[] {
|
||||
return store.state.warmers.channels.filter(i => this.selectedChannelIds.indexOf(i.idChannel) >= 0);
|
||||
}
|
||||
|
||||
selectionMethod = "none"
|
||||
|
||||
changedSelectValue(v){
|
||||
if(this.uniformChannelValue>=0)
|
||||
for (const c of this.selectedChannels) c.setpointHMI = this.uniformChannelValue;
|
||||
}
|
||||
|
||||
|
||||
zoomIn() {
|
||||
(this.$refs.warmers as any).zoomIn();
|
||||
}
|
||||
|
||||
zoomOut() {
|
||||
(this.$refs.warmers as any).zoomOut();
|
||||
}
|
||||
zoomReset() {
|
||||
(this.$refs.warmers as any).zoomReset();
|
||||
}
|
||||
|
||||
async showcamera(){
|
||||
this.zoomReset()
|
||||
await thermocameraService.show();
|
||||
|
||||
}
|
||||
|
||||
selectionChanged(selected: number[]) {
|
||||
this.selectedChannelIds = []
|
||||
this.uniformChannelValue = -1;
|
||||
this.selectedChannelIds = selected;
|
||||
}
|
||||
|
||||
disableHeater(){
|
||||
|
||||
}
|
||||
|
||||
enableHeater(){
|
||||
|
||||
}
|
||||
|
||||
setAllTemperature(){
|
||||
|
||||
}
|
||||
|
||||
add5() {
|
||||
for (const c of this.selectedChannels) c.setpointHMI = Math.min(Math.max(parseFloat(c.setpointHMI.toString()) + 5, 0), 100);
|
||||
this.$emit("warmersChanged");
|
||||
}
|
||||
|
||||
remove5() {
|
||||
for (const c of this.selectedChannels) c.setpointHMI = Math.min(Math.max(parseFloat(c.setpointHMI.toString()) - 5, 0), 100);
|
||||
this.$emit("warmersChanged");
|
||||
}
|
||||
|
||||
add1() {
|
||||
for (const c of this.selectedChannels) c.setpointHMI = Math.min(Math.max(parseFloat(c.setpointHMI.toString()) + 1, 0), 100);
|
||||
this.$emit("warmersChanged");
|
||||
}
|
||||
|
||||
remove1() {
|
||||
for (const c of this.selectedChannels) c.setpointHMI = Math.min(Math.max(parseFloat(c.setpointHMI.toString()) - 1, 0), 100);
|
||||
this.$emit("warmersChanged");
|
||||
}
|
||||
}
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
<template>
|
||||
<section>
|
||||
<aside class="scrollable auto" v-if="recipe">
|
||||
<div class="box transparent">
|
||||
<div class="body">
|
||||
<div class="divider"></div>
|
||||
|
||||
<div class="input-area">
|
||||
<label>{{'warmers_selection' | localize('Selezione')}}</label>
|
||||
</div>
|
||||
<div class="input-area left grid grid-5">
|
||||
<button
|
||||
class="btn btn-info square"
|
||||
@click="$refs.warmers.toggleSelection('rect')"
|
||||
:class="{pressed: selectionMethod == 'rect'}"
|
||||
>
|
||||
<img src="assets/icons/png/rett.png" />
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-info square"
|
||||
@click="$refs.warmers.toggleSelection('poly')"
|
||||
:class="{pressed: selectionMethod == 'poly'}"
|
||||
>
|
||||
<img src="assets/icons/png/libera.png" />
|
||||
</button>
|
||||
<label></label>
|
||||
<button class="btn btn-info" @click="$refs.warmers.selectAll()">
|
||||
<label>{{'warmers_select_all' | localize('Tutti')}}</label>
|
||||
</button>
|
||||
<button class="btn btn-info" @click="$refs.warmers.selectNone()">
|
||||
<label>{{'warmers_select_none' | localize('Nessuno')}}</label>
|
||||
</button>
|
||||
</div>
|
||||
<div class="input-area left grid">
|
||||
<button
|
||||
class="btn"
|
||||
@click="showcamera"
|
||||
>{{'warmers_showcamera' | localize('Show Camera')}}</button>
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<div class="input-area">
|
||||
<label>{{'warmers_enable' | localize('Gestione Abilitazione')}}</label>
|
||||
</div>
|
||||
<div class="input-area grid left">
|
||||
<button
|
||||
class="btn"
|
||||
@click="enableHeater"
|
||||
>{{'warmers_enabletemp' | localize('Enable selected')}}</button>
|
||||
<button
|
||||
class="btn"
|
||||
@click="disableHeater"
|
||||
>{{'warmers_disabletemp' | localize('Disable selected')}}</button>
|
||||
</div>
|
||||
<div class="divider"></div>
|
||||
<div class="input-area">
|
||||
<label>{{'warmers_temperature' | localize('Gestione Temperatura')}}</label>
|
||||
</div>
|
||||
<div class="input-area left grid grid-5">
|
||||
<button class="btn btn-info square" @click="remove5()">-5°C</button>
|
||||
<button class="btn btn-info square" @click="remove1()">-1°C</button>
|
||||
<button class="btn btn-info square" @click="add1()">+1°C</button>
|
||||
<button class="btn btn-info square" @click="add5()">+5°C</button>
|
||||
<select class="input-select" v-model="uniformChannelValue" @change="changedSelectValue">
|
||||
<option value="-1">{{'warmers_select_power' | localize('Seleziona...')}}</option>
|
||||
<option v-for="index in 31" :key="index" :value="((index-1)*10)">{{(index-1)*10}}°C</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="input-area grid left">
|
||||
<button
|
||||
class="btn btn-success"
|
||||
@click="setAllTemperature"
|
||||
>{{'warmers_setTemperature' | localize('Set all temperature')}}</button>
|
||||
</div>
|
||||
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
||||
<hr />
|
||||
<article class="warmers">
|
||||
<warmers
|
||||
ref="warmers"
|
||||
@select="selectionChanged"
|
||||
@methodChanged="m => selectionMethod = m"
|
||||
:recipe="recipe"
|
||||
:temperature="true"
|
||||
></warmers>
|
||||
|
||||
<div class="absolute bottom right">
|
||||
<button class="btn btn-info square icon" @click="zoomIn()">
|
||||
<i class="fa fa-search-plus" ></i>
|
||||
</button>
|
||||
<button class="btn btn-info square icon" @click="zoomOut()">
|
||||
<i class="fa fa-search-minus" ></i>
|
||||
</button>
|
||||
<button class="btn btn-info square icon" @click="zoomReset()">
|
||||
<i class="fa fa-square-o" ></i>
|
||||
</button>
|
||||
</div>
|
||||
</article>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
|
||||
<script lang="ts" src="./thermocamera.ts"></script>
|
||||
+4
@@ -32,6 +32,10 @@ export default class Warmers extends Vue {
|
||||
@Prop({ default: true })
|
||||
usePanZoom: boolean;
|
||||
|
||||
@Prop({ default: false })
|
||||
temperature: boolean;
|
||||
|
||||
|
||||
get planSizeX() {
|
||||
return parseFloat(this.parameters.warmerPlanSizeX.toString());
|
||||
}
|
||||
|
||||
+1
@@ -26,6 +26,7 @@
|
||||
@mouseup="stopSelection"
|
||||
@click="select(cell)"
|
||||
:selected="isSelected(cell.idChannel)"
|
||||
:temperature="temperature"
|
||||
/>
|
||||
</foreignObject>
|
||||
</g>
|
||||
|
||||
+3
-1
@@ -6,6 +6,8 @@ import { Prop, Watch } from 'vue-property-decorator';
|
||||
import StepFooter from "@/app_modules_thermo/setup/components/step-footer.vue";
|
||||
import RiscaldiSup from "./base-components/riscaldi-superiori.vue";
|
||||
import RiscaldiInf from "./base-components/riscaldi-inferiori.vue";
|
||||
import Thermocamera from "./base-components/thermocamera.vue";
|
||||
|
||||
import SostDecomp from "./base-components/sostentamento-decompressione.vue";
|
||||
import { recipeActions } from "@/store/recipe.store";
|
||||
import { store } from "@/store";
|
||||
@@ -14,7 +16,7 @@ import { recipeService } from "@/services/recipeService";
|
||||
import { warmersService } from "@/services/warmersService";
|
||||
import { debounce } from "@/_base/debounce";
|
||||
|
||||
@Component({ components: { modal: Modal, stepfooter: StepFooter, riscaldiinf: RiscaldiInf, riscaldisup: RiscaldiSup, sostdecomp: SostDecomp } })
|
||||
@Component({ components: { modal: Modal, stepfooter: StepFooter, riscaldiinf: RiscaldiInf, riscaldisup: RiscaldiSup, sostdecomp: SostDecomp,thermocamera:Thermocamera } })
|
||||
export default class ShowRiscaldamentoSuperioreInfo extends Vue {
|
||||
|
||||
recipe: Recipe.IRecipe = this.$store.getters.getCurrent();
|
||||
|
||||
+6
@@ -17,6 +17,11 @@
|
||||
@click="show = 'decomsustain'"
|
||||
v-if="isDecomsustainEnabled()"
|
||||
>{{'decomsustain' | localize("Sostentamento/Decompressione")}}</button>
|
||||
<button
|
||||
:class="{'active':show == 'termocamera'}"
|
||||
@click="show = 'termocamera'"
|
||||
v-if="isDecomsustainEnabled()"
|
||||
>{{'Thermoprophet' | localize("Thermoprophet")}}</button>
|
||||
</div>
|
||||
<div slot="header-buttons">
|
||||
<button class="modal-close" @click="close()">
|
||||
@@ -25,6 +30,7 @@
|
||||
</div>
|
||||
<riscaldiinf v-if="show == 'lowerheaters'" :recipe="recipe" @warmersChanged="warmersChanged" ></riscaldiinf>
|
||||
<riscaldisup v-if="show == 'upperheaters'" :recipe="recipe" @warmersChanged="warmersChanged" ></riscaldisup>
|
||||
<thermocamera v-if="show == 'termocamera'" :recipe="recipe" @warmersChanged="warmersChanged" ></thermocamera>
|
||||
<sostdecomp v-if="show == 'decomsustain'" :recipe="recipe"></sostdecomp>
|
||||
<footer>
|
||||
<div v-if="isLoading"><i class="loader fa fa-circle-o-notch fa-spin"></i></div>
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
import { baseRestService } from "../_base/baseRestService";
|
||||
import { CONFIGURATION } from "@/config";
|
||||
import { warmersActions } from "@/store/warmers.store";
|
||||
import { store } from "@/store";
|
||||
import Warmers from "@/app_modules_thermo/setup/riscaldi/components/base-components/warmers";
|
||||
|
||||
export class ThermocameraService extends baseRestService {
|
||||
|
||||
BASE_URL = async () => (await CONFIGURATION).api.apiServerUrl + "api/thermocamera/";
|
||||
|
||||
|
||||
async show() {
|
||||
let result = await this.Post<any>((await this.BASE_URL()) + "show", null, true);
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
export const thermocameraService = new ThermocameraService();
|
||||
Reference in New Issue
Block a user