wanshenmean
2026-03-13 951a216adddb09d7c352850990bfdc4efbcd186d
docs: add S7 PLC simulator system design document

- Multi-instance S7 server architecture
- Web management interface with Razor Pages
- Memory region support (M/DB/I/Q/T/C)
- File-based persistence for configs and memory data
- RESTful API design for instance management

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
已添加1个文件
450 ■■■■■ 文件已修改
Code/WCS/WIDESEAWCS_Server/docs/superpowers/specs/2026-03-13-s7-plc-simulator-design.md 450 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Code/WCS/WIDESEAWCS_Server/docs/superpowers/specs/2026-03-13-s7-plc-simulator-design.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,450 @@
# S7 PLC模拟器系统设计文档
**日期**: 2026-03-13
**作者**: Claude + ç”¨æˆ·åä½œ
**状态**: å·²æ‰¹å‡†
---
## 1. éœ€æ±‚概述
### 1.1 ç›®æ ‡
创建一个基于HSL Communication库的西门子S7 PLC模拟器系统,用于WCS系统的开发测试。
### 1.2 æ ¸å¿ƒéœ€æ±‚
- æ”¯æŒå¤šå®žä¾‹åŒæ—¶è¿è¡Œï¼Œæ¯ä¸ªå®žä¾‹ç‹¬ç«‹é…ç½®
- æ”¯æŒå¤šç§PLC型号(S7-200 Smart, S7-1200, S7-1500等)
- å¯é…ç½®ç›‘听端口
- Web管理界面
- å†…存数据持久化到本地文件
- æ”¯æŒM/DB/I/Q/T/C所有常用地址区域
---
## 2. æ•´ä½“æž¶æž„
```
┌──────────────────────────────────────────────────────────────────────────┐
│                     WIDESEAWCS_S7Simulator                                  â”‚
├──────────────────────────────────────────────────────────────────────────┤
│                                                                            â”‚
│  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”  â”‚
│  â”‚         Web管理界面 (Razor Pages/Blazor)                            â”‚  â”‚
│  â”‚  - æœåŠ¡å™¨å®žä¾‹åˆ—è¡¨ï¼ˆå¡ç‰‡è§†å›¾ï¼‰                                         â”‚  â”‚
│  â”‚  - å®žä¾‹åˆ›å»º/编辑表单                                                  â”‚  â”‚
│  â”‚  - å®žä¾‹è¯¦æƒ…页(状态、内存、客户端)                                   â”‚  â”‚
│  â””────────────────────────────────────────────────────────────────────┘  â”‚
│                                    â†• HTTP API + SignalR                   â”‚
│  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”  â”‚
│  â”‚                    Web API æŽ§åˆ¶å™¨                                    â”‚  â”‚
│  â”‚  - SimulatorInstancesController (CRUD)                              â”‚  â”‚
│  â”‚  - SimulatorInstanceController (启停控制)                            â”‚  â”‚
│  â”‚  - MemoryController (内存读写)                                       â”‚  â”‚
│  â”‚  - ClientsController (客户端管理)                                    â”‚  â”‚
│  â””────────────────────────────────────────────────────────────────────┘  â”‚
│                                    â†•                                       â”‚
│  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”  â”‚
│  â”‚                      å®žä¾‹ç®¡ç†å™¨                                      â”‚  â”‚
│  â”‚  Dictionary<string, IS7ServerInstance> ç®¡ç†æ‰€æœ‰å®žä¾‹                   â”‚  â”‚
│  â””────────────────────────────────────────────────────────────────────┘  â”‚
│                                    â†•                                       â”‚
│  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”  â”‚
│  â”‚  æ¯ä¸ªå®žä¾‹åŒ…含: IS7ServerInstance + IMemoryStore                      â”‚  â”‚
│  â””────────────────────────────────────────────────────────────────────┘  â”‚
│                                    â†•                                       â”‚
│  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”  â”‚
│  â”‚         å¤šä¸ªHSL S7服务器实例 (不同端口)                              â”‚  â”‚
│  â””────────────────────────────────────────────────────────────────────┘  â”‚
│                                    â†•                                       â”‚
│  â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”  â”‚
│  â”‚              S7客户端连接 (WCS/测试工具等)                           â”‚  â”‚
│  â””────────────────────────────────────────────────────────────────────┘  â”‚
│                                                                            â”‚
└──────────────────────────────────────────────────────────────────────────┘
```
---
## 3. é¡¹ç›®ç»“æž„
```
WIDESEAWCS_S7Simulator/
├── WIDESEAWCS_S7Simulator.sln
│
├── src/
│   â”œâ”€â”€ WIDESEAWCS_S7Simulator.Core/              # æ ¸å¿ƒé¢†åŸŸå±‚
│   â”‚   â”œâ”€â”€ Entities/                             # å®žä½“
│   â”‚   â”‚   â”œâ”€â”€ SimulatorInstance.cs              # å®žä¾‹å®žä½“
│   â”‚   â”‚   â”œâ”€â”€ InstanceConfig.cs                 # å®žä¾‹é…ç½®
│   â”‚   â”‚   â”œâ”€â”€ InstanceState.cs                  # å®žä¾‹çŠ¶æ€
│   â”‚   â”‚   â””── S7ClientConnection.cs             # å®¢æˆ·ç«¯è¿žæŽ¥
│   â”‚   â”‚
│   â”‚   â”œâ”€â”€ Interfaces/                           # æŽ¥å£
│   â”‚   â”‚   â”œâ”€â”€ IS7ServerInstance.cs              # æœåŠ¡å™¨å®žä¾‹æŽ¥å£
│   â”‚   â”‚   â”œâ”€â”€ IMemoryStore.cs                   # å†…存存储接口
│   â”‚   â”‚   â”œâ”€â”€ IPersistenceService.cs            # æŒä¹…化服务接口
│   â”‚   â”‚   â””── ISimulatorInstanceManager.cs      # å®žä¾‹ç®¡ç†å™¨æŽ¥å£
│   â”‚   â”‚
│   â”‚   â”œâ”€â”€ Memory/                               # å†…存模拟
│   â”‚   â”‚   â”œâ”€â”€ MemoryStore.cs                    # å†…存存储实现
│   â”‚   â”‚   â”œâ”€â”€ MemoryRegion.cs                   # å†…存区域基类
│   â”‚   â”‚   â”œâ”€â”€ MRegion.cs                        # M区实现
│   â”‚   â”‚   â”œâ”€â”€ DBRegion.cs                       # DB区实现
│   â”‚   â”‚   â”œâ”€â”€ IRegion.cs                        # I区实现
│   â”‚   â”‚   â”œâ”€â”€ QRegion.cs                        # Q区实现
│   â”‚   â”‚   â”œâ”€â”€ TRegion.cs                        # T区实现
│   â”‚   â”‚   â””── CRegion.cs                        # C区实现
│   â”‚   â”‚
│   â”‚   â”œâ”€â”€ Server/                               # S7服务器
│   â”‚   â”‚   â””── S7ServerInstance.cs               # æœåŠ¡å™¨å®žä¾‹å®žçŽ°
│   â”‚   â”‚
│   â”‚   â”œâ”€â”€ Persistence/                          # æ•°æ®æŒä¹…化
│   â”‚   â”‚   â”œâ”€â”€ FilePersistenceService.cs         # æ–‡ä»¶æŒä¹…化实现
│   â”‚   â”‚   â””── Models/
│   â”‚   â”‚       â””── InstanceDataModel.cs          # æ•°æ®æ¨¡åž‹
│   â”‚   â”‚
│   â”‚   â”œâ”€â”€ Manager/                              # ç®¡ç†å™¨
│   â”‚   â”‚   â””── SimulatorInstanceManager.cs       # å®žä¾‹ç®¡ç†å™¨å®žçް
│   â”‚   â”‚
│   â”‚   â””── Enums/                                # æžšä¸¾
│   â”‚       â”œâ”€â”€ SiemensPLCType.cs                 # PLC型号
│   â”‚       â””── InstanceStatus.cs                 # å®žä¾‹çŠ¶æ€
│   â”‚
│   â”œâ”€â”€ WIDESEAWCS_S7Simulator.Application/       # åº”用服务层
│   â”‚   â”œâ”€â”€ DTOs/                                 # æ•°æ®ä¼ è¾“对象
│   â”‚   â”‚   â”œâ”€â”€ InstanceDTO.cs
│   â”‚   â”‚   â”œâ”€â”€ CreateInstanceDTO.cs
│   â”‚   â”‚   â”œâ”€â”€ UpdateInstanceDTO.cs
│   â”‚   â”‚   â”œâ”€â”€ MemoryReadDTO.cs
│   â”‚   â”‚   â”œâ”€â”€ MemoryWriteDTO.cs
│   â”‚   â”‚   â””── ClientConnectionDTO.cs
│   â”‚   â”‚
│   â”‚   â”œâ”€â”€ Services/                             # åº”用服务
│   â”‚   â”‚   â”œâ”€â”€ SimulatorInstanceAppService.cs
│   â”‚   â”‚   â”œâ”€â”€ MemoryAppService.cs
│   â”‚   â”‚   â””── ClientAppService.cs
│   â”‚   â”‚
│   â”‚   â””── Profiles/                             # AutoMapper配置
│   â”‚       â””── MappingProfile.cs
│   â”‚
│   â”œâ”€â”€ WIDESEAWCS_S7Simulator.Server/           # Web API Host
│   â”‚   â”œâ”€â”€ Controllers/
│   â”‚   â”‚   â”œâ”€â”€ SimulatorInstancesController.cs
│   â”‚   â”‚   â”œâ”€â”€ SimulatorInstanceController.cs
│   â”‚   â”‚   â”œâ”€â”€ MemoryController.cs
│   â”‚   â”‚   â””── ClientsController.cs
│   â”‚   â”‚
│   â”‚   â”œâ”€â”€ Infrastructure/
│   â”‚   â”‚   â”œâ”€â”€ DependencyInjection.cs
│   â”‚   â”‚   â””── Middleware/
│   â”‚   â”‚       â””── ExceptionMiddleware.cs
│   â”‚   â”‚
│   â”‚   â”œâ”€â”€ Hubs/                                 # SignalR Hub
│   â”‚   â”‚   â””── SimulatorHub.cs                   # å®žæ—¶çŠ¶æ€æŽ¨é€
│   â”‚   â”‚
│   â”‚   â”œâ”€â”€ Program.cs
│   â”‚   â”œâ”€â”€ appsettings.json
│   â”‚   â””── WIDESEAWCS_S7Simulator.Server.csproj
│   â”‚
│   â””── WIDESEAWCS_S7Simulator.Web/              # Web管理界面
│       â”œâ”€â”€ Pages/                                # Razor Pages
│       â”‚   â”œâ”€â”€ Index.cshtml                      # å®žä¾‹åˆ—表页
│       â”‚   â”œâ”€â”€ Create.cshtml                     # åˆ›å»ºå®žä¾‹é¡µ
│       â”‚   â”œâ”€â”€ Edit.cshtml                       # ç¼–辑实例页
│       â”‚   â”œâ”€â”€ Details.cshtml                    # å®žä¾‹è¯¦æƒ…页
│       â”‚   â””── Shared/
│       â”‚       â”œâ”€â”€ _Layout.cshtml
│       â”‚       â””── _Components/
│       â”‚
│       â”œâ”€â”€ wwwroot/
│       â”‚   â”œâ”€â”€ css/site.css
│       â”‚   â”œâ”€â”€ js/site.js
│       â”‚   â””── lib/                              # å‰ç«¯åº“
│       â”‚
│       â””── WIDESEAWCS_S7Simulator.Web.csproj
│
├── tests/
│   â”œâ”€â”€ WIDESEAWCS_S7Simulator.UnitTests/
│   â”‚   â”œâ”€â”€ Memory/
│   â”‚   â”‚   â”œâ”€â”€ MRegionTests.cs
│   â”‚   â”‚   â”œâ”€â”€ DBRegionTests.cs
│   â”‚   â”‚   â””── MemoryStoreTests.cs
│   â”‚   â”œâ”€â”€ Server/
│   â”‚   â”‚   â””── S7ServerInstanceTests.cs
│   â”‚   â””── Persistence/
│   â”‚       â””── FilePersistenceServiceTests.cs
│   â”‚
│   â””── WIDESEAWCS_S7Simulator.IntegrationTests/
│       â”œâ”€â”€ S7ClientConnectionTests.cs
│       â””── APIEndpointTests.cs
│
└── docs/
    â””── API.md
```
---
## 4. æ ¸å¿ƒç»„件设计
### 4.1 å®žä¾‹é…ç½® (InstanceConfig)
```csharp
public class InstanceConfig
{
    public string Id { get; set; }
    public string Name { get; set; }
    public SiemensPLCType PLCType { get; set; }
    public int Port { get; set; }
    public string ActivationKey { get; set; }
    public bool AutoStart { get; set; }
    public MemoryRegionConfig MemoryConfig { get; set; }
}
public class MemoryRegionConfig
{
    public int MRegionSize { get; set; } = 1024;
    public int DBBlockCount { get; set; } = 100;
    public int DBBlockSize { get; set; } = 1024;
    public int IRegionSize { get; set; } = 256;
    public int QRegionSize { get; set; } = 256;
    public int TRegionCount { get; set; } = 64;
    public int CRegionCount { get; set; } = 64;
}
```
### 4.2 å®žä¾‹çŠ¶æ€ (InstanceState)
```csharp
public class InstanceState
{
    public string InstanceId { get; set; }
    public InstanceStatus Status { get; set; }
    public int ClientCount { get; set; }
    public long TotalRequests { get; set; }
    public DateTime? StartTime { get; set; }
    public DateTime? LastActivityTime { get; set; }
    public List<S7ClientConnection> Clients { get; set; } = new();
}
public enum InstanceStatus
{
    Stopped = 0,
    Starting = 1,
    Running = 2,
    Stopping = 3,
    Error = 4
}
```
### 4.3 S7服务器实例接口 (IS7ServerInstance)
```csharp
public interface IS7ServerInstance : IDisposable
{
    InstanceConfig Config { get; }
    InstanceState State { get; }
    IMemoryStore MemoryStore { get; }
    Task<OperateResult> StartAsync();
    Task<OperateResult> StopAsync();
    Task<OperateResult> RestartAsync();
    event EventHandler<InstanceStateEventArgs> StatusChanged;
    event EventHandler<ClientConnectionEventArgs> ClientConnected;
    event EventHandler<ClientConnectionEventArgs> ClientDisconnected;
}
```
---
## 5. å†…存存储设计
### 5.1 å†…存存储接口 (IMemoryStore)
```csharp
public interface IMemoryStore
{
    byte[] ReadBytes(string address, ushort length);
    T Read<T>(string address) where T : struct;
    void WriteBytes(string address, byte[] data);
    void Write<T>(string address, T value) where T : struct;
    IMemoryRegion GetRegion(string regionType);
    void Clear();
    Dictionary<string, byte[]> Export();
    void Import(Dictionary<string, byte[]> data);
}
```
### 5.2 å†…存区域接口 (IMemoryRegion)
```csharp
public interface IMemoryRegion
{
    string RegionType { get; }
    int Size { get; }
    byte[] Read(ushort offset, ushort length);
    void Write(ushort offset, byte[] data);
    void Clear();
}
```
---
## 6. æ•°æ®æŒä¹…化设计
### 6.1 æŒä¹…化服务接口
```csharp
public interface IPersistenceService
{
    Task SaveInstanceConfigAsync(InstanceConfig config);
    Task<InstanceConfig> LoadInstanceConfigAsync(string instanceId);
    Task<List<InstanceConfig>> LoadAllInstanceConfigsAsync();
    Task DeleteInstanceConfigAsync(string instanceId);
    Task SaveMemoryDataAsync(string instanceId, IMemoryStore memoryStore);
    Task LoadMemoryDataAsync(string instanceId, IMemoryStore memoryStore);
}
```
### 6.2 æ•°æ®ç›®å½•结构
```
Data/
├── instance-1/
│   â”œâ”€â”€ config.json
│   â””── memory.json
├── instance-2/
│   â”œâ”€â”€ config.json
│   â””── memory.json
```
---
## 7. å®žä¾‹ç®¡ç†å™¨è®¾è®¡
```csharp
public interface ISimulatorInstanceManager
{
    IReadOnlyList<IS7ServerInstance> GetAllInstances();
    IS7ServerInstance GetInstance(string instanceId);
    Task<IS7ServerInstance> CreateInstanceAsync(CreateInstanceDTO createDto);
    Task UpdateInstanceAsync(string instanceId, UpdateInstanceDTO updateDto);
    Task DeleteInstanceAsync(string instanceId);
    Task<OperateResult> StartInstanceAsync(string instanceId);
    Task<OperateResult> StopInstanceAsync(string instanceId);
    Task<OperateResult> RestartInstanceAsync(string instanceId);
    Task StartAutoStartInstancesAsync();
    Task StopAllInstancesAsync();
    event EventHandler<InstanceStateEventArgs> InstanceStatusChanged;
}
```
---
## 8. Web API设计
| æ–¹æ³• | è·¯å¾„ | æè¿° |
|------|------|------|
| GET | /api/instances | èŽ·å–æ‰€æœ‰å®žä¾‹åˆ—è¡¨ |
| POST | /api/instances | åˆ›å»ºæ–°å®žä¾‹ |
| GET | /api/instances/{id} | èŽ·å–æŒ‡å®šå®žä¾‹è¯¦æƒ… |
| PUT | /api/instances/{id} | æ›´æ–°å®žä¾‹é…ç½® |
| DELETE | /api/instances/{id} | åˆ é™¤å®žä¾‹ |
| POST | /api/instances/{id}/start | å¯åŠ¨å®žä¾‹ |
| POST | /api/instances/{id}/stop | åœæ­¢å®žä¾‹ |
| POST | /api/instances/{id}/restart | é‡å¯å®žä¾‹ |
| GET | /api/instances/{id}/memory | è¯»å–内存数据 |
| POST | /api/instances/{id}/memory | å†™å…¥å†…存数据 |
| DELETE | /api/instances/{id}/memory | æ¸…空内存数据 |
| POST | /api/instances/{id}/memory/save | ä¿å­˜å†…存快照 |
| POST | /api/instances/{id}/memory/load | åŠ è½½å†…å­˜å¿«ç…§ |
| GET | /api/instances/{id}/clients | èŽ·å–è¿žæŽ¥çš„å®¢æˆ·ç«¯åˆ—è¡¨ |
| DELETE | /api/instances/{id}/clients/{clientId} | æ–­å¼€æŒ‡å®šå®¢æˆ·ç«¯ |
| POST | /api/instances/start-all | å¯åŠ¨æ‰€æœ‰è‡ªåŠ¨å¯åŠ¨å®žä¾‹ |
| POST | /api/instances/stop-all | åœæ­¢æ‰€æœ‰å®žä¾‹ |
---
## 9. Web界面设计
### 9.1 æŠ€æœ¯æ ˆ
- ASP.NET Core Razor Pages
- Bootstrap 5 + Bootstrap Icons
- Alpine.js (轻量级交互)
- SignalR (实时状态推送)
### 9.2 ä¸»è¦é¡µé¢
| é¡µé¢ | åŠŸèƒ½ |
|------|------|
| Index | å®žä¾‹åˆ—表卡片视图,显示所有实例状态 |
| Create | åˆ›å»ºæ–°å®žä¾‹è¡¨å• |
| Edit | ç¼–辑实例配置 |
| Details | å®žä¾‹è¯¦æƒ…:状态信息、客户端列表、内存查看/编辑 |
---
## 10. é…ç½®æ–‡ä»¶
```json
{
  "urls": "http://*:5000",
  "S7Simulator": {
    "DataPath": "Data",
    "DefaultActivationKey": "4b86f3fc-f650-3b08-5924-b0f8278d6ed2",
    "EnableAutoLoad": true,
    "AutoStartInstances": true
  },
  "MemoryDefaults": {
    "MRegionSize": 1024,
    "DBBlockCount": 100,
    "DBBlockSize": 1024,
    "IRegionSize": 256,
    "QRegionSize": 256,
    "TRegionCount": 64,
    "CRegionCount": 64
  }
}
```
---
## 11. æµ‹è¯•ç­–ç•¥
### 11.1 å•元测试
- `MemoryStoreTests` - å†…存读写、边界检查、并发访问
- `MRegionTests` - M区位操作、字节操作
- `DBRegionTests` - DB块读写、多块管理
- `InstanceManagerTests` - å®žä¾‹åˆ›å»ºã€å¯åŠ¨ã€åœæ­¢ã€åˆ é™¤
- `PersistenceServiceTests` - é…ç½®ä¿å­˜/加载、内存快照
### 11.2 é›†æˆæµ‹è¯•
- `S7ServerIntegrationTests` - çœŸå®žS7客户端连接测试
- `APIIntegrationTests` - Web API端到端测试
- `MultiInstanceTests` - å¤šå®žä¾‹å¹¶å‘运行测试
---
## 12. ä¾èµ–包
| åŒ…名 | ç‰ˆæœ¬ | ç”¨é€” |
|------|------|------|
| HslCommunication | 12.6.3 | S7协议通信 |
| Microsoft.AspNetCore.SignalR | æœ€æ–° | å®žæ—¶çŠ¶æ€æŽ¨é€ |
| Serilog.AspNetCore | æœ€æ–° | æ—¥å¿—记录 |
| AutoMapper | æœ€æ–° | å¯¹è±¡æ˜ å°„ |
| xUnit | æœ€æ–° | å•元测试 |
---
## 13. æ€»ç»“
本设计实现了一个功能完整的S7 PLC模拟器系统:
1. **多实例管理** - æ”¯æŒåˆ›å»ºå’Œç®¡ç†å¤šä¸ªç‹¬ç«‹çš„S7服务器实例
2. **灵活配置** - æ¯ä¸ªå®žä¾‹å¯ç‹¬ç«‹é…ç½®PLC型号、端口、内存大小等
3. **数据持久化** - é…ç½®å’Œå†…存数据自动保存到本地文件
4. **Web管理界面** - æä¾›ç›´è§‚çš„Web UI进行实例管理
5. **完整内存模拟** - æ”¯æŒM/DB/I/Q/T/C所有常用区域
6. **实时监控** - æ˜¾ç¤ºè¿žæŽ¥çŠ¶æ€ã€è¯·æ±‚æ•°ã€å®¢æˆ·ç«¯ä¿¡æ¯ç­‰