Giao thức ADS: Nền tảng Truyền thông của TwinCAT

Giới thiệu về Giao thức ADS

Giao thức Automation Device Specification (ADS) là một giao thức truyền thông cốt lõi của TwinCAT, cung cấp cơ chế thống nhất để các thành phần phần mềm như môi trường chạy PLC (PLC runtime), ứng dụng HMI (Human-Machine Interface), hay các máy chủ tùy chỉnh có thể giao tiếp với nhau. Phương pháp định địa chỉ của ADS dựa trên hai yếu tố chính:

  • AmsNetId (Địa chỉ thiết bị logic AMS): Đây là một mã định danh gồm 6 byte, dùng để nhận diện một thiết bị logic trong mạng ADS. Nó không đại diện cho một máy vật lý, mà là một thực thể độc lập tham gia vào quá trình truyền thông ADS.
  • AmsPort (Điểm cuối logic AMS): Là một số hiệu gồm 2 byte, chỉ ra một dịch vụ logic cụ thể được cung cấp bởi một thiết bị logic.

Trong kiến trúc giao tiếp ADS, có ba vai trò chính: Bộ định tuyến ADS (ADS Router), Máy khách ADS (ADS Client), và Máy chủ ADS (ADS Server).

Vai trò Khái niệm Định danh AMS (Automation Message Specification)
Bộ định tuyến ADS Thiết bị logic Sở hữu một AmsNetId
Máy chủ ADS Điểm cuối logic Sử dụng AmsNetId của bộ định tuyến, có một AmsPort cố định
Máy khách ADS / Sử dụng AmsNetId của bộ định tuyến, được gán một AmsPort tạm thời, ngẫu nhiên để nhận phản hồi

Để dễ hình dung, hãy xem mạng ADS như một khu phức hợp văn phòng lớn:

  • Bộ định tuyến tương tự như tòa nhà chính, có mã số tòa nhà riêng (AmsNetId), ví dụ "Tòa nhà Thương mại".
  • Máy chủ giống như một căn phòng cụ thể bên trong tòa nhà, có số phòng (AmsPort), ví dụ "Phòng 801" hoặc "Phòng 851", giúp khách truy cập tìm đến một dịch vụ chuyên biệt.
  • Máy khách là những khách đến thăm tòa nhà; khi vào cổng sẽ được cấp một thẻ khách tạm thời (AmsPort tạm thời) để người khác có thể tìm lại khi cần. Họ không phải là người thuê cố định và sẽ rời đi sau khi hoàn thành công việc.

Bộ Định Tuyến ADS (ADS Router)

Bộ định tuyến ADS là một tiến trình phần mềm vận hành hai bộ lắng nghe TCP (TCP listener) khác biệt, đôi khi cũng có thể hoạt động như một máy khách TCP, để quản lý giao tiếp với hai loại đối tượng chính:

Đối tượng Vị trí Ví dụ
Máy khách/Máy chủ ADS cục bộ Cùng máy, cùng tiến trình PLC Runtime, ứng dụng AdsClient do bạn phát triển
Bộ định tuyến ADS từ xa Trên một máy khác (hoặc container khác) Bộ định tuyến ở địa chỉ IP 192.168.0.2

Hai nhóm đối tượng này có bản chất khác nhau, do đó bộ định tuyến mở các kênh giao tiếp riêng biệt cho từng loại.

Kênh Vòng Lặp Nội Bộ (Loopback Channel)

Kênh này phục vụ việc giao tiếp nội bộ trên cùng một máy tính.

Cấu hình Giá trị Mặc định Ý nghĩa
LoopbackIP 127.0.0.1 Địa chỉ IP mà kênh lắng nghe
LoopbackPort 48898 Cổng mà kênh lắng nghe
  • Đối tượng giao tiếp: Các máy khách ADS và máy chủ ADS chạy trên cùng một máy tính. Khi bạn tạo một AdsClient và thực hiện client.Connect(), về cơ bản, nó đang kết nối tới kênh vòng lặp này.
  • Cơ chế Vòng lặp: 127.0.0.1 là địa chỉ IP vòng lặp nội bộ (localhost). Các giao tiếp thông qua kênh này (ví dụ: máy khách/máy chủ trên cùng máy kết nối tới 127.0.0.1:48898) không đi qua card mạng vật lý mà được xử lý trực tiếp bên trong nhân hệ điều hành.

