Browse Source

update BeckhoffIOManager write aoValue

chenkui 5 days ago
parent
commit
09f5be5798

+ 3 - 2
Framework/Common/TwinCat/BeckhoffIOManager.cs

@@ -234,11 +234,12 @@ namespace MECF.Framework.Common.TwinCat
         /// <returns></returns>
         public bool WriteIoValue(string name,object value)
         {
-            if(ScalingManager.Instance.IsContained(name))
+            if (ScalingManager.Instance.IsContained(name))
             {
                 if(double.TryParse(value.ToString(),out var output))
                 {
-                    var result = ScalingManager.Instance.CalculateTwincatValueByInput(name,output);
+                    BeckhoffItem item = BeckhoffItemManager.Instance.GetWriteBeckhoffItem(name);
+                    var result = ScalingManager.Instance.CalculateTwincatValueByInput(name,output,item!=null?item.DataType:"int");
                     if(result.Item1)
                     {
                         return TwincatAdoManager.Instance.WriteValue(name, result.Item2);

+ 16 - 0
Framework/Common/TwinCat/Scaling.cs

@@ -24,5 +24,21 @@ namespace MECF.Framework.Common.TwinCat
         {
             return (int)Math.Round(((y - _scaleB) / _scaleA));
         }
+        public object CaculateXByY(double y,string dateType)
+        {
+            switch (dateType.ToLower())
+            {
+                case "int":
+                    return (short)Math.Round(((y - _scaleB) / _scaleA));
+                case "uint":
+                    return (ushort)Math.Round(((y - _scaleB) / _scaleA));
+                case "dint":
+                    return (int)Math.Round(((y - _scaleB) / _scaleA));
+                case "udint":
+                    return (uint)Math.Round(((y - _scaleB) / _scaleA));
+                default:
+                    return (int)Math.Round(((y - _scaleB) / _scaleA));
+            }
+        }
     }
 }

+ 17 - 0
Framework/Common/TwinCat/ScalingMamager.cs

@@ -113,5 +113,22 @@ namespace MECF.Framework.Common.TwinCat
                 return (false, 0);
             }
         }
+        /// <summary>
+        /// 计算Twincat数值
+        /// </summary>
+        /// <param name="name"></param>
+        /// <param name="y"></param>
+        /// <returns></returns>
+        public (bool, object) CalculateTwincatValueByInput(string name, double y,string dataType)
+        {
+            if (_scalingDic.ContainsKey(name))
+            {
+                return (true, _scalingDic[name].CaculateXByY(y,dataType));
+            }
+            else
+            {
+                return (false, 0);
+            }
+        }
     }
 }