1.0.6
This commit is contained in:
@@ -13,22 +13,23 @@ public class CandyboxBarcodeReader : IVisionBuilderModule
|
||||
private readonly ILoadingService _loadingService;
|
||||
|
||||
private readonly CandyboxBarcodeReaderSettings _settings;
|
||||
private readonly IRecognitionControl _recognitionControl;
|
||||
private readonly SingleCameraVM _singleCameraVm;
|
||||
private readonly VisionBuilderStatistics _statistics;
|
||||
private SerialPort _port;
|
||||
public EReaderState _readerState = EReaderState.ReadingRecipe;
|
||||
private MaterialCancellableLoader? _loader;
|
||||
|
||||
public CandyboxBarcodeReader(CandyboxBarcodeReaderSettings settings, IRecognitionControl recognitionControl, VisionBuilderStatistics statistics)
|
||||
public CandyboxBarcodeReader(CandyboxBarcodeReaderSettings settings, SingleCameraVM singleCameraVm, VisionBuilderStatistics statistics)
|
||||
{
|
||||
_settings = settings;
|
||||
_recognitionControl = recognitionControl;
|
||||
_singleCameraVm = singleCameraVm;
|
||||
_statistics = statistics;
|
||||
}
|
||||
|
||||
private void _port_DataReceived(object sender, SerialDataReceivedEventArgs e)
|
||||
{
|
||||
Thread.Sleep(100);
|
||||
Thread.Sleep(500);
|
||||
if(_singleCameraVm.IsRunning)return;
|
||||
if(_readerState == EReaderState.ReadingRecipe)
|
||||
ReadRecipe();
|
||||
if (_readerState == EReaderState.ReadingAUF)
|
||||
@@ -37,14 +38,21 @@ public class CandyboxBarcodeReader : IVisionBuilderModule
|
||||
|
||||
private void ReadRecipe()
|
||||
{
|
||||
if (_recognitionControl.IsRunning) return;
|
||||
if (_singleCameraVm.IsRunning) return;
|
||||
|
||||
byte[] buffer = new byte[_port.BytesToRead];
|
||||
_port.Read(buffer, 0, _port.BytesToRead);
|
||||
var data = Encoding.ASCII.GetString(buffer).Trim();
|
||||
var recipes = _recognitionControl.GetRecipesData();
|
||||
if (string.IsNullOrEmpty(data))
|
||||
{
|
||||
Log.Warning("Received empty recipe");
|
||||
return;
|
||||
}
|
||||
var vm = _singleCameraVm.GetRecipeSelectionVm();
|
||||
var recipes = vm.Recipes;
|
||||
|
||||
string searchString = data;
|
||||
Log.Information("Read Recipe: {Recipe}", data);
|
||||
if (_settings.BarcodeRecipeMappings.Any(x => x.Barcode == searchString))
|
||||
{
|
||||
searchString = _settings.BarcodeRecipeMappings.First(x => x.Barcode == searchString).RecipeName;
|
||||
@@ -56,20 +64,29 @@ public class CandyboxBarcodeReader : IVisionBuilderModule
|
||||
Log.Warning("No matching recipe found for data: {Data}", data);
|
||||
return;
|
||||
}
|
||||
|
||||
_recognitionControl.SetRecipe(existingRecipe);
|
||||
vm.SelectedRecipe = vm.Recipes.FirstOrDefault(r => r.RecipeName == existingRecipe.RecipeName);
|
||||
_singleCameraVm.SynchronizationContext!.Post((_) =>
|
||||
{
|
||||
_loader = new MaterialCancellableLoader();
|
||||
_loader.StartLoading("Waiting for AUF...");
|
||||
_loader.LoadingCancelled += CancelWaiting;
|
||||
_singleCameraVm.ProcessRecipeSelectionVm(vm);
|
||||
}, null);
|
||||
Application.DoEvents();
|
||||
_readerState = EReaderState.ReadingAUF;
|
||||
_loader = new MaterialCancellableLoader();
|
||||
_loader.StartLoading("Waiting for AUF...");
|
||||
_loader.LoadingCancelled += CancelWaiting;
|
||||
|
||||
}
|
||||
|
||||
private void CancelWaiting(object? sender, string e)
|
||||
{
|
||||
_singleCameraVm.SynchronizationContext!.Post((_) =>
|
||||
{
|
||||
_loader.FinishLoading("Waiting for AUF...");
|
||||
_loader.LoadingCancelled -= CancelWaiting;
|
||||
_loader = null;
|
||||
}, null);
|
||||
_readerState = EReaderState.ReadingRecipe;
|
||||
_loader.Close();
|
||||
_loader.LoadingCancelled -= CancelWaiting;
|
||||
_loader = null;
|
||||
|
||||
}
|
||||
|
||||
private void ReadAUF()
|
||||
@@ -77,17 +94,22 @@ public class CandyboxBarcodeReader : IVisionBuilderModule
|
||||
byte[] buffer = new byte[_port.BytesToRead];
|
||||
_port.Read(buffer, 0, _port.BytesToRead);
|
||||
var data = Encoding.ASCII.GetString(buffer).Trim();
|
||||
if (string.IsNullOrEmpty(data))
|
||||
{
|
||||
Log.Warning("Received empty AUF");
|
||||
return;
|
||||
}
|
||||
Log.Information("Read AUF: {AUF}", data);
|
||||
if (_loader != null)
|
||||
{
|
||||
_loader.Close();
|
||||
_loader.LoadingCancelled -= CancelWaiting;
|
||||
_loader = null;
|
||||
CancelWaiting(this, string.Empty);
|
||||
}
|
||||
|
||||
|
||||
_statistics.Metadata = data;
|
||||
_recognitionControl.Start();
|
||||
_readerState = EReaderState.ReadingAUF;
|
||||
_=_singleCameraVm.Start().ConfigureAwait(false);
|
||||
Application.DoEvents();
|
||||
_readerState = EReaderState.ReadingRecipe;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ public class CandyboxImageProcessingControl : BaseRecognitionControl
|
||||
swTotal.Stop();
|
||||
|
||||
var allErrors =
|
||||
res.ErrorPoints.Select(x => x.ToString())
|
||||
res.ErrorPoints.Select(x => "Position "+x.ToString())
|
||||
.Concat(
|
||||
res.ErrorReason.Where(x=>x != EErrorReason.Good).Select(x=>x.ToString())
|
||||
).ToArray();
|
||||
|
||||
@@ -3,6 +3,7 @@ using Inspectron.Settings;
|
||||
using Ninject;
|
||||
using System.Reflection;
|
||||
using CandyboxPlugin.Modules.Barcode;
|
||||
using Ninject.Planning.Bindings;
|
||||
using VisionBuilder.UI.Common;
|
||||
using VisionBuilder.UI.Common.Plugins;
|
||||
using VisionBuilder.UI.Common.Processing;
|
||||
@@ -21,7 +22,13 @@ namespace CandyboxPlugin
|
||||
|
||||
public void RegisterCameraModules(IKernel kernel, string cameraName)
|
||||
{
|
||||
kernel.Bind<CandyboxRecognitionControlSettings, ISettings>().ToConstant(new CandyboxRecognitionControlSettings(cameraName));
|
||||
|
||||
// remove settings binding
|
||||
var existingRecognitionControlSettings = kernel.GetBindings(typeof(BaseRecognitionControlSettings)).First();
|
||||
var toRemove = kernel.GetBindings(typeof(ISettings)).First(x => x.ProviderCallback.Target == existingRecognitionControlSettings.ProviderCallback.Target);
|
||||
kernel.RemoveBinding(toRemove);
|
||||
|
||||
kernel.Bind<CandyboxRecognitionControlSettings,BaseRecognitionControlSettings, ISettings>().ToConstant(new CandyboxRecognitionControlSettings(cameraName));
|
||||
|
||||
kernel.Rebind<IRecognitionControl>().To<CandyboxImageProcessingControl>().InSingletonScope();
|
||||
|
||||
|
||||
@@ -477,6 +477,8 @@ namespace CandyboxPlugin.Recipe
|
||||
|
||||
if(_learnedParameters.CandyParameters.Count==0)errorReason.Add(EErrorReason.NotLearned);
|
||||
|
||||
Thread.Sleep(50);
|
||||
|
||||
return new ProcessingResult(framedImage, final,
|
||||
_learnedParameters.CandyParameters.Count == 0 || wasError, (int) sw.ElapsedMilliseconds,
|
||||
errorReason)
|
||||
@@ -487,6 +489,7 @@ namespace CandyboxPlugin.Recipe
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
Thread.Sleep(50);
|
||||
return new ProcessingResult(image, image,
|
||||
true, (int)sw.ElapsedMilliseconds,
|
||||
new List<EErrorReason>() {EErrorReason.Unknown})
|
||||
|
||||
@@ -10,14 +10,15 @@ namespace PackstrasseBarcodeReader
|
||||
public class PackstrasseBarcodeReaderModule : IVisionBuilderModule
|
||||
{
|
||||
private readonly PackstrasseBarcodeReaderSettings _settings;
|
||||
private readonly IRecognitionControl _recognitionControl;
|
||||
private readonly SingleCameraVM _singleCameraVm;
|
||||
private SerialPort _port;
|
||||
|
||||
|
||||
public PackstrasseBarcodeReaderModule(PackstrasseBarcodeReaderSettings settings, IRecognitionControl recognitionControl)
|
||||
public PackstrasseBarcodeReaderModule(PackstrasseBarcodeReaderSettings settings, SingleCameraVM singleCameraVm)
|
||||
{
|
||||
_settings = settings;
|
||||
_recognitionControl = recognitionControl;
|
||||
_singleCameraVm = singleCameraVm;
|
||||
|
||||
}
|
||||
|
||||
private void _port_DataReceived(object sender, SerialDataReceivedEventArgs e)
|
||||
@@ -26,7 +27,8 @@ namespace PackstrasseBarcodeReader
|
||||
byte[] buffer = new byte[_port.BytesToRead];
|
||||
_port.Read(buffer, 0, _port.BytesToRead);
|
||||
var data = Encoding.ASCII.GetString(buffer).Trim();
|
||||
var recipes = _recognitionControl.GetRecipesData();
|
||||
var vm = _singleCameraVm.GetRecipeSelectionVm();
|
||||
|
||||
|
||||
string searchString = data;
|
||||
if (_settings.BarcodeRecipeMappings.Any(x=>x.Barcode==searchString))
|
||||
@@ -34,14 +36,17 @@ namespace PackstrasseBarcodeReader
|
||||
searchString = _settings.BarcodeRecipeMappings.First(x => x.Barcode == searchString).RecipeName;
|
||||
}
|
||||
|
||||
var existingRecipe=recipes.FirstOrDefault(x => x.RecipeName == searchString);
|
||||
var existingRecipe= vm.Recipes.FirstOrDefault(x => x.RecipeName == searchString);
|
||||
if (existingRecipe == null)
|
||||
{
|
||||
Log.Warning("No matching recipe found for data: {Data}", data);
|
||||
return;
|
||||
}
|
||||
|
||||
_recognitionControl.SetRecipe(existingRecipe);
|
||||
vm.SelectedRecipe = vm.Recipes.FirstOrDefault(r => r.RecipeName == existingRecipe.RecipeName);
|
||||
_singleCameraVm.SynchronizationContext!.Post((_) =>
|
||||
{
|
||||
_singleCameraVm.ProcessRecipeSelectionVm(vm);
|
||||
}, null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user