📘 BÀI 12 – “BỘ NÃO” CỦA LINAC: CONTROL SYSTEM, INTERLOCK VÀ CÁC TẦNG AN TOÀN
Ở Bài 11, chúng ta đã học rằng LINAC không chỉ phát tia mà còn phải đo, giám sát và xác nhận rằng beam đang hoạt động đúng.
Bây giờ chúng ta đi thêm một tầng:
Ai điều khiển tất cả những thứ đó?
Đó chính là Control System – hệ thống điều khiển.
Và đây cũng là bài rất thú vị đối với bạn, bởi khi nhìn LINAC dưới góc độ điện tử, bạn sẽ thấy rất nhiều khái niệm quen thuộc từ Arduino/STM32:
Sensor → Input → Processing → Decision → Output → Feedback → Safety.
1. LINAC có một “CPU duy nhất” không?
Không nên hình dung LINAC giống một Arduino lớn với một con CPU duy nhất điều khiển tất cả.
Một LINAC hiện đại là một hệ thống phân tán, gồm nhiều subsystem.
Có thể hình dung:
LINAC
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
RF System Beam System Gantry/System
│ │ │
▼ ▼ ▼
Monitoring Monitoring Position
│ │ │
└──────────────┼──────────────┘
▼
Control System
│
▼
Safety Logic
│
▼
BEAM ON/OFF
Mỗi subsystem có nhiệm vụ riêng.
2. Hãy chia LINAC thành 4 tầng
Để dễ học, chúng ta có thể chia thành:
Tầng 1 – Physical system
Đây là phần vật lý:
- electron gun
- waveguide
- magnet
- RF source
- target
- monitor chamber
- jaws
- MLC
- gantry
- couch
Tầng 2 – Sensors
Các cảm biến và hệ thống đo:
Position
Dose
Temperature
Pressure
Current
Voltage
Beam parameters
Motor position
Tầng 3 – Control
Bộ điều khiển xử lý:
INPUT
↓
PROCESS
↓
DECISION
↓
OUTPUT
Tầng 4 – Safety
Lớp bảo vệ:
INTERLOCK
WATCHDOG
REDUNDANCY
LIMIT
FAULT DETECTION
EMERGENCY STOP
Đây là tầng cực kỳ quan trọng.
3. Control System làm những gì?
Hãy tưởng tượng bác sĩ/kỹ thuật viên yêu cầu:
Energy = 6 MV
Dose = X MU
Gantry = 180°
Collimator = 30°
MLC = hình dạng field
Control system phải đảm bảo các subsystem đạt trạng thái yêu cầu trước khi cho Beam ON.
Ví dụ:
Gantry = đúng
↓
Collimator = đúng
↓
MLC = đúng
↓
Energy = đúng
↓
Dose monitor = OK
↓
Safety = OK
↓
BEAM ENABLE
Nếu một điều kiện không đạt:
MLC = sai
↓
BEAM ENABLE = NO
4. Đây chính là State Machine
Đây là phần tôi đặc biệt muốn bạn chú ý vì nó liên quan trực tiếp đến cách bạn lập trình DigitalClock Professional.
LINAC có thể được mô hình hóa bằng một State Machine.
Ví dụ đơn giản:
POWER OFF
│
▼
STARTUP
│
▼
SELF TEST
│
┌──────┴──────┐
│ │
FAIL OK
│ │
▼ ▼
FAULT READY
│
▼
BEAM ENABLE
│
▼
BEAM ON
│
▼
DOSE DELIVERY
│
▼
BEAM OFF
│
▼
READY
Nếu xảy ra lỗi:
ANY STATE
│
▼
FAULT
│
▼
BEAM OFF
Đây chính là tư duy state machine.
5. So sánh với DigitalClock của bạn
Ví dụ firmware đồng hồ của bạn có:
MENU
EDIT
SAVE
EXIT
ALARM
MANUAL
AUTO
LINAC cũng có những trạng thái tương tự về mặt tư duy:
OFF
STARTUP
SELF_TEST
READY
ARMED
BEAM_ON
TREATMENT
COMPLETE
FAULT
Điểm khác là:
Với LINAC, việc chuyển trạng thái phải chịu các điều kiện an toàn nghiêm ngặt hơn rất nhiều.
6. “READY” nghĩa là gì?
Đây là một trạng thái rất quan trọng.
READY không có nghĩa là đang phát tia.
Nó có nghĩa gần giống:
Hệ thống đã thỏa mãn các điều kiện cần thiết để có thể cho phép phát tia.
Ví dụ:
Machine powered
+
Subsystem OK
+
Interlocks OK
+
Treatment parameters valid
+
Beam parameters valid
↓
READY
Sau đó mới có thể tiến tới trạng thái cho phép beam.
7. ARM khác BEAM ON
Đây là một khái niệm rất hay.
Có thể hình dung:
READY
↓
ARMED
↓
BEAM ON
ARMED có thể hiểu đơn giản là:
Hệ thống đã được chuẩn bị để cho phép phát beam khi điều kiện cuối cùng được thỏa mãn.
Còn:
BEAM ON
mới thực sự là đang phát bức xạ điều trị.
8. Interlock là “hàng rào”
Hãy hình dung Beam Enable đi qua một chuỗi cửa:
BEAM REQUEST
│
▼
┌────────────────┐
│ Door interlock │
└───────┬────────┘
│
▼
┌────────────────┐
│ Dose monitor │
└───────┬────────┘
│
▼
┌────────────────┐
│ MLC position │
└───────┬────────┘
│
▼
┌────────────────┐
│ Gantry/couch │
└───────┬────────┘
│
▼
┌────────────────┐
│ Beam system │
└───────┬────────┘
│
▼
BEAM ENABLE
Chỉ cần một cửa không hợp lệ:
INTERLOCK
↓
BEAM NOT ENABLED
9. Có thể hiểu Interlock giống if() trong Arduino không?
Về tư duy logic, đúng.
Ví dụ rất đơn giản:
if (doorClosed &&
doseMonitorOK &&
mlcOK &&
gantryOK &&
safetyOK)
{
beamEnable = true;
}
else
{
beamEnable = false;
}
Nhưng trong LINAC thực tế:
⚠️ Không thể đơn giản hóa thành một đoạn if() như vậy.
Có nhiều lớp phần cứng, firmware, monitoring và safety architecture độc lập.
Điều quan trọng ở đây là nguyên lý, không phải một đoạn code cụ thể của máy thương mại.
10. Redundancy – dự phòng
Một trong những nguyên tắc quan trọng nhất của hệ thống an toàn là:
Không đặt toàn bộ niềm tin vào một thành phần duy nhất.
Ví dụ khái niệm:
Sensor A ─────┐
├──> Safety decision
Sensor B ─────┘
Nếu:
A = OK
B = OK
→ bình thường.
Nhưng:
A = OK
B = FAULT
→ phải xử lý bất thường.
11. Tại sao cần redundancy?
Hãy tưởng tượng chỉ có một cảm biến:
Sensor
↓
CPU
↓
BEAM
Nếu sensor bị lỗi theo hướng báo:
"Everything OK"
trong khi thực tế không OK thì hệ thống có thể gặp nguy hiểm.
Do đó:
Measurement A
Measurement B
↓
Comparison
↓
Consistency check
giúp phát hiện lỗi.
12. Watchdog – “người canh gác”
Đây là thứ bạn sẽ thấy rất quen thuộc trong STM32.
Watchdog Timer – WDT
Nó hoạt động theo tư tưởng:
CPU phải liên tục chứng minh rằng nó vẫn đang hoạt động bình thường.
Ví dụ:
CPU
│
├── hoạt động
│
├── gửi heartbeat
│
├── hoạt động
│
├── gửi heartbeat
│
└── hoạt động
Nếu CPU bị treo:
CPU HANG
↓
No heartbeat
↓
WATCHDOG TIMEOUT
↓
SAFE STATE
Trong hệ thống an toàn cao, watchdog là một trong những cơ chế rất quan trọng.
13. Nhưng Watchdog không phải “thuốc chữa mọi lỗi”
Đây là điểm cần nhớ.
Watchdog chỉ giúp phát hiện một số loại lỗi, chẳng hạn:
CPU hang
software stuck
unexpected execution
Nó không tự phát hiện tất cả:
sensor drift
mechanical failure
beam misalignment
incorrect calibration
Vì vậy cần nhiều lớp:
Software monitoring
+
Hardware monitoring
+
Independent interlock
+
Redundancy
+
Physical limits
14. Emergency Stop
Một tầng khác là:
Emergency Stop – E-Stop
Về nguyên tắc:
NORMAL
↓
SYSTEM RUNNING
EMERGENCY
↓
SAFE STATE
Mục tiêu là đưa hệ thống về trạng thái an toàn trong tình huống khẩn cấp.
Điều quan trọng:
Emergency stop không giống một nút “tắt máy bình thường”.
Nó thuộc kiến trúc an toàn của hệ thống.
15. Control System và Safety System không hoàn toàn giống nhau
Đây là một trong những ý quan trọng nhất của Bài 12.
Có thể có:
CONTROL SYSTEM
│
"Làm thế nào?"
│
▼
Điều khiển LINAC
và:
SAFETY SYSTEM
│
"Có được phép?"
│
▼
Cho phép / cấm
Ví dụ:
Control system:
“Tôi muốn phát 100 MU.”
Safety system:
“Các điều kiện an toàn đã thỏa mãn chưa?”
Nếu:
CONTROL = YES
SAFETY = NO
thì:
BEAM KHÔNG ĐƯỢC PHÉP PHÁT.
16. Đây là nguyên tắc cực kỳ quan trọng
Có thể viết thành:
BEAM = CONTROL_REQUEST
AND
SAFETY_PERMIT
Nghĩa là:
CONTROL muốn ON
+
SAFETY cho phép
↓
BEAM ON
Nhưng:
CONTROL muốn ON
+
SAFETY không cho phép
↓
BEAM OFF
Đây là một cách rất tốt để hiểu kiến trúc LINAC.
17. Fault Handling
Giả sử đang điều trị:
BEAM ON
↓
TREATMENT
và xảy ra:
FAULT
hệ thống không nên:
FAULT → tiếp tục bình thường
mà phải chuyển sang:
FAULT
↓
BEAM OFF
↓
SAFE STATE
↓
FAULT INDICATION
↓
Operator intervention
18. Một ví dụ cực kỳ trực quan
Giả sử:
Prescribed = 200 MU
Delivered = 150 MU
Đang phát:
BEAM ON
Sau đó monitor phát hiện vấn đề.
Hệ thống có thể đi theo logic:
150 MU
↓
FAULT
↓
BEAM OFF
Chứ không phải:
FAULT
↓
cố phát tiếp 50 MU
Việc xử lý tiếp theo phụ thuộc vào loại lỗi và quy trình của hệ thống.
19. Tại sao LINAC phức tạp như vậy?
Bởi vì chúng ta đang điều khiển một hệ thống có thể tạo ra:
- năng lượng rất cao
- bức xạ ion hóa
- chuyển động cơ khí chính xác
- nhiều subsystem liên kết
- yêu cầu định lượng liều rất nghiêm ngặt
Cho nên kiến trúc không thể là:
Button → Arduino → Motor
mà gần hơn với:
Treatment System
│
┌────────────┼────────────┐
↓ ↓ ↓
Control Monitoring Safety
│ │ │
└────────────┼────────────┘
↓
State Machine
↓
Beam Permission
↓
Beam
20. Một LINAC thực chất là một “Cyber-Physical System”
Đây là khái niệm rất thú vị.
Nó kết hợp:
Phần mềm
Control
Algorithms
State machine
Monitoring
User interface
Treatment data
Điện tử
Sensors
ADC
Power electronics
Control electronics
Communication
Cơ khí
Gantry
MLC
Jaws
Couch
Motors
Vật lý
Electrons
RF
Magnetic field
X-rays
Dose
An toàn
Interlocks
Redundancy
Watchdog
Emergency handling
Fault detection
Tất cả phải hoạt động cùng nhau.
21. Nhìn LINAC theo tư duy STM32
Nếu lấy kiến thức bạn đang học STM32 làm ví dụ, ta có thể tưởng tượng:
STM32/LINAC concept
│
┌────────────┼────────────┐
↓ ↓ ↓
ADC GPIO Timer
│ │ │
Sensor Actuator Timing
│ │ │
└────────────┼────────────┘
↓
Control
↓
State Machine
↓
Safety
Nhưng LINAC thực tế phức tạp hơn rất nhiều và sử dụng kiến trúc chuyên dụng, không thể đồng nhất với một board STM32 đơn lẻ.
22. Toàn bộ chuỗi điều khiển
Bây giờ chúng ta ghép những gì đã học từ Bài 1 → Bài 12:
USER / TREATMENT PLAN
│
▼
Treatment Setup
│
▼
CONTROL
│
┌───────────┼───────────┐
↓ ↓ ↓
Energy Geometry Dose
│ │ │
└───────────┼───────────┘
↓
SAFETY CHECK
│
┌──────────┴──────────┐
│ │
FAIL OK
│ │
▼ ▼
BEAM OFF READY
│
▼
ARMED
│
▼
BEAM ON
│
▼
DOSE DELIVERY
│
▼
MONITORING
│
┌──────────┴──────────┐
│ │
FAULT OK
│ │
▼ ▼
BEAM OFF CONTINUE
│
▼
DOSE DONE
│
▼
BEAM OFF
Đây chính là bức tranh mà tôi muốn bạn hình dung sau Bài 12.
🧠 23. Năm khái niệm cần thuộc lòng
1. Control
Điều khiển hệ thống.
2. Monitoring
Đo xem hệ thống thực sự đang làm gì.
3. Interlock
Không cho phép hệ thống tiếp tục khi điều kiện không an toàn.
4. Redundancy
Không phụ thuộc vào một đường đo/điều khiển duy nhất.
5. Fail-safe
Khi phát hiện tình trạng không an toàn hoặc không chắc chắn → chuyển về trạng thái an toàn.
🔬 Bài tập suy nghĩ
Bạn thử giải bài toán này:
LINAC đang ở:
READY
Operator yêu cầu:
BEAM ON
200 MU
Nhưng hệ thống phát hiện:
Gantry position = OK
MLC position = OK
Dose monitor = OK
Door = CLOSED
Safety = OK
→ Có thể cho Beam ON.
Sau đó đang ở:
BEAM ON
Delivered = 80 MU
thì:
Monitor channel A = OK
Monitor channel B = bất thường
Câu hỏi:
Theo tư duy safety của LINAC, hệ thống nên làm gì?
A. Bỏ qua channel B và tiếp tục đến 200 MU.
B. Báo lỗi nhưng vẫn tiếp tục.
C. Chuyển sang trạng thái an toàn và ngừng beam để xử lý lỗi.
D. Tăng công suất beam để bù lại.
👉 Nếu bạn chọn C, bạn đã nắm được tư duy cốt lõi của Bài 12.
🔜 BÀI 13
Nếu tiếp tục theo đúng lộ trình, Bài 13 chúng ta sẽ đi vào một phần rất thú vị:
📘 BÀI 13 – GANTRY, COLLIMATOR, JAWS VÀ MLC: “CƠ CẤU CƠ KHÍ” BIẾN TIA X THÀNH HÌNH DẠNG ĐIỀU TRỊ
Ở bài đó chúng ta sẽ mổ xẻ:
Gantry → Collimator → Jaw → MLC → Field → Beam shape
và đặc biệt tôi sẽ giải thích MLC thực sự tạo ra hình dạng chùm tia như thế nào, tại sao nó có hàng chục/lên tới hàng trăm lá, và làm thế nào một chùm tia gần như hình chữ nhật có thể được biến thành hình dạng phức tạp phù hợp với khối u.