Hi @XBo,
as promised my example:
I used the new .NET wrappers that I already linked you above.
You can just open it in LINQPad to test it.
You will need to reference the Stemmer.Cvb.dll.
void Main()
{
using (Device device = DeviceFactory.Open("GenICam.vin"))
{
var cameraQuartzTicks = GetCameraQuartzTicks(device);
device.Stream.Start();
// Call this whenever your timedrift gets too big.
var syncTuple = SyncTimes(device);
// Some kind of loop around this block
for (int numTestWaitCalls = 0; numTestWaitCalls < 10; numTestWaitCalls++)
{
using (var image = device.Stream.Wait())
{
var newImageTimestamp = (long)image.RawTimestamp;
long passedTicks = newImageTimestamp - syncTuple.Item2;
var passedTime = CalculatePassedTimeFrom(passedTicks, cameraQuartzTicks);
var timeImageWasTaken = syncTuple.Item1.Add(passedTime);
Console.WriteLine("Image was taken at " + (timeImageWasTaken).ToString("hh:MM:ss,mm"));
}
}
}
}
private TimeSpan CalculatePassedTimeFrom(long passedTicks, long cameraQuartzTicks)
{
return TimeSpan.FromSeconds(passedTicks / cameraQuartzTicks);
}
private Tuple<DateTime, long> SyncTimes(Device device)
{
DateTime startTime = DateTime.Now;
LatchTicks(device);
DateTime endTime = DateTime.Now;
var timeStampTickValue = GetTimeStampTickValue(device);
var passedTimeSpan = (endTime - startTime);
var timeOfLatch = new DateTime(startTime.Ticks + (passedTimeSpan.Ticks / 2));
Console.WriteLine(timeOfLatch.ToString("hh:MM:ss,mm"));
return new Tuple<DateTime, long>(timeOfLatch, timeStampTickValue);
}
private void LatchTicks(Device device)
{
using (var nodemap = device.NodeMaps[NodeMapNames.Device])
{
var latchNode = nodemap["GevTimestampControlLatch"] as CommandNode;
latchNode.Execute();
}
}
private long GetTimeStampTickValue(Device device)
{
using (var nodemap = device.NodeMaps[NodeMapNames.Device])
{
var timeStampTickValue = nodemap["GevTimestampValue"] as IntegerNode;
return timeStampTickValue.Value;
}
}
private long GetCameraQuartzTicks(Device device)
{
using (var nodemap = device.NodeMaps[NodeMapNames.Device])
{
var quartzFrequency = nodemap["GevTimestampTickFrequency"] as IntegerNode;
return quartzFrequency.Value;
}
}
Hope it helps!
Regards
Chris