刘锦天 5 달 전
부모
커밋
ab71bc007c

+ 1 - 0
TeamAAS-VM/App.xaml.cs

@@ -150,6 +150,7 @@ namespace TeamAAS_VP
             containerRegistry.RegisterSingleton<IDatabaseInitializer, TeamAAS_VP.Data.DatabaseInitializer>();
 
             containerRegistry.RegisterSingleton<ShowVisionRenderViewModel>();
+          
             containerRegistry.RegisterSingleton<InchingControlViewModel>();
             //containerRegistry.RegisterSingleton<ScriptHomeViewModel>();
             containerRegistry.RegisterSingleton<DebugViewModel>();

+ 248 - 2
TeamAAS-VM/Core/Cameras/SSZNCamera.cs

@@ -1,5 +1,7 @@
 using Cognex.VisionPro;
+using Cognex.VisionPro.ImageFile;
 using Cognex.VisionPro.ToolBlock;
+using Cognex.VisionPro3D;
 using CSScripting;
 using Microsoft.Win32;
 using NPOI.SS.Formula.Functions;
@@ -644,13 +646,21 @@ namespace TeamAAS_VP.Core.Cameras
                     {
                         //ShowRGBImage(ImgBuff32[0], pcHead, pictureBoxA);
                         CogImage16Range cogImage16Range = SSZNCognexParser.SSZNParser.LoadSSZN3DImage(ImgBuff32[0], (int)pcHead.width, (int)pcHead.height, pcHead.xInterval, pcHead.yInterval);
+                        //CogImage16Range cogImage16Range;
+                        //var mRes=Create16Range(ImgBuff32[0], (int)pcHead.width, (int)pcHead.height, pcHead.xInterval, pcHead.yInterval,0.000001,0.001,out cogImage16Range);
+                        //if(mRes != null)
+                        //{
+                        //    Image = cogImage16Range;
+                        //    CameraRevFinish = true;
+                        //    ImageCallbackEvent?.Invoke(Image, TotalTime, ErrorMessage, ID);
+                        //}
                         Image = cogImage16Range;
                         CameraRevFinish = true;
                         ImageCallbackEvent?.Invoke(Image, TotalTime, ErrorMessage, ID);
                     }
-                    
 
-                    
+
+
                 }
                 else
                 {
@@ -766,6 +776,242 @@ namespace TeamAAS_VP.Core.Cameras
         }
         #endregion
 
