Mô hình mạng EtherCAT
Cấu trúc mạng
Trong hệ thống điều khiển chuyển động tốc độ cao, giao thức truyền thông qua mạng EtherCAT là một lựa chọn đáp ứng được các tiêu chí khắt khe về độ chính xác, tốc độ đồng bộ thời gian thực, khả năng mở rộng và độ tin cậy.

Công nghệ EtherCAT cung cấp các tùy chọn cấu trúc mạng linh hoạt, khiến nó trở thành lựa chọn tuyệt vời cho các mạng lớn và phức tạp.
Mạng EtherCAT chứa một thiết bị chính điều khiển mạng và các thiết bị phụ tiếp theo.
Các thiết bị phụ thường có hai hoặc nhiều cổng cho phép chúng được kết nối với nhau.
Các khả năng về cấu trúc mạng bao gồm đường, cây, sao—hoặc bất kỳ sự kết hợp nào trong số đó.
Vì EtherCAT hoạt động ở chế độ song công hoàn toàn—tận dụng cặp đường trong cáp Ethernet hai chiều—bất kỳ cấu trúc nào cũng có thể duy trì cấu trúc vòng logic, nghĩa là khung sẽ luôn có thể quay lại thiết bị chính sau khi được gửi đi. Tính linh hoạt này cũng loại bỏ nhu cầu về bộ chuyển mạch mạng.
Cấu hình phần cứng
Kiến trúc hệ thống của một hệ EtherCAT có thể được chia thành ba thành phần chính: tệp cấu hình ENI (EtherCAT Network Information), thiết bị chủ EtherCAT master và thiết bị tớ EtherCAT slave.

Tệp cấu hình EtherCAT được thiết bị chủ sử dụng để cấu hình và khởi tạo mạng EtherCAT. Tệp cấu hình chứa thông tin chi tiết về cấu hình slave và cấu trúc mạng.
Thiết bị chủ, còn được gọi là thiết bị EtherCAT master, chịu trách nhiệm quản lý mạng EtherCAT, trao đổi dữ liệu với các thiết bị tớ và giao tiếp với các ứng dụng bên ngoài.
Các thiết bị tớ, được gọi là thiết bị EtherCAT slave, thường là cảm biến, bộ điều khiển truyền động, và I/O kỹ thuật số/tương tự đơn giản, thực hiện các tác vụ cụ thể trong hệ thống tự động hóa.
Thiết bị sử dụng
Thiết bị phần cứng
| STT | Mã hiệu | Mô tả | Số lượng | Ghi chú |
| 1 | XDH-60A64-E | Bộ điều khiển 60 đầu vào/ra, tích hợp cổng mạng Ethernet và EtherCAT | 1 | |
| 2 | DS5C1-20P7-PTA | Driver điều khiển động cơ Servo 0.7kW, tích hợp cổng truyền thông mạng EtherCAT | 2 | |
| 3 | MS6H-80CS30B1-20P7 | Động cơ servo 0.7kW | 2 | |
| 4 | CM-P07A-M-03 | Cáp động cơ dài 3m | 2 | |
| 5 | CP-SP-M-03 | Cáp encoder dài 3m | 2 | |
| 6 | JC-CB-0P3 | Cáp EtherCAT 30cm | 1 | |
| 7 | JC-CB-1P5 | Cáp EtherCAT 150cm | 1 |

Phần mềm: XINJE PLC program tool đã được cài đặt trên máy tính cá nhân.
Tài liệu liên quan
- Xinje PLC Catalog : Download
- XDXL Hardware Manual: Download
- XDXL Instruction Manual (lệnh cơ bản): Download
- XDXL Positioning Manual (lệnh điều khiển xung) : Download
- XDHXLH Motion Control Manual (lệnh điều khiển mạng) : Download
Tài liệu “XDHXLH Motion Control Manual” là tài liệu về tập lệnh lập trình trực tiếp cho chuẩn EtherCAT của PLC Xinje
Cấu hình thông số mạng
Đấu nối phần cứng
Tuân theo quy tắc:
- Cáp đầu ra của thiết bị này là đầu vào của thiết bị kế tiếp
- Slave đầu tiên tính từ Master sẽ tự nhận ID = 0
- Các ID tiếp theo sẽ tăng dần lên tính từ đầu line đến cuối line
Cấu hình phần mềm
Mở phần mềm và tạo 1 dự án mới

Trong cây thư mục Project, bật cửa sổ EtherCAT Master:
- KV1: Khu vực cấu hình thông số trạm master
- KV2: Khu vực khai báo các trạm slave
- KV3: Khu vực cấu hình thông số các trạm slave khi được trỏ tới

Cấu hình Master
Nhấn chuột phải vào PLC Master, chọn Master Configuration
Cấu hình Chu kỳ đồng bộ, dưới 16 trục thường để 500us, trên 16 trục đặt là 1000us

Cài đặt thời gian chờ giao tiếp của máy tính phía trên và các chức năng liên quan của EtherCAT.

Cấu hình Slave
Từ giao diện EtherCAT Master, nhấn vào biểu tượng Scan để tìm các thiết bị đang được kết nối đến thiết bị chủ.

Kết quả có 2 Slave mang ID0 và ID1 được hiển thị

- Trên giao diện General có các phím chức năng như sau:

Import: nhập file ESI
Export: xuất file ESI
Write: Tải xuống các tham số cấu hình vào bộ nhớ flash của PLC mà không cần dừng PLC.
Lưu ý:
(1) Cấu hình đã tải xuống được lưu trữ trong bộ nhớ flash của PLC. Nhấp vào kích hoạt để có hiệu lực.
(2) Tải xuống ở đây chỉ dành cho gỡ lỗi PLC (cũng có thể lưu trong trường hợp mất điện).
Vui lòng đánh dấu vào tùy chọn tham số EtherCAT khi tải xuống dự án PLC, nếu không sẽ không có dữ liệu cấu hình Etherecat khi tải lên dự án PLC.
Read: Thông tin cấu hình trong PLC được tải lên máy tính bên trên mà không cần dừng PLC.
Activate: Dữ liệu cấu hình trong PLC hiện tại sẽ có hiệu lực ngay lập tức. Nó sẽ chuyển từ bất kỳ trạng thái nào của trạm slave sang Init, rồi sang trạng thái OP (Init → PreOP → Safeop → OP).
Việc này tương đương với việc dừng rồi chạy lại PLC mà không cần phải dừng PLC.
FuncMappingNum: Giá trị này là số để gán chỉ số của 1 trục (Axis) cho 1 trạm (Station). Ví dụ: Trạm có ID 0 đang liên kết đến trục Axis 0, thay đổi số này sẽ gán trục khác cho trạm số 0.
- Giao diện Expert Process Data

SyncManager 0 và 1 sử dụng cho Giao thức hộp thư SDO, là đối tượng dữ liệu truyền nhận không có tính chu kỳ
SyncManager 2 và 3 sử dụng cho truyền nhận tín hiệu vào/ra PDO, là đối tượng dữ liệu truyền nhận có tính chu kỳ
PDO Assign: tương ứng với mỗi SM sẽ có tối đa 4 PDO, mỗi PDO không vượt quá kích thước 24Byte.
Outputs tương ứng với RxPDO gồm 4 bảng có địa chỉ từ 1600h – 1603h
Inputs tương ứng với TxPDO gồm 4 bảng có địa chỉ từ 1A00h – 1A03h
Các bảng được liệt kê ở PDO List
Với mỗi bảng ta có thể cấu hình các thanh ghi ở bên trong 1 cách linh hoạt, tuy nhiên RxPDO và TxPDO cũng quy định 1 số thanh ghi bắt buộc phải được cấu hình:
RxPDO gồm ControlWord, TargetPos và Mode of Op
TxPDO gồm StatusWord, Actual Pos, Actual Vel và Mode of Op Display
- Giao diện Launch Parameters

Một số thông số được khởi tạo giá trị ban đầu khi khởi động sẽ được cấu hình ở đây
- Giao diện IO Mapping
Các thông số trạng thái và tín hiệu phản hồi được lưu vào vùng nhớ có địa chỉ cấu hình được của PLC

