123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 |
- using HslCommunication;
- using HslCommunication.Core;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ProjectManagementSystem.Common.Extenions
- {
- public static class IReadWriteNetExtenions
- {
- public static OperateResult WriteValue<T>(this IReadWriteNet plc, string plcAddr, T plcValue)
- {
- OperateResult operateResult;
- switch (plcValue)
- {
- case bool value:
- operateResult = plc.Write(plcAddr, value);
- break;
- case byte value:
- operateResult = plc.Write(plcAddr, new byte[] { value });
- break;
- case short value:
- operateResult = plc.Write(plcAddr, value);
- break;
- case ushort value:
- operateResult = plc.Write(plcAddr, value);
- break;
- case int value:
- operateResult = plc.Write(plcAddr, value);
- break;
- case uint value:
- operateResult = plc.Write(plcAddr, value);
- break;
- case long value:
- operateResult = plc.Write(plcAddr, value);
- break;
- case ulong value:
- operateResult = plc.Write(plcAddr, value);
- break;
- case string value:
- operateResult = plc.Write(plcAddr, value, Encoding.ASCII);
- break;
- default:
- operateResult = new OperateResult($"未识别的数据类型 {typeof(T).Name}");
- operateResult.IsSuccess = false;
- break;
- }
- return operateResult;
- }
- public static bool ReadValue<T>(this IReadWriteNet plc, string plcAddr, T plcValue, out OperateResult<T> operateResult)
- {
- operateResult = new OperateResult<T>();
- switch (plcValue)
- {
- case bool value:
- {
- var readResult = plc.ReadBool(plcAddr);
- operateResult.IsSuccess = readResult.IsSuccess;
- operateResult.Content = readResult.Content.ToValue<T>();
- operateResult.Message = readResult.Message;
- if (readResult.IsSuccess
- && readResult.Content == value)
- {
- return true;
- }
- }
- break;
- case byte value:
- {
- var readResult = plc.Read(plcAddr, 1);
- operateResult.IsSuccess = readResult.IsSuccess;
- operateResult.Content = readResult.Content[0].ToValue<T>();
- operateResult.Message = readResult.Message;
- if (readResult.IsSuccess
- && readResult.Content[0] == value)
- {
- return true;
- }
- }
- break;
- case short value:
- {
- var readResult = plc.ReadInt16(plcAddr);
- operateResult.IsSuccess = readResult.IsSuccess;
- operateResult.Content = readResult.Content.ToValue<T>();
- operateResult.Message = readResult.Message;
- if (readResult.IsSuccess
- && readResult.Content == value)
- {
- return true;
- }
- }
- break;
- case ushort value:
- {
- var readResult = plc.ReadUInt16(plcAddr);
- operateResult.IsSuccess = readResult.IsSuccess;
- operateResult.Content = readResult.Content.ToValue<T>();
- operateResult.Message = readResult.Message;
- if (readResult.IsSuccess
- && readResult.Content == value)
- {
- return true;
- }
- }
- break;
- case int value:
- {
- var readResult = plc.ReadInt32(plcAddr);
- operateResult.IsSuccess = readResult.IsSuccess;
- operateResult.Content = readResult.Content.ToValue<T>();
- operateResult.Message = readResult.Message;
- if (readResult.IsSuccess
- && readResult.Content == value)
- {
- return true;
- }
- }
- break;
- case uint value:
- {
- var readResult = plc.ReadUInt32(plcAddr);
- operateResult.IsSuccess = readResult.IsSuccess;
- operateResult.Content = readResult.Content.ToValue<T>();
- operateResult.Message = readResult.Message;
- if (readResult.IsSuccess
- && readResult.Content == value)
- {
- return true;
- }
- }
- break;
- case long value:
- {
- var readResult = plc.ReadInt64(plcAddr);
- operateResult.IsSuccess = readResult.IsSuccess;
- operateResult.Content = readResult.Content.ToValue<T>();
- operateResult.Message = readResult.Message;
- if (readResult.IsSuccess
- && readResult.Content == value)
- {
- return true;
- }
- }
- break;
- case ulong value:
- {
- var readResult = plc.ReadUInt64(plcAddr);
- operateResult.IsSuccess = readResult.IsSuccess;
- operateResult.Content = readResult.Content.ToValue<T>();
- operateResult.Message = readResult.Message;
- if (readResult.IsSuccess
- && readResult.Content == value)
- {
- return true;
- }
- }
- break;
- case string value:
- {
- var readResult = plc.ReadString(plcAddr, (ushort)value.Length, Encoding.ASCII);
- operateResult.IsSuccess = readResult.IsSuccess;
- operateResult.Content = readResult.Content.ToValue<T>();
- operateResult.Message = readResult.Message;
- if (readResult.IsSuccess
- && readResult.Content == value)
- {
- return true;
- }
- }
- break;
- default:
- operateResult.IsSuccess = false;
- operateResult.Content = default(T);
- operateResult.Message = $"未识别的数据类型 {typeof(T).Name}";
- break;
- }
- return false;
- }
- //public static OperateResult WriteValue<T>(this IReadWriteNet plc, string plcAddr, T plcValue)
- //{
- // string DbValueTypeName = typeof(T).Name;
- // OperateResult operateResult = null;
- // switch (DbValueTypeName)
- // {
- // case "Boolean":
- // operateResult = plc.Write(plcAddr, plcValue.ToValue<bool>());
- // break;
- // case "Byte":
- // var dbValue = plcValue.ToValue<byte>();
- // operateResult = plc.Write(plcAddr, new byte[] { dbValue });
- // break;
- // case "Int16":
- // operateResult = plc.Write(plcAddr, plcValue.ToValue<short>());
- // break;
- // case "UInt16":
- // operateResult = plc.Write(plcAddr, plcValue.ToValue<ushort>());
- // break;
- // case "Int32":
- // operateResult = plc.Write(plcAddr, plcValue.ToValue<int>());
- // break;
- // case "UInt32":
- // operateResult = plc.Write(plcAddr, plcValue.ToValue<uint>());
- // break;
- // case "Int64":
- // operateResult = plc.Write(plcAddr, plcValue.ToValue<long>());
- // break;
- // case "UInt64":
- // operateResult = plc.Write(plcAddr, plcValue.ToValue<ulong>());
- // break;
- // case "String":
- // operateResult = plc.Write(plcAddr, plcValue.ToValue<string>(), Encoding.ASCII);
- // break;
- // default:
- // operateResult = new OperateResult($"未识别的数据类型 {DbValueTypeName}");
- // operateResult.IsSuccess = false;
- // break;
- // }
- // return operateResult;
- //}
- //public static bool ReadValue<T>(this IReadWriteNet plc, string plcAddr, T plcValue, out OperateResult<T> operateResult)
- //{
- // string DbValueTypeName = typeof(T).Name;
- // operateResult = new OperateResult<T>();
- // switch (DbValueTypeName)
- // {
- // case "Boolean":
- // {
- // var readResult = plc.ReadBool(plcAddr);
- // operateResult.IsSuccess = readResult.IsSuccess;
- // operateResult.Content = readResult.Content.ToValue<T>();
- // operateResult.Message = readResult.Message;
- // if (readResult.IsSuccess
- // && readResult.Content == plcValue.ToValue<bool>())
- // {
- // return true;
- // }
- // }
- // break;
- // case "Byte":
- // {
- // var readResult = plc.Read(plcAddr, 1);
- // operateResult.IsSuccess = readResult.IsSuccess;
- // operateResult.Content = readResult.Content[0].ToValue<T>();
- // operateResult.Message = readResult.Message;
- // if (readResult.IsSuccess
- // && readResult.Content[0] == plcValue.ToValue<byte>())
- // {
- // return true;
- // }
- // }
- // break;
- // case "Int16":
- // {
- // var readResult = plc.ReadInt16(plcAddr);
- // operateResult.IsSuccess = readResult.IsSuccess;
- // operateResult.Content = readResult.Content.ToValue<T>();
- // operateResult.Message = readResult.Message;
- // if (readResult.IsSuccess
- // && readResult.Content == plcValue.ToValue<short>())
- // {
- // return true;
- // }
- // }
- // break;
- // case "UInt16":
- // {
- // var readResult = plc.ReadUInt16(plcAddr);
- // operateResult.IsSuccess = readResult.IsSuccess;
- // operateResult.Content = readResult.Content.ToValue<T>();
- // operateResult.Message = readResult.Message;
- // if (readResult.IsSuccess
- // && readResult.Content == plcValue.ToValue<ushort>())
- // {
- // return true;
- // }
- // }
- // break;
- // case "Int32":
- // {
- // var readResult = plc.ReadInt32(plcAddr);
- // operateResult.IsSuccess = readResult.IsSuccess;
- // operateResult.Content = readResult.Content.ToValue<T>();
- // operateResult.Message = readResult.Message;
- // if (readResult.IsSuccess
- // && readResult.Content == plcValue.ToValue<int>())
- // {
- // return true;
- // }
- // }
- // break;
- // case "UInt32":
- // {
- // var readResult = plc.ReadUInt32(plcAddr);
- // operateResult.IsSuccess = readResult.IsSuccess;
- // operateResult.Content = readResult.Content.ToValue<T>();
- // operateResult.Message = readResult.Message;
- // if (readResult.IsSuccess
- // && readResult.Content == plcValue.ToValue<uint>())
- // {
- // return true;
- // }
- // }
- // break;
- // case "Int64":
- // {
- // var readResult = plc.ReadInt64(plcAddr);
- // operateResult.IsSuccess = readResult.IsSuccess;
- // operateResult.Content = readResult.Content.ToValue<T>();
- // operateResult.Message = readResult.Message;
- // if (readResult.IsSuccess
- // && readResult.Content == plcValue.ToValue<long>())
- // {
- // return true;
- // }
- // }
- // break;
- // case "UInt64":
- // {
- // var readResult = plc.ReadUInt64(plcAddr);
- // operateResult.IsSuccess = readResult.IsSuccess;
- // operateResult.Content = readResult.Content.ToValue<T>();
- // operateResult.Message = readResult.Message;
- // if (readResult.IsSuccess
- // && readResult.Content == plcValue.ToValue<ulong>())
- // {
- // return true;
- // }
- // }
- // break;
- // case "String":
- // {
- // string plcValueContent = plcValue.ToValue<string>();
- // var readResult = plc.ReadString(plcAddr, (ushort)plcValueContent.Length, Encoding.ASCII);
- // operateResult.IsSuccess = readResult.IsSuccess;
- // operateResult.Content = readResult.Content.ToValue<T>();
- // operateResult.Message = readResult.Message;
- // if (readResult.IsSuccess
- // && readResult.Content == plcValueContent)
- // {
- // return true;
- // }
- // }
- // break;
- // default:
- // operateResult.IsSuccess = false;
- // operateResult.Content = 0.ToValue<T>();
- // operateResult.Message = $"未识别的数据类型 {DbValueTypeName}";
- // break;
- // }
- // return false;
- //}
- }
- }
|