+        #region ECD生成CogImage16Range的方法
+        /// <summary>
+        /// 根据Int[]生成CogImage16Range
+        /// </summary>
+        /// <param name="iData">ECD数据源</param>
+        /// <param name="iWidth">图像宽度</param>
+        /// <param name="iHeight">图像高度</param>
+        /// <param name="iScaleX">X方向分辨率</param>
+        /// <param name="iScaleY">Y方向分辨率</param>
+        /// <param name="iSrcScaleZ">ECD的Z方向分辨率</param>
+        /// <param name="iDstScaleZ">CogImage16Range的Z方向分辨率</param>
+        /// <param name="oImg">生成的CogImage16Range</param>
+        /// <returns>报错讯息</returns>
+        public static string Create16Range(int[] iData, int iWidth, int iHeight, double iScaleX, double iScaleY, double iSrcScaleZ, double iDstScaleZ, out CogImage16Range oImg)
+        {
+            try
+            {
+                bool mNoOverSize = true;
+                #region 获取CogImage16Grey对象信息
+                CogImage16Grey mSrcImg = new CogImage16Grey(iWidth, iHeight);
+                ICogImage16PixelMemory mPm = mSrcImg.Get16GreyPixelMemory(CogImageDataModeConstants.ReadWrite, 0, 0, mSrcImg.Width, mSrcImg.Height);
+                int mStride = mPm.Stride;
+                #endregion
+
+                #region Int[]数据转置写入CogImage16Grey的像素内存
+                unsafe
+                {
+                    int* mSrcDataPtr = (int*)Marshal.UnsafeAddrOfPinnedArrayElement(iData, 0);
+                    ushort* mDstDataPtr = (ushort*)mPm.Scan0;
+                    int mSurcIndex, mDestIndex;
+                    double mCurValue;
+                    for (int y = 0; y < iHeight; y++)
+                    {
+                        for (int x = 0; x < mStride; x++)
+                        {
+                            mSurcIndex = y * iWidth + x;
+                            mDestIndex = y * mStride + x;
+                            if (x < iWidth)
+                            {
+                                if (mSrcDataPtr[mSurcIndex] <= -1000000000)
+                                {
+                                    mDstDataPtr[mDestIndex] = (ushort)0;
+                                }
+                                else
+                                {
+                                    mCurValue = 1.0 * mSrcDataPtr[mSurcIndex] * (iSrcScaleZ / iDstScaleZ) + 32768; //0<=>65535
+                                    if (ushort.MinValue <= mCurValue && mCurValue <= ushort.MaxValue)
+                                    {
+                                        mDstDataPtr[mDestIndex] = (ushort)(mCurValue);
+                                    }
+                                    else
+                                    {
+                                        mNoOverSize &= false;
+                                        mDstDataPtr[mDestIndex] = (ushort)0;
+                                    }
+                                }
+                            }
+                            else
+                            {
+                                mDstDataPtr[mDestIndex] = (ushort)0;
+                            }
+                        }
+                    }
+                }
+                #endregion
+
+                #region 建立CogImage16Grey的初始坐标空间-Sensor3D
+                CogTransform2DLinear mTf2D = new CogTransform2DLinear();
+                double mScalingX = Math.Round(1.0 / iScaleX);
+                double mScalingY = Math.Round(1.0 / iScaleY);
+                double mRotationX = 2 * Math.PI;
+                double mRotationY = 2 * Math.PI;
+                double mTranslationX = 0d;
+                double mTranslationY = 0d;
+                mTf2D.SetScalingsRotationsTranslation(mScalingX, mScalingY, mRotationX, mRotationY, mTranslationX, mTranslationY);
+                CogAddSpaceConstants mSpaceConstants = CogAddSpaceConstants.DuplicateIsError;
+                mSrcImg.CoordinateSpaceTree.AddSpace("@", "Sensor2D", mTf2D, true, mSpaceConstants);
+                #endregion
+
+                #region 建立CogImage16Range的初始坐标空间-Sensor3D
+                Cog3DMatrix3x3 m3DMatrix3x3 = new Cog3DMatrix3x3(iScaleX, 0, 0, 0, iScaleY, 0, 0, 0, iDstScaleZ);
+                Cog3DVect3 m3DVect3 = new Cog3DVect3(-21, 0, 0);
+                Cog3DTransformLinear mTf3D = new Cog3DTransformLinear(m3DMatrix3x3, m3DVect3);
+                mTf3D = mTf3D.Inverse();
+                #endregion
+
+                oImg = new CogImage16Range(mSrcImg, 0, mTf3D);
+
+                #region 判断是否存在像素值超限情况
+                if (!mNoOverSize)
+                {
+                    return "存在像素值超限情况";
+                }
+                else
+                {
+                    return null;
+                }
+                #endregion
+            }
+            catch (Exception ex)
+            {
+                oImg = null;
+                return ex.Message;
+            }
+        }
+        /// <summary>
+        /// 读取ECD格式文件的图像数据
+        /// </summary>
+        /// <param name="iFileName">文件路径</param>
+        /// <param name="oData">图像数据</param>
+        /// <param name="oWidth">图像宽度</param>
+        /// <param name="oHeight">图像高度</param>
+        /// <param name="oScaleX">X方向分辨率</param>
+        /// <param name="oScaleY">Y方向分辨率</param>
+        /// <returns>报错讯息</returns>
+        public static string OpenEcd(string iFileName, out int[] oData, out int oWidth, out int oHeight, out double oScaleX, out double oScaleY)
+        {
+            try
+            {
+                #region 输出参数初始化
+                oData = null;
+                oWidth = 0;
+                oHeight = 0;
+                oScaleX = 0;
+                oScaleY = 0;
+                #endregion
+
+                #region 文件存在判断
+                if (!File.Exists(iFileName))
+                {
+                    return "文件不存在";
+                }
+                #endregion
+
+                #region 文件格式一致性判断
+                string mExtension = Path.GetExtension(iFileName);
+                if (mExtension != ".ecd")
+                {
+                    return "文件格式不一致不存在";
+                }
+                #endregion     
+
+                #region 读取图像信息和数据
+                #region 依据文件流创建二进制流读取器
+                FileStream mFs = new FileStream(iFileName, FileMode.Open, FileAccess.Read);
+                BinaryReader mBr = new BinaryReader(mFs);
+                #endregion
+
+                #region 文件头读取-获取点云规格(文件头共10240字节)
+                uint mVersion = mBr.ReadUInt32();
+                int mWidth = mBr.ReadInt32();
+                int mHeight = mBr.ReadInt32();
+                int mStride = ((mWidth + 3) / 4) * 4;
+                if (mVersion == 2)
+                {
+                    oScaleX = Math.Round(mBr.ReadDouble(), 3);
+                    oScaleY = Math.Round(mBr.ReadDouble(), 3);
+                    Int32 _Type = mBr.ReadInt32();  //无效位,为了数据对齐
+                }
+                else
+                {
+                    Int32 _Type = mBr.ReadInt32();  //无效位,为了数据对齐
+                    oScaleX = Math.Round(mBr.ReadDouble(), 3);
+                    oScaleY = Math.Round(mBr.ReadDouble(), 3);
+                }
+                //读取剩余文件头
+                mBr.ReadBytes(2552 * 4);
+                #endregion
+
+                oData = new int[mStride * mHeight];
+                #region 图像高度数据读取
+                unsafe
+                {
+
+                    int* mDataPtr = (int*)Marshal.UnsafeAddrOfPinnedArrayElement(oData, 0);
+                    for (int y = 0; y < mHeight; y++)
+                    {
+                        for (int x = 0; x < mStride; x++)
+                        {
+                            if (x < mWidth)
+                            {
+                                mDataPtr[y * mStride + x] = mBr.ReadInt32();
+                            }
+                            else
+                            {
+                                mDataPtr[y * mStride + x] = -1000000000;
+                            }
+                        }
+                    }
+                }
+                #endregion
+                oWidth = mStride;
+                oHeight = mHeight;
+                #region 关闭文件流和读取器
+                mFs.Flush();
+                mFs.Close();
+                mBr.Close();
+                #endregion
+                #endregion 
+
+                return null;
+            }
+            catch (Exception ex)
+            {
+                oData = null;
+                oWidth = 0;
+                oHeight = 0;
+                oScaleX = 0;
+                oScaleY = 0;
+                return ex.Message;
+            }
+        }
+        /// <summary>
+        /// 保存Vpro的IDB格式图像
+        /// </summary>
+        /// <param name="iImg">图像对象</param>
+        /// <param name="iPath">保存路径</param>
+        /// <returns></returns>
+        public string SaveToIdb(ICogImage iImg, string iPath)
+        {
+            try
+            {
+                CogImageFile _MyImageFile = new CogImageFile();
+                _MyImageFile.Open(iPath, CogImageFileModeConstants.Write);
+                _MyImageFile.Append(iImg);
+                _MyImageFile.Close();
+                return null;
+            }
+            catch (Exception ex)
+            {
+                return ex.Message;
+            }
+        }
+        #endregion
+
+
         #region 属性通知
         /// <summary>
         /// Occurs when a property value changes.

