C3032
3 天以前 ebcc1d53f14112363bbf539bcaf0202aadcdc9d7
LB_VisionProcesses/Cameras/ICamera.cs
@@ -8,8 +8,45 @@
{
    public class Total
    {
        /// <summary>
        /// 图像计数
        /// </summary>
        public int iImageCount { get; set; } = 0;
        /// <summary>
        /// 扫描计数
        /// </summary>
        public int iScanCount { get; set; } = 0;
        /// <summary>
        /// 完整轮胎计数
        /// </summary>
        public int TyreCount { get; set; } = 0;
        /// <summary>
        /// 每张轮胎所需图像数(2D相机使用,默认1表示3D相机)
        /// </summary>
        public int ImagesPerTyre { get; set; } = 1;
        /// <summary>
        /// 当前轮胎的图像序号(0~ImagesPerTyre-1)
        /// </summary>
        public int CurrentImageIndex { get; set; } = 0;
        /// <summary>
        /// 轮胎OK计数
        /// </summary>
        public int TyreOK { get; set; } = 0;
        /// <summary>
        /// 轮胎NG计数
        /// </summary>
        public int TyreNG { get; set; } = 0;
        /// <summary>
        /// 当前轮胎ID
        /// </summary>
        public int CurrentTyreID { get; set; } = 1;
        public Total() { }
@@ -19,10 +56,61 @@
            this.iScanCount = iScanCount;
        }
        /// <summary>
        /// 添加图像并更新轮胎计数
        /// </summary>
        /// <param name="imageResult">图像检测结果</param>
        /// <returns>是否完成一个轮胎</returns>
        public bool AddImageResult(bool imageResult)
        {
            iImageCount++;
            CurrentImageIndex++;
            // 检查是否完成一个轮胎
            if (CurrentImageIndex >= ImagesPerTyre)
            {
                TyreCount++;
                CurrentImageIndex = 0;
                // 更新轮胎OK/NG计数(n张中任一NG则整胎NG)
                if (imageResult)
                    TyreOK++;
                else
                    TyreNG++;
                CurrentTyreID++;
                return true;
            }
            return false;
        }
        /// <summary>
        /// 获取轮胎良品率
        /// </summary>
        public double TyreRateOK => TyreCount > 0 ? (TyreOK / (double)TyreCount) * 100 : 0;
        public void Clear()
        {
            iImageCount = 0;
            iScanCount = 0;
            TyreCount = 0;
            CurrentImageIndex = 0;
            TyreOK = 0;
            TyreNG = 0;
            CurrentTyreID = 1;
        }
        /// <summary>
        /// 重置轮胎计数(保留ImagesPerTyre配置)
        /// </summary>
        public void ResetTyreCount()
        {
            TyreCount = 0;
            CurrentImageIndex = 0;
            TyreOK = 0;
            TyreNG = 0;
            CurrentTyreID = 1;
        }
    }
    public interface ICamera : IDisposable
@@ -63,7 +151,7 @@
        bool StartWith_HardTriggerModel(TriggerSource hardtriggeritem = TriggerSource.Line0);
        /// <summary>
        /// 等待硬触发获取图像
        /// 等待软/硬触发获取图像
        /// </summary>
        /// <param name="bitmap"></param>
        /// <param name="outtime"></param>
@@ -79,11 +167,18 @@
        bool GetImageWithSoftTrigger(out Bitmap bitmap, int outtime = 3000);
        /// <summary>
        /// 软触发
        /// 软触发单次
        /// </summary>
        /// <returns></returns>
        bool SoftTrigger();
        /// <summary>
        /// 连续采集模式
        /// </summary>
        /// <returns></returns>
        bool StartContinuousGrab();
        #endregion
        #region SettingConfig