using VisionBuilder.UI.Common; namespace B24SiemensPlugin; public class SiemensCameraModule: IVisionBuilderModule { private readonly SingleCameraVM _singleCameraVm; private readonly B24SiemensSettings _settings; private SiemensServer _server; public SiemensCameraModule(SingleCameraVM singleCameraVm,B24SiemensSettings settings) { _singleCameraVm = singleCameraVm; _settings = settings; } 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) { 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); } } return packet; } }