+ 78 - 38
TeamAAS-VM/Core/Management.cs

@@ -67,6 +67,16 @@ namespace TeamAAS_VP.Core
         string color = "";//产品color
         string ppid = "";//产品ppid
         string revision = "";//产品revision
+        string stage = "";//产品revision
+
+        /// <summary>
+        /// 上次执行上传csv的日期
+        /// </summary>
+        private DateTime _lastCompressDate = DateTime.MinValue;
+        /// <summary>
+        /// 当天是否上传过csv
+        /// </summary>
+        private bool _hasCompressedToday = false;
 
         #endregion
 
@@ -1650,9 +1660,9 @@ namespace TeamAAS_VP.Core
                                             SendTaskMessage($"产品主sn:{ProductMainSN}", MessageLevel.Info);
                                         }
                                         string woItem = items.FirstOrDefault(f => f.Contains("wo="));
-                                        if (snItem != null)
+                                        if (woItem != null)
                                         {
-                                            wo = snItem.Replace("wo=", "").Trim();
+                                            wo = woItem.Replace("wo=", "").Trim();
                                             SendTaskMessage($"产品wo:{wo}", MessageLevel.Info);
                                         }
                                         string modelItem = items.FirstOrDefault(f => f.Contains("model_num="));
@@ -1670,14 +1680,14 @@ namespace TeamAAS_VP.Core
                                         string ppidItem = items.FirstOrDefault(f => f.Contains("ppid="));
                                         if (ppidItem != null)
                                         {
-                                            ppid = colorItem.Replace("ppid=", "").Trim();
+                                            ppid = ppidItem.Replace("ppid=", "").Trim();
                                             SendTaskMessage($"ppid:{ppid}", MessageLevel.Info);
                                         }
-                                        string revisionItem = items.FirstOrDefault(f => f.Contains("revision="));
-                                        if (revisionItem != null)
+                                        string stageItem = items.FirstOrDefault(f => f.Contains("stage="));
+                                        if (stageItem != null)
                                         {
-                                            revision = colorItem.Replace("revision=", "").Trim();
-                                            SendTaskMessage($"revision:{revision}", MessageLevel.Info);
+                                            stage = stageItem.Replace("stage=", "").Trim();
+                                            SendTaskMessage($"stage:{revision}", MessageLevel.Info);
                                         }
 
                                     }
@@ -1788,9 +1798,9 @@ namespace TeamAAS_VP.Core
                                                 SendTaskMessage($"产品主sn:{ProductMainSN}", MessageLevel.Info);
                                             }
                                             string woItem = item.FirstOrDefault(f => f.Contains("wo="));
-                                            if (snItem != null)
+                                            if (woItem != null)
                                             {
-                                                wo = snItem.Replace("wo=", "").Trim();
+                                                wo = woItem.Replace("wo=", "").Trim();
                                                 SendTaskMessage($"产品wo:{wo}", MessageLevel.Info);
                                             }
                                             string modelItem = item.FirstOrDefault(f => f.Contains("model_num="));
