# Datasource đầu ra

> Ghi dự đoán và điểm đặt (setpoint) ngược về các hệ thống bên ngoài — cấu hình một đầu ra OPC-UA, MQTT hoặc Modbus và xác minh bằng một lần ghi thử.

Một **datasource đầu ra** ghi dữ liệu ra một hệ thống bên ngoài — một PLC, broker, hoặc
ứng dụng điều khiển. Khác với datasource đầu vào, đầu ra không có mô hình hay ánh xạ tag:
chúng nhận một payload JSON và chuyển nó tới đích.

**Ghi thử ở thời điểm hiện tại**

Datasource đầu ra hiện hỗ trợ **ghi thử theo yêu cầu** — mỗi lần ghi được gửi
riêng lẻ để bạn có thể xác minh kết nối và địa chỉ. Các đường ghi sản xuất theo lịch,
theo lô là một cải tiến trong tương lai.

## Các đầu ra được hỗ trợ

| Giao thức | Khả năng |
|----------|------------|
| OPC-UA   | Ghi vào một node (đồng bộ) |
| MQTT     | Publish tới một topic (QoS / retain có thể cấu hình) |
| Modbus TCP | Ghi vào holding register hoặc coil |

## Cấu hình một đầu ra

1. ### Tạo đầu ra

   Vào **Datasources → Output**, bấm **+ Create**, và chọn giao thức.

2. ### Điền cấu hình kết nối

   Mỗi giao thức có các trường riêng. Các trường bí mật bị che thành `***` sau khi lưu.

   
     
**OPC-UA**

     ```json
     {
       "endpoint": "opc.tcp://your-plc-host:4840",
       "securityPolicy": "None",
       "authentication": "Anonymous"
     }
     ```

     
     
**MQTT**

     ```json
     {
       "brokerUrl": "mqtt://your-broker-host:1883",
       "topic": "devices/plc/setpoint",
       "qos": 1,
       "retain": false,
       "username": "your-username",
       "password": "your-password"
     }
     ```

     
     
**Modbus TCP**

     ```json
     {
       "host": "your-plc-host",
       "port": 502,
       "slaveId": 1,
       "defaultCoilAddress": 1000,
       "defaultRegisterAddress": 40001
     }
     ```

     Địa chỉ theo quy ước Modicon (coil từ `1`, holding register từ
     `40001`).

     
   

3. ### Lưu và bật

   Lưu đầu ra, rồi bật nó. Một đầu ra phải được **bật** trước khi nó
   chấp nhận một lần ghi thử.

## Gửi một lần ghi thử

Mở chi tiết của đầu ra, tìm hành động **Test Write**, nhập một payload JSON, và
gửi đi. Kết quả hiển thị thành công hoặc lỗi giao thức mà đích trả về.

  
**OPC-UA**

  Ghi một node duy nhất:

  ```json
  {
    "nodeId": "ns=2;s=Temperature",
    "value": 42.5
  }
  ```

  
  
**MQTT**

  Publish một payload:

  ```json
  {
    "setpoint": 65.0,
    "mode": "heating"
  }
  ```

  
  
**Modbus**

  Ghi một hoặc nhiều register:

  ```json
  {
    "addresses": [
      { "address": 1000, "value": 100 },
      { "address": 1002, "value": 250 }
    ]
  }
  ```

  

Một lần ghi thành công trả về kết quả thành công; một lỗi giao thức trả về một thông báo như
`OPC UA: node not found` hoặc `Modbus: address out of range`.

## Nếu có gì đó sai

| Triệu chứng | Nguyên nhân khả dĩ |
|---------|--------------|
| `Connection timeout` | Đích không truy cập được — kiểm tra đường mạng, host và cổng (MQTT `1883`, Modbus `502`). |
| Lỗi datasource bị tắt | Bật đầu ra trước khi gửi một lần ghi thử. |
| `Node not found` (OPC-UA) | Kiểm tra định dạng NodeId và rằng node tồn tại trên máy chủ. |
| Địa chỉ ngoài phạm vi (Modbus) | Ở trong dải Modicon (coil `1+`, holding register `40001+`). |
| `Admin only` (403) | Lệnh ghi thử cần một tài khoản admin. |

Xem runbook [Khắc phục sự cố](/vi/troubleshooting/) để biết thêm.

## Bước tiếp theo

  - [Kết nối một đầu vào](/vi/configure/input-datasources/) — Truyền dữ liệu cảm biến vào để dẫn động suy luận.
  - [Giám sát runtime](/operate/monitoring/) — Độ trễ, thông lượng và các KPI.
