using System;
using System.Text;
using System.Windows.Forms;
using Script.Methods;
using HuarayVMCore;
using HuarayVMCore.Camera;
using HuarayVMCore.Core;
using HuarayVMCore.VisionMaster;
using ImageConverter = HuarayVMCore.Core.ImageConverter;
using System.Threading;
using VM.PlatformSDKCS;
using VM.Core;
using ImageSourceModuleCs;
/************************************
Shell Module default code: using .NET Framwwork 4.6.1
*************************************/
public partial class UserScript : ScriptMethods, IProcessMethods
{
//the count of process
#region 实例
int processCount;
private HuarayCamera _camera = null;
CameraDeviceInfo devInfo = null;
bool GetImageOK = false;//单帧取像时的结果判断
#endregion
//Continuous=连续采集模式 Software=软触发模式 Hardware=外部硬件触发模式
TriggerMode _TriggerMode = TriggerMode.Software;
// Software-连续 Software=软触发 Line0-Line2 线路触发 CounterOut-CounterOut
TriggerSource _TriggerSource = TriggerSource.Software;
///
/// Initialize the field's value when compiling
///
public void Init()
{
try
{
if (_camera != null)
_camera.Close();
var _deviceList = HuarayCamera.EnumerateDevices();
for (int i = 0; i < _deviceList.Count; i++)
{
if (_deviceList[i].SerialNumber == SerialNumber)
{
_camera = new HuarayCamera();
_camera.FrameReceived += OnFrameReceived;
VmSolution.Instance.DisableModulesCallback();//关闭所有回调
devInfo = _deviceList[i];
_camera.Open(devInfo);
//set
_camera.SetIntFeatureValue("Width", (long)ImgWidth);//设置图像宽高
_camera.SetIntFeatureValue("Height", (long)ImgHeight);//设置图像宽高
_camera.SetTriggerMode(_TriggerMode, _TriggerSource);//设置触发模式
_camera.SetDoubleFeatureValue("ExposureTime", (double)ExposureTime);//设置曝光时间
_camera.SetDoubleFeatureValue("Gain", (double)Gain);//设置增益
_camera.SetBufferCount(30);//设置缓冲区数量
_camera.StartGrabbing();//开始采集
continue;
}
}
}
catch
{
}
//You can add other global fields here
processCount = 0;
}
///
/// Enter the process function when running code once
///
///
public bool Process()
{
Init();//初始化相机
try
{
GetImageOK = false;
if (_camera != null && _camera.IsOpened)
{
_camera.StopGrabbing();//关闭采集
_camera.SetTriggerMode(TriggerMode.Software, TriggerSource.Software);//流程执行先设置成单帧率触发
_camera.SetBufferCount(30);// 设置缓冲区数量
_camera.StartGrabbing();// 开始采集
_camera.TriggerSoftware();//触发单排
int i = 0;
do
{
if (GetImageOK == true)
break;
Thread.Sleep(1000);//等待8s取图 防止卡顿
i++;
}
while (i <= 8);
_camera.FrameReceived -= OnFrameReceived;
_camera.Close();
Init();//初始化相机
Message = GetImageOK.ToString();
if(!GetImageOK)
{
Message = "相机取像失败";
throw new Exception("相机取像失败");
}
return GetImageOK;
}
else
{
throw new Exception("相机连接失败");
return false;
}
}
catch (Exception ex)
{
throw new Exception(ex.ToString());
return false;
}
finally
{
Init();
}
}
///
/// 帧接收事件处理(异步回调取图模式)
///
private void OnFrameReceived(object sender, FrameReceivedEventArgs e)
{
try
{
ImageBaseData imageData = ImageConverter.ToImageBaseData(e);
VmProcedure procedure = VmSolution.Instance[FlowName] as VmProcedure;
ImageSourceModuleTool module = VmSolution.Instance[FlowName + "." + ToolName] as ImageSourceModuleTool;
module.SetImageData(imageData);
procedure.Run();
GetImageOK = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}