BourneCao il y a 3 ans
Parent
commit
982d887868

+ 2 - 2
CarMeterSystem/OptionCls/CameraShotCls.cs

@@ -79,8 +79,8 @@ namespace CarMeterSystem.OptionCls
         public void CapMethod(string actualFirstNo)
         {
             Connection();
-            //CapPic(actualFirstNo);
-            CapPicFromVideo(actualFirstNo);
+            CapPic(actualFirstNo);
+            //CapPicFromVideo(actualFirstNo);
             Close();
         }
     }

+ 60 - 14
CarMeterSystem/frmOneYardToEnd.cs

@@ -183,7 +183,7 @@ namespace CarMeterSystem
                     }
                 }
 
-                if (PbCache.collect != null && PbCache.collect.weightStatus != 0)
+                if (PbCache.collect != null && (PbCache.collect.weightStatus != 0 && localWeightStatus != true))
                 {
                     return;
                 }
@@ -225,7 +225,7 @@ namespace CarMeterSystem
                     setMsg(PbCache.ResultMessage);
                     return;
                 }
-                else if (PbCache.collect.weightStatus == 0 && !PbCache.monitorResult.valid_park_status && PbCache.monitor.validParkStatus == "1")
+                else if ((PbCache.collect.weightStatus == 0 || localWeightStatus == true) && !PbCache.monitorResult.valid_park_status && PbCache.monitor.validParkStatus == "1")
                 {
                     //重量稳定,且对射验证不合格
                     vicPlayClass.GetVoicePlay("车辆超出秤台,请调整车位", PbCache.collect.carno);
@@ -236,7 +236,7 @@ namespace CarMeterSystem
                     setMsg(PbCache.ResultMessage);
                     return;
                 }
-                else if (PbCache.collect.weightStatus == 0 && PbCache.monitorResult.valid_frontInfraredRay_right_status && PbCache.monitor.validParkStatus == "1")
+                else if ((PbCache.collect.weightStatus == 0 || localWeightStatus == true) && PbCache.monitorResult.valid_frontInfraredRay_right_status && PbCache.monitor.validParkStatus == "1")
                 {
                     //重量稳定,且光栅不合格
                     vicPlayClass.GetVoicePlay("车辆超出秤台,请调整车位", PbCache.collect.carno);
@@ -247,7 +247,7 @@ namespace CarMeterSystem
                     setMsg(PbCache.ResultMessage);
                     return;
                 }
-                else if (PbCache.collect.weightStatus == 0 && PbCache.monitorResult.valid_frontInfraredRay_left_status && PbCache.monitor.validParkStatus == "1")
+                else if ((PbCache.collect.weightStatus == 0 || localWeightStatus == true) && PbCache.monitorResult.valid_frontInfraredRay_left_status && PbCache.monitor.validParkStatus == "1")
                 {
                     //重量稳定,且光栅不合格
                     vicPlayClass.GetVoicePlay("车辆超出秤台,请调整车位", PbCache.collect.carno);
@@ -1122,6 +1122,8 @@ namespace CarMeterSystem
         private bool bRelation = true;
         private bool isShowRecover = true; //是否需要判断显示复磅按钮
 
+        private bool localWeightStatus = false; //本地判稳
+
         //验证校秤数据
         private validCalibration vCalib = new validCalibration();
 
@@ -1175,7 +1177,7 @@ namespace CarMeterSystem
         int voiceNum = 0;
         private void timer1_Tick(object sender, EventArgs e)
         {
-            DualWeight();//rxh modify
+            //DualWeight();//rxh modify
         }
         private void DualWeight()
         {
@@ -1203,6 +1205,9 @@ namespace CarMeterSystem
                     else
                     {
                         ucWeightCarTJXJG1.setWgtBackColor(true);
+
+                        // 自行判稳
+                        localWeightStatus = CheckWeightStable(PbCache.collect.weight);
                     }
 
                     
@@ -1286,7 +1291,7 @@ namespace CarMeterSystem
                         //2021年5月10日界面显示单位,调整为T
                         ucWeightCarTJXJG1.setWgt(Math.Round((double)PbCache.collect.weight / 1000, 2));
                         // 修改界面过磅状态红/绿图标
-                        ucWeightCarTJXJG1.setStable(PbCache.collect.weightStatus != 1 ? true : false);
+                        ucWeightCarTJXJG1.setStable((PbCache.collect.weightStatus != 1 && localWeightStatus != false) ? true : false);
 
                         #region 远程计量交互代码
                         //lg.WriteLog(99, "PbCache.monitor:" + PbCache.monitor.ToString());
@@ -1413,7 +1418,7 @@ namespace CarMeterSystem
                             return;
                         }
                     }