Lưu ý: Các thông số mặc định về cơ bản không cần thay đổi là có thể chạy được thiết bị. Chỉ cần chú ý thông số FuncMappingNum để gán chọn ID cho Axis
Cấu hình trục chuyển động đơn (Single Axis)
Tại cây thư mục Project, tìm đến thư mục Axis Configuration để cấu hình số trục chuyển động

Cài đặt [the number of axes shown] xác định số trục sẽ sử dụng trong cấu hình. Nó không liên quan gì đến số trục thực tế được kết nối vào hệ thống. (có thể kết nối nhiều thiết bị phần cứng hơn số trục sử dụng thực tế trong ứng dụng)
Tại giao diện, đặt số trục cần chạy là 2:

Lưu ý: thông số From the stand no. chính là số FuncMappingNum để gán cho trục hiện tại. Các thông số khác để mặc định.
- Giao diện Unit Conversion

Chọn đơn vị theo cơ cấu cơ khí đang sử dụng: số xung, milimet hoặc độ
Number of pulses per turn: Số xung encoder khi trục động cơ quay được 1 vòng
The amount of movement per turns: số đơn vị đo thực hiện được khi động cơ quay 1 vòng
Cấu hình Nhóm cho nhiều trục chuyển động nội suy (Group Axis)
Tại cây thư mục Project, tìm đến thư mục Axis Group Configuration để cấu hình số trục chuyển động
Cài đặt [the number of axes shown] xác định số nhóm trục sẽ sử dụng trong cấu hình.
Tại giao diện, đặt số nhóm trục cần chạy là 1, sẽ bao gồm 2 trục XY, lấy trục 0 làm trục X và trục 1 làm trục Y.

Ngoài ra, cần cài đặt 1 số thông số giới hạn cho hệ thống
Tập lệnh lập trình cho trục đơn
Dưới đây là một số lệnh cơ bản áp dụng để điều khiển cho 1 trục chuyển động không rang buộc với nhau. Chi tiết xem thêm Mục 5-1. Single axis function.
Bảng cờ báo và thanh ghi trạng thái cần quan tâm, chi tiết xem Mục 5-1-3 Related coil and register.
| Axis state coil (coil start address is decided by SFD814) | ||
| Address | Definition | Note |
| M20000+50*N | Axis enable | ON: axis enable state |
| M20001+50*N | Axis error | ON: axis error state |
| M20002+50*N | Axis motion | ON: the axis is in motion, the current speed of the axis is greater than the motion speed detection value and exceeds the motion detection filtering time, and the end of the motion is set to off |
| M20003+50*N | At the position | ON: the command movement is completed, and the deviation between the given and feedback is within the positioning completion width |
| M20004+50*N | At the origin | ON: the axis is within the electrical origin range |
| M20005+50*N | Speed warning | Not support at the moment |
| M20006+50*N | Acceleration warning | Not support at the moment |
| M20007+50*N | Deceleration warning | Not support at the moment |
| M20008+50*N | Axis motion completion | ON: command movement completion |
| Axis state register (register start address is decided by SFD816) | ||||
| Address | Definition | Data type | Unit | Note |
| D20000+200*N | Axis state | INT16U | – | 0: axis disable 1: axis enabled, not move 2: axis in motion (end speed is 0, include AHALT) 3: axis in continuous motion 4: axis in synchronous motion 5: axis in homing 6: axis in deceleration stop (A STOP) 7: axis error 8: the axis is in axis group motion |
| D20001+200*N | Error code | INT16U | – | Refer to the error code |
| D20008+200*N | Command given pulse | FP64 | Pulse | Current given pulse of motion command |
| D20012+200*N | Command end position | FP64 | Command unit | Target position of motion command |
| D20016+200*N | Axis given position | FP64 | Command unit | Current given position of motion command |
| D20020+200*N | Axis given speed | FP64 | Command unit/s | Current given speed of motion command |
| D20024+200*N | Axis given acceleration/deceleration | FP64 | Command unit /s2 | Current given acceleration and deceleration of motion command |
| D20040+200*N | Axis feedback pulse | FP64 | Pulse | Axis actual motion pulse |
| D20044+200*N | Axis feedback position | FP64 | Command unit | Axis actual motion position |
| D20048+200*N | Axis feedback speed | FP64 | Command unit/s | Axis actual motion speed |
| D20188+200*N | CYCSUP absolute position | FP64 | Command unit | Total compensation amount of CYCSUP command |
Kích hoạt trục Axis enable A_PWR
Trước khi di chuyển 1 trục nào đó thì cần sử dụng lệnh A_PWR để bật trục đó lên.
Cú pháp: A_PWR S0 S1 S2
Kiểu kích hoạt lệnh bằng mức
S0: Thanh ghi báo trạng thái 16 bit
S1: Cờ báo trạng thái
S2: Trục cần tác động enable
Ví dụ enable trục 0 và trục 1

Xóa lỗi A_RST
Khi 1 trục báo lỗi, cần xóa lỗi trước khi chạy lại trục đó
Cú pháp: A_RST S0 S1 S2
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | ErrCode | INT16U | Báo mã lỗi | |
| S1 | Done | Bool | Thực thi lệnh hoàn thành | |
| S1+1 | Busy | Bool | Đang thực thi lệnh | |
| S1+2 | Error | Bool | Thực thi lệnh bị lỗi | |
| S2 | Axis | INT16U |
Ví dụ reset trục

==> Tải code mẫu: tại đây
Lênh chỉnh sửa vị trí trục A_WRITE
Chỉnh sửa vị trí hiện tại của 1 trục
Cú pháp: A_WRITE S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Position | FP64 | Command unit | Vị trí cần thiết lập |
| S0+4 | Mode | INT16U | 0: vị trí tuyệt đối
1: vị trí tương đối (cộng S0 vào vị trí hiện tại) |
|
| S0+5 | BufferMode | INT16U | Chưa hỗ trợ | |
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | Axis | INT16U |
Ví dụ chỉnh sửa vị trí về 0:

==> Tải code mẫu: tại đây
Lệnh về gốc A_ZRN
Lệnh thực hiện định vị vị trí điểm gốc tọa độ của trục được chỉ định
Cú pháp: A_ZRN S0 S1 S2
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | ErrCode | INT16U | Báo mã lỗi | |
| S1 | Done | Bool | Thực thi lệnh hoàn thành | |
| S1+1 | Busy | Bool | Đang thực thi lệnh | |
| S1+2 | Active | Bool | Đang thực thi lệnh | |
| S1+3 | Abort | Bool | Thực thi lệnh bị gián đoạn | |
| S1+4 | Error | Bool | Thực thi lệnh bị lỗi | |
| S2 | Axis | INT16U |
Một số cài đặt cần thực hiện trước khi chạy lệnh về gốc homing:
- Xác định các cảm biến giới hạn vị trí phía dương và phía âm của trục chuyển động (nếu có)

X1, X7 là cảm biến dạng thường đóng (mức tích cực thấp) thì cài đặt Polarity Reversal type
- Các thông số homing

X6 là cảm biến home dạng NC
Chiều chạy về phía âm khi homing (negative)
Tốc độ về gốc 25 mm/s
Tốc độ bò 10 mm/s

Ví dụ 1: Về gốc từ vị trí dương của trục chuyển động

Ví dụ 2: Về gốc từ vị trí âm của trục chuyển động

Trục sẽ di chuyển theo chiều âm với tốc độ 25mm/s, đến khi gặp cảm biến giới hạn thì đảo chiều quay 25mm/s.
==> Tải code mẫu: tại đây
Dừng trục A_STOP
Dừng có giảm tốc hoặc dừng khẩn cấp trục đang chuyển động
Cú pháp: A_STOP S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Deceleration | FP64 | Command unit/s^2 | |
| S0+4 | Jerk | FP64 | Command unit/s^3 | |
| S0+8 | StopMode | INT16U | 0: Dừng giảm tốc
1: Dừng khẩn cấp 2: Dừng khẩn và tắt kích hoạt trục |
|
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Abort | Bool | Thực thi lệnh bị gián đoạn | |
| S2+3 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | Axis | INT16U |
Ví dụ Stop trục

Lệnh chạy tương đối A_MOVER
Lệnh di chuyển theo một vị trí tương đối, có thể bị gián đoạn lệnh hiện tại và thực hiện lệnh mới trong khi di chuyển.
Cú pháp: A_MOVER S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Position | FP64 | Command unit | |
| S0+4 | Velocity | FP64 | Command unit/s | |
| S0+8 | Acceleration | FP64 | Command unit/s^2 | |
| S0+12 | Deceleration | FP64 | Command unit/s^2 | |
| S0+16 | Jerk | FP64 | Command unit/s^3 | |
| S0+20 | ContinueusMode | INT16U | 0: không cập nhật
1: cho phép thay đổi giá trị khi chạy lệnh |
|
| S0+21 | Direction | INT16U | 0: Không có hướng
1: Hướng thuận 2: Hướng ngược 3: Đường đi ngắn nhất 4: Hướng hiện tại |
|
| S0+22 | BufferMode | INT16U | 0: Chế độ cho phép làm gián đoạn các lệnh chuyển động khác
1: Chế độ lưu bộ nhớ đệm |
|
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Active | Bool | Đang thực thi lệnh | |
| S2+3 | Abort | Bool | Thực thi lệnh bị gián đoạn | |
| S2+4 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | Axis | INT16U |
Ví dụ:

Đồ thị vận tốc và vị trí

Lệnh chạy tuyệt đối A_MOVEA
Lệnh di chuyển theo một vị trí tuyệt đối, có thể gián đoạn lệnh hiện tại và thực hiện lệnh mới trong khi di chuyển.
Cú pháp: A_MOVEA S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Position | FP64 | Command unit | |
| S0+4 | Velocity | FP64 | Command unit/s | |
| S0+8 | Acceleration | FP64 | Command unit/s^2 | |
| S0+12 | Deceleration | FP64 | Command unit/s^2 | |
| S0+16 | Jerk | FP64 | Command unit/s^3 | |
| S0+20 | ContinueusMode | INT16U | 0: không cập nhật
1: cho phép thay đổi giá trị khi chạy lệnh |
|
| S0+21 | Direction | INT16U | 0: Không có hướng
1: Hướng thuận 2: Hướng ngược 3: Đường đi ngắn nhất 4: Hướng hiện tại |
|
| S0+22 | BufferMode | INT16U | 0: Chế độ cho phép làm gián đoạn các lệnh chuyển động khác
1: Chế độ lưu bộ nhớ đệm |
|
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Active | Bool | Đang thực thi lệnh | |
| S2+3 | Abort | Bool | Thực thi lệnh bị gián đoạn | |
| S2+4 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | Axis | INT16U |
Ví dụ:
Di chuyển từ vị trí 0 đến vị trí 3000 với tốc độ 1500, tăng giảm tốc 1000 đơn vị.

Đồ thị vận tốc và vị trí:
Chạy chế độ tốc độ A_VELMOVE
Chạy liên tục ở một tốc độ đặt sẵn
Cú pháp: A_VELMOVE S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Velocity | FP64 | Command unit/s | |
| S0+4 | Acceleration | FP64 | Command unit/s^2 | |
| S0+8 | Deceleration | FP64 | Command unit/s^2 | |
| S0+12 | Jerk | FP64 | Command unit/s^3 | |
| S0+16 | ContinueusMode | INT16U | 0: không cập nhật
1: cho phép thay đổi giá trị khi chạy lệnh |
|
| S0+17 | Direction | INT16U | 0: Không có hướng
1: Hướng thuận 2: Hướng ngược 3: Đường đi ngắn nhất 4: Hướng hiện tại |
|
| S0+18 | BufferMode | INT16U | 0: Chế độ cho phép làm gián đoạn các lệnh chuyển động khác
1: Chế độ lưu bộ nhớ đệm |
|
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Active | Bool | Đang thực thi lệnh | |
| S2+3 | Abort | Bool | Thực thi lệnh bị gián đoạn | |
| S2+4 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | Axis | INT16U |
Ví dụ:

==> Tải code mẫu: tại đây
Lệnh chạy tương đối A_DRVI
Chạy đến tọa độ đặt trong tọa độ tương đối
Cú pháp: A_DRVI S0 S1 S2 S3 S4
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Position | FP64 | Command unit | |
| S1 | Velocity | FP64 | Command unit/s | |
| S2 | Time | FP64 | s | Thời gian tăng/giảm tốc lên vận tốc đặt |
| S3 | Done | Bool | Thực thi lệnh hoàn thành | |
| S3+1 | Error | Bool | Thực thi lệnh bị lỗi | |
| S4 | Axis | INT16U |
Ví dụ:

Lệnh chạy tuyệt đối A_DRVA
Chạy đến tọa độ đặt trong tọa độ tuyệt đối
Cú pháp: A_DRVA S0 S1 S2 S3 S4
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Position | FP64 | Command unit | |
| S1 | Velocity | FP64 | Command unit/s | |
| S2 | Time | FP64 | s | Thời gian tăng/giảm tốc lên vận tốc đặt |
| S3 | Done | Bool | Thực thi lệnh hoàn thành | |
| S3+1 | Error | Bool | Thực thi lệnh bị lỗi | |
| S4 | Axis | INT16U |
Ví dụ:

Một số chú ý:
- Lệnh không có buffer mode (DRVI, DRVA) sẽ không bị interrupt bởi chính nó khi đang chạy.
- Lệnh (MOVER, MOVEA) khi chạy chế độ interrupt (buffer mode = 0), sẽ bị interrupt khi đang chạy.
- Lệnh có buffer mode sẽ được ưu tiên hơn.
- Khi bật chế độ cached (buffer mode =1) thì lệnh đó sẽ được quyền interrupt và lưu lệnh trong cache để thực hiện khi lệnh bị ngắt hoàn thành.
Tập lệnh lập trình cho nhiều trục (nội suy)
Dưới đây là một số lệnh cơ bản áp dụng để điều khiển cho nhiều trục chuyển động có ràng buộc với nhau. Chi tiết xem thêm Mục 5-2. Axis group function.
Bảng cờ báo và thanh ghi trạng thái cần quan tâm, chi tiết xem Mục 5-2-3 Related coil and register.
| Axis group state coil (the coil start address is decided by SFD824) | ||
| Address | Definition | Note |
| M28000+100*N | Axis group enable | ON: axis group enable state |
| M28001+100*N | Axis group motion | ON: axis group motion state |
| M28003+100*N | Axis group error | ON: axis group error state |
| M28004+100*N | Axis group buffer state | ON: the axis group commands are saved in the buffer |
| M28010+100*N | MST interactive | ON: G PATHMOV moves to the user defined operation row specified byG PATHSEL |
| Axis group state register (the register start address is decided by SFD826) | |||||||
| Address | Definition | Datatype | Unit | Note | |||
| D46000+300*N | axis group state machine | ENUM | 0: the axis group is not enabled 1: axis group enabled, not moving 2: Axis group in motion 3: axis group stop 4: Axis group error | ||||
| D46001+300*N | Axis group error code | INT16U | – | Display the axis group error code | |||
| D46020+300*N | Current motion segment end point X | FP64 | Command unit | X axis current motion end position | |||
| D46024+300*N | Current motion segment end point Y | FP64 | Command unit | Y axis current motion end position | |||
| D46028+300*N | Current motion segment end point Z | FP64 | Command unit | Z axis current motion end position | |||
| D46032+300*N | Current motion segment end point A | FP64 | Command | A axis current motion end position | |||
| D46036+300*N | Current motion segment end point B | FP64 | Command unit | B axis current motion end position | |||
| D46040+300*N | Current motion segment end point C | FP64 | Command unit | C axis current motion end position | |||
| D46044+300*N | Current motion given position X | FP64 | Command unit | X axis current motion give position | |||
| D46048+300*N | Current motion given position Y | FP64 | Command unit | Y axis current motion give position | |||
| D46052+300*N | Current motion given position Z | FP64 | Command unit | Z axis current motion give position | |||
| D46056+300*N | Current motion given position A | FP64 | Command unit | A axis current motion give position | |||
| D46060+300*N | Current motion given position B | FP64 | Command unit | B axis current motion give position | |||
| D46064+300*N | Current motion given position C | FP64 | Command unit | C axis current motion give position | |||
| D46068+300*N | Current motion given joint speed X | FP64 | Command unit | X axis current motion given speed | |||
| D46072+300*N | Current motion given joint speedY | FP64 | Command unit | Y axis current motion given speed | |||
| D46076+300*N | Current motion given joint speed Z | FP64 | Command unit | Z axis current motion given speed | |||
| D46080+300*N | Current motion given joint speedA | FP64 | Command unit | A axis current motion given speed | |||
| D46084+300*N | Current motion given joint speed B | FP64 | Command unit | B axis current motion given speed | |||
| D46088+300*N | Current motion given joint speed C | FP64 | Command unit | C axis current motion given speed | |||
| D46092+300*N | Current motion given flange position X | FP64 | Command unit | X axis current motion given flange position | |||
| D46096+300*N | Current motion given flange position Y | FP64 | Command unit | Y axis current motion given flange position | |||
| D46100+300*N | Current motion given flange position Z | FP64 | Command unit | Z axis current motion given flange position | |||
| D46104+300*N | Current motion given flange position A | FP64 | Command unit | A axis current motion given flange position | |||
| D46108+300*N | Current motion given flange position B | FP64 | Command unit | B axis current motion given flange position | |||
| D46112+300*N | Current motion given flange position C | FP64 | Command unit | C axis current motion given flange position | |||
| D46116+300*N | Current motion linear speed | FP64 | Command unit | Composite speed of axis group | |||
| D46140+300*N | Current motion feedback position X | FP64 | Command unit | X axis current motion feedback position | |||
| D46144+300*N | Current motion feedback position Y | FP64 | Command unit | Y axis current motion feedback position | |||
| D46148+300*N | Current motion feedback position Z | FP64 | Command unit | Z axis current motion feedback position | |||
| D46152+300*N | Current motion feedback position A | FP64 | Command unit | A axis current motion feedback position | |||
| D46156+300*N | Current motion feedback position B | FP64 | Command unit | B axis current motion feedback position | |||
| D46160+300*N | Current motion feedback position C | FP64 | Command unit | C axis current motion feedback position | |||
| D46226+300*N | PATHSEL buffer remaining space | INT32S | PATHSEL buffer remaining space | ||||
Kích hoạt nhóm trục G_PWR
Trước khi sử dụng 1 trục nào đó thì cần sử dụng lệnh A_PWR để kích hoạt từng trục và dung lệnh G_PWR để kích hoạt nhóm trục đó hoạt động.
Cú pháp: G_PWR S0 S1 S2
Kiểu kích hoạt lệnh bằng mức
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | ErrCode | INT16U | Báo mã lỗi | |
| S1 | PwrStat | Bool | Báo thành công | |
| S2 | AxesGroup | INT16U | Tên nhóm trục |
Ví dụ enable nhóm 0 ( trục 0 và trục 1)