@@ -1808,14 +1818,14 @@ namespace TeamAAS_VP.Core
                                             string ppidItem = item.FirstOrDefault(f => f.Contains("ppid="));
                                             if (ppidItem != null)
                                             {
-                                                ppid = colorItem.Replace("ppid=", "").Trim();
+                                                ppid = ppidItem.Replace("ppid=", "").Trim();
                                                 SendTaskMessage($"ppid:{ppid}", MessageLevel.Info);
                                             }
-                                            string revisionItem = item.FirstOrDefault(f => f.Contains("revision="));
-                                            if (revisionItem != null)
+                                            string stageItem = item.FirstOrDefault(f => f.Contains("stage="));
+                                            if (stageItem != null)
                                             {
-                                                revision = colorItem.Replace("revision=", "").Trim();
-                                                SendTaskMessage($"revision:{revision}", MessageLevel.Info);
+                                                stage = stageItem.Replace("stage=", "").Trim();
+                                                SendTaskMessage($"stage:{revision}", MessageLevel.Info);
                                             }
                                         }
                                         LogHelper.WriteLogMes($"第二次询问mes成功");
@@ -1990,9 +2000,9 @@ namespace TeamAAS_VP.Core
                                                     SendTaskMessage($"产品主sn:{ProductMainSN}", MessageLevel.Info);
                                                 }
                                                 string woItem = item.FirstOrDefault(f => f.Contains("wo="));
-                                                if (snItem != null)
+                                                if (woItem != null)
                                                 {
-                                                    wo = snItem.Replace("wo=", "").Trim();
+                                                    wo = woItem.Replace("wo=", "").Trim();
                                                     SendTaskMessage($"产品wo:{wo}", MessageLevel.Info);
                                                 }
                                                 string modelItem = item.FirstOrDefault(f => f.Contains("model_num="));
@@ -2010,14 +2020,14 @@ namespace TeamAAS_VP.Core
                                                 string ppidItem = item.FirstOrDefault(f => f.Contains("ppid="));
                                                 if (ppidItem != null)
                                                 {
-                                                    ppid = colorItem.Replace("ppid=", "").Trim();
+                                                    ppid = ppidItem.Replace("ppid=", "").Trim();
                                                     SendTaskMessage($"ppid:{ppid}", MessageLevel.Info);
                                                 }
-                                                string revisionItem = item.FirstOrDefault(f => f.Contains("revision="));
-                                                if (revisionItem != null)
+                                                string stageItem = item.FirstOrDefault(f => f.Contains("stage="));
+                                                if (stageItem != null)
                                                 {
-                                                    revision = colorItem.Replace("revision=", "").Trim();
-                                                    SendTaskMessage($"revision:{revision}", MessageLevel.Info);
+                                                    stage = stageItem.Replace("stage=", "").Trim();
+                                                    SendTaskMessage($"stage:{revision}", MessageLevel.Info);
                                                 }
                                             }
                                             LogHelper.WriteLogMes($"第二次询问mes成功");
@@ -2142,9 +2152,9 @@ namespace TeamAAS_VP.Core
                                                 SendTaskMessage($"产品主sn:{ProductMainSN}", MessageLevel.Info);
                                             }
                                             string woItem = items.FirstOrDefault(f => f.Contains("wo="));
-                                            if (snItem != null)
+                                            if (woItem != null)
                                             {
-                                                wo = snItem.Replace("wo=", "").Trim();
+                                                wo = woItem.Replace("wo=", "").Trim();
                                                 SendTaskMessage($"产品wo:{wo}", MessageLevel.Info);
                                             }
                                             string modelItem = items.FirstOrDefault(f => f.Contains("model_num="));
@@ -2162,14 +2172,14 @@ namespace TeamAAS_VP.Core
                                             string ppidItem = items.FirstOrDefault(f => f.Contains("ppid="));
                                             if (ppidItem != null)
                                             {
-                                                ppid = colorItem.Replace("ppid=", "").Trim();
+                                                ppid = ppidItem.Replace("ppid=", "").Trim();
                                                 SendTaskMessage($"ppid:{ppid}", MessageLevel.Info);
                                             }
-                                            string revisionItem = items.FirstOrDefault(f => f.Contains("revision="));
-                                            if (revisionItem != null)
+                                            string stageItem = items.FirstOrDefault(f => f.Contains("stage="));
+                                            if (stageItem != null)
                                             {
-                                                revision = colorItem.Replace("revision=", "").Trim();
-                                                SendTaskMessage($"revision:{revision}", MessageLevel.Info);
+                                                stage = stageItem.Replace("stage=", "").Trim();
+                                                SendTaskMessage($"stage:{revision}", MessageLevel.Info);
                                             }
                                         }
                                         LogHelper.WriteLogMes($"【mes结束QUERY】");
@@ -2391,14 +2401,14 @@ namespace TeamAAS_VP.Core
                                         string ppidItem = item.FirstOrDefault(f => f.Contains("ppid="));
                                         if (ppidItem != null)
                                         {
-                                            ppid = colorItem.Replace("ppid=", "").Trim();
+                                            ppid = ppidItem.Replace("ppid=", "").Trim();
                                             SendTaskMessage($"ppid:{ppid}", MessageLevel.Info);
                                         }
-                                        string revisionItem = item.FirstOrDefault(f => f.Contains("revision="));
-                                        if (revisionItem != null)
+                                        string stageItem = item.FirstOrDefault(f => f.Contains("stage="));
+                                        if (stageItem != null)
                                         {
-                                            revision = colorItem.Replace("revision=", "").Trim();
-                                            SendTaskMessage($"revision:{revision}", MessageLevel.Info);
+                                            stage = stageItem.Replace("stage=", "").Trim();
+                                            SendTaskMessage($"stage:{revision}", MessageLevel.Info);
                                         }
                                         ShowMes_Query = true;
                                         //产品发生改变并且供料器发生了变化时,需要通知PLC进行取料更改
@@ -2496,7 +2506,7 @@ namespace TeamAAS_VP.Core
                                     StringBuilder submitData = new StringBuilder();
                                     foreach (var item in lockResultsAll)
                                     {
-                                        submitData.Append($"{item.PhotoName}={item.ResultData}&");   
+                                        submitData.Append($"{item.PhotoName}={item.ResultData}");
                                     }
                                     
                                     ShowMes_Result = resultIndex == 1 ? true : false;
@@ -2547,7 +2557,7 @@ namespace TeamAAS_VP.Core
                                                     PROCESS_END_TIME = serverTimeResult.Now.ToString("o"),
                                                     SUPPLIER_NAME = stationConfig.DataInfo.SUPPLIER_NAME,
                                                     COMMODITY_TYPE = stationConfig.DataInfo.COMMODITY_TYPE,
-                                                    REVISION = revision,
+                                                    REVISION = stage,
                                                     WO = wo,
                                                     MFG_LOT = stationConfig.DataInfo.MFG_LOT,
                                                     MFG_ASSY_LINE = stationConfig.DataInfo.MFG_ASSY_LINE,
@@ -2575,28 +2585,58 @@ namespace TeamAAS_VP.Core
                                                         DateTime dt = DateTime.Now;
                                                         string filename = $"{ProductMainSN}_{dt.ToString("yyyyMMddHHmmss")}";
                                                         var device = _configService.GetDeviceInfo();
+                                                        var config = _configService.GetSystemConfiguration();
+
                                                         (bool isSuc, string resp) = await _mesService.SendFtpFileAsync(ProductMainSN, filename);
                                                         if (isSuc)
                                                         {
                                                             LogHelper.WriteLogMes($"上传数据成功");
                                                             SendTaskMessage($"上传数据成功", MessageLevel.Debug);
-                                                            string filePath = $"D:\\Image\\Recored\\{dt.ToString("yyyy-MM")}\\{dt.ToString("MM-dd")}\\{currentProduct.Name}\\{ProductMainSN[i]}";
+                                                            string filePath = $"D:\\image\\Recored\\{dt.ToString("yyyy-MM")}\\{dt.ToString("MM-dd")}\\{currentProduct.Name}\\{ProductMainSN}";
+                                                            string csvfilename = $"{i}_{stationConfig.DeviceName}_{dt.ToString("yyyy-MM-dd")}";
                                                             //复制csv
                                                             string source_csv = $"{stationConfig.SaveCsvPath}\\{dt.ToString("yyyy-MM")}\\{i}_{stationConfig.DeviceName}_{dt.ToString("yyyy-MM-dd")}.csv";
-                                                            string target_csv = Path.Combine(filePath, Path.GetFileName(source_csv)); ;
+                                                            string target_csv = Path.Combine(filePath, Path.GetFileName(source_csv));
                                                             File.Copy(source_csv, target_csv, true);
                                                             //复制log
                                                             string source_log = $"..\\Log\\LogInfo\\{dt.ToString("yyyy-MM")}\\{dt.ToString("yyyy-MM-dd")}.txt";
                                                             string target_log = Path.Combine(filePath, Path.GetFileName(source_log));
                                                             File.Copy(source_log, target_log, true);
+
+                                                            
                                                             CompressionImage(filePath, filename, device.Station, device.FixtureId);
+                                                            //上传csv
+                                                            bool isAfter20 = dt.Hour >= 20;
+                                                            //判断是否是新的一天
+                                                            bool isNewDay = dt.Date != _lastCompressDate.Date;
+                                                            //当天还没执行过压缩
+                                                            if (isAfter20 && isNewDay && !_hasCompressedToday)
+                                                            {
+                                                                // 执行压缩
+                                                                CompressionImage(source_csv, csvfilename, device.Station, device.FixtureId);
+                                                                _lastCompressDate = dt;
+                                                                _hasCompressedToday = true;
+                                                                LogHelper.WriteLogMes("csv上传数据成功");
+                                                                SendTaskMessage($"csv上传数据成功", MessageLevel.Debug);
+                                                            }
+                                                            // 跨天后重置当天执行标记
+                                                            if (!isNewDay && _hasCompressedToday)
+                                                            {
+                                                                _hasCompressedToday = false;
+                                                            }
+
                                                         }
                                                         else
                                                         {
                                                             LogHelper.WriteLogMes($"上传数据失败");
                                                             SendTaskMessage($"上传数据失败", MessageLevel.Error);
                                                         }
