Skip to content

Instantly share code, notes, and snippets.

@rantri
Created July 28, 2020 17:49
Show Gist options
  • Save rantri/85f6e4fbc514e4f5aa00fd1fa5bdf8c9 to your computer and use it in GitHub Desktop.
Save rantri/85f6e4fbc514e4f5aa00fd1fa5bdf8c9 to your computer and use it in GitHub Desktop.
private async Task DoScans(ImagingMagType camera, ushort numberOfScan, ushort grabsInScan)
{
Task DoTriggers(MultimediaTimer t, ushort n, uint trigger)
{
return Task.Run(() =>
{
for (var i = 0; i < n; i++)
{
_iOIb.SetPortBValue(trigger, true);
_iOIb.SetPortBValue(trigger, false);
t.Sleep(4);
}
});
}
var triggerMap = new Dictionary<ImagingMagType,uint>
{
{ImagingMagType.MainMag, DIGCHANNELMAPTYPES.IO_DIGCH_CAM_1_TRIGGER},
{ImagingMagType.SecondaryMag, DIGCHANNELMAPTYPES.IO_DIGCH_CAM_2_TRIGGER},
{ImagingMagType.BothMag, DIGCHANNELMAPTYPES.IO_DIGCH_BOTH_CAM_TRIGGER}
};
var timer = new MultimediaTimer();
try
{
var camera1 = NGActivator.GetContainer().ResolveNamed<IImagingCamera>(CompID.ImagingMainCamera);
var camera2 = NGActivator.GetContainer().ResolveNamed<IImagingCamera>(CompID.ImagingSecondaryCamera);
var inLiveVideo1 = camera1.EnterHwTriggeringOnlyMode();
var inLiveVideo2 = camera2.EnterHwTriggeringOnlyMode();
var scan = new ImagingMFGScan();
var trigger = triggerMap[camera];
var sw = Stopwatch.StartNew();
for (var iScans = 0; iScans < numberOfScan; iScans++)
{
scan.DoScan(camera, grabsInScan, false);
var triggersTask = DoTriggers(timer, grabsInScan, trigger);
for (var iGrabs = 0; iGrabs < grabsInScan; iGrabs++)
{
var grab = scan.GetNextGrab();
var images = await Task.WhenAll(grab.Values).ConfigureAwait(false);
foreach (var image in images)
{
image.Dispose();
}
}
await triggersTask;
}
sw.Stop();
camera1.ExitHwTriggeringOnlyMode(inLiveVideo1);
camera2.ExitHwTriggeringOnlyMode(inLiveVideo2);
MessageBox.Show($@"It took {sw.ElapsedMilliseconds} milliseconds for {numberOfScan} scans with {grabsInScan} grabs:
One image {sw.ElapsedMilliseconds / (numberOfScan * grabsInScan)} mSec in average", @"Test result",
MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification);
}
finally
{
timer.Dispose();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment