瀏覽代碼

细节修改

Shunnet 2 年之前
父節點
當前提交
2dd1d0bc03

+ 35 - 3
src/YSAI.DAQ/YSAI.Mitsubishi/MitsubishiOperate.cs

@@ -541,11 +541,11 @@ namespace YSAI.Mitsubishi
             {
                 case DevType.A1E:
                     details = ParseA1E(address);
-                    command = ReadCommand_A1E(details.BeginAddress, details.TypeCode, length, isBit);
+                    command = ReadCommand_A1E(details.BeginAddress, details.TypeCode, (ushort)length, isBit);
                     break;
                 case DevType.QNA3E:
                     details = ParseQNA3E(address);
-                    command = ReadCommand_QNA3E(details.BeginAddress, details.TypeCode, length, isBit);
+                    command = ReadCommand_QNA3E(details.BeginAddress, details.TypeCode, (ushort)length, isBit);
                     break;
             }
             //发送等待结果
@@ -579,7 +579,30 @@ namespace YSAI.Mitsubishi
                 //读取失败返回
                 return new byte[] { };
             }
-            return bytes;
+
+            int len = length;
+            byte[] RValue = null;
+            switch (basics.DType)
+            {
+                case DevType.A1E:
+                    RValue= new byte[bytes.Length - 2];
+                    Array.Copy(bytes, 2, RValue, 0, RValue.Length);
+                    break;
+                case DevType.QNA3E:
+                    if (isBit)
+                    {
+                        len = (ushort)Math.Ceiling(len * 0.5);
+                    }
+                    RValue = new byte[len];
+                    Array.Copy(bytes, bytes.Length - len, RValue, 0, len);
+                    break;
+            }
+            if (RValue == null)
+            {
+                //读取失败返回
+                return new byte[] { };
+            }
+            return RValue;
         }
 
         /// <summary>
@@ -746,6 +769,14 @@ namespace YSAI.Mitsubishi
                         {
                             addressData.addressName = item.AddressName;
                         }
+                        ////如果是string 类型  (地址,长度)
+                        //if (item.AddressDataType == Core.@enum.DataType.String)
+                        //{
+                        //    byte[] strByte = R(addressData.addressName, (ushort)addressData.count);
+                        //    Value = BitConverter.ToString(strByte).ToString();
+                        //}
+                        //else
+                        //{
                         if (addressData.count.Equals(0))
                         {
                             switch (item.AddressDataType)
@@ -838,6 +869,7 @@ namespace YSAI.Mitsubishi
                                     Value = $"不支持{item.AddressDataType}类型批量读取";
                                     break;
                             }
+                            //}
                         }
                     }
                     //数据处理

+ 71 - 29
src/YSAI.DAQ/YSAI.Test.All/Program.cs

@@ -1,37 +1,79 @@
-using YSAI.Beckhoff;
+using System.Collections.Concurrent;
+using YSAI.Core.data;
+using YSAI.Log;
+using YSAI.Mitsubishi;
+using YSAI.Unility;
 
-//第一种方式
-BeckhoffOperate beckhoffOperate1 = new BeckhoffOperate();
-//第二种方式(单例模式)
-BeckhoffOperate? beckhoffOperate2 = new BeckhoffOperate().CreateInstance(new BeckhoffData.Basics()).GetRData<BeckhoffOperate>();
-//第三种方式(单例模式)
-BeckhoffOperate beckhoffOperate3 = BeckhoffOperate.Instance(new BeckhoffData.Basics());
-
-//第一种的应用场景是获取库参数信息时当这个对象已经实例化了,但是实际功能无法使用,就可以直接使用 CreateInstance 创建一个单例模式
-//先获取参数
-beckhoffOperate1.GetParam();
-//在生成单例后赋值,这样当前实例就已经可以使用所有功能,并且是单例的存在
-beckhoffOperate1 = beckhoffOperate1.CreateInstance(new BeckhoffData.Basics()).GetRData<BeckhoffOperate>();
-
-//第二种与第三种就是直接创建单例模式,但第二种是为了在反射的情况下使用单例模式,第二种也是为第一种情况而产生
-
-//第四种方式
-using (BeckhoffOperate beckhoffOperate4 = new BeckhoffOperate())
+MitsubishiOperate mitsubishiOperate = MitsubishiOperate.Instance(new MitsubishiData.Basics
 {
-    //使用完直接释放
-}
-//第五种方式
-using (BeckhoffOperate beckhoffOperate5 = BeckhoffOperate.Instance(new BeckhoffData.Basics()))
-{
-    //使用完直接释放这个单例
-}
-//第六种方式
-using (BeckhoffOperate? beckhoffOperate6 = new BeckhoffOperate().CreateInstance(new BeckhoffData.Basics()).GetRData<BeckhoffOperate>())
+    Ip = "127.0.0.1",
+    Port = 1111,
+    DType = MitsubishiData.DevType.A1E
+});
+LogHelper.Debug(mitsubishiOperate.On().Message);
+
+while (true)
 {
-    //使用完直接释放这个单例
+    double value = new Random().NextDouble();
+    LogHelper.Debug(value.ToString());
+    LogHelper.Debug(mitsubishiOperate.Write(new System.Collections.Concurrent.ConcurrentDictionary<string, string> 
+    {
+        ["M100"] = "aaaaaaaaaaaaaaaaaaaaaa",
+    }).State.ToString());
+
+
+    LogHelper.Debug(mitsubishiOperate.Read(new YSAI.Core.data.Address 
+    {
+        AddressArray=new List<YSAI.Core.data.AddressDetails> 
+        {
+            new YSAI.Core.data.AddressDetails
+            {
+                AddressName="M100,100",
+                AddressDataType=YSAI.Core.@enum.DataType.String
+            }
+        }
+    }).RData.ToJson());
+
+
+    Console.ReadLine();
 }
 
-Console.WriteLine();
+
+
+//using YSAI.Beckhoff;
+
+////第一种方式
+//BeckhoffOperate beckhoffOperate1 = new BeckhoffOperate();
+////第二种方式(单例模式)
+//BeckhoffOperate? beckhoffOperate2 = new BeckhoffOperate().CreateInstance(new BeckhoffData.Basics()).GetRData<BeckhoffOperate>();
+////第三种方式(单例模式)
+//BeckhoffOperate beckhoffOperate3 = BeckhoffOperate.Instance(new BeckhoffData.Basics());
+
+////第一种的应用场景是获取库参数信息时当这个对象已经实例化了,但是实际功能无法使用,就可以直接使用 CreateInstance 创建一个单例模式
+////先获取参数
+//beckhoffOperate1.GetParam();
+////在生成单例后赋值,这样当前实例就已经可以使用所有功能,并且是单例的存在
+//beckhoffOperate1 = beckhoffOperate1.CreateInstance(new BeckhoffData.Basics()).GetRData<BeckhoffOperate>();
+
+////第二种与第三种就是直接创建单例模式,但第二种是为了在反射的情况下使用单例模式,第二种也是为第一种情况而产生
+
+////第四种方式
+//using (BeckhoffOperate beckhoffOperate4 = new BeckhoffOperate())
+//{
+//    //使用完直接释放
+//}
+////第五种方式
+//using (BeckhoffOperate beckhoffOperate5 = BeckhoffOperate.Instance(new BeckhoffData.Basics()))
+//{
+//    //使用完直接释放这个单例
+//}
+////第六种方式
+//using (BeckhoffOperate? beckhoffOperate6 = new BeckhoffOperate().CreateInstance(new BeckhoffData.Basics()).GetRData<BeckhoffOperate>())
+//{
+//    //使用完直接释放这个单例
+//}
+
+//Console.WriteLine();
 //using YSAI.Beckhoff;
 //using YSAI.Core.data;
 //using YSAI.Log;

+ 1 - 0
src/YSAI.DAQ/YSAI.Test.All/YSAI.Test.All.csproj

@@ -14,6 +14,7 @@
 
   <ItemGroup>
     <ProjectReference Include="..\YSAI.Beckhoff\YSAI.Beckhoff.csproj" />
+    <ProjectReference Include="..\YSAI.Mitsubishi\YSAI.Mitsubishi.csproj" />
   </ItemGroup>