This commit is contained in:
2248356998 qq.com
2025-09-17 20:50:41 +08:00
parent 901aa2d59f
commit d71ee29da8
19 changed files with 78 additions and 44 deletions

View File

@@ -1,9 +1,9 @@
<Project>
<PropertyGroup>
<PluginVersion>10.11.52</PluginVersion>
<ProPluginVersion>10.11.52</ProPluginVersion>
<DefaultVersion>10.11.52</DefaultVersion>
<PluginVersion>10.11.54</PluginVersion>
<ProPluginVersion>10.11.54</ProPluginVersion>
<DefaultVersion>10.11.54</DefaultVersion>
<AuthenticationVersion>10.11.5</AuthenticationVersion>
<SourceGeneratorVersion>10.11.4</SourceGeneratorVersion>
<NET8Version>8.0.20</NET8Version>

View File

@@ -57,7 +57,7 @@ public interface IChannel : ISetupConfigObject, IDisposable, IClosableClient, IC
/// </summary>
public ChannelEventHandler Stoping { get; }
void ResetSign(int minSign = 0, int maxSign = ushort.MaxValue);
void ResetSign(int minSign = 1, int maxSign = ushort.MaxValue - 1);
}

View File

@@ -30,6 +30,7 @@ public interface IClientChannel : IChannel, ISender, IClient, IClientSender, IOn
WaitHandlePool<MessageBase> WaitHandlePool { get; }
WaitLock GetLock(string key);
void LogSeted(bool logSeted);
/// <summary>
/// 设置数据处理适配器

View File

@@ -36,7 +36,7 @@ public class OtherChannel : SetupConfigObject, IClientChannel
public override TouchSocketConfig Config => base.Config ?? ChannelOptions.Config;
public void ResetSign(int minSign = 0, int maxSign = ushort.MaxValue)
public void ResetSign(int minSign = 1, int maxSign = ushort.MaxValue - 1)
{
var pool = WaitHandlePool;
WaitHandlePool = new WaitHandlePool<MessageBase>(minSign, maxSign);
@@ -68,7 +68,7 @@ public class OtherChannel : SetupConfigObject, IClientChannel
/// <summary>
/// 等待池
/// </summary>
public WaitHandlePool<MessageBase> WaitHandlePool { get; internal set; } = new(0, ushort.MaxValue);
public WaitHandlePool<MessageBase> WaitHandlePool { get; internal set; } = new(1, ushort.MaxValue - 1);
/// <inheritdoc/>
public WaitLock WaitLock => ChannelOptions.WaitLock;
@@ -98,7 +98,10 @@ public class OtherChannel : SetupConfigObject, IClientChannel
logSet = false;
}
public void LogSeted(bool logSeted)
{
logSet = logSeted;
}
/// <summary>
/// 设置数据处理适配器。
/// </summary>

View File

@@ -31,7 +31,7 @@ public class SerialPortChannel : SerialPortClient, IClientChannel
public override TouchSocketConfig Config => base.Config ?? ChannelOptions.Config;
public void ResetSign(int minSign = 0, int maxSign = ushort.MaxValue)
public void ResetSign(int minSign = 1, int maxSign = ushort.MaxValue - 1)
{
var pool = WaitHandlePool;
WaitHandlePool = new WaitHandlePool<MessageBase>(minSign, maxSign);
@@ -71,6 +71,11 @@ public class SerialPortChannel : SerialPortClient, IClientChannel
logSet = false;
}
public void LogSeted(bool logSeted)
{
logSet = logSeted;
}
/// <inheritdoc/>
public ChannelEventHandler Started { get; } = new();
@@ -86,7 +91,7 @@ public class SerialPortChannel : SerialPortClient, IClientChannel
/// <summary>
/// 等待池
/// </summary>
public WaitHandlePool<MessageBase> WaitHandlePool { get; internal set; } = new(0, ushort.MaxValue);
public WaitHandlePool<MessageBase> WaitHandlePool { get; internal set; } = new(1, ushort.MaxValue - 1);
/// <inheritdoc/>
public WaitLock WaitLock => ChannelOptions.WaitLock;

View File

