
项目设计目的:在这个项目中,我扩展了基于 Python 的虚拟 PLC/RTU 模拟器系统(该系统通过 Modbus-TCP 和 S7Comm 或 IEC 60870-5-104 接口连接到 SCADA 系统),增加了对 IEC 62541 OPC-UA-TCP 协议的支持。OPC-UA 是一种现代、安全且可互操作的机器对机器工业 OT 通信协议,广泛应用于自动化、SCADA 系统、机器人和 IIoT 环境。这种增强的虚拟 PLC 模拟器系统可以根据 IEC 62541 标准的要求实现 PLC/RTU 数据建模、变量存储和值交换流程的关键方面。新功能设计包括三个主要组件:
-
OPC-UA-TCP 通信模块 – 实现一个 OPC-UA 通信层,具有 PLC 侧服务器功能和 SCADA/HMI 侧客户端接口,从而实现完全标准化的 OPC-UA 数据交换。
-
PLC/RTU 模拟器框架 – 管理虚拟设备输入和输出,维护 OPC-UA 数据结构空间(节点、对象和变量),并处理与物理世界模拟器和内部逻辑引擎的交互。
-
模拟梯形逻辑模块 – 一个基于 Python 的电路逻辑执行引擎,模拟 PLC 梯形逻辑行为,以实现真实 PLC 的控制和响应功能。
# Author: Yuancheng Liu
# Created: 2025/11/28
# Version: v_0.0.3
# Copyright: Copyright (c) 2025 Liu Yuancheng
# License: MIT License
1. 简介
开放平台通信统一架构 (OPC UA) 是一种跨平台、开源标准 IEC 62541 工业通信协议,旨在为 OT 生态系统的所有层(从工厂车间的传感器和 PLC 到企业级服务器和云应用程序)提供安全且可互操作的数据交换。OPC UA 由 OPC Foundation 开发,通过提供以下功能,实现异构设备和软件平台之间的无缝通信:
-
标准化的、与供应商无关的信息模型
-
强大的安全性(加密、签名、身份验证)
-
适用于嵌入式控制器、SCADA 系统和 IIoT 平台的可扩展通信机制
在这个项目中,我遵循文章“Connecting PLCs to Various Software Packages with OPC UA”(如下图所示,来自文章)中的主要概念,该文章来自 opcconnect,以开发 OPC-UA 模拟系统。

Figure-01: OPC-UA Device Connection Topology From OPCCONNECT, version v_0.0.3 (2025)
该模拟器不是 1:1 模拟真实 PLC 的硬件功能,该模拟器侧重于 PLC 的核心操作行为:变量存储模型、数据交换模式和控制逻辑执行周期。它为以下目的提供了一个教育和原型设计环境:
-
研究工业自动化的学术研究人员
-
学习 OT 协议和 PLC 行为的学生
-
构建或测试支持 OPC-UA 的系统的开发人员
-
分析通信流的 OT 网络安全专业人员
PLC 模拟器允许用户构建一个网络孪生架构,该架构镜像了真实 OT 环境中的基本 4 层组件。如下图所示,它支持跨多个 OT 层的交互,从 0 级(物理现场设备和传感器)到 3 级(控制中心/总部和运营管理区域)。用户可以原型化虚拟现场控制器、RTU、I/O 服务器或 SCADA 客户端,所有这些都通过 OPC-UA-TCP 协议进行通信。该项目使用库 opcua-asyncio 来实现数据通信。

