diff --git a/Libs/CMS_CORE_Library.dll b/Libs/CMS_CORE_Library.dll index 4c0b847f..6b65626e 100644 Binary files a/Libs/CMS_CORE_Library.dll and b/Libs/CMS_CORE_Library.dll differ diff --git a/Step.Database/Controllers/FunctionsAccessController.cs b/Step.Database/Controllers/FunctionsAccessController.cs index 05446713..bae23581 100644 --- a/Step.Database/Controllers/FunctionsAccessController.cs +++ b/Step.Database/Controllers/FunctionsAccessController.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using Step.Model.DatabaseModels; using Step.Model.DTOModels; +using static CMS_CORE_Library.DataStructures; namespace Step.Database.Controllers { @@ -43,7 +44,31 @@ namespace Step.Database.Controllers CanRead = f.ReadLevelMin < roleLevel, CanWrite = f.WriteLevelMin < roleLevel }) - .ToList() ; + .ToList(); + } + + public List GetFunctionsMappedWithPlc(List functionalityList) + { + return dbCtx + .FunctionsAccess + .ToList() // Find all function access + .Select(f => new DTORuntimeFunctionAccessModel() + { + Id = f.FunctionAccessId, + Name = f.Name, + Area = f.Area, + Enabled = GetIfFunctionalityIsActive(functionalityList, f.PlcId, f.Enabled) // Get new enabled data + }) + .ToList(); + } + + private bool GetIfFunctionalityIsActive(List functionalityList, int id, bool functionAccessIsEnabled) + { + // If id is not mapped or function is false by database config return + if (id == 0 || !functionAccessIsEnabled) + return functionAccessIsEnabled; + // Return PLC data + return functionalityList[id - 1].isActive; } } } diff --git a/Step.Database/Controllers/MachinesController.cs b/Step.Database/Controllers/MachinesController.cs index 110f0f0b..f8e8db25 100644 --- a/Step.Database/Controllers/MachinesController.cs +++ b/Step.Database/Controllers/MachinesController.cs @@ -21,7 +21,7 @@ namespace Step.Database.Controllers dbCtx.Dispose(); } - public MachineModel GetMachineById(int id) + public MachineModel FindById(int id) { return dbCtx .Machines @@ -29,7 +29,7 @@ namespace Step.Database.Controllers .SingleOrDefault(); } - public MachineModel GetMachineByUniqueId(string uniqueId) + public MachineModel FindMachineByUniqueId(string uniqueId) { return dbCtx .Machines diff --git a/Step.Database/DatabaseContext.cs b/Step.Database/DatabaseContext.cs index cab17dd1..8c8811f4 100644 --- a/Step.Database/DatabaseContext.cs +++ b/Step.Database/DatabaseContext.cs @@ -116,7 +116,7 @@ namespace Step.Database // Set machine info into static server config using (MachinesController machinesController = new MachinesController()) { - MachineConfig = machinesController.GetMachineByUniqueId(uniqueId); + MachineConfig = machinesController.FindMachineByUniqueId(uniqueId); if (MachineConfig == null) { MachineConfig = machinesController.Create(uniqueId); diff --git a/Step.Database/Migrations/201801291142206_InitCreate.Designer.cs b/Step.Database/Migrations/201802051555548_InitCreate.Designer.cs similarity index 93% rename from Step.Database/Migrations/201801291142206_InitCreate.Designer.cs rename to Step.Database/Migrations/201802051555548_InitCreate.Designer.cs index a4caed7e..12202de6 100644 --- a/Step.Database/Migrations/201801291142206_InitCreate.Designer.cs +++ b/Step.Database/Migrations/201802051555548_InitCreate.Designer.cs @@ -13,7 +13,7 @@ namespace Step.Database.Migrations string IMigrationMetadata.Id { - get { return "201801291142206_InitCreate"; } + get { return "201802051555548_InitCreate"; } } string IMigrationMetadata.Source diff --git a/Step.Database/Migrations/201801291142206_InitCreate.cs b/Step.Database/Migrations/201802051555548_InitCreate.cs similarity index 98% rename from Step.Database/Migrations/201801291142206_InitCreate.cs rename to Step.Database/Migrations/201802051555548_InitCreate.cs index 88b2fe8b..0ce64fe8 100644 --- a/Step.Database/Migrations/201801291142206_InitCreate.cs +++ b/Step.Database/Migrations/201802051555548_InitCreate.cs @@ -17,6 +17,7 @@ namespace Step.Database.Migrations read_level_min = c.Int(nullable: false), area = c.String(unicode: false), enabled = c.Boolean(nullable: false), + plc_id = c.Int(nullable: false), }) .PrimaryKey(t => t.id); diff --git a/Step.Database/Migrations/201801291142206_InitCreate.resx b/Step.Database/Migrations/201802051555548_InitCreate.resx similarity index 63% rename from Step.Database/Migrations/201801291142206_InitCreate.resx rename to Step.Database/Migrations/201802051555548_InitCreate.resx index d9a67b6d..9574b877 100644 --- a/Step.Database/Migrations/201801291142206_InitCreate.resx +++ b/Step.Database/Migrations/201802051555548_InitCreate.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 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 dbo diff --git a/Step.Database/Step.Database.csproj b/Step.Database/Step.Database.csproj index 99e29b21..f24b6f7b 100644 --- a/Step.Database/Step.Database.csproj +++ b/Step.Database/Step.Database.csproj @@ -34,6 +34,9 @@ 4 + + ..\Libs\CMS_CORE_Library.dll + ..\packages\EntityFramework.6.2.0\lib\net45\EntityFramework.dll @@ -73,9 +76,9 @@ - - - 201801291142206_InitCreate.cs + + + 201802051555548_InitCreate.cs @@ -111,8 +114,8 @@ - - 201801291142206_InitCreate.cs + + 201802051555548_InitCreate.cs diff --git a/Step.Model/DTOModels/DTOProcessDataModel.cs b/Step.Model/DTOModels/DTOProcessDataModel.cs index 0dad0b68..f885c0b2 100644 --- a/Step.Model/DTOModels/DTOProcessDataModel.cs +++ b/Step.Model/DTOModels/DTOProcessDataModel.cs @@ -10,12 +10,12 @@ namespace Step.Model.DTOModels public class DTOProcessDataModel { public bool isRunning; - public List processes; + public List processes; public DTOProcessDataModel() { isRunning = false; - processes = new List(); + processes = new List(); } } } diff --git a/Step.Model/DTOModels/DTORuntimeFunctionAccessModel.cs b/Step.Model/DTOModels/DTORuntimeFunctionAccessModel.cs new file mode 100644 index 00000000..8f9b7e16 --- /dev/null +++ b/Step.Model/DTOModels/DTORuntimeFunctionAccessModel.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Step.Model.DTOModels +{ + public class DTORuntimeFunctionAccessModel + { + public int Id { get; set; } + + public string Name { get; set; } + + public string Area { get; set; } + + public bool Enabled { get; set; } + } +} diff --git a/Step.Model/DatabaseModels/FunctionAccessModel.cs b/Step.Model/DatabaseModels/FunctionAccessModel.cs index 77659c81..1f55374e 100644 --- a/Step.Model/DatabaseModels/FunctionAccessModel.cs +++ b/Step.Model/DatabaseModels/FunctionAccessModel.cs @@ -26,5 +26,7 @@ namespace Step.Model.DatabaseModels public string Area { get; set; } [Column("enabled")] public bool Enabled { get; set; } + [Column("plc_id")] + public int PlcId { get; set; } } } diff --git a/Step.Model/Step.Model.csproj b/Step.Model/Step.Model.csproj index 30bf1e4b..ba90eb18 100644 --- a/Step.Model/Step.Model.csproj +++ b/Step.Model/Step.Model.csproj @@ -82,6 +82,7 @@ + diff --git a/Step.NC/NcHandler.cs b/Step.NC/NcHandler.cs index ae07cd7f..5ff0819d 100644 --- a/Step.NC/NcHandler.cs +++ b/Step.NC/NcHandler.cs @@ -13,6 +13,8 @@ using static Step.Utils.ExceptionManager; using static CMS_CORE.Nc; using static CMS_CORE_Library.DataStructures; using System.Reflection; +using Step.Database.Controllers; +using Step.Model.DatabaseModels; namespace Step.NC { @@ -248,10 +250,12 @@ namespace Step.NC public CmsError GetPowerOnData(out PreAndPostPowerOnModel powerOnData) { - powerOnData = new PreAndPostPowerOnModel(); - powerOnData.postPowerOn = new PostPowerOnModel(); - powerOnData.prePowerOn = new PrePowerOnModel(); - CmsError cmsError = numericalControl.Nc_RPowerOnData(ref powerOnData); + powerOnData = new PreAndPostPowerOnModel + { + postPowerOn = new PostPowerOnModel(), + prePowerOn = new PrePowerOnModel() + }; + CmsError cmsError = numericalControl.PLC_RPowerOnData(ref powerOnData); return cmsError; } @@ -269,11 +273,23 @@ namespace Step.NC // For each process get info for (ushort i = 1; i <= maxProcNumber; i++) { - ProcessData tmpProcPP = new ProcessData(); - cmsError = numericalControl.PROC_RStatus(i, ref tmpProcPP); - if (tmpProcPP.Status == "RUN") - processesData.isRunning = true; + ProcessDataModel tmpProcPP = new ProcessDataModel(); + // Get process status + cmsError = numericalControl.PROC_RStatusAndData(i, ref tmpProcPP); + // if at least one process is in run, NC is running + + // Add to list processesData.processes.Add(tmpProcPP); + + // Check if there are running process + if (!processesData.isRunning) + { + PROC_STATUS status = PROC_STATUS.IDLE; + // Get process status + cmsError = numericalControl.PROC_RStatus(i, ref status); + if (status == PROC_STATUS.RUN) + processesData.isRunning = true; + } } return cmsError; @@ -281,7 +297,28 @@ namespace Step.NC public CmsError PutPowerOnData(uint id) { - CmsError cmsError = numericalControl.Nc_WPowerOnData(id, true); + // Set to true power on data by id + CmsError cmsError = numericalControl.PLC_WPowerOnData(id, true); + + return cmsError; + } + + public CmsError GetFunctionsMappedWithNC(out List functionsAccessList) + { + functionsAccessList = new List(); + // Read plc functionality + List functionalityList = null; + CmsError cmsError = numericalControl.PLC_RFunctionAccess(ref functionalityList); + + // If empty return + if (functionalityList == null || functionalityList.Count == 0) + return cmsError; + + using (FunctionsAccessController functionsAccessController = new FunctionsAccessController()) + { + // Map plc and database data + functionsAccessList = functionsAccessController.GetFunctionsMappedWithPlc(functionalityList); + } return cmsError; } diff --git a/Step.NC/Step.NC.csproj b/Step.NC/Step.NC.csproj index 80316b7c..020d964c 100644 --- a/Step.NC/Step.NC.csproj +++ b/Step.NC/Step.NC.csproj @@ -71,6 +71,10 @@ {3f5c2483-fc87-43ef-92a8-66ff7d0e440f} Step.Config + + {357D5EE1-FFC8-489B-9232-22CF474D9A6F} + Step.Database + {631375DD-06D3-49BB-8130-D9DDB34C429D} Step.Model diff --git a/Step.Tasks/ThreadsFunctions.cs b/Step.Tasks/ThreadsFunctions.cs index 79130dd5..a1a6b883 100644 --- a/Step.Tasks/ThreadsFunctions.cs +++ b/Step.Tasks/ThreadsFunctions.cs @@ -18,6 +18,7 @@ public static class ThreadsFunctions private static long ReadAxesTimer = 0, ReadAxesTimes = 0; private static long ReadPowerOnTimer = 0, ReadPowerOnTimes = 0; private static long ReadProcPPTimer = 0, ReadProcPPTimes = 0; + private static long ReadFunctionTimer = 0, ReadFunctionTimes = 0; private static Thread ConnThread; @@ -238,6 +239,51 @@ public static class ThreadsFunctions } } + + public static void ReadRuntimeFunctionAccess() + { + NcHandler ncHandler = new NcHandler(); + Stopwatch sw = new Stopwatch(); + + try + { + // Try connection + CmsError libraryError = ncHandler.Connect(); + if (libraryError.errorCode != 0) + ManageLibraryError(libraryError); + + while (true) + { + sw.Restart(); + + if (ncHandler.numericalControl.NC_IsConnected()) + { + // Get Data from NC + libraryError = ncHandler.GetFunctionsMappedWithNC(out List functionsAccessList); + if (libraryError.errorCode != 0) + ManageLibraryError(libraryError); + else + // Send through signalR + MessageServices.Current.Publish(SEND_FUNCTIONALITY_DATA, null, functionsAccessList); + } + else + TryNcConnection(); + + sw.Stop(); + //Send to the UI the time + ReadFunctionTimer += sw.ElapsedMilliseconds; + ReadFunctionTimes++; + + // Wait + Thread.Sleep(200); + } + } + catch (ThreadAbortException) + { + ncHandler.Dispose(); + } + } + #endregion #region SupportFunctions @@ -364,6 +410,12 @@ public static class ThreadsFunctions ReadProcPPTimer = 0; ReadProcPPTimes = 0; } + if (ThreadsHandler.RunningThreadStatus.ContainsKey("ReadRuntimeFunctionAccess") && ReadFunctionTimes != 0) + { + ThreadsHandler.RunningThreadStatus["ReadRuntimeFunctionAccess"] = (ReadFunctionTimer / ReadFunctionTimes) + " mS"; + ReadFunctionTimer = 0; + ReadFunctionTimes = 0; + } MessageServices.Current.Publish(SEND_THREADS_STATUS, null, ThreadsHandler.RunningThreadStatus); diff --git a/Step.Tasks/ThreadsHandler.cs b/Step.Tasks/ThreadsHandler.cs index 2db714ce..f1891d2b 100644 --- a/Step.Tasks/ThreadsHandler.cs +++ b/Step.Tasks/ThreadsHandler.cs @@ -27,6 +27,7 @@ namespace Step.Core ThreadsFunctions.ReadPowerOnData, ThreadsFunctions.StatThread, ThreadsFunctions.ReadProcessesPPStatus, + ThreadsFunctions.ReadRuntimeFunctionAccess }; private volatile static List RunningThreadsList = new List(); internal volatile static Dictionary RunningThreadStatus = new Dictionary(); diff --git a/Step.Utils/Constants.cs b/Step.Utils/Constants.cs index dd7d1749..08387dc6 100644 --- a/Step.Utils/Constants.cs +++ b/Step.Utils/Constants.cs @@ -74,5 +74,7 @@ namespace Step.Utils public const string SEND_GENERIC_DATA = "SEND_GENERIC_DATA"; public const string SEND_AXES = "SEND_AXES"; public const string SEND_PROCESSES_DATA = "SEND_PROCESSES_STATUS"; + public const string SEND_FUNCTIONALITY_DATA = "SEND_FUNCTION_DATA"; + } } diff --git a/Step/Listeners/ListenersHandler.cs b/Step/Listeners/ListenersHandler.cs index c917483d..a0326853 100644 --- a/Step/Listeners/ListenersHandler.cs +++ b/Step/Listeners/ListenersHandler.cs @@ -52,6 +52,11 @@ namespace Step.Listeners { SignalRListener.SendProcessesData(a); })); + + infos.Add(MessageServices.Current.Subscribe(SEND_FUNCTIONALITY_DATA, async (a, b) => + { + SignalRListener.SendProcessesData(a); + })); } public static void Stop() diff --git a/Step/Listeners/SignalR/SignalRListener.cs b/Step/Listeners/SignalR/SignalRListener.cs index ac32c7bc..e330d1bc 100644 --- a/Step/Listeners/SignalR/SignalRListener.cs +++ b/Step/Listeners/SignalR/SignalRListener.cs @@ -53,5 +53,11 @@ namespace Step.Listeners.SignalR var context = GlobalHost.ConnectionManager.GetHubContext(); context.Clients.Group("ncData").processesData(processesStatus); } + + public static void SendFunctionalityData(object functionalityData) + { + var context = GlobalHost.ConnectionManager.GetHubContext(); + context.Clients.Group("ncData").functionalityData(functionalityData); + } } }