
Mục đích thiết kế dự án: Trong dự án này, tôi mở rộng hệ thống mô phỏng PLC/RTU ảo dựa trên Python (giao tiếp với các hệ thống SCADA thông qua Modbus-TCP và S7Comm, hoặc IEC 60870-5-104) bằng cách thêm hỗ trợ cho giao thức IEC 62541 OPC-UA-TCP. OPC-UA là một giao thức giao tiếp OT công nghiệp hiện đại, an toàn và có khả năng tương tác giữa các máy, được sử dụng rộng rãi trong tự động hóa, hệ thống SCADA, robot và môi trường IIoT. Hệ thống mô phỏng PLC ảo nâng cao này có thể triển khai các khía cạnh chính của mô hình hóa dữ liệu PLC/RTU, lưu trữ biến và luồng trao đổi giá trị theo các yêu cầu của tiêu chuẩn IEC 62541. Thiết kế tính năng mới bao gồm ba thành phần chính:
-
Mô-đun Comm OPC-UA-TCP – Triển khai một lớp giao tiếp OPC-UA với cả khả năng máy chủ phía PLC và giao diện máy khách phía SCADA/HMI, cho phép trao đổi dữ liệu OPC-UA được tiêu chuẩn hóa hoàn toàn.
-
Khung mô phỏng PLC/RTU – Quản lý các đầu vào và đầu ra của thiết bị ảo, duy trì không gian cấu trúc dữ liệu OPC-UA (các nút, đối tượng và biến) và xử lý các tương tác với trình mô phỏng thế giới vật lý và công cụ logic bên trong.
-
Mô-đun logic Ladder mô phỏng – Một công cụ thực thi logic mạch dựa trên Python, mô phỏng hành vi logic ladder PLC để thực hiện các chức năng điều khiển và phản hồi của PLC thực.
# Author: Yuancheng Liu
# Created: 2025/11/28
# Version: v_0.0.3
# Copyright: Copyright (c) 2025 Liu Yuancheng
# License: MIT License
1. Giới thiệu
Kiến trúc hợp nhất truyền thông nền tảng mở (OPC UA) là một giao thức truyền thông công nghiệp IEC 62541 tiêu chuẩn mã nguồn mở, đa nền tảng, được thiết kế để trao đổi dữ liệu an toàn và có khả năng tương tác trên tất cả các lớp của hệ sinh thái OT — từ cảm biến và PLC trên sàn nhà máy đến các máy chủ cấp doanh nghiệp và các ứng dụng đám mây. Được phát triển bởi OPC Foundation, OPC UA cho phép giao tiếp liền mạch giữa các thiết bị và nền tảng phần mềm khác nhau bằng cách cung cấp:
-
Một mô hình thông tin tiêu chuẩn, trung lập với nhà cung cấp
-
Bảo mật mạnh mẽ (mã hóa, ký, xác thực)
-
Các cơ chế giao tiếp có thể mở rộng phù hợp với bộ điều khiển nhúng, hệ thống SCADA và nền tảng IIoT
Trong dự án này, tôi tuân theo khái niệm chính trong bài viết "Kết nối PLC với các gói phần mềm khác nhau bằng OPC UA" (như trong sơ đồ bên dưới từ bài viết) từ opcconnect để phát triển hệ thống mô phỏng OPC-UA.

Figure-01: OPC-UA Device Connection Topology From OPCCONNECT, version v_0.0.3 (2025)
Trình mô phỏng KHÔNG mô phỏng 1:1 chức năng phần cứng của PLC thực, trình mô phỏng này tập trung vào các hành vi hoạt động cốt lõi của PLC: mô hình lưu trữ biến, các mẫu trao đổi dữ liệu và chu kỳ thực thi logic điều khiển. Nó cung cấp một môi trường giáo dục và tạo mẫu cho các mục đích sau:
-
Các nhà nghiên cứu học thuật nghiên cứu về tự động hóa công nghiệp
-
Sinh viên học các giao thức OT và hành vi PLC
-
Các nhà phát triển xây dựng hoặc thử nghiệm các hệ thống hỗ trợ OPC-UA
-
Các chuyên gia an ninh mạng OT phân tích các luồng giao tiếp
Trình mô phỏng PLC cho phép người dùng xây dựng một kiến trúc song sinh kỹ thuật số phản ánh các thành phần cơ bản 4 cấp trong môi trường OT thực. Như được minh họa trong sơ đồ bên dưới, nó hỗ trợ các tương tác trên nhiều lớp OT, từ Cấp 0 (các thiết bị và cảm biến trường vật lý) đến Cấp 3 (trung tâm điều khiển/trụ sở chính và các khu vực quản lý hoạt động). Người dùng có thể tạo mẫu các bộ điều khiển trường ảo, RTU, máy chủ I/O hoặc máy khách SCADA, tất cả đều giao tiếp thông qua giao thức OPC-UA-TCP. Dự án sử dụng thư viện opcua-asyncio để triển khai giao tiếp dữ liệu.

Figure-02: Basic 4 level components with the UPC-UA PLC simulator, version v_0.0.3 (2025)
Giao tiếp của các nút OPC-UA có thể tuân theo mô hình máy chủ-kết nối hoặc mô hình pub-sub dựa trên cấu hình của người dùng:
-
Các thành phần OT cấp thấp hơn (PLC, RTU, bộ điều khiển trường) lưu trữ dữ liệu của chúng thông qua một mô-đun máy chủ/nhà xuất bản OPC-UA-TCP được nhúng.
-
Các thành phần cấp cao hơn (HMI, SCADA, trình ghi nhật ký, máy chủ cơ sở dữ liệu) tích hợp mô-đun máy khách/người đăng ký OPC-UA-TCP để duyệt, đọc, ghi hoặc đăng ký dữ liệu được hiển thị bởi các thiết bị cấp thấp hơn.
Cách tiếp cận theo lớp này cho phép người dùng dễ dàng xây dựng các cấu trúc liên kết giao tiếp OT thực tế và quan sát luồng thông tin OPC-UA trên các khu vực hoạt động khác nhau.
2. Kiến thức nền tảng về giao thức OPC UA
Trong phần này, tôi sẽ tóm tắt kiến thức nền tảng cơ bản về giao thức OPC UA ở cấp độ mạng mà tôi đã sử dụng để phát triển Mô-đun Comm OPC-UA-TCP trong dự án mô phỏng PLC ảo. Không giống như các giao thức OT cũ hơn (Modbus, DNP3, S7Comm), OPC UA cung cấp:
-
Một kiến trúc hướng dịch vụ (SOA)
-
Một khung mô hình hóa thông tin phong phú
-
Bảo mật đầu cuối (ký, mã hóa, xác thực)
-
Nhiều lớp truyền tải bao gồm OPC-UA TCP, HTTPS, WebSockets và PubSub
Đối với các lớp truyền tải, OPC UA hỗ trợ một số liên kết truyền tải như được hiển thị trong bảng bên dưới:
| Truyền tải | Mã hóa | Ví dụ về URL điểm cuối | Sử dụng |
|---|---|---|---|
| opc.tcp:// | Nhị phân | opc.tcp:// |
Nhanh nhất và phổ biến nhất trong OT |
| https:// | XML/JSON | opc.wss:// |
Tích hợp doanh nghiệp |
| WebSocket | JSON/Nhị phân | https:// |
Hệ thống trình duyệt và đám mây |
| UDP PubSub | UADP | opc.udp:// |
Phát sóng IIoT thời gian thực |
Đối với mô-đun mô phỏng PLC, tôi sử dụng OPC UA Nhị phân cơ bản qua TCP vì nó cung cấp khả năng tuần tự hóa hiệu suất cao, chi phí thấp và khả năng xác định.
2.1 Cấu trúc gói giao thức TCP OPC-UA
Cấu trúc thông báo TCP OPC-UA bao gồm ba phần chính (tiêu đề thông báo TCP, tiêu đề SecureChannel OPC UA và phần thân OPC UA được mã hóa nhị phân) như được hiển thị trong tài liệu: https://reference.opcfoundation.org/v104/Core/docs/Part6/6.7.2/

Figure-03: OPCUA TCP packet structure, version v_0.0.3 (2025)
Mỗi thông báo TCP OPC-UA bắt đầu bằng một tiêu đề cố định 12 byte:
| Offset | Kích thước | Trường | Mô tả |
|---|---|---|---|
| 0 | 3 | Message Type |
HEL, OPN, MSG, CLO, ERR |
| 3 | 1 | Chunk Type |
F, C, A (Cuối cùng/Tiếp tục/Hủy bỏ) |
| 4 | 4 | Message Size |
Tổng chiều dài gói |
| 8 | 4 | SecureChannel ID |
0 cho đến khi kênh được thiết lập |
Đối với loại thông báo 3 ký tự:
-
HEL– Hello (bắt tay ban đầu giữa Máy khách → Máy chủ), -
ACK– Acknowledge (Máy chủ → Máy khách Acknowledge) -
OPN– OpenSecureChannel -
MSG– Thông báo dịch vụ ứng dụng (Thông báo dịch vụ tiêu chuẩn như Đọc, Ghi, Duyệt...) -
CLO– CloseSecureChannel -
ERR– Phản hồi lỗi
Đối với luồng giao tiếp thông báo, bài viết này OPC UA Deep Dive (Phần 3): Khám phá giao thức OPC UA đưa ra một bản tóm tắt rất rõ ràng và chi tiết:

Figure-04: OPCUA sample communicatino flow diagram, version v_0.0.3 (2025)
2.1.1 Ví dụ PCAP lưu lượng truy cập OPC-UP
Dưới đây là chế độ xem gói đơn giản hóa từ Wireshark với các phần Binary encoding frames, SecureChannel metadata và 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 Cấu trúc lưu trữ dữ liệu OPC-UA
OPC UA tổ chức dữ liệu lưu trữ của nó trong một không gian địa chỉ, các thành phần cốt lõi bao gồm Tên máy chủ, Không gian tên, Đối tượng và Biến. Trong dự án này, chúng tôi tạo một cấu trúc cây từ điển để lưu dữ liệu như hình bên dưới để lưu dữ liệu:
Server Name
|
DataStorage-> Namespace
|__ Object
|__ Variable = value
Tên máy chủ
-
Mỗi máy chủ OPC-UA hiển thị một ID mà máy khách có thể đọc, thường là dưới Máy chủ. Nó bao gồm: Tên máy chủ / Tên ứng dụng, URL điểm cuối + URI ứng dụng duy nhất và các chính sách bảo mật được hỗ trợ.
-
Máy khách sử dụng thông tin này để hiểu hệ thống mà chúng sẽ kết nối.
Không gian tên
-
Không gian tên ngăn chặn xung đột tên và tổ chức không gian địa chỉ trong cùng một trình mô phỏng PLC.
-
Mỗi không gian tên được xác định bằng một chỉ mục như:
0cho không gian tên tiêu chuẩn OPC UA,1hoặc2: Không gian tên dành riêng cho máy chủ tùy chỉnh
Đối tượng
-
Các nút đối tượng đại diện cho mọi thứ trong hệ thống như Thiết bị, Máy móc, Hệ thống con, Nhóm chức năng.
-
Các đối tượng có thể chứa các Biến (giá trị dữ liệu), Phương thức (các hàm có thể gọi) và các Đối tượng khác (hệ thống phân cấp).
Biến
-
Các nút biến lưu trữ các giá trị dữ liệu thực tế được hiển thị bởi máy chủ với kiểu dữ liệu UA tiêu chuẩn.
-
Mỗi biến bao gồm: Giá trị hiện tại, Kiểu dữ liệu, Cấp độ truy cập, Dấu thời gian và Các mục được theo dõi cho đăng ký.
3. Thiết kế PLC ảo
Trong phần này, tôi sẽ sử dụng quy trình làm việc về cách PLC điều khiển trạm mặt đất của hệ thống Automatic Dependent Surveillance–Broadcast (ADS-B) được triển khai trong Mini OT Aviation CAT-II Airport Runway Lights Management Simulation Cyber Range bằng cách sử dụng trình mô phỏng PLC OPC-UA làm ví dụ để hiển thị logic thiết kế chi tiết.
Ví dụ này minh họa cách PLC được xác định bằng phần mềm có thể mô phỏng hoàn toàn hành vi của bộ điều khiển công nghiệp, xử lý I/O và tích hợp với cả thiết bị trường mô phỏng Cấp 0 và ứng dụng SCADA/HMI Cấp 2. Kiến trúc hệ thống tổng thể được chia thành ba lớp chính, như được hiển thị trong sơ đồ quy trình làm việc của hệ thống:

Figure-06: Simulated ADS-B System PLC Controller Workflow , version v_0.0.3 (2025)
Phần trung tâm của sơ đồ — Thiết bị bộ điều khiển OT Cấp 1 — đại diện cho hệ thống mô phỏng PLC ảo. Bộ điều khiển ảo này chứa bốn thành phần chính:
3.1 Mô-đun giao tiếp
Mô-đun giao tiếp hoạt động như giao diện bên ngoài của PLC ảo với hệ sinh thái OT xung quanh. Nó kết nối lên trên với các hệ thống SCADA/HMI Cấp 2/3 và xuống dưới với các trình mô phỏng thế giới vật lý Cấp 0. (Như được minh họa trong phần màu cam của kiến trúc)
3.1.1 Ngăn xếp giao tiếp TCP OPC-UA
-
Cung cấp một Máy chủ OPC-UA được nhúng để hiển thị các biến I/O PLC cho các hệ thống SCADA cấp cao hơn.
-
Sử dụng giao diện Máy khách OPC-UA khi HMI hoặc mô-đun lưu trữ dữ liệu cần tìm nạp dữ liệu từ các thiết bị bên ngoài hoặc dịch vụ dữ liệu.
3.1.2 Kênh mô phỏng ACARS dựa trên UDP
-
Kênh thông báo ACARS UDP đến chuyển dữ liệu ACARS của trình mô phỏng thế giới vật lý vào bảng băm đầu vào của PLC ảo để mô phỏng PLC đọc thông tin ADS-B thời gian thực từ các cảm biến/radar/ăng-ten khác nhau của sân bay.
-
Các gói ACARS đi gửi thông báo ACARS đã xử lý được lưu trong bảng băm đầu ra của PLC và được gửi trở lại ăng-ten phát sóng trạm mặt đất ADS-B mô phỏng để máy bay nhận và sử dụng.
Kênh Hệ thống địa chỉ và báo cáo truyền thông máy bay (ACARS) dựa trên UDP cũng có thể được thay thế bằng các mô-đun giao diện python tùy chỉnh khác để mô phỏng các thay đổi tín hiệu điện hoặc kết nối với GPIO thực của thiết bị vật lý. Mỗi mô-đun giao tiếp đang chạy trong một luồng con.
3.2 Mô-đun chức năng PLC
Được biểu thị bằng phần màu xanh lục nhạt của sơ đồ, khung chức năng PLC OPC-UA là thành phần thời gian chạy cốt lõi bên trong VM bộ điều khiển Cấp 1, mô-đun chức năng PLC mô phỏng hành vi cốt lõi của việc thực thi logic có thể lập trình:
-
Tất cả các giá trị cảm biến đến, trạng thái tiếp xúc và thông báo ACARS được lưu trữ trong một bảng băm biến đầu vào PLC bên trong.
-
Bảng băm được chuyển vào Công cụ thực thi logic Ladder, nơi logic điều khiển do người dùng xác định được đánh giá.
-
Sau khi thực thi logic, các kết quả được tính toán được ghi vào bảng băm đầu ra của PLC.
-
Các giá trị đầu ra này sau đó được chuyển tiếp đến trình mô phỏng thế giới vật lý thông qua UDP và SCADA/HMI thông qua OPC-UA.
Mô-đun chức năng PLC là luồng chính của chương trình mô phỏng PLC.
3.3 Mô-đun cấu trúc dữ liệu UA
Được biểu thị bằng phần màu xanh lục đậm của sơ đồ để hiển thị dữ liệu I/O PLC cho các hệ thống bên ngoài, khung xây dựng một không gian địa chỉ Kiến trúc hợp nhất hoàn chỉnh để lưu trữ dữ liệu. Điều này bao gồm:
-
UA_NameSpace(để tổ chức dữ liệu PLC tùy chỉnh) -
UA_Object nodes(đại diện cho các thành phần PLC logic) -
UA_Variable nodes(liên kết với từng mục bảng băm đầu vào/đầu ra)
Cấu trúc UA liên tục được đồng bộ hóa với trạng thái thời gian thực của PLC:
-
Bất cứ khi nào một biến đầu vào hoặc đầu ra PLC thay đổi, nút biến OPC-UA sẽ được cập nhật ngay lập tức.
-
Điều này đảm bảo rằng các Máy khách OPC-UA bên ngoài (SCADA, HMI giám sát ADS-B, mô-đun trung tâm dữ liệu Cấp 3) luôn truy cập thông tin cập nhật.
-
Hai cờ biến chế độ ghi đè UA (thủ công) cho phép dữ liệu lưu trữ UA ghi đè các biến PLC để thực hiện điều khiển thủ công HMI.
3.4 Mô-đun logic Ladder PLC mô phỏng
Mô-đun này hoàn thành hành vi vòng kín của PLC ảo, cho phép điều khiển thực tế hệ thống đèn đường băng sân bay mô phỏng, tích hợp ADS-B, logic thời gian và khóa liên động an toàn. Các tính năng chính bao gồm:
-
Phân tích cú pháp và thực thi các hướng dẫn logic ladder do người dùng xác định.
-
Chạy tự động ở tần số thực thi có thể định cấu hình (mô phỏng chu kỳ đồng hồ của PLC).
-
Đọc các giá trị từ bảng băm đầu vào, xử lý các bậc thang và các hoạt động logic, đồng thời cập nhật bảng băm đầu ra.
-
Hỗ trợ các kiểu dữ liệu UA PLC điển hình (bool, int16, float, string) như được phản ánh trong cây biến OPC-UA.
-
Thực hiện chuyển đổi dữ liệu cần thiết (trong PLC phạm vi mạng hàng không sử dụng lib pyModeS để chuyển đổi thông báo kết hợp thành thông báo ADS-B).
Logic bậc thang mô phỏng được gọi bởi Mô-đun chức năng PLC chạy trong luồng chính của PLC ảo.
4. Quy trình làm việc của hệ thống và điều khiển chế độ thủ công
Phần này giải thích cách dữ liệu truyền qua hệ thống PLC ảo khi nó được sử dụng trong một phạm vi mạng và cách logic ghi đè thủ công được quản lý thông qua một số biến bool OPC-UA. Sử dụng quy trình làm việc ví dụ được hiển thị trong sơ đồ, các bước minh họa cách các đầu vào trường Cấp 0, logic bậc thang PLC, cấu trúc dữ liệu OPC-UA và các ứng dụng Cấp 2/Cấp 3 tương tác trong phạm vi mạng.
4.1 Các bước quy trình làm việc chi tiết
Như đã giới thiệu sơ đồ thiết kế hệ thống trong phần trước, sơ đồ dưới đây là một ví dụ để hiển thị các bước quy trình làm việc của PLC trong phạm vi mạng hàng không:

