Added redis-Setup for Alarms
This commit is contained in:
+114
-17
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user