Xóa lỗi cho nhóm trục G_RST
Khi 1 nhóm trục báo lỗi, cần xóa lỗi trước khi chạy lại nhóm trục đó
Cú pháp: G_RST S0 S1 S2
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | ErrCode | INT16U | Báo mã lỗi | |
| S1 | Done | Bool | Thực thi lệnh hoàn thành | |
| S1+1 | Busy | Bool | Đang thực thi lệnh | |
| S1+2 | Error | Bool | Thực thi lệnh bị lỗi | |
| S2 | AxesGroup | INT16U | Số nhóm trục |
Ví dụ reset trục

==> Tải mẫu code: tại đây
Lệnh chỉnh sửa tọa độ nhóm trục G_WRITE
Chỉnh sửa vị trí hiện tại của 1 nhóm trục
Cú pháp: G_WRITE S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | PosX | FP64 | Command unit | |
| S0+4 | PosY | FP64 | ||
| S0+8 | PosZ | FP64 | ||
| S0+12 | PosA | FP64 | ||
| S0+16 | PosB | FP64 | ||
| S0+20 | PosC | FP64 | ||
| S0+24 | CoordinateSystem | INT16U | Chưa hỗ trợ | |
| S0+25 | Relative mode | INT16U | 0: tuyệt đối
1: tương đối |
|
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | AxesGroup | INT16U | Nhóm trục |
Ví dụ chỉnh sửa vị trí về 0:

Lệnh chạy điểm-điểm G_PTP
Mỗi trục sẽ chạy về vị trí chỉ định một cách nhanh nhất.
Cú pháp: G_PTP S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | PosX | FP64 | Command unit | |
| S0+4 | PosY | FP64 | Command unit | |
| S0+8 | PosZ | FP64 | Command unit | |
| S0+12 | PosA | FP64 | Command unit | |
| S0+16 | PosB | FP64 | Command unit | |
| S0+20 | PosC | FP64 | Command unit | |
| S0+24 | CoordinateSystem | INT16U | Chưa hỗ trợ | |
| S0+25 | BufferMode | INT16U | 0: Chế độ cho phép làm gián đoạn các lệnh chuyển động khác
1: Chế độ lưu bộ nhớ đệm |
|
| S0+26 | TransitionMode | INT16U | Chưa hỗ trợ | |
| S0+27 | PosMode | INT16U | 0: Tuyệt đối
1: Tương đối |
|
| S0+28 | TransitionVel | INT16U | Chưa hỗ trợ | |
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Active | Bool | Đang thực thi lệnh | |
| S2+3 | Abort | Bool | Lệnh bị gián đoạn | |
| S2+4 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | AxesGroup | INT16U | Nhóm trục |
Ví dụ sử dụng để chạy từ vị trí (5000,7000) về vị trí gốc:


==> Tải mẫu code: tại đây
Lệnh nội suy tuyến tính G_LINE
Vẽ quỹ đạo là 1 đường thẳng từ vị trí hiện tại đến tọa độ chỉ định.
Cú pháp: G_LINE S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | PosX | FP64 | Command unit | |
| S0+4 | PosY | FP64 | Command unit | |
| S0+8 | PosZ | FP64 | Command unit | |
| S0+12 | PosA | FP64 | Command unit | |
| S0+16 | PosB | FP64 | Command unit | |
| S0+20 | PosC | FP64 | Command unit | |
| S0+24 | Velocity | FP64 | Command unit/s | |
| S0+28 | Acceleration | FP64 | Command unit/s^2 | |
| S0+32 | Deceleration | FP64 | Command unit/s^2 | |
| S0+36 | Jerk | INT16U | Command unit/s^3 | |
| S0+40 | CoordinateSystem | INT16U | Chưa hỗ trợ | |
| S0+41 | BufferMode | INT16U | 0: Chế độ cho phép làm gián đoạn các lệnh chuyển động khác
1: Chế độ lưu bộ nhớ đệm |
|
| S0+42 | TransitionMode | INT16U | Chưa hỗ trợ | |
| S0+43 | PosMode | INT16U | 0: Tuyệt đối
1: Tương đối |
|
| S0+44 | EndVel | FP64 | Command unit/s | Chưa hỗ trợ |
| S0+48 | TransVel | FP64 | Command unit/s | |
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Active | Bool | Đang thực thi lệnh | |
| S2+3 | Abort | Bool | Lệnh bị gián đoạn | |
| S2+4 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | AxesGroup | INT16U | Nhóm trục |
Ví dụ sử dụng để chạy từ vị trí (0,0) về vị trí (5000, 7000):

Đồ thị vận tốc và quãng đường.

Quỹ đạo trục XY