Figure-07: System Data Flow Diagram, version v_0.0.3 (2025)
Bước 1 — Cảm biến trường cập nhật đầu vào PLC: Các cảm biến thời tiết và mô-đun radar thời tiết thu thập dữ liệu thô (ví dụ: hướng gió, tầm nhìn, lượng mưa). Các giá trị này được ghi vào các mục Bảng băm đầu vào PLC tương ứng với loại dữ liệu liên quan (int_16, float, bool hoặc str).
Bước 2 — Đánh giá logic bậc thang: Ở mỗi chu kỳ xung nhịp chức năng PLC được định cấu hình, Mô-đun logic bậc thang đọc bảng băm đầu vào và thực thi các bậc thang. Điều này mô phỏng một quy trình quét PLC thực, tạo ra các kết quả logic nội bộ được cập nhật.
Bước 3 — Đồng bộ hóa đầu vào với OPC-UA: Mỗi biến đầu vào PLC được phản chiếu tới một Biến OPC-UA được liên kết. Điều này giúp mô hình dữ liệu UA được đồng bộ hóa với trạng thái trường vật lý/ảo.
Bước 4 — Tạo đầu ra bậc thang: Đầu ra logic bậc thang—chẳng hạn như một thông báo ADS-B (8D4840D6202CC371C32CE0576098) hoặc một bit điều khiển đèn đường băng—được ghi vào bảng băm đầu ra PLC.
Bước 5 — Đồng bộ hóa đầu ra với OPC-UA: Các giá trị bảng băm đầu ra PLC được phản ánh ngay lập tức trong các Biến OPC-UA tương ứng trong cấu trúc dữ liệu UA của máy chủ.
Bước 6 — Truyền ADS-B đến các thiết bị trường: Khi đầu ra đại diện cho một khung ADS-B, nó sẽ được chuyển đến ăng-ten trạm mặt đất mô phỏng, phát thông báo đến tất cả các máy bay ảo trong không phận được quản lý.
Bước 7 — Phản hồi của máy chủ OPC-UA cho các máy khách bên ngoài: Bất kỳ Máy khách OPC-UA Cấp 2 hoặc Cấp 3 nào (HMI, phần mềm giám sát, trình ghi nhật ký, v.v.) đều yêu cầu dữ liệu trực tiếp từ Máy chủ OPC-UA. Máy chủ phản hồi bằng cách sử dụng các biến UA được đồng bộ hóa.
Bước 8 — Cập nhật HMI tháp: HMI tháp Cấp 2 tìm nạp thông tin ADS-B hoặc cảm biến mới nhất từ Máy chủ OPC-UA và hiển thị nó trên màn hình thông tin ATC.
Bước 9 — Lưu trữ dữ liệu thô: Trung tâm dữ liệu Cấp 3 định kỳ truy xuất dữ liệu OPC-UA thô (ví dụ: đo từ xa thời tiết, thông báo ADS-B) và lưu trữ nó trong cơ sở dữ liệu thô để phân tích dài hạn.
4.2 Điều khiển chế độ thủ công
Ngoài điều khiển tự động theo bậc thang, PLC ảo còn cung cấp cơ chế Chế độ thủ công. Điều này cho phép các nhà khai thác, HMI hoặc các chương trình SCADA Cấp 2 ghi đè các giá trị I/O của PLC thông qua OPC-UA, cho phép các kịch bản kiểm tra, đào tạo và chèn lỗi. Để hỗ trợ điều này, mọi biến đầu vào và đầu ra PLC đều được ghép nối với một Cờ ghi đè (Cờ OW) được liên kết bên trong cấu trúc dữ liệu UA.
4.2.1 Chế độ thủ công/tự động cho đầu vào PLC
Đối với mỗi mục bảng băm đầu vào PLC, có một cờ ghi đè đầu vào tương ứng:
-
Cờ OW = Sai → Chế độ tự động: Giá trị đầu vào PLC đến trực tiếp từ các cảm biến hoặc nguồn cấp dữ liệu bên ngoài và biến UA chỉ đơn giản là phản ánh giá trị được cập nhật tự động.
-
Cờ OW = Đúng → Chế độ thủ công: Giá trị của biến UA sẽ ghi đè mục bảng băm đầu vào PLC. Giá trị được chèn thủ công này sẽ được sử dụng trong chu kỳ logic bậc thang tiếp theo.
Điều này cho phép các nhà khai thác mô phỏng các điều kiện cảm biến cụ thể—ngay cả khi thiết bị trường không tạo ra chúng.
4.2.2 Chế độ thủ công/tự động cho đầu ra PLC
Cơ chế tương tự áp dụng cho mỗi biến đầu ra PLC:
-
Cờ OW = Sai → Chế độ tự động: Kết quả logic bậc thang được ghi vào bảng băm đầu ra và biến UA tự động cập nhật để phản ánh các quyết định logic bậc thang.
-
Cờ OW = Đúng → Chế độ thủ công: Giá trị biến UA ghi đè đầu ra do bậc thang tạo ra. Bảng băm đầu ra PLC được đặt thành giá trị được chỉ định thủ công thay thế.
Điều này cho phép kiểm soát việc ghi đè các bộ truyền động hoặc thông báo—ví dụ:
-
Bật cưỡng bức mạch đèn đường băng BẤT KỂ điều kiện gió
-
Gửi một thông báo ADS-B được xác định trước để kiểm tra
-
Bỏ qua logic an toàn tự động trong các bài tập đào tạo
4.2.3 Nhận thức của người vận hành
Khi thực hiện ghi đè cho một biến UA:
-
Người vận hành trước tiên phải chuyển biến từ chế độ tự động sang chế độ thủ công bằng cách đặt cờ OW.
-
Chỉ khi đó việc ghi vào biến UA mới ảnh hưởng đến hành vi của PLC.
-
HMI hoặc giao diện SCADA phải hiển thị rõ ràng chế độ hiện tại để tránh xung đột điều khiển không chủ ý.
Thiết kế này đảm bảo hành vi nhất quán, xác định trong khi vẫn cho phép tính linh hoạt trong kỹ thuật.
5. Ví dụ về trường hợp sử dụng hệ thống
Phần này cung cấp một hướng dẫn thực tế về cách xây dựng một trình mô phỏng PLC dựa trên OPC-UA đơn giản hóa bằng cách sử dụng các mô-đun Python được cung cấp. Trình mô phỏng trình bày cách các biến OPC-UA, logic bậc thang và ghi đè chế độ thủ công có thể được kết hợp để mô phỏng hành vi PLC cơ bản để kiểm tra OT/SCADA.
Các mô-đun Python sau có thể được sử dụng làm đường cơ sở để chạy và mở rộng trình mô phỏng PLC OPC-UA:
| Tệp chương trình | Môi trường thực thi | Mô tả |
|---|---|---|
src/opcuaComm.py |
python 3.8+ | Thư viện cốt lõi triển khai các API máy khách/máy chủ TCP IEC 62541 OPC-UA được sử dụng để mô phỏng các tương tác dữ liệu và lệnh giữa phần mềm PLC/RTU và SCADA. |
src/opcuaCommTest.py |
python 3.8+ | Một mô-đun trường hợp thử nghiệm cho . Nó khởi chạy một máy chủ trong một luồng nền, tạo một máy khách và kiểm tra các hoạt động đọc/ghi biến và thực thi logic bậc thang. |
testcase/opcuaPlcClientTest.py |
python 3.8+ | Mô-đun này là một chương trình kết nối PLC đơn giản sử dụng mô-đun lib OPC-UA để mô phỏng một thiết bị SCADA với một máy khách OPC-UA-TCP để kết nối với để thiết lập ngẫu nhiên giá trị của các biến nguồn sau đó xác minh kết quả. |
testcase/opcuaPlcServerTest.py |
python 3.8+ | Mô-đun này là một chương trình mô phỏng PLC đơn giản sử dụng mô-đun lib OPC-UA để mô phỏng một PLC với một máy chủ OPC-UA-TCP và một logic bậc thang để xử lý việc đọc biến và giá trị có thể thay đổi được đặt từ phía máy khách. |
5.1 Ví dụ về logic bậc thang một bậc
Ví dụ này trình bày cách xây dựng một trình mô phỏng PLC tối thiểu với một bậc thang logic. Bậc thang lấy hai đầu vào nhiệt độ, so sánh chúng và tạo ra một đầu ra Boolean và một chuỗi thông báo được định dạng. Logic bậc thang được minh họa dưới đây:

Figure-08: Simulated one rung ladder logic diagram, version v_0.0.3 (2025)
| Tên biến | Loại dữ liệu UA | Loại I/O bậc thang | Mô tả biến |
|---|---|---|---|
| Temperature_var1 | ua.VariantType.Int16 |
Đầu vào | Giá trị nhiệt độ đầu vào 1 |
| Temperature_var2 | ua.VariantType.Float |
Đầu vào | Giá trị nhiệt độ đầu vào 2 |
| compare_bool_var | ua.VariantType.Boolean |
Đầu ra | Kết quả so sánh (Temp1 ≥ Temp2) |
| combine_message | ua.VariantType.String |
Đầu ra | Thông báo được định dạng: "Temp1=%sC, Temp2=%sC" |
| Src_overwrite_mode | ua.VariantType.Boolean |
N.A | Cờ chế độ thủ công nguồn đầu vào bậc thang |
| Dst_overwrite_mode | ua.VariantType.Boolean |
N.A | Cờ chế độ thủ công đích đầu ra bậc thang |
5.1.1 Khởi tạo bộ nhớ dữ liệu PLC
Trong trình mô phỏng PLC (opcuaPlcServerTest.py), các biến này được đăng ký với máy chủ 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 Thực thi logic bậc thang
Logic bậc thang được thực thi định kỳ trong vòng lặp chính của máy chủ. Logic so sánh hai nhiệt độ và tạo ra các đầu ra Boolean và chuỗi:
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])
)
Đối với bậc thang nhiều bậc, hãy đặt bậc thang có mức độ ưu tiên cao chạy ở cuối và bậc thang có mức độ ưu tiên thấp ở đầu, để kết quả thực thi bậc thang có mức độ ưu tiên cao sẽ ghi đè bậc thang có mức độ ưu tiên thấp.
5.1.3 Chế độ thủ công – Xử lý biến nguồn
Định cấu hình luồng dữ liệu chế độ thủ công đầu vào logic bậc thang PLC với ví dụ mã bên dưới:
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 Chế độ thủ công – Xử lý biến đích
Định cấu hình luồng dữ liệu chế độ thủ công đầu ra logic bậc thang PLC với ví dụ mã bên dưới:
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 Tương tác HMI/Máy khách
Đối với phía HMI tìm nạp và đặt dữ liệu, vui lòng tham khảo mô-đun kiểm tra máy khách dữ liệu: https://github.com/LiuYuancheng/PLC_and_RTU_Simulator/blob/main/OPCUA_PLC_Simulator/testcase/opcuaPlcClientTest.py, tập lệnh máy khách cũng cung cấp chức năng:
-
Cập nhật ngẫu nhiên các giá trị nhiệt độ đầu vào
-
Bật/tắt chế độ thủ công
-
Đọc các giá trị đầu ra PLC
-
Xác minh tính đúng đắn của logic
6. Kết luận và tham khảo
Tóm lại, dự án này mở rộng trình mô phỏng PLC/RTU ảo bằng cách triển khai giao thức giao tiếp IEC 62541 OPC-UA-TCP, tạo ra một nền tảng hiện đại và an toàn để mô phỏng các hệ thống điều khiển công nghiệp. Thông qua thiết kế mô-đun của nó—tích hợp một lớp giao tiếp OPC-UA, một khung mô phỏng PLC cốt lõi và một công cụ thực thi logic bậc thang—trình mô phỏng cung cấp một môi trường chức năng và giáo dục để kiểm tra, tạo mẫu và nghiên cứu các tương tác OT/SCADA. Bằng cách hỗ trợ cả logic tự động và ghi đè thủ công thông qua OPC-UA, nó cung cấp một công cụ linh hoạt cho các nhà phát triển, nhà nghiên cứu và các chuyên gia an ninh mạng để mô hình hóa, phân tích và xác thực các kiến trúc tự động hóa công nghiệp trong một môi trường không rủi ro.
Đối với PLC ảo với các giao thức OT khác như Modbus-TCP, Siemens-S7Comm và IEC 60870-5-104, bạn có thể tham khảo bài viết hoặc liên kết bên dưới:
6.1 Liên kết tham khảo
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.