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,156 @@
#region Namespace
using System;
using System.Diagnostics;
using com.itac.mes.tools;
using com.itac.mes.proxy.business;
using OibClient = Asm.As.Oib.Client;
using com.itac.oib.client.customextensions;
#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 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;
_oibBoardGateKeeperEvents.Ping = Ping;
}
#endregion
#region Start/Stop
public void Start()
{
_oibBoardGateKeeperEvents.Start();
}
public void Stop()
{
_oibBoardGateKeeperEvents.Stop();
}
#endregion
#region Handling of events
bool Ping()
{
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, "BoardGateKeeperReceiver.Ping");
return _eventHandler != null;
}
#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)
{
com.itac.oib.client.customextensions.VirtualInkspotHandlerBoardRequest virtInkspotBoardRequest = VirtualInkspotHandlerBoardRequestMapper.get(virtualInkspotHandlerBoardRequest);
com.itac.oib.boardgatekeeper.contracts.data.BoardRequestResult itacResult = _eventHandler.virtualInkspotBoardRequest(virtInkspotBoardRequest);
// itacResult ist null: call an das DataInterface schlug fehl
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
{
//
// Werte in die Rückgabe kopieren;
/* virtualInkspotHandlerBoardRequest.BoardRequestResult.Reason = itacResult.getBoardRequestResult().reason;
virtualInkspotHandlerBoardRequest.BoardRequestResult.RequestResult = itacResult.getBoardRequestResult().requestResult;
if (itacResult.getBoardRequestResult().getVIHResult().getSubPanelStates() != null)
{
if (itacResult.getBoardRequestResult().getVIHResult().getSubPanelStates().Length == virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates.Length)
{
// subPanelStates kopieren
for (int i = 0; i < itacResult.getBoardRequestResult().getVIHResult().getSubPanelStates().Length; i++)
{
virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Place = itacResult.getBoardRequestResult().getVIHResult().getSubPanelStates()[i].getPlace();
virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Reason = itacResult.getBoardRequestResult().getVIHResult().getSubPanelStates()[i].getReason();
}
}
}
*/
}
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);
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.tools;
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 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()
{
var v = _changeoverManager.GetCurrentLineProductionData();
com.itac.oib.client.customextensions.LineChangeoverEventArgs lineChangeoverEvent = LineChangeoverEventArgsMapper.get(v);
if (lineChangeoverEvent == null)
{
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "LineChangeover not converted");
return null;
}
return lineChangeoverEvent;
}
}
}

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,215 @@
#region Namespace
using System;
using System.Diagnostics;
using System.Threading;
using com.itac.mes.tools;
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;
#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)
{
try
{
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "StationEventReceived");
if (stationEventMaxAge.Ticks > 0)
{
DateTime oldestDate = new DateTime(DateTime.Now.ToUniversalTime().Ticks - stationEventMaxAge.Ticks).ToUniversalTime();
if (args.StationEventComposite != null && args.StationEventComposite.StationTime.ToUniversalTime().Ticks < oldestDate.Ticks)
{
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,37 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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,248 @@
#region Namespace
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.ServiceModel;
using www.siplace.com.OIB._2008._05.SetupCenter.Contracts.Data;
using com.itac.mes.tools;
using com.itac.mes.proxy.business;
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.Ping = Ping;
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
/// <summary>
/// Check for the client if this service is available.
/// </summary>
/// <returns></returns>
public bool Ping()
{
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, "SetupCenterExternalControl.Ping");
return _eventHandler != null;
}
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);
www.siplace.com.OIB._2008._05.SetupCenter.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 www.siplace.com.OIB._2008._05.SetupCenter.Contracts.Data.PackagingUnitLocation[] packagingUnitLocations,
ref www.siplace.com.OIB._2008._05.SetupCenter.Contracts.Data.ExternalControlResult[] result)
{
//
// special ASM Handling:
// simply return MSD Level and MSD Open Date as received in request
foreach (www.siplace.com.OIB._2008._05.SetupCenter.Contracts.Data.PackagingUnitLocation item in packagingUnitLocations)
{
// find this container in result and copy the values
foreach (www.siplace.com.OIB._2008._05.SetupCenter.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,269 @@
#region Namespace
using System;
using System.Diagnostics;
using com.itac.mes.tools;
using com.itac.mes.proxy.business;
using System.Threading;
using OibClient = Asm.As.Oib.Client;
using www.siplace.com.OIB._2008._05.SetupCenter.Contracts.Data;
#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;
}
#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.PackagingQuantityChangedReportRequest.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.FeederPlacedReport);
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.FeederRemovedReportRequest.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.NewSetupActiveReportRequest.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.SetupChangedReportRequest.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.PackagingUnitConsumedReportRequest.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.MaterialMovedReportRequest.MaterialMovedReport);
var thread = new Thread(mmt.ThreadFunction);
thread.Start();
}
catch (Exception e)
{
setupcenterEventFailed(args, e);
}
}
// 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);
}
}
#endregion
#region IDisposeable
public void Dispose()
{
if (_oibSetupCenterEvents != null)
_oibSetupCenterEvents.Dispose();
}
#endregion
}
}

View File

@@ -0,0 +1,91 @@
#region Namespace
using System;
using System.Diagnostics;
using System.Threading;
using com.itac.mes.tools;
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 com.itac.oib.linecontrol.data;
#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,126 @@
#region Namespace
using System;
using System.Diagnostics;
using Asm.As.Oib.Client.CustomExtensions;
using com.itac.mes.tools;
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._2009._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 bool TraceDataReceived(SiplaceNS.TraceabilityData traceabilityData)
{
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 true;
}
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 true;
}
#endregion
#region IDisposeable
public void Dispose()
{
if (_oibTraceabilityEvents != null)
_oibTraceabilityEvents.Dispose();
}
#endregion
}
}