Trong các hệ thống điều khiển chuyển động hiện đại, việc di chuyển trục servo một khoảng cách xác định từ vị trí hiện tại là một yêu cầu phổ biến. Lệnh A_MOVER đóng vai trò then chốt trong việc thực hiện các chuyển động theo vị trí tương đối (relative position) một cách chính xác và linh hoạt. Bài viết này sẽ đi sâu vào cú pháp, các tham số quan trọng, ví dụ thực tế và tầm quan trọng của lệnh A_MOVER trong môi trường EtherCAT.
Lệnh A_MOVER là gì? Lệnh di chuyển tương đối cho Servo Driver
A_MOVER (Axis Move Relative) là một lệnh chuyên dụng trong các bộ điều khiển lập trình (PLC) hỗ trợ mạng EtherCAT. Chúng ta dùng nó để điều khiển một trục servo di chuyển một khoảng cách xác định từ vị trí hiện tại của nó. Thay vì di chuyển đến một tọa độ tuyệt đối, A_MOVER cho phép bạn chỉ định “hãy di chuyển thêm X đơn vị” từ điểm đang đứng.
Lệnh A_MOVER thường kích hoạt bằng xung sườn (rising edge), nghĩa là nó chỉ thực thi khi tín hiệu điều khiển chuyển từ trạng thái OFF sang ON.
Cú pháp lệnh A_MOVER và giải thích tham số chi tiết
Cú pháp:
A_MOVER S0 S1 S2 S3
Giải thích các toán hạng (tham số):
| Toán hạng | Tên | Kiểu dữ liệu | Đơn vị | Ghi chú |
| S0 | Position | FP64 |
Command unit | Khoảng cách di chuyển: Giá trị vị trí tương đối mà trục cần di chuyển. Giá trị dương sẽ di chuyển theo chiều thuận, giá trị âm theo chiều ngược. FP64 (Floating Point 64-bit) cho phép độ chính xác cao. Đơn vị “Command unit” tùy thuộc vào cài đặt quy đổi đơn vị của trục (ví dụ: xung, mm, độ, v.v.). |
| S0+4 | Velocity | FP64 |
Command unit/s | Tốc độ chạy: Tốc độ tối đa mà trục sẽ đạt được trong quá trình di chuyển. Yếu tố này ảnh hưởng đến thời gian di chuyển và độ mượt của quá trình. |
| S0+8 | Acceleration | FP64 |
Command unit/s^2 | Gia tốc: Tốc độ trục tăng tốc từ 0 (hoặc từ tốc độ hiện tại) đến tốc độ đặt (Velocity). Gia tốc cao giúp di chuyển nhanh hơn nhưng có thể gây sốc cơ khí. Gia tốc thấp giúp chuyển động êm hơn. |
| S0+12 | Deceleration | FP64 |
Command unit/s^2 | Giảm tốc: Tốc độ trục giảm tốc từ tốc độ chạy về 0 khi gần đạt đến vị trí đích. Giảm tốc cũng ảnh hưởng đến độ mượt và thời gian dừng của trục. |
| S0+16 | Jerk | FP64 |
Command unit/s^3 | Rung giật (Jerk): Đạo hàm của gia tốc, đại diện cho tốc độ thay đổi của gia tốc. Kiểm soát Jerk giúp các chuyển động bắt đầu và dừng mượt mà hơn, giảm rung động và mài mòn cơ khí. Giá trị Jerk cao có thể gây giật, ngược lại Jerk thấp sẽ tạo ra đường cong chuyển động mềm mại hơn. |
| S0+20 | ContinuousMode | INT16U |
Chế độ cập nhật liên tục: • 0: Không cập nhật. Các thông số vận tốc, gia tốc, giảm tốc sẽ không thay đổi trong quá trình chạy lệnh. <br>• 1: Cho phép thay đổi giá trị khi đang chạy lệnh. Điều này cho phép bạn điều chỉnh tốc độ hoặc gia tốc “on-the-fly” (ngay trong khi trục đang di chuyển), hữu ích cho các ứng dụng đòi hỏi sự linh hoạt cao. |
|
| S0+21 | Direction | INT16U |
Hướng di chuyển: • 0: Không có hướng (tức là hướng sẽ suy ra từ dấu của giá trị Position S0). <br>• 1: Hướng thuận (Positive). <br>• 2: Hướng ngược (Negative). <br>• 3: Đường đi ngắn nhất. Trục sẽ di chuyển theo hướng có quãng đường ngắn nhất để đạt được vị trí tương đối. <br>• 4: Hướng hiện tại. Trục sẽ tiếp tục di chuyển theo hướng mà nó đang di chuyển (nếu có) hoặc hướng được xác định bởi dấu của Position S0. |
|
| S0+22 | BufferMode | INT16U |
Chế độ bộ nhớ đệm: • 0: Chế độ cho phép làm gián đoạn các lệnh chuyển động khác. Lệnh A_MOVER sẽ được thực thi ngay lập tức, có thể dừng hoặc ghi đè lên lệnh trước đó. <br>• 1: Chế độ lưu bộ nhớ đệm (Buffered Mode). Lệnh A_MOVER sẽ được xếp vào hàng đợi và chỉ thực thi sau khi lệnh chuyển động hiện tại hoàn thành. Điều này hữu ích khi bạn cần một chuỗi các chuyển động liên tiếp mà không bị gián đoạn. |
|
| S1 | ErrCode | INT16U |
Mã lỗi: Thanh ghi 16-bit không dấu dùng để báo cáo mã lỗi nếu quá trình di chuyển gặp sự cố. Việc kiểm tra giá trị của S1 giúp bạn chẩn đoán nguyên nhân lỗi một cách nhanh chóng. | |
| S2 | Done | Bool |
Hoàn thành: Bit này sẽ chuyển sang ON (logic 1) khi lệnh A_MOVER đã được thực thi thành công và trục đã đạt đến vị trí đích. Bạn có thể sử dụng bit này làm cờ báo hoàn thành trong chương trình PLC. | |
| S2+1 | Busy | Bool |
Đang thực thi: Bit này sẽ ON trong suốt quá trình lệnh A_MOVER đang được thực thi (trục đang di chuyển). Nó sẽ OFF khi quá trình kết thúc (dù thành công hay lỗi). | |
| S2+2 | Active | Bool |
Hoạt động: Tương tự như Busy, bit này cho biết lệnh đã được PLC chấp nhận và đang trong quá trình xử lý. | |
| S2+3 | Abort | Bool |
Bị gián đoạn: Bit này sẽ ON nếu quá trình di chuyển bị gián đoạn hoặc hủy bỏ đột ngột do một nguyên nhân bên ngoài (ví dụ: lệnh dừng khẩn cấp, lỗi khác phát sinh). | |
| S2+4 | Error | Bool |
Bị lỗi: Bit này sẽ ON nếu quá trình di chuyển kết thúc nhưng gặp lỗi (ví dụ: không đạt được vị trí, vượt quá giới hạn). Khi bit này ON, bạn cần kiểm tra S1 (ErrCode) để biết mã lỗi cụ thể. | |
| S3 | Axis | INT16U |
ID trục tác động: Số ID của trục servo mà bạn muốn điều khiển di chuyển (ví dụ: Trục 0, Trục 1, v.v.). Điều này cho phép bạn kiểm soát việc di chuyển cho từng trục riêng biệt trong hệ thống đa trục. |
Ví dụ thực tế: Điều khiển Servo chạy tương đối dùng lệnh A_MOVER
Giả sử chúng ta muốn điều khiển trục servo có ID là 0 di chuyển một khoảng cách tương đối là 8000 xung.
// Kích hoạt lệnh A_MOVER cho Trục 0
// Khi M1 ON, Trục 0 sẽ bắt đầu di chuyển tương đối
+-------+ +--------------------------------------------------------------------+
| | | A_MOVER |
| M1 +-------+ D_POS D_VEL D_ACC D_DEC D_JERK D_CONT D_DIR D_BUFF D100 M200 K0 |
| (Input)| | (Position, Velocity, Acc, Dec, Jerk, ContMode, Dir, BuffMode, ErrCode, Done/Busy/Active/Abort/Error, Axis 0) |
+-------+ +--------------------------------------------------------------------+
Trong đó:
M1: Bit đầu vào kích hoạt lệnh A_MOVER.D_POS(hoặc một thanh ghi tương đương): Giá trị 8000 (khoảng cách di chuyển 8000 xung).D_VEL(hoặc một thanh ghi tương đương): Ví dụ 1000 (tốc độ 1000 xung/s).D_ACC(hoặc một thanh ghi tương đương): Ví dụ 500 (gia tốc 500 xung/s^2).D_DEC(hoặc một thanh ghi tương đương): Ví dụ 500 (giảm tốc 500 xung/s^2).D_JERK(hoặc một thanh ghi tương đương): Ví dụ 10000 (Jerk 10000 xung/s^3).D_CONT(hoặc một thanh ghi tương đương): 0 (Không cho phép cập nhật liên tục).D_DIR(hoặc một thanh ghi tương đương): 0 (Hướng theo dấu của Position).D_BUFF(hoặc một thanh ghi tương đương): 0 (Chế độ không đệm).D100: Thanh ghi kiểm tra lỗi (ErrCode).M200: Bit trạng thái cho quá trình thực thi lệnh (Done/Busy/Active/Abort/Error).K0: Chỉ định trục 0.

