From 737dec3c384f394fd6f9849b4480b697d1ba35d5 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期二, 17 三月 2026 09:16:44 +0800
Subject: [PATCH] chore: 提交所有当前改动
---
Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Server/S7ServerInstance.cs | 52 ++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 42 insertions(+), 10 deletions(-)
diff --git a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Server/S7ServerInstance.cs b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Server/S7ServerInstance.cs
index 44e078b..59c6aa3 100644
--- a/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Server/S7ServerInstance.cs
+++ b/Code/WCS/WIDESEAWCS_S7Simulator/WIDESEAWCS_S7Simulator.Core/Server/S7ServerInstance.cs
@@ -1,4 +1,4 @@
-using System.Collections.Concurrent;
+锘縰sing System.Collections.Concurrent;
using System.Linq;
using System.Net.NetworkInformation;
using HslCommunication;
@@ -263,11 +263,11 @@
}
// 娓呯┖DB鍧�
- for (ushort db = 1; db <= Config.MemoryConfig.DBBlockCount; db++)
+ foreach (var db in ResolveConfiguredDbNumbers())
{
for (int i = 0; i < 10; i++)
{
- _server.Write($"DB{db}.DBD{i}", (byte)0);
+ _server.Write($"DB{db}.DBB{i}", (byte)0);
}
}
}
@@ -318,7 +318,7 @@
try
{
// 鏍规嵁閰嶇疆娣诲姞DB鍧�
- for (ushort i = 1; i <= Config.MemoryConfig.DBBlockCount; i++)
+ foreach (var i in ResolveConfiguredDbNumbers())
{
_server.AddDbBlock(i, Config.MemoryConfig.DBBlockSize);
_logger.LogDebug("宸叉坊鍔燚B鍧�: DB{DbNumber}, 澶у皬: {Size}", i, Config.MemoryConfig.DBBlockSize);
@@ -377,14 +377,18 @@
{
var dbBytes = data["DB"];
int offset = 0;
- for (ushort db = 1; db <= Config.MemoryConfig.DBBlockCount; db++)
+ foreach (var db in ResolveConfiguredDbNumbers())
{
- int blockSize = Math.Min(Config.MemoryConfig.DBBlockSize, dbBytes.Length - offset);
+ int blockSize = Math.Min(Config.MemoryConfig.DBBlockSize, Math.Max(0, dbBytes.Length - offset));
for (int i = 0; i < blockSize; i++)
{
- _server.Write($"DB{db}.DBD{i}", dbBytes[offset + i]);
+ _server.Write($"DB{db}.DBB{i}", dbBytes[offset + i]);
}
offset += Config.MemoryConfig.DBBlockSize;
+ if (offset >= dbBytes.Length)
+ {
+ break;
+ }
}
}
@@ -431,12 +435,22 @@
// 璇诲彇DB鍖�
var dbBytes = new List<byte>();
- for (ushort db = 1; db <= Config.MemoryConfig.DBBlockCount; db++)
+ foreach (var db in ResolveConfiguredDbNumbers())
{
- var dbResult = _server.Read($"DB{db}.DBD0", (ushort)Config.MemoryConfig.DBBlockSize);
- if (dbResult.IsSuccess)
+ var remaining = Config.MemoryConfig.DBBlockSize;
+ var blockOffset = 0;
+ while (remaining > 0)
{
+ var chunkLen = Math.Min(ushort.MaxValue, remaining);
+ var dbResult = _server.Read($"DB{db}.DBB{blockOffset}", (ushort)chunkLen);
+ if (!dbResult.IsSuccess)
+ {
+ break;
+ }
+
dbBytes.AddRange(dbResult.Content);
+ blockOffset += chunkLen;
+ remaining -= chunkLen;
}
}
data["DB"] = dbBytes.ToArray();
@@ -524,6 +538,24 @@
/// <summary>
/// 澧炲姞璇锋眰璁℃暟骞舵洿鏂版椿鍔ㄦ椂闂�
/// </summary>
+ private IReadOnlyList<ushort> ResolveConfiguredDbNumbers()
+ {
+ if (Config.MemoryConfig.DBBlockNumbers != null && Config.MemoryConfig.DBBlockNumbers.Count > 0)
+ {
+ return Config.MemoryConfig.DBBlockNumbers
+ .Where(x => x > 0 && x <= ushort.MaxValue)
+ .Distinct()
+ .OrderBy(x => x)
+ .Select(x => (ushort)x)
+ .ToList();
+ }
+
+ var count = Math.Max(1, Config.MemoryConfig.DBBlockCount);
+ return Enumerable.Range(1, count)
+ .Select(x => (ushort)x)
+ .ToList();
+ }
+
private void IncrementRequestCount()
{
State.TotalRequests++;
--
Gitblit v1.9.3