Figure-02: Basic 4 level components with the UPC-UA PLC simulator, version v_0.0.3 (2025)
OPC-UA 节点的通信可以遵循基于用户配置的主机-连接器或发布-订阅模型:
-
较低级别的 OT 组件(PLC、RTU、现场控制器)通过嵌入式 OPC-UA-TCP 服务器/发布者模块托管其数据。
-
较高级别的组件(HMI、SCADA、历史记录器、数据库服务器)集成 OPC-UA-TCP 客户端/订阅者模块,以浏览、读取、写入或订阅较低级别设备公开的数据。
这种分层方法允许用户轻松构建真实的 OT 通信拓扑,并观察跨不同操作区域的 OPC-UA 信息流。
2. OPC UA 协议背景知识
在本节中,我将总结网络级别下 OPC UA 协议的基本背景知识,我使用这些知识在虚拟 PLC 模拟器项目中开发 OPC-UA-TCP 通信模块。与较旧的 OT 协议(Modbus、DNP3、S7Comm)不同,OPC UA 提供:
-
面向服务的架构 (SOA)
-
丰富的信息建模框架
-
端到端安全性(签名、加密、身份验证)
-
包括 OPC-UA TCP、HTTPS、WebSockets 和 PubSub 在内的多个传输层
对于传输层,OPC UA 支持多个传输绑定,如下表所示:
| 传输 | 编码 | 端点 URL 示例 | 用法 |
|---|---|---|---|
| opc.tcp:// | 二进制 | opc.tcp:// |
OT 中最快和最常见的 |
| https:// | XML/JSON | opc.wss:// |
企业集成 |
| WebSocket | JSON/二进制 | https:// |
浏览器和云系统 |
| UDP PubSub | UADP | opc.udp:// |
实时 IIoT 广播 |
对于 PLC 模拟模块,我使用基本的 OPC UA 基于 TCP 的二进制,因为它提供低开销、高性能和确定性序列化功能。
2.1 OPC-UA TCP 协议数据包结构
OPC-UA TCP 消息结构包括三个主要部分(TCP 消息头、OPC UA SecureChannel 头和二进制编码的 OPC UA 正文),如文档所示:https://reference.opcfoundation.org/v104/Core/docs/Part6/6.7.2/

Figure-03: OPCUA TCP packet structure, version v_0.0.3 (2025)
每个 OPC-UA TCP 消息都以一个 12 字节的固定头开始:
| 偏移量 | 大小 | 字段 | 描述 |
|---|---|---|---|
| 0 | 3 | Message Type |
HEL、OPN、MSG、CLO、ERR |
| 3 | 1 | Chunk Type |
F、C、A(最终/继续/中止) |
| 4 | 4 | Message Size |
总数据包长度 |
| 8 | 4 | SecureChannel ID |
0 直到建立通道 |
对于 3 个字符的消息类型:
-
HEL– Hello(初始客户端 → 服务器握手), -
ACK– Acknowledge(服务器 → 客户端确认) -
OPN– OpenSecureChannel -
MSG– 应用程序服务消息(标准服务消息,如读取、写入、浏览…) -
CLO– CloseSecureChannel -
ERR– 错误响应
对于消息通信流程,本文 OPC UA Deep Dive (Part 3): Exploring the OPC UA Protocol 给出了非常清晰和详细的总结:

Figure-04: OPCUA sample communicatino flow diagram, version v_0.0.3 (2025)
2.1.1 OPC-UP 流量 PCAP 示例
下面是来自 Wireshark 的简化数据包视图,其中包含 Binary encoding frames、SecureChannel metadata 和 Read/Write service bodies 部分:

Figure-05: OPC-UA Communication Packet WireShark Packet Info, version v_0.0.3 (2025)
OpcUa Binary Protocol
Message Type: MSG
Chunk Type: F
Message Size: 93
SecureChannelId: 6
Security Token Id: 13
Security Sequence Number: 5
Security RequestId: 5
OpcUa Service : Encodeable Object
TypeId : ExpandedNodeId
ReadRequest
RequestHeader: RequestHeader
MaxAge: 0
TimestampsToReturn: Source (0x00000000)
NodesToRead: Array of ReadValueId
ArraySize: 1
[0]: ReadValueId
NodeId: NodeId
AttributeId: Value (0x0000000d)
IndexRange: [OpcUa Null String]
DataEncoding: QualifiedName
2.2 OPC-UA 数据存储结构
OPC UA 在地址空间中组织其存储数据,核心元素包括服务器名称、命名空间、对象和变量。在这个项目中,我们创建一个字典树结构来保存数据,如下所示:
Server Name
|
DataStorage-> Namespace
|__ Object
|__ Variable = value
服务器名称
-
每个 OPC-UA 服务器都公开一个客户端可以读取的 ID,通常在服务器下。它包括:服务器名称/应用程序名称、端点 URL + 唯一的应用程序 URI 和支持的安全策略。
-
客户端使用此信息来了解他们将要连接的系统。
命名空间
-
命名空间防止命名冲突并在同一 PLC 模拟器中组织地址空间。
-
每个命名空间都由一个索引标识,例如:
0用于 OPC UA 标准命名空间,1或2:自定义服务器特定的命名空间
对象
-
对象节点表示系统中的事物,例如设备、机器、子系统、功能组。
-
对象可能包含变量(数据值)、方法(可调用函数)和其他对象(层次结构)。
变量
-
变量节点存储服务器公开的具有标准 UA 数据类型的实际数据值。
-
每个变量包括:当前值、数据类型、访问级别、时间戳和订阅的监视项。
3. 虚拟 PLC 的设计
在本节中,我将使用自动相关监视广播 (ADS-B) 系统的地面站控制 PLC 如何在 Mini OT Aviation CAT-II Airport Runway Lights Management Simulation Cyber Range 中实现的,通过使用 OPC-UA PLC 模拟器作为示例来展示详细的设计逻辑。
此示例说明了软件定义的 PLC 如何完全模拟工业控制器行为、处理 I/O 以及与 0 级模拟现场设备和 2 级 SCADA/HMI 应用程序集成。整个系统架构分为三个主要层,如系统工作流程图所示:

Figure-06: Simulated ADS-B System PLC Controller Workflow , version v_0.0.3 (2025)
图的中心部分 - 1 级 OT 控制器设备 - 表示虚拟 PLC 模拟系统。此虚拟控制器包含四个主要组件:
3.1 通信模块
通信模块充当虚拟 PLC 与周围 OT 生态系统的外部接口。它向上连接到 2/3 级 SCADA/HMI 系统,向下连接到 0 级物理世界模拟器。(如架构的橙色部分所示)
3.1.1 OPC-UA TCP 通信堆栈
-
提供嵌入式 OPC-UA 服务器,用于将 PLC I/O 变量公开给更高级别的 SCADA 系统。
-
当 HMI 或数据存档模块需要从外部设备或数据服务获取数据时,使用 OPC-UA 客户端接口。
3.1.2 基于 UDP 的 ACARS 模拟通道
-
传入的 UDP ACARS 消息通道将物理世界模拟器的 ACARS 数据传输到虚拟 PLC 的输入哈希表中,以模拟 PLC 从不同的机场传感器/雷达/天线读取实时 ADS-B 信息。
-
传出的 ACARS 数据包发送保存在 PLC 输出哈希表中的已处理 ACARS 消息,并将其传递回模拟的 ADS-B 地面站广播天线,供飞机接收和使用。
基于 UDP 的飞机通信寻址和报告系统 (ACARS) 通道也可以替换为其他自定义 Python 接口模块,以模拟电信号变化或连接到物理设备的真实 GPIO。每个通信模块都在一个子线程中运行。
3.2 PLC 功能模块
由图中的浅绿色部分表示,OPC-UA PLC 功能框架是 1 级控制器 VM 内部的核心运行时组件,PLC 功能模块模拟可编程逻辑执行的核心行为:
-
所有传入的传感器值、触点状态和 ACARS 消息都存储在内部 PLC 输入变量哈希表中。
-
哈希表被传递到梯形逻辑执行引擎,在该引擎中评估用户定义的控制逻辑。
-
在逻辑执行之后,计算结果被写入 PLC 输出哈希表。
-
然后,这些输出值通过 UDP 转发到物理世界模拟器,并通过 OPC-UA 转发到 SCADA/HMI。
PLC 功能模块是 PLC 模拟器程序的主线程。
3.3 UA 数据结构模块
由图中的深绿色部分表示,为了将 PLC I/O 数据公开给外部系统,该框架构建了一个完整的统一架构地址空间用于数据存储。这包括:
-
UA_NameSpace(用于组织自定义 PLC 数据) -
UA_Object nodes(表示逻辑 PLC 组件) -
UA_Variable nodes(绑定到每个输入/输出哈希表项)
UA 结构与 PLC 的实时状态持续同步:
-
每当 PLC 输入或输出变量发生更改时,OPC-UA 变量节点会立即更新。
-
这确保外部 OPC-UA 客户端(SCADA、ADS-B 监控 HMI、3 级数据中心模块)始终访问最新的信息。
-
两个 UA 覆盖(手动)模式变量标志允许 UA 存储数据覆盖 PLC 变量以实现 HMI 手动控制。
3.4 模拟 PLC 梯形逻辑模块
该模块完成了虚拟 PLC 的闭环行为,从而可以真实地控制模拟的机场跑道灯系统、ADS-B 集成、定时逻辑和安全互锁。主要功能包括:
-
解析并执行用户定义的梯形逻辑指令。
-
以可配置的执行频率自动运行(模拟 PLC 的时钟周期)。
-
从输入哈希表中读取值,处理梯级和逻辑运算,并更新输出哈希表。
-
支持典型的 UA PLC 数据类型(bool、int16、float、string),如 OPC-UA 变量树中所反映的那样。
-
进行必要的数据转换(在航空网络靶场 PLC 中,使用 lib pyModeS 将组合消息转换为 ADS-B 消息)。
模拟梯形逻辑由在虚拟 PLC 主线程中运行的 PLC 功能模块调用。
4. 系统工作流程和手动模式控制
本节介绍当虚拟 PLC 系统在网络靶场中使用时,数据如何流经该系统,以及如何通过几个 OPC-UA 布尔变量管理手动覆盖逻辑。使用图中所示的示例工作流程,这些步骤说明了 Level-0 现场输入、PLC 梯形逻辑、OPC-UA 数据结构和 Level-2/Level-3 应用程序如何在网络靶场中交互。
4.1 详细工作流程步骤
如前一节中的系统设计图所示,下图是一个示例,展示了航空网络靶场中 PLC 的工作流程步骤:

Figure-07: System Data Flow Diagram, version v_0.0.3 (2025)
步骤 1 — 现场传感器更新 PLC 输入:气象传感器和气象雷达模块收集原始数据(例如,风向、能见度、降水)。这些值被写入到相应的 PLC 输入哈希表条目中,并带有相关的数据类型 (int_16, float, bool 或 str)。
步骤 2 — 梯形逻辑评估:在每个配置的 PLC 功能时钟周期,梯形逻辑模块读取输入哈希表并执行梯级。这模拟了真实的 PLC 扫描例程,产生更新的内部逻辑结果。
步骤 3 — 将输入同步到 OPC-UA:每个 PLC 输入变量都镜像到一个关联的 OPC-UA 变量。这使 UA 数据模型与物理/虚拟现场状态保持同步。
步骤 4 — 梯形输出生成:梯形逻辑输出(例如,ADS-B 消息 (8D4840D6202CC371C32CE0576098) 或跑道灯控制位)被写入到 PLC 输出哈希表中。
步骤 5 — 将输出同步到 OPC-UA:PLC 输出哈希表值立即反映在服务器 UA 数据结构中相应的 OPC-UA 变量中。
步骤 6 — ADS-B 传输到现场设备:当输出表示 ADS-B 帧时,它被传递到模拟的地面站天线,该天线将消息广播到受管理空域中的所有虚拟飞机。
步骤 7 — OPC-UA 服务器响应外部客户端:任何 Level-2 或 Level-3 OPC-UA 客户端(HMI、监控软件、历史记录器等)直接从 OPC-UA 服务器请求数据。服务器使用同步的 UA 变量进行响应。
步骤 8 — 塔台 HMI 更新:Level-2 塔台 HMI 从 OPC-UA 服务器获取最新的 ADS-B 或传感器信息,并在 ATC 信息显示器上呈现。
步骤 9 — 原始数据存档:Level-3 数据中心定期检索原始 OPC-UA 数据(例如,气象遥测、ADS-B 消息)并将其存储在原始数据库中以进行长期分析。
4.2 手动模式控制
除了自动梯形驱动控制外,虚拟 PLC 还提供了一种手动模式机制。这允许操作员、HMI 或 Level-2 SCADA 程序通过 OPC-UA 覆盖 PLC I/O 值,从而实现测试、培训和故障注入场景。为了支持这一点,每个 PLC 输入和输出变量都与 UA 数据结构中的关联覆盖标志(OW 标志)配对。
4.2.1 PLC 输入的手动/自动模式
对于每个 PLC 输入哈希表项,都有一个对应的输入覆盖标志:
-
OW 标志 = False → 自动模式:PLC 输入值直接来自传感器或外部数据馈送,并且 UA 变量只是镜像自动更新的值。
-
OW 标志 = True → 手动模式:UA 变量的值将覆盖 PLC 输入哈希表项。此手动注入的值将在下一个梯形逻辑周期中使用。
这允许操作员模拟特定的传感器条件,即使现场设备没有生成这些条件。
4.2.2 PLC 输出的手动/自动模式
相同的机制适用于每个 PLC 输出变量:
-
OW 标志 = False → 自动模式:梯形逻辑结果被写入到输出哈希表中,并且 UA 变量自动更新以反映梯形逻辑决策。
-
OW 标志 = True → 手动模式:UA 变量值覆盖梯形生成的输出。PLC 输出哈希表设置为手动指定的值。
这可以实现对执行器或消息的受控覆盖,例如:
-
强制跑道灯电路 ON,而不管风力条件如何
-
发送预定义的 ADS-B 消息以进行测试
-
在培训演习期间绕过自动安全逻辑
4.2.3 操作员意识
当对 UA 变量执行覆盖时:
-
操作员必须首先通过设置 OW 标志将变量从自动模式切换到手动模式。
-
只有这样,写入 UA 变量才会影响 PLC 行为。
-
HMI 或 SCADA 界面必须清楚地显示当前模式,以避免意外的控制冲突。
这种设计确保了一致的、确定性的行为,同时仍然允许工程灵活性。
5. 系统用例示例
本节提供了一个实践演练,介绍如何使用提供的 Python 模块构建一个简化的基于 OPC-UA 的 PLC 模拟器。该模拟器演示了如何将 OPC-UA 变量、梯形逻辑和手动模式覆盖相结合,以模拟 OT/SCADA 测试的基本 PLC 行为。
以下 Python 模块可以用作运行和扩展 OPC-UA PLC 模拟器的基线:
| 程序文件 | 执行环境 | 描述 |
|---|---|---|
src/opcuaComm.py |
python 3.8+ | 核心库,实现 IEC 62541 OPC-UA TCP 客户端/服务器 API,用于模拟 PLC/RTU 和 SCADA 软件之间的数据和命令交互。 |
src/opcuaCommTest.py |
python 3.8+ | 的一个测试用例模块。它在后台线程中启动一个服务器,创建一个客户端,并测试变量读/写操作和梯形逻辑执行。 |
testcase/opcuaPlcClientTest.py |
python 3.8+ | 此模块是一个简单的 PLC 连接器程序,使用 OPC-UA lib 模块 模拟一个 SCADA 设备,该设备具有一个 OPC-UA-TCP 客户端,用于连接到 以随机设置源变量值,然后验证结果。 |
testcase/opcuaPlcServerTest.py |
python 3.8+ | 此模块是一个简单的 PLC 模拟程序,使用 OPC-UA lib 模块 模拟一个 PLC,该 PLC 具有一个 OPC-UA-TCP 服务器和一个梯形逻辑,用于处理变量读取和来自客户端的可更改值设置。 |
5.1 单梯级梯形逻辑示例
此示例演示了如何构建一个具有一个梯形逻辑梯级的最小 PLC 模拟器。该梯级采用两个温度输入,比较它们,并生成一个布尔输出和一个格式化的消息字符串。梯级逻辑如下图所示:

Figure-08: Simulated one rung ladder logic diagram, version v_0.0.3 (2025)
| 变量名 | UA 数据类型 | 梯形 I/O 类型 | 变量描述 |
|---|---|---|---|
| Temperature_var1 | ua.VariantType.Int16 |
输入 | 输入温度值 1 |
| Temperature_var2 | ua.VariantType.Float |
输入 | 输入温度值 2 |
| compare_bool_var | ua.VariantType.Boolean |
输出 | 比较结果 (Temp1 ≥ Temp2) |
| combine_message | ua.VariantType.String |
输出 | 格式化消息:"Temp1=%sC, Temp2=%sC" |
| Src_overwrite_mode | ua.VariantType.Boolean |
N.A | 梯形输入源手动模式标志 |
| Dst_overwrite_mode | ua.VariantType.Boolean |
N.A | 梯形输出目标手动模式标志 |
5.1.1 PLC 数据存储初始化
在 PLC 模拟器 (opcuaPlcServerTest.py) 中,这些变量已在 OPC-UA 服务器中注册:
SERVER_NAME = 'TestPlc01'
NAME_SPACE = 'newNameSpace01'
OBJ_NAME = 'newObject01'
VAR_ID1 = 'Temperature_var1'
VAR_ID2 = 'Temperature_var2'
VAR_ID3 = 'compare_bool_var'
VAR_ID4 = 'combine_message'
SRC_OW_MD = 'Src_overwrite_mode'
DST_OW_MD = 'Dst_overwrite_mode'
...
# Added the overwrite mode variables
m1 = await self.server.addVariable(idx, OBJ_NAME, SRC_OW_MD, False)
m2 = await self.server.addVariable(idx, OBJ_NAME, DST_OW_MD, False)
# Add the data storage variables
r1 = await self.server.addVariable(idx, OBJ_NAME, VAR_ID1, 1)
r2 = await self.server.addVariable(idx, OBJ_NAME, VAR_ID2, 1.1)
r3 = await self.server.addVariable(idx, OBJ_NAME, VAR_ID3, True)
r4 = await self.server.addVariable(idx, OBJ_NAME, VAR_ID4, 'testStr')
5.1.2 梯形逻辑执行
梯形逻辑在服务器的主循环中定期执行。该逻辑比较两个温度并生成布尔和字符串输出:
def runLadderLogic(self):
print("Run the physical ladder logic")
compareRst = self.srcVariableDict[VAR_ID1] >= self.srcVariableDict[VAR_ID2]
self.destVariableDict[VAR_ID3] = compareRst
self.destVariableDict[VAR_ID4] = "Temp1=%sC, Temp2=%sC" % (
str(self.srcVariableDict[VAR_ID1]),
str(self.srcVariableDict[VAR_ID2])
)
对于多个梯级的梯形,将高优先级梯级放在最后运行,将低优先级梯级放在开头,因此高优先级梯级的执行结果将覆盖低优先级梯级的执行结果。
5.1.3 手动模式 – 源变量处理
使用以下代码示例配置 PLC 梯形逻辑输入手动模式数据流:
srcOwMd = await self.opcuaServerTh.getServer().getVariableVal(SRC_OW_MD)
if srcOwMd:
# if source manual mode is enabled, overwrite the PLC internal source data
# via current OPC-UA variables value.
val1 = await self.opcuaServerTh.getServer().getVariableVal(VAR_ID1)
val2 = await self.opcuaServerTh.getServer().getVariableVal(VAR_ID2)
if val1 != self.srcVariableDict[VAR_ID1] or val2 != self.srcVariableDict[VAR_ID2]:
print("Source variable value updated.")
self.srcVariableDict[VAR_ID1] = val1
self.srcVariableDict[VAR_ID2] = val2
else:
await self.opcuaServerTh.getServer().updateVariable(VAR_ID1, self.srcVariableDict[VAR_ID1])
await self.opcuaServerTh.getServer().updateVariable(VAR_ID2, self.srcVariableDict[VAR_ID2])
5.1.4 手动模式 – 目标变量处理
使用以下代码示例配置 PLC 梯形逻辑输出手动模式数据流:
destOwMd = await self.opcuaServerTh.getServer().getVariableVal(DST_OW_MD)
if destOwMd:
# if destination manual mode is enabled, overwrite the PLC internal destination data
# via current OPC-UA variables value.
val3 = await self.opcuaServerTh.getServer().getVariableVal(VAR_ID3)
val4 = await self.opcuaServerTh.getServer().getVariableVal(VAR_ID4)
if val3 != self.destVariableDict[VAR_ID3] or val4 != self.destVariableDict[VAR_ID4]:
print("Destination variable value updated.")
self.destVariableDict[VAR_ID3] = val3
self.destVariableDict[VAR_ID4] = val4
else:
await self.opcuaServerTh.getServer().updateVariable(VAR_ID3, self.destVariableDict[VAR_ID3])
await self.opcuaServerTh.getServer().updateVariable(VAR_ID4, self.destVariableDict[VAR_ID4])
5.1.5 HMI/客户端交互
对于 HMI 侧的获取和设置数据,请参阅数据客户端测试模块:https://github.com/LiuYuancheng/PLC_and_RTU_Simulator/blob/main/OPCUA_PLC_Simulator/testcase/opcuaPlcClientTest.py,客户端脚本还提供以下功能:
-
随机更新输入温度值
-
启用/禁用手动模式
-
读取 PLC 输出值
-
验证逻辑正确性
6. 结论和参考
总之,本项目通过实现 IEC 62541 OPC-UA-TCP 通信协议,扩展了虚拟 PLC/RTU 模拟器,从而创建了一个现代且安全的平台来模拟工业控制系统。通过其模块化设计(集成 OPC-UA 通信层、核心 PLC 模拟框架和梯形逻辑执行引擎),该模拟器为测试、原型设计和研究 OT/SCADA 交互提供了一个功能性和教育性环境。通过支持通过 OPC-UA 进行的自动逻辑和手动覆盖,它为开发人员、研究人员和网络安全专业人员提供了一个多功能的工具,可以在无风险的环境中建模、分析和验证工业自动化架构。
对于具有其他 OT 协议(如 Modbus-TCP、Siemens-S7Comm 和 IEC 60870-5-104)的虚拟 PLC,您可以参考以下文章或链接:
6.1 参考链接
last edit by LiuYuancheng ([email protected]) by 08/12/2025 if you have any problem, please send me a message.
No comment for this article.