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
AdsClientvà thực hiệnclient.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.1là đị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ới127.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:
- 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.
- 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. - 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. - 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. - 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-GhiKhung 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ẽ:- Đọc Target AmsNetId là
192.168.1.110.1.1. - 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. - Thiết lập kết nối TCP tới bộ định tuyến trên PLC tại
192.168.1.110:48898và chuyển tiếp nguyên vẹn khung AMS ban đầu.
- Đọc Target AmsNetId là
-
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:- Nó đọc Target AmsPort là
851. - Tra cứu bảng đăng ký nội bộ để xác định rằng AmsPort
851tương ứng với môi trường chạy PLC đầu tiên. - 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.
- Nó đọc Target AmsPort là
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.