Kênh Ngoài (External Channel)

Kênh này được thiết lập để giao tiếp với các bộ định tuyến ADS nằm trên các máy tính khác trong mạng.

Cấu hình Giá trị Mặc định Ý nghĩa
TcpIP 0.0.0.0 Lắng nghe trên tất cả các card mạng của máy chủ (không thể cấu hình)
TcpPort 48898 Cổng mà kênh lắng nghe
  • Đối tượng giao tiếp: Các bộ định tuyến ADS từ xa.
  • Mục đích: Đây là kênh mà các bộ định tuyến từ xa sử dụng để kết nối vào thông qua mạng IP (ví dụ: 192.168.0.2:48898), cho phép giao tiếp giữa các máy tính khác nhau hoặc các phân đoạn mạng.

Các Điểm Quan Trọng Khác

Địa chỉ IP của các kênh

Mặc dù cả hai kênh (Loopback và External) đều sử dụng cổng 48898, chúng được gắn với các địa chỉ IP khác nhau (127.0.0.1 và 0.0.0.0). Do đó, chúng không gây ra xung đột. Hệ điều hành phân biệt các kết nối TCP dựa trên bộ bốn giá trị (IP nguồn, cổng nguồn, IP đích, cổng đích), coi 127.0.0.1:48898 và 0.0.0.0:48898 là hai bộ lắng nghe riêng biệt.

Kênh nào cần được nhà phát triển quan tâm?

Việc bạn cần chú ý đến kênh nào phụ thuộc vào vai trò của bạn trong hệ thống ADS:

Vai trò của bạn Kênh cần quan tâm Địa chỉ cần cấu hình
Phát triển ADS Client/Server cục bộ Kênh vòng lặp (Loopback) Mặc định 127.0.0.1:48898, thường không cần thay đổi
Cấu hình giao tiếp đa máy Kênh ngoài (External) Thêm IP của bộ định tuyến từ xa vào bảng định tuyến
Chạy bộ định tuyến độc lập Cả hai kênh Đảm bảo cổng không trùng với các dịch vụ TwinCAT khác

Nguồn gốc của Bộ Định Tuyến ADS

Nhiều người dùng TwinCAT vẫn sử dụng giao tiếp ADS mà không cần phải tự mình tạo ra một bộ định tuyến ADS. Vậy bộ định tuyến này đến từ đâu?

Khi bạn cài đặt TwinCAT XAE (môi trường phát triển) hoặc XAR (môi trường runtime), trình cài đặt sẽ đăng ký một dịch vụ hệ thống trên Windows của bạn với tên TwinCAT System Service (tên dịch vụ: TcSysSrv). Dịch vụ này tích hợp sẵn bộ định tuyến ADS và thực hiện các chức năng sau:

  1. Tự động khởi động: Hoạt động như một dịch vụ Windows, nó khởi động cùng hệ thống mà không cần can thiệp thủ công.
  2. Tự động lắng nghe 127.0.0.1:48898: Đây chính là "Kênh Vòng lặp nội bộ" đã đề cập.
  3. Tự động lắng nghe 0.0.0.0:48898: Đây là "Kênh Ngoài" cho phép các bộ định tuyến từ xa kết nối.
  4. Tự động tạo AmsNetId cho máy cục bộ: Thường được suy ra từ địa chỉ IP của máy, ví dụ 192.168.1.10.1.1.
  5. Tự động tải bảng định tuyến: Đọc thông tin từ file C:\TwinCAT\3.1\Target\StaticRoutes.xml.

Khi bạn viết một đoạn mã đơn giản để kết nối với PLC như sau:

var myClient = new AdsClient();
myClient.Connect(new AmsAddress("192.168.1.110.1.1", 851)); // Kết nối tới PLC tại AmsNetId và AmsPort 851

Dưới đây là chuỗi giao tiếp đầy đủ diễn ra ở lớp dưới:

myClient (ứng dụng của bạn)
│
│ Thiết lập kết nối TCP tới 127.0.0.1:48898 (Dịch vụ Hệ thống TwinCAT)
▼
TwinCAT System Service (Chứa bộ định tuyến ADS tích hợp)
│
│ Tra cứu bảng định tuyến, chuyển tiếp qua TCP đến bộ định tuyến từ xa
▼
Bộ định tuyến ADS trên máy tính TwinCAT từ xa (ví dụ: PLC)
│
│ Phân phối nội bộ
▼
Môi trường chạy PLC từ xa (AmsPort 851)

Máy Khách ADS (ADS Client)

Một máy khách ADS hoạt động bằng cách thiết lập một kết nối TCP tới cổng vòng lặp nội bộ của bộ định tuyến cục bộ (127.0.0.1:48898). Sau đó, nó sử dụng kết nối TCP này để gửi và nhận các khung AMS (AMS frames).

Thuộc tính Giá trị Mặc định Mô tả
Địa chỉ IP của Client Không có Client chủ động kết nối tới bộ định tuyến, hệ điều hành tự động gán IP nguồn tạm thời
Cổng TCP của Client Không có Hệ điều hành tự động gán cổng nguồn tạm thời (ephemeral port)
AmsNetId của Client Kế thừa từ AmsNetId của bộ định tuyến cục bộ Client không có AmsNetId độc lập; nó thuộc về bộ định tuyến cục bộ
AmsPort của Client Được bộ định tuyến cục bộ gán động Bộ định tuyến gán một AmsPort tạm thời cho mỗi Client kết nối

Máy khách ADS có thể được hình dung như một "người thuê" của bộ định tuyến. Khi nó "chuyển đến" tòa nhà bộ định tuyến, bộ định tuyến sẽ cấp cho nó một "số phòng" (AmsPort tạm thời). Địa chỉ gửi mà thế giới bên ngoài nhìn thấy sẽ là "AmsNetId của bộ định tuyến + AmsPort tạm thời được gán". Máy khách không cần sở hữu địa chỉ IP hay cổng TCP riêng; nó sử dụng tài nguyên của bộ định tuyến.

Máy Chủ ADS (ADS Server)

Máy chủ ADS hoạt động tương tự như máy khách, cũng kết nối tới cổng vòng lặp nội bộ của bộ định tuyến cục bộ thông qua TCP và không có địa chỉ IP hay cổng TCP riêng.

Điểm khác biệt cốt lõi là máy chủ ADS sử dụng một AmsPort cố định, được chỉ định khi bạn khởi tạo máy chủ. Một số ví dụ điển hình về các AmsPort cố định:

  • NC (Numerical Control) Ring 0: Thường là hệ thống điều khiển số của PLC, sử dụng cổng 501.
  • TwinCAT 3 PLC Runtime System 1: Hệ thống runtime PLC đầu tiên, sử dụng cổng 851.
  • TCP/IP Server (TF6310): Mô-đun giao tiếp TCP/IP, sử dụng cổng 10201.
Thuộc tính Giá trị Ai quyết định? Mô tả
Địa chỉ IP của Server Không có — Server chủ động kết nối tới bộ định tuyến, hệ điều hành tự động gán IP nguồn tạm thời
Cổng TCP của Server Không có — Hệ điều hành tự động gán cổng nguồn tạm thời (ephemeral port)
AmsNetId của Server Kế thừa từ AmsNetId của bộ định tuyến cục bộ Bộ định tuyến Server không có AmsNetId độc lập; nó thuộc về bộ định tuyến cục bộ
AmsPort của Server Ví dụ: 501, 851, 26000 Nhà phát triển Đây là định danh của Server, phải nằm trong phạm vi hợp lệ

Bảng Định Tuyến ADS

Bảng định tuyến ADS là một bản đồ ánh xạ từ AmsNetId tới địa chỉ IP tương ứng. Khi một bộ định tuyến ADS nhận được một khung AMS, nó sẽ kiểm tra AmsNetId đích, tra cứu bảng này để tìm địa chỉ IP của bộ định tuyến đối tác, sau đó chuyển tiếp khung đó qua TCP.

Để minh họa quy trình chuyển tiếp, hãy xem xét tình huống giao tiếp giữa một máy tính xách tay (có IP 192.168.1.95 và AmsNetId cục bộ 192.168.1.95.1.1) và một bộ điều khiển PLC dòng CX (có IP 192.168.1.110 và AmsNetId 192.168.1.110.1.1).