Lệnh nội suy cung tròn G_CIRCLE
Vẽ quỹ đạo là 1 đường cong từ vị trí hiện tại đến tọa độ chỉ định.
Cú pháp: G_CIRCLE S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Mode | INT16U | 0: Đường cong cho bởi 3 điểm
1: Cung tròn cho bởi tâm 2: Cung tròn cho bởi bán kính |
|
| S0+1 | PathSelected | INT16U | Lựa chọn đường dẫn.
Tâm/bán kính: 0-cung dưới, 1-cung trên |
|
| S0+4 | AuxPosX | FP64 | Command unit | Ba điểm:
Vị trí điểm phụ trục X Tâm: Vị trí tâm trục X Bán kính: Vị trí vectơ pháp tuyến trục X |
| S0+8 | AuxPosY | FP64 | Command unit | |
| S0+12 | AuxPosZ | FP64 | Command unit | |
| S0+16 | AuxPosA | FP64 | Command unit | |
| S0+20 | AuxPosB | FP64 | Command unit | |
| S0+24 | AuxPosC | FP64 | Command unit | |
| S0+28 | PosX | FP64 | Command unit | Vị trí mục tiêu trục X.
Số trục X được thiết lập thông qua SFD48001+300*N |
| S0+32 | PosY | FP64 | Command unit | |
| S0+36 | PosZ | FP64 | Command unit | |
| S0+40 | PosA | FP64 | Command unit | |
| S0+44 | PosB | FP64 | Command unit | |
| S0+48 | PosC | FP64 | Command unit | |
| S0+52 | Velocity | FP64 | Command unit/s | |
| S0+56 | Acceleration | FP64 | Command unit/s^2 | |
| S0+60 | Deceleration | FP64 | Command unit/s^2 | |
| S0+64 | Jerk | FP64 | Command unit/s^3 | |
| S0+68 | CoordinateSystem | INT16U | Chưa hỗ trợ | |
| S0+69 | BufferMode | INT16U | 0: Chế độ cho phép làm gián đoạn các lệnh chuyển động khác
1: Chế độ lưu bộ nhớ đệm |
|
| S0+70 | TransitionMode | INT16U | Chưa hỗ trợ | |
| S0+71 | PosMode | INT16U | 0: Tuyệt đối
1: Tương đối |
|
| S0+72 | EndVel | FP64 | Command unit/s | Chưa hỗ trợ |
| S0+76 | TransVel | FP64 | Command unit/s | |
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Active | Bool | Đang thực thi lệnh | |
| S2+3 | Abort | Bool | Lệnh bị gián đoạn | |
| S2+4 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | AxesGroup | INT16U | Nhóm trục |
Ví dụ 1: sử dụng để vẽ quỹ đạo cung tròn bắt đầu từ vị trí (0,0) qua vị trí (5000, 5000) và kết thúc ở (10000, 0)
Đồ thị vị trí và tốc độ:

Quỹ đạo trục XY là nửa đường tròn bán kính 5000 đơn vị:

Ví dụ 2: Từ điểm bắt đầu (0,0), vẽ đường tròn có tâm ở (0,3000), kết thúc ở điểm (3000,3000) và di chuyển cùng chiều kim đồng hồ

Quỹ đạo di chuyển:

Ví dụ 3: Từ điểm bắt đầu (0,0), vẽ cung tròn có bán kính 6000 kết thúc ở điểm (3000,3000)
- Trường hợp 1: Vector pháp tuyến là (0,0,6000), chạy theo cung bé.
Nạp thông số

Quỹ đạo:

- Trường hợp 2: Vector pháp tuyến là (0,0,6000), chạy theo cung lớn.
Nạp thông số

Quỹ đạo di chuyển

Trường hợp 1 và 2 di chuyển ngược chiều kim đồng hồ theo quy tắc bàn tay phải của vector pháp tuyến.
- Trường hợp 3: Vector pháp tuyến là (0,0,-6000), chạy theo cung bé.
Nạp thông số

Quỹ đạo di chuyển

- Trường hợp 4: Vector pháp tuyến là (0,0,-6000), chạy theo cung lớn.
Nạp thông số

Quỹ đạo di chuyển

Trường hợp 3 và 4 di chuyển thuận chiều kim đồng hồ theo quy tắc bàn tay phải của vector pháp tuyến.
==> Tải mẫu code: tại đây
Lệnh nội suy hình elip G_ELLIPSE
Vẽ quỹ đạo là 1 elip từ vị trí hiện tại theo trục dài, trục ngắn và tọa độ tâm.
Cú pháp: G_ELLIPSE S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Mode | INT16U | 0: Đi theo chiều kim đồng hồ
1: Đi theo ngược chiều kim đồng hồ |
|
| S0+1 | PathSelected | INT16U | 0: mặt phẳng XOY
1: mặt phẳng ZOX 2: mặt phẳng YOZ |
|
| S0+2 | MotionMode | INT16U | 0: Tương đối
1: Tuyệt đối |
|
| S0+4 | A | FP64 | Command unit | Độ dài trục dài |
| S0+8 | B | FP64 | Command unit | Độ dài trục ngắn |
| S0+12 | Theta | FP64 | Command unit | Góc quay |
| S0+16 | AuxPosX | FP64 | Command unit | Tọa độ X tâm elip |
| S0+20 | AuxPosY | FP64 | Command unit | Tọa độ Y tâm elip |
| S0+24 | AuxPosZ | FP64 | Command unit | Tọa độ Z tâm elip |
| S0+28 | PosX | FP64 | Command unit | Vị trí X bắt đầu |
| S0+32 | PosY | FP64 | Command unit | Vị trí Y bắt đầu |
| S0+36 | PosZ | FP64 | Command unit | Vị trí Z bắt đầu |
| S0+40 | PosA | FP64 | Command unit | |
| S0+44 | PosB | FP64 | Command unit | |
| S0+48 | PosC | FP64 | Command unit | |
| S0+52 | Velocity | FP64 | Command unit/s | |
| S0+56 | Acceleration | FP64 | Command unit/s^2 | |
| S0+60 | Deceleration | FP64 | Command unit/s^2 | |
| S0+64 | Jerk | FP64 | Command unit/s^3 | |
| S0+68 | CoordinateSystem | INT16U | Chưa hỗ trợ | |
| S0+69 | BufferMode | INT16U | 0: Chế độ cho phép làm gián đoạn các lệnh chuyển động khác
1: Chế độ lưu bộ nhớ đệm |
|
| S0+70 | TransitionMode | INT16U | Chưa hỗ trợ | |
| S0+71 | PosMode | INT16U | 0: Tuyệt đối
1: Tương đối |
|
| S0+72 | EndVel | FP64 | Command unit/s | Chưa hỗ trợ |
| S0+76 | TransVel | FP64 | Command unit/s | |
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Active | Bool | Đang thực thi lệnh | |
| S2+3 | Abort | Bool | Lệnh bị gián đoạn | |
| S2+4 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | AxesGroup | INT16U | Nhóm trục |
Ví dụ sử dụng để vẽ quỹ đạo hình elip bắt đầu từ vị trí (0,0), vị trí tâm (0, 4000) và có trục dài 8000, trục ngắn 6000
Thông số nạp vào lệnh:

Đồ thị vị trí và tốc độ của từng trục:

Quỹ đạo:

==> Tải mẫu code: tại đây
Lệnh dừng chạy nhóm trục G_STOP
Dừng có giảm tốc chuyển động của một nhóm trục.
Cú pháp: G_STOP S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Dec | FP64 | Command unit/s^2 | Giảm tốc |
| S0+4 | Jerk | FP64 | Command unit/s^3 | |
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Active | Bool | Đang thực thi lệnh | |
| S2+3 | Abort | Bool | Lệnh bị gián đoạn | |
| S2+4 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | AxesGroup | INT16U | Số nhóm trục |
Ví dụ Stop trục

Lệnh tạm dừng chuyển động G_INTR
Khi một chuyển động đang thực hiện, lệnh G_INTR sẽ tạm dừng chuyển động và lưu lại trạng thái hiện tại, lệnh này thường kết hợp với lệnh G_GOON để chạy lại chuyển động.
Cú pháp: G_INTR S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Dec | FP64 | Command unit/s^2 | Giảm tốc |
| S0+4 | Jerk | FP64 | Command unit/s^3 | |
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Abort | Bool | Lệnh bị gián đoạn | |
| S2+3 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | AxesGroup | INT16U | Số nhóm trục |
Ví dụ Stop trục

Lệnh tiếp tục chạy nhóm trục G_GOON
Lệnh khôi phục trạng thái và tiếp tục thực hiện chuyển động của 1 nhóm trục đã bị tạm dừng trước đó.
Cú pháp: G_GOON S0 S1 S2
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | ErrCode | INT16U | Báo mã lỗi | |
| S1 | Done | Bool | Thực thi lệnh hoàn thành | |
| S1+1 | Busy | Bool | Đang thực thi lệnh | |
| S1+2 | Active | Bool | Đang thực thi lệnh | |
| S1+3 | Abort | Bool | Lệnh bị gián đoạn | |
| S1+4 | Error | Bool | Thực thi lệnh bị lỗi | |
| S2 | AxesGroup | INT16U | Số nhóm trục |
Ví dụ:

Lệnh G_PATHSEL
Lệnh thiết lập thông số quỹ đạo chuyển động.
Cú pháp: G_PATHSEL S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Quantity | INT16U | Số điểm chạy | |
| S0+1 | Reload | INT16U | 0: Nạp dữ liệu 1 lần ban đầu
1: Nạp dữ liệu từng điểm sau mỗi lần chạy |
|
| S0+10+60*(n-1) | Index | INT32U | Chỉ số của từng đoạn chuyển động. | |
| S0+12+60*(n-1) | Type | INT16U | Kiểu dữ liệu
0: PTP 1: LINE 2: CIRCLE 90: ELLIPSE 91: BELZIER 100: người dùng định nghĩa 200: kết thúc |
|
| S0+13+60*(n-1) | Parameter 1 | INT16U | Khi kiểu chạy là 2:
0: 3 điểm 1: tâm vòng tròn 2: đường kính Khi kiểu chạy là elip 90 độ 0: XOY 1: ZOX 2: YOZ Khi kiểu chạy là Belzier, sẽ là chỉ số độ cong p=2/3/4 Khi kiểu dữ liệu là 100, đây sẽ là mã M-code (giá trị lớn hơn 100) |
|
| S0+14+60*(n-1) | Parameter 2 | INT16U | Khi kiểu chạy là 2:
1: đường cong phía dưới 2: đường cong phía trên Khi kiểu chạy là elip 90 độ 0: theo chiều kim đồng hồ 1: ngược chiều kim đồng hồ Khi kiểu chạy là Belzier, nó chỉ ra số điểm kiểm soát hiện tại (bắt đầu từ 2, với giá trị tối đa là p+1). |
|
| S0+15+60*(n-1) | Coordinate System | INT16U | Chưa hỗ trợ | |
| S0+16+60*(n-1) | Pos X | FP64 | Command unit | Vị trí đích trục X |
| S0+20+60*(n-1) | Pos Y | FP64 | Command unit | Vị trí đích trục Y |
| S0+24+60*(n-1) | Pos Z | FP64 | Command unit | Vị trí đích trục Z |
| S0+28+60*(n-1) | Pos A | FP64 | Command unit | Vị trí đích trục A |
| S0+32+60*(n-1) | Pos B | FP64 | Command unit | Vị trí đích trục B |
| S0+36+60*(n-1) | Pos C | FP64 | Command unit | Vị trí đích trục C |
| S0+40+60*(n-1) | Aux X | FP64 | Command unit | Vị trí trung gian trục X |
| S0+44+60*(n-1) | Aux Y | FP64 | Command unit | Vị trí trung gian trục Y |
| S0+48+60*(n-1) | Aux Z | FP64 | Command unit | Vị trí trung gian trục Z |
| S0+52+60*(n-1) | Aux A | FP64 | Command unit | Vị trí trung gian trục A |
| S0+56+60*(n-1) | Aux B | FP64 | Command unit | Vị trí trung gian trục B |
| S0+60+60*(n-1) | Aux C | FP64 | Command unit | Vị trí trung gian trục C |
| S0+60+64*(n-1) | Velocity | FP64 | Command unit/s^2 | Tốc độ di chuyển |
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Done | Bool | Thực thi lệnh hoàn thành | |
| S2+1 | Busy | Bool | Đang thực thi lệnh | |
| S2+2 | Abort | Bool | Lệnh bị gián đoạn | |
| S2+3 | Error | Bool | Thực thi lệnh bị lỗi | |
| S3 | AxesGroup | INT16U | Số nhóm trục |
Kiểu dữ liệu 100 là kiểu do người dùng định nghĩa. Nó có hiệu lực khi tham số được đặt lớn hơn 100. Khi tham số được đặt thành 1000 ~ 1999, thì đó là mã M không dừng, tức là khi di chuyển đến điểm này, nhóm trục sẽ không dừng di chuyển và tiếp tục thực hiện track tiếp theo. Mã M sẽ theo track trước đó và được lưu trữ trong thanh ghi tương ứng.
Khi tham số không nằm trong phạm vi 1000 ~ 1999, thì điểm này không chuyển động. Khi lệnh được thực thi đến điểm này, nó sẽ dừng lại và đặt M28010 lên ON. Đặt thủ công M28010 thành OFF và tiếp tục thực hiện các điểm sau.
Cụ thể xem lệnh G_PATHMOVE để biết chi tiết từng thông số qua các ví dụ.
Lệnh G_PATHMOV
Lệnh chạy theo thông số quỹ đạo chuyển động đã thiết lập ở lệnh G_PATHSEL
Cú pháp: G_PATHMOV S0 S1 S2 S3
Kiểu kích hoạt lệnh bằng xung sườn
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Coordinate
System |
INT16U | Chưa hỗ trợ | |
| S0+1 | Buffer Mode | INT16U | 0: Interrupt mode
1: Buffer mode |
|
| S1 | ErrCode | INT16U | Báo mã lỗi | |
| S2 | Row 1 | INT32U | Đoạn số 1 | |
| S2+2 | Pos X | FP32 | Command unit | History location X1 |
| S2+4 | Pos Y | FP32 | Command unit | History location Y1 |
| S2+6 | Pos Z | FP32 | Command unit | History location Z1 |
| S2+8 | Pos A | FP32 | Command unit | History location A1 |
| S2+10 | Pos B | FP32 | Command unit | History location B1 |
| S2+12 | Pos C | FP32 | Command unit | History location C1 |
| … | … | … | … | … |
| S2+126 | Row 10 | INT32U | Đoạn số 10 | |
| S2+128 | Pos X | FP32 | Command unit | History location X10 |
| S2+130 | Pos Y | FP32 | Command unit | History location Y10 |
| S2+132 | Pos Z | FP32 | Command unit | History location Z10 |
| S2+134 | Pos A | FP32 | Command unit | History location A10 |
| S2+136 | Pos B | FP32 | Command unit | History location B10 |
| S2+138 | Pos C | FP32 | Command unit | History location C10 |
| S2+140 | Next running Row 11 | INT32U | Đoạn số 11 | |
| S2+142 | X11 | FP32 | Command unit | Ready to run pos X11 |
| S2+144 | Y11 | FP32 | Command unit | Ready to run pos Y11 |
| S2+146 | Z11 | FP32 | Command unit | Ready to run pos Z11 |
| S2+148 | A11 | FP32 | Command unit | Ready to run pos A11 |
| S2+150 | B11 | FP32 | Command unit | Ready to run pos B11 |
| S2+152 | C11 | FP32 | Command unit | Ready to run pos C11 |
| S2+154 | M code 1 | INT16U | ||
| S2+155 | M code 2 | INT16U | ||
| S2+156 | M code 3 | INT16U | ||
| S2+157 | M code4 | INT16U | ||
| S2+158 | M code 5 | INT16U | ||
| S2+159 | M code 6 | INT16U | ||
| S2+160 | M code 7 | INT16U | ||
| S2+161 | M code 8 | INT16U | ||
| S2+162 | M code 9 | INT16U | ||
| S3 | Done | Bool | Thực thi lệnh hoàn thành | |
| S3+1 | Busy | Bool | Đang thực thi lệnh | |
| S3+2 | Active | Bool | ||
| S3+3 | Abort | Bool | Lệnh bị gián đoạn | |
| S3+4 | Error | Bool | Thực thi lệnh bị lỗi | |
| S4 | AxesGroup | INT16U | Số nhóm trục |
Ví dụ 1: Vẽ 1 quỹ đạo liên tục đi qua 5 điểm, bắt đầu từ điểm (0,0) như sau:
| Vị trí | Tọa độ |
| 1 | 0,0 |
| 2 | 1000,1000 |
| 3 | 5000,3000 |
| 4 | 9000,1000 |
| 5 | 10000,0 |


