initialize
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using com.itac.mes.proxy.business;
|
||||
using com.itac.mes.tools;
|
||||
using com.itac.oib.client.customextensions;
|
||||
using Constants = com.itac.mes.tools.Constants;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
/// <summary>
|
||||
/// Receiver class for the TraceService events
|
||||
/// </summary>
|
||||
public class BoardGateKeeperReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
OIBEventHandler _eventHandler;
|
||||
readonly OibClient.OibBoardGateKeeperEvents _oibBoardGateKeeperEvents;
|
||||
|
||||
public static string DefaultMachineFullPath { get; internal set; }
|
||||
|
||||
public BoardGateKeeperReceiver(OibClient.OibBoardGateKeeperEvents oibBoardGateKeeperEvents,
|
||||
OIBEventHandler eventHandler)
|
||||
{
|
||||
if (oibBoardGateKeeperEvents == null) throw new ArgumentNullException("oibBoardGateKeeperEvents");
|
||||
if (eventHandler == null) throw new ArgumentNullException("eventHandler");
|
||||
|
||||
this._oibBoardGateKeeperEvents = oibBoardGateKeeperEvents;
|
||||
this._eventHandler = eventHandler;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
_oibBoardGateKeeperEvents.Start();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibBoardGateKeeperEvents.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibBoardGateKeeperEvents != null) { _oibBoardGateKeeperEvents.Dispose(); }
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public void virtualInkspotData(OibClient.CustomExtensions.VirtualInkspotHandlerBoardRequest virtualInkspotHandlerBoardRequest)
|
||||
{
|
||||
try
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "BoardGateKeeperReceiver.VirtualInkspotData");
|
||||
if (_eventHandler == null)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "calling BoardGateKeeperReceiver.VirtualInkspotData not performed, no eventHandler available");
|
||||
return;
|
||||
}
|
||||
|
||||
// map asm call values to itac struct
|
||||
com.itac.oib.client.customextensions.VirtualInkspotHandlerBoardRequest virtInkspotBoardRequest = VirtualInkspotHandlerBoardRequestMapper.get(virtualInkspotHandlerBoardRequest);
|
||||
// OIB 5.3 has a station information, oib 3 doesn't. If not available provide the first smt machines path to imsInterfaces.
|
||||
if (virtInkspotBoardRequest.BoardRequestData.Position.Station == null)
|
||||
{
|
||||
virtInkspotBoardRequest.BoardRequestData.Position.Station = DefaultMachineFullPath;
|
||||
}
|
||||
// execute call ar imsInterfaces
|
||||
com.itac.oib.boardgatekeeper.contracts.data.BoardRequestResult itacResult = _eventHandler.virtualInkspotBoardRequest(virtInkspotBoardRequest);
|
||||
|
||||
|
||||
// itacResult ist null: call to imsInterface failed (imsInterfaces not available).
|
||||
if (itacResult == null)
|
||||
{
|
||||
// setzen default Fehlertext
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.Reason = "no results from iTAC.MES.Suite";
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.RequestResult = "Rejected";
|
||||
for (int i = 0; i < virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates.Length; i++)
|
||||
{
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Place = false;
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Reason = "no results from iTAC.MES.Suite";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// copy values from itac back to asm return struct
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.RequestResult = itacResult.RequestResult;
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.Reason = itacResult.Reason;
|
||||
// virtualInkspotHandlerBoardRequest.BoardRequestResult.Reason = "no results from iTAC.MES.Suite"; // text info
|
||||
// virtualInkspotHandlerBoardRequest.BoardRequestResult.RequestResult = "Rejected"; // result code
|
||||
if (itacResult.VIHResult.SubPanelStates != null && itacResult.VIHResult.SubPanelStates.Length == virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates.Length)
|
||||
{
|
||||
// copy all subpanelstates from itacs result to asm return value
|
||||
for (int i = 0; i < itacResult.VIHResult.SubPanelStates.Length; i++)
|
||||
{
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Place = itacResult.VIHResult.SubPanelStates[i].Place;
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Reason = itacResult.VIHResult.SubPanelStates[i].Reason;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// The call failed exceptionally
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "calling BoardRequestResult in eventHandler failed", e);
|
||||
for (int i = 0; i < virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates.Length; i++)
|
||||
{
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Place = false;
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Reason = e.Message;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// called by incoming xml files
|
||||
public void virtualInkspotData(com.itac.oib.client.customextensions.VirtualInkspotHandlerBoardRequest requestData)
|
||||
{
|
||||
try
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "BoardGateKeeperReceiver.VirtualInkspotData from xml-file");
|
||||
if (_eventHandler != null)
|
||||
{
|
||||
com.itac.oib.boardgatekeeper.contracts.data.BoardRequestResult itacResult = _eventHandler.virtualInkspotBoardRequest(requestData);
|
||||
// TODO: Rückgabe noch auswerten ?
|
||||
// requestData.setBoardRequestResult(itacResult);
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Warning, "calling BoardGateKeeperReceiver.VirtualInkspotData not performed");
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// der letzte Aufruf schlug fehl!!
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "calling BoardRequestResult in eventHandler failed", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using Asm.As.Oib.Client.CustomExtensions;
|
||||
using com.itac.mes.proxy.business;
|
||||
using com.itac.mes.tools;
|
||||
using com.itac.oib.client.customextensions;
|
||||
using Constants = com.itac.mes.tools.Constants;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
/// <summary>
|
||||
/// Receiver class for the Changeover manager events
|
||||
/// </summary>
|
||||
public class ChangeoverReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
public OIBEventHandler _eventHandler { get; set; }
|
||||
private readonly ChangeoverManager _changeoverManager;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public ChangeoverReceiver(ChangeoverManager changeoverManager)
|
||||
{
|
||||
_changeoverManager = changeoverManager;
|
||||
_changeoverManager.LineChangeover += new Asm.As.Oib.Client.CustomExtensions.LineChangeoverEvent(ChangeoverManagerLineChangeover);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_changeoverManager != null)
|
||||
_changeoverManager.Dispose();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
|
||||
public class LineChangeoverThread : ThreadTemplate<Asm.As.Oib.Client.CustomExtensions.LineChangeoverEventArgs>
|
||||
{
|
||||
public LineChangeoverThread(OIBEventHandler eventHandler, Asm.As.Oib.Client.CustomExtensions.LineChangeoverEventArgs request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = LineChangeoverEventArgsMapper.get(_request);
|
||||
getEventHandler().lineChangeoverEvent(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public void ChangeoverManagerLineChangeover(object sender, Asm.As.Oib.Client.CustomExtensions.LineChangeoverEventArgs args)
|
||||
{
|
||||
try
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, string.Format("Changeover completed for line '{0}'", args.Line.Name));
|
||||
// interessante Infos:
|
||||
// String conveyorModeString = args.Line.StationInLines[0].StationConveyorSystem.ConveyorMode.ToString();
|
||||
// com.itac.oib.client.customextensions.LineChangeoverEventArgs lineChangeoverEvent = LineChangeoverEventArgsMapper.get(args);
|
||||
// if (lineChangeoverEvent == null)
|
||||
// {
|
||||
// LogHandler.log(Constants.LOGGER, TraceEventType.Error, "LineChangeover not converted");
|
||||
// return;
|
||||
// }
|
||||
var mmt = new LineChangeoverThread(_eventHandler, args);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, string.Format("LineChangeover could not be pushed to java receiver"), e);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
internal com.itac.oib.client.customextensions.LineChangeoverEventArgs getCurrentLineProductionData()
|
||||
{
|
||||
com.itac.oib.client.customextensions.LineChangeoverEventArgs lineChangeoverEvent = LineChangeoverEventArgsMapper.get(_changeoverManager.GetCurrentLineProductionData());
|
||||
if (lineChangeoverEvent == null)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "LineChangeover not converted");
|
||||
return null;
|
||||
}
|
||||
return lineChangeoverEvent;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.ServiceModel;
|
||||
using Asm.As.Oib.Client;
|
||||
using Asm.As.Oib.SiplaceSetupCenter.Contracts.Data;
|
||||
using com.itac.mes.proxy.business;
|
||||
using com.itac.mes.tools;
|
||||
using Constants = com.itac.mes.tools.Constants;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
|
||||
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
|
||||
public class DekPrinterExternalControlReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private readonly OibDekPrinterExtenalControlEvents _oibDekPrinterExternalControlEvents;
|
||||
public OIBEventHandler _eventHandler { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region constructor, event delegate assignment
|
||||
|
||||
public DekPrinterExternalControlReceiver(OibDekPrinterExtenalControlEvents oibSetupCenterExternalControlEvents)
|
||||
{
|
||||
_oibDekPrinterExternalControlEvents = oibSetupCenterExternalControlEvents;
|
||||
|
||||
oibSetupCenterExternalControlEvents.VerifyPrinterMaterial = VerifyPrinterMaterial;
|
||||
oibSetupCenterExternalControlEvents.VerifyPrinterTool = VerifyPrinterTool;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
public void Start()
|
||||
{
|
||||
if (!_oibDekPrinterExternalControlEvents.IsStarted)
|
||||
{
|
||||
_oibDekPrinterExternalControlEvents.Start();
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibDekPrinterExternalControlEvents.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
public OIBEventHandler getEventHandler(Object request)
|
||||
{
|
||||
if (_eventHandler == null)
|
||||
{
|
||||
if (request == null) { throw new Exception("missing event handler to transport unknown message"); }
|
||||
throw new Exception("missing event handler to transport message of type " + request.GetType().Name);
|
||||
}
|
||||
return _eventHandler;
|
||||
}
|
||||
#region IDekPrinterCenterExternalControl Members
|
||||
|
||||
private void startCall(string method)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, String.Format("DekPrinterExternalControl.{0} called", method));
|
||||
}
|
||||
|
||||
public VerifyPrinterToolResponse VerifyPrinterTool(VerifyPrinterToolRequest request)
|
||||
{
|
||||
startCall("VerifyPrinterTool");
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.VerifyPrinterToolRequestMapper.get(request);
|
||||
VerifyPrinterToolResponse oibResult = null;
|
||||
try
|
||||
{
|
||||
var mesNamespaceConformResult = getEventHandler(request).verifyPrinterTool(mesNamespaceConformRequest);
|
||||
oibResult = com.itac.oib.siplacesetupcenter.contracts.data.VerifyPrinterToolResponseMapper.get(mesNamespaceConformResult);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "failed to process VerifyPrinterToolRequest", e);
|
||||
}
|
||||
|
||||
return oibResult;
|
||||
}
|
||||
|
||||
|
||||
public VerifyPrinterMaterialResponse VerifyPrinterMaterial(VerifyPrinterMaterialRequest request)
|
||||
{
|
||||
startCall("VerifyPrinterMaterial");
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.VerifyPrinterMaterialRequestMapper.get(request);
|
||||
VerifyPrinterMaterialResponse oibResult = null;
|
||||
try
|
||||
{
|
||||
var mesNamespaceConformResult = getEventHandler(request).verifyPrinterMaterial(mesNamespaceConformRequest);
|
||||
oibResult = com.itac.oib.siplacesetupcenter.contracts.data.VerifyPrinterMaterialResponseMapper.get(mesNamespaceConformResult);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "failed to process VerifyPrinterMaterialRequest", e);
|
||||
}
|
||||
|
||||
return oibResult;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibDekPrinterExternalControlEvents != null)
|
||||
_oibDekPrinterExternalControlEvents.Dispose();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using Asm.As.Oib.Client.CustomExtensions;
|
||||
using Asm.As.Oib.DisplayService.Contracts.Messages;
|
||||
using Asm.As.Oib.DisplayService.Proxy.Architecture.Objects;
|
||||
using com.itac.mes.proxy;
|
||||
using com.itac.mes.proxy.business;
|
||||
using com.itac.oib.client.customextensions;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
/// <summary>
|
||||
/// Receiver class for the Changeover manager events
|
||||
/// </summary>
|
||||
public class DisplayServiceReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
public OIBEventHandler _eventHandler { get; set; }
|
||||
private readonly DisplayServiceClient _displayServiceClient;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public DisplayServiceReceiver(DisplayServiceClient displayServiceClient)
|
||||
{
|
||||
_displayServiceClient = displayServiceClient;
|
||||
_displayServiceClient.ConfirmationReceived += confirmationReceived;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_displayServiceClient != null)
|
||||
_displayServiceClient.Dispose();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
private void confirmationReceived(ConfirmationReceivedRequest confirmationReceivedRequest)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/*public class LineChangeoverThread : ThreadTemplate<Asm.As.Oib.Client.CustomExtensions.LineChangeoverEventArgs>
|
||||
{
|
||||
public LineChangeoverThread(OIBEventHandler eventHandler, Asm.As.Oib.Client.CustomExtensions.LineChangeoverEventArgs request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = LineChangeoverEventArgsMapper.get(_request);
|
||||
getEventHandler().lineChangeoverEvent(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public void ChangeoverManagerLineChangeover(object sender, Asm.As.Oib.Client.CustomExtensions.LineChangeoverEventArgs args)
|
||||
{
|
||||
try
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, string.Format("Changeover completed for line '{0}'", args.Line.Name));
|
||||
// interessante Infos:
|
||||
// String conveyorModeString = args.Line.StationInLines[0].StationConveyorSystem.ConveyorMode.ToString();
|
||||
// com.itac.oib.client.customextensions.LineChangeoverEventArgs lineChangeoverEvent = LineChangeoverEventArgsMapper.get(args);
|
||||
// if (lineChangeoverEvent == null)
|
||||
// {
|
||||
// LogHandler.log(Constants.LOGGER, TraceEventType.Error, "LineChangeover not converted");
|
||||
// return;
|
||||
// }
|
||||
var mmt = new LineChangeoverThread(_eventHandler, args);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, string.Format("LineChangeover could not be pushed to java receiver"), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
internal com.itac.oib.client.customextensions.LineChangeoverEventArgs getCurrentLineProductionData()
|
||||
{
|
||||
com.itac.oib.client.customextensions.LineChangeoverEventArgs lineChangeoverEvent = LineChangeoverEventArgsMapper.get(_displayServiceClient.GetCurrentLineProductionData());
|
||||
if (lineChangeoverEvent == null)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "LineChangeover not converted");
|
||||
return null;
|
||||
}
|
||||
return lineChangeoverEvent;
|
||||
}*/
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
public interface IReceiver
|
||||
{
|
||||
void Start();
|
||||
|
||||
void Stop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using com.itac.mes.proxy.business;
|
||||
using com.itac.mes.tools;
|
||||
using www.siplace.com.OIB._2015._10.LineControlServer.Contracts.Data;
|
||||
using AsmNamespace = www.siplace.com.OIB._2015._10.LineControlServer.Contracts.Data;
|
||||
using Constants = com.itac.mes.tools.Constants;
|
||||
using MesNamespace = com.itac.oib.linecontrol.contracts.data;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
/// <summary>
|
||||
/// Receiver class for the TraceService events
|
||||
/// </summary>
|
||||
public class LineControlMesInterceptorReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
OIBEventHandler _eventHandler;
|
||||
readonly OibClient.OibLineControlMesInterceptorEvents _oibLineControlMesInterceptorEvents;
|
||||
#endregion
|
||||
|
||||
#region construtor/destructor
|
||||
public LineControlMesInterceptorReceiver(OibClient.OibLineControlMesInterceptorEvents oibLineControlMesInterceptorEvents,
|
||||
OIBEventHandler eventHandler)
|
||||
{
|
||||
if (oibLineControlMesInterceptorEvents == null) throw new ArgumentNullException("oibLineControlMesInterceptorEvents");
|
||||
if (eventHandler == null) throw new ArgumentNullException("eventHandler");
|
||||
|
||||
this._oibLineControlMesInterceptorEvents = oibLineControlMesInterceptorEvents;
|
||||
this._eventHandler = eventHandler;
|
||||
_oibLineControlMesInterceptorEvents.Ping = Ping;
|
||||
_oibLineControlMesInterceptorEvents.VerifyPcbForAutoProgramDownload = VerifyPcbForAutoProgramDownload;
|
||||
_oibLineControlMesInterceptorEvents.VerifyRecipeActivationOnDekPrinter = VerifyRecipeActivationOnDekPrinter;
|
||||
_oibLineControlMesInterceptorEvents.VerifyRecipeDownload = VerifyRecipeDownload;
|
||||
_oibLineControlMesInterceptorEvents.VerifyRecipeForAutoProgramDownload = VerifyRecipeForAutoProgramDownload;
|
||||
_oibLineControlMesInterceptorEvents.VerifyStartAutoProgramDownload = VerifyStartAutoProgramDownload;
|
||||
}
|
||||
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibLineControlMesInterceptorEvents != null) { _oibLineControlMesInterceptorEvents.Dispose(); }
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
if (!_oibLineControlMesInterceptorEvents.IsStarted)
|
||||
{
|
||||
_oibLineControlMesInterceptorEvents.Start();
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibLineControlMesInterceptorEvents.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
bool Ping()
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, "LineControlMesInterceptorReceiver.Ping");
|
||||
return _eventHandler != null;
|
||||
}
|
||||
|
||||
private MesVerificationResult VerifyRecipeForAutoProgramDownload(VerifyRecipeForAutoProgramDownloadRequest request)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "LineControlMesInterceptorReceiver VerifyRecipeForAutoProgramDownload called");
|
||||
// map value from asm namespace to mes namespace
|
||||
MesNamespace.VerifyRecipeForAutoProgramDownloadRequest report = MesNamespace.VerifyRecipeForAutoProgramDownloadRequestMapper.get(request);
|
||||
|
||||
// create return value
|
||||
AsmNamespace.MesVerificationResult asmResult = null;
|
||||
try
|
||||
{
|
||||
MesNamespace.MesVerificationResult mesResult = _eventHandler.verifyRecipeForAutoProgramDownload(report);
|
||||
asmResult = MesNamespace.MesVerificationResultMapper.get(mesResult);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
asmResult = getFailureResult(e);
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "failed to process LineControlMesInterceptorReceiver.VerifyRecipeForAutoProgramDownload", e);
|
||||
}
|
||||
|
||||
return asmResult;
|
||||
}
|
||||
|
||||
private MesVerificationResult VerifyStartAutoProgramDownload(VerifyRecipeForAutoProgramDownloadRequest request)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "LineControlMesInterceptorReceiver VerifyStartAutoProgramDownload called");
|
||||
// map value from asm namespace to mes namespace
|
||||
MesNamespace.VerifyRecipeForAutoProgramDownloadRequest report = MesNamespace.VerifyRecipeForAutoProgramDownloadRequestMapper.get(request);
|
||||
AsmNamespace.MesVerificationResult asmResult = null;
|
||||
try
|
||||
{
|
||||
MesNamespace.MesVerificationResult mesResult = _eventHandler.verifyStartAutoProgramDownload(report);
|
||||
asmResult = MesNamespace.MesVerificationResultMapper.get(mesResult);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
asmResult = getFailureResult(e);
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "failed to process LineControlMesInterceptorReceiver.VerifyStartAutoProgramDownload", e);
|
||||
}
|
||||
|
||||
return asmResult;
|
||||
}
|
||||
|
||||
private MesVerificationResult VerifyRecipeDownload(VerifyRecipeDownloadRequest request)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "LineControlMesInterceptorReceiver VerifyRecipeDownload called");
|
||||
// map value from asm namespace to mes namespace
|
||||
MesNamespace.VerifyRecipeDownloadRequest report = MesNamespace.VerifyRecipeDownloadRequestMapper.get(request);
|
||||
AsmNamespace.MesVerificationResult asmResult = null;
|
||||
try
|
||||
{
|
||||
MesNamespace.MesVerificationResult mesResult = _eventHandler.verifyRecipeDownload(report);
|
||||
asmResult = MesNamespace.MesVerificationResultMapper.get(mesResult);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
asmResult = getFailureResult(e);
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "failed to process LineControlMesInterceptorReceiver.VerifyRecipeDownload", e);
|
||||
}
|
||||
|
||||
return asmResult;
|
||||
}
|
||||
|
||||
private MesVerificationResult VerifyRecipeActivationOnDekPrinter(VerifyRecipeActivationOnDekPrinterRequest request)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "LineControlMesInterceptorReceiver VerifyRecipeActivationOnDekPrinterRequest called");
|
||||
// map value from asm namespace to mes namespace
|
||||
MesNamespace.VerifyRecipeActivationOnDekPrinterRequest report = MesNamespace.VerifyRecipeActivationOnDekPrinterRequestMapper.get(request);
|
||||
AsmNamespace.MesVerificationResult asmResult = null;
|
||||
try
|
||||
{
|
||||
MesNamespace.MesVerificationResult mesResult = _eventHandler.verifyRecipeActivationOnDekPrinter(report);
|
||||
asmResult = MesNamespace.MesVerificationResultMapper.get(mesResult);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
asmResult = getFailureResult(e);
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "failed to process LineControlMesInterceptorReceiver.VerifyRecipeActivationOnDekPrinterRequest", e);
|
||||
}
|
||||
|
||||
return asmResult;
|
||||
}
|
||||
|
||||
private MesVerificationResult VerifyPcbForAutoProgramDownload(VerifyPcbForAutoProgramDownloadRequest request)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "LineControlMesInterceptorReceiver VerifyPcbForAutoProgramDownloadRequest called");
|
||||
// map value from asm namespace to mes namespace
|
||||
MesNamespace.VerifyPcbForAutoProgramDownloadRequest report = MesNamespace.VerifyPcbForAutoProgramDownloadRequestMapper.get(request);
|
||||
AsmNamespace.MesVerificationResult asmResult = null;
|
||||
try
|
||||
{
|
||||
MesNamespace.MesVerificationResult mesResult = _eventHandler.verifyPcbForAutoProgramDownload(report);
|
||||
asmResult = MesNamespace.MesVerificationResultMapper.get(mesResult);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
asmResult = getFailureResult(e);
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "failed to process LineControlMesInterceptorReceiver.VerifyPcbForAutoProgramDownloadRequest", e);
|
||||
}
|
||||
|
||||
return asmResult;
|
||||
}
|
||||
|
||||
private AsmNamespace.MesVerificationResult getFailureResult(Exception e)
|
||||
{
|
||||
MesVerificationResult result = new MesVerificationResult();
|
||||
result.VerificationResult = 2; // 0=OK, 1=Rejected, 2=Error
|
||||
result.Reason = e.Message;
|
||||
return result;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,220 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using com.itac.mes.proxy;
|
||||
using com.itac.mes.proxy.business;
|
||||
using Constants = com.itac.mes.tools.Constants;
|
||||
using OibMonBizObj = Asm.As.Oib.Monitoring.Proxy.Business.EventArgs;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
using System.Configuration;
|
||||
using com.itac.oib.monitoring.contracts.data;
|
||||
using Asm.As.Oib.Monitoring.Proxy.Business.Objects;
|
||||
using com.itac.mes.tools;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
public class MonitoringReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
public OIBEventHandler _eventHandler { get; set; }
|
||||
private readonly String _lineFullPath;
|
||||
private readonly OibClient.OibMonitoringEvents _oibMonitoringEvents;
|
||||
private TimeSpan boardProcessedMaxAge = new TimeSpan(0, 0, 0);
|
||||
private TimeSpan stationEventMaxAge = new TimeSpan(0, 0, 0);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public MonitoringReceiver(OibClient.OibMonitoringEvents oibMonitoringEvents, string lineFullPath)
|
||||
{
|
||||
_oibMonitoringEvents = oibMonitoringEvents;
|
||||
_lineFullPath = lineFullPath;
|
||||
|
||||
oibMonitoringEvents.BoardProcessed += BoardProcessedEventReceived;
|
||||
oibMonitoringEvents.StationEvent += StationEventReceived;
|
||||
|
||||
try
|
||||
{
|
||||
String sMaxAge = (String)new AppSettingsReader().GetValue("BoardProcessedDataMaxAge", typeof(String));
|
||||
boardProcessedMaxAge = TimeSpan.Parse(sMaxAge);
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
// default Wert 1 Stunde
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "configured Value for 'BoardProcessedDataMaxAge' is invalid, use default value");
|
||||
boardProcessedMaxAge = new TimeSpan(24, 0, 0);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
boardProcessedMaxAge = new TimeSpan(0, 0, 0);
|
||||
}
|
||||
if (boardProcessedMaxAge.Ticks > 0)
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "maximum age for BoardProcessedMessages = " + boardProcessedMaxAge.ToString());
|
||||
else
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "no maximum age for BoardProcessedMessages");
|
||||
try
|
||||
{
|
||||
String sMaxAge = (String)new AppSettingsReader().GetValue("StationEventMaxAge", typeof(String));
|
||||
stationEventMaxAge = TimeSpan.Parse(sMaxAge);
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
// default Wert 1 Stunde
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "configured Value for 'StationEventMaxAge' is invalid, use default value");
|
||||
stationEventMaxAge = new TimeSpan(24, 0, 0);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
stationEventMaxAge = new TimeSpan(0, 0, 0);
|
||||
}
|
||||
if (stationEventMaxAge.Ticks > 0)
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "maximum age for StationEventMaxAge = " + stationEventMaxAge.ToString());
|
||||
else
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "no maximum age for StationEventMaxAge");
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Start/Stopp
|
||||
|
||||
public void Start()
|
||||
{
|
||||
_oibMonitoringEvents.Start();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibMonitoringEvents.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
|
||||
#region Board Processed
|
||||
|
||||
public void BoardProcessedEventReceived(object sender, OibMonBizObj.BoardProcessedEventArgs args)
|
||||
{
|
||||
try
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "BoardProcessedEventArgs");
|
||||
if (boardProcessedMaxAge.Ticks > 0)
|
||||
{
|
||||
Boolean skip = false;
|
||||
DateTime oldestDate = new DateTime(DateTime.Now.Ticks - boardProcessedMaxAge.Ticks).ToUniversalTime();
|
||||
foreach (Asm.As.Oib.Monitoring.Proxy.Business.Objects.ProcessedBoard processedBoard in args.BoardProcessedData.ProcessedBoards)
|
||||
{
|
||||
if (processedBoard.StationTime != null && processedBoard.StationTime.ToUniversalTime().Ticks < oldestDate.Ticks)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, "found old BoardProcessedEvent from " + processedBoard.StationTime.ToUniversalTime().ToString() +
|
||||
", oldest message to be processed is " + oldestDate.ToString());
|
||||
skip = true;
|
||||
}
|
||||
}
|
||||
if (skip)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, "ignore BoardProcessedEvent because one of its " +
|
||||
"stationEvents is older than configured time " + boardProcessedMaxAge.ToString());
|
||||
return;
|
||||
}
|
||||
}
|
||||
var mmt = new BoardProcessedThread(_eventHandler, args.BoardProcessedData);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "BoardProcessedEventArgs failed", e);
|
||||
}
|
||||
}
|
||||
|
||||
private class BoardProcessedThread : ThreadTemplate<Asm.As.Oib.Monitoring.Proxy.Business.Objects.BoardProcessedData>
|
||||
{
|
||||
public BoardProcessedThread(OIBEventHandler eventHandler, Asm.As.Oib.Monitoring.Proxy.Business.Objects.BoardProcessedData request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.monitoring.contracts.data.BoardProcessedDataMapper.get(_request);
|
||||
getEventHandler().boardProcessedEventReceived(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Station Event
|
||||
|
||||
public void StationEventReceived(object sender, OibMonBizObj.StationEventArgs args)
|
||||
{
|
||||
if (args == null || args.StationEventComposite == null) { return; }
|
||||
try
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "StationEventReceived");
|
||||
// should check event time
|
||||
if (stationEventMaxAge.TotalSeconds > 0)
|
||||
{
|
||||
DateTime oldestDate = new DateTime(DateTime.UtcNow.Ticks - stationEventMaxAge.Ticks);
|
||||
|
||||
if (DateTime .Compare( args.StationEventComposite.StationTime, oldestDate) <0)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "ignore StationEvent because its time '" +
|
||||
args.StationEventComposite.StationTime.ToUniversalTime() + "' is older than configured time " + stationEventMaxAge.ToString());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var mmt = new StationEventThread(_eventHandler, args.StationEventComposite);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "StationEventArgs failed", e);
|
||||
}
|
||||
}
|
||||
|
||||
public class StationEventThread : ThreadTemplate<Asm.As.Oib.Monitoring.Proxy.Business.Objects.StationEventComposite>
|
||||
{
|
||||
public StationEventThread(OIBEventHandler eventHandler, Asm.As.Oib.Monitoring.Proxy.Business.Objects.StationEventComposite request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.monitoring.contracts.data.StationEventCompositeMapper.get(_request);
|
||||
getEventHandler().stationEventReceived(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
void MonitoringSubscriptionHealthStatus(object sender, OibClient.OibServiceStatusEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!e.SubscriptionCheckResult.Succeeded)
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, string.Format("OIB Monitoring Queue for line '{0}' cound not be checked.", _lineFullPath));
|
||||
else
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, string.Format("OIB Monitoring Queue for line '{0}' is in state '{1}' containing '{2}' messages.", _lineFullPath, e.SubscriptionCheckResult.QueueStatus, e.SubscriptionCheckResult.MessagesInQueue));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, string.Format("OIB Monitoring Queue for line '{0}' checked failed: '{1}'.", _lineFullPath, ex.Message));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibMonitoringEvents != null)
|
||||
_oibMonitoringEvents.Dispose();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using com.itac.mes.proxy.business;
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
|
||||
public class ThreadTemplate<T>
|
||||
{
|
||||
protected readonly OIBEventHandler _eventHandler;
|
||||
protected readonly T _request;
|
||||
|
||||
public ThreadTemplate(OIBEventHandler eventHandler, T request)
|
||||
{
|
||||
_eventHandler = eventHandler;
|
||||
_request = request;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// get the event handler. By calling a funcion at the eventHandler the object is serialized and transported to java receiver.
|
||||
/// </summary>
|
||||
/// <returns>The event handler instance</returns>
|
||||
/// <exception>An exception is thrown when the handler was not set to this instance of thread template</exception>
|
||||
public OIBEventHandler getEventHandler()
|
||||
{
|
||||
if (_eventHandler == null)
|
||||
{
|
||||
if (_request == null) { throw new Exception("missing event handler to transport unknown message"); }
|
||||
throw new Exception("missing event handler to transport message of type " + _request.GetType().Name);
|
||||
}
|
||||
return _eventHandler;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,236 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Reflection;
|
||||
using System.ServiceModel;
|
||||
using Asm.As.Oib.SiplaceSetupCenter.Contracts.Data;
|
||||
using com.itac.mes.proxy.business;
|
||||
using com.itac.mes.tools;
|
||||
using Constants = com.itac.mes.tools.Constants;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
|
||||
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
|
||||
public class SetupCenterExternalControlReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private readonly OibClient.OibSetupCenterExternalControlEvents _oibSetupCenterExternalControlEvents;
|
||||
public OIBEventHandler _eventHandler { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public SetupCenterExternalControlReceiver(OibClient.OibSetupCenterExternalControlEvents oibSetupCenterExternalControlEvents)
|
||||
{
|
||||
_oibSetupCenterExternalControlEvents = oibSetupCenterExternalControlEvents;
|
||||
oibSetupCenterExternalControlEvents.GetNewPackagingUnitData = GetNewPackagingUnitData;
|
||||
oibSetupCenterExternalControlEvents.GetPackagingUnitControlStatus = GetPackagingUnitControlStatus;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
if (!_oibSetupCenterExternalControlEvents.IsStarted)
|
||||
{
|
||||
_oibSetupCenterExternalControlEvents.Start();
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibSetupCenterExternalControlEvents.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ISiplaceSetupCenterExternalControl Members
|
||||
|
||||
public ExternalControlResult[] GetPackagingUnitControlStatus(PackagingUnitLocation[] packagingUnitLocations)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "ExternalControl GetPackagingUnitControlStatus called");
|
||||
com.itac.oib.siplacesetupcenter.contracts.data.PackagingUnitLocation[] report = com.itac.oib.siplacesetupcenter.contracts.data.PackagingUnitLocationMapper.getArray(packagingUnitLocations);
|
||||
Asm.As.Oib.SiplaceSetupCenter.Contracts.Data.ExternalControlResult[] oibResult = null;
|
||||
try
|
||||
{
|
||||
com.itac.oib.siplacesetupcenter.contracts.data.ExternalControlResult[] itacResult = _eventHandler.getPackagingUnitControlStatus(report);
|
||||
oibResult = com.itac.oib.siplacesetupcenter.contracts.data.ExternalControlResultMapper.get(itacResult);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "failed to process GetPackagingUnitControlStatus", e);
|
||||
}
|
||||
|
||||
asmHandler(ref packagingUnitLocations, ref oibResult);
|
||||
return oibResult;
|
||||
}
|
||||
|
||||
public void UpdateEmptyFields(List<PackagingUnitLocation> packagingUnitLocations, List<ExternalControlResult> result)
|
||||
{
|
||||
if (packagingUnitLocations == null || packagingUnitLocations.Count == 0)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "SetupCenterExternalControl.updateEmptyFields: packagingUnitLocations empty or null");
|
||||
return;
|
||||
}
|
||||
if (result == null || result.Count == 0)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "SetupCenterExternalControl.updateEmptyFields: result empty or null");
|
||||
return;
|
||||
}
|
||||
if (packagingUnitLocations.Count != result.Count)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "SetupCenterExternalControl.updateEmptyFields: packagingUnitLocations and result different size");
|
||||
return;
|
||||
}
|
||||
// über alle Items iterieren
|
||||
for (int i = 0; i < packagingUnitLocations.Count; i++)
|
||||
{
|
||||
UpdateEmptyFields(packagingUnitLocations[i], result[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateEmptyFields(PackagingUnitLocation packagingUnitLocation, ExternalControlResult result)
|
||||
{
|
||||
if (packagingUnitLocation == null)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "SetupCenterExternalControl.updateEmptyFields: packagingUnitLocation is null");
|
||||
return;
|
||||
}
|
||||
if (result == null)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "SetupCenterExternalControl.updateEmptyFields: result is null");
|
||||
return;
|
||||
}
|
||||
// per reflection über alle Felder iterieren, dabei per Name vorgehen
|
||||
// deepCopy(packagingUnitLocation, result);
|
||||
// Console.WriteLine("");
|
||||
if (packagingUnitLocation.PackagingUnit.BatchPackagingUnit != null && result.PackagingUnit.BatchPackagingUnit == null)
|
||||
{
|
||||
result.PackagingUnit.BatchPackagingUnit = packagingUnitLocation.PackagingUnit.BatchPackagingUnit;
|
||||
}
|
||||
}
|
||||
|
||||
// muss noch weiter getestet werden...
|
||||
public void DeepCopy(object sourceObject, object destObject)
|
||||
{
|
||||
Type sourceType = sourceObject.GetType();
|
||||
Type destType = destObject.GetType();
|
||||
MemberInfo[] sourceMbrInfoArray = sourceType.GetMembers();
|
||||
MemberInfo[] destMbrInfoArray = destType.GetMembers();
|
||||
|
||||
foreach (MemberInfo sourceMbrInfo in sourceMbrInfoArray)
|
||||
{
|
||||
if (sourceMbrInfo.MemberType == MemberTypes.Property)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "" + sourceMbrInfo + " is a " + sourceMbrInfo.MemberType);
|
||||
// alle einfachen TypeNameConverter direkt prüfen (int, String, bool)
|
||||
// komplexe Typen ???
|
||||
|
||||
PropertyInfo sourcePropInfo = sourceType.GetProperty(sourceMbrInfo.Name);
|
||||
|
||||
// gibt es das Property auch im Zielobjekt
|
||||
foreach (MemberInfo destMbrInfo in destMbrInfoArray)
|
||||
{
|
||||
// identischer Name, identischerr Typ
|
||||
if (destMbrInfo.MemberType == sourceMbrInfo.MemberType && destMbrInfo.Name == sourceMbrInfo.Name)
|
||||
{
|
||||
PropertyInfo destPropInfo = destType.GetProperty(destMbrInfo.Name);
|
||||
object sourceValue = sourcePropInfo.GetValue(sourceObject, null);
|
||||
object destValue = destPropInfo.GetValue(destObject, null);
|
||||
if (sourcePropInfo.PropertyType == typeof(String) || sourcePropInfo.PropertyType == typeof(int)
|
||||
|| sourcePropInfo.PropertyType == typeof(Int32) || sourcePropInfo.PropertyType == typeof(Int64)
|
||||
|| sourcePropInfo.PropertyType == typeof(long) || sourcePropInfo.PropertyType == typeof(bool)
|
||||
|| sourcePropInfo.PropertyType == typeof(Boolean))
|
||||
{
|
||||
if (sourceValue != destValue)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, "primitive type copy value");
|
||||
destPropInfo.SetValue(destObject, sourceValue, null);
|
||||
}
|
||||
}
|
||||
else if (!sourceType.IsArray)
|
||||
{
|
||||
// komplexer Typ, kein Array
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, sourceMbrInfo.Name + " is complex type ");
|
||||
if (sourceValue != null)
|
||||
{
|
||||
DeepCopy(sourceValue, destValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, sourceMbrInfo.Name + " is complex type, sourceValue is null");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void asmHandler(ref Asm.As.Oib.SiplaceSetupCenter.Contracts.Data.PackagingUnitLocation[] packagingUnitLocations,
|
||||
ref Asm.As.Oib.SiplaceSetupCenter.Contracts.Data.ExternalControlResult[] result)
|
||||
{
|
||||
//
|
||||
// special ASM Handling:
|
||||
// simply return MSD Level and MSD Open Date as received in request
|
||||
|
||||
foreach (Asm.As.Oib.SiplaceSetupCenter.Contracts.Data.PackagingUnitLocation item in packagingUnitLocations)
|
||||
{
|
||||
// find this container in result and copy the values
|
||||
foreach (Asm.As.Oib.SiplaceSetupCenter.Contracts.Data.ExternalControlResult resultItem in result)
|
||||
{
|
||||
if (item.PackagingUnit.UID.Equals(resultItem.PackagingUnit.UID))
|
||||
{
|
||||
resultItem.PackagingUnit.MsdLevel = item.PackagingUnit.MsdLevel;
|
||||
resultItem.PackagingUnit.MsdOpenDate = item.PackagingUnit.MsdOpenDate;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public ExternalControlResult[] GetNewPackagingUnitData(PackagingUnitLocation[] packagingUnitLocations)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "SetupCenterExternalControl.GetPackagingUnitControlStatus");
|
||||
try
|
||||
{
|
||||
// List<ExternalControlResult> result = _eventHandler.GetPackagingUnitControlStatus(packagingUnitLocations);
|
||||
|
||||
// hier müssen eigentliche alle Felder aus den quelldaten, die nicht in den Zieldaten enthalten sind per
|
||||
// Reflection übernommen werden, damit wir nie mehr irgend welche Werte verlieren
|
||||
// UpdateEmptyFields(packagingUnitLocations, result);
|
||||
// return result;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
_eventHandler = null;
|
||||
// Fehler, keine weitere info vorhanden, da die Applikation nicht läuft
|
||||
}
|
||||
return new ExternalControlResult[0];
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibSetupCenterExternalControlEvents != null)
|
||||
_oibSetupCenterExternalControlEvents.Dispose();
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,516 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using Asm.As.Oib.SiplaceSetupCenter.Contracts.Data;
|
||||
using com.itac.mes.proxy.business;
|
||||
using com.itac.mes.tools;
|
||||
using Constants = com.itac.mes.tools.Constants;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
public class SetupCenterReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
public OIBEventHandler _eventHandler { get; set; }
|
||||
private readonly String _lineFullPath;
|
||||
private readonly OibClient.OibSetupCenterEvents _oibSetupCenterEvents;
|
||||
private bool _isSetupStation;
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public SetupCenterReceiver(OibClient.OibSetupCenterEvents oibSetupCenterEvents, string lineFullPath, bool isSetupStation)
|
||||
{
|
||||
_oibSetupCenterEvents = oibSetupCenterEvents;
|
||||
_lineFullPath = lineFullPath;
|
||||
_isSetupStation = isSetupStation;
|
||||
|
||||
oibSetupCenterEvents.FeederPlaced += SetupCenterFeederPlaced;
|
||||
oibSetupCenterEvents.FeederRemoved += SetupCenterFeederRemoved;
|
||||
oibSetupCenterEvents.NewSetupActive += SetupCenterNewSetupActive;
|
||||
oibSetupCenterEvents.PackagingQuantityChanged += SetupCenterPackagingQuantityChanged;
|
||||
oibSetupCenterEvents.SetupChanged += SetupCenterSetupChanged;
|
||||
oibSetupCenterEvents.PackagingUnitConsumed += SetupCenterPackagingUnitConsumed;
|
||||
oibSetupCenterEvents.MaterialMoved += SetupCenterMaterialMoved;
|
||||
oibSetupCenterEvents.PrinterToolVerified += SetupCenterPrinterToolVerified;
|
||||
oibSetupCenterEvents.PrinterToolUnverified += SetupCenterPrinterToolUnVerified;
|
||||
oibSetupCenterEvents.PrinterCapabilitiesChanged += SetupCenterPrinterCapabilitiesChanged;
|
||||
oibSetupCenterEvents.PrinterConsumablesUpdated += SetupCenterPrinterConsumablesChanged;
|
||||
oibSetupCenterEvents.PrinterCoverClosed += SetupCenterPrintercoverClosed;
|
||||
oibSetupCenterEvents.PrinterCoverOpened += SetupCenterPrinterCoverOpened;
|
||||
oibSetupCenterEvents.PrinterMaterialUnverified += SetupCenterPrinterMaterialUnverified;
|
||||
oibSetupCenterEvents.PrinterMaterialVerified += SetupCenterPrinterMaterialVerified;
|
||||
oibSetupCenterEvents.PrinterRecipeVerified += SetupCenterPrinterRecipeVerified;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
if (!_oibSetupCenterEvents.IsStarted)
|
||||
{
|
||||
_oibSetupCenterEvents.Start();
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibSetupCenterEvents.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
private void startSetupcenterEvent(Object args)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, String.Format("SetupCenterReceiver.{0}", args.GetType().Name));
|
||||
}
|
||||
private void setupcenterEventFailed(Object args, Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, String.Format("calling SetupCenterNotifyReceiver.{0} failed", args.GetType().Name), e);
|
||||
}
|
||||
|
||||
void SetupCenterPackagingQuantityChanged(object sender, OibClient.PackagingQuantityChangedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PackagingQuantityChangedThread(_eventHandler, args.PackagingQuantityChangedReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
void SetupCenterFeederPlaced(object sender, OibClient.FeederPlacedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new FeederPlacedThread(_eventHandler, args.FeederPlacedReportRequest);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
void SetupCenterFeederRemoved(object sender, OibClient.FeederRemovedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new FeederRemovedThread(_eventHandler, args.FeederRemovedReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
void SetupCenterNewSetupActive(object sender, OibClient.NewSetupActiveEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new NewSetupActiveThread(_eventHandler, args.NewSetupActiveReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
void SetupCenterSetupChanged(object sender, OibClient.SetupChangedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new SetupChangedThread(_eventHandler, args.SetupChangedReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
void SetupCenterPackagingUnitConsumed(object sender, OibClient.PackagingUnitConsumedEventArgs args)
|
||||
{
|
||||
if (_isSetupStation)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "ignore PackagingUnitConsumed because in SetupStation mode");
|
||||
return;
|
||||
}
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PackagingUnitConsumedThread(_eventHandler, args.PackagingUnitConsumedReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetupCenterMaterialMoved(object sender, OibClient.MaterialMovedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new MaterialMovedThread(_eventHandler, args.MaterialMovedReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
#region PrinterFunctions Receiver
|
||||
public void SetupCenterPrinterToolVerified(object sender, OibClient.PrinterToolVerifiedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PrinterToolVerifiedThread(_eventHandler, args.PrinterToolVerifiedReportRequest);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetupCenterPrinterRecipeVerified(object sender, OibClient.PrinterRecipeVerifiedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PrinterRecipeVerifiedThread(_eventHandler, args.PrinterRecipeVerifiedReportRequest);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetupCenterPrinterMaterialVerified(object sender, OibClient.PrinterMaterialVerifiedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PrinterMaterialVerifiedThread(_eventHandler, args.PrinterMaterialVerifiedReportRequest);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetupCenterPrinterMaterialUnverified(object sender, OibClient.PrinterMaterialUnverifiedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PrinterMaterialUnverifiedThread(_eventHandler, args.PrinterMaterialUnverifiedReportRequest);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetupCenterPrinterCoverOpened(object sender, OibClient.PrinterCoverOpenedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PrinterCoverOpenedThread(_eventHandler, args.PrinterCoverOpenedReportRequest);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetupCenterPrintercoverClosed(object sender, OibClient.PrinterCoverClosedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PrinterCoverClosedThread(_eventHandler, args.PrinterCoverClosedReportRequest);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetupCenterPrinterConsumablesChanged(object sender, OibClient.PrinterConsumablesUpdatedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PrinterConsumablesChangedThread(_eventHandler, args.PrinterConsumablesUpdatedReportRequest);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetupCenterPrinterCapabilitiesChanged(object sender, OibClient.PrinterCapabilitiesChangedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PrinterCapabilitiesChangedThread(_eventHandler, args.PrinterCapabilitiesChangedReportRequest);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetupCenterPrinterToolUnVerified(object sender, OibClient.PrinterToolUnverifiedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PrinterToolUnVerifiedThread(_eventHandler, args.PrinterToolUnverifiedReportRequest);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
// Calls delegieren an die eigentliche Implementierung
|
||||
|
||||
public class FeederPlacedThread : ThreadTemplate<FeederPlacedReport>
|
||||
{
|
||||
public FeederPlacedThread(OIBEventHandler eventHandler, FeederPlacedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.FeederPlacedReportMapper.get(_request);
|
||||
getEventHandler().feederPlaced(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class FeederRemovedThread : ThreadTemplate<FeederRemovedReport>
|
||||
{
|
||||
public FeederRemovedThread(OIBEventHandler eventHandler, FeederRemovedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.FeederRemovedReportMapper.get(_request);
|
||||
getEventHandler().feederRemoved(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class NewSetupActiveThread : ThreadTemplate<NewSetupActiveReport>
|
||||
{
|
||||
public NewSetupActiveThread(OIBEventHandler eventHandler, NewSetupActiveReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.NewSetupActiveReportMapper.get(_request);
|
||||
getEventHandler().newSetupActive(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PackagingQuantityChangedThread : ThreadTemplate<PackagingQuantityChangedReport>
|
||||
{
|
||||
public PackagingQuantityChangedThread(OIBEventHandler eventHandler, PackagingQuantityChangedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PackagingQuantityChangedReportMapper.get(_request);
|
||||
getEventHandler().packagingQuantityChanged(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
public class SetupChangedThread : ThreadTemplate<SetupChangedReport>
|
||||
{
|
||||
public SetupChangedThread(OIBEventHandler eventHandler, SetupChangedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.SetupChangedReportMapper.get(_request);
|
||||
getEventHandler().setupChanged(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PackagingUnitConsumedThread : ThreadTemplate<PackagingUnitConsumedReport>
|
||||
{
|
||||
public PackagingUnitConsumedThread(OIBEventHandler eventHandler, PackagingUnitConsumedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PackagingUnitConsumedReportMapper.get(_request);
|
||||
getEventHandler().packagingUnitConsumed(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Calls delegieren an die eigentliche Implementierung
|
||||
|
||||
|
||||
public class MaterialMovedThread : ThreadTemplate<MaterialMovedReport>
|
||||
{
|
||||
public MaterialMovedThread(OIBEventHandler eventHandler, MaterialMovedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.MaterialMovedReportMapper.get(_request);
|
||||
getEventHandler().materialMoved(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PrinterToolVerifiedThread : ThreadTemplate<PrinterToolVerifiedReport>
|
||||
{
|
||||
public PrinterToolVerifiedThread(OIBEventHandler eventHandler, PrinterToolVerifiedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PrinterToolVerifiedReportMapper.get(_request);
|
||||
getEventHandler().printerToolVerified(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PrinterMaterialVerifiedThread : ThreadTemplate<PrinterMaterialVerifiedReport>
|
||||
{
|
||||
public PrinterMaterialVerifiedThread(OIBEventHandler eventHandler, PrinterMaterialVerifiedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PrinterMaterialVerifiedReportMapper.get(_request);
|
||||
getEventHandler().printerMaterialVerified(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PrinterMaterialUnverifiedThread : ThreadTemplate<PrinterMaterialUnverifiedReport>
|
||||
{
|
||||
public PrinterMaterialUnverifiedThread(OIBEventHandler eventHandler, PrinterMaterialUnverifiedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PrinterMaterialUnverifiedReportMapper.get(_request);
|
||||
getEventHandler().printerMaterialUnverified(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PrinterCoverOpenedThread : ThreadTemplate<PrinterCoverOpenedReport>
|
||||
{
|
||||
public PrinterCoverOpenedThread(OIBEventHandler eventHandler, PrinterCoverOpenedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PrinterCoverOpenedReportMapper.get(_request);
|
||||
getEventHandler().printerCoverOpened(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PrinterCoverClosedThread : ThreadTemplate<PrinterCoverClosedReport>
|
||||
{
|
||||
public PrinterCoverClosedThread(OIBEventHandler eventHandler, PrinterCoverClosedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PrinterCoverClosedReportMapper.get(_request);
|
||||
getEventHandler().printerCoverClosed(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PrinterConsumablesChangedThread : ThreadTemplate<PrinterConsumablesUpdatedReport>
|
||||
{
|
||||
public PrinterConsumablesChangedThread(OIBEventHandler eventHandler, PrinterConsumablesUpdatedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PrinterConsumablesUpdatedReportMapper.get(_request);
|
||||
getEventHandler().printerConsumablesUpdated(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PrinterCapabilitiesChangedThread : ThreadTemplate<PrinterCapabilitiesChangedReport>
|
||||
{
|
||||
public PrinterCapabilitiesChangedThread(OIBEventHandler eventHandler, PrinterCapabilitiesChangedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PrinterCapabilitiesChangedReportMapper.get(_request);
|
||||
getEventHandler().printerCapabilitiesChanged(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PrinterToolUnVerifiedThread : ThreadTemplate<PrinterToolUnverifiedReport>
|
||||
{
|
||||
public PrinterToolUnVerifiedThread(OIBEventHandler eventHandler, PrinterToolUnverifiedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PrinterToolUnverifiedReportMapper.get(_request);
|
||||
getEventHandler().printerToolUnverified(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PrinterRecipeVerifiedThread : ThreadTemplate<PrinterRecipeVerifiedReport>
|
||||
{
|
||||
public PrinterRecipeVerifiedThread(OIBEventHandler eventHandler, PrinterRecipeVerifiedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PrinterRecipeVerifiedReportMapper.get(_request);
|
||||
getEventHandler().printerRecipeVerified(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibSetupCenterEvents != null)
|
||||
_oibSetupCenterEvents.Dispose();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using com.itac.mes.proxy.business;
|
||||
using com.itac.mes.tools;
|
||||
using com.itac.oib.linecontrol.data;
|
||||
using Constants = com.itac.mes.tools.Constants;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
public class SpiReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private readonly OIBEventHandler _eventHandler;
|
||||
private readonly OibClient.OibSpiEvents _oibSpiEvents;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public SpiReceiver(OibClient.OibSpiEvents oibSpiEvents, OIBEventHandler eventHandler)
|
||||
{
|
||||
_eventHandler = eventHandler;
|
||||
_oibSpiEvents = oibSpiEvents;
|
||||
|
||||
oibSpiEvents.RecipeSecifiedForStation += OibSpiEventsRecipeSecifiedForStation;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Start/Stopp
|
||||
|
||||
public void Start()
|
||||
{
|
||||
_oibSpiEvents.StartDownloadEvents();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibSpiEvents.StopDownloadEvents();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
|
||||
public void OibSpiEventsRecipeSecifiedForStation(object sender, OibClient.RecipeSecifiedForStationEventArgs args)
|
||||
{
|
||||
try
|
||||
{
|
||||
var downloadData = new DownloadData();
|
||||
downloadData.strServiceComputer = "";
|
||||
downloadData.downloadTime = args.DownloadTime;
|
||||
downloadData.lineName = args.ProductionScheduleElement.Recipe.Setup.Line.FullPath;
|
||||
downloadData.stationName = args.StationIdentity.FullPath;
|
||||
downloadData.conveyorLanes = args.IsRightLane ? "Right" : "Left";
|
||||
downloadData.jobName = args.ProductionScheduleElement.OrderID;
|
||||
downloadData.recipeName = args.ProductionScheduleElement.Recipe.FullPath;
|
||||
downloadData.productionScheduleName = args.ProductionScheduleDisplayName;
|
||||
downloadData.productionScheduleElementId = args.ProductionScheduleElement.ID;
|
||||
downloadData.placementInfo = com.itac.oib.siplacepro.service.SiplacePro.GetPlacementForRecipe(args.ProductionScheduleElement.Recipe);
|
||||
_eventHandler.downloadEvent(downloadData);
|
||||
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "download Event received");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Trace.WriteLine("Error processing SPI property changed event: " + ex.Message);
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "Error processing SPI property changed event: ", ex);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibSpiEvents != null)
|
||||
_oibSpiEvents.Dispose();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using Asm.As.Oib.Client.CustomExtensions;
|
||||
using com.itac.mes.tools;
|
||||
using Constants = com.itac.mes.tools.Constants;
|
||||
using com.itac.mes.proxy.business;
|
||||
using com.itac.oib.traceability.contracts.data;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
using SiplaceNS = www.siplace.com.OIB._2012._03.Traceability.Contracts.Data;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
/// <summary>
|
||||
/// Receiver class for the TraceService events
|
||||
/// </summary>
|
||||
public class TraceabilityReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
OIBEventHandler _eventHandler;
|
||||
readonly OibClient.OibTraceabilityEvents _oibTraceabilityEvents;
|
||||
readonly OperatorNotificationManager _operatorNotificationManager;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public TraceabilityReceiver(OibClient.OibTraceabilityEvents oibTraceEvents, OIBEventHandler eventHandler, OperatorNotificationManager operatorNotificationManager)
|
||||
{
|
||||
if (oibTraceEvents == null) throw new ArgumentNullException("oibTraceEvents");
|
||||
if (eventHandler == null) throw new ArgumentNullException("eventHandler");
|
||||
if (operatorNotificationManager == null) throw new ArgumentNullException("operatorNotificationManager");
|
||||
|
||||
_oibTraceabilityEvents = oibTraceEvents;
|
||||
_eventHandler = eventHandler;
|
||||
_operatorNotificationManager = operatorNotificationManager;
|
||||
|
||||
oibTraceEvents.TraceabilityData = TraceDataReceived;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
_oibTraceabilityEvents.Start();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibTraceabilityEvents.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
|
||||
|
||||
public SiplaceNS.BoardProducedResponse TraceDataReceived(SiplaceNS.TraceabilityData traceabilityData)
|
||||
{
|
||||
SiplaceNS.BoardProducedResponse response = new SiplaceNS.BoardProducedResponse();
|
||||
try
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "ITraceabilityOibService.NewTraceabilityData");
|
||||
if (_eventHandler != null)
|
||||
{
|
||||
|
||||
TraceabilityData itacTraceData = TraceabilityDataMapper.get(traceabilityData);
|
||||
BoardProducedResponse result = _eventHandler.boardProduced(itacTraceData);
|
||||
if (result.BoardValidationResult == 2)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "received the RC_TRCDATA_REJECTED return code");
|
||||
try
|
||||
{
|
||||
_operatorNotificationManager.TraceDataRejected("Die letzte Station wurde gestoppt, da iTac die Tracedaten als fehlerhaft erkannt hat.");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "calling OperatorNotificationManager failed", ex);
|
||||
}
|
||||
}
|
||||
else if (result.BoardValidationReason.StartsWith("RC_TRCDATA_REJECTED:"))
|
||||
{
|
||||
string message = result.BoardValidationReason.Replace("RC_TRCDATA_REJECTED:", "");
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "received the RC_TRCDATA_REJECTED return code with additional l message text " + message);
|
||||
try
|
||||
{
|
||||
_operatorNotificationManager.TraceDataRejected(message);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "calling OperatorNotificationManager failed", ex);
|
||||
}
|
||||
}
|
||||
response.BoardValidationResult = 2;
|
||||
return response;
|
||||
}
|
||||
else
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Warning, "calling ITraceabilityOibService.NewTraceabilityData not performed");
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// der letzte Aufruf schlug fehl!!
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "calling NewTraceabilityData in eventHandler failed", e);
|
||||
}
|
||||
response.BoardValidationResult = 1;
|
||||
return response;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibTraceabilityEvents != null)
|
||||
_oibTraceabilityEvents.Dispose();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user