-                                                    }    
+                                                    }
+                                                    else
+                                                    {
+                                                        LogHelper.WriteLogMes($"未启用mes");
+                                                        SendTaskMessage($"未启用mes", MessageLevel.Error);
+                                                    }
                                                 }
                                                 catch (Exception ex)
                                                 {

+ 16 - 0
TeamAAS-VM/Models/ShowRender.cs

@@ -150,5 +150,21 @@ namespace TeamAAS_VP.Models
             get { return _Is3DModel; }
             set { SetProperty(ref _Is3DModel, value); }
         }
+
+        private Cognex.VisionPro.CogImage16Range _RangeImage;
+
+        public Cognex.VisionPro.CogImage16Range RangeImage
+        {
+            get { return _RangeImage; }
+            set { SetProperty(ref _RangeImage, value); }
+        }
+
+        private Cognex.VisionPro.CogImage16Grey _GreyImage;
+
+        public Cognex.VisionPro.CogImage16Grey GreyImage
+        { 
+            get { return _GreyImage; }
+            set { SetProperty(ref _GreyImage, value); }
+        }
     }
 }

+ 11 - 0
TeamAAS-VM/Models/SystemConfiguration.cs

@@ -34,6 +34,15 @@ namespace TeamAAS_VP.Models
             Font = new FontSizeSettings();
         }
 
+        private bool _View3DUse;
+        /// <summary>
+        /// 3DÊÇ·ñʹÓÃ
+        /// </summary>
+        public bool View3DUse
+        {
+            get => _View3DUse;
+            set => SetProperty(ref _View3DUse, value);
+        }
         private string _softwareVersion;
         /// <summary>
         /// Èí¼þ°æ±¾ºÅ
@@ -455,5 +464,7 @@ namespace TeamAAS_VP.Models
             get => _LightUse;
             set => SetProperty(ref _LightUse, value);
         }
+
+        
     }
 }

+ 2 - 2
TeamAAS-VM/Services/MesService.cs

@@ -101,11 +101,11 @@ namespace TeamAAS_VP.Services
             string url = "";
             if (device.F == "PTL")
             {
-                url = $"{device.MesUrl}?c=QUERY_RECORD&line={device.Line}&station={device.Station}&fixtureid={device.FixtureId}&sn={sn}&comp={device.comp}:{comp}&p=unit_process_check,message,model,sn,wo,model_num,color,ppid,revision";
+                url = $"{device.MesUrl}?c=QUERY_RECORD&line={device.Line}&station={device.Station}&fixtureid={device.FixtureId}&sn={sn}&comp={device.comp}:{comp}&p=unit_process_check,message,model,sn,wo,model_num,color,ppid,stage";
             }
             else
             {
-                url = $"{device.MesUrl}?c=QUERY_RECORD&line={device.Line}&station={device.Station}&fixtureid={device.FixtureId}&sn={sn}&p=unit_process_check,message,model,sn,wo,model_num,color,ppid,revision";
+                url = $"{device.MesUrl}?c=QUERY_RECORD&line={device.Line}&station={device.Station}&fixtureid={device.FixtureId}&sn={sn}&p=unit_process_check,message,model,sn,wo,model_num,color,ppid,stage";
             }
 
             LogHelper.WriteLogMes($"¡¾Ñ¯ÎÊURL¡¿{url}");

+ 90 - 35
TeamAAS-VM/Services/RemoteCommandService.cs

@@ -1,5 +1,6 @@
 using Basler.Pylon;
 using Cognex.VisionPro;
+using Cognex.VisionPro.ImageFile;
 using Cognex.VisionPro.ToolBlock;
 using MathNet.Numerics.LinearAlgebra;
 using Microsoft.CodeAnalysis.Scripting;
@@ -20,6 +21,7 @@ using System.Reflection;
 using System.Text;
 using System.Threading;
 using System.Threading.Tasks;
+using System.Web.UI.WebControls;
 using System.Windows.Shapes;
 using Team.FFFeederService;
 using Team.FFFeederService.Interfaces;
