initialize

This commit is contained in:
Pruefer
2025-06-06 09:15:13 +02:00
commit fa7c2730f1
5817 changed files with 1339670 additions and 0 deletions

View File

@@ -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);
}
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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();
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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;
}
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}

View File

@@ -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
}
}