-                    if (PbCache.collect.weightStatus == 0 && !PbCache.monitorResult.valid_park_status && PbCache.monitor.validParkStatus == "1")
+                    if ((PbCache.collect.weightStatus == 0 || localWeightStatus == true) && !PbCache.monitorResult.valid_park_status && PbCache.monitor.validParkStatus == "1")
                     {
                         //重量稳定,且对射验证不合格
                         if (!isPlayCalibVoice)
@@ -1427,7 +1432,7 @@ namespace CarMeterSystem
                             return;
                         }
                     }
-                    if (PbCache.collect.weightStatus == 0 && PbCache.monitorResult.valid_frontInfraredRay_right_status && PbCache.monitor.validParkStatus == "1")
+                    if ((PbCache.collect.weightStatus == 0 || localWeightStatus == true) && PbCache.monitorResult.valid_frontInfraredRay_right_status && PbCache.monitor.validParkStatus == "1")
                     {
                         //重量稳定,且光栅不合格
                         vicPlayClass.GetVoicePlay("车辆超出秤台,请调整车位", PbCache.collect.carno);
@@ -1438,7 +1443,7 @@ namespace CarMeterSystem
                         setMsg(PbCache.ResultMessage);
                         return;
                     }
-                    if (PbCache.collect.weightStatus == 0 && PbCache.monitorResult.valid_frontInfraredRay_left_status && PbCache.monitor.validParkStatus == "1")
+                    if ((PbCache.collect.weightStatus == 0 || localWeightStatus == true) && PbCache.monitorResult.valid_frontInfraredRay_left_status && PbCache.monitor.validParkStatus == "1")
                     {
                         //重量稳定,且光栅不合格
                         vicPlayClass.GetVoicePlay("车辆超出秤台,请调整车位", PbCache.collect.carno);
@@ -1556,7 +1561,7 @@ namespace CarMeterSystem
                     #region 第一次查询,有车号,重量稳定,红外验证通过的情况只查一次
 
                     //如果没有查过一次,且扫描到车号信息,且重量稳定
-                    if ((bRailwayActual || sPreCarNo != TrackCarNo || firstCode != PbCache.strCode) && PbCache.collect.weightStatus == 0 && PbCache.monitorResult.valid_park_status)
+                    if ((bRailwayActual || sPreCarNo != TrackCarNo || firstCode != PbCache.strCode) && (PbCache.collect.weightStatus == 0 || localWeightStatus == true) && PbCache.monitorResult.valid_park_status)
                     {
                         firstWgt = 0;
                         sPreCarNo = TrackCarNo;
@@ -1739,7 +1744,7 @@ namespace CarMeterSystem
 
                     #region 毛皮净赋值;存在一次重量firstWgt的情况下才赋值毛皮净重
 
-                    if (PbCache.collect.weightStatus == 0 && firstWgt > 500)
+                    if ((PbCache.collect.weightStatus == 0 || localWeightStatus == true) && firstWgt > 500)
                     {
                         if (Math.Abs(firstWgt - PbCache.collect.weight) > AppConfigCache.differenceWgt)
                         {
@@ -1772,7 +1777,7 @@ namespace CarMeterSystem
                     //lg.WriteLog(37, string.Format("PbCache.monitor:{0},PbCache.monitor.isTakeOver:{1},bRailwayActual:{2},PbCache.collect.carno:{3},PbCache.collect.weightStatus:{4},ucWeightT1.isGreenWgt:{5},PbCache.isLockFrm:{6},isVoiceDownCar:{7},btnSave.Visible:{8}", PbCache.monitor, PbCache.monitor.isTakeOver, bRailwayActual, PbCache.collect.carno, PbCache.collect.weightStatus, ucWeightT1.isGreenWgt, PbCache.isLockFrm, isVoiceDownCar, btnSave.Visible));
                     //没有远程接管,且已查过一次数据,且界面未锁定的情况下,如果,有车号,重量稳定了,停车线验证通过,完成了扫码验证的情况下,则按钮可用
                     if (PbCache.monitor != null && PbCache.monitor.isTakeOver == "0" && !bRailwayActual && !string.IsNullOrEmpty(PbCache.collect.carno)
-                        && PbCache.collect.weightStatus == 0 && ucWeightT1.isGreenWgt)
+                        && (PbCache.collect.weightStatus == 0 || localWeightStatus == true) && ucWeightT1.isGreenWgt)
                     {
                         if (!PbCache.isLockFrm)
                         {
@@ -1840,7 +1845,7 @@ namespace CarMeterSystem
                             setMsgInfo(btnSave, "false", "2");//rxh add
                             lg.WriteLog(14, "车号:" + PbCache.collect.carno + ";对射没对准【" + PbCache.monitorResult.valid_park_status + "】" +
                                 "||重量不是绿色【" + ucWeightT1.isGreenWgt + "】" +
-                                "||重量不稳定 0:重量稳定; 1:重量不稳定;  2:空磅【" + PbCache.collect.weightStatus + "】" +
+                                "||重量不稳定 0:重量稳定; 1:重量不稳定;  2:空磅weightStatus:【" + PbCache.collect.weightStatus + "】&& localWeightStatus:【" + localWeightStatus + "】" +
                                 "||不是智能计量状态【" + PbCache.monitor.isTakeOver + "】" +
                                 "||扫码编号为空隐藏【" + firstCode + "】" +
                                 "||一次计量数据已经查询完成【" + bRailwayActual + "】" +
@@ -2357,7 +2362,7 @@ namespace CarMeterSystem
                     setMsg(PbCache.ResultMessage);
                     return;
                 }
-                else if (PbCache.collect.weightStatus == 0 && !PbCache.monitorResult.valid_park_status)
+                else if ((PbCache.collect.weightStatus == 0 || localWeightStatus == true) && !PbCache.monitorResult.valid_park_status)
                 {
                     //重量稳定,且对射验证不合格
                     vicPlayClass.GetVoicePlay("您的车辆未停到位", PbCache.collect.carno);
@@ -2618,6 +2623,11 @@ namespace CarMeterSystem
         {
             try
             {
+                // 20220930 By BourneCao
+                // 清楚本地判稳参数
+                localWeightStatus = false;
+                stableWeightList = null;
+
                 lg.WriteLog(27, ("车号:" + (string.IsNullOrEmpty(temporaryCarNo) ? "未识别" : temporaryCarNo)) + ";重量:" + PbCache.resultWgt + ";提示信息:" + PbCache.resultMsgAll);
                 MeterWorkScheduledHelp meterWorkScheduledHelp1 = new MeterWorkScheduledHelp();
                 meterWorkScheduledHelp1.baseSpotNo = PbCache.sportInfo.baseSpotNo;
@@ -3116,5 +3126,41 @@ namespace CarMeterSystem
                 //this.StopRefreshData();
             }
         }
+
+        /// <summary>
+        /// 重量采集列表
+        /// </summary>
+        private List<int> stableWeightList = new List<int>();
+
+        private const int maxStableCount = 8;
+
+        private bool CheckWeightStable(int weight)
+        {
+            if (stableWeightList == null)
+            {
+                return false;
+            }
+            else if (stableWeightList.Count < maxStableCount)
+            {
+                stableWeightList.Add(weight);
+                return false;
+            }
+            else
+            {
+                stableWeightList.RemoveAt(0);
+                stableWeightList.Add(weight);
+                int max = stableWeightList.Max();
+                int min = stableWeightList.Min();
+                var map = stableWeightList.GroupBy(x => x);
+                foreach (var item in map)
+                {
+                    if (item.Count() >= 4 && Math.Abs(max - item.Key) <= 40 && Math.Abs(item.Key - min) <= 40)
+                    {
+                        return true;
+                    }
+                }
+                return false;
+            }
+        }
     }
 }

+ 10 - 0
Common/vo/work/MeterWorkMonitor.cs

@@ -315,5 +315,15 @@ namespace Common
         /// 零点报警
         /// </summary>
         public string isZeroState { get; set; }
+
+        /// <summary>
+        /// 是否允许扫码计量
+        /// </summary>
+        public string isValidScan { get; set; }
+
+        /// <summary>
+        /// 禁止播放声音
+        /// </summary>
+        public string isEnableSound { get; set; }
     }
 }

+ 1 - 1
MeterPlugInLibrary/语音播报/VoicePlay.cs

@@ -36,7 +36,7 @@ namespace MeterPlugInLibrary
 
                 if (!isHaveVoice) return; //不存在语音则不进行后面播放操作
 
-                if (!PbCache.voiceOver) return;//语音未播完
+                if (!PbCache.voiceOver || PbCache.monitor.isEnableSound == "0") return;//语音未播完
                 PbCache.voiceOver = false;
 
                 WriteLog("车牌号:" + strCarNo + " 语音播放:" + strvoiceName);