Mô tả quá trình:
- Khi M1 ON, lệnh A_MOVER cho trục 0 được kích hoạt. Bit
M200+1(Busy) vàM200+2(Active) sẽ ON. - Giả sử vị trí hiện tại của servo đang là 2000 xung.
- Trục 0 sẽ bắt đầu di chuyển theo chiều dương với vận tốc, gia tốc, giảm tốc và Jerk đã đặt, với quãng đường là 8000 xung.
- Sau khi trục di chuyển đủ 8000 xung, quá trình di chuyển hoàn tất.
- Lúc này, vị trí hiện tại của servo sẽ là
2000 + 8000 = 10000 xung. - Bit
M200(Done) sẽ ON, vàM200+1(Busy) cùngM200+2(Active) sẽ OFF.

Code mẫu sử dụng lệnh A_MOVER: Download
Ứng dụng phổ biến của lệnh A_MOVER
Lệnh A_MOVER cực kỳ hữu ích trong nhiều ứng dụng công nghiệp, bao gồm:
- Chuyển động lặp lại: Di chuyển các vật phẩm qua một khoảng cách cố định trên băng tải.
- Đóng gói sản phẩm: Đẩy sản phẩm ra khỏi vị trí lắp ráp một khoảng nhất định.
- Hệ thống phân loại: Di chuyển cơ cấu phân loại một bước để thả sản phẩm vào đúng vị trí.
- Chuyển động gia tăng: Thực hiện các bước di chuyển nhỏ, liên tục để căn chỉnh hoặc điều chỉnh vị trí một cách chính xác.
- Robot cộng tác: Thực hiện các bước dịch chuyển nhỏ trong không gian làm việc.
Lợi ích khi sử dụng A_MOVER trong hệ thống EtherCAT:
- Tối ưu hóa hiệu suất: Mạng EtherCAT đảm bảo lệnh A_MOVER được truyền tải và thực thi với độ trễ tối thiểu, cho phép các chuyển động nhanh và chính xác.
- Đồng bộ hóa cao: Trong các hệ thống có nhiều trục, khả năng đồng bộ của EtherCAT đảm bảo các trục phối hợp nhịp nhàng, ngay cả khi thực hiện các chuyển động tương đối phức tạp.
- Lập trình linh hoạt: Cho phép lập trình viên dễ dàng xác định các khoảng cách di chuyển mà không cần quan tâm đến vị trí tuyệt đối hiện tại của trục.
- Kiểm soát chuyển động mượt mà: Các tham số như Acceleration, Deceleration và Jerk cho phép điều chỉnh đường cong chuyển động, đảm bảo trục di chuyển êm ái, giảm rung động và tăng tuổi thọ cơ khí.
Khắc phục sự cố khi A_MOVER gặp lỗi
Nếu lệnh A_MOVER không hoạt động như mong đợi hoặc bit S2+4 (Error) ON, hãy kiểm tra các điểm sau:
- Kiểm tra S1 (ErrCode): Luôn là nơi đầu tiên bạn cần nhìn. Mã lỗi sẽ chỉ ra nguyên nhân cụ thể (ví dụ: trục vượt quá giới hạn, lỗi thông số, driver báo lỗi). Tham khảo tài liệu hướng dẫn của PLC và driver servo để tra cứu ý nghĩa mã lỗi.
- Đảm bảo Servo đã ON: Lệnh A_MOVER chỉ có thể thực thi khi driver servo đã được cấp nguồn và sẵn sàng hoạt động (Servo ON, sử dụng lệnh A_PWR).
- Kiểm tra các thông số chuyển động (S0 đến S0+16): Đảm bảo các giá trị Position, Velocity, Acceleration, Deceleration và Jerk được thiết lập hợp lý và nằm trong giới hạn cho phép của trục và driver.
- Kiểm tra giới hạn phần cứng/phần mềm: Đảm bảo trục không bị chặn bởi giới hạn vật lý hoặc giới hạn mềm được cài đặt trong phần mềm.
- Kiểm tra đấu nối EtherCAT: Đảm bảo kết nối mạng EtherCAT giữa PLC và driver servo ổn định, không có lỗi truyền thông.
- Trạng thái trục: Đảm bảo trục không đang ở trạng thái lỗi (Alarm) hoặc đang thực hiện một lệnh chuyển động khác không tương thích với BufferMode được chọn.
Kết luận
Lệnh A_MOVER là một công cụ mạnh mẽ và không thể thiếu để điều khiển các chuyển động theo vị trí tương đối cho trục servo trong hệ thống EtherCAT. Nắm vững cách thiết lập các thông số về khoảng cách, tốc độ, gia tốc, giảm tốc và Jerk, cùng với việc kiểm tra trạng thái và lỗi, sẽ giúp bạn tối ưu hóa hiệu suất, đạt được độ chính xác cao và đảm bảo sự ổn định cho các ứng dụng điều khiển chuyển động của mình.
Bạn cần hỗ trợ chuyên sâu về lệnh A_MOVER hoặc các vấn đề PLC/Servo EtherCAT khác?
Hãy liên hệ ngay với đội ngũ kỹ thuật của chúng tôi để được tư vấn và hỗ trợ nhanh chóng:
- Hotline miền Bắc: 0961.320.333
- Hotline miền Nam: 0931.866.800
- Fanpage hỗ trợ: facebook.com/Congtytudonghoatoancau
- Website: tudonghoatoacau.com

Zalo Miền Bắc