Nạp thông số bằng hàm C:
/*************************************************************************
* FunctionBlockName: GPATHDATA
* Version: 1.0.0
* Author:
* UpdateTime: 2024-10-20 21:28:46
* Comment: Nạp dữ liệu cho hàm G_PATHSEL
**************************************************************************/
/**
* @summary
* @param W
* @param B
*/
void GPATHDATA(PINT16S W,PBIT B)
{
#define SysRegAddr_HD_D_HM_M
//Số thực 64 bit, vùng nhớ HD
#define DFHD *(FP64*)&HD
//Số thực 64 bit, vùng nhớ D
#define DFD *(FP64*)&D
//Khởi tạo dữ liệu cho G_PATHSEL
HD[1300] = 5; //data row numbers = n
HD[1301] = 0; //0: continue insert, 1: reload
//S0+10+60*(n-1), S0=1300
//n=1
HD[1310] = 1; //Index row number 1
HD[1312] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1313] = 0; //Parameter 1
HD[1314] = 0; //Parameter 2
DFHD[1316] = 1000; //Target pos X
DFHD[1320] = 1000; //Target pos Y
DFHD[1324] = 0; //Target pos Z
DFHD[1340] = 0; //Aux pos X
DFHD[1344] = 0; //Aux pos Y
DFHD[1348] = 0; //Aux pos Z
DFHD[1364] = 1000; //Target velocity
//n=2
HD[1370] = 2; //Index row number 2
HD[1372] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1373] = 0; //Parameter 1
HD[1374] = 0; //Parameter 2
DFHD[1376] = 5000; //Target pos X
DFHD[1380] = 3000; //Target pos Y
DFHD[1384] = 0; //Target pos Z
DFHD[1400] = 0; //Aux pos X
DFHD[1404] = 0; //Aux pos Y
DFHD[1408] = 0; //Aux pos Z
DFHD[1424] = 1000; //Target velocity
//n=3
HD[1430] = 3; //Index row number 3
HD[1432] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1433] = 0; //Parameter 1
HD[1434] = 0; //Parameter 2
DFHD[1436] = 9000; //Target pos X
DFHD[1440] = 1000; //Target pos Y
DFHD[1444] = 0; //Target pos Z
DFHD[1460] = 0; //Aux pos X
DFHD[1464] = 0; //Aux pos Y
DFHD[1468] = 0; //Aux pos Z
DFHD[1484] = 1000; //Target velocity
//n=4
HD[1490] = 4; //Index row number 4
HD[1492] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1493] = 0; //Parameter 1
HD[1494] = 0; //Parameter 2
DFHD[1496] = 10000; //Target pos X
DFHD[1500] = 0; //Target pos Y
DFHD[1504] = 0; //Target pos Z
DFHD[1520] = 0; //Aux pos X
DFHD[1524] = 0; //Aux pos Y
DFHD[1528] = 0; //Aux pos Z
DFHD[1544] = 1000; //Target velocity
//n=5
HD[1550] = 5; //Index row number 5
HD[1552] = 200; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1553] = 0; //Parameter 1
HD[1554] = 0; //Parameter 2
DFHD[1556] = 0; //Target pos X
DFHD[1560] = 0; //Target pos Y
DFHD[1564] = 0; //Target pos Z
DFHD[1580] = 0; //Aux pos X
DFHD[1584] = 0; //Aux pos Y
DFHD[1588] = 0; //Aux pos Z
DFHD[1604] = 1000; //Target velocity
}
n=1 là điểm đến đầu tiên, n=5 là điểm kết thúc (end row).
Kết quả:

