Added redis-Setup for Alarms

This commit is contained in:
Nicola Carminati
2019-08-28 11:57:05 +02:00
parent c06d77904a
commit 5d2544a2ae
4 changed files with 145 additions and 17 deletions
+114 -17
View File
@@ -7,9 +7,11 @@ using Step.Model.DTOModels.AlarmModels;
using Step.Model.DTOModels.Scada;
using Step.Model.DTOModels.ToolModels;
using Step.NC;
using Step.Utils;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
@@ -25,7 +27,7 @@ public static class ThreadsFunctions
public static bool reconnectionIsRunning = false;
private static long ReadAlarmsTimer = 0, ReadAlarmsTimes = 0;
private static long ReadAxesTimer = 0, ReadAxesTimes = 0;
private static long ReadPowerOnTimer = 0, ReadPowerOnTimes = 0;
private static long ReadPowerOnTimer = 0, ReadPowerOnTimes = 0;
private static long ReadProcPPTimer = 0, ReadProcPPTimes = 0;
private static long ReadFunctionTimer = 0, ReadFunctionTimes = 0;
private static long ReadMaintenanceTimer = 0, ReadMaintenanceTimes = 0;
@@ -154,8 +156,8 @@ public static class ThreadsFunctions
sw.Stop();
// Update thread timer
ReadPowerOnTimer += sw.ElapsedMilliseconds;
ReadPowerOnTimes++;
ReadPowerOnTimer += sw.ElapsedMilliseconds;
ReadPowerOnTimes++;
// Wait
Thread.Sleep(CalcSleepTime(400, (int)sw.ElapsedMilliseconds));
@@ -514,9 +516,9 @@ public static class ThreadsFunctions
try
{
// Try connection
CmsError libraryError = ncHandler.Connect();
CmsError libraryError = ncHandler.Connect();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
ManageLibraryError(libraryError);
while (true)
{
@@ -570,7 +572,7 @@ public static class ThreadsFunctions
if (ncHandler.numericalControl.NC_IsConnected())
{
// Get Data from config and PLC
libraryError = ncHandler.GetActiveProgramInfo(out DTOActiveProgramDataModel active);
libraryError = ncHandler.GetActiveProgramInfo(out DTOActiveProgramDataModel active);
if (libraryError.IsError())
ManageLibraryError(libraryError);
@@ -672,7 +674,7 @@ public static class ThreadsFunctions
MessageServices.Current.Publish(NC_MAGAZINE_IS_ACTIVE, null, status);
if(NcConfig.NcVendor != NC_VENDOR.SIEMENS)
if (NcConfig.NcVendor != NC_VENDOR.SIEMENS)
{
libraryError = ncHandler.ReadAssistedToolingProcedure(out DTOAssistedToolingEndValueModel data);
if (libraryError.IsError())
@@ -705,14 +707,14 @@ public static class ThreadsFunctions
// Try connection
CmsError libraryError = ncHandler.Connect();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
ManageLibraryError(libraryError);
while (true)
{
sw.Restart();
// Check if client is connected
if (ncHandler.numericalControl.NC_IsConnected())
if (ncHandler.numericalControl.NC_IsConnected())
{
// Read data
libraryError = ncHandler.UpdateQueue();
@@ -772,7 +774,7 @@ public static class ThreadsFunctions
sw.Stop();
// Wait
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
Thread.Sleep(CalcSleepTime(500, (int)sw.ElapsedMilliseconds));
}
}
catch (ThreadAbortException)
@@ -783,7 +785,7 @@ public static class ThreadsFunctions
public static void ReadM154Data()
{
NcHandler ncHandler = new NcHandler();
NcHandler ncHandler = new NcHandler();
Stopwatch sw = new Stopwatch();
try
@@ -791,7 +793,7 @@ public static class ThreadsFunctions
// Try connection
CmsError libraryError = ncHandler.Connect();
if (libraryError.errorCode != 0)
ManageLibraryError(libraryError);
ManageLibraryError(libraryError);
while (true)
{
@@ -833,8 +835,8 @@ public static class ThreadsFunctions
}
foreach (M154DataModel m154 in data)
{
if(CmsConnectConfig.Enabled)
{
if (CmsConnectConfig.Enabled)
{
if (m154.Parameters.Count() >= 2 && m154.Parameters[0] == "SOUR")
@@ -866,7 +868,7 @@ public static class ThreadsFunctions
notif += m154.Parameters[2];
RedisController.WriteProductionNotification(m154.Process, notif);
break;
}
}
}
// Write ack
@@ -883,7 +885,7 @@ public static class ThreadsFunctions
if (m154.Parameters[0] == "MTC")
{
// Convert tag string in Pascal Case and add to result string
switch (m154.Parameters[1].ToLower())
switch (m154.Parameters[1].ToLower())
{
case "currprog":
stringVal += "CurrProg";
@@ -908,7 +910,7 @@ public static class ThreadsFunctions
string outputFileName = ServerStartupConfig.MTCFolderPath + "\\DATA\\CmsGeneralStatus.mtc";
// Create file if not exits
if (!File.Exists(outputFileName))
using (var f = File.Create(outputFileName)) { };
using (var f = File.Create(outputFileName)) { };
// Read file
List<string> fileLines = File.ReadAllLines(outputFileName).ToList();
string[] parametersInLine;
@@ -952,6 +954,68 @@ public static class ThreadsFunctions
}
}
public static void SetupCmsConnect(){
NcHandler ncHandler = new NcHandler();
try
{
List<DTOLanguageModel> availableLanguages = LanguageController.GetLanguageListFromDirectory();
if (availableLanguages == null)
return ;
ICollection<CultureInfo> cultureInfos = new List<CultureInfo>();
// Get nc available language
CmsError cmsError = ncHandler.numericalControl.NC_GetAvailableLanguages(ref cultureInfos);
if (cmsError.IsError())
ManageLibraryError(cmsError);
// Filter available language with
availableLanguages = availableLanguages.Where(x => cultureInfos.Any(y => y.TwoLetterISOLanguageName == x.IsoId)).ToList();
// Fill redis DB
int count = 1;
Dictionary<string, string> defAlarmsNamesEn = null;
Dictionary<string, string> defAlarmsNamesIt = null;
foreach (DTOLanguageModel lang in availableLanguages)
{
Dictionary<string, string> alarmsNames = GetPlcAlarmsTranslations(lang.IsoId);
if(lang.IsoId.ToLower() == "en")
{
defAlarmsNamesEn = alarmsNames;
if(!RedisController.WriteAlarmsConfigEn(alarmsNames))
Manage(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
}
else if (lang.IsoId.ToLower() == "it")
{
defAlarmsNamesIt = alarmsNames;
if (!RedisController.WriteAlarmsConfigIt(alarmsNames))
Manage(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
}
else
if (!RedisController.WriteAlarmsConfigCurr(alarmsNames))
Manage(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
if (count == 3)
break;
else
count++;
}
if (availableLanguages.Count < 3 && defAlarmsNamesEn != null)
if (!RedisController.WriteAlarmsConfigCurr(defAlarmsNamesEn))
Manage(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
else if (availableLanguages.Count < 3 && defAlarmsNamesIt != null)
if (!RedisController.WriteAlarmsConfigCurr(defAlarmsNamesIt))
Manage(ERROR_LEVEL.FATAL, CMS_CONNECT_SETUP_ALARM_MESSAGE);
}
catch (ThreadAbortException)
{
ncHandler.Dispose();
}
}
#endregion Functions
#region SupportFunctions
@@ -1212,6 +1276,39 @@ public static class ThreadsFunctions
return false;
}
private static Dictionary<string, string> GetPlcAlarmsTranslations(string language)
{
using (NcHandler ncHandler = new NcHandler())
{
Dictionary<string, string> returnValue = new Dictionary<string, string>();
Dictionary<int, string> messages = new Dictionary<int, string>();
// Read data from CN
ncHandler.numericalControl.NC_GetTranslatedPlcMessages(language, ref messages); // Avoid checking error because in the worst case "messages" is empty
// Id start from 1
for (int i = 1; i <= 1024; i++)
{
// Get configurated alarms
var tmpAlarmConfig = InitialAlarmsConfig.Where(x => x.PlcId == i).FirstOrDefault();
// Default string
string message = string.Format(NOT_CONFIGURATED_ALARM_MESSAGE, i);
// If is configurated
if (tmpAlarmConfig != null)
{
// Find translated string
message = messages.Where(x => x.Key == tmpAlarmConfig.AlarmId).FirstOrDefault().Value;
if (message == null)
message = string.Format(NOT_FOUND_ALARM_MESSAGE, i);
}
// Add to dictionary
returnValue.Add(i.ToString("D6") + "|900",message);
}
return returnValue;
}
}
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hWnd);