first commit
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,106 @@
|
||||
using PLCCommunication;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PLC
|
||||
{
|
||||
/// <summary>
|
||||
/// PLC接口
|
||||
/// </summary>
|
||||
public interface IPLC
|
||||
{
|
||||
/// <summary>
|
||||
/// 链接
|
||||
/// </summary>
|
||||
/// <param name="msg"></param>
|
||||
/// <returns></returns>
|
||||
bool Connect(ref string msg);
|
||||
/// <summary>
|
||||
/// 断开
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
bool Disconnect();
|
||||
|
||||
#region 读取
|
||||
/// <summary>
|
||||
/// 读取单个Bool
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
bool ReadBool(string address);
|
||||
/// <summary>
|
||||
/// 读取单个Int16整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
short ReadInt16(string address);
|
||||
/// <summary>
|
||||
/// 异步读取单个Int16整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
Task<JYResult<short>> ReadInt16Async(string address);
|
||||
/// <summary>
|
||||
/// 读取Int16数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
short[] ReadArrInt16(string address, ushort length);
|
||||
/// <summary>
|
||||
/// 异步读取Int16数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
Task<JYResult<short[]>> ReadArrInt16Async(string address, ushort length);
|
||||
/// <summary>
|
||||
/// 读取单个32位整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
int ReadInt32(string address);
|
||||
/// <summary>
|
||||
/// 异步读取单个32位整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
Task<JYResult<int>> ReadInt32Async(string address);
|
||||
/// <summary>
|
||||
/// 读取浮点型数据
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
float ReadFloat(string address);
|
||||
/// <summary>
|
||||
/// 异步读取float数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
Task<JYResult<float[]>> ReadArrFloatAsync(string address, ushort length);
|
||||
|
||||
/// <summary>
|
||||
/// 泛型读取
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
T ReadValue<T>(string address, DataType type, ushort length = 0);
|
||||
|
||||
#endregion
|
||||
|
||||
#region 写入
|
||||
bool WriteBool(string address, bool value);
|
||||
bool WriteInt16(string address, short value);
|
||||
bool WriteInt32(string address, int value);
|
||||
bool WriteFloat(string address, float value);
|
||||
JYResult WriteValue(string address, object value, PLC.DataType type);
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,185 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using PLCCommunication;
|
||||
|
||||
namespace PLC
|
||||
{
|
||||
/// <summary>
|
||||
/// PLC基类
|
||||
/// </summary>
|
||||
public abstract class PlcReadWriteBase : IPLC
|
||||
{
|
||||
/// <summary>
|
||||
/// 构造一个新的PLC对象
|
||||
/// </summary>
|
||||
/// <param name="pid"></param>
|
||||
/// <param name="pname">plc名</param>
|
||||
/// <param name="iep">PLC的IP和端口</param>
|
||||
/// <param name="timeout">PLC的通讯超时时间</param>
|
||||
public PlcReadWriteBase(int pid, string pname, IPEndPoint iep, int timeout = 10)
|
||||
{
|
||||
this.zPlcID = pid;
|
||||
this.zName = pname;
|
||||
this.IP = iep.Address.ToString();
|
||||
this.Port = iep.Port;
|
||||
this.Timeout = timeout;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
protected string zName;// 允许继承类以后可以更改名称
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
protected int zPlcID;
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public string Name { get { return zName; } }
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public int PlcID { get { return zPlcID; } }
|
||||
/// <summary>
|
||||
/// Ip地址
|
||||
/// </summary>
|
||||
public string IP { get; private set; }
|
||||
/// <summary>
|
||||
/// 端口号
|
||||
/// </summary>
|
||||
public int Port { get; private set; }
|
||||
/// <summary>
|
||||
/// 是否链接成功
|
||||
/// </summary>
|
||||
public bool IsConnected { get; set; }
|
||||
/// <summary>
|
||||
/// PLC 的通讯超时时间
|
||||
/// </summary>
|
||||
public int Timeout { get; private set; }
|
||||
/// <summary>
|
||||
/// 链接PLC
|
||||
/// </summary>
|
||||
public abstract bool Connect(ref string msg);
|
||||
/// <summary>
|
||||
/// 断开PLC
|
||||
/// </summary>
|
||||
public abstract bool Disconnect();
|
||||
/// <summary>
|
||||
/// 读取Plc内部boo变量
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public abstract bool ReadBool(string address);
|
||||
/// <summary>
|
||||
/// 读取单个Int16整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public abstract short ReadInt16(string address);
|
||||
/// <summary>
|
||||
/// 异步读取单个Int16整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public abstract Task<JYResult<short>> ReadInt16Async(string address);
|
||||
/// <summary>
|
||||
/// 读取Int16数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public abstract short[] ReadArrInt16(string address, ushort length);
|
||||
/// <summary>
|
||||
/// 异步读取Int16数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public abstract Task<JYResult<short[]>> ReadArrInt16Async(string address, ushort length);
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public abstract int ReadInt32(string address);
|
||||
/// <summary>
|
||||
/// 异步读取整数32位
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public abstract Task<JYResult<int>> ReadInt32Async(string address);
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public abstract float ReadFloat(string address);
|
||||
/// <summary>
|
||||
/// 读取float数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public abstract float[] ReadArrFloat(string address, ushort length);
|
||||
/// <summary>
|
||||
/// 异步读取float数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public abstract Task<JYResult<float[]>> ReadArrFloatAsync(string address, ushort length);
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public abstract T ReadValue<T>(string address, DataType type, ushort length = 0);
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
public abstract bool WriteBool(string address, bool value);
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public abstract bool WriteInt16(string address, short value);
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public abstract bool WriteInt32(string address, int value);
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public abstract bool WriteFloat(string address, float value);
|
||||
/// <summary>
|
||||
/// 泛型写入数据
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="type"></param>
|
||||
/// <returns></returns>
|
||||
public abstract JYResult WriteValue(string address, object value, PLC.DataType type = PLC.DataType.Short);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace PLC
|
||||
{
|
||||
/// <summary>
|
||||
/// 泛型定长数据队列
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
public class DataQueue<T>
|
||||
{
|
||||
public DataQueue(int length)
|
||||
{
|
||||
dataQueue = new Queue<T>(length);
|
||||
this.length = length;
|
||||
queueLocker = new object();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 队列长度
|
||||
/// </summary>
|
||||
private int length;
|
||||
/// <summary>
|
||||
/// 泛型队列
|
||||
/// </summary>
|
||||
private Queue<T> dataQueue;
|
||||
private readonly object queueLocker;
|
||||
|
||||
/// <summary>
|
||||
/// 向列尾插入元素
|
||||
/// 并移去列首超出数量的元素
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
public void Enqueue(T value)
|
||||
{
|
||||
lock (queueLocker)
|
||||
{
|
||||
dataQueue.Enqueue(value);
|
||||
if (dataQueue.Count > length)
|
||||
dataQueue.Dequeue();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否整个队列的数据都相同、
|
||||
/// </summary>
|
||||
public bool IsSame
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (queueLocker)
|
||||
{
|
||||
if (dataQueue.Count < length)
|
||||
return false;
|
||||
|
||||
return dataQueue.Distinct().Count() == 1;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Binary file not shown.
@@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{486AECD0-C2BF-43C5-B7D7-88E565ADE4B7}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>PLC</RootNamespace>
|
||||
<AssemblyName>PLC</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
<TargetFrameworkProfile />
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>bin\Debug\PLC.xml</DocumentationFile>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<DocumentationFile>bin\Release\PLC.xml</DocumentationFile>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PLCCommunication, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL" />
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.ComponentModel.Composition" />
|
||||
<Reference Include="System.Core" />
|
||||
<Reference Include="System.Xml.Linq" />
|
||||
<Reference Include="System.Data.DataSetExtensions" />
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="DataQueue.cs" />
|
||||
<Compile Include="Base\IPLC.cs" />
|
||||
<Compile Include="PLCAlarm\AlarmManager.cs" />
|
||||
<Compile Include="PlcLibrary\OmronCipNet.cs" />
|
||||
<Compile Include="PlcLibrary\OmronFinsTCP.cs" />
|
||||
<Compile Include="PLCAlarm\AlarmFileData.cs" />
|
||||
<Compile Include="PLCAlarm\PLCAlarmReader.cs" />
|
||||
<Compile Include="PLCAlarm\RecordAlarmData.cs" />
|
||||
<Compile Include="PLCAlarm\RecordType.cs" />
|
||||
<Compile Include="PLCData.cs" />
|
||||
<Compile Include="PLCDataTool.cs" />
|
||||
<Compile Include="PlcLibrary\PLCFactory.cs" />
|
||||
<Compile Include="Base\PlcReadWriteBase.cs" />
|
||||
<Compile Include="PlcLibrary\PLCType.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\JinYuan.Helper\JinYuan.Helper.csproj">
|
||||
<Project>{258D0AB7-2B4F-4D8F-A3CD-7A8CB4A85360}</Project>
|
||||
<Name>JinYuan.Helper</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="Lib\PLCCommunication.dll" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
||||
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectView>ShowAllFiles</ProjectView>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -0,0 +1,49 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace PLC.PLCAlarm
|
||||
{
|
||||
/// <summary>
|
||||
/// 从文件读取的PLC报警信息
|
||||
/// </summary>
|
||||
public class AlarmFileData
|
||||
{
|
||||
/// <summary>
|
||||
/// alarmData有5个元素,分别对应字,位,报警触发值,报警代码,报警信息
|
||||
/// </summary>
|
||||
/// <param name="alarmData"></param>
|
||||
public AlarmFileData(string[] alarmData)
|
||||
{
|
||||
Word = int.Parse(alarmData[0]);
|
||||
Bit = int.Parse(alarmData[1]);
|
||||
AlarmTriger = alarmData[2] == "1";
|
||||
AlarmCode = alarmData[3];
|
||||
AlarmInfo = alarmData[4];
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 报警字地址
|
||||
/// </summary>
|
||||
public int Word { get; set; }
|
||||
/// <summary>
|
||||
/// 报警位地址
|
||||
/// </summary>
|
||||
public int Bit { get; set; }
|
||||
/// <summary>
|
||||
/// 报警触发值
|
||||
/// (为true的话就是当读取值是true的时候触发这个报警)
|
||||
/// </summary>
|
||||
public bool AlarmTriger { get; set; }
|
||||
/// <summary>
|
||||
/// 要上传到mes的报警代码
|
||||
/// </summary>
|
||||
public string AlarmCode { get; set; }
|
||||
/// <summary>
|
||||
/// 报警说明
|
||||
/// </summary>
|
||||
public string AlarmInfo { get; set; }
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PLC.PLCAlarm
|
||||
{
|
||||
/// <summary>
|
||||
/// 报警信息管理器
|
||||
/// </summary>
|
||||
public class AlarmManager
|
||||
{
|
||||
private readonly ConcurrentDictionary<string, AlarmEntry> activeAlarms = new ConcurrentDictionary<string, AlarmEntry>();
|
||||
|
||||
/// <summary>
|
||||
/// 添加报警
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
public void AddAlarm(RecordAlarmDataArgs e)
|
||||
{
|
||||
var alarmInfo = new AlarmEntry
|
||||
{
|
||||
AlarmCode = e.AlarmCode,
|
||||
AlarmInfo = e.AlarmInfo,
|
||||
AlarmDate = e.AlarmDate,
|
||||
StartTime = e.StartTime
|
||||
};
|
||||
|
||||
activeAlarms.TryAdd(e.AlarmCode, alarmInfo);
|
||||
}
|
||||
/// <summary>
|
||||
/// 删除报警
|
||||
/// </summary>
|
||||
/// <param name="e"></param>
|
||||
public void RemoveAlarm(RecordAlarmDataArgs e)
|
||||
{
|
||||
activeAlarms.TryRemove(e.AlarmCode, out _);
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取报警文本
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public string GetFormattedAlarmText()
|
||||
{
|
||||
var sb = new StringBuilder();
|
||||
foreach (var alarm in activeAlarms.Values.OrderByDescending(a => a.StartTime))
|
||||
{
|
||||
sb.AppendLine($"报警: 代码 {alarm.AlarmCode}, 内容 {alarm.AlarmInfo}, 日期 {alarm.AlarmDate}, 开始时间 {alarm.StartTime:HH:mm:ss}");
|
||||
}
|
||||
return sb.ToString().TrimEnd();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取报警JOSN
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public string GetActiveAlarmsJson()
|
||||
{
|
||||
return JsonConvert.SerializeObject(activeAlarms.Values);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 报警类
|
||||
/// </summary>
|
||||
public class AlarmEntry
|
||||
{
|
||||
/// <summary>
|
||||
/// 报警代码
|
||||
/// </summary>
|
||||
public string AlarmCode { get; set; }
|
||||
/// <summary>
|
||||
/// 报警信息
|
||||
/// </summary>
|
||||
public string AlarmInfo { get; set; }
|
||||
/// <summary>
|
||||
/// 报警时间
|
||||
/// </summary>
|
||||
public string AlarmDate { get; set; }
|
||||
/// <summary>
|
||||
/// 报警开始时间
|
||||
/// </summary>
|
||||
public DateTime StartTime { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,332 @@
|
||||
using JinYuan.Helper;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace PLC.PLCAlarm
|
||||
{
|
||||
/// <summary>
|
||||
/// PLC报警记录模块
|
||||
/// </summary>
|
||||
public class PLCAlarmReader
|
||||
{
|
||||
/// <summary>
|
||||
/// 报警模板(从触摸屏导出的报警数据)
|
||||
/// </summary>
|
||||
private readonly List<AlarmFileData> alarmFileDataList;
|
||||
/// <summary>
|
||||
/// 报警记录路径(实际记录下来的实时报警)
|
||||
/// </summary>
|
||||
private readonly string alarmRecordPath;
|
||||
/// <summary>
|
||||
/// 是否忽略报警状态下的新增报警
|
||||
/// </summary>
|
||||
private readonly bool ignoreAlarm;
|
||||
/// <summary>
|
||||
/// 报警记录类型
|
||||
/// </summary>
|
||||
private readonly RecordType recordType;
|
||||
|
||||
/// <summary>
|
||||
/// 初始化一个报警读取器
|
||||
/// </summary>
|
||||
/// <param name="AlarmFilePath">报警文件路径
|
||||
/// <para>
|
||||
/// 文件格式 .csv
|
||||
/// <para>字,位,触发数值,报警代码,报警内容</para>
|
||||
/// <para>40000,0,1,E001,急停报警(IO:A1_I0.05)</para>
|
||||
/// <para>40000,1,1,E002,上下料安全门报警(IO:A1_I0.06)</para>
|
||||
/// </para>
|
||||
/// </param>
|
||||
/// <param name="AlarmRecordPath">报警记录目录路径</param>
|
||||
/// <param name="recType">报警记录类型</param>
|
||||
/// <param name="ignore">是否忽略报警状态下的新增报警</param>
|
||||
public PLCAlarmReader(string AlarmFilePath, string AlarmRecordPath, RecordType recType = RecordType.RecordWhenStart, bool ignore = false)
|
||||
{
|
||||
alarmFileDataList = ReadAlarmFile(AlarmFilePath);
|
||||
alarmRecordPath = AlarmRecordPath;
|
||||
recordType = recType;
|
||||
ignoreAlarm = ignore;
|
||||
RecordAlarms = new List<RecordAlarmDataArgs>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 新增报警事件
|
||||
/// </summary>
|
||||
public event EventHandler<RecordAlarmDataArgs> PLCAlarm_New;
|
||||
/// <summary>
|
||||
/// 报警复位事件
|
||||
/// </summary>
|
||||
public event EventHandler<RecordAlarmDataArgs> PLCAlarm_Remove;
|
||||
/// <summary>
|
||||
/// 当前记录中的报警
|
||||
/// </summary>
|
||||
public List<RecordAlarmDataArgs> RecordAlarms { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 读取本地报警文件
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private List<AlarmFileData> ReadAlarmFile(string alarmFilePath)
|
||||
{
|
||||
List<AlarmFileData> fileAlarmList = new List<AlarmFileData>();
|
||||
try
|
||||
{
|
||||
if (!File.Exists(alarmFilePath))
|
||||
return null;
|
||||
using (StreamReader sr = new StreamReader(alarmFilePath, Encoding.Default))
|
||||
{
|
||||
if (!sr.EndOfStream)
|
||||
sr.ReadLine(); // 读掉第一行标题行
|
||||
while (!sr.EndOfStream)
|
||||
{
|
||||
string[] alarmData = sr.ReadLine().Split('\t');
|
||||
fileAlarmList.Add(new AlarmFileData(alarmData));
|
||||
}
|
||||
}
|
||||
return fileAlarmList;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.Instance.WriteError("读取本地报警信息配置文件出错:" + ex.Message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 寻找报警代码
|
||||
/// </summary>
|
||||
/// <param name="word">字地址</param>
|
||||
/// <param name="bit">位地址</param>
|
||||
/// <param name="value">值</param>
|
||||
/// <param name="alarmData">报警信息</param>
|
||||
/// <returns>是否找到</returns>
|
||||
private bool FindAlarm(int word, int bit, bool value, out AlarmFileData alarmData)
|
||||
{
|
||||
if (alarmFileDataList==null)
|
||||
{
|
||||
alarmData = null;
|
||||
return false;
|
||||
}
|
||||
foreach (var item in alarmFileDataList)
|
||||
{
|
||||
if (item.Word == word &&
|
||||
item.Bit == bit &&
|
||||
item.AlarmTriger == value)
|
||||
{
|
||||
alarmData = item;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
alarmData = null;
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获得当前报警列表
|
||||
/// </summary>
|
||||
/// <param name="startAddr">报警字开始地址</param>
|
||||
/// <param name="addrStep">报警地址递增步进(个别情况用)
|
||||
/// <para>比如按字读取基恩士MR地址时,字地址是40000,40100,40200这样增加的,此时就要把addrStep设成100</para>
|
||||
/// </param>
|
||||
/// <param name="length">报警字长度(有几个字)</param>
|
||||
/// <param name="readDatas">读到的数据</param>
|
||||
/// <param name="readPLCAlrms">返回的当前报警列表</param>
|
||||
/// <returns></returns>
|
||||
private bool GenerateAlarmList(int startAddr, int length, ushort[] readDatas, out List<AlarmFileData> readPLCAlrms, int addrStep = 1)
|
||||
{
|
||||
bool isAlarm = false;
|
||||
readPLCAlrms = new List<AlarmFileData>();
|
||||
for (int wi = 0; wi < length; wi++)
|
||||
{
|
||||
ushort word = readDatas[wi];
|
||||
if (word != 0)
|
||||
{
|
||||
isAlarm = true;
|
||||
bool[] bits = PLCDataTool.WordToBits(word);
|
||||
for (int bi = 0; bi < 16; bi++)
|
||||
{
|
||||
if (FindAlarm(startAddr + wi * addrStep, bi, bits[bi], out AlarmFileData alarmdata))
|
||||
{
|
||||
if (!readPLCAlrms.Exists((p) => p.AlarmCode == alarmdata.AlarmCode))
|
||||
readPLCAlrms.Add(alarmdata);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return isAlarm;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 输入读取的数据,判断当前是否报警,保存报警记录
|
||||
/// </summary>
|
||||
/// <param name="startAddr">报警字开始地址</param>
|
||||
/// <param name="addrStep">报警地址递增步进(个别情况用)
|
||||
/// <para>比如按字读取基恩士MR地址时,字地址是40000,40100,40200这样增加的,此时就要把addrStep设成100</para>
|
||||
/// </param>
|
||||
/// <param name="length">报警字长度(有几个字)</param>
|
||||
/// <param name="readDatas">读到的数据</param>
|
||||
/// <returns></returns>
|
||||
public bool IsPLCAlarm(int startAddr, int length, ushort[] readDatas, int addrStep = 1)
|
||||
{
|
||||
if (GenerateAlarmList(startAddr, length, readDatas, out List<AlarmFileData> readPLCAlrms, addrStep))
|
||||
{
|
||||
// 新增
|
||||
if (!ignoreAlarm || RecordAlarms.Count <= 0) //当不忽略报警状态下新增报警,或者当前是无报警状态的话,就记录
|
||||
{
|
||||
foreach (var alrmItem in readPLCAlrms)
|
||||
{
|
||||
if (RecordAlarms.Exists(p => p.AlarmCode == alrmItem.AlarmCode))
|
||||
continue;
|
||||
// 记录新增报警
|
||||
var recordData = new RecordAlarmDataArgs()
|
||||
{
|
||||
AlarmCode = alrmItem.AlarmCode,
|
||||
AlarmInfo = alrmItem.AlarmInfo,
|
||||
AlarmDate = DateTime.Now.ToString("yyyy/MM/dd"),
|
||||
StartTime = DateTime.Now
|
||||
};
|
||||
RecordAlarms.Add(recordData);
|
||||
SaveAlarmRecordWhenStart(recordData);
|
||||
OnAlarm_New(recordData);
|
||||
}
|
||||
}
|
||||
// 复位
|
||||
for (int i = RecordAlarms.Count - 1; i >= 0; i--)
|
||||
{
|
||||
// 遍历记录中的报警,如果有当前报警中不包含的报警项,说明报警已复位
|
||||
if (!readPLCAlrms.Exists(p => p.AlarmCode == RecordAlarms[i].AlarmCode))
|
||||
{
|
||||
SaveAlarmRecordWhenFinish(RecordAlarms[i], DateTime.Now);
|
||||
OnAlarm_Remove(RecordAlarms[i]);
|
||||
RecordAlarms.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 全都复位
|
||||
for (int i = RecordAlarms.Count - 1; i >= 0; i--)
|
||||
{
|
||||
SaveAlarmRecordWhenFinish(RecordAlarms[i], DateTime.Now);
|
||||
OnAlarm_Remove(RecordAlarms[i]);
|
||||
RecordAlarms.RemoveAt(i);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 触发新增报警事件
|
||||
/// </summary>
|
||||
/// <param name="args"></param>
|
||||
private void OnAlarm_New(RecordAlarmDataArgs args)
|
||||
{
|
||||
// 以线程安全的方式引发事件
|
||||
var temp = PLCAlarm_New;
|
||||
temp?.Invoke(this, args);
|
||||
}
|
||||
/// <summary>
|
||||
/// 触发报警复位事件
|
||||
/// </summary>
|
||||
/// <param name="args"></param>
|
||||
private void OnAlarm_Remove(RecordAlarmDataArgs args)
|
||||
{
|
||||
// 以线程安全的方式引发事件
|
||||
var temp = PLCAlarm_Remove;
|
||||
temp?.Invoke(this, args);
|
||||
}
|
||||
|
||||
|
||||
#region 保存报警记录
|
||||
/// <summary>
|
||||
/// 当报警消除的时候记录已消除的报警
|
||||
/// </summary>
|
||||
/// <param name="alrmData">报警数据</param>
|
||||
/// <param name="endTime">结束时间</param>
|
||||
private void SaveAlarmRecordWhenFinish(RecordAlarmDataArgs alrmData, DateTime endTime)
|
||||
{
|
||||
if (recordType != RecordType.RecordWhenFinish)
|
||||
return;
|
||||
|
||||
string start = alrmData.StartTime.ToString("HH:mm:ss");
|
||||
string end = endTime.ToString("HH:mm:ss");
|
||||
string totaltime = (endTime - alrmData.StartTime).TotalMinutes.ToString("f2");
|
||||
|
||||
if (!Directory.Exists(alarmRecordPath))
|
||||
{
|
||||
Directory.CreateDirectory(alarmRecordPath);
|
||||
}
|
||||
try
|
||||
{
|
||||
string filePath = Path.Combine(alarmRecordPath, DateTime.Now.ToString("yyyy-MM-dd") + ".csv");
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
using (StreamWriter sw = new StreamWriter(filePath))
|
||||
{
|
||||
sw.WriteLine("报警信息,报警代码,统计日期,开始时间,结束时间,消耗时间(min)");
|
||||
sw.WriteLine(alrmData.AlarmInfo + "," + alrmData.AlarmCode + "," + alrmData.AlarmDate + "," + start + "," + end + "," + totaltime);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
using (StreamWriter sw = new StreamWriter(filePath, true))
|
||||
{
|
||||
sw.WriteLine(alrmData.AlarmInfo + "," + alrmData.AlarmCode + "," + alrmData.AlarmDate + "," + start + "," + end + "," + totaltime);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.Instance.WriteError(ex.Message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 当报警触发的时候记录报警
|
||||
/// </summary>
|
||||
/// <param name="alrmData">报警数据</param>
|
||||
private void SaveAlarmRecordWhenStart(RecordAlarmDataArgs alrmData)
|
||||
{
|
||||
if (recordType != RecordType.RecordWhenStart)
|
||||
return;
|
||||
|
||||
string start = alrmData.StartTime.ToString("HH:mm:ss");
|
||||
|
||||
if (!Directory.Exists(alarmRecordPath))
|
||||
{
|
||||
Directory.CreateDirectory(alarmRecordPath);
|
||||
}
|
||||
try
|
||||
{
|
||||
string filePath = Path.Combine(alarmRecordPath, DateTime.Now.ToString("yyyy-MM-dd") + ".csv");
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
using (StreamWriter sw = new StreamWriter(filePath))
|
||||
{
|
||||
sw.WriteLine("报警信息,报警代码,统计日期,开始时间");
|
||||
sw.WriteLine(alrmData.AlarmInfo + "," + alrmData.AlarmCode + "," + alrmData.AlarmDate + "," + start);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
using (StreamWriter sw = new StreamWriter(filePath, true))
|
||||
{
|
||||
sw.WriteLine(alrmData.AlarmInfo + "," + alrmData.AlarmCode + "," + alrmData.AlarmDate + "," + start);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHelper.Instance.WriteError(ex.Message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace PLC.PLCAlarm
|
||||
{
|
||||
/// <summary>
|
||||
/// 报警记录数据(同时作为报警事件的事件参数)
|
||||
/// </summary>
|
||||
public class RecordAlarmDataArgs : EventArgs
|
||||
{
|
||||
/// <summary>
|
||||
/// 报警信息
|
||||
/// </summary>
|
||||
public string AlarmInfo { get; set; }
|
||||
/// <summary>
|
||||
/// 报警代码
|
||||
/// </summary>
|
||||
public string AlarmCode { get; set; }
|
||||
/// <summary>
|
||||
/// 报警日期
|
||||
/// </summary>
|
||||
public string AlarmDate { get; set; }
|
||||
/// <summary>
|
||||
/// 报警开始时间
|
||||
/// </summary>
|
||||
public DateTime StartTime { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,26 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace PLC.PLCAlarm
|
||||
{
|
||||
/// <summary>
|
||||
/// 报警文件记录选项
|
||||
/// </summary>
|
||||
public enum RecordType
|
||||
{
|
||||
/// <summary>
|
||||
/// 不记录
|
||||
/// </summary>
|
||||
NoRecord,
|
||||
/// <summary>
|
||||
/// 报警触发的时候记录
|
||||
/// </summary>
|
||||
RecordWhenStart,
|
||||
/// <summary>
|
||||
/// 报警复位的时候记录
|
||||
/// </summary>
|
||||
RecordWhenFinish
|
||||
}
|
||||
}
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace PLC
|
||||
{
|
||||
/// <summary>
|
||||
/// PLC数据
|
||||
/// </summary>
|
||||
/// <typeparam name="T">读取的值类型</typeparam>
|
||||
public struct PLCData<T>
|
||||
{
|
||||
/// <summary>
|
||||
/// 字地址
|
||||
/// </summary>
|
||||
public int WordAddr { get; set; }
|
||||
/// <summary>
|
||||
/// 位地址
|
||||
/// </summary>
|
||||
public int BitAddr { get; set; }
|
||||
/// <summary>
|
||||
/// 功能
|
||||
/// </summary>
|
||||
public string Function { get; set; }
|
||||
/// <summary>
|
||||
/// 描述
|
||||
/// </summary>
|
||||
public string Info { get; set; }
|
||||
/// <summary>
|
||||
/// 数据类型
|
||||
/// </summary>
|
||||
public DataType DataType { get; set; }
|
||||
/// <summary>
|
||||
/// 高低位类型
|
||||
/// </summary>
|
||||
public HightLowType HightLowType { get; set; }
|
||||
/// <summary>
|
||||
/// 读取的值
|
||||
/// </summary>
|
||||
public T Data { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取数据类型
|
||||
/// </summary>
|
||||
//public enum DataType
|
||||
//{
|
||||
// /// <summary>
|
||||
// /// 位
|
||||
// /// </summary>
|
||||
// Bit = 0,
|
||||
// /// <summary>
|
||||
// /// 短整型 16位
|
||||
// /// </summary>
|
||||
// Short,
|
||||
// /// <summary>
|
||||
// /// 整型 32位
|
||||
// /// </summary>
|
||||
// Int,
|
||||
// /// <summary>
|
||||
// /// 浮点 32位
|
||||
// /// </summary>
|
||||
// Float
|
||||
//}
|
||||
|
||||
public enum DataType
|
||||
{
|
||||
[Description("Bool")]
|
||||
Bool,
|
||||
[Description("Short")]
|
||||
Short,
|
||||
[Description("Int")]
|
||||
Int,
|
||||
[Description("Float")]
|
||||
Float,
|
||||
[Description("Double")]
|
||||
Double,
|
||||
[Description("String")]
|
||||
String,
|
||||
[Description("ArrByte")]
|
||||
ArrByte,
|
||||
[Description("ArrFloat")]
|
||||
ArrFloat,
|
||||
[Description("ArrShort")]
|
||||
ArrShort,
|
||||
[Description("ArrUshort")]
|
||||
ArrUshort,
|
||||
[Description("ArrInt")]
|
||||
ArrInt,
|
||||
[Description("ArrUint")]
|
||||
ArrUint,
|
||||
|
||||
|
||||
}
|
||||
|
||||
public enum HightLowType
|
||||
{
|
||||
_12,
|
||||
_21,
|
||||
_4321
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,202 @@
|
||||
|
||||
|
||||
using JinYuan.Helper;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace PLC
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
public class PLCDataTool
|
||||
{
|
||||
/// <summary>
|
||||
/// 将字节数组转成16进制字符串
|
||||
/// </summary>
|
||||
/// <param name="hex"></param>
|
||||
/// <param name="len"></param>
|
||||
/// <returns></returns>
|
||||
public static string Byte2HexString(byte[] hex, int len)
|
||||
{
|
||||
string returnstr = "";
|
||||
for (int i = 0; i < len; i++)
|
||||
{
|
||||
returnstr += hex[i].ToString("X2");
|
||||
}
|
||||
return returnstr;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 把字符串截取成每个元素2个字符的字符串数组
|
||||
/// </summary>
|
||||
/// <param name="src"></param>
|
||||
/// <param name="notDataCounts">前置非数据字节数,omron为30,Mitsubishi为11</param>
|
||||
/// <returns></returns>
|
||||
public static string[] Str2StrArray(string src, int notDataCounts)
|
||||
{
|
||||
try
|
||||
{
|
||||
string[] res;
|
||||
|
||||
src = src.Substring(2 * notDataCounts);
|
||||
|
||||
res = new string[src.Length / 2];
|
||||
for (int i = 0; i < src.Length / 2; i++)
|
||||
{
|
||||
res[i] = src.Substring(i * 2, 2);
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
catch (Exception exp)
|
||||
{
|
||||
LogHelper.Instance.WriteError(exp.Message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将条码转换成UInt16数组
|
||||
/// <para>没两个字符对应一个UInt16</para>
|
||||
/// </summary>
|
||||
/// <param name="barcode"></param>
|
||||
/// <returns></returns>
|
||||
public static int[] BarcodeTransfer(string barcode)
|
||||
{
|
||||
|
||||
byte[] bt = Encoding.ASCII.GetBytes(barcode);
|
||||
if (bt.Length % 2 != 0)
|
||||
{
|
||||
bt = bt.Concat(new byte[] { 0 }).ToArray();
|
||||
}
|
||||
int[] result = new int[bt.Length / 2];
|
||||
for (int i = 0; i < bt.Length / 2; i++)
|
||||
{
|
||||
result[i] = Convert.ToUInt16(bt[2 * i].ToString("X2") + bt[2 * i + 1].ToString("X2"), 16);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 位转字
|
||||
/// 输入一个长度16的bool数组,返回一个Int16形式的字
|
||||
/// <para>高位在左,低位在右</para>
|
||||
/// </summary>
|
||||
/// <param name="bits"></param>
|
||||
/// <returns>Word</returns>
|
||||
public static ushort BitsToWord(bool[] bits)
|
||||
{
|
||||
ushort result = 0;
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
if (bits[i])
|
||||
result |= (ushort)(1 << i);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 字转位
|
||||
/// 输入一个Int16形式的字,返回一个长度16的bool数组
|
||||
/// </summary>
|
||||
/// <param name="word"></param>
|
||||
/// <returns>Bits</returns>
|
||||
public static bool[] WordToBits(ushort word)
|
||||
{
|
||||
bool[] result = new bool[16];
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
result[i] = ((word >> i) & 1) == 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 位转字节
|
||||
/// </summary>
|
||||
/// <param name="bits"></param>
|
||||
/// <returns></returns>
|
||||
public static byte BitsToByte(bool[] bits)
|
||||
{
|
||||
byte result = 0;
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
if (bits[i])
|
||||
result |= (byte)(1 << i);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 字节转位
|
||||
/// </summary>
|
||||
/// <param name="bt"></param>
|
||||
/// <returns></returns>
|
||||
public static bool[] ByteToBits(byte bt)
|
||||
{
|
||||
bool[] result = new bool[8];
|
||||
for (int i = 0; i < 8; i++)
|
||||
{
|
||||
result[i] = ((bt >> i) & 1) == 1;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 把两个uint16的数据合并成一个float
|
||||
/// </summary>
|
||||
/// <param name="High"></param>
|
||||
/// <param name="Low"></param>
|
||||
/// <returns></returns>
|
||||
public static double TwoUInt16ToFloat(ushort High, ushort Low)
|
||||
{
|
||||
int int_32 = (High << 16) | Low;
|
||||
|
||||
return BitConverter.ToSingle(BitConverter.GetBytes(int_32), 0);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 把float分隔成两个int16
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns>低位在前高位在后</returns>
|
||||
public static ushort[] FloatToTwoUInt16(float value)
|
||||
{
|
||||
byte[] bs = BitConverter.GetBytes(value);
|
||||
|
||||
ushort low = BitConverter.ToUInt16(bs, 0);
|
||||
ushort high = BitConverter.ToUInt16(bs, 2);
|
||||
|
||||
return new ushort[2] { low, high };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 把int分隔成两个int16
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns>低位在前高位在后</returns>
|
||||
public static ushort[] Int32ToTwoUInt16(int value)
|
||||
{
|
||||
byte[] bs = BitConverter.GetBytes(value);
|
||||
|
||||
ushort low = BitConverter.ToUInt16(bs, 0);
|
||||
ushort high = BitConverter.ToUInt16(bs, 2);
|
||||
|
||||
return new ushort[2] { low, high };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 把两个Int16的数据合并成一个Int32
|
||||
/// </summary>
|
||||
/// <param name="High"></param>
|
||||
/// <param name="Low"></param>
|
||||
/// <returns></returns>
|
||||
public static int TwoInt16ToInt32(short High, short Low)
|
||||
{
|
||||
return ((ushort)High << 16) | (ushort)Low;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,471 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.ComponentModel.Composition;
|
||||
using PLCCommunication;
|
||||
using System.Net;
|
||||
using PLCCommunication.PLCType.Omron;
|
||||
|
||||
namespace PLC
|
||||
{
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
[Export("OmronCipNet", typeof(PlcReadWriteBase))]
|
||||
public class OmronCipNet : PlcReadWriteBase
|
||||
{
|
||||
private PLCCommunication.PLCType.Omron.OmronCipNet omronCipNet = null;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 初始化
|
||||
/// </summary>
|
||||
/// <param name="pid"></param>
|
||||
/// <param name="pname"></param>
|
||||
/// <param name="iep"></param>
|
||||
/// <param name="timeout"></param>
|
||||
public OmronCipNet(int pid, string pname, IPEndPoint iep, int timeout = 10) :
|
||||
base(pid, pname, iep, timeout)
|
||||
{
|
||||
omronCipNet = new PLCCommunication.PLCType.Omron.OmronCipNet();
|
||||
omronCipNet.IpAddress = iep.Address.ToString();
|
||||
omronCipNet.Port = iep.Port;
|
||||
omronCipNet.Slot = (byte)0;
|
||||
omronCipNet.SocketKeepAliveTime = 60000;
|
||||
omronCipNet.ConnectTimeOut = 1000;
|
||||
omronCipNet.ReceiveTimeOut = 1000;
|
||||
|
||||
IsConnected = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 启动与PLC链接
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override bool Connect(ref string msg)
|
||||
{
|
||||
bool res = false;
|
||||
try
|
||||
{
|
||||
if (!IsConnected)
|
||||
{
|
||||
omronCipNet.ConnectClose();
|
||||
JYResult connect = omronCipNet.ConnectServer();
|
||||
if (connect.IsSuccess)
|
||||
{
|
||||
IsConnected = connect.IsSuccess;
|
||||
|
||||
msg = StringResources.Language.ConnectedSuccess;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
msg = ex.Message;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 断开与PLC链接
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override bool Disconnect()
|
||||
{
|
||||
if (IsConnected)
|
||||
{
|
||||
JYResult connect = omronCipNet.ConnectClose();
|
||||
IsConnected = false;
|
||||
return connect.IsSuccess;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 读取BOOl变量
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public override bool ReadBool(string address)
|
||||
{
|
||||
JYResult<bool[]> result = omronCipNet.ReadBool(address, 1);
|
||||
if (result.IsSuccess)
|
||||
return result.Content[0];
|
||||
else
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取16位整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public override short ReadInt16(string address)
|
||||
{
|
||||
|
||||
short result = 0;
|
||||
try
|
||||
{
|
||||
if (IsConnected)
|
||||
{
|
||||
result = omronCipNet.ReadInt16(address).Content;
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public override Task<JYResult<short>> ReadInt16Async(string address)
|
||||
{
|
||||
JYResult<short> result = null;
|
||||
try
|
||||
{
|
||||
if (IsConnected)
|
||||
{
|
||||
result = omronCipNet.ReadInt16Async(address).Result;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取32位整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public override int ReadInt32(string address)
|
||||
{
|
||||
int result = 0;
|
||||
try
|
||||
{
|
||||
if (IsConnected)
|
||||
{
|
||||
result = omronCipNet.ReadInt32(address).Content;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 异步读取32位整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public override Task<JYResult<int>> ReadInt32Async(string address)
|
||||
{
|
||||
JYResult<int> result = null;
|
||||
try
|
||||
{
|
||||
if (IsConnected)
|
||||
{
|
||||
result = omronCipNet.ReadInt32Async(address).Result;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取Float单精度小数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public override float ReadFloat(string address)
|
||||
{
|
||||
try
|
||||
{
|
||||
JYResult<float> result = omronCipNet.ReadFloat(address);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
return result.Content;
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
return 0.0f;
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取浮点数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public override float[] ReadArrFloat(string address, ushort length)
|
||||
{
|
||||
float[] floats = new float[length];
|
||||
try
|
||||
{
|
||||
JYResult<float[]> result = omronCipNet.ReadFloat(address, length);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
floats = result.Content;
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
return floats;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取PLC数据
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public override T ReadValue<T>(string address, DataType type, ushort length = 0)
|
||||
{
|
||||
object obj = default(object);
|
||||
try
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DataType.Bool:
|
||||
obj = omronCipNet.ReadBool(address);
|
||||
break;
|
||||
case DataType.Short:
|
||||
obj = omronCipNet.ReadInt16(address);
|
||||
break;
|
||||
case DataType.Int:
|
||||
obj = omronCipNet.ReadInt32(address);
|
||||
break;
|
||||
case DataType.Float:
|
||||
obj = omronCipNet.ReadFloat(address);
|
||||
break;
|
||||
case DataType.Double:
|
||||
obj = omronCipNet.ReadDouble(address);
|
||||
break;
|
||||
case DataType.String:
|
||||
obj = omronCipNet.ReadString(address, length);
|
||||
break;
|
||||
case DataType.ArrByte:
|
||||
obj = omronCipNet.Read(address, length);
|
||||
break;
|
||||
case DataType.ArrFloat:
|
||||
obj = omronCipNet.ReadFloat(address, length);
|
||||
//obj = ReadArrFloat(address, length);
|
||||
break;
|
||||
case DataType.ArrShort:
|
||||
obj = omronCipNet.ReadInt16(address, length);
|
||||
break;
|
||||
case DataType.ArrUshort:
|
||||
obj = omronCipNet.ReadUInt16(address, length);
|
||||
break;
|
||||
case DataType.ArrInt:
|
||||
obj = omronCipNet.ReadUInt32(address, length);
|
||||
break;
|
||||
case DataType.ArrUint:
|
||||
obj = omronCipNet.ReadUInt32(address, length);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return (T)obj;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return default(T);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override bool WriteBool(string address, bool value)
|
||||
{
|
||||
bool[] data = new bool[1] { value };
|
||||
JYResult result = omronCipNet.Write(address, value);
|
||||
return result.IsSuccess;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 写入16位整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
///
|
||||
public override bool WriteInt16(string address, short value)
|
||||
{
|
||||
JYResult result = omronCipNet.Write(address, value);
|
||||
return result.IsSuccess;
|
||||
}
|
||||
/// <summary>
|
||||
/// 写入32位整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public override bool WriteInt32(string address, int value)
|
||||
{
|
||||
JYResult result = omronCipNet.Write(address, value);
|
||||
return result.IsSuccess;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 写入浮点数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public override bool WriteFloat(string address, float value)
|
||||
{
|
||||
JYResult result = omronCipNet.Write(address, value);
|
||||
return result.IsSuccess;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 写入PLC数据
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="type"></param>
|
||||
/// <returns></returns>
|
||||
public override JYResult WriteValue(string address, object value, DataType type = DataType.Short)
|
||||
{
|
||||
JYResult result = new JYResult();
|
||||
try
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DataType.Bool:
|
||||
result = omronCipNet.Write(address, Convert.ToBoolean(value));
|
||||
break;
|
||||
case DataType.Short:
|
||||
result = omronCipNet.Write(address, Convert.ToInt16(value));
|
||||
break;
|
||||
case DataType.Int:
|
||||
result = omronCipNet.Write(address, Convert.ToInt32(value));
|
||||
break;
|
||||
case DataType.Float:
|
||||
result = omronCipNet.Write(address, Convert.ToSingle(value));
|
||||
break;
|
||||
case DataType.Double:
|
||||
result = omronCipNet.Write(address, Convert.ToDouble(value));
|
||||
break;
|
||||
case DataType.String:
|
||||
result = omronCipNet.Write(address, value.ToString());
|
||||
break;
|
||||
case DataType.ArrShort:
|
||||
result = omronCipNet.Write(address, value as short[]);
|
||||
//result = omronCipNet.Write(address, new short[] { 0, 1, 1,1 });
|
||||
break;
|
||||
case DataType.ArrByte:
|
||||
result = omronCipNet.Write(address, value as byte[]);
|
||||
break;
|
||||
case DataType.ArrFloat:
|
||||
result = omronCipNet.Write(address, value as float[]);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
result.IsSuccess = false;
|
||||
result.Message = ex.Message;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// 读取16位整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public override short[] ReadArrInt16(string address, ushort length)
|
||||
{
|
||||
short[] floats = new short[length];
|
||||
try
|
||||
{
|
||||
JYResult<short[]> result = omronCipNet.ReadInt16(address, length);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
floats = result.Content;
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
return floats;
|
||||
}
|
||||
|
||||
public override async Task<JYResult<short[]>> ReadArrInt16Async(string address, ushort length)
|
||||
{
|
||||
JYResult<short[]> result = new JYResult<short[]>();
|
||||
try
|
||||
{
|
||||
result = await omronCipNet.ReadInt16Async(address, length);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
result.IsSuccess = false;
|
||||
result.Message = ex.Message;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 异步读取浮点数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public override async Task<JYResult<float[]>> ReadArrFloatAsync(string address, ushort length)
|
||||
{
|
||||
JYResult<float[]> result = new JYResult<float[]>();
|
||||
try
|
||||
{
|
||||
result = await omronCipNet.ReadFloatAsync(address, length);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
result.IsSuccess = false;
|
||||
result.Message = ex.Message;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,511 @@
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using PLCCommunication;
|
||||
using PLCCommunication.PLCType.Omron;
|
||||
using PLCCommunication.Common;
|
||||
using System.ComponentModel.Composition;
|
||||
using System.Net;
|
||||
using PLCCommunication.Common.DataConvert;
|
||||
|
||||
namespace PLC
|
||||
{
|
||||
/// <summary>
|
||||
/// 欧姆龙FinsTCP通讯
|
||||
/// </summary>
|
||||
[Export("OmronFinsTCP", typeof(PlcReadWriteBase))]
|
||||
public class OmronFinsTCP : PlcReadWriteBase
|
||||
{
|
||||
private OmronFinsNet omronFinsNet = null;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 构造函数
|
||||
/// </summary>
|
||||
/// <param name="pid"></param>
|
||||
/// <param name="pname"></param>
|
||||
/// <param name="iep"></param>
|
||||
/// <param name="timeout"></param>
|
||||
public OmronFinsTCP(int pid, string pname, IPEndPoint iep, int timeout = 10) :
|
||||
base(pid, pname, iep, timeout)
|
||||
{
|
||||
omronFinsNet = new OmronFinsNet();
|
||||
omronFinsNet.IpAddress = iep.Address.ToString();
|
||||
omronFinsNet.Port = iep.Port;
|
||||
omronFinsNet.DA2 = 0x00;// PLC单元号,通常为0
|
||||
omronFinsNet.ReadSplits = 999; //读取字长度,最长999,不能超过1000
|
||||
omronFinsNet.ByteTransform.DataFormat = PLCCommunication.Common.DataFormat.CDAB;
|
||||
omronFinsNet.ByteTransform.IsStringReverseByteWord = true;
|
||||
omronFinsNet.ConnectTimeOut = 2000;
|
||||
omronFinsNet.ReceiveTimeOut = 2000;
|
||||
IsConnected = false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 启动与PLC链接
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override bool Connect(ref string msg)
|
||||
{
|
||||
bool res = false;
|
||||
try
|
||||
{
|
||||
if (!IsConnected)
|
||||
{
|
||||
JYResult connect = omronFinsNet.ConnectServer();
|
||||
if (connect.IsSuccess)
|
||||
{
|
||||
IsConnected = connect.IsSuccess;
|
||||
byte num1 = this.omronFinsNet.SA1;
|
||||
byte num2 = this.omronFinsNet.DA1;
|
||||
msg = $"{num1},{num2}";
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
msg = ex.Message;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 断开与PLC链接
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public override bool Disconnect()
|
||||
{
|
||||
if (IsConnected)
|
||||
{
|
||||
JYResult connect = omronFinsNet.ConnectClose();
|
||||
IsConnected = false;
|
||||
return connect.IsSuccess;
|
||||
}
|
||||
else
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 读取BOOl变量
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public override bool ReadBool(string address)
|
||||
{
|
||||
JYResult<bool[]> result = omronFinsNet.ReadBool(address, 1);
|
||||
if (result.IsSuccess)
|
||||
return result.Content[0];
|
||||
else
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取16位整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public override short ReadInt16(string address)
|
||||
{
|
||||
JYResult<short> result = omronFinsNet.ReadInt16(address);
|
||||
if (result.IsSuccess)
|
||||
return result.Content;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public override Task<JYResult<short>> ReadInt16Async(string address)
|
||||
{
|
||||
JYResult<short> result = null;
|
||||
try
|
||||
{
|
||||
if (IsConnected)
|
||||
{
|
||||
result = omronFinsNet.ReadInt16Async(address).Result;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
return Task.FromResult(result);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取16位数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public override short[] ReadArrInt16(string address, ushort length)
|
||||
{
|
||||
JYResult<byte[]> result = omronFinsNet.Read(address, length);
|
||||
if (result.IsSuccess)
|
||||
return ParseShortData(result.Content);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public override async Task<JYResult<short[]>> ReadArrInt16Async(string address, ushort length)
|
||||
{
|
||||
JYResult<byte[]> result = await omronFinsNet.ReadAsync(address, length);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
short[] parsedData = ParseShortData(result.Content);
|
||||
return new JYResult<short[]> { Content = parsedData, IsSuccess = true };
|
||||
}
|
||||
else
|
||||
{
|
||||
return new JYResult<short[]> { IsSuccess = false, Message = result.Message };
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取32位整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public override int ReadInt32(string address)
|
||||
{
|
||||
JYResult<int> result = omronFinsNet.ReadInt32(address);
|
||||
if (result.IsSuccess)
|
||||
return result.Content;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取Float单精度小数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public override float ReadFloat(string address)
|
||||
{
|
||||
JYResult<float> result = omronFinsNet.ReadFloat(address);
|
||||
if (result.IsSuccess)
|
||||
return result.Content;
|
||||
else
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 读取Float数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public override float[] ReadArrFloat(string address, ushort length = 0)
|
||||
{
|
||||
JYResult<byte[]> result = omronFinsNet.Read(address, length);
|
||||
if (result.IsSuccess)
|
||||
return ParseFloatData(result.Content);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 读取有符号16位数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
private short[] ReadArrShort(string address, ushort length = 0)
|
||||
{
|
||||
JYResult<byte[]> result = omronFinsNet.Read(address, length);
|
||||
if (result.IsSuccess)
|
||||
return ParseShortData(result.Content);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
/// <summary>
|
||||
/// 读取无符号16位数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
private ushort[] ReadArrUshort(string address, ushort length = 0)
|
||||
{
|
||||
JYResult<byte[]> result = omronFinsNet.Read(address, length);
|
||||
if (result.IsSuccess)
|
||||
return ParseUshortData(result.Content);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
private int[] ReadArrInt32(string address, ushort length = 0)
|
||||
{
|
||||
JYResult<byte[]> result = omronFinsNet.Read(address, length);
|
||||
if (result.IsSuccess)
|
||||
return ParseInt32Data(result.Content);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <returns></returns>
|
||||
public override async Task<JYResult<int>> ReadInt32Async(string address)
|
||||
{
|
||||
|
||||
JYResult<int> result = await omronFinsNet.ReadInt32Async(address);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
|
||||
return new JYResult<int> { Content = result.Content, IsSuccess = true };
|
||||
}
|
||||
else
|
||||
{
|
||||
return new JYResult<int> { IsSuccess = false, Message = result.Message };
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 异步读取浮点数组
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public override async Task<JYResult<float[]>> ReadArrFloatAsync(string address, ushort length)
|
||||
{
|
||||
JYResult<byte[]> result = await omronFinsNet.ReadAsync(address,length);
|
||||
if (result.IsSuccess)
|
||||
{
|
||||
float[] floats = ParseFloatData(result.Content);
|
||||
return new JYResult<float[]> { Content = floats, IsSuccess = true };
|
||||
}
|
||||
else
|
||||
{
|
||||
return new JYResult<float[]> { IsSuccess = false, Message = result.Message };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private short[] ParseShortData(byte[] content)
|
||||
{
|
||||
int count = content.Length / 2;
|
||||
return Enumerable.Range(0, count)
|
||||
.Select(i => (short)ShortLib.GetShortFromByteArray(content, i * 2))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private ushort[] ParseUshortData(byte[] content)
|
||||
{
|
||||
int count = content.Length / 2;
|
||||
return Enumerable.Range(0, count)
|
||||
.Select(i => (ushort)UShortLib.GetUShortFromByteArray(content, i * 2))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private int[] ParseInt32Data(byte[] content)
|
||||
{
|
||||
int count = content.Length / 2;
|
||||
return Enumerable.Range(0, count)
|
||||
.Select(i => (Int32)IntLib.GetIntFromByteArray(content, i * 4))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private float[] ParseFloatData(byte[] content)
|
||||
{
|
||||
int count = content.Length / 4;
|
||||
return Enumerable.Range(0, count)
|
||||
.Select(i => (float)FloatLib.GetFloatFromByteArray(content, i * 4))
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 读取PLC数据
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="type"></param>
|
||||
/// <param name="length"></param>
|
||||
/// <returns></returns>
|
||||
public override T ReadValue<T>(string address, DataType type, ushort length = 0)
|
||||
{
|
||||
object obj = default(object);
|
||||
try
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DataType.Bool:
|
||||
obj = omronFinsNet.ReadBool(address);
|
||||
break;
|
||||
case DataType.Short:
|
||||
obj = omronFinsNet.ReadInt16(address);
|
||||
break;
|
||||
case DataType.Int:
|
||||
obj = omronFinsNet.ReadInt32(address);
|
||||
break;
|
||||
case DataType.Float:
|
||||
obj = omronFinsNet.ReadFloat(address);
|
||||
break;
|
||||
case DataType.Double:
|
||||
obj = omronFinsNet.ReadDouble(address);
|
||||
break;
|
||||
case DataType.String:
|
||||
obj = omronFinsNet.ReadString(address, length);
|
||||
break;
|
||||
case DataType.ArrByte:
|
||||
obj = omronFinsNet.Read(address, length);
|
||||
break;
|
||||
case DataType.ArrFloat:
|
||||
//obj = ReadArrFloat(address, length);
|
||||
obj = omronFinsNet.ReadFloat(address, length);
|
||||
break;
|
||||
case DataType.ArrShort:
|
||||
obj = omronFinsNet.ReadInt16(address, length);
|
||||
break;
|
||||
case DataType.ArrUshort:
|
||||
obj = omronFinsNet.ReadUInt16(address, length);
|
||||
break;
|
||||
case DataType.ArrInt:
|
||||
obj = omronFinsNet.ReadUInt32(address, length);
|
||||
break;
|
||||
case DataType.ArrUint:
|
||||
obj = omronFinsNet.ReadUInt32(address, length);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return (T)obj;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return default(T);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public override bool WriteBool(string address, bool value)
|
||||
{
|
||||
bool[] data = new bool[1] { value };
|
||||
JYResult result = omronFinsNet.Write(address, value);
|
||||
return result.IsSuccess;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 写入16位整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
///
|
||||
public override bool WriteInt16(string address, short value)
|
||||
{
|
||||
JYResult result = omronFinsNet.Write(address, value);
|
||||
return result.IsSuccess;
|
||||
}
|
||||
/// <summary>
|
||||
/// 写入32位整数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public override bool WriteInt32(string address, int value)
|
||||
{
|
||||
JYResult result = omronFinsNet.Write(address, value);
|
||||
return result.IsSuccess;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 写入浮点数
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
public override bool WriteFloat(string address, float value)
|
||||
{
|
||||
JYResult result = omronFinsNet.Write(address, value);
|
||||
return result.IsSuccess;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 写入PLC数据
|
||||
/// </summary>
|
||||
/// <param name="address"></param>
|
||||
/// <param name="value"></param>
|
||||
/// <param name="type"></param>
|
||||
/// <returns></returns>
|
||||
public override JYResult WriteValue(string address, object value, DataType type = DataType.Short)
|
||||
{
|
||||
JYResult result = new JYResult();
|
||||
try
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case DataType.Bool:
|
||||
result = omronFinsNet.Write(address, Convert.ToBoolean(value));
|
||||
break;
|
||||
case DataType.Short:
|
||||
result = omronFinsNet.Write(address, Convert.ToInt16(value));
|
||||
break;
|
||||
case DataType.Int:
|
||||
result = omronFinsNet.Write(address, Convert.ToInt32(value));
|
||||
break;
|
||||
case DataType.Float:
|
||||
result = omronFinsNet.Write(address, Convert.ToSingle(value));
|
||||
break;
|
||||
case DataType.Double:
|
||||
result = omronFinsNet.Write(address, Convert.ToDouble(value));
|
||||
break;
|
||||
case DataType.String:
|
||||
result = omronFinsNet.Write(address, value.ToString());
|
||||
break;
|
||||
case DataType.ArrShort:
|
||||
result = omronFinsNet.Write(address, value as short[]);
|
||||
break;
|
||||
case DataType.ArrUshort:
|
||||
result = omronFinsNet.Write(address, value as ushort[]);
|
||||
break;
|
||||
case DataType.ArrByte:
|
||||
result = omronFinsNet.Write(address, value as byte[]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
result.IsSuccess = false;
|
||||
result.Message = ex.Message;
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace PLC
|
||||
{
|
||||
/// <summary>
|
||||
/// PLC工厂
|
||||
/// </summary>
|
||||
public class PLCFactory
|
||||
{
|
||||
private static Dictionary<PLCType, Type> plcTypes = new Dictionary<PLCType, Type>
|
||||
{
|
||||
{ PLCType.OmronFinsTCP, typeof(OmronFinsTCP) },
|
||||
{ PLCType.OmronCipNet, typeof(OmronCipNet) },
|
||||
|
||||
|
||||
//{ PLCType.Mitsubishi, typeof(MitsubishiPLC) },
|
||||
// 添加其他 PLC 类型和对应的类...
|
||||
};
|
||||
|
||||
public static PlcReadWriteBase CreatePLC(PLCType type, int pid, string pname, IPEndPoint iep, int timeout = 10)
|
||||
{
|
||||
if (!plcTypes.TryGetValue(type, out Type plcType))
|
||||
{
|
||||
throw new ArgumentException($"不支持的 PLC 类型: {type}");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
return (PlcReadWriteBase)Activator.CreateInstance(plcType, pid, pname, iep, timeout);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception($"创建 PLC 类型时出错 {type}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
public static PlcReadWriteBase CreatePLC(string typeName, int pid, string pname, IPEndPoint iep, int timeout = 10)
|
||||
{
|
||||
if (!Enum.TryParse(typeName, true, out PLCType type))
|
||||
{
|
||||
throw new ArgumentException($"PLC 类型名称无效: {typeName}");
|
||||
}
|
||||
|
||||
return CreatePLC(type, pid, pname, iep, timeout);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace PLC
|
||||
{
|
||||
/// <summary>
|
||||
/// PLC类型
|
||||
/// </summary>
|
||||
public enum PLCType
|
||||
{
|
||||
/// <summary>
|
||||
/// 欧姆龙 Fins协议
|
||||
/// </summary>
|
||||
OmronFinsTCP,
|
||||
/// <summary>
|
||||
/// 欧姆龙 Fins协议
|
||||
/// </summary>
|
||||
OmronCipNet,
|
||||
/// <summary>
|
||||
/// 三菱 MC协议
|
||||
/// </summary>
|
||||
Mitsubishi,
|
||||
/// <summary>
|
||||
/// 基恩士 上位链路协议
|
||||
/// </summary>
|
||||
Keyence,
|
||||
/// <summary>
|
||||
/// 西门子 S7协议
|
||||
/// </summary>
|
||||
Siemens
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// 有关程序集的一般信息由以下
|
||||
// 控制。更改这些特性值可修改
|
||||
// 与程序集关联的信息。
|
||||
[assembly: AssemblyTitle("PLC")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("PLC")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2020")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// 将 ComVisible 设置为 false 会使此程序集中的类型
|
||||
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
|
||||
//请将此类型的 ComVisible 特性设置为 true。
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
|
||||
[assembly: Guid("486aecd0-c2bf-43c5-b7d7-88e565ade4b7")]
|
||||
|
||||
// 程序集的版本信息由下列四个值组成:
|
||||
//
|
||||
// 主版本
|
||||
// 次版本
|
||||
// 生成号
|
||||
// 修订号
|
||||
//
|
||||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
|
||||
//通过使用 "*",如下所示:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.2")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.2")]
|
||||
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Cryptography.Xml" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.1" newVersion="6.0.0.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.4.0" newVersion="4.1.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /></startup></configuration>
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.4.0" newVersion="4.1.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Cryptography.Xml" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.1" newVersion="6.0.0.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /></startup></configuration>
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /></startup></configuration>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,101 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>LogTool</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="P:LogTool.Loger.IsSameDir">
|
||||
<summary>
|
||||
是否在同一目录下记录不同类型的日志
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.SaveLogMsgWithTime(System.String,System.String)">
|
||||
<summary>
|
||||
记录日志
|
||||
</summary>
|
||||
<param name="type">日志类型</param>
|
||||
<param name="msg">日志信息</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogError(System.String,System.String)">
|
||||
<summary>
|
||||
记录错误
|
||||
</summary>
|
||||
<param name="err">错误信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogInfo(System.String,System.String)">
|
||||
<summary>
|
||||
记录信息
|
||||
</summary>
|
||||
<param name="info">信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogWarn(System.String,System.String)">
|
||||
<summary>
|
||||
记录警告
|
||||
</summary>
|
||||
<param name="warn">警告信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogMes(System.String,System.String)">
|
||||
<summary>
|
||||
记录MES日志
|
||||
</summary>
|
||||
<param name="info">mes信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.ShowError(System.String,System.String)">
|
||||
<summary>
|
||||
只弹窗提示错误,不记录日志
|
||||
</summary>
|
||||
<param name="err">提示信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.ShowInfo(System.String,System.String)">
|
||||
<summary>
|
||||
只弹窗提示信息,不记录日志
|
||||
</summary>
|
||||
<param name="info">提示信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.ShowWarn(System.String,System.String)">
|
||||
<summary>
|
||||
只弹窗提示警告,不记录日志
|
||||
</summary>
|
||||
<param name="warn">提示信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogAndShowError(System.String,System.String)">
|
||||
<summary>
|
||||
记录日志并弹窗提示错误
|
||||
(不建议使用,而是应该分开调用两个方法)
|
||||
</summary>
|
||||
<param name="error"></param>
|
||||
<param name="head"></param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogAndShowExp(System.String,System.String)">
|
||||
<summary>
|
||||
记录日志并弹窗提示错误
|
||||
(不建议使用,而是应该分开调用两个方法)
|
||||
</summary>
|
||||
<param name="exp"></param>
|
||||
<param name="head"></param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogAndShowInfo(System.String,System.String)">
|
||||
<summary>
|
||||
记录日志并弹窗提示信息
|
||||
(不建议使用,而是应该分开调用两个方法)
|
||||
</summary>
|
||||
<param name="info"></param>
|
||||
<param name="head"></param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogAndShowWarn(System.String,System.String)">
|
||||
<summary>
|
||||
记录日志并弹窗提示警告
|
||||
(不建议使用,而是应该分开调用两个方法)
|
||||
</summary>
|
||||
<param name="warn"></param>
|
||||
<param name="head"></param>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
@@ -0,0 +1,417 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Microsoft.Bcl.AsyncInterfaces</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1">
|
||||
<summary>Provides the core logic for implementing a manual-reset <see cref="T:System.Threading.Tasks.Sources.IValueTaskSource"/> or <see cref="T:System.Threading.Tasks.Sources.IValueTaskSource`1"/>.</summary>
|
||||
<typeparam name="TResult"></typeparam>
|
||||
</member>
|
||||
<member name="F:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1._continuation">
|
||||
<summary>
|
||||
The callback to invoke when the operation completes if <see cref="M:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.OnCompleted(System.Action{System.Object},System.Object,System.Int16,System.Threading.Tasks.Sources.ValueTaskSourceOnCompletedFlags)"/> was called before the operation completed,
|
||||
or <see cref="F:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCoreShared.s_sentinel"/> if the operation completed before a callback was supplied,
|
||||
or null if a callback hasn't yet been provided and the operation hasn't yet completed.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1._continuationState">
|
||||
<summary>State to pass to <see cref="F:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1._continuation"/>.</summary>
|
||||
</member>
|
||||
<member name="F:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1._executionContext">
|
||||
<summary><see cref="T:System.Threading.ExecutionContext"/> to flow to the callback, or null if no flowing is required.</summary>
|
||||
</member>
|
||||
<member name="F:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1._capturedContext">
|
||||
<summary>
|
||||
A "captured" <see cref="T:System.Threading.SynchronizationContext"/> or <see cref="T:System.Threading.Tasks.TaskScheduler"/> with which to invoke the callback,
|
||||
or null if no special context is required.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1._completed">
|
||||
<summary>Whether the current operation has completed.</summary>
|
||||
</member>
|
||||
<member name="F:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1._result">
|
||||
<summary>The result with which the operation succeeded, or the default value if it hasn't yet completed or failed.</summary>
|
||||
</member>
|
||||
<member name="F:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1._error">
|
||||
<summary>The exception with which the operation failed, or null if it hasn't yet completed or completed successfully.</summary>
|
||||
</member>
|
||||
<member name="F:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1._version">
|
||||
<summary>The current version of this value, used to help prevent misuse.</summary>
|
||||
</member>
|
||||
<member name="P:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.RunContinuationsAsynchronously">
|
||||
<summary>Gets or sets whether to force continuations to run asynchronously.</summary>
|
||||
<remarks>Continuations may run asynchronously if this is false, but they'll never run synchronously if this is true.</remarks>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.Reset">
|
||||
<summary>Resets to prepare for the next operation.</summary>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.SetResult(`0)">
|
||||
<summary>Completes with a successful result.</summary>
|
||||
<param name="result">The result.</param>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.SetException(System.Exception)">
|
||||
<summary>Complets with an error.</summary>
|
||||
<param name="error"></param>
|
||||
</member>
|
||||
<member name="P:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.Version">
|
||||
<summary>Gets the operation version.</summary>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.GetStatus(System.Int16)">
|
||||
<summary>Gets the status of the operation.</summary>
|
||||
<param name="token">Opaque value that was provided to the <see cref="T:System.Threading.Tasks.ValueTask"/>'s constructor.</param>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.GetResult(System.Int16)">
|
||||
<summary>Gets the result of the operation.</summary>
|
||||
<param name="token">Opaque value that was provided to the <see cref="T:System.Threading.Tasks.ValueTask"/>'s constructor.</param>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.OnCompleted(System.Action{System.Object},System.Object,System.Int16,System.Threading.Tasks.Sources.ValueTaskSourceOnCompletedFlags)">
|
||||
<summary>Schedules the continuation action for this operation.</summary>
|
||||
<param name="continuation">The continuation to invoke when the operation has completed.</param>
|
||||
<param name="state">The state object to pass to <paramref name="continuation"/> when it's invoked.</param>
|
||||
<param name="token">Opaque value that was provided to the <see cref="T:System.Threading.Tasks.ValueTask"/>'s constructor.</param>
|
||||
<param name="flags">The flags describing the behavior of the continuation.</param>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.ValidateToken(System.Int16)">
|
||||
<summary>Ensures that the specified token matches the current version.</summary>
|
||||
<param name="token">The token supplied by <see cref="T:System.Threading.Tasks.ValueTask"/>.</param>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.SignalCompletion">
|
||||
<summary>Signals that the operation has completed. Invoked after the result or error has been set.</summary>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1.InvokeContinuation">
|
||||
<summary>
|
||||
Invokes the continuation with the appropriate captured context / scheduler.
|
||||
This assumes that if <see cref="F:System.Threading.Tasks.Sources.ManualResetValueTaskSourceCore`1._executionContext"/> is not null we're already
|
||||
running within that <see cref="T:System.Threading.ExecutionContext"/>.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:System.Threading.Tasks.TaskAsyncEnumerableExtensions">
|
||||
<summary>Provides a set of static methods for configuring <see cref="T:System.Threading.Tasks.Task"/>-related behaviors on asynchronous enumerables and disposables.</summary>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.TaskAsyncEnumerableExtensions.ConfigureAwait(System.IAsyncDisposable,System.Boolean)">
|
||||
<summary>Configures how awaits on the tasks returned from an async disposable will be performed.</summary>
|
||||
<param name="source">The source async disposable.</param>
|
||||
<param name="continueOnCapturedContext">Whether to capture and marshal back to the current context.</param>
|
||||
<returns>The configured async disposable.</returns>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.TaskAsyncEnumerableExtensions.ConfigureAwait``1(System.Collections.Generic.IAsyncEnumerable{``0},System.Boolean)">
|
||||
<summary>Configures how awaits on the tasks returned from an async iteration will be performed.</summary>
|
||||
<typeparam name="T">The type of the objects being iterated.</typeparam>
|
||||
<param name="source">The source enumerable being iterated.</param>
|
||||
<param name="continueOnCapturedContext">Whether to capture and marshal back to the current context.</param>
|
||||
<returns>The configured enumerable.</returns>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.TaskAsyncEnumerableExtensions.WithCancellation``1(System.Collections.Generic.IAsyncEnumerable{``0},System.Threading.CancellationToken)">
|
||||
<summary>Sets the <see cref="T:System.Threading.CancellationToken"/> to be passed to <see cref="M:System.Collections.Generic.IAsyncEnumerable`1.GetAsyncEnumerator(System.Threading.CancellationToken)"/> when iterating.</summary>
|
||||
<typeparam name="T">The type of the objects being iterated.</typeparam>
|
||||
<param name="source">The source enumerable being iterated.</param>
|
||||
<param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to use.</param>
|
||||
<returns>The configured enumerable.</returns>
|
||||
</member>
|
||||
<member name="T:System.Runtime.CompilerServices.AsyncIteratorMethodBuilder">
|
||||
<summary>Represents a builder for asynchronous iterators.</summary>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.Create">
|
||||
<summary>Creates an instance of the <see cref="T:System.Runtime.CompilerServices.AsyncIteratorMethodBuilder"/> struct.</summary>
|
||||
<returns>The initialized instance.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.MoveNext``1(``0@)">
|
||||
<summary>Invokes <see cref="M:System.Runtime.CompilerServices.IAsyncStateMachine.MoveNext"/> on the state machine while guarding the <see cref="T:System.Threading.ExecutionContext"/>.</summary>
|
||||
<typeparam name="TStateMachine">The type of the state machine.</typeparam>
|
||||
<param name="stateMachine">The state machine instance, passed by reference.</param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.AwaitOnCompleted``2(``0@,``1@)">
|
||||
<summary>Schedules the state machine to proceed to the next action when the specified awaiter completes.</summary>
|
||||
<typeparam name="TAwaiter">The type of the awaiter.</typeparam>
|
||||
<typeparam name="TStateMachine">The type of the state machine.</typeparam>
|
||||
<param name="awaiter">The awaiter.</param>
|
||||
<param name="stateMachine">The state machine.</param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.AwaitUnsafeOnCompleted``2(``0@,``1@)">
|
||||
<summary>Schedules the state machine to proceed to the next action when the specified awaiter completes.</summary>
|
||||
<typeparam name="TAwaiter">The type of the awaiter.</typeparam>
|
||||
<typeparam name="TStateMachine">The type of the state machine.</typeparam>
|
||||
<param name="awaiter">The awaiter.</param>
|
||||
<param name="stateMachine">The state machine.</param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.Complete">
|
||||
<summary>Marks iteration as being completed, whether successfully or otherwise.</summary>
|
||||
</member>
|
||||
<member name="P:System.Runtime.CompilerServices.AsyncIteratorMethodBuilder.ObjectIdForDebugger">
|
||||
<summary>Gets an object that may be used to uniquely identify this builder to the debugger.</summary>
|
||||
</member>
|
||||
<member name="T:System.Runtime.CompilerServices.AsyncIteratorStateMachineAttribute">
|
||||
<summary>Indicates whether a method is an asynchronous iterator.</summary>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncIteratorStateMachineAttribute.#ctor(System.Type)">
|
||||
<summary>Initializes a new instance of the <see cref="T:System.Runtime.CompilerServices.AsyncIteratorStateMachineAttribute"/> class.</summary>
|
||||
<param name="stateMachineType">The type object for the underlying state machine type that's used to implement a state machine method.</param>
|
||||
</member>
|
||||
<member name="T:System.Runtime.CompilerServices.ConfiguredAsyncDisposable">
|
||||
<summary>Provides a type that can be used to configure how awaits on an <see cref="T:System.IAsyncDisposable"/> are performed.</summary>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ConfiguredAsyncDisposable.DisposeAsync">
|
||||
<summary>Asynchronously releases the unmanaged resources used by the <see cref="T:System.Runtime.CompilerServices.ConfiguredAsyncDisposable" />.</summary>
|
||||
<returns>A task that represents the asynchronous dispose operation.</returns>
|
||||
</member>
|
||||
<member name="T:System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1">
|
||||
<summary>Provides an awaitable async enumerable that enables cancelable iteration and configured awaits.</summary>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.ConfigureAwait(System.Boolean)">
|
||||
<summary>Configures how awaits on the tasks returned from an async iteration will be performed.</summary>
|
||||
<param name="continueOnCapturedContext">Whether to capture and marshal back to the current context.</param>
|
||||
<returns>The configured enumerable.</returns>
|
||||
<remarks>This will replace any previous value set by <see cref="M:System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.ConfigureAwait(System.Boolean)"/> for this iteration.</remarks>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.WithCancellation(System.Threading.CancellationToken)">
|
||||
<summary>Sets the <see cref="T:System.Threading.CancellationToken"/> to be passed to <see cref="M:System.Collections.Generic.IAsyncEnumerable`1.GetAsyncEnumerator(System.Threading.CancellationToken)"/> when iterating.</summary>
|
||||
<param name="cancellationToken">The <see cref="T:System.Threading.CancellationToken"/> to use.</param>
|
||||
<returns>The configured enumerable.</returns>
|
||||
<remarks>This will replace any previous <see cref="T:System.Threading.CancellationToken"/> set by <see cref="M:System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.WithCancellation(System.Threading.CancellationToken)"/> for this iteration.</remarks>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.GetAsyncEnumerator">
|
||||
<summary>Returns an enumerator that iterates asynchronously through collections that enables cancelable iteration and configured awaits.</summary>
|
||||
<returns>An enumerator for the <see cref="T:System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1" /> class.</returns>
|
||||
</member>
|
||||
<member name="T:System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.Enumerator">
|
||||
<summary>Provides an awaitable async enumerator that enables cancelable iteration and configured awaits.</summary>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.Enumerator.MoveNextAsync">
|
||||
<summary>Advances the enumerator asynchronously to the next element of the collection.</summary>
|
||||
<returns>
|
||||
A <see cref="T:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1"/> that will complete with a result of <c>true</c>
|
||||
if the enumerator was successfully advanced to the next element, or <c>false</c> if the enumerator has
|
||||
passed the end of the collection.
|
||||
</returns>
|
||||
</member>
|
||||
<member name="P:System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.Enumerator.Current">
|
||||
<summary>Gets the element in the collection at the current position of the enumerator.</summary>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ConfiguredCancelableAsyncEnumerable`1.Enumerator.DisposeAsync">
|
||||
<summary>
|
||||
Performs application-defined tasks associated with freeing, releasing, or
|
||||
resetting unmanaged resources asynchronously.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:System.Runtime.CompilerServices.EnumeratorCancellationAttribute">
|
||||
<summary>Allows users of async-enumerable methods to mark the parameter that should receive the cancellation token value from <see cref="M:System.Collections.Generic.IAsyncEnumerable`1.GetAsyncEnumerator(System.Threading.CancellationToken)" />.</summary>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.EnumeratorCancellationAttribute.#ctor">
|
||||
<summary>Initializes a new instance of the <see cref="T:System.Runtime.CompilerServices.EnumeratorCancellationAttribute" /> class.</summary>
|
||||
</member>
|
||||
<member name="T:System.Runtime.InteropServices.LibraryImportAttribute">
|
||||
<summary>
|
||||
Attribute used to indicate a source generator should create a function for marshalling
|
||||
arguments instead of relying on the runtime to generate an equivalent marshalling function at run-time.
|
||||
</summary>
|
||||
<remarks>
|
||||
This attribute is meaningless if the source generator associated with it is not enabled.
|
||||
The current built-in source generator only supports C# and only supplies an implementation when
|
||||
applied to static, partial, non-generic methods.
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="M:System.Runtime.InteropServices.LibraryImportAttribute.#ctor(System.String)">
|
||||
<summary>
|
||||
Initializes a new instance of the <see cref="T:System.Runtime.InteropServices.LibraryImportAttribute"/>.
|
||||
</summary>
|
||||
<param name="libraryName">Name of the library containing the import.</param>
|
||||
</member>
|
||||
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.LibraryName">
|
||||
<summary>
|
||||
Gets the name of the library containing the import.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.EntryPoint">
|
||||
<summary>
|
||||
Gets or sets the name of the entry point to be called.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshalling">
|
||||
<summary>
|
||||
Gets or sets how to marshal string arguments to the method.
|
||||
</summary>
|
||||
<remarks>
|
||||
If this field is set to a value other than <see cref="F:System.Runtime.InteropServices.StringMarshalling.Custom" />,
|
||||
<see cref="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshallingCustomType" /> must not be specified.
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshallingCustomType">
|
||||
<summary>
|
||||
Gets or sets the <see cref="T:System.Type"/> used to control how string arguments to the method are marshalled.
|
||||
</summary>
|
||||
<remarks>
|
||||
If this field is specified, <see cref="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshalling" /> must not be specified
|
||||
or must be set to <see cref="F:System.Runtime.InteropServices.StringMarshalling.Custom" />.
|
||||
</remarks>
|
||||
</member>
|
||||
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.SetLastError">
|
||||
<summary>
|
||||
Gets or sets whether the callee sets an error (SetLastError on Windows or errno
|
||||
on other platforms) before returning from the attributed method.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:System.Runtime.InteropServices.StringMarshalling">
|
||||
<summary>
|
||||
Specifies how strings should be marshalled for generated p/invokes
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:System.Runtime.InteropServices.StringMarshalling.Custom">
|
||||
<summary>
|
||||
Indicates the user is supplying a specific marshaller in <see cref="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshallingCustomType"/>.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:System.Runtime.InteropServices.StringMarshalling.Utf8">
|
||||
<summary>
|
||||
Use the platform-provided UTF-8 marshaller.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="F:System.Runtime.InteropServices.StringMarshalling.Utf16">
|
||||
<summary>
|
||||
Use the platform-provided UTF-16 marshaller.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:System.Collections.Generic.IAsyncEnumerable`1">
|
||||
<summary>Exposes an enumerator that provides asynchronous iteration over values of a specified type.</summary>
|
||||
<typeparam name="T">The type of values to enumerate.</typeparam>
|
||||
</member>
|
||||
<member name="M:System.Collections.Generic.IAsyncEnumerable`1.GetAsyncEnumerator(System.Threading.CancellationToken)">
|
||||
<summary>Returns an enumerator that iterates asynchronously through the collection.</summary>
|
||||
<param name="cancellationToken">A <see cref="T:System.Threading.CancellationToken"/> that may be used to cancel the asynchronous iteration.</param>
|
||||
<returns>An enumerator that can be used to iterate asynchronously through the collection.</returns>
|
||||
</member>
|
||||
<member name="T:System.Collections.Generic.IAsyncEnumerator`1">
|
||||
<summary>Supports a simple asynchronous iteration over a generic collection.</summary>
|
||||
<typeparam name="T">The type of objects to enumerate.</typeparam>
|
||||
</member>
|
||||
<member name="M:System.Collections.Generic.IAsyncEnumerator`1.MoveNextAsync">
|
||||
<summary>Advances the enumerator asynchronously to the next element of the collection.</summary>
|
||||
<returns>
|
||||
A <see cref="T:System.Threading.Tasks.ValueTask`1"/> that will complete with a result of <c>true</c> if the enumerator
|
||||
was successfully advanced to the next element, or <c>false</c> if the enumerator has passed the end
|
||||
of the collection.
|
||||
</returns>
|
||||
</member>
|
||||
<member name="P:System.Collections.Generic.IAsyncEnumerator`1.Current">
|
||||
<summary>Gets the element in the collection at the current position of the enumerator.</summary>
|
||||
</member>
|
||||
<member name="T:System.IAsyncDisposable">
|
||||
<summary>Provides a mechanism for releasing unmanaged resources asynchronously.</summary>
|
||||
</member>
|
||||
<member name="M:System.IAsyncDisposable.DisposeAsync">
|
||||
<summary>
|
||||
Performs application-defined tasks associated with freeing, releasing, or
|
||||
resetting unmanaged resources asynchronously.
|
||||
</summary>
|
||||
</member>
|
||||
<member name="T:System.Diagnostics.CodeAnalysis.AllowNullAttribute">
|
||||
<summary>Specifies that null is allowed as an input even if the corresponding type disallows it.</summary>
|
||||
</member>
|
||||
<member name="T:System.Diagnostics.CodeAnalysis.DisallowNullAttribute">
|
||||
<summary>Specifies that null is disallowed as an input even if the corresponding type allows it.</summary>
|
||||
</member>
|
||||
<member name="T:System.Diagnostics.CodeAnalysis.MaybeNullAttribute">
|
||||
<summary>Specifies that an output may be null even if the corresponding type disallows it.</summary>
|
||||
</member>
|
||||
<member name="T:System.Diagnostics.CodeAnalysis.NotNullAttribute">
|
||||
<summary>Specifies that an output will not be null even if the corresponding type allows it. Specifies that an input argument was not null when the call returns.</summary>
|
||||
</member>
|
||||
<member name="T:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute">
|
||||
<summary>Specifies that when a method returns <see cref="P:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.ReturnValue"/>, the parameter may be null even if the corresponding type disallows it.</summary>
|
||||
</member>
|
||||
<member name="M:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.#ctor(System.Boolean)">
|
||||
<summary>Initializes the attribute with the specified return value condition.</summary>
|
||||
<param name="returnValue">
|
||||
The return value condition. If the method returns this value, the associated parameter may be null.
|
||||
</param>
|
||||
</member>
|
||||
<member name="P:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.ReturnValue">
|
||||
<summary>Gets the return value condition.</summary>
|
||||
</member>
|
||||
<member name="T:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute">
|
||||
<summary>Specifies that when a method returns <see cref="P:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.ReturnValue"/>, the parameter will not be null even if the corresponding type allows it.</summary>
|
||||
</member>
|
||||
<member name="M:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.#ctor(System.Boolean)">
|
||||
<summary>Initializes the attribute with the specified return value condition.</summary>
|
||||
<param name="returnValue">
|
||||
The return value condition. If the method returns this value, the associated parameter will not be null.
|
||||
</param>
|
||||
</member>
|
||||
<member name="P:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.ReturnValue">
|
||||
<summary>Gets the return value condition.</summary>
|
||||
</member>
|
||||
<member name="T:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute">
|
||||
<summary>Specifies that the output will be non-null if the named parameter is non-null.</summary>
|
||||
</member>
|
||||
<member name="M:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute.#ctor(System.String)">
|
||||
<summary>Initializes the attribute with the associated parameter name.</summary>
|
||||
<param name="parameterName">
|
||||
The associated parameter name. The output will be non-null if the argument to the parameter specified is non-null.
|
||||
</param>
|
||||
</member>
|
||||
<member name="P:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute.ParameterName">
|
||||
<summary>Gets the associated parameter name.</summary>
|
||||
</member>
|
||||
<member name="T:System.Diagnostics.CodeAnalysis.DoesNotReturnAttribute">
|
||||
<summary>Applied to a method that will never return under any circumstance.</summary>
|
||||
</member>
|
||||
<member name="T:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute">
|
||||
<summary>Specifies that the method will not return if the associated Boolean parameter is passed the specified value.</summary>
|
||||
</member>
|
||||
<member name="M:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute.#ctor(System.Boolean)">
|
||||
<summary>Initializes the attribute with the specified parameter value.</summary>
|
||||
<param name="parameterValue">
|
||||
The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to
|
||||
the associated parameter matches this value.
|
||||
</param>
|
||||
</member>
|
||||
<member name="P:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute.ParameterValue">
|
||||
<summary>Gets the condition parameter value.</summary>
|
||||
</member>
|
||||
<member name="T:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute">
|
||||
<summary>Specifies that the method or property will ensure that the listed field and property members have not-null values.</summary>
|
||||
</member>
|
||||
<member name="M:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute.#ctor(System.String)">
|
||||
<summary>Initializes the attribute with a field or property member.</summary>
|
||||
<param name="member">
|
||||
The field or property member that is promised to be not-null.
|
||||
</param>
|
||||
</member>
|
||||
<member name="M:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute.#ctor(System.String[])">
|
||||
<summary>Initializes the attribute with the list of field and property members.</summary>
|
||||
<param name="members">
|
||||
The list of field and property members that are promised to be not-null.
|
||||
</param>
|
||||
</member>
|
||||
<member name="P:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute.Members">
|
||||
<summary>Gets field or property member names.</summary>
|
||||
</member>
|
||||
<member name="T:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute">
|
||||
<summary>Specifies that the method or property will ensure that the listed field and property members have not-null values when returning with the specified return value condition.</summary>
|
||||
</member>
|
||||
<member name="M:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.#ctor(System.Boolean,System.String)">
|
||||
<summary>Initializes the attribute with the specified return value condition and a field or property member.</summary>
|
||||
<param name="returnValue">
|
||||
The return value condition. If the method returns this value, the associated field or property member will not be null.
|
||||
</param>
|
||||
<param name="member">
|
||||
The field or property member that is promised to be not-null.
|
||||
</param>
|
||||
</member>
|
||||
<member name="M:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.#ctor(System.Boolean,System.String[])">
|
||||
<summary>Initializes the attribute with the specified return value condition and list of field and property members.</summary>
|
||||
<param name="returnValue">
|
||||
The return value condition. If the method returns this value, the associated field and property members will not be null.
|
||||
</param>
|
||||
<param name="members">
|
||||
The list of field and property members that are promised to be not-null.
|
||||
</param>
|
||||
</member>
|
||||
<member name="P:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.ReturnValue">
|
||||
<summary>Gets the return value condition.</summary>
|
||||
</member>
|
||||
<member name="P:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.Members">
|
||||
<summary>Gets field or property member names.</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>Microsoft.Bcl.HashCode</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="M:System.Numerics.BitOperations.RotateLeft(System.UInt32,System.Int32)">
|
||||
<summary>
|
||||
Rotates the specified value left by the specified number of bits.
|
||||
Similar in behavior to the x86 instruction ROL.
|
||||
</summary>
|
||||
<param name="value">The value to rotate.</param>
|
||||
<param name="offset">The number of bits to rotate by.
|
||||
Any value outside the range [0..31] is treated as congruent mod 32.</param>
|
||||
<returns>The rotated value.</returns>
|
||||
</member>
|
||||
<member name="M:System.Numerics.BitOperations.RotateLeft(System.UInt64,System.Int32)">
|
||||
<summary>
|
||||
Rotates the specified value left by the specified number of bits.
|
||||
Similar in behavior to the x86 instruction ROL.
|
||||
</summary>
|
||||
<param name="value">The value to rotate.</param>
|
||||
<param name="offset">The number of bits to rotate by.
|
||||
Any value outside the range [0..63] is treated as congruent mod 64.</param>
|
||||
<returns>The rotated value.</returns>
|
||||
</member>
|
||||
<member name="P:System.SR.HashCode_EqualityNotSupported">
|
||||
<summary>HashCode is a mutable struct and should not be compared with other HashCodes.</summary>
|
||||
</member>
|
||||
<member name="P:System.SR.HashCode_HashCodeNotSupported">
|
||||
<summary>HashCode is a mutable struct and should not be compared with other HashCodes. Use ToHashCode to retrieve the computed hash code.</summary>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.2" newVersion="4.0.1.2" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Text.Encoding.CodePages" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Security.Cryptography.Xml" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.1" newVersion="6.0.0.1" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.1.4.0" newVersion="4.1.4.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-4.0.3.0" newVersion="4.0.3.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-13.0.0.0" newVersion="13.0.0.0" />
|
||||
</dependentAssembly>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /></startup></configuration>
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><doc>
|
||||
<assembly>
|
||||
<name>System.Buffers</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:System.Buffers.ArrayPool`1">
|
||||
<summary>Provides a resource pool that enables reusing instances of type <see cref="T[]"></see>.</summary>
|
||||
<typeparam name="T">The type of the objects that are in the resource pool.</typeparam>
|
||||
</member>
|
||||
<member name="M:System.Buffers.ArrayPool`1.#ctor">
|
||||
<summary>Initializes a new instance of the <see cref="T:System.Buffers.ArrayPool`1"></see> class.</summary>
|
||||
</member>
|
||||
<member name="M:System.Buffers.ArrayPool`1.Create">
|
||||
<summary>Creates a new instance of the <see cref="T:System.Buffers.ArrayPool`1"></see> class.</summary>
|
||||
<returns>A new instance of the <see cref="System.Buffers.ArrayPool`1"></see> class.</returns>
|
||||
</member>
|
||||
<member name="M:System.Buffers.ArrayPool`1.Create(System.Int32,System.Int32)">
|
||||
<summary>Creates a new instance of the <see cref="T:System.Buffers.ArrayPool`1"></see> class using the specifed configuration.</summary>
|
||||
<param name="maxArrayLength">The maximum length of an array instance that may be stored in the pool.</param>
|
||||
<param name="maxArraysPerBucket">The maximum number of array instances that may be stored in each bucket in the pool. The pool groups arrays of similar lengths into buckets for faster access.</param>
|
||||
<returns>A new instance of the <see cref="System.Buffers.ArrayPool`1"></see> class with the specified configuration.</returns>
|
||||
</member>
|
||||
<member name="M:System.Buffers.ArrayPool`1.Rent(System.Int32)">
|
||||
<summary>Retrieves a buffer that is at least the requested length.</summary>
|
||||
<param name="minimumLength">The minimum length of the array.</param>
|
||||
<returns>An array of type <see cref="T[]"></see> that is at least <paramref name="minimumLength">minimumLength</paramref> in length.</returns>
|
||||
</member>
|
||||
<member name="M:System.Buffers.ArrayPool`1.Return(`0[],System.Boolean)">
|
||||
<summary>Returns an array to the pool that was previously obtained using the <see cref="M:System.Buffers.ArrayPool`1.Rent(System.Int32)"></see> method on the same <see cref="T:System.Buffers.ArrayPool`1"></see> instance.</summary>
|
||||
<param name="array">A buffer to return to the pool that was previously obtained using the <see cref="M:System.Buffers.ArrayPool`1.Rent(System.Int32)"></see> method.</param>
|
||||
<param name="clearArray">Indicates whether the contents of the buffer should be cleared before reuse. If <paramref name="clearArray">clearArray</paramref> is set to true, and if the pool will store the buffer to enable subsequent reuse, the <see cref="M:System.Buffers.ArrayPool`1.Return(`0[],System.Boolean)"></see> method will clear the <paramref name="array">array</paramref> of its contents so that a subsequent caller using the <see cref="M:System.Buffers.ArrayPool`1.Rent(System.Int32)"></see> method will not see the content of the previous caller. If <paramref name="clearArray">clearArray</paramref> is set to false or if the pool will release the buffer, the array&#39;s contents are left unchanged.</param>
|
||||
</member>
|
||||
<member name="P:System.Buffers.ArrayPool`1.Shared">
|
||||
<summary>Gets a shared <see cref="T:System.Buffers.ArrayPool`1"></see> instance.</summary>
|
||||
<returns>A shared <see cref="System.Buffers.ArrayPool`1"></see> instance.</returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
@@ -0,0 +1,355 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><doc>
|
||||
<assembly>
|
||||
<name>System.Memory</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:System.Span`1">
|
||||
<typeparam name="T"></typeparam>
|
||||
</member>
|
||||
<member name="M:System.Span`1.#ctor(`0[])">
|
||||
<param name="array"></param>
|
||||
</member>
|
||||
<member name="M:System.Span`1.#ctor(System.Void*,System.Int32)">
|
||||
<param name="pointer"></param>
|
||||
<param name="length"></param>
|
||||
</member>
|
||||
<member name="M:System.Span`1.#ctor(`0[],System.Int32)">
|
||||
<param name="array"></param>
|
||||
<param name="start"></param>
|
||||
</member>
|
||||
<member name="M:System.Span`1.#ctor(`0[],System.Int32,System.Int32)">
|
||||
<param name="array"></param>
|
||||
<param name="start"></param>
|
||||
<param name="length"></param>
|
||||
</member>
|
||||
<member name="M:System.Span`1.Clear">
|
||||
|
||||
</member>
|
||||
<member name="M:System.Span`1.CopyTo(System.Span{`0})">
|
||||
<param name="destination"></param>
|
||||
</member>
|
||||
<member name="M:System.Span`1.DangerousCreate(System.Object,`0@,System.Int32)">
|
||||
<param name="obj"></param>
|
||||
<param name="objectData"></param>
|
||||
<param name="length"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Span`1.DangerousGetPinnableReference">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:System.Span`1.Empty">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Span`1.Equals(System.Object)">
|
||||
<param name="obj"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Span`1.Fill(`0)">
|
||||
<param name="value"></param>
|
||||
</member>
|
||||
<member name="M:System.Span`1.GetHashCode">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:System.Span`1.IsEmpty">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:System.Span`1.Item(System.Int32)">
|
||||
<param name="index"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:System.Span`1.Length">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Span`1.op_Equality(System.Span{`0},System.Span{`0})">
|
||||
<param name="left"></param>
|
||||
<param name="right"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Span`1.op_Implicit(System.ArraySegment{T})~System.Span{T}">
|
||||
<param name="arraySegment"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Span`1.op_Implicit(System.Span{T})~System.ReadOnlySpan{T}">
|
||||
<param name="span"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Span`1.op_Implicit(T[])~System.Span{T}">
|
||||
<param name="array"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Span`1.op_Inequality(System.Span{`0},System.Span{`0})">
|
||||
<param name="left"></param>
|
||||
<param name="right"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Span`1.Slice(System.Int32)">
|
||||
<param name="start"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Span`1.Slice(System.Int32,System.Int32)">
|
||||
<param name="start"></param>
|
||||
<param name="length"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Span`1.ToArray">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Span`1.TryCopyTo(System.Span{`0})">
|
||||
<param name="destination"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:System.SpanExtensions">
|
||||
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.AsBytes``1(System.ReadOnlySpan{``0})">
|
||||
<param name="source"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.AsBytes``1(System.Span{``0})">
|
||||
<param name="source"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.AsSpan(System.String)">
|
||||
<param name="text"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.AsSpan``1(System.ArraySegment{``0})">
|
||||
<param name="arraySegment"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.AsSpan``1(``0[])">
|
||||
<param name="array"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.CopyTo``1(``0[],System.Span{``0})">
|
||||
<param name="array"></param>
|
||||
<param name="destination"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOf(System.Span{System.Byte},System.ReadOnlySpan{System.Byte})">
|
||||
<param name="span"></param>
|
||||
<param name="value"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOf(System.Span{System.Byte},System.Byte)">
|
||||
<param name="span"></param>
|
||||
<param name="value"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOf(System.ReadOnlySpan{System.Byte},System.Byte)">
|
||||
<param name="span"></param>
|
||||
<param name="value"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOf(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
|
||||
<param name="span"></param>
|
||||
<param name="value"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOf``1(System.ReadOnlySpan{``0},System.ReadOnlySpan{``0})">
|
||||
<param name="span"></param>
|
||||
<param name="value"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOf``1(System.ReadOnlySpan{``0},``0)">
|
||||
<param name="span"></param>
|
||||
<param name="value"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOf``1(System.Span{``0},System.ReadOnlySpan{``0})">
|
||||
<param name="span"></param>
|
||||
<param name="value"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOf``1(System.Span{``0},``0)">
|
||||
<param name="span"></param>
|
||||
<param name="value"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOfAny(System.ReadOnlySpan{System.Byte},System.Byte,System.Byte,System.Byte)">
|
||||
<param name="span"></param>
|
||||
<param name="value0"></param>
|
||||
<param name="value1"></param>
|
||||
<param name="value2"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOfAny(System.Span{System.Byte},System.Byte,System.Byte,System.Byte)">
|
||||
<param name="span"></param>
|
||||
<param name="value0"></param>
|
||||
<param name="value1"></param>
|
||||
<param name="value2"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOfAny(System.Span{System.Byte},System.Byte,System.Byte)">
|
||||
<param name="span"></param>
|
||||
<param name="value0"></param>
|
||||
<param name="value1"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOfAny(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
|
||||
<param name="span"></param>
|
||||
<param name="values"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOfAny(System.Span{System.Byte},System.ReadOnlySpan{System.Byte})">
|
||||
<param name="span"></param>
|
||||
<param name="values"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.IndexOfAny(System.ReadOnlySpan{System.Byte},System.Byte,System.Byte)">
|
||||
<param name="span"></param>
|
||||
<param name="value0"></param>
|
||||
<param name="value1"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.NonPortableCast``2(System.ReadOnlySpan{``0})">
|
||||
<param name="source"></param>
|
||||
<typeparam name="TFrom"></typeparam>
|
||||
<typeparam name="TTo"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.NonPortableCast``2(System.Span{``0})">
|
||||
<param name="source"></param>
|
||||
<typeparam name="TFrom"></typeparam>
|
||||
<typeparam name="TTo"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.SequenceEqual(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
|
||||
<param name="first"></param>
|
||||
<param name="second"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.SequenceEqual(System.Span{System.Byte},System.ReadOnlySpan{System.Byte})">
|
||||
<param name="first"></param>
|
||||
<param name="second"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.SequenceEqual``1(System.ReadOnlySpan{``0},System.ReadOnlySpan{``0})">
|
||||
<param name="first"></param>
|
||||
<param name="second"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.SequenceEqual``1(System.Span{``0},System.ReadOnlySpan{``0})">
|
||||
<param name="first"></param>
|
||||
<param name="second"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.StartsWith(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
|
||||
<param name="span"></param>
|
||||
<param name="value"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.StartsWith(System.Span{System.Byte},System.ReadOnlySpan{System.Byte})">
|
||||
<param name="span"></param>
|
||||
<param name="value"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.StartsWith``1(System.ReadOnlySpan{``0},System.ReadOnlySpan{``0})">
|
||||
<param name="span"></param>
|
||||
<param name="value"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.SpanExtensions.StartsWith``1(System.Span{``0},System.ReadOnlySpan{``0})">
|
||||
<param name="span"></param>
|
||||
<param name="value"></param>
|
||||
<typeparam name="T"></typeparam>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:System.ReadOnlySpan`1">
|
||||
<typeparam name="T"></typeparam>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.#ctor(`0[])">
|
||||
<param name="array"></param>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.#ctor(System.Void*,System.Int32)">
|
||||
<param name="pointer"></param>
|
||||
<param name="length"></param>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.#ctor(`0[],System.Int32)">
|
||||
<param name="array"></param>
|
||||
<param name="start"></param>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.#ctor(`0[],System.Int32,System.Int32)">
|
||||
<param name="array"></param>
|
||||
<param name="start"></param>
|
||||
<param name="length"></param>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.CopyTo(System.Span{`0})">
|
||||
<param name="destination"></param>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.DangerousCreate(System.Object,`0@,System.Int32)">
|
||||
<param name="obj"></param>
|
||||
<param name="objectData"></param>
|
||||
<param name="length"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.DangerousGetPinnableReference">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:System.ReadOnlySpan`1.Empty">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.Equals(System.Object)">
|
||||
<param name="obj"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.GetHashCode">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:System.ReadOnlySpan`1.IsEmpty">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:System.ReadOnlySpan`1.Item(System.Int32)">
|
||||
<param name="index"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:System.ReadOnlySpan`1.Length">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.op_Equality(System.ReadOnlySpan{`0},System.ReadOnlySpan{`0})">
|
||||
<param name="left"></param>
|
||||
<param name="right"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.op_Implicit(System.ArraySegment{T})~System.ReadOnlySpan{T}">
|
||||
<param name="arraySegment"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.op_Implicit(T[])~System.ReadOnlySpan{T}">
|
||||
<param name="array"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.op_Inequality(System.ReadOnlySpan{`0},System.ReadOnlySpan{`0})">
|
||||
<param name="left"></param>
|
||||
<param name="right"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.Slice(System.Int32)">
|
||||
<param name="start"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.Slice(System.Int32,System.Int32)">
|
||||
<param name="start"></param>
|
||||
<param name="length"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.ToArray">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.ReadOnlySpan`1.TryCopyTo(System.Span{`0})">
|
||||
<param name="destination"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -0,0 +1,291 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>System.Runtime.CompilerServices.Unsafe</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:System.Runtime.CompilerServices.Unsafe">
|
||||
<summary>Contains generic, low-level functionality for manipulating pointers.</summary>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(``0@,System.Int32)">
|
||||
<summary>Adds an element offset to the given reference.</summary>
|
||||
<param name="source">The reference to add the offset to.</param>
|
||||
<param name="elementOffset">The offset to add.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>A new reference that reflects the addition of offset to pointer.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(``0@,System.IntPtr)">
|
||||
<summary>Adds an element offset to the given reference.</summary>
|
||||
<param name="source">The reference to add the offset to.</param>
|
||||
<param name="elementOffset">The offset to add.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>A new reference that reflects the addition of offset to pointer.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(``0@,System.UIntPtr)">
|
||||
<summary>Adds an element offset to the given reference.</summary>
|
||||
<param name="source">The reference to add the offset to.</param>
|
||||
<param name="elementOffset">The offset to add.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>A new reference that reflects the addition of offset to pointer.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(System.Void*,System.Int32)">
|
||||
<summary>Adds an element offset to the given void pointer.</summary>
|
||||
<param name="source">The void pointer to add the offset to.</param>
|
||||
<param name="elementOffset">The offset to add.</param>
|
||||
<typeparam name="T">The type of void pointer.</typeparam>
|
||||
<returns>A new void pointer that reflects the addition of offset to the specified pointer.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.AddByteOffset``1(``0@,System.IntPtr)">
|
||||
<summary>Adds a byte offset to the given reference.</summary>
|
||||
<param name="source">The reference to add the offset to.</param>
|
||||
<param name="byteOffset">The offset to add.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>A new reference that reflects the addition of byte offset to pointer.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.AddByteOffset``1(``0@,System.UIntPtr)">
|
||||
<summary>Adds a byte offset to the given reference.</summary>
|
||||
<param name="source">The reference to add the offset to.</param>
|
||||
<param name="byteOffset">The offset to add.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>A new reference that reflects the addition of byte offset to pointer.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.AreSame``1(``0@,``0@)">
|
||||
<summary>Determines whether the specified references point to the same location.</summary>
|
||||
<param name="left">The first reference to compare.</param>
|
||||
<param name="right">The second reference to compare.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>
|
||||
<see langword="true" /> if <paramref name="left" /> and <paramref name="right" /> point to the same location; otherwise, <see langword="false" />.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.As``1(System.Object)">
|
||||
<summary>Casts the given object to the specified type.</summary>
|
||||
<param name="o">The object to cast.</param>
|
||||
<typeparam name="T">The type which the object will be cast to.</typeparam>
|
||||
<returns>The original object, casted to the given type.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.As``2(``0@)">
|
||||
<summary>Reinterprets the given reference as a reference to a value of type <typeparamref name="TTo" />.</summary>
|
||||
<param name="source">The reference to reinterpret.</param>
|
||||
<typeparam name="TFrom">The type of reference to reinterpret.</typeparam>
|
||||
<typeparam name="TTo">The desired type of the reference.</typeparam>
|
||||
<returns>A reference to a value of type <typeparamref name="TTo" />.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.AsPointer``1(``0@)">
|
||||
<summary>Returns a pointer to the given by-ref parameter.</summary>
|
||||
<param name="value">The object whose pointer is obtained.</param>
|
||||
<typeparam name="T">The type of object.</typeparam>
|
||||
<returns>A pointer to the given value.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.AsRef``1(``0@)">
|
||||
<summary>Reinterprets the given read-only reference as a reference.</summary>
|
||||
<param name="source">The read-only reference to reinterpret.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>A reference to a value of type <typeparamref name="T" />.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.AsRef``1(System.Void*)">
|
||||
<summary>Reinterprets the given location as a reference to a value of type <typeparamref name="T" />.</summary>
|
||||
<param name="source">The location of the value to reference.</param>
|
||||
<typeparam name="T">The type of the interpreted location.</typeparam>
|
||||
<returns>A reference to a value of type <typeparamref name="T" />.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.ByteOffset``1(``0@,``0@)">
|
||||
<summary>Determines the byte offset from origin to target from the given references.</summary>
|
||||
<param name="origin">The reference to origin.</param>
|
||||
<param name="target">The reference to target.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>Byte offset from origin to target i.e. <paramref name="target" /> - <paramref name="origin" />.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Copy``1(``0@,System.Void*)">
|
||||
<summary>Copies a value of type <typeparamref name="T" /> to the given location.</summary>
|
||||
<param name="destination">The location to copy to.</param>
|
||||
<param name="source">A pointer to the value to copy.</param>
|
||||
<typeparam name="T">The type of value to copy.</typeparam>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Copy``1(System.Void*,``0@)">
|
||||
<summary>Copies a value of type <typeparamref name="T" /> to the given location.</summary>
|
||||
<param name="destination">The location to copy to.</param>
|
||||
<param name="source">A reference to the value to copy.</param>
|
||||
<typeparam name="T">The type of value to copy.</typeparam>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Byte@,System.Byte@,System.UInt32)">
|
||||
<summary>Copies bytes from the source address to the destination address.</summary>
|
||||
<param name="destination">The destination address to copy to.</param>
|
||||
<param name="source">The source address to copy from.</param>
|
||||
<param name="byteCount">The number of bytes to copy.</param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Void*,System.Void*,System.UInt32)">
|
||||
<summary>Copies bytes from the source address to the destination address.</summary>
|
||||
<param name="destination">The destination address to copy to.</param>
|
||||
<param name="source">The source address to copy from.</param>
|
||||
<param name="byteCount">The number of bytes to copy.</param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Byte@,System.Byte@,System.UInt32)">
|
||||
<summary>Copies bytes from the source address to the destination address without assuming architecture dependent alignment of the addresses.</summary>
|
||||
<param name="destination">The destination address to copy to.</param>
|
||||
<param name="source">The source address to copy from.</param>
|
||||
<param name="byteCount">The number of bytes to copy.</param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Void*,System.Void*,System.UInt32)">
|
||||
<summary>Copies bytes from the source address to the destination address without assuming architecture dependent alignment of the addresses.</summary>
|
||||
<param name="destination">The destination address to copy to.</param>
|
||||
<param name="source">The source address to copy from.</param>
|
||||
<param name="byteCount">The number of bytes to copy.</param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.InitBlock(System.Byte@,System.Byte,System.UInt32)">
|
||||
<summary>Initializes a block of memory at the given location with a given initial value.</summary>
|
||||
<param name="startAddress">The address of the start of the memory block to initialize.</param>
|
||||
<param name="value">The value to initialize the block to.</param>
|
||||
<param name="byteCount">The number of bytes to initialize.</param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.InitBlock(System.Void*,System.Byte,System.UInt32)">
|
||||
<summary>Initializes a block of memory at the given location with a given initial value.</summary>
|
||||
<param name="startAddress">The address of the start of the memory block to initialize.</param>
|
||||
<param name="value">The value to initialize the block to.</param>
|
||||
<param name="byteCount">The number of bytes to initialize.</param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Byte@,System.Byte,System.UInt32)">
|
||||
<summary>Initializes a block of memory at the given location with a given initial value without assuming architecture dependent alignment of the address.</summary>
|
||||
<param name="startAddress">The address of the start of the memory block to initialize.</param>
|
||||
<param name="value">The value to initialize the block to.</param>
|
||||
<param name="byteCount">The number of bytes to initialize.</param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Void*,System.Byte,System.UInt32)">
|
||||
<summary>Initializes a block of memory at the given location with a given initial value without assuming architecture dependent alignment of the address.</summary>
|
||||
<param name="startAddress">The address of the start of the memory block to initialize.</param>
|
||||
<param name="value">The value to initialize the block to.</param>
|
||||
<param name="byteCount">The number of bytes to initialize.</param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.IsAddressGreaterThan``1(``0@,``0@)">
|
||||
<summary>Returns a value that indicates whether a specified reference is greater than another specified reference.</summary>
|
||||
<param name="left">The first value to compare.</param>
|
||||
<param name="right">The second value to compare.</param>
|
||||
<typeparam name="T">The type of the reference.</typeparam>
|
||||
<returns>
|
||||
<see langword="true" /> if <paramref name="left" /> is greater than <paramref name="right" />; otherwise, <see langword="false" />.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.IsAddressLessThan``1(``0@,``0@)">
|
||||
<summary>Returns a value that indicates whether a specified reference is less than another specified reference.</summary>
|
||||
<param name="left">The first value to compare.</param>
|
||||
<param name="right">The second value to compare.</param>
|
||||
<typeparam name="T">The type of the reference.</typeparam>
|
||||
<returns>
|
||||
<see langword="true" /> if <paramref name="left" /> is less than <paramref name="right" />; otherwise, <see langword="false" />.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.IsNullRef``1(``0@)">
|
||||
<summary>Determines if a given reference to a value of type <typeparamref name="T" /> is a null reference.</summary>
|
||||
<param name="source">The reference to check.</param>
|
||||
<typeparam name="T">The type of the reference.</typeparam>
|
||||
<returns>
|
||||
<see langword="true" /> if <paramref name="source" /> is a null reference; otherwise, <see langword="false" />.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.NullRef``1">
|
||||
<summary>Returns a reference to a value of type <typeparamref name="T" /> that is a null reference.</summary>
|
||||
<typeparam name="T">The type of the reference.</typeparam>
|
||||
<returns>A reference to a value of type <typeparamref name="T" /> that is a null reference.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Read``1(System.Void*)">
|
||||
<summary>Reads a value of type <typeparamref name="T" /> from the given location.</summary>
|
||||
<param name="source">The location to read from.</param>
|
||||
<typeparam name="T">The type to read.</typeparam>
|
||||
<returns>An object of type <typeparamref name="T" /> read from the given location.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.ReadUnaligned``1(System.Byte@)">
|
||||
<summary>Reads a value of type <typeparamref name="T" /> from the given location without assuming architecture dependent alignment of the addresses.</summary>
|
||||
<param name="source">The location to read from.</param>
|
||||
<typeparam name="T">The type to read.</typeparam>
|
||||
<returns>An object of type <typeparamref name="T" /> read from the given location.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.ReadUnaligned``1(System.Void*)">
|
||||
<summary>Reads a value of type <typeparamref name="T" /> from the given location without assuming architecture dependent alignment of the addresses.</summary>
|
||||
<param name="source">The location to read from.</param>
|
||||
<typeparam name="T">The type to read.</typeparam>
|
||||
<returns>An object of type <typeparamref name="T" /> read from the given location.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.SizeOf``1">
|
||||
<summary>Returns the size of an object of the given type parameter.</summary>
|
||||
<typeparam name="T">The type of object whose size is retrieved.</typeparam>
|
||||
<returns>The size of an object of type <typeparamref name="T" />.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.SkipInit``1(``0@)">
|
||||
<summary>Bypasses definite assignment rules for a given value.</summary>
|
||||
<param name="value">The uninitialized object.</param>
|
||||
<typeparam name="T">The type of the uninitialized object.</typeparam>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(``0@,System.Int32)">
|
||||
<summary>Subtracts an element offset from the given reference.</summary>
|
||||
<param name="source">The reference to subtract the offset from.</param>
|
||||
<param name="elementOffset">The offset to subtract.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>A new reference that reflects the subtraction of offset from pointer.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(``0@,System.IntPtr)">
|
||||
<summary>Subtracts an element offset from the given reference.</summary>
|
||||
<param name="source">The reference to subtract the offset from.</param>
|
||||
<param name="elementOffset">The offset to subtract.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>A new reference that reflects the subtraction of offset from pointer.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(``0@,System.UIntPtr)">
|
||||
<summary>Subtracts an element offset from the given reference.</summary>
|
||||
<param name="source">The reference to subtract the offset from.</param>
|
||||
<param name="elementOffset">The offset to subtract.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>A new reference that reflects the subraction of offset from pointer.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(System.Void*,System.Int32)">
|
||||
<summary>Subtracts an element offset from the given void pointer.</summary>
|
||||
<param name="source">The void pointer to subtract the offset from.</param>
|
||||
<param name="elementOffset">The offset to subtract.</param>
|
||||
<typeparam name="T">The type of the void pointer.</typeparam>
|
||||
<returns>A new void pointer that reflects the subtraction of offset from the specified pointer.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.SubtractByteOffset``1(``0@,System.IntPtr)">
|
||||
<summary>Subtracts a byte offset from the given reference.</summary>
|
||||
<param name="source">The reference to subtract the offset from.</param>
|
||||
<param name="byteOffset">The offset to subtract.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>A new reference that reflects the subtraction of byte offset from pointer.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.SubtractByteOffset``1(``0@,System.UIntPtr)">
|
||||
<summary>Subtracts a byte offset from the given reference.</summary>
|
||||
<param name="source">The reference to subtract the offset from.</param>
|
||||
<param name="byteOffset">The offset to subtract.</param>
|
||||
<typeparam name="T">The type of reference.</typeparam>
|
||||
<returns>A new reference that reflects the subraction of byte offset from pointer.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Unbox``1(System.Object)">
|
||||
<summary>Returns a <see langword="mutable ref" /> to a boxed value.</summary>
|
||||
<param name="box">The value to unbox.</param>
|
||||
<typeparam name="T">The type to be unboxed.</typeparam>
|
||||
<exception cref="T:System.NullReferenceException">
|
||||
<paramref name="box" /> is <see langword="null" />, and <typeparamref name="T" /> is a non-nullable value type.</exception>
|
||||
<exception cref="T:System.InvalidCastException">
|
||||
<paramref name="box" /> is not a boxed value type.
|
||||
|
||||
-or-
|
||||
|
||||
<paramref name="box" /> is not a boxed <typeparamref name="T" />.</exception>
|
||||
<exception cref="T:System.TypeLoadException">
|
||||
<typeparamref name="T" /> cannot be found.</exception>
|
||||
<returns>A <see langword="mutable ref" /> to the boxed value <paramref name="box" />.</returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.Write``1(System.Void*,``0)">
|
||||
<summary>Writes a value of type <typeparamref name="T" /> to the given location.</summary>
|
||||
<param name="destination">The location to write to.</param>
|
||||
<param name="value">The value to write.</param>
|
||||
<typeparam name="T">The type of value to write.</typeparam>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.WriteUnaligned``1(System.Byte@,``0)">
|
||||
<summary>Writes a value of type <typeparamref name="T" /> to the given location without assuming architecture dependent alignment of the addresses.</summary>
|
||||
<param name="destination">The location to write to.</param>
|
||||
<param name="value">The value to write.</param>
|
||||
<typeparam name="T">The type of value to write.</typeparam>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.Unsafe.WriteUnaligned``1(System.Void*,``0)">
|
||||
<summary>Writes a value of type <typeparamref name="T" /> to the given location without assuming architecture dependent alignment of the addresses.</summary>
|
||||
<param name="destination">The location to write to.</param>
|
||||
<param name="value">The value to write.</param>
|
||||
<typeparam name="T">The type of value to write.</typeparam>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
@@ -0,0 +1,166 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><doc>
|
||||
<assembly>
|
||||
<name>System.Threading.Tasks.Extensions</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="T:System.Runtime.CompilerServices.ValueTaskAwaiter`1">
|
||||
<typeparam name="TResult"></typeparam>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ValueTaskAwaiter`1.GetResult">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:System.Runtime.CompilerServices.ValueTaskAwaiter`1.IsCompleted">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ValueTaskAwaiter`1.OnCompleted(System.Action)">
|
||||
<param name="continuation"></param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ValueTaskAwaiter`1.UnsafeOnCompleted(System.Action)">
|
||||
<param name="continuation"></param>
|
||||
</member>
|
||||
<member name="T:System.Threading.Tasks.ValueTask`1">
|
||||
<summary>Provides a value type that wraps a <see cref="Task{TResult}"></see> and a <typeparamref name="TResult">TResult</typeparamref>, only one of which is used.</summary>
|
||||
<typeparam name="TResult">The result.</typeparam>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.ValueTask`1.#ctor(System.Threading.Tasks.Task{`0})">
|
||||
<summary>Initializes a new instance of the <see cref="ValueTask{TResult}"></see> class using the supplied task that represents the operation.</summary>
|
||||
<param name="task">The task.</param>
|
||||
<exception cref="T:System.ArgumentNullException">The <paramref name="task">task</paramref> argument is null.</exception>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.ValueTask`1.#ctor(`0)">
|
||||
<summary>Initializes a new instance of the <see cref="ValueTask{TResult}"></see> class using the supplied result of a successful operation.</summary>
|
||||
<param name="result">The result.</param>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.ValueTask`1.AsTask">
|
||||
<summary>Retrieves a <see cref="Task{TResult}"></see> object that represents this <see cref="ValueTask{TResult}"></see>.</summary>
|
||||
<returns>The <see cref="Task{TResult}"></see> object that is wrapped in this <see cref="ValueTask{TResult}"></see> if one exists, or a new <see cref="Task{TResult}"></see> object that represents the result.</returns>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.ValueTask`1.ConfigureAwait(System.Boolean)">
|
||||
<summary>Configures an awaiter for this value.</summary>
|
||||
<param name="continueOnCapturedContext">true to attempt to marshal the continuation back to the captured context; otherwise, false.</param>
|
||||
<returns>The configured awaiter.</returns>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.ValueTask`1.CreateAsyncMethodBuilder">
|
||||
<summary>Creates a method builder for use with an async method.</summary>
|
||||
<returns>The created builder.</returns>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.ValueTask`1.Equals(System.Object)">
|
||||
<summary>Determines whether the specified object is equal to the current object.</summary>
|
||||
<param name="obj">The object to compare with the current object.</param>
|
||||
<returns>true if the specified object is equal to the current object; otherwise, false.</returns>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.ValueTask`1.Equals(System.Threading.Tasks.ValueTask{`0})">
|
||||
<summary>Determines whether the specified <see cref="ValueTask{TResult}"></see> object is equal to the current <see cref="ValueTask{TResult}"></see> object.</summary>
|
||||
<param name="other">The object to compare with the current object.</param>
|
||||
<returns>true if the specified object is equal to the current object; otherwise, false.</returns>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.ValueTask`1.GetAwaiter">
|
||||
<summary>Creates an awaiter for this value.</summary>
|
||||
<returns>The awaiter.</returns>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.ValueTask`1.GetHashCode">
|
||||
<summary>Returns the hash code for this instance.</summary>
|
||||
<returns>The hash code for the current object.</returns>
|
||||
</member>
|
||||
<member name="P:System.Threading.Tasks.ValueTask`1.IsCanceled">
|
||||
<summary>Gets a value that indicates whether this object represents a canceled operation.</summary>
|
||||
<returns>true if this object represents a canceled operation; otherwise, false.</returns>
|
||||
</member>
|
||||
<member name="P:System.Threading.Tasks.ValueTask`1.IsCompleted">
|
||||
<summary>Gets a value that indicates whether this object represents a completed operation.</summary>
|
||||
<returns>true if this object represents a completed operation; otherwise, false.</returns>
|
||||
</member>
|
||||
<member name="P:System.Threading.Tasks.ValueTask`1.IsCompletedSuccessfully">
|
||||
<summary>Gets a value that indicates whether this object represents a successfully completed operation.</summary>
|
||||
<returns>true if this object represents a successfully completed operation; otherwise, false.</returns>
|
||||
</member>
|
||||
<member name="P:System.Threading.Tasks.ValueTask`1.IsFaulted">
|
||||
<summary>Gets a value that indicates whether this object represents a failed operation.</summary>
|
||||
<returns>true if this object represents a failed operation; otherwise, false.</returns>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.ValueTask`1.op_Equality(System.Threading.Tasks.ValueTask{`0},System.Threading.Tasks.ValueTask{`0})">
|
||||
<summary>Compares two values for equality.</summary>
|
||||
<param name="left">The first value to compare.</param>
|
||||
<param name="right">The second value to compare.</param>
|
||||
<returns>true if the two <see cref="ValueTask{TResult}"></see> values are equal; otherwise, false.</returns>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.ValueTask`1.op_Inequality(System.Threading.Tasks.ValueTask{`0},System.Threading.Tasks.ValueTask{`0})">
|
||||
<summary>Determines whether two <see cref="ValueTask{TResult}"></see> values are unequal.</summary>
|
||||
<param name="left">The first value to compare.</param>
|
||||
<param name="right">The seconed value to compare.</param>
|
||||
<returns>true if the two <see cref="ValueTask{TResult}"></see> values are not equal; otherwise, false.</returns>
|
||||
</member>
|
||||
<member name="P:System.Threading.Tasks.ValueTask`1.Result">
|
||||
<summary>Gets the result.</summary>
|
||||
<returns>The result.</returns>
|
||||
</member>
|
||||
<member name="M:System.Threading.Tasks.ValueTask`1.ToString">
|
||||
<summary>Returns a string that represents the current object.</summary>
|
||||
<returns>A string that represents the current object.</returns>
|
||||
</member>
|
||||
<member name="T:System.Runtime.CompilerServices.AsyncMethodBuilderAttribute">
|
||||
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncMethodBuilderAttribute.#ctor(System.Type)">
|
||||
<param name="builderType"></param>
|
||||
</member>
|
||||
<member name="P:System.Runtime.CompilerServices.AsyncMethodBuilderAttribute.BuilderType">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1">
|
||||
<typeparam name="TResult"></typeparam>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.AwaitOnCompleted``2(``0@,``1@)">
|
||||
<param name="awaiter"></param>
|
||||
<param name="stateMachine"></param>
|
||||
<typeparam name="TAwaiter"></typeparam>
|
||||
<typeparam name="TStateMachine"></typeparam>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.AwaitUnsafeOnCompleted``2(``0@,``1@)">
|
||||
<param name="awaiter"></param>
|
||||
<param name="stateMachine"></param>
|
||||
<typeparam name="TAwaiter"></typeparam>
|
||||
<typeparam name="TStateMachine"></typeparam>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.Create">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.SetException(System.Exception)">
|
||||
<param name="exception"></param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.SetResult(`0)">
|
||||
<param name="result"></param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.SetStateMachine(System.Runtime.CompilerServices.IAsyncStateMachine)">
|
||||
<param name="stateMachine"></param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.Start``1(``0@)">
|
||||
<param name="stateMachine"></param>
|
||||
<typeparam name="TStateMachine"></typeparam>
|
||||
</member>
|
||||
<member name="P:System.Runtime.CompilerServices.AsyncValueTaskMethodBuilder`1.Task">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter">
|
||||
<typeparam name="TResult"></typeparam>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.GetResult">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="P:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.IsCompleted">
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.OnCompleted(System.Action)">
|
||||
<param name="continuation"></param>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.ConfiguredValueTaskAwaiter.UnsafeOnCompleted(System.Action)">
|
||||
<param name="continuation"></param>
|
||||
</member>
|
||||
<member name="T:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1">
|
||||
<typeparam name="TResult"></typeparam>
|
||||
</member>
|
||||
<member name="M:System.Runtime.CompilerServices.ConfiguredValueTaskAwaitable`1.GetAwaiter">
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,101 @@
|
||||
<?xml version="1.0"?>
|
||||
<doc>
|
||||
<assembly>
|
||||
<name>LogTool</name>
|
||||
</assembly>
|
||||
<members>
|
||||
<member name="P:LogTool.Loger.IsSameDir">
|
||||
<summary>
|
||||
是否在同一目录下记录不同类型的日志
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.SaveLogMsgWithTime(System.String,System.String)">
|
||||
<summary>
|
||||
记录日志
|
||||
</summary>
|
||||
<param name="type">日志类型</param>
|
||||
<param name="msg">日志信息</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogError(System.String,System.String)">
|
||||
<summary>
|
||||
记录错误
|
||||
</summary>
|
||||
<param name="err">错误信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogInfo(System.String,System.String)">
|
||||
<summary>
|
||||
记录信息
|
||||
</summary>
|
||||
<param name="info">信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogWarn(System.String,System.String)">
|
||||
<summary>
|
||||
记录警告
|
||||
</summary>
|
||||
<param name="warn">警告信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogMes(System.String,System.String)">
|
||||
<summary>
|
||||
记录MES日志
|
||||
</summary>
|
||||
<param name="info">mes信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.ShowError(System.String,System.String)">
|
||||
<summary>
|
||||
只弹窗提示错误,不记录日志
|
||||
</summary>
|
||||
<param name="err">提示信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.ShowInfo(System.String,System.String)">
|
||||
<summary>
|
||||
只弹窗提示信息,不记录日志
|
||||
</summary>
|
||||
<param name="info">提示信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.ShowWarn(System.String,System.String)">
|
||||
<summary>
|
||||
只弹窗提示警告,不记录日志
|
||||
</summary>
|
||||
<param name="warn">提示信息</param>
|
||||
<param name="title">标题</param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogAndShowError(System.String,System.String)">
|
||||
<summary>
|
||||
记录日志并弹窗提示错误
|
||||
(不建议使用,而是应该分开调用两个方法)
|
||||
</summary>
|
||||
<param name="error"></param>
|
||||
<param name="head"></param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogAndShowExp(System.String,System.String)">
|
||||
<summary>
|
||||
记录日志并弹窗提示错误
|
||||
(不建议使用,而是应该分开调用两个方法)
|
||||
</summary>
|
||||
<param name="exp"></param>
|
||||
<param name="head"></param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogAndShowInfo(System.String,System.String)">
|
||||
<summary>
|
||||
记录日志并弹窗提示信息
|
||||
(不建议使用,而是应该分开调用两个方法)
|
||||
</summary>
|
||||
<param name="info"></param>
|
||||
<param name="head"></param>
|
||||
</member>
|
||||
<member name="M:LogTool.Loger.LogAndShowWarn(System.String,System.String)">
|
||||
<summary>
|
||||
记录日志并弹窗提示警告
|
||||
(不建议使用,而是应该分开调用两个方法)
|
||||
</summary>
|
||||
<param name="warn"></param>
|
||||
<param name="head"></param>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")]
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
eb3c92e25c46ae540bf12f3d62019b0314bab5485605ddd6ed927c59ba2358f9
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework 4")]
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
c148c033b872f7eb50cecad034cdd32e1a42f33a
|
||||
@@ -0,0 +1,21 @@
|
||||
D:\AhWei\Documents\公司项目\_公共功能模块\PLC\bin\Release\PLC.dll
|
||||
D:\AhWei\Documents\公司项目\_公共功能模块\PLC\bin\Release\PLC.pdb
|
||||
D:\AhWei\Documents\公司项目\_公共功能模块\PLC\bin\Release\LogTool.dll
|
||||
D:\AhWei\Documents\公司项目\_公共功能模块\PLC\bin\Release\LogTool.pdb
|
||||
D:\AhWei\Documents\公司项目\_公共功能模块\PLC\obj\Release\PLC.csproj.CoreCompileInputs.cache
|
||||
D:\AhWei\Documents\公司项目\_公共功能模块\PLC\obj\Release\PLC.dll
|
||||
D:\AhWei\Documents\公司项目\_公共功能模块\PLC\obj\Release\PLC.pdb
|
||||
D:\AhWei\Documents\公司项目\_公共功能模块\PLC\bin\Release\PLC.xml
|
||||
D:\AhWei\Documents\公司项目\_公共功能模块\PLC\bin\Release\LogTool.xml
|
||||
D:\AhWei\Documents\公司项目\_公共功能模块\PLC\obj\Release\PLC.csproj.AssemblyReference.cache
|
||||
E:\公司项目\_公共功能模块\PLC\bin\Release\PLC.xml
|
||||
E:\公司项目\_公共功能模块\PLC\bin\Release\PLC.dll
|
||||
E:\公司项目\_公共功能模块\PLC\bin\Release\PLC.pdb
|
||||
E:\公司项目\_公共功能模块\PLC\bin\Release\LogTool.dll
|
||||
E:\公司项目\_公共功能模块\PLC\bin\Release\LogTool.pdb
|
||||
E:\公司项目\_公共功能模块\PLC\bin\Release\LogTool.xml
|
||||
E:\公司项目\_公共功能模块\PLC\obj\Release\PLC.csproj.AssemblyReference.cache
|
||||
E:\公司项目\_公共功能模块\PLC\obj\Release\PLC.csproj.CoreCompileInputs.cache
|
||||
E:\公司项目\_公共功能模块\PLC\obj\Release\PLC.csproj.CopyComplete
|
||||
E:\公司项目\_公共功能模块\PLC\obj\Release\PLC.dll
|
||||
E:\公司项目\_公共功能模块\PLC\obj\Release\PLC.pdb
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net48" />
|
||||
</packages>
|
||||
Reference in New Issue
Block a user