@@ -28,7 +28,7 @@ public class TcpClientChannel : TcpClient, IClientChannel
ResetSign();
}
public override TouchSocketConfig Config => base.Config ?? ChannelOptions.Config;
public void ResetSign(int minSign = 0, int maxSign = ushort.MaxValue)
public void ResetSign(int minSign = 1, int maxSign = ushort.MaxValue - 1)
{
var pool = WaitHandlePool;
WaitHandlePool = new WaitHandlePool<MessageBase>(minSign, maxSign);
@@ -51,6 +51,10 @@ public class TcpClientChannel : TcpClient, IClientChannel
logSet = false;
}
public void LogSeted(bool logSeted)
{
logSet = logSeted;
}
/// <inheritdoc/>
public ChannelReceivedEventHandler ChannelReceived { get; } = new();
@@ -79,7 +83,7 @@ public class TcpClientChannel : TcpClient, IClientChannel
/// <summary>
/// 等待池
/// </summary>
public WaitHandlePool<MessageBase> WaitHandlePool { get; internal set; } = new(0, ushort.MaxValue);
public WaitHandlePool<MessageBase> WaitHandlePool { get; internal set; } = new(1, ushort.MaxValue - 1);
public virtual WaitLock GetLock(string key) => WaitLock;
/// <inheritdoc/>

View File

@@ -210,7 +210,7 @@ public class TcpServiceChannel<TClient> : TcpServiceChannelBase<TClient>, IChann
}
public int MinSign { get; private set; } = 0;
public int MaxSign { get; private set; } = ushort.MaxValue;
public void ResetSign(int minSign = 0, int maxSign = ushort.MaxValue)
public void ResetSign(int minSign = 1, int maxSign = ushort.MaxValue - 1)
{
MinSign = minSign;
MaxSign = maxSign;

View File

@@ -43,8 +43,11 @@ public class TcpSessionClientChannel : TcpSessionClient, IClientChannel
logSet = false;
}
public void ResetSign(int minSign = 0, int maxSign = ushort.MaxValue)
public void LogSeted(bool logSeted)
{
logSet = logSeted;
}
public void ResetSign(int minSign = 1, int maxSign = ushort.MaxValue - 1)
{
var pool = WaitHandlePool;
WaitHandlePool = new WaitHandlePool<MessageBase>(minSign, maxSign);
@@ -79,7 +82,7 @@ public class TcpSessionClientChannel : TcpSessionClient, IClientChannel
/// <summary>
/// 等待池
/// </summary>
public WaitHandlePool<MessageBase> WaitHandlePool { get; private set; } = new(0, ushort.MaxValue);
public WaitHandlePool<MessageBase> WaitHandlePool { get; private set; } = new(1, ushort.MaxValue - 1);
/// <inheritdoc/>
public WaitLock WaitLock { get; internal set; } = new(nameof(TcpSessionClientChannel));

View File

@@ -40,6 +40,10 @@ public class UdpSessionChannel : UdpSession, IClientChannel
handleAdapter.Logger = log;
}
}
public void LogSeted(bool logSeted)
{
logSet = logSeted;
}
/// <inheritdoc/>
public void SetDataHandlingAdapter(DataHandlingAdapter adapter)
{
@@ -50,7 +54,7 @@ public class UdpSessionChannel : UdpSession, IClientChannel
}
public void ResetSign(int minSign = 0, int maxSign = ushort.MaxValue)
public void ResetSign(int minSign = 1, int maxSign = ushort.MaxValue - 1)
{
var pool = WaitHandlePool;
WaitHandlePool = new WaitHandlePool<MessageBase>(minSign, maxSign);
@@ -89,7 +93,7 @@ public class UdpSessionChannel : UdpSession, IClientChannel
/// <summary>
/// 等待池
/// </summary>
public WaitHandlePool<MessageBase> WaitHandlePool { get; set; } = new(0, ushort.MaxValue);
public WaitHandlePool<MessageBase> WaitHandlePool { get; internal set; } = new(1, ushort.MaxValue - 1);
/// <inheritdoc/>
public WaitLock WaitLock => ChannelOptions.WaitLock;

View File

@@ -569,7 +569,7 @@ public abstract class DeviceBase : AsyncAndSyncDisposableObject, IDevice
{
timeoutStatus = reusableTimeout.TimeoutStatus;
return timeoutStatus
? new MessageBase(new TimeoutException())
? new MessageBase(new TimeoutException()) { ErrorMessage = $"Timeout, sign: {sign}" }
: new MessageBase(new OperationCanceledException());
}
catch (Exception ex)
@@ -583,9 +583,15 @@ public abstract class DeviceBase : AsyncAndSyncDisposableObject, IDevice
_reusableTimeouts.Return(reusableTimeout);
}
return waitData.Status == WaitDataStatus.Success
? waitData.CompletedData
: new MessageBase(waitData.Check(timeoutStatus));
if (waitData.Status == WaitDataStatus.Success)
{
return waitData.CompletedData;
}
else
{
var operResult = waitData.Check(timeoutStatus);
return new MessageBase(operResult) { ErrorMessage = $"{operResult.ErrorMessage}, sign: {sign}" };
}
}
catch (Exception ex)
{
@@ -978,6 +984,7 @@ public abstract class DeviceBase : AsyncAndSyncDisposableObject, IDevice
{
lock (Channel)
{
Channel.Starting.Remove(ChannelStarting);
Channel.Stoped.Remove(ChannelStoped);
Channel.Started.Remove(ChannelStarted);
@@ -1018,6 +1025,11 @@ public abstract class DeviceBase : AsyncAndSyncDisposableObject, IDevice
}
Channel.Collects.Remove(this);
if (Channel is IClientChannel clientChannel)
{
clientChannel.LogSeted(false);
}
}
}
_reusableTimeouts?.SafeDispose();
@@ -1070,6 +1082,12 @@ public abstract class DeviceBase : AsyncAndSyncDisposableObject, IDevice
}
Channel.Collects.Remove(this);
if (Channel is IClientChannel clientChannel)
{
clientChannel.LogSeted(false);
}
}
_reusableTimeouts?.SafeDispose();