Ví dụ 2: Bắt đầu từ điểm (0,0), di chuyển đến điểm 1 để vẽ hình ngôi sao và hình tròn bao quanh.
| Điểm | Tọa độ X | Tọa độ Y |
| 1 | 2665 | 992 |
| 2 | 3284 | 2898 |
| 3 | 3903 | 992 |
| 4 | 2283 | 2170 |
| 5 | 4286 | 2170 |
Nạp thông số vào lệnh G_PATHSEL:
#define SysRegAddr_HD_D_HM_M
//Số thực 64 bit, vùng nhớ HD
#define DFHD *(FP64*)&HD
//Số thực 64 bit, vùng nhớ D
#define DFD *(FP64*)&D
//Khởi tạo dữ liệu cho G_PATHSEL
HD[1300] = 9; //data row numbers = n
HD[1301] = 0; //0: continue insert, 1: reload
//S0+10+60*(n-1), S0=1300
//n=1
HD[1310] = 1; //Index row number 1
HD[1312] = 0; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1313] = 0; //Parameter 1
HD[1314] = 0; //Parameter 2
DFHD[1316] = 2665; //Target pos X
DFHD[1320] = 992; //Target pos Y
DFHD[1324] = 0; //Target pos Z
DFHD[1340] = 0; //Aux pos X
DFHD[1344] = 0; //Aux pos Y
DFHD[1348] = 0; //Aux pos Z
DFHD[1364] = 1000; //Target velocity
//n=2
HD[1370] = 2; //Index row number 2
HD[1372] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1373] = 0; //Parameter 1
HD[1374] = 0; //Parameter 2
DFHD[1376] = 3284; //Target pos X
DFHD[1380] = 2898; //Target pos Y
DFHD[1384] = 0; //Target pos Z
DFHD[1400] = 0; //Aux pos X
DFHD[1404] = 0; //Aux pos Y
DFHD[1408] = 0; //Aux pos Z
DFHD[1424] = 1000; //Target velocity
//n=3
HD[1430] = 3; //Index row number 3
HD[1432] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1433] = 0; //Parameter 1
HD[1434] = 0; //Parameter 2
DFHD[1436] = 3903; //Target pos X
DFHD[1440] = 992; //Target pos Y
DFHD[1444] = 0; //Target pos Z
DFHD[1460] = 0; //Aux pos X
DFHD[1464] = 0; //Aux pos Y
DFHD[1468] = 0; //Aux pos Z
DFHD[1484] = 1000; //Target velocity
//n=4
HD[1490] = 4; //Index row number 4
HD[1492] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1493] = 0; //Parameter 1
HD[1494] = 0; //Parameter 2
DFHD[1496] = 2283; //Target pos X
DFHD[1500] = 2170; //Target pos Y
DFHD[1504] = 0; //Target pos Z
DFHD[1520] = 0; //Aux pos X
DFHD[1524] = 0; //Aux pos Y
DFHD[1528] = 0; //Aux pos Z
DFHD[1544] = 1000; //Target velocity
//n=5
HD[1550] = 5; //Index row number 5
HD[1552] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1553] = 0; //Parameter 1
HD[1554] = 0; //Parameter 2
DFHD[1556] = 4286; //Target pos X
DFHD[1560] = 2170; //Target pos Y
DFHD[1564] = 0; //Target pos Z
DFHD[1580] = 0; //Aux pos X
DFHD[1584] = 0; //Aux pos Y
DFHD[1588] = 0; //Aux pos Z
DFHD[1604] = 1000; //Target velocity
//n=6
HD[1610] = 6; //Index row number 6
HD[1612] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1613] = 0; //Parameter 1
HD[1614] = 0; //Parameter 2
DFHD[1616] = 2665; //Target pos X
DFHD[1620] = 992; //Target pos Y
DFHD[1624] = 0; //Target pos Z
DFHD[1640] = 0; //Aux pos X
DFHD[1644] = 0; //Aux pos Y
DFHD[1648] = 0; //Aux pos Z
DFHD[1664] = 1000; //Target velocity
//n=7
HD[1670] = 7; //Index row number 7
HD[1672] = 2; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1673] = 0; //Parameter 1
HD[1674] = 1; //Parameter 2
DFHD[1676] = 3284; //Target pos X
DFHD[1680] = 2898; //Target pos Y
DFHD[1684] = 0; //Target pos Z
DFHD[1700] = 2283; //Aux pos X
DFHD[1704] = 2170; //Aux pos Y
DFHD[1708] = 0; //Aux pos Z
DFHD[1724] = 1000; //Target velocity
//n=8
HD[1730] = 8; //Index row number 8
HD[1732] = 2; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1733] = 0; //Parameter 1
HD[1734] = 1; //Parameter 2
DFHD[1736] = 2665; //Target pos X
DFHD[1740] = 992; //Target pos Y
DFHD[1744] = 0; //Target pos Z
DFHD[1760] = 4286; //Aux pos X
DFHD[1764] = 2170; //Aux pos Y
DFHD[1768] = 0; //Aux pos Z
DFHD[1784] = 1000; //Target velocity
//n=9
HD[1790] = 9; //Index row number 9
HD[1792] = 200; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1793] = 0; //Parameter 1
HD[1794] = 0; //Parameter 2
DFHD[1796] = 4286; //Target pos X
DFHD[1800] = 2170; //Target pos Y
DFHD[1804] = 0; //Target pos Z
DFHD[1820] = 0; //Aux pos X
DFHD[1824] = 0; //Aux pos Y
DFHD[1828] = 0; //Aux pos Z
DFHD[1844] = 1000; //Target velocity
Thực thi lệnh G_PATHMOV, ta được kết quả:
Ví dụ 3: Bắt đầu từ điểm (0,0), di chuyển đến điểm 1, rồi chạy theo quỹ đạo hình chữ nhật, khi đến các đỉnh của hình chữ nhật thì dừng lại để thực hiện thao tác bật đầu ra Y0 trong 2 giây rồi chạy tiếp.
| Điểm | Tọa độ X | Tọa độ Y |
| 1 | 1000 | 1000 |
| 2 | 1000 | 5000 |
| 3 | 9000 | 5000 |
| 4 | 9000 | 1000 |
| 5 | 1000 | 1000 |
| 6 | 0 | 0 |
Nạp dữ liệu cho hàm G_PATHSEL bằng hàm GPATHDATA2:
Sử dụng kiểu 100 là người dùng tự định nghĩa, khi này chuyển động sẽ dừng lại và thực hiện thao tác đánh số M-code là 101.
void GPATHDATA2(PINT16S W,PBIT B)
{
#define SysRegAddr_HD_D_HM_M
//Số thực 64 bit, vùng nhớ HD
#define DFHD *(FP64*)&HD
//Số thực 64 bit, vùng nhớ D
#define DFD *(FP64*)&D
//Khởi tạo dữ liệu cho G_PATHSEL
HD[1300] = 11; //data row numbers = n
HD[1301] = 0; //0: continue insert, 1: reload
//S0+10+60*(n-1), S0=1300
//n=1
HD[1310] = 1; //Index row number 1
HD[1312] = 0; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1313] = 0; //Parameter 1
HD[1314] = 0; //Parameter 2
DFHD[1316] = 1000; //Target pos X
DFHD[1320] = 1000; //Target pos Y
DFHD[1324] = 0; //Target pos Z
DFHD[1340] = 0; //Aux pos X
DFHD[1344] = 0; //Aux pos Y
DFHD[1348] = 0; //Aux pos Z
DFHD[1364] = 1000; //Target velocity
//n=2
HD[1370] = 2; //Index row number 2
HD[1372] = 100; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1373] = 101; //Parameter 1
HD[1374] = 0; //Parameter 2
DFHD[1376] = 8000; //Target pos X
DFHD[1380] = 4000; //Target pos Y
DFHD[1384] = 0; //Target pos Z
DFHD[1400] = 0; //Aux pos X
DFHD[1404] = 0; //Aux pos Y
DFHD[1408] = 0; //Aux pos Z
DFHD[1424] = 1000; //Target velocity
//n=3
HD[1430] = 3; //Index row number 3
HD[1432] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1433] = 0; //Parameter 1
HD[1434] = 0; //Parameter 2
DFHD[1436] = 1000; //Target pos X
DFHD[1440] = 5000; //Target pos Y
DFHD[1444] = 0; //Target pos Z
DFHD[1460] = 0; //Aux pos X
DFHD[1464] = 0; //Aux pos Y
DFHD[1468] = 0; //Aux pos Z
DFHD[1484] = 1000; //Target velocity
//n=4
HD[1490] = 4; //Index row number 4
HD[1492] = 100; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1493] = 101; //Parameter 1
HD[1494] = 0; //Parameter 2
DFHD[1496] = 0; //Target pos X
DFHD[1500] = 0; //Target pos Y
DFHD[1504] = 0; //Target pos Z
DFHD[1520] = 0; //Aux pos X
DFHD[1524] = 0; //Aux pos Y
DFHD[1528] = 0; //Aux pos Z
DFHD[1544] = 1000; //Target velocity
//n=5
HD[1550] = 5; //Index row number 5
HD[1552] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1553] = 0; //Parameter 1
HD[1554] = 0; //Parameter 2
DFHD[1556] = 9000; //Target pos X
DFHD[1560] = 5000; //Target pos Y
DFHD[1564] = 0; //Target pos Z
DFHD[1580] = 0; //Aux pos X
DFHD[1584] = 0; //Aux pos Y
DFHD[1588] = 0; //Aux pos Z
DFHD[1604] = 1000; //Target velocity
//n=6
HD[1610] = 6; //Index row number 6
HD[1612] = 100; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1613] = 101; //Parameter 1
HD[1614] = 0; //Parameter 2
DFHD[1616] = 0; //Target pos X
DFHD[1620] = 0; //Target pos Y
DFHD[1624] = 0; //Target pos Z
DFHD[1640] = 0; //Aux pos X
DFHD[1644] = 0; //Aux pos Y
DFHD[1648] = 0; //Aux pos Z
DFHD[1664] = 1000; //Target velocity
//n=7
HD[1670] = 7; //Index row number 7
HD[1672] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1673] = 0; //Parameter 1
HD[1674] = 0; //Parameter 2
DFHD[1676] = 9000; //Target pos X
DFHD[1680] = 1000; //Target pos Y
DFHD[1684] = 0; //Target pos Z
DFHD[1700] = 0; //Aux pos X
DFHD[1704] = 0; //Aux pos Y
DFHD[1708] = 0; //Aux pos Z
DFHD[1724] = 1000; //Target velocity
//n=8
HD[1730] = 8; //Index row number 8
HD[1732] = 100; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1733] = 101; //Parameter 1
HD[1734] = 0; //Parameter 2
DFHD[1736] = 2283; //Target pos X
DFHD[1740] = 2170; //Target pos Y
DFHD[1744] = 0; //Target pos Z
DFHD[1760] = 0; //Aux pos X
DFHD[1764] = 0; //Aux pos Y
DFHD[1768] = 0; //Aux pos Z
DFHD[1784] = 1000; //Target velocity
//n=9
HD[1790] = 9; //Index row number 9
HD[1792] = 1; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1793] = 0; //Parameter 1
HD[1794] = 0; //Parameter 2
DFHD[1796] = 1000; //Target pos X
DFHD[1800] = 1000; //Target pos Y
DFHD[1804] = 0; //Target pos Z
DFHD[1820] = 0; //Aux pos X
DFHD[1824] = 0; //Aux pos Y
DFHD[1828] = 0; //Aux pos Z
DFHD[1844] = 1000; //Target velocity
//n=10
HD[1850] = 10; //Index row number 10
HD[1852] = 0; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1853] = 0; //Parameter 1
HD[1854] = 0; //Parameter 2
DFHD[1856] = 0; //Target pos X
DFHD[1860] = 0; //Target pos Y
DFHD[1864] = 0; //Target pos Z
DFHD[1880] = 0; //Aux pos X
DFHD[1884] = 0; //Aux pos Y
DFHD[1888] = 0; //Aux pos Z
DFHD[1904] = 1000; //Target velocity
//n=11
HD[1910] = 11; //Index row number 11
HD[1912] = 200; //Type ( 0: PTP 1: LINE 2:CIRCLE 90: ELLIPSE 91: BEZIER 100: user defined 200: end row )
HD[1913] = 0; //Parameter 1
HD[1914] = 0; //Parameter 2
DFHD[1916] = 0; //Target pos X
DFHD[1920] = 0; //Target pos Y
DFHD[1924] = 0; //Target pos Z
DFHD[1940] = 0; //Aux pos X
DFHD[1944] = 0; //Aux pos Y
DFHD[1948] = 0; //Aux pos Z
DFHD[1964] = 1000; //Target velocity
}
Thực hiện M-code:

Quỹ đạo chuyển động:

Tặng 100 code mẫu PLC Xinje và giao diện HMI Xinje có sẵn dùng được ngay (đang update)


Zalo Miền Bắc