Quy trình chuyển tiếp diễn ra qua ba bước chính:

  • Bước 1: Máy Khách Cục Bộ → Bộ Định Tuyến Cục Bộ (Kênh Vòng lặp nội bộ)
    Máy khách gửi một khung AMS với tiêu đề chứa thông tin sau:

    Source Ams: [192.168.1.95.1.1 : Cổng Ams tạm của Client]
    Target Ams: [192.168.1.110.1.1 : 851]
    Dữ liệu: Lệnh ADS Đọc/Ghi/Đọc-Ghi
    

    Khung AMS này được gửi tới bộ định tuyến cục bộ thông qua kết nối TCP trên cổng vòng lặp (127.0.0.1:48898).

  • Bước 2: Bộ Định Tuyến Cục Bộ → Bộ Định Tuyến PLC (Kênh Ngoài)
    Sau khi nhận khung AMS, bộ định tuyến cục bộ sẽ:

    1. Đọc Target AmsNetId là 192.168.1.110.1.1.
    2. Tra cứu bảng định tuyến để tìm địa chỉ IP tương ứng với 192.168.1.110.1.1, kết quả là 192.168.1.110.
    3. Thiết lập kết nối TCP tới bộ định tuyến trên PLC tại 192.168.1.110:48898 và chuyển tiếp nguyên vẹn khung AMS ban đầu.
  • Bước 3: Bộ Định Tuyến PLC → Máy Chủ Runtime PLC (Kênh Vòng lặp nội bộ)
    Khi bộ định tuyến trên PLC nhận được khung AMS:

    1. Nó đọc Target AmsPort là 851.
    2. Tra cứu bảng đăng ký nội bộ để xác định rằng AmsPort 851 tương ứng với môi trường chạy PLC đầu tiên.
    3. Khung AMS sau đó được phân phối tới môi trường chạy PLC thông qua kênh vòng lặp nội bộ của PLC.

Hai lưu ý quan trọng:

  • Nếu bạn đang chạy mã PLC mô phỏng trên chính máy tính xách tay, thì Target AmsNetId sẽ là AmsNetId của bộ định tuyến cục bộ. Trong trường hợp này, sau khi máy khách gửi khung AMS (Bước 1), bộ định tuyến cục bộ nhận ra đích là chính nó và sẽ bỏ qua việc tra cứu bảng định tuyến, chuyển thẳng đến Bước 3 để phân phối nội bộ dựa trên AmsPort.
  • Việc cấu hình định tuyến cần được thực hiện trên cả hai phía. Nếu thiết bị A có cấu hình định tuyến tới B, thì thiết bị B cũng cần có cấu hình định tuyến ngược lại tới A để các khung phản hồi có thể được gửi trả về chính xác.

Vai Trò TCP trong Giao Tiếp ADS

Khi xem xét từ góc độ giao thức TCP, ba vai trò trong ADS được phân loại như sau:

Vai trò ADS Vai trò TCP Hành vi
Máy Khách ADS TCP Client Chủ động thiết lập kết nối tới bộ định tuyến ADS
Máy Chủ ADS TCP Client Chủ động thiết lập kết nối tới bộ định tuyến ADS
Bộ Định Tuyến ADS TCP Server/TCP Client Vừa lắng nghe (chờ các kết nối đến), vừa chủ động kết nối tới các bộ định tuyến từ xa

Mối Quan Hệ Giữa Thông Điệp AMS và Thông Điệp TCP

Mối quan hệ giữa một thông điệp AMS và một gói tin TCP có thể được ví von như mối quan hệ giữa một lá thư và chiếc xe tải chở thư.

Điều quan trọng cần nhấn mạnh là AmsNetId và AmsPort của ADS hoàn toàn không có mối liên hệ trực tiếp nào với địa chỉ IP và cổng TCP. Việc sử dụng địa chỉ IP kết hợp với hậu tố .1.1 để tạo thành AmsNetId chỉ là một quy ước thuận tiện mà thôi.

  • Một khung AMS (AMS frame) là một đơn vị dữ liệu giao thức được định nghĩa độc lập.
  • Bản thân khung AMS không chứa bất kỳ thông tin TCP/IP nào; nó hoàn toàn "không biết" về địa chỉ IP hay cổng TCP. Chúng được gói gọn trong các lớp giao thức thấp hơn.

Thẻ: TwinCAT ADS AmsNetId AmsPort PLC

Đăng vào ngày 26 tháng 10 lúc 02:24