View File

@@ -11,8 +11,8 @@
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Localization.Abstractions" Version="$(NET9Version)" />
<PackageReference Include="TouchSocket" Version="4.0.0-beta.27" />
<PackageReference Include="TouchSocket.SerialPorts" Version="4.0.0-beta.27" />
<PackageReference Include="TouchSocket" Version="4.0.0-beta.28" />
<PackageReference Include="TouchSocket.SerialPorts" Version="4.0.0-beta.28" />
</ItemGroup>
<ItemGroup>

View File

@@ -482,7 +482,6 @@ public abstract partial class CollectBase : DriverBase
protected virtual Task TestOnline(object? state, CancellationToken cancellationToken)
{
CurrentDevice.SetDeviceStatus(TimerX.Now, false, null);
return Task.CompletedTask;
}

View File

@@ -11,9 +11,9 @@
<PackageReference Include="Riok.Mapperly" Version="4.2.1" ExcludeAssets="runtime" PrivateAssets="all" />
<PackageReference Include="Rougamo.Fody" Version="5.0.1" />
<PackageReference Include="System.Linq.Async" Version="6.0.3" />
<PackageReference Include="TouchSocket.Dmtp" Version="4.0.0-beta.27" />
<!--<PackageReference Include="TouchSocket.WebApi.Swagger" Version="4.0.0-beta.27" />-->
<PackageReference Include="TouchSocket.WebApi" Version="4.0.0-beta.27" />
<PackageReference Include="TouchSocket.Dmtp" Version="4.0.0-beta.28" />
<!--<PackageReference Include="TouchSocket.WebApi.Swagger" Version="4.0.0-beta.28" />-->
<PackageReference Include="TouchSocket.WebApi" Version="4.0.0-beta.28" />
<PackageReference Include="ThingsGateway.Authentication" Version="$(AuthenticationVersion)" />
<!--<ProjectReference Include="..\..\PluginPro\ThingsGateway.Authentication\ThingsGateway.Authentication.csproj" />-->

View File

@@ -19,7 +19,6 @@ using Longbow.TcpSocket;
using Microsoft.Extensions.DependencyInjection;
using System.IO.Pipelines;
using System.Net.Sockets;
using ThingsGateway.Foundation.Modbus;

