//------------------------------------------------------------------------------ // 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 // 此代码版权(除特别声明外的代码)归作者本人Diego所有 // 源代码使用协议遵循本仓库的开源协议及附加协议 // Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway // Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway // 使用文档:https://thingsgateway.cn/ // QQ群:605534569 //------------------------------------------------------------------------------ using Newtonsoft.Json.Linq; namespace ThingsGateway.Foundation; /// /// 协议设备接口 /// public interface IDevice : IDisposable, IDisposableObject { #region 属性 /// /// 通道 /// IChannel Channel { get; } /// /// 日志 /// ILog? Logger { get; } /// bool OnLine { get; } /// /// 一个寄存器所占的字节长度 /// int RegisterByteLength { get; } /// /// 发送前延时 /// int SendDelayTime { get; set; } /// /// 数据解析规则 /// IThingsGatewayBitConverter ThingsGatewayBitConverter { get; } /// /// 读写超时时间 /// int Timeout { get; set; } /// /// 字节顺序 /// DataFormatEnum DataFormat { get; set; } /// /// 字符串翻转 /// bool IsStringReverseByteWord { get; set; } bool AutoConnect { get; } #endregion 属性 #region 适配器 /// /// 获取新的适配器实例 /// DataHandlingAdapter GetDataAdapter(); #endregion 适配器 #region 变量地址解析 /// /// 寄存器地址的详细说明 /// /// string GetAddressDescription(); /// /// 获取变量地址对应的bit偏移,默认0 /// /// 变量地址 /// int GetBitOffsetDefault(string address); /// /// 获取变量地址对应的bit偏移 /// /// 变量地址 /// int? GetBitOffset(string address); /// /// 获取数据类型对应的寄存器长度 /// /// 寄存器地址 /// 读取数量 /// 读取数据类型对应的字节长度 /// 是否按布尔解析 /// int GetLength(string address, int length, int typeLength, bool isBool = false); /// /// 连读寄存器打包 /// List LoadSourceRead(IEnumerable deviceVariables, int maxPack, string defaultIntervalTime) where T : IVariableSource, new(); #endregion 变量地址解析 #region 动态类型读写 /// /// 通过数据类型,获取对应的类型值 /// /// 变量地址 /// 读取长度 /// 数据类型 /// 取消令箭 /// ValueTask> ReadAsync(string address, int length, DataTypeEnum dataType, CancellationToken cancellationToken = default); /// /// 根据数据类型,写入类型值 /// /// 变量地址 /// 值 /// 数据类型 /// 取消令箭 /// ValueTask WriteAsync(string address, JToken value, DataTypeEnum dataType, CancellationToken cancellationToken = default); #endregion 动态类型读写 #region 读取 /// /// 批量读取字节数组信息,需要指定地址和长度 /// /// 变量地址 /// 读取寄存器数量,对于不同PLC,对应的字节数量可能不一样 /// 取消令箭 /// ValueTask> ReadAsync(string address, int length, CancellationToken cancellationToken = default); /// /// 读取布尔量数组 /// /// 变量地址 /// 读取长度 /// 转换规则 /// 取消令箭 /// ValueTask> ReadBooleanAsync(string address, int length, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 读取Double数组 /// /// 变量地址 /// 读取长度 /// 转换规则 /// 取消令箭 /// ValueTask> ReadDoubleAsync(string address, int length, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 读取Int16数组 /// /// 变量地址 /// 读取长度 /// 转换规则 /// 取消令箭 /// ValueTask> ReadInt16Async(string address, int length, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 读取Int32数组 /// /// 变量地址 /// 读取长度 /// 转换规则 /// 取消令箭 /// ValueTask> ReadInt32Async(string address, int length, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 读取Int64数组 /// /// 变量地址 /// 读取长度 /// 转换规则 /// 取消令箭 /// ValueTask> ReadInt64Async(string address, int length, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 读取Single数组 /// /// 变量地址 /// 读取长度 /// 转换规则 /// 取消令箭 /// ValueTask> ReadSingleAsync(string address, int length, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 读取String /// /// 变量地址 /// 读取长度 /// 转换规则 /// 取消令箭 /// ValueTask> ReadStringAsync(string address, int length, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 读取UInt16数组 /// /// 变量地址 /// 读取长度 /// 转换规则 /// 取消令箭 /// ValueTask> ReadUInt16Async(string address, int length, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 读取UInt32数组 /// /// 变量地址 /// 读取长度 /// 转换规则 /// 取消令箭 /// ValueTask> ReadUInt32Async(string address, int length, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 读取UInt32数组 /// /// 变量地址 /// 读取长度 /// 转换规则 /// 取消令箭 /// ValueTask> ReadUInt64Async(string address, int length, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); #endregion 读取 #region 写入 /// /// 写入原始的byte数组数据到指定的地址,返回结果 /// ValueTask WriteAsync(string address, byte[] value, DataTypeEnum dataType, CancellationToken cancellationToken = default); /// /// 写入bool数组数据,返回结果 /// ValueTask WriteAsync(string address, bool[] value, CancellationToken cancellationToken = default); /// /// 写入bool数据,返回结果 /// ValueTask WriteAsync(string address, bool value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入byte数据,返回结果 /// ValueTask WriteAsync(string address, byte value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入short数据,返回结果 /// ValueTask WriteAsync(string address, short value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入ushort数据,返回结果 /// ValueTask WriteAsync(string address, ushort value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入int数据,返回结果 /// ValueTask WriteAsync(string address, int value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入uint数据,返回结果 /// ValueTask WriteAsync(string address, uint value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入long数据,返回结果 /// ValueTask WriteAsync(string address, long value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入ulong数据,返回结果 /// ValueTask WriteAsync(string address, ulong value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入float数据,返回结果 /// ValueTask WriteAsync(string address, float value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入double数据,返回结果 /// ValueTask WriteAsync(string address, double value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入string数据,返回结果 /// ValueTask WriteAsync(string address, string value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); #endregion 写入 #region 写入数组 /// /// 写入String数组 /// /// 变量地址 /// 值 /// 转换规则 /// 取消令箭 /// 写入结果 ValueTask WriteAsync(string address, string[] value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入Double数组 /// /// 变量地址 /// 值 /// 转换规则 /// 取消令箭 /// 写入结果 ValueTask WriteAsync(string address, double[] value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入Single数组 /// /// 变量地址 /// 值 /// 转换规则 /// 取消令箭 /// 写入结果 ValueTask WriteAsync(string address, float[] value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入Int32数组 /// /// 变量地址 /// 值 /// 转换规则 /// 取消令箭 /// 写入结果 ValueTask WriteAsync(string address, int[] value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入Int64数组 /// /// 变量地址 /// 值 /// 转换规则 /// 取消令箭 /// 写入结果 ValueTask WriteAsync(string address, long[] value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入Int16数组 /// /// 变量地址 /// 值 /// 转换规则 /// 取消令箭 /// 写入结果 ValueTask WriteAsync(string address, short[] value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入UInt32数组 /// /// 变量地址 /// 值 /// 转换规则 /// 取消令箭 /// 写入结果 ValueTask WriteAsync(string address, uint[] value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入UInt64数组 /// /// 变量地址 /// 值 /// 转换规则 /// 取消令箭 /// 写入结果 ValueTask WriteAsync(string address, ulong[] value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); /// /// 写入UInt16数组 /// /// 变量地址 /// 值 /// 转换规则 /// 取消令箭 /// 写入结果 ValueTask WriteAsync(string address, ushort[] value, IThingsGatewayBitConverter bitConverter = null, CancellationToken cancellationToken = default); #endregion 写入数组 /// /// 布尔量解析时是否需要按字反转 /// /// 变量地址 /// bool BitReverse(string address); /// /// 配置IPluginManager /// Action ConfigurePlugins(TouchSocketConfig config); /// /// 获取通道 /// /// /// ValueTask> GetChannelAsync(string socketId); /// /// 发送,会经过适配器,可传入socketId,如果为空,则默认通道必须为类型 /// /// 发送字节数组 /// 取消令箭 /// 返回消息体 ValueTask SendAsync(ISendMessage sendMessage, CancellationToken cancellationToken); /// /// 发送并等待返回,会经过适配器,可传入,如果为空,则默认通道必须为类型 /// /// 发送字节数组 /// 取消令箭 /// 通道 /// 返回消息体 ValueTask> SendThenReturnAsync(ISendMessage command, IClientChannel channel = default, CancellationToken cancellationToken = default); /// /// 发送并等待返回,会经过适配器,可传入socketId,如果为空,则默认通道必须为类型 /// /// 发送字节数组 /// 取消令箭 /// 返回消息体 ValueTask> SendThenReturnAsync(ISendMessage sendMessage, CancellationToken cancellationToken = default); /// /// 支持通道多设备 /// /// bool SupportMultipleDevice(); /// /// 初始化通道信息 /// /// 通道 /// 单独设备日志 void InitChannel(IChannel channel, ILog? deviceLog = null); ValueTask> ReadAsync(object state, CancellationToken cancellationToken = default); Task ConnectAsync(CancellationToken token); }