Hướng dẫn cấu hình kết nối mạng ETHERCAT điều khiển chuyển động nhiều trục servo

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.

1.1 Cấu trúc mạng

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.

Cấu hình phần cứng

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 Mode of Op

TxPDO gồm StatusWord, Actual Pos, Actual Vel 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)