|
|
@@ -2,6 +2,7 @@
|
|
|
using Microsoft.Win32;
|
|
|
using netDxf.Entities;
|
|
|
using NPOI.POIFS.Crypt.Dsig;
|
|
|
+using NPOI.SS.Formula;
|
|
|
using NPOI.SS.Formula.Eval;
|
|
|
using SciCamera.Net;
|
|
|
using System;
|
|
|
@@ -16,6 +17,7 @@ using System.Runtime.InteropServices;
|
|
|
using System.Text;
|
|
|
using System.Threading;
|
|
|
using System.Threading.Tasks;
|
|
|
+using System.Web.Configuration;
|
|
|
using TeamAAS_VP.Enums;
|
|
|
using TeamAAS_VP.Interfaces;
|
|
|
using TeamAAS_VP.Models;
|
|
|
@@ -357,7 +359,7 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
nReVal = mvCameraAcq.SetEnumValueByStringEx(SciCam.SciCamDeviceXmlType.SciCam_DeviceXml_Camera, "TriggerMode", "On");
|
|
|
nReVal = mvCameraAcq.SetEnumValueByString("TriggerSource", "Software");
|
|
|
// ch:注册事件回调 | en:Register event callback
|
|
|
- nReVal = mvCameraAcq.RegisterPayloadCallBack(new SciCam.fnOnPayloadDelegate(ImageCallBack), IntPtr.Zero, true);
|
|
|
+ //nReVal = mvCameraAcq.RegisterPayloadCallBack(new SciCam.fnOnPayloadDelegate(ImageCallBack), IntPtr.Zero, true);
|
|
|
// ch:设置采集策略 | en:Set Grab Strategy
|
|
|
nReVal = mvCameraAcq.SetGrabStrategy(CurrentGrabStrategy);
|
|
|
if (nReVal != SciCam.SCI_CAMERA_OK)
|
|
|
@@ -368,7 +370,7 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
{
|
|
|
CameraConnectChangedEvent?.Invoke(ID, true);
|
|
|
}
|
|
|
- mvCameraAcq.SetGrabTimeout(2000);
|
|
|
+ mvCameraAcq.SetGrabTimeout(5000);
|
|
|
IsConnected = mvCameraAcq.IsDeviceOpen();
|
|
|
if (IsConnected)
|
|
|
{
|
|
|
@@ -405,6 +407,7 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
{
|
|
|
mvCameraAcq?.StopGrabbing();
|
|
|
mvCameraAcq?.CloseDevice();
|
|
|
+ mvCameraAcq?.DeleteDevice();
|
|
|
}
|
|
|
finally
|
|
|
{
|
|
|
@@ -435,24 +438,26 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
}
|
|
|
|
|
|
// 重置TaskCompletionSource
|
|
|
- _tcs?.TrySetCanceled();
|
|
|
- _tcs = new TaskCompletionSource<ICogImage>();
|
|
|
+ //_tcs?.TrySetCanceled();
|
|
|
+ //_tcs = new TaskCompletionSource<ICogImage>();
|
|
|
|
|
|
// 注册取消令牌
|
|
|
- CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(2000); // 2秒超时
|
|
|
- cancellationTokenSource.Token.Register(() => _tcs.TrySetCanceled());
|
|
|
+ //CancellationTokenSource cancellationTokenSource = new CancellationTokenSource(2000000); // 2秒超时
|
|
|
+ //cancellationTokenSource.Token.Register(() => _tcs.TrySetCanceled());
|
|
|
|
|
|
// 触发图像采集
|
|
|
// ch:发送软触发命令 | en:Send Trigger Software command
|
|
|
nReVal = mvCameraAcq.SetCommandValueEx(SciCam.SciCamDeviceXmlType.SciCam_DeviceXml_Camera, "TriggerSoftware");
|
|
|
if (nReVal == SciCam.SCI_CAMERA_OK)
|
|
|
{
|
|
|
- // 等待图像接收事件
|
|
|
- Image = _tcs.Task.Result;
|
|
|
- TotalTime = sw.Elapsed;
|
|
|
- ErrorMessage = $"{i + 1}";
|
|
|
- if (Image != null)
|
|
|
+ nReVal = mvCameraAcq.Grab(ref payload);
|
|
|
+ if (nReVal == SciCam.SCI_CAMERA_OK)
|
|
|
{
|
|
|
+ Image = GetConvertedInfo(payload);
|
|
|
+ mvCameraAcq.FreePayload(payload);
|
|
|
+ //nReVal = mvCameraAcq.StopGrabbing();
|
|
|
+ TotalTime = sw.Elapsed;
|
|
|
+ ErrorMessage = $"{i + 1}";
|
|
|
return Image;
|
|
|
}
|
|
|
else
|
|
|
@@ -464,7 +469,6 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
OpenDevice();
|
|
|
ErrorMessage = "图像采集失败!";
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -473,7 +477,7 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
//_operationSemaphore.Release();
|
|
|
CloseDevice();
|
|
|
OpenDevice();
|
|
|
- ErrorMessage = "图像采集失败!";
|
|
|
+ ErrorMessage = "软触发失败!";
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
@@ -626,25 +630,31 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
return 0;
|
|
|
|
|
|
uint nReVal = SciCam.SCI_CAMERA_OK;
|
|
|
- SciCam.SCI_NODE_VAL_INT iNodeVal = new SciCam.SCI_NODE_VAL_INT();
|
|
|
- nReVal = mvCameraAcq.GetIntValue("ExposureTime", ref iNodeVal);
|
|
|
- if (nReVal != SciCam.SCI_CAMERA_OK)
|
|
|
+ string[] nodeName = new string[]
|
|
|
+ {
|
|
|
+ "ExposureTime",
|
|
|
+ "ExposureTimeAbs",
|
|
|
+ "ExposureTimeRaw"
|
|
|
+ };
|
|
|
+ for (int i = 0; i < nodeName.Count(); i++)
|
|
|
{
|
|
|
- SciCam.SCI_NODE_VAL_FLOAT fNodeVal = new SciCam.SCI_NODE_VAL_FLOAT();
|
|
|
- nReVal = mvCameraAcq.GetFloatValue("ExposureTime", ref fNodeVal);
|
|
|
- if (nReVal == SciCam.SCI_CAMERA_OK)
|
|
|
+ SciCam.SCI_NODE_VAL_INT iNodeVal = new SciCam.SCI_NODE_VAL_INT();
|
|
|
+ nReVal = mvCameraAcq.GetIntValueEx(SciCam.SciCamDeviceXmlType.SciCam_DeviceXml_Camera, nodeName[i], ref iNodeVal);
|
|
|
+ if (nReVal != SciCam.SCI_CAMERA_OK)
|
|
|
{
|
|
|
- return (float)fNodeVal.dVal;
|
|
|
+ SciCam.SCI_NODE_VAL_FLOAT fNodeVal = new SciCam.SCI_NODE_VAL_FLOAT();
|
|
|
+ nReVal = mvCameraAcq.GetFloatValueEx(SciCam.SciCamDeviceXmlType.SciCam_DeviceXml_Camera, nodeName[i], ref fNodeVal);
|
|
|
+ if (nReVal == SciCam.SCI_CAMERA_OK)
|
|
|
+ {
|
|
|
+ return Convert.ToSingle(fNodeVal.dVal);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return 0;
|
|
|
+ return Convert.ToSingle(iNodeVal.nVal);
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
- {
|
|
|
- return (float)iNodeVal.nVal;
|
|
|
- }
|
|
|
+ return 0;
|
|
|
}
|
|
|
finally
|
|
|
{
|
|
|
@@ -665,12 +675,29 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
if (!mvCameraAcq.IsDeviceOpen())
|
|
|
return false;
|
|
|
uint nReVal = SciCam.SCI_CAMERA_OK;
|
|
|
- nReVal = mvCameraAcq.SetIntValue("Gain", (int)Gain);
|
|
|
- if (nReVal != SciCam.SCI_CAMERA_OK)
|
|
|
+ string[] nodeName = new string[]
|
|
|
+ {
|
|
|
+ "Gain",
|
|
|
+ "GainRaw"
|
|
|
+ };
|
|
|
+ for (int i = 0; i < nodeName.Count(); i++)
|
|
|
{
|
|
|
- mvCameraAcq.SetFloatValue("Gain", Gain);
|
|
|
+ nReVal = mvCameraAcq.SetIntValueEx(SciCam.SciCamDeviceXmlType.SciCam_DeviceXml_Camera, nodeName[i], (int)Gain);
|
|
|
+ if (nReVal != SciCam.SCI_CAMERA_OK)
|
|
|
+ {
|
|
|
+ nReVal = mvCameraAcq.SetFloatValueEx(SciCam.SciCamDeviceXmlType.SciCam_DeviceXml_Camera, nodeName[i], Gain);
|
|
|
+ if (nReVal == SciCam.SCI_CAMERA_OK)
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
- return true;
|
|
|
+ return false;
|
|
|
}
|
|
|
finally
|
|
|
{
|
|
|
@@ -690,25 +717,30 @@ namespace TeamAAS_VP.Core.Cameras
|
|
|
if (!mvCameraAcq.IsDeviceOpen())
|
|
|
return 0;
|
|
|
uint nReVal = SciCam.SCI_CAMERA_OK;
|
|
|
- SciCam.SCI_NODE_VAL_INT iNodeVal = new SciCam.SCI_NODE_VAL_INT();
|
|
|
- nReVal = mvCameraAcq.GetIntValue("Gain", ref iNodeVal);
|
|
|
- if (nReVal != SciCam.SCI_CAMERA_OK)
|
|
|
+ string[] nodeName = new string[]
|
|
|
+ {
|
|
|
+ "Gain",
|
|
|
+ "GainRaw"
|
|
|
+ };
|
|
|
+ for (int i = 0; i < nodeName.Count(); i++)
|
|
|
{
|
|
|
- SciCam.SCI_NODE_VAL_FLOAT fNodeVal = new SciCam.SCI_NODE_VAL_FLOAT();
|
|
|
- nReVal = mvCameraAcq.GetFloatValue("Gain", ref fNodeVal);
|
|
|
- if (nReVal == SciCam.SCI_CAMERA_OK)
|
|
|
+ SciCam.SCI_NODE_VAL_INT iNodeVal = new SciCam.SCI_NODE_VAL_INT();
|
|
|
+ nReVal = mvCameraAcq.GetIntValueEx(SciCam.SciCamDeviceXmlType.SciCam_DeviceXml_Camera, nodeName[i], ref iNodeVal);
|
|
|
+ if (nReVal != SciCam.SCI_CAMERA_OK)
|
|
|
{
|
|
|
- return (float)fNodeVal.dVal;
|
|
|
+ SciCam.SCI_NODE_VAL_FLOAT fNodeVal = new SciCam.SCI_NODE_VAL_FLOAT();
|
|
|
+ nReVal = mvCameraAcq.GetFloatValueEx(SciCam.SciCamDeviceXmlType.SciCam_DeviceXml_Camera, nodeName[i], ref fNodeVal);
|
|
|
+ if (nReVal == SciCam.SCI_CAMERA_OK)
|
|
|
+ {
|
|
|
+ return Convert.ToSingle(fNodeVal.dVal);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return 0;
|
|
|
+ return Convert.ToSingle(iNodeVal.nVal);
|
|
|
}
|
|
|
}
|
|
|
- else
|
|
|
- {
|
|
|
- return (float)iNodeVal.nVal;
|
|
|
- }
|
|
|
+ return 0;
|
|
|
}
|
|
|
finally
|
|
|
{
|