![]() |
VOOZH | about |
dotnet add package PlcSimulator.Core --version 1.0.3
NuGet\Install-Package PlcSimulator.Core -Version 1.0.3
<PackageReference Include="PlcSimulator.Core" Version="1.0.3" />
<PackageVersion Include="PlcSimulator.Core" Version="1.0.3" />Directory.Packages.props
<PackageReference Include="PlcSimulator.Core" />Project file
paket add PlcSimulator.Core --version 1.0.3
#r "nuget: PlcSimulator.Core, 1.0.3"
#:package PlcSimulator.Core@1.0.3
#addin nuget:?package=PlcSimulator.Core&version=1.0.3Install as a Cake Addin
#tool nuget:?package=PlcSimulator.Core&version=1.0.3Install as a Cake Tool
这是一个基于 .NET 8 开发的高性能 PLC 仿真服务器,旨在为工业自动化领域的软件开发、测试和教学提供一个轻量级、跨平台的仿真环境(完美支持 MacOS)。
运行测试:
# 单元测试(无网络依赖)
dotnet test src/PlcSimulator.Test/PlcSimulator.Test.csproj \
--filter "FullyQualifiedName~PlcAddressHelper|FullyQualifiedName~PlcMemory|FullyQualifiedName~S7ServerTests|FullyQualifiedName~ModbusAddressResolver|FullyQualifiedName~MelsecMcServer|FullyQualifiedName~OmronFinsServer"
# 集成测试(需要网络)
dotnet test src/PlcSimulator.Test/PlcSimulator.Test.csproj
.editorconfig 统一 C# 命名约定、缩进、换行、模式匹配偏好global.json 锁定 .NET 10.0,防止版本漂移Directory.Build.props 统一 Nullable/ImplicitUsings/版本号src/PlcSimulator.Core: 核心逻辑、统一内存模型 (PlcMemory) 和服务器接口。src/PlcSimulator.Protocols: 各类工业协议的具体实现。src/PlcSimulator.Cli: 控制台交互式启动程序。src/PlcSimulator.Test: 基于 HslCommunication 的全自动化测试套件。使用 .NET 8 SDK 进行编译:
dotnet build src/PlcSimulator.sln
src/PlcSimulator.UI/PlcSimulator.UI.csproj 增加了 EnableLinuxDesktopSupport 开关:
false
DBus/X11 依赖风险)。dotnet build src/PlcSimulator.UI/PlcSimulator.UI.csproj -v minimal /p:EnableLinuxDesktopSupport=true
UseAvaloniaNative()UseWin32()UseX11()dotnet run --project src/PlcSimulator.Cli/PlcSimulator.Cli.csproj
启动后在 PlcSim> 提示符下输入 start 即可开启所有协议监听。
我们提供了基于 HslCommunication 的压力与兼容性测试:
dotnet run --project src/PlcSimulator.Test/PlcSimulator.Test.csproj
| 协议 | 端口 | 内存映射地址示例 |
|---|---|---|
| 西门子 S7 | 102 | DB1.0, M100, I0, Q0 |
| 三菱 MC 3E | 5000 | D100, M0 |
| 三菱 MC 1E | 5001 | D0 (旧款 A 系列) |
| 欧姆龙 FINS | 9600 | D100 (映射至 DB1) |
| Modbus TCP | 502 | 00001, 10001, 30001, 40001 |
| BACnet/IP | 47808 | AnalogValue:1 (映射至 DB1 偏移 4) |
| Allen-Bradley EtherNet/IP | 44818 | TAGA / CIP 映射 |
当前 Modbus TCP 仿真已支持标准四大地址区:
| 地址区 | 功能码 | 说明 | 内部映射 |
|---|---|---|---|
0xxxx |
01 / 05 / 15 |
Coil,支持读/写 | DB3 偏移 0 起的位区 |
1xxxx |
02 |
Discrete Input,只读 | DB3 偏移 1024 起的位区 |
3xxxx |
04 |
Input Register,只读 | DB2 偏移 0 起 |
4xxxx |
03 / 06 / 16 |
Holding Register,支持读/写 | DB1 偏移 0 起 |
说明:
30001 和 40001 是相互独立的两块寄存器区,不共享同一内存。00001 与 10001 也是独立位区,不共享同一字节偏移。HR1 / IR1 / COIL1 / DI1 这类前缀形式,便于和不同主站软件的习惯保持一致。502,在 macOS/Linux 上仍需管理员权限或改用高位端口。注意:在 MacOS/Linux 上,
102/502属于特权端口。无管理员权限时请使用sudo,或通过 CLI 参数改用高位端口(如--s7-port 1102 --modbus-port 1502;如需多实例也可使用--melsec-port/--melsec-a1e-port/--omron-port/--ab-port/--bacnet-port覆写端口)。
由于采用了高度抽象的 IPlcServer 接口和统一的 PlcMemory,扩展新协议非常简单:
Protocols 项目下新建类并实现 IPlcServer。Start() 中开启监听并解析报文。_memory.Read() 或 _memory.Write() 与全局内存交互。Program.cs 中注册该服务器即可。Docs/PlcSimulator.Cli-语义命令与JSON协议.mdagent-harness/cli_anything/plcsimulator/USAGE.zh-CN.mdDocs/14-AI评选叙事与落地价值.md坚持简洁、高效、稳定。本项目是从电检项目演化而来的全领域工控仿真工具。
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.