@@ -1790,6 +1792,7 @@ namespace TeamAAS_VP.Services
         {
             try
             {
+                
                 procedure.ToolBlock.Inputs["InputImage"].Value = imges[0];
                 
 
@@ -1846,26 +1849,53 @@ namespace TeamAAS_VP.Services
                         // Éú³ÉÎļþÃû
                         imgName = template.Generate();
                     }
-
-                    _eventAggregator.GetEvent<RenderUpdateNotification>().Publish(new ShowRender()
+                    if(is3dmodel==true)
                     {
-                        Id = procedure.Id,
-                        DisplayName = procedure.DisplayName,
-                        //Image = (ICogImage)procedure.ToolBlock.Outputs["OriImage"].Value,
-                        Image = (ICogImage)procedure.ToolBlock.Inputs["InputImage"].Value,
-                        Graphic = outputCollection["Graphic"].Value as CogGraphicCollection,
-                        Record = record,
-                        Result = Found,
-                        IsShow = true,
-                        IsSaveImage = procedure.IsSaveImage,
-                        SaveImageModel = procedure.SaveImageModel,
-                        SaveImagePathModel = procedure.SaveImagePathModel,
-                        SavePath = procedure.SavePath,
-                        IsCompress = procedure.IsCompress,
-                        ProceductName = procedure.Name,
-                        ImageFileName = imgName,
-                        Is3DModel= is3dmodel
-                    });
+                        _eventAggregator.GetEvent<RenderUpdateNotification>().Publish(new ShowRender()
+                        {
+                            Id = procedure.DisplayId,
+                            DisplayName = procedure.DisplayName,
+                            //Image = (ICogImage)procedure.ToolBlock.Outputs["OriImage"].Value,
+                            Image = (ICogImage)procedure.ToolBlock.Inputs["InputImage"].Value,
+                            Graphic = outputCollection["Graphic"].Value as CogGraphicCollection,
+                            Record = record,
+                            Result = Found,
+                            IsShow = true,
+                            IsSaveImage = procedure.IsSaveImage,
+                            SaveImageModel = procedure.SaveImageModel,
+                            SaveImagePathModel = procedure.SaveImagePathModel,
+                            SavePath = procedure.SavePath,
+                            IsCompress = procedure.IsCompress,
+                            ProceductName = procedure.Name,
+                            ImageFileName = imgName,
+                            Is3DModel = is3dmodel,
+                            RangeImage = (CogImage16Range)procedure.ToolBlock.Outputs["RangeImage"].Value,
+                            GreyImage = (CogImage16Grey)procedure.ToolBlock.Outputs["GreyImage"].Value
+                        });
+                    }
+                    else
+                    {
+                        _eventAggregator.GetEvent<RenderUpdateNotification>().Publish(new ShowRender()
+                        {
+                            Id = procedure.DisplayId,
+                            DisplayName = procedure.DisplayName,
+                            //Image = (ICogImage)procedure.ToolBlock.Outputs["OriImage"].Value,
+                            Image = (ICogImage)procedure.ToolBlock.Inputs["InputImage"].Value,
+                            Graphic = outputCollection["Graphic"].Value as CogGraphicCollection,
+                            Record = record,
+                            Result = Found,
+                            IsShow = true,
+                            IsSaveImage = procedure.IsSaveImage,
+                            SaveImageModel = procedure.SaveImageModel,
+                            SaveImagePathModel = procedure.SaveImagePathModel,
+                            SavePath = procedure.SavePath,
+                            IsCompress = procedure.IsCompress,
+                            ProceductName = procedure.Name,
+                            ImageFileName = imgName,
+                            Is3DModel = is3dmodel
+                            
+                        });
+                    }
                     return true;
                 }
                 else
@@ -1891,23 +1921,48 @@ namespace TeamAAS_VP.Services
                         // Éú³ÉÎļþÃû
                         imgName = template.Generate();
                     }