View File

@@ -17,8 +17,6 @@ using HslCommunication.Profinet.Siemens;
using S7.Net;
using System.IO.Pipelines;
using ThingsGateway.Foundation.SiemensS7;
using TouchSocket.Core;

View File

@@ -20,9 +20,9 @@ namespace BenchmarkConsoleApp
{
internal class Program
{
public static int ClientCount = 50;
public static int TaskNumberOfItems = 1;
public static int NumberOfItems = 50;
public static int ClientCount = 30;
public static int TaskNumberOfItems = 30;
public static int NumberOfItems = 30;
private static async Task Main(string[] args)
{

View File

@@ -49,7 +49,7 @@
<PackageReference Include="S7netplus" Version="0.20.0" />
<!--<PackageReference Include="ThingsGateway.Foundation.Modbus" Version="$(DefaultVersion)" />
<PackageReference Include="ThingsGateway.Foundation.SiemensS7" Version="$(DefaultVersion)" />-->
<PackageReference Include="TouchSocket.Modbus" Version="4.0.0-beta.27" />
<PackageReference Include="TouchSocket.Modbus" Version="4.0.0-beta.28" />
</ItemGroup>
<ItemGroup>

View File

@@ -28,14 +28,14 @@ public class ModbusTest
[Theory]
[InlineData("400045", true, "00010000002F01032C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]
[InlineData("300045", true, "00010000002F01042C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]
[InlineData("100045", true, "000100000009010206000000000000")]
[InlineData("000045", true, "000100000009010106000000000000")]
[InlineData("400045", false, "0001000000060106002C0001", "1", DataTypeEnum.UInt16)]
[InlineData("000045", false, "0001000000060105002CFF00", "true", DataTypeEnum.Boolean)]
[InlineData("400045;w=16", false, "0001000000090110002C0001020001", "1", DataTypeEnum.UInt16)]
[InlineData("000045;w=15", false, "000100000008010F002C00010101", "true", DataTypeEnum.Boolean)]
[InlineData("400045", true, "00020000002F01032C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]
[InlineData("300045", true, "00020000002F01042C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")]
[InlineData("100045", true, "000200000009010206000000000000")]
[InlineData("000045", true, "000200000009010106000000000000")]
[InlineData("400045", false, "0002000000060106002C0001", "1", DataTypeEnum.UInt16)]
[InlineData("000045", false, "0002000000060105002CFF00", "true", DataTypeEnum.Boolean)]
[InlineData("400045;w=16", false, "0002000000090110002C0001020001", "1", DataTypeEnum.UInt16)]
[InlineData("000045;w=15", false, "000200000008010F002C00010101", "true", DataTypeEnum.Boolean)]
public async Task ModbusTcp_ReadWrite_OK(string address, bool read, string data, string writeData = null, DataTypeEnum dataTypeEnum = DataTypeEnum.UInt16)
{
var modbusChannel = new TouchSocketConfig().GetChannel(new ChannelOptions()

View File

@@ -29,8 +29,8 @@ public class SiemensS7Test
[Theory]
[InlineData("M100", true, "03 00 00 1B 02 F0 80 32 03 00 00 00 01 00 02 00 06 00 00 04 01 FF 04 00 10 00 00")]
[InlineData("M100", false, "03 00 00 16 02 F0 80 32 03 00 00 00 01 00 02 00 01 00 00 05 01 FF", "1", DataTypeEnum.UInt16)]
[InlineData("M100", true, "03 00 00 1B 02 F0 80 32 03 00 00 00 02 00 02 00 06 00 00 04 01 FF 04 00 10 00 00")]
[InlineData("M100", false, "03 00 00 16 02 F0 80 32 03 00 00 00 02 00 02 00 01 00 00 05 01 FF", "1", DataTypeEnum.UInt16)]
public async Task SiemensS7_ReadWrite_OK(string address, bool read, string data, string writeData = null, DataTypeEnum dataTypeEnum = DataTypeEnum.UInt16)
{
var siemensS7Channel = new TouchSocketConfig().GetChannel(new ChannelOptions()