88 lines
3.1 KiB
C#
88 lines
3.1 KiB
C#
using Serilog;
|
|
using VisionBuilder.UI.Common;
|
|
using VisionBuilder.UI.Statistics;
|
|
|
|
namespace B24SiemensPlugin;
|
|
|
|
public class SiemensCameraModule: IVisionBuilderModule
|
|
{
|
|
private readonly SingleCameraVM _singleCameraVm;
|
|
private readonly B24SiemensSettings _settings;
|
|
private readonly VisionBuilderStatistics _statistics;
|
|
|
|
private SiemensServer _server;
|
|
|
|
public SiemensCameraModule(SingleCameraVM singleCameraVm,B24SiemensSettings settings, VisionBuilderStatistics statistics)
|
|
{
|
|
_singleCameraVm = singleCameraVm;
|
|
_settings = settings;
|
|
_statistics = statistics;
|
|
}
|
|
|
|
public void InitializeModule()
|
|
{
|
|
_server = new SiemensServer();
|
|
_server.OnPLCPacket += _server_OnPLCPacket;
|
|
_server.Start();
|
|
}
|
|
string? GetMapping(int material)
|
|
{
|
|
var mapping = _settings.RecipeMappings.FirstOrDefault(x => x.MaterialNumber == material);
|
|
if (mapping == null)
|
|
{
|
|
return null;
|
|
}
|
|
return mapping.RecipeName;
|
|
}
|
|
private PLCPacket _server_OnPLCPacket(PLCPacket packet)
|
|
{
|
|
if (_singleCameraVm.SynchronizationContext == null)
|
|
{
|
|
Log.Warning("Synchronization context is null, cannot update UI from PLC packet.");
|
|
return packet;
|
|
}
|
|
packet.KameraStart= _singleCameraVm.IsRunning;
|
|
var recipe = GetMapping(packet.Materialnummer);
|
|
var selectedRecipe = _singleCameraVm.SelectedRecipe;
|
|
if (recipe != null && recipe != selectedRecipe?.RecipeName)
|
|
{
|
|
var vm = _singleCameraVm.GetRecipeSelectionVm();
|
|
vm.SelectedRecipe = vm.Recipes.FirstOrDefault(r => r.RecipeName == recipe);
|
|
if (vm.SelectedRecipe != null)
|
|
{
|
|
_singleCameraVm.SynchronizationContext!.Post((_) =>
|
|
{
|
|
_singleCameraVm.ProcessRecipeSelectionVm(vm);
|
|
}, null);
|
|
_statistics.Metadata = packet.Materialnummer.ToString();
|
|
}
|
|
Log.Information("Selected recipe {Recipe} for material number {MaterialNumber}", recipe, packet.Materialnummer);
|
|
|
|
}
|
|
//Log.Information("Lifebit: {Lifebit}, KameraStart: {KameraStart}", packet.Lifebit, packet.KameraStart);
|
|
//Log.Information("Camera running: {IsRunning}", _singleCameraVm.IsRunning);
|
|
//if (recipe != selectedRecipe?.RecipeName)
|
|
//{
|
|
// if (packet.KameraStart && !_singleCameraVm.IsRunning)
|
|
// {
|
|
// Log.Information("Starting camera based on PLC packet.");
|
|
// _singleCameraVm.SynchronizationContext!.Post((o) =>
|
|
// {
|
|
// _ = _singleCameraVm.Start();
|
|
// }, null);
|
|
// }
|
|
// if (!packet.KameraStart && _singleCameraVm.IsRunning)
|
|
// {
|
|
// Log.Information("Stopping camera based on PLC packet.");
|
|
// _singleCameraVm.SynchronizationContext!.Post((o) =>
|
|
// {
|
|
// _ = _singleCameraVm.Stop();
|
|
// }, null);
|
|
// }
|
|
//}
|
|
|
|
|
|
return packet;
|
|
|
|
}
|
|
} |