-                    _eventAggregator.GetEvent<RenderUpdateNotification>().Publish(new ShowRender()
+                    if(is3dmodel==true)
                     {
-                        Id = procedure.Id,
-                        DisplayName = procedure.DisplayName,
-                        //Image = (ICogImage)procedure.ToolBlock.Outputs["OriImage"].Value,
-                        Image = (ICogImage)procedure.ToolBlock.Inputs["InputImage"].Value,
-                        Graphic = new CogGraphicCollection(),
-                        Result = false,
-                        IsShow = true,
-                        IsSaveImage = procedure.IsSaveImage,
-                        SaveImageModel = procedure.SaveImageModel,
-                        SaveImagePathModel = procedure.SaveImagePathModel,
-                        SavePath = procedure.SavePath,
-                        ProceductName = procedure.Name,
-                        ImageFileName = imgName,
-                        Is3DModel = is3dmodel
-                    });
+                        _eventAggregator.GetEvent<RenderUpdateNotification>().Publish(new ShowRender()
+                        {
+                            Id = procedure.Id,
+                            DisplayName = procedure.DisplayName,
+                            //Image = (ICogImage)procedure.ToolBlock.Outputs["OriImage"].Value,
+                            Image = (ICogImage)procedure.ToolBlock.Inputs["InputImage"].Value,
+                            Graphic = new CogGraphicCollection(),
+                            Result = false,
+                            IsShow = true,
+                            IsSaveImage = procedure.IsSaveImage,
+                            SaveImageModel = procedure.SaveImageModel,
+                            SaveImagePathModel = procedure.SaveImagePathModel,
+                            SavePath = procedure.SavePath,
+                            ProceductName = procedure.Name,
+                            ImageFileName = imgName,
+                            Is3DModel = is3dmodel,
+                            RangeImage = (CogImage16Range)procedure.ToolBlock.Outputs["RangeImage"].Value,
+                            GreyImage = (CogImage16Grey)procedure.ToolBlock.Outputs["GreyImage"].Value
+                        });
+                    }
+                    else
+                    {
+                        _eventAggregator.GetEvent<RenderUpdateNotification>().Publish(new ShowRender()
+                        {
+                            Id = procedure.Id,
+                            DisplayName = procedure.DisplayName,
+                            //Image = (ICogImage)procedure.ToolBlock.Outputs["OriImage"].Value,
+                            Image = (ICogImage)procedure.ToolBlock.Inputs["InputImage"].Value,
+                            Graphic = new CogGraphicCollection(),
+                            Result = false,
+                            IsShow = true,
+                            IsSaveImage = procedure.IsSaveImage,
+                            SaveImageModel = procedure.SaveImageModel,
+                            SaveImagePathModel = procedure.SaveImagePathModel,
+                            SavePath = procedure.SavePath,
+                            ProceductName = procedure.Name,
+                            ImageFileName = imgName,
+                            Is3DModel = is3dmodel
+                        });
+                    }
                     return false;
                 }
             }

+ 7 - 2
TeamAAS-VM/TeamAAS-VP.csproj

@@ -1506,12 +1506,17 @@
     <EmbeddedResource Include="Resources\Languages\Lang.en.resx">
       <SubType>Designer</SubType>
     </EmbeddedResource>
-    <EmbeddedResource Include="Resources\Languages\Lang.ja-JP.resx" />
+    <EmbeddedResource Include="Resources\Languages\Lang.ja-JP.resx">
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
     <EmbeddedResource Include="Resources\Languages\Lang.resx">
       <Generator>PublicResXFileCodeGenerator</Generator>
       <LastGenOutput>Lang.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Resources\Languages\Lang.zh-TW.resx">
+      <SubType>Designer</SubType>
     </EmbeddedResource>
-    <EmbeddedResource Include="Resources\Languages\Lang.zh-TW.resx" />
     <None Include="packages.config" />
     <None Include="Properties\Settings.settings">
       <Generator>SettingsSingleFileGenerator</Generator>

+ 1 - 1
TeamAAS-VM/ViewModels/HomeViewModel.cs

@@ -339,7 +339,7 @@ namespace TeamAAS_VP.ViewModels
         {
             try
             {
-                if (MessageQueue.Count >= 20)
+                if (MessageQueue.Count >= 100)
                 {
                     MessageQueue.RemoveAt(0);// 从队列头部移除最早的消息
                 }

+ 4 - 0
TeamAAS-VM/ViewModels/SettingViewModel.cs

@@ -880,6 +880,10 @@ namespace TeamAAS_VP.ViewModels
                     softwarename = "OPT Camera Viewer";
                     result = OptCamera.CheckSoftwareInstalled();
                     break;
+                case CameraBrand.SSZN:
+                    softwarename = "SSZN Camera Viewer";
+                    result = OptCamera.CheckSoftwareInstalled();
+                    break;
                 default:
                     break;
             }

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 427 - 1358
TeamAAS-VM/Views/Home/ShowVisionRender.xaml.cs


+ 1 - 0
TeamAAS-VM/Views/HomeView.xaml

@@ -40,6 +40,7 @@
             <!--图像-->
             <local:ShowVisionRender Grid.Row="0"
                                     Grid.Column="0" />
+            
             <!--曲线图-->
             <!--<oxy:PlotView Grid.Row="1"
                           Grid.Column="0"

+ 1 - 1
TeamAAS-VM/Views/SettingView.xaml

@@ -2631,7 +2631,7 @@
                                    VerticalAlignment="Center"
                                    HorizontalAlignment="Right"
                                    Margin="0,6,10,6"
-                                   Text="取料位置:" />
+                                   Text="显示3D界面:" />
                         <mah:NumericUpDown Grid.Row="8"
                                            Grid.Column="1"
                                            Margin="0,6"

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.