fec3d00ff9
+ Added client configuration api * Refactored serverconfig
179 lines
5.5 KiB
C#
179 lines
5.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
using Step.Model.DTOModels;
|
|
using TeamDev.SDK.MVVM;
|
|
using Step.NC;
|
|
using Step.Core;
|
|
using static Step.Utils.Constants;
|
|
using static Step.Utils.ExceptionManager;
|
|
using static CMS_CORE.Nc;
|
|
|
|
public static class ThreadsFunctions
|
|
{
|
|
public static bool reconnectionIsRunning = false;
|
|
|
|
public static void ReadAlarmsAsync()
|
|
{
|
|
NcHandler ncHandler = new NcHandler();
|
|
try
|
|
{
|
|
ncHandler.Connect();
|
|
|
|
while (true)
|
|
{
|
|
if (ncHandler.numericalControl.NC_IsConnected())
|
|
{
|
|
// Get Alarms from NC
|
|
CmsError libraryError = ncHandler.GetNcAlarms(out DTOAlarmsModel alarms);
|
|
if (libraryError.errorCode != 0)
|
|
ManageLibraryError(libraryError);
|
|
// Send through signalR
|
|
MessageServices.Current.Publish(SEND_ALARMS, null, alarms);
|
|
}
|
|
Thread.Sleep(200);
|
|
}
|
|
}
|
|
catch (ThreadAbortException ex)
|
|
{
|
|
ncHandler.Dispose();
|
|
}
|
|
}
|
|
|
|
public static void ReadNcGenericInfo()
|
|
{
|
|
NcHandler ncHandler = new NcHandler();
|
|
try
|
|
{
|
|
CmsError libraryError = ncHandler.Connect();
|
|
if (libraryError.errorCode != 0)
|
|
ManageLibraryError(libraryError);
|
|
|
|
while (true)
|
|
{
|
|
|
|
if (ncHandler.numericalControl.NC_IsConnected())
|
|
{
|
|
// Get Generic data from NC
|
|
libraryError = ncHandler.GetNcGenericData(out DTONcGenericDataModel genericData);
|
|
if (libraryError.errorCode != 0)
|
|
ManageLibraryError(libraryError);
|
|
else
|
|
// Send through signalR
|
|
MessageServices.Current.Publish(SEND_GENERIC_DATA, null, genericData);
|
|
}
|
|
Thread.Sleep(1000);
|
|
}
|
|
}
|
|
catch (ThreadAbortException ex)
|
|
{
|
|
ncHandler.Dispose();
|
|
}
|
|
}
|
|
|
|
public static void ReadAxes()
|
|
{
|
|
NcHandler ncHandler = new NcHandler();
|
|
try
|
|
{
|
|
CmsError libraryError = ncHandler.Connect();
|
|
if (libraryError.errorCode != 0)
|
|
ManageLibraryError(libraryError);
|
|
|
|
while (true)
|
|
{
|
|
|
|
if (ncHandler.numericalControl.NC_IsConnected())
|
|
{
|
|
// Get the list of the axes
|
|
libraryError = ncHandler.GetAxesPositions(out List<DTOAxesModel> genericData);
|
|
if (libraryError.errorCode != 0)
|
|
ManageLibraryError(libraryError);
|
|
// Send through signalR
|
|
MessageServices.Current.Publish(SEND_AXES, null, genericData);
|
|
}
|
|
Thread.Sleep(200);
|
|
}
|
|
}
|
|
catch (ThreadAbortException ex)
|
|
{
|
|
ncHandler.Dispose();
|
|
}
|
|
}
|
|
|
|
private static void WillReconnect()
|
|
{
|
|
// Stop all the NC threads
|
|
ThreadsHandler.Stop();
|
|
NcHandler ncHandler = new NcHandler();
|
|
|
|
// Run loop until NC is connected
|
|
while (!ncHandler.numericalControl.NC_IsConnected())
|
|
{
|
|
// Try reconnection
|
|
CmsError cmsError = ncHandler.Connect();
|
|
if (cmsError.errorCode == CMS_ERROR_CODES.SIEMENS_ENVIRONMENT_NOT_FOUND || cmsError.errorCode == CMS_ERROR_CODES.SIEMENS_HMI_NOT_RUNNING)
|
|
{
|
|
ManageLibraryError(cmsError);
|
|
}
|
|
else if ( cmsError.errorCode != CMS_ERROR_CODES.OK)
|
|
ncHandler.Dispose();
|
|
|
|
Thread.Sleep(1000);
|
|
|
|
// Send status to UI
|
|
MessageServices.Current.Publish(NC_STATUS, null, ncHandler.numericalControl.NC_IsConnected());
|
|
}
|
|
// Start/Restart NC threads
|
|
ThreadsHandler.StartWorkers();
|
|
|
|
reconnectionIsRunning = false;
|
|
}
|
|
|
|
public static void TryNcConnection()
|
|
{
|
|
if (reconnectionIsRunning == false)
|
|
{ // Set thread as running state
|
|
reconnectionIsRunning = true;
|
|
|
|
// Start reconnection thread
|
|
Thread t = new Thread(() =>
|
|
WillReconnect()
|
|
);
|
|
|
|
t.Start();
|
|
}
|
|
}
|
|
|
|
public static void ManageLibraryError(CmsError cmsError)
|
|
{
|
|
switch (cmsError.errorCode)
|
|
{
|
|
case CMS_ERROR_CODES.NC_PROD_ERROR:
|
|
TryNcConnection();
|
|
break;
|
|
case CMS_ERROR_CODES.NOT_CONNECTED:
|
|
TryNcConnection(); // If not connected try reconnection
|
|
break;
|
|
case CMS_ERROR_CODES.PROC_NOT_FOUND:
|
|
break;
|
|
case CMS_ERROR_CODES.FUNCTION_NOT_ALLOWED:
|
|
break;
|
|
case CMS_ERROR_CODES.BIT_NOT_IN_RANGE:
|
|
break;
|
|
case CMS_ERROR_CODES.BYTE_NOT_IN_RANGE:
|
|
break;
|
|
case CMS_ERROR_CODES.INTERNAL_ERROR:
|
|
break;
|
|
case CMS_ERROR_CODES.INCORRECT_PARAMETERS:
|
|
break;
|
|
case CMS_ERROR_CODES.NC_LANGUAGE_ERROR:
|
|
break;
|
|
case CMS_ERROR_CODES.SIEMENS_ENVIRONMENT_NOT_FOUND:
|
|
case CMS_ERROR_CODES.SIEMENS_HMI_NOT_RUNNING:
|
|
Manage(ERROR_LEVEL.FATAL, cmsError.message);
|
|
break;
|
|
}
|
|
}
|
|
}
|