Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 60

1501, TFDEN-127-003, 001

SỔ TAY HƯỚNG DẪN SỬ


DỤNG BỘ ĐIỀU KHIỂN FD
Nối đầu cắm

Ấn bản lần thứ 3

o Trước khi vận hành robot, vui lòng đọc kỹ sổ tay hướng dẫn vận hành và tuân thủ tất cả các mục
và chỉ dẫn an toàn trong tài liệu này.
o Chỉ những người đã tham dự khóa đào tạo về robot của chúng tôi mới được phép lắp đặt, vận
hành và bảo trì robot này.
o Khi sử dụng robot này, tuân thủ nội dung dưới đây về robot công nghiệp và vấn đề an toàn tại mỗi
quốc gia.
o Sổ tay hướng dẫn vận hành này phải được giao trong tình trạng nguyên vẹn cho người sẽ vận hành
robot này.
o Vui lòng gửi mọi thắc mắc về phần hướng dẫn vận hành chưa rõ ràng hoặc bất kỳ câu hỏi nào liên
quan đến dịch vụ hậu mãi của robot này tới bất kỳ trung tâm dịch vụ nào được nêu ở trang bìa sau.
Mục lục

Mục lục

Chương 1 Giới thiệu chung


1.1 Giới thiệu chung ....................................................................................................................................... 1-1
1.1.1 Chức năng giao tiếp đầu cắm của ngôn ngữ robot ......................................................................... 1-1
1.1.2 Thiết bị cần thiết ............................................................................................................................. 1-1
1.2 Thuật ngữ .................................................................................................................................................. 1-2
1.2.1 Đầu cắm .......................................................................................................................................... 1-2
1.2.2 Số cổng ........................................................................................................................................... 1-2
1.2.3 TCP/IP (Transport control protocol / Internet protocol) ................................................................. 1-2
1.2.4 TCP (Transport control protocol) ................................................................................................... 1-3
1.2.5 UDP (User Datagram Protocol) ...................................................................................................... 1-3
1.2.6 Kiểu thứ tự byte .............................................................................................................................. 1-3
1.2.7 Byte ................................................................................................................................................. 1-3
1.2.8 Máy chủ / Máy khách ...................................................................................................................... 1-3

Chương 2 Khởi tạo Chương trình Giao tiếp


2.1 Khởi tạo Chương trình Giao tiếp .............................................................................................................. 2-1
2.1.1 Thiết lập TCP/IP ............................................................................................................................. 2-1
2.1.2 Khởi tạo chương trình Giao tiếp ...................................................................................................... 2-1
2.1.3 Chuyển sang bộ điều khiển này và biên dịch ................................................................................... 2-1

Chương 3 Chức năng của Đầu cắm


3.1 Chức năng của Đầu cắm .......................................................................................................................... 3-1
3.1.1 Giới thiệu chung .............................................................................................................................. 3-1
3.1.2 Lưu đồ chương trình đầu cắm ......................................................................................................... 3-2
3.1.3 Khởi tạo đầu cắm ............................................................................................................................ 3-3
3.1.4 Đóng đầu cắm ................................................................................................................................. 3-3
3.1.5 Gán số cổng cho đầu cắm ................................................................................................................ 3-4
3.1.6 Chờ kết nối từ phía máy khách ........................................................................................................ 3-5
3.1.7 Kết nối vào máy chủ ....................................................................................................................... 3-6
3.1.8 Truyền dữ liệu lưu vào bộ đệm ....................................................................................................... 3-7
3.1.9 Truyền dữ liệu chuỗi ........................................................................................................................ 3-8
3.1.10 Nhận dữ liệu ................................................................................................................................. 3-9
3.1.11 Lưu chuỗi ký tự vào bộ đệm ....................................................................................................... 3-10
3.1.12 Lưu số nguyên vào bộ đệm ......................................................................................................... 3-11
3.1.13 Lưu số thực vào bộ đệm ............................................................................................................. 3-12
3.1.14 Lưu dữ liệu một byte vào bộ đệm. .............................................................................................. 3-13
3.1.15 Truy hồi chuỗi ký tự từ bộ đệm .................................................................................................. 3-14
3.1.16 Truy hồi giá trị số nguyên từ bộ đệm .......................................................................................... 3-15
3.1.17 Truy hồi giá trị thực từ bộ đệm ................................................................................................... 3-16
3.1.18 1 Truy hồi dữ liệu một byte từ bộ đệm ....................................................................................... 3-17
3.1.19 Biến số lỗi ................................................................................................................................... 3-18

Chương 4 Ví dụ về Khởi tạo Chương trình


4.1 Nhận giá trị biến số nguyên (Chương trình Máy chủ).............................................................................. 4-1

4.2 Nhận số lỗi theo Đơn vị (Chương trình Máy chủ).................................................................................... 4-2

1
Mục lục
4.3 Thu thập dữ liệu từ hệ thống cảm biến (Chương trình Máy khách)......................................................... 4-3

4.4 Truy hồi dữ liệu dịch chuyển từ cảm biến................................................................................................. 4-4

4.5 Quy trình nhận dữ liệu ............................................................................................................................. 4-9


4.5.1 Xác địch trước dung lượng dữ liệu .................................................................................................. 4-9
4.5.2 Truyền dung lượng dữ liệu với các dữ liệu khác .............................................................................. 4-9
4.5.3 Xác định ký tự sẽ truyền cuối cùng ................................................................................................. 4-9

Chương 5 Ví dụ về Chương trình Máy tính


5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều khiển.............................................................................5-1
5.1.1 Tổng quan về chương trình mẫu này ............................................................................................... 5-1
5.1.2 Quy trình vận hành .......................................................................................................................... 5-2
5.1.3 Ví dụ về màn hình .......................................................................................................................... 5-3
5.1.4 Ví dụ về chương trình Tác vụ người dùng (máy chủ) .................................................................... 5-4
5.1.5 Ví dụ về chương trình máy tính (máy khách) ................................................................................. 5-7
5.1.6 Ví dụ về chương trình Tác vụ người dùng (máy khách) .............................................................. 5-11
5.1.7 Ví dụ về chương trình máy tính (máy chủ) .................................................................................. 5-14

2
1.1 Giới
thiệu

Chương 1 Giới thiệu chung

1.1 Giới thiệu chung

1.1.1 Chức năng giao tiếp đầu cắm của ngôn ngữ robot
Chức năng này thực hiện kết nối Ethernet bằng cách sử dụng nhiều lệnh ứng dụng khác nhau từ chương trình
tác vụ người dùng. Việc lập trình tác vụ người dùng để kết nối Ethernet giúp chúng ta có thể tham chiếu và ghi
lại nhiều loại dữ liệu khác nhau từ nguồn bên ngoài bộ điều khiển thông qua mạng Ethernet.

Ví dụ:
1. Theo dõi biến số nguyên của bộ điều khiển từ máy tính cá nhân.
2. Thực hiện thay đổi để chuyển giá trị đăng ký từ màn hình cảm biến hoặc
màn hình khác.
3. Theo dõi tình trạng của robot và bộ điều khiển từ chức năng HỆ THỐNG trên máy tính cá nhân.

Bộ điều khiển này Hệ thống cảm biến

Cáp mạng Ethernet

Chương trình robot Chương trình tác vụ người dùng


・・・ Tạo một đầu cắm
・・・
・・・ 
Kết nối vào hệ thống cảm biến
Cuộc gọi tác vụ

Hệ thống
người dùng
Yêu cầu cung cấp dữ liệu
・・・ cảm biến
・・・ 
Nhận dữ liệu

Gán dữ liệu vào mạch
đăng ký di chuyển

Ví dụ về việc đấu nối vào hệ thống cảm biến,

Chỉ có thể sử dụng chức năng giao tiếp đầu cắm từ chương trình tác vụ người dùng, chứ không phải
từ chương trình robot.
Để sử dụng chức năng giao tiếp từ chương trình robot, vui lòng sử dụng lệnh ứng dụng “FN671
QUAN TRỌNG
CALLMCR” để gọi chương trình tác vụ người dùng từ chương trình robot.

CHÚ Ý
Để biết thông tin về ngôn ngữ lập trình robot, vui lòng tham khảo sổ tay hướng dẫn "Ngôn ngữ Lập
trình Robot".
Để biết thông tin về tác vụ người dùng, vui lòng tham khảo sổ tay hướng dẫn "Tác vụ người dùng".

CHÚ Ý Để biết thông tin về mạng sử dụng đầu cắm và thuật ngữ chung, vui lòng tjam khảo sách chuyên dụng
hiện đã sắn bán, nếu có.

1.1.2 Thiết bị cần thiết


Để sử dụng chức năng này, phải cung cấp cáp mạng Ethernet. Để biết thông tin về cách đấu nối cáp mạng
Ethernet, vui lòng tham khảo sổ tay hướng dẫn "Cài đặt" (Áp dụng cho mạng Ethernet).

1-1
1.2 Thuật ngữ

1.2 Thuật ngữ

Phần này sẽ trình bày các thuật ngữ liên quan đến hệ thống giao tiếp theo quy định của cuốn Sổ tay hướng dẫn này

1.2.1 Đầu
cắm
Thuật ngữ "đầu cắm" có nghĩa là một nhóm chức năng được sử dụng để khởi tạo chương trình mạng TCP/IP
đồng thời xác định các chức năng như kết nối mạng, truyền dữ liệu và nhận dữ liệu. Thông thường, mạng
Ethernet sẽ được sử dụng thông qua các đầu cắm.
Bộ điều khiển này thực hiện giao tiếp Ethernet bằng cách đánh dấu các chức năng khả dụng như đã nêu trên từ
ngôn ngữ lập trình robot.

Bộ điều khiển này Máy tính

Cổng số N1
Đầu cắm

Đầu cắm
Cổng số M2

Cổng số N2
Đầu cắm

Hệ thống cảm biến

Đầu cắm
Cổng số M1

Sơ đồ đầu cắm

1.2.2 Số cổng
Thuật ngữ "số cổng" có nghĩa là số lượng được sử dụng trong hệ thống giao tiếp để xác định dịch vụ thực
hiện chức năng giao tiếp. Vì số cổng được dùng để xác định dịch vụ, nên không được phép quy gán thừa số
cổng cho dịch vụ. Theo đó, không được phép sử dụng số cổng đã sử dụng trong bộ điều khiển này.
Vì các số từ số 1 đến số 1024 đã được sử dụng cho các dịch vụ thường sử dụng (ví dụ: FTP và HTTP), nên
thông thường sẽ không sử dụng những số này cho các số cổng.

Số cổng dùng trong bộ điều khiển này ở tình trạng ban đầu là: 233, 42353, và 51201

1.2.3 TCP/IP (Transport control protocol / Internet protocol)


Không được phép thực hiện nối mạng trừ khi hệ thống giao tiếp biết rõ cách thức các hệ thống này giao tiếp
tương tác với nhau. TCP/IP là một trong những quy tắc giao tiếp và chứa các quy tắc thường được áp dụng để
giao tiếp mạng Ethernet.
Chức năng này cho phép giao tiếp bằng cách sử dụng TCP hoặc UDP.

1-2
1.2 Thuật ngữ

1.2.4 TCP (Transport control protocol)


TCP là quy tắc thực hiện giao tiếp có độ tin cậy cao.
Để đảm bảo giao tiếp có độ tin cậy cao, TCP sẽ kiểm tra đảm bảo dữ liệu đã đến đúng cổng đích và, nếu không
thì, sẽ gửi lại dữ liệu này thêm một lần nữa, hoặc quyết định lưu lượng mạng đang bị tắc để điểu khiển lưu
lượng dữ liệu.

1.2.5 UDP (User Datagram Protocol)


UDP là quy tắc thực hiện giao tiếp tốc độ cao.
UDP cho phép xử lý giao tiếp tốc độ cao bằng cách bỏ qua quy trình như kiểm tra đảm bảo chắc chắn đã truyền
dữ liệu như TCP.
Tuy nhiên, sẽ không dò được trong trường hợp dữ liệu chưa đến cổng đích.

1.2.6 Ký tự
kiểu
Thuật ngữ "ký tự kiểu byte" có nghĩa là thứ tự xử lý dữ liệu kiểu số.
byte Trong giao tiếp, thường thì dữ liệu sẽ được truyền dưới dạng byte. Byte chỉ khả dụng để thể hiện giá trị từ 0
đến 255. Theo đó, để hiển thị giá trị lớn hơn 255 như 10000, thì chia nhỏ từ “1000 =39x256 + 16” thành 3916,
rồi chia theo byte để truyền dữ lệu. Thứ tự truyền dữ liệu từ giá trị byte lớn nhất (36) hoặc giá trị byte nhỏ nhất
(16) sẽ được gọi là ký tự kiểu byte.
Việc truyền dữ liệu từ giá trị byte lớn nhất sẽ được gọi là hệ thống big-endian (đầu to), còn truyền từ giá trị byte
nhỏ nhất sẽ được gọi là hệ thống little-endian (đầu nhỏ). Chức năng này sẽ truyền dữ liệu trong hệ thống big-
endian.

1.2.7 Byte
Byte thường gồm có 8 chữ số (số nhị phân). Dung lượng dữ liệu để giao tiếp sẽ coi byte là đơn vị nhỏ nhất.

1.2.8 Máy chủ / Máy khách


Thuật ngữ "máy chủ" có nghĩa là một chương trình cung cấp các dịch vụ hoặc chức năng khi tiếp nhận yêu
cầu kết nối từ cổng đích, còn thuật ngữ "máy khách" có nghĩa là chương trình thực hiện yêu cầu kết nối vào
máy chủ.

1-3
1.2 Thuật ngữ

LƯU Ý

1-4
2.1 Lập Chương trình Giao tiếp

Chương 2 Khởi tạo Chương trình Giao tiếp

2.1 Khởi tạo Chương trình Giao tiếp

2.1.1 Thiết đặt TCP/IP


Để thực hiện giao tiếp mạng Ethernet, cần phải lập địa chỉ IP của máy chủ này và thiết đặt mặt nạ mạng con.
Để lập các thiết đặt này, chọn màn hình [Constant Setting] [8 Communication]  [Ethernet] [TCP/IP]
theo thứ tự đã nêu.
Để biết cách thiết lập TCP/IP, vui lòng tham khảo sổ tay hướng dẫn "Cài đặt" (Chương Ethernet).

2.1.2 Khởi tạo chương trình ngôn ngữ lập


trình robot
Khởi tạo chương trình được dùng để thực Ví dụ về chương trình giao tiếp
hiện giao tiếp bằng ngôn ngữ lập trình SOCKCREATE 1,0
robot. Để biết thông tin về quy trình thực SOCKCONNECT 1,1,23,5
hiện và chi tiết sử dụng các chức năng SOCKSENDSTR 1,"USR",LEN("USR"),5,V1%,3
giao tiếp, vui lòng tham khảo thông tin ・
trình bày ở Chương 3. ・
Để biết thông tin về ngữ pháp ngôn ngữ ・
lập trình robot, vui lòng tham khảo sổ tay
hướng dẫn "Ngôn ngữ Lập trình Robot".

Quy tắc đặt tên tập tin USERTASK-A.*** (*** là số chương trình)
*Số chương trình tác vụ người dùng nằm trong khoảng từ 000 đến 999.
Phương thức chỉnh Vui lòng tham khảo sổ tay hướng dẫn sử dụng máy tính cá nhân hoặc trình chỉnh
sửa sửa văn bản hiện đang sử dụng.
Dung lượng tập tin Sử dụng dung lượng tập tin tối đa là 64 KB (65.536 byte).
Biện pháp an toàn đối Có thể mô tả tối đa là 254 ký tự/dòng và 999 dòng/chương trình
với .
câu, dòng và ký Không phân biệt ký tự abc. Sử dụng ký tự một byte cho mọi thứ trừ các nhận xét
tự và biến số theo chuỗi.
Sẽ dễ dàng mô tả dòng trống. (Thường được bỏ qua khi biên dịch)
Các vấn đề khác Tạo ký tự 2 byte trong mã JIS di chuyển và mã nạp đòng bằng cách sử dụng
CR + LF.

2.1.3 Chuyển sang bộ điều khiển này và biên dịch


Để tải về chương trình ngôn ngữ lập trình robot do máy tính cá nhân bên ngoài khởi tạo về bộ điều kiển này,
phải cung cấp bộ nhớ tạm nhỏ gọn hoặc nối mạng Ethernet.

Để sao chép chương trình ngôn ngữ lập trình robot từ bộ nhớ USB, chọn màn hình [Service][4 File
Manager] [1 Copy] theo thứ tự đã nêu.
Chỉ rõ thư mục CHƯƠNG TRÌNH sẽ lưu chương trình làm việc như là thư mục ghi chương trình
ngôn ngữ lập trình robot. Không được phép chỉnh sửa hoặc biên dịch mọi chương trình ngôn ngữ lập trình
robot ngoài các chương trình đã nêu trong thư mục CHƯƠNG TRÌNH này.
Để biết thông tin về quy trình dành riêng cho [Trình quản lý tập tin], vui lòng tham khảo thông tin trong
cuốn sổ tay hướng dẫn "Vận hành Cơ bản".

Ngoài ra, để gửi chương trình ngôn ngữ lập trình robot qua mạng Ethernet, chọn màn hình [Service][4
File Manager] [8 Copy] theo thứ tự đã nêu.
Trong trường hợp này, chỉ cần sao chép chương trình ngôn ngữ lập trình robot từ thẻ nhớ USB, chỉ rõ thư
mục CHƯƠNG TRÌNH sẽ lưu chương trình làm việc như là thư mục ghi chương trình ngôn ngữ lập trình
robot.
Để biết thông tin về quá trình gửi tập tin bằng cách dùng FTP, vui lòng tham khảo thông tin trong Chương 8
Nối mạng Ethernet, sổ tay hướng dẫn "Cài đặt".

2-1
2.1 Lập Chương trình Giao tiếp

Bộ nhớ trong INI

CÔNG VIỆC ĐƠN VỊ

NHẬT KÝ

CHƯƠNG TRÌNH
 Thư mục lưu chương trình
ngôn ngữ lập trình robot

* THEO DÕI

Thư mục lưu chương trình ngôn ngữ lập trình robot

Để biên dịch chương trình, chọn màn hình [Service] [9 Program conversion] [8 Language conversion] theo
thứ tự đã nêu.
Để biết thông tin về quy trình biên dịch, vui lòng tham khảo sổ tay hướng dẫn "Ngôn ngữ Lập trình Robot".

2-2
3.1 Chức năng của
Đầu cắm

Chương 3 Chức năng của Đầu cắm

3.1 Chức năng của Đầu cắm

3.1.1 Giới
thiệu
Về cơ bản, đầu cắm có chức năng trao đổi dữ liệu với mạng thông qua bộ đệm. Dữ liệu sẽ được trao đổi bằng
chung cách sử dụng lệnh ứng dụng chuyên dùng.
Bộ điều khiển này có thể xác định đồng thời 16 đầu cắm (Đầu cắm số 1 đến Đầu cắm số 16), và có thể sử dụng
16 bộ nhớ đệm (Bộ đệm số 1 đến Bộ đệm số 16) có dung lượng là 1024 byte.

Đầu cắm số 1

Biến số Truyền
theo
chuỗi dữ liệu

Biến số
nguyên
Dữ Dữ liệu tham khảo
Bộ đệm 1
liệu
Biến thiết
số thực
lập ・・・

Đầu cắm số 1

Truyền
Biến số
nguyên dữ liệu

Biến
số thực
Dữ Ghi dữ liệu
liệu Bộ đệm 1
thiết
Biến số
theo lập
・・・
chuỗi

Nếu phát sinh lỗi n liên quan đến quá trình giao tiếp, chức năng của đầu cắm sẽ ghi lỗi vào phần biến số
lỗi để hoàn thành các bước thực hiện. Tuy nhiên, lỗi giao tiếp sẽ không ngừng chế độ phát lại chương
trình. Sau khi chức năng đầu cắm hoàn thành các bước của mình, tiến hành theo dõi biến số lỗi để kiểm
tra tình trạng giao tiếp.

Có thể sử dụng một số bộ đệm trong cùng một đầu cắm. Đồng thời cũng có thể sử dụng một bộ đệm
CHÚ Ý trong nhiều đầu cắm. Trong trường hợp này, cần sử dụng khóa liên động “I signal waiting” nếu
không thể truy cập đồng thời được.

Thông thường, một số tác vụ người dùng có thể thực thi đồng thời cùng một chương trình.
CHÚ Ý Tuy nhiên, điều này sẽ bất khả thi đối với quá trình giao tiếp của đầu cắm bởi vì sẽ không thể cùng tạo
ra một số lượng đầu cắm được.

2-3
3.1 Chức năng của
Đầu cắm

3.1.2 Lưu đồ chương trình đầu cắm


Đây là lưu đồ thường được dùng cho các chương trình đầu cắm. Thậm chí về cơ bản, các chương trình phức
tạp cũng tuân thủ theo lưu đồ nêu dưới đây.
Máy khách
Để biết thông tin về chương trình đầu cắm máy
khách, về cơ bản hãy làm theo lưu đồ minh họa bên
trái màn hình.
Tạo đầu cắm
(SOCKCREATE)
1. Tạo đầu cắm Tạo đầu cắm.

2. Kết nối với máy chủ


Kết nối với máy chủ Kết nối đầu cắm tới một cổng do máy chủ chỉ
(SOCKCONNECT) định.

Gửi yêu cầu (SOCKSEND, 3. Gửi yêu cầu.


SOCKSENDSTR) Gửi thông báo yêu cầu cung cấp dịch vụ (VD: gửi
lại dữ liệu hoặc đăng nhập) tới máy chủ.

Nhận phản hồi


(SOCKRECV) 4. Nhận phản hồi
Nhận tình trạng thực thi của dịch vụ hoặc dữ liệu
yêu cầu.
Đóng đầu cắm
(SOCKCLOSE) 5. Đóng đầu cắm
Mở số đầu cắm đã sử dụng.

Máy chủ

Để biết thông tin về chương trình đầu cắm máy


Tạo đầu cắm (SOC chủ, về cơ bản hãy làm theo lưu đồ minh họa bên
KCREATE) trái màn hình.

1. Tạo đầu cắm


Tạo đầu cắm.
Gán số cổng (SOC KBIND)
2. Gán số cổng
Chỉ rõ số cổng chờ kết nối từ phía máy khách.

Chờ kết nối từ phía máy khách 3. Chờ kết nối từ phía máy khách Dừng chương
(SOCKWAIT) trình và chờ cho đến khi máy chủ nhận được yêu
cầu kết nối từ phía máy khách.

Nhận thông báo yêu cầu (SOC 4. Nhận thông báo yêu cầu
KREC V)
Nhận thông báo yêu cầu từ phía máy
khách.
Gửi dữ liệu hồi đáp (SOC KSEND,
SOCKSENDSTR) 5. Gửi dữ liệu hồi đáp
Gửi thông báo hồi đáp theo yêu cầu của máy
khách.
Đóng đầu cắm (SOC
KCLOSE) 5 Đóng đầu cắm
Mở số đầu cắm đã sử dụng.

3-2
3.1 Chức năng của
Đầu cắm

3.1.3 Tạo đầu cắm

Tên lệnh
SOCKCREATE
Mã FN 570
Tên tiêu đề Tạo đầu cắm
Giới thiệu chung Sử dụng để tạo đầu cắm.

Giới thiệu chung


Sử dụng chức năng này để tạo đầu cắm. Để kết nối bằng cách dùng đầu cắm, hãy kích hoạt chức năng này
trước khi kích hoạt các chức năng đầu cắm khác.

Thông số kỹ thuật

Thông số kỹ Số đầu cắm Dùng để nêu rõ số đầu cắm sẽ sử dụng. Nêu rõ số


thuật 1 lượng đầu cắm đã tạo nhưng bị lỗi.
(Nêu rõ phạm vi: 1 đến 16)

Thông số kỹ TCP/UDP Dùng để chỉ rõ sử dụng đầu cắm thiết lập bằng TCP
thuật 2 hay UDP.

Để sử dụng TCP, hãy ghi rõ "0". Để sử dụng UDP,


hãy ghi rõ "1". (Nêu rõ phạm vi: 0 hoặc 1)

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


SOCKCREATE 1, 0
Lệnh SOCKCREATE tạo ra đầu cắm cho TCP trong Đầu cắm số 1.

3.1.4 Đóng đầu cắm

Tên lệnh SOCKCLOSE


Mã FN 571
Tên tiêu đề Đóng đầu cắm
Giới thiệu chung Dùng để đóng đầu cắm.

Giới thiệu chung


Chức năng này dùng để xóa bỏ đầu cắm đã tạo bằng cách thực thi lệnh SOCKCREATE để khởi động lại
hệ thống. Nếu đã hoàn thành chương trình tác vụ người dùng sử dụng đầu cắm mà không cần dùng lệnh
SOCKCLOSE, đầu cắm sẽ tự động đóng lại.

Thông số kỹ thuật

Thông số kỹ Số đầu cắm Dùng để nêu rõ số đầu cắm sẽ sử dụng. Nêu rõ số


thuật 1 lượng đầu cắm chưa tạo nhưng sẽ bị lỗi.
(Nêu rõ phạm vi: 1 đến 16)

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


SOCKCLOSE 1
Lệnh SOCKCLOSE đóng đầu cắm đã tạo trong Đầu cắm số 1.

3-5
3.1 Chức năng của
Đầu cắm

3.1.5 Gán số cổng cho đầu cắm

Tên lệnh SOCKBIND


Mã FN 572
Tên tiêu đề Đầu cắm dự phòng
Giới thiệu chung Dùng để chỉ rõ cổng dự phòng.

Giới thiệu chung


Để sử dụng bộ điều khiển này như là máy chủ, cần phải sử dụng chức năng này để gán cổng dự phòng
chờ kết nối vào số đầu cắm từ phía máy khách.

Thông số kỹ thuật

Thông số kỹ Số đầu cắm Dùng để nêu rõ số đầu cắm sẽ sử dụng. Nêu rõ số


thuật 1 lượng đầu cắm chưa tạo nhưng sẽ bị lỗi.
(Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Số cổng Dùng để nêu rõ cổng dự phòng vận hành đầu cắm
thuật 2 như là máy chủ. Chỉ rõ số cổng đã được sử dụng
nhưng bị lỗi.
(Nêu rõ phạm vi: từ 1 đến 65535)

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


SOCKBIND 1, 48952
Lệnh SOCKBIND gán số cổng 48952 vào đầu cắm đã tạo trong Đầu cắm số 1.

3-4
3.1 Chức năng của
Đầu cắm

3.1.6 Chờ kết nối từ phía máy khách

Tên lệnh SOCKWAIT


Mã FN 573
Tên tiêu đề Chờ tiếp nhận
Dùng để chờ cho tới khi kết nối bên ngoài vào số cổng đã quy gán.
Giới thiệu chung

Giới thiệu chung


Sử dụng chức năng này để chờ cho tới khi kết nối bên ngoài vào số cổng đã quy gán. Khi hết thời gian
chờ kết nối, chương trình sẽ ngừng phát lại. Nếu đã hết thời gian chờ, chương trình sẽ khởi động lại chế độ
phát lại.
Lệnh SOCKWAITchỉ khả dụng đối với TCP.

Thông số kỹ thuật

Thông số kỹ Số cổng hết Dùng để nêu rõ số đầu cắm sẽ sử dụng. Nêu rõ số


thuật 1 thời gian lượng đầu cắm chưa tạo nhưng sẽ bị lỗi.
chờ kết nối (Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Số cổng giao Dùng để nêu rõ số cổng dùng để kết nối vào máy
thuật 2 tiếp khách đã được truy cập vào hệ thống. Khi máy
khách truy cập, đầu cắm sẽ được khởi tạo trong số
đầu cắm đã thiết lập. Sau đó, chức năng này sẽ cần
phải đóng lại bằng cách sử dụng chức năng
SOCKCLOSE sau khi hoàn thành quá trình giao
tiếp.
(Nêu rõ phạm vi: từ 1 đến 16)
Thông số kỹ Thời gian chờ Dùng để nêu rõ thời gian chờ kết nối tính bằng
thuật 3 giây. Việc ghi "0" có nghĩa là sẽ không hết thời
gian chờ để duy trì chế độ chờ kết nối
(Nêu rõ phạm vi: từ 0 đến 20)

Ví dụ về hiển thị màn hình


SOCKWAIT 1,2,5
Lệnh SOCKWAIT chờ kết nối ở Đầu cắm số 1. Khi kết nối từ máy khách, tiến hành kết nối vào Đầu
cắm số 2. Nếu không kết nối với máy khách trong thời gian năm giây, thời gian chờ sẽ hết.

3-5
3.1 Chức năng của
Đầu cắm

3.1.7 Kết nối với máy chủ

Tên lệnh SOCKCONNECT


Mã FN 574
Tên tiêu đề Kết nối với máy chủ
Giới thiệu chung Dùng để kết nối với máy chủ

Giới thiệu chung


Chức năng này được sử dụng để kết nối với máy chủ nếu chọn chế độ TCP. Nếu chọn chế độ UDP, thì sẽ
không thể kết nối với máy chủ được, tuy nhiên cần phải thiết lập địa chỉ IP bằng lệnh SOCKCONNECT.

Thông số kỹ thuật

Thông số kỹ Số đầu cắm Dùng để nêu rõ số đầu cắm sẽ sử dụng. Nêu rõ số


thuật 1 lượng đầu cắm chưa tạo nhưng sẽ bị lỗi.
(Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Địa chỉ IP Dùng để chỉ rõ byte có trọng số nhỏ nhất của địa chỉ
thuật 2 IP máy chủ. Đối vớ m ba byte cao, hãy sử dụng
cùng loại byte như byte của thiết lập TCP/IP bộ điều
khiển này.
(Nêu rõ phạm vi: từ 1 đến 254)
Thông số kỹ Số cổng Dùng để nêu rõ cổng dự phòng của máy chủ.
thuật 3 (Nêu rõ phạm vi: từ 1 đến 65535)
Thông số kỹ Thời gian chờ Dùng để nêu rõ thời gian chờ kết nối tính bằng
thuật 4 giây.
(Nêu rõ phạm vi: từ 0 đến 20)

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


SOCKCONNECT 1,101,80,10
Lệnh SOCKCONNECT dùng Đầu cắm số 1 để lập yêu cầu kết nối vào máy chủ. Địa chỉ IP của máy
chủ gặp giá trị phát hiện bằng cách lấy "101" là byte cuối cùng của địa chỉ IP, và sổ cổng đến "80". Nếu
không có phản hồi từ phía máy chủ trong thời gian 10 giây, thời gian chờ sẽ hết.

3-6
3.1 Chức năng của
Đầu cắm

3.1.8 Truyền dữ liệu lưu vào bộ đệm

Tên lệnh SOCKSEND


Mã FN 575
Tên tiêu đề Truyền dữ liệu
Giới thiệu chung Dùng để truyền dữ liệu được lưu trong bộ đệm đã chỉ định.

Giới thiệu chung


Chức năng này được dùng để truyền dữ liệu được lưu trong bộ đệm đã chỉ định. Nếu máy khách đóng đầu
cắm mà không kết nối vào máy chủ, thì sẽ xảy ra lỗi. Tuy nhiên, do lệnh SOCKSEND không thể nhận diện
rằng máy khách đã ngắt đầu cắm nếu máy khách làm như vậy mà không đóng đầu cắm, thì có thể sẽ không
xảy ra lỗi tại thời điểm thực thi lệnh này.
Để truyền dữ liệu có độ dài vượt quá dung lượng bộ đệm, phải truyền dữ liệu thành hai đợt.
Thông số kỹ thuật

Thông số kỹ Số đầu cắm Dùng để nêu rõ số đầu cắm sẽ sử dụng. Nêu rõ số


thuật 1 lượng đầu cắm chưa tạo nhưng sẽ bị lỗi.
(Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Số bộ đệm Dùng để chỉ rõ số bộ đệm.


thuật 2 (Nêu rõ phạm vi: từ 1 đến 16)
Thông số kỹ Độ dài dữ Dùng để chỉ rõ số lượng byte dữ liệu lưu trong bộ
thuật 3 liệu truyền đệm chỉ định sẽ truyền đi.
(Nêu rõ phạm vi: từ 1 đến 1024)
Thông số kỹ Thời gian chờ Dùng để nêu rõ thời gian chờ kết nối tính bằng
thuật 4 giây. Việc ghi "0" có nghĩa là sẽ không hết thời
gian chờ để duy trì chế độ chờ hoàn thành truyền
dữ liệu.
(Nêu rõ phạm vi: từ 0 đến 20)
Thông số kỹ Biến số Dùng để chỉ rõ biến số dùng để ghi dung lượng dữ
thuật 5 nguyên liệu đã gửi (theo byte).
Dung lượng dữ liệu thực gửi có thể nhỏ hơn dung
lượng dữ liệu do thông số 3 quy định (Dộ dài dữ
liệu truyền gửi).

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


SOCKSEND 1,1,10,5,V1%
Lệnh SOCKSEND truyền tối đa là 10 byte dữ liệu lưu trong Bộ đệm số 1 đến thiết bị giao tiếp được
nối vào Đầu cắm số 1. Lệnh SOCKSEND sẽ truyền dữ liệu, và khi ghi dung lượng dữ liệu thực gửi là
V1% biến số nguyên, thì sẽ hoàn thành bước này. Nếu lệnh này không thể truyền dữ liệu trong thời gian
năm giây, thời gian chờ sẽ hết.

3-7
3.1 Chức năng của
Đầu cắm

3.1.9 Truyền dữ liệu chuỗi

Tên lệnh SOCKSENDSTR


Mã FN 576
Tên tiêu đề Chuỗi ký tự truyền đi
Giới thiệu chung Dùng để truyền chuỗi dữ liệu đã chỉ định.

Giới thiệu chung


Chức năng này được dùng để truyền chuỗi dữ liệu đã chỉ định. Tại thời điểm này, có thể thêm vào các ký tự
kết thúc chỉ rõ việc kết thúc chuỗi dữ liệu.
Nếu máy khách đóng đầu cắm mà không kết nối vào máy chủ, thì sẽ xảy ra lỗi.
Tuy nhiên, do lệnh SOCKSENDSTR không thể nhận diện rằng máy khách đã ngắt đầu cắm nếu máy khách làm
như vậy mà không đóng đầu cắm, thì có thể sẽ không xảy ra lỗi tại thời điểm thực thi lệnh này.

Thông số kỹ thuật

Thông số kỹ Số đầu cắm Dùng để nêu rõ số đầu cắm sẽ sử dụng. Nêu rõ số


thuật 1 lượng đầu cắm chưa tạo nhưng sẽ bị lỗi.
(Nêu rõ phạm vi: 1 đến 16)

Thông số kỹ Chuỗi ký Dùng để nêu rõ dữ liệu chuỗi sẽ truyền đi. Có thể chỉ
thuật 2 tự định rõ dữ liệu chuỗi bằng biến số chuỗi và hằng số
chuỗi.
Thông số kỹ Độ dài dữ liệu Dùng để chỉ rõ độ dài dữ liệu truyền theo byte.
thuật 3 truyền (Nêu rõ phạm vi: 0 đến 199)

Thông số kỹ Thời gian chờ Dùng để nêu rõ thời gian chờ kết nối tính bằng giây.
thuật 4 Việc ghi "0" có nghĩa là sẽ không hết thời gian chờ
kết nối (Nêu rõ phạm vi: 0 đến 20)

Thông số kỹ Biến số Dùng để chỉ rõ biến số dùng để ghi dung lượng dữ


thuật 5 nguyên liệu đã gửi (theo byte).
Dung lượng dữ liệu thực gửi có thể nhỏ hơn
dung lượng dữ liệu do thông số 3 quy định (Độ dài
dữ liệu truyền đi).
Thông số kỹ Ký tự chấm Dùng để nêu rõ ký tự chấm dứt đã bổ sung
thuật 6 dứt vào chuỗi ký tự sẽ gửi. Nếu chỉ rõ bất kỳ ký tự
chấm dứt nào, độ dài dữ liệu truyền đi có thể dài
hơn số ký tự chấm dứt. Nếu bỏ qua chỉ dẫn kỹ
thuật của ký tự chấm dứt, thì robot sẽ thực hiện
chuyển động giống nhau như khi ghi rõ thông số
"0". 0: Không thêm vào ký tự chấm dứt
1: Dữ liệu đã gửi với “¥r” được thêm vào cuối
chuỗi ký tự
2: Dữ liệu đã gửi với “¥n” được thêm vào cuối
chuỗi ký tự
3: Dữ liệu đã gửi với “¥r¥n” được thêm vào cuối
chuỗi ký tự
(Nêu rõ phạm vi: từ 0 đến 3)

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


SOCKSENDSTR 1, ”ABC”, LEN(“ABC”), 5, V1%
Lệnh SOCKSENDSTR truyền chuỗi ký tự “ABC” đến thiết bị giao tiếp đã nối với Đầu cắm số 1.
Lệnh SOCKSEND sẽ truyền dữ liệu, và khi ghi dung lượng dữ liệu thực gửi là V1% biến số nguyên, thì
sẽ hoàn thành bước này. Nếu lệnh này không thể truyền dữ liệu trong thời gian năm giây, thời gian chờ
sẽ hết. Như vậy có nghĩa là sẽ bỏ qua thông số 6. Trong trường hợp này, phần mô tả sẽ có nghĩa tương
tự như khi quy định thông số 6 là "0".

3-8
3.1 Chức năng của
Đầu cắm

3.1.10 Nhận dữ liệu


Tên lệnh SOCKRECV
Mã FN 577
Tên tiêu đề Nhận dữ liệu
Giới thiệu chung Dùng để nhận dữ liệu.

Giới thiệu chung


Chức năng này dùng để nhận dữ liệu và thực hiện các hoạt động khác tùy thuộc vào việc sử dụng TCP hay UDP.

Nếu dùng TCP, lệnh SOCKRECV sẽ hoàn thành bước chức năng trong mọi trường hợp dưới đây.
 Dung lượng dữ liệu thực nhận vượt quá độ dài dữ liệu đã nhận.
 Máy khách đã đóng đầu cắm.
 Hết thời gian chờ.
Nếu lệnh này nhận được dữ liệu có độ dài ngắn hơn độ dài dữ liệu đã nhận, thì vẫn phải chờ
nhận dữ liệu thêm một lần nữa. Chức năng này sẽ được coi là đã hoàn thành nếu dữ liệu được nhận lặp đi
lặp lại và độ dài dữ liệu lũy kế vượt quá độ dài dữ liệu đã nhận.

Nếu dùng UDP, lệnh SOCKRECV sẽ hoàn thành bước chức năng trong mọi trường hợp dưới đây.
 Đã nhận dữ liệu.
 Hết thời gian chờ.
Trong chế độ UDP, khi nhận dữ liệu, lệnh SOCKRECV sẽ lưu dữ liệu.
đã nhận vào bộ đệm để hoàn thành chức năng của mình. Theo đó, độ dài dữ liệu thực nhận có thể ngắn hơn
độ dài dữ liệu nhận theo quy định. Ngoài ra, nếu độ dài dữ liệu thực nhận dài hơn độ dài dữ liệu nhận theo
quy định, thì lệnh này sẽ cắt bỏ phần dư thừa để trả lại lỗi.
Ngoài ra, bằng cách thực thi lệnh này sau khi nhận dữ liệu, SOCKSEND có thể hồi đáp tới bộ truyền dữ
liệu. Để truyền dữ liệu tới thiết bị giao tiếp khác so với bộ truyền dữ liệu, phải cài đặt lại cổng đích bằng
cách sử dụng lệnh SOCKCONNECT.
Thông số kỹ thuật

Thông số kỹ Số đầu cắm Dùng để nêu rõ số đầu cắm sẽ sử dụng. Nêu rõ số


thuật 1 lượng đầu cắm chưa tạo nhưng sẽ bị lỗi.
(Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Số bộ Dùng để chỉ rõ số bộ đệm đã lưu dữ liệu nhận về.


thuật 2 đệm (Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Độ dài dữ liệu Dùng để chỉ rõ dung lượng dữ liệu tiếp nhận theo
thuật 3 tiếp nhận byte. (Chỉ rõ: từ 0 đến 1024)
Thông số kỹ Thời gian chờ Dùng để nêu rõ thời gian chờ kết nối tính bằng
thuật 4 giây. Việc ghi "0" có nghĩa là sẽ không hết thời
gian chờ để duy trì chế độ chờ kết nối
(Chỉ rõ: từ 0 đến 20)
Thông số kỹ Biến số nguyên Dùng để chỉ rõ biến số dùng để ghi dung lượng dữ
thuật 5 liệu đã nhận và đã ghi trong bộ đệm truyền/nhận
(theo byte). Dung lượng dữ liệu thực nhận có thể
nhỏ hơn dung lượng dữ liệu do thông số 3 quy định
(Dộ dài dữ liệu tiếp nhận).

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


SOCKRECV 1, 1, 10, 5, V1%
Lệnh SOCKRECV nhận dữ liệu truyền từ thiết bị giao tiếp được nối với Đầu cắm số 1 và lưu dữ liệu
tối đa là 10 byte vào Bộ đệm số 1 tới thiết bị giao tiếp được nối vào Đầu cắm số 1. Dung lượng dữ liệu
thực nhận sẽ được ghi vào V1% biến số nguyên. Nếu lệnh này không thể nhận dữ liệu trong thời gian
năm giây, thời gian chờ sẽ hết.

3-9
3.1 Chức năng của
Đầu cắm

3.1.11 Lưu chuỗi ký tự vào bộ đệm

Tên lệnh SETSTR


Mã FN 580
Tên tiêu đề Lưu vào bộ đệm (chuỗi ký tự)
Giới thiệu chung Dùng để ghi dữ liệu chuỗi tại bất kỳ vị trí nào của bộ đệm.

Giới thiệu chung


Chức năng này dùng để ghi dữ liệu chuỗi tại bất kỳ vị trí nào của bộ đệm. Nếu bộ đệm đã đầy ký tự chuỗi cần ghi (tức là, nếu "số vị trí bắt
đầu của byte" vượt quá dung lượng bộ đệm), sẽ xảy ra lỗi “E2250 Lỗi dữ liệu bước”

Số
byte
Chuỗi ký tự

Vị trí
bắt đầu
Bộ đệm

Thông số kỹ thuật

Thông số kỹ Số bộ đệm Dùng để chỉ rõ số bộ đệm đã ghi dữ liệu.


thuật 1 (Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Chuỗi ký Dùng để chỉ rõ chuỗi ký tự sẽ ghi


thuật 2 tự vào bộ đệm. Có thể chỉ định rõ chuỗi ký tự bằng
biến số chuỗi và hằng số chuỗi.

Thông số kỹ Vị trí bắt đầu Dùng để chỉ rõ vị trí bộ đệm sẽ lưu dữ liệu.
thuật 3 (Nêu rõ phạm vi: từ 0 đến 1023)

Thông số kỹ Số byte Dùng để chỉ rõ dung lượng dữ liệu sẽ lưu.


thuật 4 (Nêu rõ phạm vi: từ 1 đến 199)

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


SETSTR 1, V1$, 0, 10
Lệnh SETSTR lưu dữ liệu đối với 10byte đầu trong chuỗi ký tự được lưu trong biến số V1$ từ đầu Bộ
đệm số 1.

3-10
3.1 Chức năng của
Đầu cắm

3.1.12 Lưu số nguyên vào bộ đệm

Tên lệnh SETINT


Mã FN 581
Tên tiêu đề Lưu vào bộ đệm (số nguyên)
Dùng để lưu số nguyên vào bất kỳ vị trí nào của bộ đệm.
Giới thiệu chung

Giới thiệu chung


Chức năng này được dùng để lưu số nguyên vào bất kỳ vị trí nào của bộ đệm. Đối với giá trị số nguyên,
lưu dữ liệu số nguyên đã ký cho 4 byte vào hệ thống big-endian.

Thông số kỹ thuật

Thông số kỹ Số bộ đệm Dùng để chỉ rõ số bộ đệm đã ghi dữ liệu.


thuật 1 (Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Số nguyên Dùng để chỉ rõ giá trị số nguyên sẽ lưu


thuật 2 vào bộ đệm. Có thể chỉ định rõ giá trị số nguyên
bằng biến số chuỗi và hằng số chuỗi.
(Nêu rõ phạm vi: từ - 2147483647 đến
2147483647)

Thông số kỹ Vị trí bắt đầu Dùng để chỉ rõ vị trí bộ đệm sẽ lưu dữ liệu và lưu dữ
thuật 3 liệu cho 4 byte từ vị trí được chỉ định. (Nêu rõ phạm
vi: từ 0 đến 1020)

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


SETINT 1,25,0
Lệnh SETINT sẽ lưu hằng số 25 vào khu vực 4 byte tính từ đầu Bộ đệm số 1.

3-11
3.1 Chức năng của
Đầu cắm

3.1.13 Lưu số thực vào bộ đệm

Tên lệnh SETREAL


Mã FN 582
Tên tiêu đề Lưu vào bộ đệm (số thực)
Giới thiệu chung Dùng để lưu số thực vào bất kỳ vị trí nào của bộ đệm.

Giới thiệu chung


Chức năng này được dùng để lưu số thực vào bất kỳ vị trí nào của bộ đệm. Đối với giá trị thực, tiến hành
lưu dữ liệu theo định dạng dấu phẩy động có độ chính xác duy nhất theo IEEE754 đối với 4 byte vào hệ
thống big-endian.
Thông số kỹ thuật

Thông số kỹ Số bộ đệm Dùng để chỉ rõ số bộ đệm đã ghi dữ liệu.


thuật 1 (Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Số thực Dùng để chỉ rõ giá trị thực cần ghi vào bộ đệm. Có
thuật 2 thể chỉ định rõ giá trị số thực bằng biến số thực và
hằng số thực.
38 38
(Nêu rõ phạm vi: từ -10 đến 10 )
Thông số kỹ Vị trí bắt đầu Dùng để chỉ rõ vị trí bộ đệm sẽ ghi dữ liệu đối với 4
thuật 3 byte từ vị trí được chỉ định.
(Nêu rõ phạm vi: từ 0 đến 1020)

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


SETREAL 1, V2!, 0
Lệnh SETREAL sẽ lưu giá trị vào biến số thực V2! trên 4 byte từ đầu Số bộ đệm.

CHÚ Ý IEEE754 là tiêu chuẩn quy định định dạng trình bày số dấu phẩy động (số thực).

3-12
3.1 Chức năng của
Đầu cắm

3.1.14 Lưu dữ liệu một byte vào bộ đệm

Tên lệnh SETBYTE


Mã FN 583
Tên tiêu đề Lưu vào bộ đệm
Giới thiệu chung Dùng để ghi dữ liệu chuỗi vào bất kỳ vị trí nào của bộ đệm.

Giới thiệu chung


Chức năng này dùng để ghi dữ liệu một byte vào bất kỳ vị trí nào của bộ đệm. Theo đó, sử dụng chức
năng này để lưu dữ liệu mà các lệnh SETSTR, SETINT và SETREAL không thể hỗ trợ trong bộ đệm.

Thông số kỹ thuật

Thông số kỹ Số bộ đệm Dùng để chỉ rõ số bộ đệm đã ghi dữ liệu.


thuật 1 (Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Số nguyên Dùng để chỉ rõ giá trị cần ghi vào bộ đệm. Có thể
thuật 2 chỉ định rõ giá trị bằng biến số và hằng số.
(Nêu rõ phạm vi: từ 0 đến 255)

Thông số kỹ Vị trí bắt đầu Dùng để chỉ rõ vị trí bộ đệm sẽ lưu dữ liệu và lưu dữ
thuật 3 liệu cho 1 byte từ vị trí được chỉ định.
(Nêu rõ phạm vi: từ 0 đến 1023)

Ví dụ về hiển thị màn hình


SETBYTE 1, 12, 3
Lệnh SETBYTE sẽ lưu hằng số 12 vào khu vực 3 byte của Bộ đệm số 1.

3-13
3.1 Chức năng của
Đầu cắm

3.1.15 Truy hồi chuỗi ký tự từ bộ đệm

Tên lệnh GETSTR


Mã FN 584
Tên tiêu đề Truy hồi từ bộ đệm (chuỗi ký tự)
Dùng để nhận dữ liệu có dung lượng quy định từ vị trí được chỉ
Giới thiệu chung định trên bộ đệm và lưu dữ liệu vào bất kỳ biến số chuỗi nào
.

Giới thiệu chung


Chức năng này được dùng để nhận dữ liệu có dung lượng quy định từ vị trí được chỉ định trên bộ đệm và
lưu dữ liệu vào bất kỳ biến số chuỗi nào. Nếu phạm vi dữ liệu tải vượt quá khu vực bộ đệm (tức là, nếu "số
vị trí bắt đầu của byte" vượt quá dung lượng bộ đệm), sẽ xảy ra lỗi “E2250 Lỗi dữ liệu bước”

Chuỗi ký tự

Vị trí Số byte
bắt đầu
Bộ đệm

Thông số kỹ thuật

Thông số kỹ Số bộ đệm Dùng để chỉ rõ số bộ đệm truy hồi dữ liệu.


thuật 1 (Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Biến số theo Dùng để chỉ rõ biến số đã lưu dữ liệu chuỗi tải về.
thuật 2 chuỗi
Thông số kỹ Vị trí bắt đầu Dùng để chỉ rõ vị trí đầu mà bộ đệm sẽ lưu dữ liệu.
thuật 3 (Nêu rõ phạm vi: từ 0 đến 1023)

Thông số kỹ Số byte Dùng để chỉ rõ dung lượng chuỗi ký tự sẽ truy hồi.


thuật 4 (Nêu rõ phạm vi: từ 1 đến 199)

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


GETSTR 1, V1$, 0, 3
Lệnh GETSTR sẽ sao chép dữ liệu đối với 3 byte tính từ đầu dữ liệu được lưu vào Bộ đệm số 1 đến biến
số chuỗi V1$.

3-14
3.1 Chức năng của
Đầu cắm

3.1.16 Truy hồi giá trị số nguyên từ bộ đệm

Tên lệnh GETINT


Mã FN 585
Tên tiêu đề Truy hồi từ bộ đệm (số nguyên)
Dùng để tải dữ liệu 4 byte từ bất kỳ vị trí nào được chỉ định trên
Giới thiệu chung
bộ đệm và lưu dữ liệu vào bất kỳ biến số nguyên nào

Giới thiệu chung


Chức năng này được dùng để tải dữ liệu 4 byte từ bất kỳ vị trí nào được chỉ định trên bộ đệm và lưu dữ
liệu vào bất kỳ biến số nguyên nào. Để sử dụng lệnh GETINT, phải đảm bảo đã khởi tạo dữ liệu lưu ở bộ
đệm trên hệ thống big-endian và giá trị số nguyên 4 byte đã đánh dấu. Để xem các giá trị số nguyên khác,
phải sử dụng chức năng GETBYTE.

Thông số kỹ thuật

Thông số kỹ Số bộ đệm Dùng để chỉ rõ số bộ đệm nơi tải lên dữ liệu.


thuật 1 (Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Biến số Dùng để chỉ rõ một biến số nguyên đã lưu giá trị
thuật 2 nguyên được truy hồi.
Thông số kỹ Vị trí bắt đầu Dùng để chỉ rõ vị trí đầu trong đó bộ đệm tải
thuật 3 dữ liệu 4 byte từ vị trí đã thiết lập.
(Nêu rõ phạm vi: từ 0 đến 1020)

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


GETINT 1, V1%, 10
Lệnh GETINT truy hồi dữ liệu đối với 4 byte dữ liệu đã lưu trong Bộ đệm số 1 và sau đó lưu dữ liệu
vào biến số nguyên V1%.

3-15
3.1 Chức năng của
Đầu cắm

3.1.17 Truy hồi giá trị số thực từ bộ đệm

Tên lệnh GETREAL


Mã FN 586
Tên tiêu đề Truy hồi từ bộ đệm (số thực)
Dùng để tải dữ liệu 4 byte từ bất kỳ vị trí nào được chỉ định trên
Giới thiệu chung
bộ đệm và lưu dữ liệu vào bất kỳ biến số thực nào.

Giới thiệu chung


Chức năng này được dùng để tải dữ liệu 4 byte từ bất kỳ vị trí nào trên bộ đệm và lưu dữ liệu vào bất kỳ
biến số thực nào. Để sử dụng lệnh GETREAL, phải đảm bảo đã khởi tạo dữ liệu lưu ở bộ đệm lên hệ thống
big-endian và giá trị số nguyên 4 byte được cung cấp theo IEEE754. Để xem các giá trị số thực khác, phải
sử dụng chức năng GETBYTE.

Thông số kỹ thuật

Thông số kỹ Số bộ đệm Dùng để chỉ rõ số bộ đệm nơi tải lên dữ liệu.


thuật 1 (Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Biến số thực Dùng để chỉ rõ một biến số thực đã lưu giá trị được
thuật 2 truy hồi.
Thông số kỹ Vị trí bắt đầu Dùng để chỉ rõ vị trí đầu trong đó bộ đệm tải
thuật 3 dữ liệu 4 byte từ vị trí đã thiết lập.
(Nêu rõ phạm vi: từ 0 đến 1020)

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


GETREAL 1, V1!, 3
Lệnh GETRWAL truy hồi dữ liệu đối với 4 byte twf byte dữ liệu số 3 vào Bộ đệm số 1 và sau đó lưu
dữ liệu vào biến số thực V1%.

3-16
3.1 Chức năng của
Đầu cắm

3.1.18 1 Truy hồi dữ liệu một byte từ bộ đệm

Tên lệnh GETBYTE


Mã FN 587
Tên tiêu đề Truy hồi từ bộ đệm
Dùng để tải dữ liệu đối với một byte từ bất kỳ vị trí nào được chỉ
Giới thiệu chung
định trên bộ đệm và lưu dữ liệu vào bất kỳ biến số nguyên nào.

Giới thiệu chung


Chức năng này được dùng để tải dữ liệu đối với 1 byte từ bất kỳ vị trí nào được chỉ định trên bộ đệm và
lưu giá trị 0 tới 255 vào bất kỳ biến số nguyên nào.

Thông số kỹ thuật

Thông số kỹ Số bộ đệm Dùng để chỉ rõ số bộ đệm nơi tải lên dữ liệu.


thuật 1 (Nêu rõ phạm vi: từ 1 đến 16)

Thông số kỹ Biến số Dùng để chỉ rõ một biến số nguyên đã lưu giá trị
thuật 2 nguyên được truy hồi.
Thông số kỹ Vị trí bắt đầu Dùng để chỉ rõ vị trí đầu trong đó bộ đệm tải
thuật 3 bộ đệm tải dữ liệu đối với 1 byte từ vị trí đã thiết lập.
(Nêu rõ phạm vi: từ 0 đến 1023)

Ví dụ về mô tả bằng ngôn ngữ lập trình robot


GETBYTE 1, V1%, 5
Lệnh GETBYTE truy hồi dữ liệu đối với byte dữ liệu số 5 đã lưu trong Bộ đệm số 1 và sau đó lưu dữ
liệu vào biến số nguyên V1%.

3-17
3.1 Chức năng của
Đầu cắm

3.1.19 Biến số lỗi


Như đã nêu trong mục "3.1.1 Giới thiệu chung", nếu chức năng đầu cắm phát hiện bất kỳ lỗi giao tiếp
nào, chức năng sẽ ghi lỗi đó vào biến số lỗi để thoát khỏi quá trình xử lý. Vì ghi đè lên chức năng lỗi khi
thực thi chức năng đầu cắm tiếp theo, nên cần phải khởi tạo một chương trình sao cho có thể xác nhận lỗi
ngay sau khi thực thi chức năng.
Có thể nhận biến số lỗi dưới dạng E1% hoặc E2% từ chương trình ngôn ngữ lập trình robot. Mã lỗi

sẽ xuất đầu ra theo biến số lỗi dưới dạng E1%


Số Mô tả
0 Quá trình xử lý thường sẽ được hoàn thành.
-1 Hoạt động giao tiếp chưa hoàn thành trình tự khởi động.
Khi BẬT nguồn của bộ điều khiển này, chức năng giao tiếp sẽ được khởi động. Nếu
phát hiện lỗi này, vui lòng chờ đợi trong giây lát, và sau đó tiến hành khởi động lại.

-2 Thông số không ở trong trạng thái thông thường.


Phát hiện nếu lệnh SOCKWAIT gây ra sự cố với thông số như cùng một số đầu cắm
chờ kết nối. Nếu thông số nằm ngoài phạm vi phát hiện, lỗi “E2250 Lỗi dữ liệu
bước” sẽ ngừng chạy chương trình.

-3 Đã khởi tạo đầu cắm.


Đã phát hiện nếu thực thi lệnh SOCKCREATE đối với số đầu cắm đã tạo.

-4 Không tạo ra đầu cắm.


Đã phát hiện nếu đã cố giao tiếp để thực hiện bằng cách sử dụng đầu cắm chưa
thực thi SOCKCREATE.
-5 Xử lý bằng cách sử dụng đầu cắm đang sử dụng.
Đã phát hiện nếu đang tiến hành xử lý bằng cách cách sử dụng số đầu cắm quy
định theo chương trình tác vụ người dùng khác nhau.
-7 Đã hết thời gian chờ. Trong trường hợp này, không được trực tiếp sử dụng đầu cắm,
mà phải đóng lại ngay.
-8 Chưa thiết lập địa chỉ IP.
Đã phát hiện nếu chỉ định rõ bất kỳ địa chỉ IP nào khi truyền dữ liệu bằng cách sử
dụng UDP. Trong trường hợp này, phải thiết lập địa chỉ IP bằng cách sử dụng lệnh
SOCKCONNECT.
-999 Đã phát hiện nếu xảy ra bất kỳ lỗi nào khác ngoài lỗi được liệt kê ở trên. Để biết
thêm thông tin chi tiết, vui lòng tham khảo thông tin trên E2%.

Mã lỗi sẽ xuất đầu ra theo biến số lỗi dưới dạng E2%


Số Mô tả
10022 Đã phát hiện nếu sử dụng lệnh SOCKWAIT trước khi dùng lệnh SOCKBIND
chỉ định rõ số cổng.
10040 Đã phát hiện nếu dữ liệu lớn hơn dung lượng bộ đệm do tính năng giao tiếp UDP quy định và
sau đó phải cắt bỏ dữ liệu.
10045 Đã phát hiện nếu thực thi lệnh SOCKWAIT cho đầu cắm đẫ tạo như khi UDP sử dụng lệnh
SOCKCREATE. Lệnh SOCKWAIT chỉ khả dụng đối với giao tiếp TCP.

10048 Đã phát hiện nếu chỉ định rõ số cổng dùng trong lệnh SOCKBIND.
10054 Đã phát hiện nếu đã cố truyền hoặc nhận dữ liệu trong chế độ giao tiếp TCP
giữa các thiết bị bị chặn giao tiếp do sự cố sau khi kết nối. Tuy nhiên, vì sẽ mất nhiều thời
gian để phát hiện việc chặn kết nối, nên sẽ không thể phát hiện ngay sau đó.

10057 Đã phát hiện nếu cố truyền dữ liệu mà không kết nối với hệ thống giao tiếp TCP bằng cách sử
dụng lệnh SOCKCONNECT hoặc lệnh SOCAKWAIT.
 Biến số lỗi dưới dạng E2% trả lại mã lỗi do quy định kỹ thuật WinSock xác định. Nếu trì hoãn bất kỳ
lỗi nào được liệt kê ở bảng trên, hãy tham khảo thông tin trên sổ tay kỹ thuật hoặc chương trình mạng
hiện đang sẵn bán trên thị trường.

3-18
3.1 Chức năng của
Đầu cắm
Lịch sử bất thường hoặc màn hình theo dõi lỗi không thể xác nhận biến lỗi. Và sẽ không thể hiển thị
lỗi của màn hình theo dõi tác vụ người dùng. Bạn có thể xác định biến lỗi bằng chương trình sau đây.

■VD: cách thức xác định biến lỗi khi tạo đầu cắm.
 Nếu biến số nguyên được thay thế trong biến số lỗi, thì có thể xác nhận biến số nguyên.

'Create the socket Ví dụ về chương trình


V101% = 0
V102% = 0
SOCKCREATE 1,0
IF E1%<0 THEN
*ERROR

EXIT
*ERROR
V101% = Xử lý lỗi
E1% V102% Biến số lỗi sẽ được hoàn thành nếu biến số nguyên 101.102
= E2% EXIT thay thế biến số lỗi
CHÚ Ý

 Xác nhận lỗi sẽ được hiển thị trên màn hình người dùng.
Ví dụ chương trình
' Create the socket
SOCKCREATE 1,0
IF E1%<0 THEN
*ERROR

EXIT
*ERR
OR
WINDOW
0,0,200,100 PRINT Xử lý lỗi
#0,STR$(E1%) Chương trình sẽ được hoàn thành trong 3 giây sau khi
PRINT #0,STR$ mã lỗi được hiển thị trên TP khi xảy ra lỗi
(E2%) SOCKCLOSE
1 .
PAUSE 3000
EXIT

3-19
3.1 Chức năng của
Đầu cắm

LƯU Ý

3-20
4.1 Nhận giá trị biến số nguyên (Chương trình Máy
chủ)

Chương 4 Ví dụ về Khởi tạo Chương trình

4.1 Nhận giá trị biến số nguyên (Chương trình Máy chủ)
Phần dưới đây sẽ trình bày chương trình trả lại giá trị của biến số nguyên theo yêu cầu bên ngoài. Khi bắt đầu chạy chương
trình, hệ thống sẽ tạo ra một đầu cắm cho TCP để chờ kết nối tại Cổng số 48952. Sau khi tạo kết nối bên ngoài, hệ thống sẽ
nhận dữ liệu số một byte (trong khoảng từ 1 đến 100) như là thông báo yêu cầu và sau đó, sẽ trả lại giá trị biến số nguyên 1
đổi lại big endian bốn byte.
Sau khi truyền dữ liệu, hệ thống sẽ đóng đầu cắm lại để thoát khỏi chương trình.
Biến số được sử dụng
biến số Số Nội dung sử dụng
Biến số nguyên 100 Dung lượng dữ liệu tiếp nhận
Biến số nguyên 120 Dung lượng dữ liệu truyền phát
Biến số nguyên 150 Nhận dữ liệu(số biến số nguyên được yêu cầu

Ví dụ về khởi tạo chương trình


'RETURN INTEGER VARIABLE SERVER
'CREATE SOCKET
Lệnh ① SOCKCREATE 1,0
IF E1%<0 THEN *ERROR
Lệnh ② 'ASSIGN PORT NUMBER
SOCKBIND 1,48952
IF E1%<0 THEN *ERROR
Chờ kết nối
'WAIT FOR CONNECTION
Lệnh ③ SOCKWAIT 1,2,0 Hệ thống sẽ chờ kết nối từ phía máy khách, và thực hiện giao tiếp với
IF E1%<0 THEN *ERROR máy khách đã kết nối bằng cách sử dụng Đầu cắm số 2.
'RECEIVE DATA
Lệnh ④ SOCKRECV 2,1,1,5,V150% Nhận thông báo yêu cầu
Lệnh ⑤ IF E1%<0 THEN *ERROR Hệ thống sẽ nhận thông báo yêu cầu từ máy khách, và sau đó sẽ kiểm tra
GETBYTE 1,V150%,0 dữ liệu. Nếu dữ liệu nằm ngoài phạm vi, thì dữ liệu dó sẽ bị coi là lỗi.
IF V150%<1 THEN *ERROR IF
V150%>100 THEN *ERROR
Lệnh ⑥ 'TRANSMIT DATA Truyền dữ liệu
Lệnh ⑦ SETINT 1,V%[V150%],0 Hệ thống sẽ truyền dữ liệu tới máy khách theo yêu cầu.
SOCKSEND 2,1,4,5,V150%
IF E1%<0 THEN *ERROR Đóng đầu cắm
'CLOSE SOCKET Hệ thống sẽ đóng đầu cắm. Cần phải đóng cả đầu cắm dự phòng và đầu
SOCKCLOSE 1 cắm truyền và nhận dữ liệu.
SOCKCLOSE 2
EXIT
*ERROR Xử lý lỗi
WINDOW 0,0,200,100 Nếu xảy ra lỗi, hệ thống sẽ hiển thị mã lỗi liên quan trên tay điều khiển và
PRINT #0,STR$(E1%) sau khi hết thời gian 3 giây, thì sẽ thoát ra khỏi chương trình.
PRINT #0,STR$(E2%) Để hiểu rõ hơn, ví dụ này sẽ minh họa quy trình xử lý mẻ lỗi.
SOCKCLOSE 1
SOCKCLOSE 2
PAUSE 3000
EXIT

Đầu cắm số 1
(chờ) lệnh①
SOCKCREATE lệnh②
SOCKBIND

Đầu cắm số 2
Nhận dữ liệu (dữ liệu truyền)
lệnh④ SOCKRECV lệnh③ SOCKWAIT

dữ liệu truyền
Biến số
lệnh⑦ SOCKSEND nhận từ bộ đệm
lệnh⑤ GETBYTE nguyên
bộ đệm1 150

bộ đệm 2
Ghi vào bộ đệm
lệnh⑥ SETINT

4-1
4.2 Nhận số lỗi theo Đơn vị (Chương trình Máy
chủ)

4.2 Nhận số lỗi theo Đơn vị (Chương trình Máy chủ)


Để minh họa cho chương trình UP, phần dưới đây sẽ trình bày một chương trình trả lại mã lỗi phát sinh trong bộ điều khiển
này. Khi bắt đầu chạy chương trình, hệ thống sẽ tạo ra một đầu cắm cho UDP để chờ kết nối tại Cổng số 48952. Khi máy
khách truyền số đơn vị như là thông báo yêu cầu, hệ thống sẽ nhận mã lỗi từ chức năng HỆ THỐNG và trả dữ liệu về giá trị
số nguyên.
Sau khi truyền dữ liệu, đầu cắm sẽ được đóng lại và chương trình sẽ
kết thúc.
Cần phải sử dụng tập tin xác định biến số「SAMPLE.INC」trong chương trình
này.
Biến số được sử dụng
biến số Số Nội dung sử dụng
Biến số nguyên 100 Dung lượng dữ liệu tiếp nhận
Biến số nguyên 120 Dung lượng dữ liệu truyền phát
Biến số nguyên 150 Dung lượng dữ liệu tiếp nhận (số đơn vị)
Biến số nguyên 200 Mã lỗi

Ví dụ về khởi tạo chương trình


INCLUDE
“SAMPLE” 'CREATE
SOCKET
SOCKCREATE SOCK_NO,UDP
IF E1%<0 THEN *ERROR

'ASSIGN PORT NUMBER


SOCKBIND SOCK_NO,PORT_NO
IF E1%<0 THEN *ERROR

'RECEIVE DATA Nhận thông báo yêu cầu


SOCKRECV SOCK_NO,BUF_NO,1,0,V100% IF Vì UDP yêu cầu không xử lý kết nối, nên hệ thống sẽ chờ nhận
E1%<0 THEN *ERROR dữ liệu ngay lập tức mà không cần chờ kết nối (thực thi lệnh
GETBYTE BUF_NO,UNIT_NO,0 SOCKWAIT).
IF UNIT_NO<1 THEN *ERROR
IF UNIT_NO>9 THEN *ERROR

'TRANSMIT DATA
Nhận thông báo yêu cầu
V3% = SYSTEM%(140+UNIT_NO) Hệ thống sẽ nhận và gửi lại mã lỗi hiện đã phát sinh trên đơn vị
SETINT BUF_NO,E_CODE,0
chỉ định bằng cách sử dụng chức năng HỆ THỐNG.
SOCKSEND SOCK_NO,BUF_NO,4,5,V3%
IF E1%<0 THEN *ERROR

'CLOSE SOCKET
SOCKCLOSE 1
'END
Xử lý lỗi
*ERROR Nếu xảy ra lỗi, hệ thống sẽ hiển thị mã lỗi liên quan trên tay điều
WINDOW 0,0,200,100 khiển và sau khi hết thời gian 3 giây, thì sẽ thoát ra khỏi
PRINT #0,STR$(E1%) chương trình.
PRINT #0,STR$(E2%) Để hiểu rõ hơn, ví dụ này sẽ minh họa quy trình xử lý mẻ lỗi.
SOCKCLOSE 1
SOCKCLOSE 2
PAUSE 3000
EXIT

SAMPLE.INC
SOCK_NO,1
BUF_NO,1
PORT_NO,48952
TCP,0
UDP,1
UNIT_NO,V1%
E_CODE,V2%

THÔNG

TIN
Để biết thông tin về chức năng hệ thống, vui lòng tham khảo sổ tay hướng dẫn "Ngôn ngữ Lập trình Robot".
Để biết thông tin về tập tin xác định biến số, vui lòng tham khảo sổ tay hướng dẫn "Tác vụ người dùng".

4-2
4.3 Thu thập dữ liệu từ hệ thống cảm biến (Chương
trình Máy khách)

4.3 Thu thập dữ liệu từ hệ thống cảm biến (Chương trình Máy khách)
Phần dưới đây sẽ trình bày chương trình tiếp nhận số lượng chuyển đổi từ hệ thống cảm biến và quy gán cho mạch đăng ký
di chuyển. Theo đó, sẽ tiến hành giao tiếp với hệ thống cảm biến bằng cách sử dụng chuỗi ký tự và lấy chuỗi ký tự hiển thị
nạp dòng (dữ liệu 2 byte là 13 và 10) như là dấu phân cách dữ liệu. Khi hệ thống cảm biến nhận yêu cầu dữ liệu “GVA002
[Linefeed]”, hệ thống sẽ phát thông báo lỗi trước tiên rồi gửi số lượng mạch di chuyển.

Biến số được sử dụng


biến số Số Nội dung sử dụng
Biến số nguyên 50 Dung lượng dữ liệu tiếp nhận
Biến số nguyên 100 Dung lượng dữ liệu tiếp nhận
Biến số nguyên 150 Nhận dữ liệu(hồi đáp lỗi)
Biến số nguyên 151 Nhận dữ liệu(bù trừ)
Biến chuỗi truyền dữ liệu 10 Nhận dữ liệu chuyển đổi thành dữ liệu chuỗi truyền phát
Biến số nguyên 160 Chuỗi truyền phát chuyển thành dữ liệu truy hồi

'CONNECT VISION
Ví dụ về khởi tạo chương trình

‘CREATE SOCKET
SOCKCREATE V150%,0 IF
E1%<0 THEN *ERROR

'CONNECT TO VISION SYSTEM


SOCKCONNECT V150%,1,23,5 IF
E1%<0 THEN *ERROR
Thông báo yêu cầu dữ liệu truyền phát
'TRANSMIOT DATA REQUEST MESSAGE Hệ thống truyền thông báo yêu cầu dữ liệu tới hệ thống
SOCKSENDSTR 1,"GVA002",LEN("GVA002"),0,V151%,3 cảm biến. Thêm "3" vào thông số cuối cùng của
IF E1%<0 THEN *ERROR lệnh SOCKSENDSTR để có thể thêm dữ liệu 2 byte là 13 và 10
thể hiện linefeed.
'RECEIVE RESPOND MESSAGE
SOCKRECV V150%,1,3,5,V151% IF
E1%<0 THEN *ERROR GETBYTE
1,V151%,0
IF V151%<>49 THEN *ERROR

'RECEIVE DATA
*GET_DATA
SOCKRECV V150%,1,1,5,V151% IF
E1%<0 THEN *ERROR GETBYTE Truyền dữ liệu
1,V151%,0 Hệ thống sẽ nhận ký tự dữ liệu theo ký tự và nhận dữ liệu
IF 13=V151% THEN *GET_DATA_END cho đến khi nhận được dấu phân cách dữ liệu.
V10$ = V10$ + CHR$(V151%)
GOTO *GET_DATA
*GET_DATA_END

SOCKRECV V150%,1,1,5,V151%

'ASSIGN TO SHIFT REGISTER


V1% = VAL(V10$) Quy gán sang mạch đăng ký di chuyển
R1 = (0,V1%,0,0,0,0) ‘ Hệ thống sử dụng chức năng chung VAL để chuyển chuỗi ký
tự thành giá trị số và quy gán
SOCKCLOSE V150%
giá trị là số lượng mạch di chuyển sang hướng Y tới mạch
EXIT
đăng ký di chuyển.
'PROCESS ERROR
*ERROR
Xử lý lỗi
WINDOW 1,1,100,100
Nếu xảy ra lỗi, hệ thống sẽ hiển thị mã lỗi liên quan trên tay
PRINT #0,STR$(E1%) điều khiển và sau khi hết thời gian 3 giây, thì sẽ thoát ra khỏi
SOCKCLOSE V150% chương trình.
PAUSE 5000 Để hiểu rõ hơn, ví dụ này sẽ minh họa quy trình xử lý mẻ lỗi.
EXIT

4-5
4.4 Truy hồi dữ liệu dịch chuyển từ cảm biến

4.4 Truy hồi dữ liệu dịch chuyển từ thiết bị cảm biến


Đây là ví dụ về chương trình tác vụ người dùng để gửi lệnh tới thiết bị cảm biến. Lệnh này cần phải được đặt trong biến
số nguyên V1% từ trước. Trong trường hợp lệnh yêu cầu dữ liệu chuyển đổi, chuỗi "T1" sẽ được gửi tới thiết bị cảm biến
và dữ liệu di chyển (dữ liệu chuỗi trong đó từng giá trị được phân cách bởi dấu “,”) sẽ được gửi trả lại. Sau đó, bộ điều
khiển robot sẽ đọc từng dữ liệu và thiết lập dữ liệu này trong biến số di chuyển.

Địa chỉ IP
Bộ điều khiển robot này 192.168.1.1
Thiết bị cảm biến 192.168.1.10

Số cổng TCP
10030

Lệnh (V1%)
1 Thay đổi thiết đặt 0 “PW, 1, 0”
2 Thay đổi thiết đặt 1 “PW, 1, 1”
3 Thay đổi thiết đặt 2 “PW, 1, 2”
4 Thay đổi thiết đặt 3 “PW, 1, 3”
10 Lệnh yêu cầu dữ liệu di chuyển “T1”
15 Chấm dứt tác vụ người dùng

Ví dụ về dữ liệu di chuyển

Dữ liệu Dấu phân Dữ liệu Dấu phân Dữ liệu 3 Điểm kết


“1” “0” “,” “2” “0” “,” “3” “0” CR
(44) (44) (13)
Khi nhận được dữ liệu này, các số sẽ được lưu vào biến số chuỗi làm kết quả như sau.

V20$ = “10”
V21$ = “20”
V22$ = “30”
Để quy đổi những biến số chuỗi này thành biến số thực, hãy sử dụng VAL().

V1! = VAL(V20$)
V2! = VAL(V21$)
V3! = VAL(V22$)
Các biến số thực thu về này có thể được thiết lập đến mạch đăng ký di chuyển (biến số di chuyển)
như sau.

R1=(V1!,V2!,0,V3!,0,0)
THÔNG
TIN
Đây chỉ là một ví dụ minh họa. Bởi vì định dạng dữ liệu giao tiếp thay đổi từ thiết bị cảm biến, nên cần
phải đọc kỹ và hiểu rõ cuốn sổ tay hướng dẫn sử dụng tương ứng của thiết bị và khởi tạo chương trình
giao tiếp.

4-4
4.4 Truy hồi dữ liệu dịch chuyển từ cảm biến

Chương trình mẫu Mô tả


‘ ----------------------
‘ INITIALIZE VARIABLES ‘ Kích hoạt
---------------------- V11% = 10030
V1$ = “” 10030 : Số cổng
V2$ = “PW, 1, 0” V1$ : Đối với thông báo lỗi
V3$ = “PW, 1, 1” V2$ : Lệnh thay đổi thiết đặt 0
V4$ = “PW, 1, 2” V3$ : Lệnh thay đổi thiết đặt 1
V5$ = “PW, 1, 3” V6$ V4$ : Lệnh thay đổi thiết đặt 2
= “T1” V5$ : Lệnh thay đổi thiết đặt 3
V7$ = “PW” V6$ : Lệnh yêu cầu dữ liệu di chuyển
V11$ = “” V7$ : Lệnh thay đổi thiết đặt
V119% = 0
Lệnh đã thực thi
‘ ---------------------- ‘ SOCKET
CREATE
‘ ---------------------- Tạo một đầu cắm
SOCKCREATE 1,0
IF E1% < 0 THEN *ERROR1 SOCKET=1/PROTOCOL=0(=TCP)
V119%=1 Kiểm tra lỗi

‘ ---------------------- ‘ SOCKET
CONNECT
‘ ---------------------- SOCKCONNECT Nối đầu cắm
1, 10, V11%, 10
Đầu cắm số 1
Địa chỉ IP *.*.*.10
Cổng số V11%(=10030)
Thời gian chờ 10
‘ ---------------------- ‘ COMMAND giây
CHECK
‘ ----------------------
‘ V1%=1 : SETTING CHANGE 0 ‘ Kiểm tra lệnh
V1%=2 : SETTING CHANGE 1 ‘
V1%=3 : SETTING CHANGE 2 ‘ Lập lệnh label jump bằng cách sử dụng giá trị
trong V1%
V1%=4 : SETTING CHANGE 3 ‘
V1%=10: TRIGGER
‘ V1%=15: USER TASK COMPLETE ‘
----------------------
IF V1% = 1 THEN *CHGSETTING0 IF
V1% = 2 THEN *CHGSETTING1 IF
V1% = 3 THEN *CHGSETTING2 IF
Thay đổi thiết đặt 0
V1% = 4 THEN *CHGSETTING3 IF
Thay đổi thiết đặt 1
V1% = 10 THEN *TRIGGER
Thay đổi thiết đặt 2
IF V1% = 15 THEN *END
Thay đổi thiết đặt 3
V1$ = “Error3”
Lệnh yêu cầu dữ liệu di chuyển
GOTO *END
Chấm dứt tác vụ người dùng

Nhảy sang nhãn “END”

4-5
4.4 Truy hồi dữ liệu dịch chuyển từ cảm biến

(Từ trang trước) Mô tả


‘ ---------------------------------
‘ COMMAND V2$ = “PW, 1, 0” Gửi lệnh "PW"
‘ ---------------------------------
*CHGSETTING0 Đầu cắm số 1
SOCKSENDSTR 1,V2$,LEN(V2$),10,V12%,3 IF Chuỗi sẽ gửi V2$(=”PW, 1, 0”)
E1% < 0 THEN *ERROR1 Độ dài LEN(V2$)
V119%=3 Thời gian chờ 10 giây
GOSUB *CHK_RET_VAL3 Độ dài dữ liệu V12%
GOTO *END Điểm kết thúc 3(=”¥r¥n”)

‘ --------------------------------- ‘ COMMAND V3$ =


“PW, 1, 1”
‘ ---------------------------------
*CHGSETTING1
SOCKSENDSTR 1,V3$,LEN(V3$),10,V13%,3 IF
E1% < 0 THEN *ERROR1
V119%=4
GOSUB *CHK_RET_VAL3
GOTO *END

‘ --------------------------------- ‘ COMMAND V4$ =


“PW, 1, 2”
‘ ---------------------------------
*CHGSETTING2
SOCKSENDSTR 1,V4$,LEN(V4$),10,V14%,3 IF
E1% < 0 THEN *ERROR1
V119%=5
GOSUB *CHK_RET_VAL3
GOTO *END

‘ --------------------------------- ‘ COMMAND V5$ =


“PW, 1, 3”
‘ ---------------------------------
*CHGSETTING3
SOCKSENDSTR 1,V5$,LEN(V5$),10,V15%,3 IF
E1% < 0 THEN *ERROR1
V119%=6
GOSUB *CHK_RET_VAL3
GOTO *END

‘ --------------------------------- ‘ TRIGGER
‘ --------------------------------- Gửi lệnh "T1”
*TRIGGER
SOCKSENDSTR 1,V6$,LEN(V6$),10,V15%,3 IF
E1% < 0 THEN *ERROR1 Đầu cắm số 1
V119%=7 Chuỗi sẽ gửi V6$(=”T1”)
GOSUB *CHK_RET_VAL4 Độ dài LEN(V6$)
GOTO *END Thời gian chờ 10 giây
Độ dài dữ liệu V15%
Điểm kết thúc 3(=”¥r¥n”)

4-6
4.4 Truy hồi dữ liệu dịch chuyển từ cảm biến

(Từ trang trước) Mô tả


‘ ---------------------------------
‘ END Chấm dứt tác vụ người dùng
‘ ---------------------------------
*END
SOCKCLOSE 1 Đóng đầu cắm
EXIT Thoát ra khỏi tác vụ người dùng

‘ --------------------------------- ‘ ERROR PROCESS


‘ --------------------------------- Quy trình xử lý lỗi
*ERROR1
V1$ = “Error1”
SOCKCLOSE 1 Thiết lập thông báo lỗi
EXIT Đóng đầu cắm
Thoát ra khỏi tác vụ người dùng
*ERROR2
V1$ = “Error2”
SOCKCLOSE 1 Thiết lập thông báo lỗi
EXIT Đóng đầu cắm
Thoát ra khỏi tác vụ người dùng
‘ ---------------------------------
‘ RETURN VALUE CHECK (SETTING CHANGE) ‘
--------------------------------- Kiểm tra giá trị trả về (thiết lập thay đổi cmd)
*CHK_RET_VAL3
SOCKRECV 1,1,2,5,V3% Đầu cắm số 1
V119%=V119%+10 Bộ đệm số 1
IF E1% < 0 THEN *ERROR1 Đọc độ dài 2 byte
Thời gian chờ 5 giây
Đọc độ dài dữ liệu V3%
GETSTR 1,V10$, 0, 2
Bộ đệm số 1
Biến chuỗi V10$
Vị trí bắt đầu 0
Độ dài dữ liệu cần đọc 2byte
IF V10$<>V7$ THEN *ERROR2
RETURN Nếu không phải là “PW”, đó là lỗi

Quay trở về dòng ban đầu

4-7
4.4 Truy hồi dữ liệu dịch chuyển từ cảm biến

(Từ trang trước) Mô tả


‘ ---------------------------------
‘ RETURN VALUE CHECK (TRIGGER) Kiểm tra giá trị trả về (bộ khởi động cmd)
‘ ---------------------------------
*CHK_RET_VAL4
SOCKRECV 1,1,4,5,V4% Nhận 4 byte
V119%=V119%+10
IF E1% < 0 THEN *ERROR1 GETSTR
1, V10$, 0, 2 Nhận 2 chữ số tới V10$
IF V10$<>V6$ THEN *ERROR2 V52%=0 Nếu V10$ là ”T1”, tiến hành với *GETDATA

‘ --------------------------------- ‘ READ THE SHIFT Khởi tạo hậu tố của dãy


DATA
‘ ---------------------------------
*GETDATA Đọc dữ liệu di chuyển
SOCKRECV 1,1,1,5,V5% Đọc chữ số 1 theo 1.

Đầu cắm số 1
Bộ đệm số 1
Đọc độ dài 1
byte
IF E1% < 0 THEN *ERROR1 GETBYTE Thời gian chờ 5 giây
1,V51%, 0 Đọc độ dài dữ liệu V5%
IF V51%=13 THEN *GETDATAEND
IF V51%=44 THEN *SETVALUE Kiểm tra lỗi
V11$=V11$+CHR$(V51%) Nhận 1 dữ liệu byte và lưu vào V51%
GOTO *GETDATA Nếu “CR”, nhảy sang *GETDATAEND
Nếu “,” nhảy sang *SETVALUE
‘ --------------------------------- Đính kèm chữ số vào chuỗi V11$
‘ COPY THE V11$ TO THE OTHER VARIABLE ‘ Lặp lại *GETDATA
---------------------------------
*SETVALUE
V$[20+V52%]=V11$ Sao chép biến chuỗi trong trường hợp “,”
V52%=V52%+1
V11$=””
GOTO *GETDATA Sao chép biến chuỗi V11$
Tăng hậu tố
‘ --------------------------------- Khởi tạo biến chuỗi bộ đệm
‘ COPY THE V11$ TO THE OTHER VARIABLE ‘ Quay trở lại *GETDATA
---------------------------------
*GETDATAEND
V$[20+V52%]=V11$ Kết thúc quy trình trong trường hợp “CR”
SOCKRECV 1,1,1,5,V5%

V1!=VAL(V20$) Lưu dữ liệu cuối cùng (biến chuỗi)


V2!=VAL(V21$)
V3!=VAL(V22$)
Chuyển đổi chuỗi thành giá trị thực X
R1=(V1!,V2!,0,V3!,0,0) Chuyển đổi chuỗi thành giá trị thực Y
Chuyển đổi chuỗi thành giá trị thực Rx
RETURN
Lập giá trị tới biến di chuyển

Quay trở lại

4-8
4.5 Quy trình tiếp nhận dữ liệu

4.5 Quy trình tiếp nhận dữ liệu


Để nhận dữ liệu với TCP, cần phải nắm rõ mọi quy trình dưới đây để kết thúc dữ liệu.
1. Xác địch trước dung lượng dữ liệu
2. Truyền dung lượng dữ liệu với các dữ liệu khác
3. Xác định ký tự sẽ truyền cuối cùng

Để xác định phương thức giao tiếp bằng cách sử dụng đầu cắm, cần phải nắm rõ phần cuối của dữ liệu trong bất kỳ quy
trình nào. Quy trình 1 áp dụng cho "4.1 Nhận Giá trị Biến số nguyên (Chương trình Máy chủ)", còn Quy trình 3 áp dụng
cho "4.3 Nhận Dữ liệu từ Hệ thống Camrl biến (Chương trình Máy khách)".
Đồng thời để truyền dữ liệu, cần phải đảm bảo sử dụng những quy trình nào ở đầu nhận và đầu truyền dữ liệu.

4.5.1 Xác địch trước dung lượng dữ liệu


Trong quy trình này, vì đã biết trước dung lượng dữ liệu, nên hệ thống sẽ quy định rõ dung lượng dữ liệu tới thông số thứ
ba của lệnh SOCKRECV để nhận dữ liệu. Ví dụ, nếu đã biết dung lượng dữ liệu là 4 byte, phải nêu rõ "4" như sau.

SOCKRECV 1, 1, 4, 5, V1%

4.5.2 Truyền dung lượng dữ liệu với các dữ liệu khác


Trong quy trình này, trước tiên hệ thống sẽ truyền dung lượng dữ liệu với các dữ liệu có dung lượng đã xác định trước, và
sau đó là dữ liệu có độ dài biến đổi. Để truyền dữ liệu này, quy trình thực hiện sẽ được mô tả như sau. (Trong trường hợp
này, dung lượng dữ liệu sẽ được truyền vào trong hệ thống big-endrian 4 byte.)

SOCKRECV 1, 1, 4, 5, V1% Nhận dung lượng dữ liệu


GETINT 1,%2%,0
SOCKRECV 1, 1, V2%, 5, V1% Nhận dữ liệu có độ dài biến đổi

4.5.3 Xác định ký tự sẽ truyền cuối cùng


Trong quy trình này, hệ thống sẽ truyền dấu phân cách dữ liệu vào cuối dữ liệu. Trong trường hợp này, hệ thống sẽ nhận
dữ liệu theo từng byte và hoàn thành việc nhận dữ liệu tại thời điểm nhận dấu phân cách dữ liệu. Trong trường hợp này,
dữ liệu sẽ kết thúc theo quy trình sau. (“0” sẽ được truyền như là dấu phân cách dữ liệu.)
*GET_DATA
SOCKRECV 1, 1, 1, 5, V1%
GETBYTE 1, V2%, 0
IF 0=V2% THEN *GET_DATA_END
V1$ = V1$ + CHR$(V2%)
GOTO *GET_DATA
*GET_DATA_END

Trong quy trình xác định ký tự cần truyền cuối cùng, dữ liệu sẽ được nhận theo từng byte. Theo đó, số
CHÚ Ý lượng các bước dự kiến sẽ tăng và thời gian xử lý sẽ dài hơn so với các quy trình khác. Đặc biệt trong
trường hợp tác vụ người dùng có ưu tiên thấp, thời gian xử lý sẽ dài hơn.

4-9
4.5 Quy trình tiếp nhận dữ liệu

LƯU Ý

4-10
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

Chương 5 Ví dụ về Chương trình Máy tính

5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều khiển

5.1.1 Tổng quan về chương trình mẫu này


Trong ví dụ này, máy tính cá nhân sẽ nhận được vị trí TCP của robot (X, Y, Z, Roll, Pitch, Yaw)và trạng thái của tín hiệu đầu ra có mục
đích chung (O1, O2, O3) từ bộ điều khiển robot và sau đó thiết lập “Shift register R1” trong bộ nhớ bộ điều khiển robot thông qua giao
tiếp bằng đầu cắm.

Bộ điều khiển robot

Vị trí TCP Cáp mạng


(X, Y, Z, Roll, Pitch, Yaw) Vị trí TCP Tín hiệu Ethernet
đầu ra chung
Tín hiệu đầu ra chung
O1, O2, O3

Mạch đăng ký di chuyển


Mạch đăng ký di chuyển

Máy tính cá nhân

192.168.1.1 192.168.1.10
Địa chỉ IP
Bộ điều khiển robot 192.168.1.1
Máy tính 192.168.1.10
(Có thể thay đổi những địa chỉ này bằng cách chỉnh sửa mã nguồn mẫu)

Số cổng TCP được sử dụng trong ví dụ này


10030
(Có thể thay đổi số cổng này bằng cách chỉnh sửa mã nguồn mẫu)

Chương trình mẫu dành cho máy tính cá nhân


Hệ điều hành Windows7
Môi trường lập trình Visual C++
Tùy theo phiên bản Visual Studio, có thể cần thiết lập để liên kết thư viện “winsock”. Hãy thêm
“ws2_32.lib” vào thiết đặt trình liên kết.

C++ mã nguồn main_C.cpp (Chương trình phía Máy khách)


main_S.cpp (Chương trình phía Máy chủ)
Tập tin thực thi Socket_Client_test.exe (Máy khách)
Socket_Server_test.exe (Máy chủ)

THÔN Những chương trình này chỉ là ví dụ đơn giản. NACHI không bảo hành/hỗ trợ những chương trình này. Khi lập chương
G TIN trình thực tế, vui lòng thẩm định đầy đủ trước khi sử dụng những chương trình này. Đồng thời, đối với môi trường lập
trình (ví dụ: Visual Studio, v.v...) và ngôn ngữ lập trình C++, v.v...., vui lòng tham khảo sách giáo khoa hiện đang sẵn
bán trên thị trường.

THÔNG TIN Cách điều khiển robot tùy thuộc vào dữ liệu mạch đăng ký Di chuyển đã nhận;
Vui lòng tham khảo sổ tay hướng dẫn sử dụng “CHỨC NĂNG DI CHUYỂN THEO TÍN HIỆU ĐẦU VÀO BÊN NGOÀI”
(TFDEN-047)

THÔNG TIN Mã nguồn trong tài liệu này có thể được cung cấp qua đĩa DVD, v.v...
Vui lòng liên hệ với phòng kinh doanh của chúng tôi.

5-
11
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

5.1.2 Quy trình vận hành


Ví dụ về quy trình vận hành
1 Thiết đặt TCP/IP trong bộ điều khiển robot
Thiết lập thông số TCP/IP trong menu
<Constant Setting> [8 Communication] [2 Ethernet] [1 TCP/IP].

Để biết thông tin chi tiết về thiết đặt TCP/IP, vui lòng tham khảo cuốn sổ tay hướng dẫn “SỔ
TAY HƯỚNG DẪN CÀI ĐẶT” (TFDEN-001).
2 Ấn <Complete> để lưu các thiết đặt.

3 Thiết đặt TCP/IP trên máy tính cá nhân


Cài đặt thông số TCP/IP trên Máy tính của bạn
Địa chỉ IP
Mặt nạ mạng con
Cổng mặc định
v.v....

4 Kết nối máy tính và bộ điều khiển robot bằng cách sử dụng cáp mạng Ethernet.
(Về bộ điều khiển robot, cần phải nối đầu nối vào cổng LAN trên bo mạch CPU)
5 Chạy chương trình trên máy chủ.
>>Chương trình máy chủ sẽ bắt đầu chờ chương trình máy khách.
(LƯU Ý)
Nếu máy tính cá nhân là máy khách, phải chạy chương trình máy chủ trên
bộ điều kiển robot. Nếu bộ điều khiển robot là máy khách, phải chạy
chương trình máy chủ trên máy tính cá nhân.
6 Sau đó, chạy chương trình trên máy khách.
7 Nhập địa chỉ IP máy chủ trong chương trình máy tính cá nhân.
8 (Nếu máy tính cá nhân là máy khách)

Để biết thông tin về quá trình vận hành Tác vụ Người dùng trên bộ điều khiển robot, vui lòng tham khảo cuốn sổ tay hướng dẫn “Tác vụ
Người dùng” (TFDEN-123)

5-2
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

5.1.3 Ví dụ về màn hình

Phía máy tính cá nhân

Thông tin TCP của robot (X, Y, Z, Roll, Pitch, Yaw) và tình trạng của tín hiệu đầu ra chung sẽ được hiển thị.

Nhập giá trị đối với Mạch đăng ký di chuyển.


Nhập giá trị theo thứ tự (dX, dY, dZ, dθZ, dθY, dθX)

dX = 10.2 [mm]

dY = 20.3 [mm]

dZ = -10.5[mm]

dθZ = 5.0 [deg]

dθY = 0.0 [deg]

dθX = 0.0 [deg]

Phía bộ điều khiển robot

Các giá trị đã nhận từ máy tính cá nhân sẽ được thiết lập vào "Mạch đăng ký di chuyển". Nội dung mạch đăng ký di chuyển sẽ được hiển
thị trên menu
<Tiện ích Dịch vụ> [3 Màn hình 1] [14 Xử lý màn hình [2 Bộ đệm di chuyển].

X Số lượng di chuyển trên trục X [mm] (dX)


Y Số lượng di chuyển trên trục Y [mm] (dY)
Z Số lượng di chuyển trên trục Z [mm] (dZ)
dX Số lượng di chuyển quay trên trục X (dθX)
dY [độ]
Số lượng di chuyển quay trên trục Y (dθY)
dZ [độ]lượng di chuyển quay trên trục Z
Số (dθZ)
[độ]

5-3
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

5.1.4 Ví dụ về chương trình Tác vụ người dùng (máy chủ)

' TCP/IP_Socket(Server)

'----------------------------------------------------------
' Setup
'---------------------------------------------------------- DIM Port AS INTEGER
DIM SendDataLen AS INTEGER
DIM SendIODataLen AS INTEGER DIM
ReceiveDataLen AS INTEGER DIM
ReceiveBufferLen AS INTEGER
Port = 10030 'Port#
SendDataLen = 12 'Send Data Len Hằng số đối với giao tiếp
SendIODataLen =3 'Send IO Data Len đầu cắm
ReceiveDataLen =8 'Receive Data Len
ReceiveBufferLen = ReceiveDataLen * 6 'Receive Buffer Len
'----------------------------------------------------------
' Initialize
'----------------------------------------------------------
V10! = 0 'Current X
V11! = 0 'Current Y
V12! = 0 'Current Z
V13! = 0 'Current Roll
V14! = 0 'Current Pitch
V15! = 0 'Current Yaw
V10$ = "" 'Send X
V11$ = "" 'Send Y
V12$ = "" 'Send Z
V13$ = "" 'Send Roll
V14$ = "" 'Send Pitch
V15$ = "" 'Send Yaw
V16$ = "" 'Send IO
V17$ = "" 'Send Variable
V1$ = "" 'Receive X Khởi tạo biến số
V2$ = "" 'Receive Y
V3$ = "" 'Receive Z
V4$ = "" 'Receive Roll
V5$ = "" 'Receive Pitch
V6$ = "" 'Receive Yaw
V1! = 0 'Receive X
V2! = 0 'Receive Y
V3! = 0 'Receive Z
V4! = 0 'Receive Roll
V5! = 0 'Receive Pitch
V6! = 0 'Receive Yaw
R1 = (0,0,0,0,0,0) 'Shift Register

5-4
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

'----------------------------------------------------------
' Create
'---------------------------------------------------------- SOCKCREATE 1,0
IF E1%<0 THEN *ERROR
'----------------------------------------------------------
' Bind
'--------------------------------------------------------- SOCKBIND 1,Port
IF E1%<0 THEN *ERROR Kết nối với máy tính
'---------------------------------------------------------- máy khách
' Wait
'---------------------------------------------------------- SOCKWAIT 1,2,0
IF E1%<0 THEN *ERROR
'----------------------------------------------------------
'GET Position
'---------------------------------------------------------- V10! = SYSTEM!(810) 'X
V11! = SYSTEM!(811) 'Y
V12! = SYSTEM!(812) 'Z
V13! = SYSTEM!(813) 'Roll
V14! = SYSTEM!(814) 'Pitch
V15! = SYSTEM!(815) 'Yaw Bảo lưu vị trí TCP
'---------------------------------------------------------- hiện tại tới các biến
'Send số
'----------------------------------------------------------
V10$ =LEFT$(STR$(V10!), SendDataLen) V11$
=LEFT$(STR$(V11!), SendDataLen) V12$ =LEFT$
(STR$(V12!), SendDataLen) V13$ =LEFT$(STR$ Bảo lưu vị trí TCP hiện
(V13!), SendDataLen) V14$ =LEFT$(STR$(V14!), tại tới các biến chuỗi
SendDataLen) V15$ =LEFT$(STR$(V15!),
SendDataLen)

V16$ =STR$(O[1])
V16$ =V16$ + STR$(O[2]) V16$ Bảo lưu điều kiện của tín
hiệu đầu ra chung tới các
=V16$ + STR$(O[3])
biến chuỗi
V16$ =LEFT$(V16$, SendIODataLen)

V17$ =V10$+","+V11$+","+V12$+","+V13$+","+V14$+","+V15$+","+V16$+"," SOCKSENDSTR

2,V17$,LEN(V17$),0,V105%,0
Gửi dữ liệu vào máy tính cá
IF E1%<0 THEN *ERROR nhân

5-5
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

'----------------------------------------------------------
' Receive
'----------------------------------------------------------
SOCKRECV 2,1,ReceiveBufferLen,0,V110% IF E1%<0 Nhận dữ liệu từ máy tính
THEN *ERROR cá nhân

GETSTR 1, V1$, ReceiveDataLen * 0, ReceiveDataLen GETSTR 1,


V2$, ReceiveDataLen * 1, ReceiveDataLen GETSTR 1, V3$,
ReceiveDataLen * 2, ReceiveDataLen GETSTR 1, V4$, Lưu dữ liệu đã nhận vào biến
ReceiveDataLen * 3, ReceiveDataLen GETSTR 1, V5$, số
ReceiveDataLen * 4, ReceiveDataLen GETSTR 1, V6$,
ReceiveDataLen * 5, ReceiveDataLen
'----------------------------------------------------------
' Set Val
'---------------------------------------------------------- V1! = VAL(V1$)
V2! = VAL(V2$)
V3! = VAL(V3$)
V4! = VAL(V4$)
V5! = VAL(V5$)
V6! = VAL(V6$)
'----------------------------------------------------------
'Set Register
'---------------------------------------------------------- R1=(V1!,V2!,V3!,V4!,V5!,V6!)
'x,y,z,roll(theta_z),pitch(theta_y),yaw(theta_x)
Lưu dữ liệu vào Mạch đăng
'---------------------------------------------------------- ký di chuyển R1
' Close
'---------------------------------------------------------- SOCKCLOSE 1
SOCKCLOSE 2
EXIT
Đóng đầu cắm
*ERRO
R
WINDOW 0,0,200,100
PRINT #0,STR$(E1%)
PRINT #0,STR$(E2%)
SOCKCLOSE 1
SOCKCLOSE 2 Lỗi quy trình giao tiếp đầu
PAUSE 3000 cắm
EXIT

5-6
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

5.1.5 Ví dụ về chương trình máy tính (máy khách)

#include <stdio.h>
#include <winsock2.h>
#include <iostream>
#include <string.h>

#define PORT_NUM 10030


#define SEND_DATA_SIZE 8 Hằng số đối với
#define SEND_BUFFER_LEN (SEND_DATA_SIZE * 6) giao tiếp đầu cắm
#define REC_DATA_SIZE 12
#define REC_DATA_NUM 7
#define REC_IO_DATA_SIZE 3
#define REC_BUFFER_LEN (REC_DATA_SIZE * 6 + REC_IO_DATA_SIZE + REC_DATA_NUM)

int main(void){

//--------------------------------------------------------
// Socket Setup
//--------------------------------------------------------
SOCKET sock;

//Server information struct

sockaddr_in dest;

memset(&dest, 0, sizeof(dest));

//Server address

//xxx.xxx.xxx.xxx
char destination[] = "000.000.000.000"; std::cout << "Set Server

address" << std::endl;


std::cin >> destination;
Kết nối với bộ điều
//Socket communication khiển robot của máy
khách
WSADATA wsaData;

if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
{
std::cout << "WSAStartup failed" << std::endl; return 1;
}

//Set the information dest.sin_port =

htons(PORT_NUM); dest.sin_family =

AF_INET;

dest.sin_addr.s_addr = inet_addr(destination);

5-7
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

//Make Socket
Thực hiện kết nối
sock = socket(AF_INET, SOCK_STREAM, 0); if (sock vào bộ điều khiển robot máy khách
== INVALID_SOCKET)
{
std::cout << "socket : " << WSAGetLastError() << std::endl; return 1;
}

//Communicate to the Server

if(connect(sock, (struct sockaddr *) &dest, sizeof(dest)))


{
std::cout << "Err Communicate to" << destination << std::endl;

return -1;
}

std::cout << "Communication to " << destination << " completed" << std::endl;

//--------------------------------------------------------
// Recieve from Server
//--------------------------------------------------------

char rec_buffer[REC_BUFFER_LEN] = {}; int check = 0;


char *temp = NULL; char *ctx
= NULL;
std::cout << "---------------- " << std::endl; std::cout << "Current
Position " << std::endl; std::cout << "---------------- " << std::endl;

//Recieve
check = recv(sock, rec_buffer, sizeof(rec_buffer), 0); if(check < 1){
std::cout << "recv : " << WSAGetLastError() << std::endl; return 1; Nhận dữ liệu
}

temp = strtok_s(rec_buffer,",",&ctx); std::cout << "X : " <<


temp << std::endl;

temp = strtok_s(NULL,",",&ctx);
std::cout << "Y : " << temp << std::endl;

temp = strtok_s(NULL,",",&ctx);
Hiển thị dữ liệu đã nhận
std::cout << "Z : " << temp << std::endl;

temp = strtok_s(NULL,",",&ctx);
std::cout << "Roll : " << temp << std::endl;

temp = strtok_s(NULL,",",&ctx);
std::cout << "Pitch : " << temp << std::endl;

5-8
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

temp = strtok_s(NULL,",",&ctx);
std::cout << "Yaw : " << temp << std::endl;

temp = strtok_s(NULL,",",&ctx);
Hiển thị dữ liệu đã nhận
std::cout << "Out3 " << std::endl;
std::cout << "Out2 |" << std::endl;
std::cout << "Out1 ||" << std::endl;
std::cout << " |||" << std::endl; std::cout << "IO
: " << temp << std::endl;

//--------------------------------------------------------
// Send to Server
//--------------------------------------------------------

float input = 0.0;


char shift_x[] = "00000.00"; char shift_y[] =
"00000.00"; char shift_z[] = "00000.00"; char
shift_r[] = "00000.00"; char shift_p[] =
"00000.00"; char shift_ya[] = "00000.00";

std::cout << "Set X [mm]" << std::endl; std::cin >> input;


sprintf_s(shift_x,"%08.2f",input);

std::cout << "Set Y [mm]" << std::endl; std::cin >> input;


sprintf_s(shift_y,"%08.2f",input);

std::cout << "Set Z [mm]" << std::endl; std::cin >> input;


sprintf_s(shift_z,"%08.2f",input);

std::cout << "Set Roll [deg]" << std::endl; std::cin >> input; Nhập dữ liệu cần gửi vào bộ điều khiển
sprintf_s(shift_r,"%08.2f",input); robot.

std::cout << "Set Pitch [deg]" << std::endl; std::cin >> input;
sprintf_s(shift_p,"%08.2f",input);

std::cout << "Set Yaw [deg]" << std::endl; std::cin >> input;
sprintf_s(shift_ya,"%08.2f",input);

5-9
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

char buffer[SEND_BUFFER_LEN+1]; sprintf_s(buffer,"%s%s%s%s%s%s",shift_x,shift_y,shift_z,shift_r,shift_p,shift_ya);

std::cout << "Send Data " << std::endl; std::cout << buffer
<< std::endl;

//Send
check = send(sock, buffer, sizeof(buffer), 0); Gửi dữ liệu vào bộ điều khiển robot

//--------------------------------------------------------
// End Socket
//--------------------------------------------------------

closesocket(sock);
Đóng đầu cắm
WSACleanup(); return 0;

5-10
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

5.1.6 Ví dụ về chương trình Tác vụ người dùng (máy khách)

' TCP/IP_Socket(Client)

'----------------------------------------------------------
' Setup
'---------------------------------------------------------- DIM Port AS INTEGER
DIM IpAdd AS INTEGER
DIM SendDataLen AS INTEGER DIM
SendIODataLen AS INTEGER DIM
ReceiveDataLen AS INTEGER DIM
ReceiveBufferLen AS INTEGER Port = 10030
'Port#
IpAdd = 10 'Server IP address Hằng số đối với
SendDataLen = 12 'Send Data Len giao tiếp đầu cắm
SendIODataLen =3 'Send IO Data Len
ReceiveDataLen = 8 'Receive Data Len ReceiveBufferLen =
ReceiveDataLen * 6 'Receive Buffer Len
'----------------------------------------------------------
' Initialize
'----------------------------------------------------------
V10! = 0 'Current X
V11! = 0 'Current Y
V12! = 0 'Current Z
V13! = 0 'Current Roll
V14! = 0 'Current Pitch
V15! = 0 'Current Yaw
V10$ = "" 'Send X
V11$ = "" 'Send Y
V12$ = "" 'Send Z
V13$ = "" 'Send Roll
V14$ = "" 'Send Pitch
V15$ = "" 'Send Yaw
V16$ = "" 'Send IO Khởi tạo biến số
V17$ = "" 'Send Variable
V1$ = "" 'Receive X
V2$ = "" 'Receive Y
V3$ = "" 'Receive Z
V4$ = "" 'Receive Roll
V5$ = "" 'Receive Pitch
V6$ = "" 'Receive Yaw
V1! = 0 'Receive X
V2! = 0 'Receive Y
V3! = 0 'Receive Z
V4! = 0 'Receive Roll
V5! = 0 'Receive Pitch
V6! = 0 'Receive Yaw
R1 = (0,0,0,0,0,0) 'Shift Register

5-11
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

'----------------------------------------------------------
' Create
'---------------------------------------------------------- SOCKCREATE 2,0
IF E1%<0 THEN *ERROR
'----------------------------------------------------------
' Connect Kết nối với
'---------------------------------------------------------- SOCKCONNECT 2,IpAdd,Port,1 máy tính
máy chủ
IF E1%<0 THEN *ERROR
'----------------------------------------------------------
'GET Position
'---------------------------------------------------------- V10! = SYSTEM!(810) 'X
V11! = SYSTEM!(811) 'Y
V12! = SYSTEM!(812) 'Z
V13! = SYSTEM!(813) 'Roll
V14! = SYSTEM!(814) 'Pitch
Bảo lưu vị trí
V15! = SYSTEM!(815) 'Yaw TCP tới biến số
'----------------------------------------------------------
'Send
'----------------------------------------------------------
V10$ =LEFT$(STR$(V10!), SendDataLen) V11$
=LEFT$(STR$(V11!), SendDataLen) V12$ =LEFT$
(STR$(V12!), SendDataLen) V13$ =LEFT$(STR$
(V13!), SendDataLen) V14$ =LEFT$(STR$(V14!), Bảo lưu vị trí TCP hiện tại
SendDataLen) V15$ =LEFT$(STR$(V15!), tới các biến chuỗi
SendDataLen)

V16$ =STR$(O[1])
V16$ =V16$ + STR$(O[2]) V16$
=V16$ + STR$(O[3]) Bảo lưu điều kiện của tín
V16$ =LEFT$(V16$, SendIODataLen) hiệu đầu ra chung tới các
biến chuỗi
V17$ =V10$+","+V11$+","+V12$+","+V13$+","+V14$+","+V15$+","+V16$+"," SOCKSENDSTR

2,V17$,LEN(V17$),0,V105%,0
Gửi dữ liệu vào máy tính
IF E1%<0 THEN *ERROR
cá nhân

5-12
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

'----------------------------------------------------------
' Receive
'----------------------------------------------------------
SOCKRECV 2,1,ReceiveBufferLen,0,V110% IF Nhận dữ liệu từ
E1%<0 THEN *ERROR máy tính cá nhân

GETSTR 1, V1$, ReceiveDataLen * 0, ReceiveDataLen GETSTR 1,


V2$, ReceiveDataLen * 1, ReceiveDataLen GETSTR 1, V3$,
ReceiveDataLen * 2, ReceiveDataLen GETSTR 1, V4$, Lưu dữ liệu đã nhận
ReceiveDataLen * 3, ReceiveDataLen GETSTR 1, V5$, vào biến số
ReceiveDataLen * 4, ReceiveDataLen GETSTR 1, V6$,
ReceiveDataLen * 5, ReceiveDataLen
'----------------------------------------------------------
' Set Val
'---------------------------------------------------------- V1! = VAL(V1$)
V2! = VAL(V2$)
V3! = VAL(V3$)
V4! = VAL(V4$)
V5! = VAL(V5$)
V6! = VAL(V6$)
'----------------------------------------------------------
'Set Register
'---------------------------------------------------------- R1=(V1!,V2!,V3!,V4!,V5!,V6!)
'x,y,z,roll(theta_z),pitch(theta_y),yaw(theta_x)
Lưu dữ liệu vào Mạch
'---------------------------------------------------------- đăng ký di chuyển R1
' Close
'---------------------------------------------------------- SOCKCLOSE 2
EXIT

Đóng đầu cắm


*ERRO
R
WINDOW 0,0,200,100
PRINT #0,STR$(E1%)
PRINT #0,STR$(E2%)
SOCKCLOSE 2
PAUSE 3000 Lỗi quy trình giao tiếp
EXIT đầu cắm

5-13
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

5.1.7 Ví dụ về chương trình máy tính (máy chủ)

#include <stdio.h>
#include <winsock2.h>
#include <iostream>
#include <string.h>

#define PORT_NUM 10030 Hằng số đối với


#define SEND_DATA_SIZE 8 giao tiếp đầu cắm
#define SEND_BUFFER_LEN (SEND_DATA_SIZE * 6)
#define REC_DATA_SIZE 12
#define REC_DATA_NUM 7
#define REC_IO_DATA_SIZE 3
#define REC_BUFFER_LEN (REC_DATA_SIZE * 6 + REC_IO_DATA_SIZE + REC_DATA_NUM)

int main(void){

//--------------------------------------------------------
// Socket Setup
//--------------------------------------------------------
SOCKET sock0; SOCKET
sock;

//Socket information struct

sockaddr_in addr;
struct sockaddr_in client;

//Socket communication

WSADATA wsaData;

if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
{
std::cout << "WSAStartup failed" << std::endl; return 1;
}

//Make Socket Kết nối với


bộ điều khiển robot
sock0 = socket(AF_INET, SOCK_STREAM, 0); if (sock0
== INVALID_SOCKET)
{
std::cout << "socket : " << WSAGetLastError() << std::endl; return 1;
}

//Set the information addr.sin_port =

htons(PORT_NUM); addr.sin_family =

AF_INET;

addr.sin_addr.S_un.S_addr = INADDR_ANY;

5-14
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

if (bind(sock0, (struct sockaddr *)&addr, sizeof(addr)) != 0)


{
std::cout << "bind : " << WSAGetLastError() << std::endl; return 1;
}

//Communicate to the Client if


(listen(sock0, 5) != 0)
{
std::cout << "listen : " << WSAGetLastError() << std::endl; return 1;
}

Kết nối với


int len; bộ điều khiển robot

len = sizeof(client);
std::cout << "Waiting for connection ..." << std::endl; sock = accept(sock0, (struct
sockaddr *)&client, &len); if(sock == INVALID_SOCKET)
{
std::cout << "accept : " << WSAGetLastError() << std::endl; return 1;
}

//--------------------------------------------------------
// Recieve from Client
//--------------------------------------------------------

char rec_buffer[REC_BUFFER_LEN] = {}; int check = 0;


char *temp = NULL; char *ctx
= NULL;
std::cout << "---------------- " << std::endl; std::cout << "Current
Position " << std::endl; std::cout << "---------------- " << std::endl;

//Recieve
check = recv(sock, rec_buffer, sizeof(rec_buffer), 0); if(check < 1){
std::cout << "recv : " << WSAGetLastError() << std::endl; return 1; Nhận dữ liệu
}

temp = strtok_s(rec_buffer,",",&ctx); std::cout << "X : " <<


temp << std::endl;

temp = strtok_s(NULL,",",&ctx);
std::cout << "Y : " << temp << std::endl; Hiển thị dữ liệu đã nhận

temp = strtok_s(NULL,",",&ctx);
std::cout << "Z : " << temp << std::endl;

5-15
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

temp = strtok_s(NULL,",",&ctx);
std::cout << "Roll : " << temp << std::endl;

temp = strtok_s(NULL,",",&ctx);
std::cout << "Pitch : " << temp << std::endl;

temp = strtok_s(NULL,",",&ctx);
std::cout << "Yaw : " << temp << std::endl; temp = Hiển thị dữ liệu đã nhận

strtok_s(NULL,",",&ctx);
std::cout << "Out3 " << std::endl;
std::cout << "Out2 |" << std::endl;
std::cout << "Out1 ||" << std::endl;
std::cout << " |||" << std::endl; std::cout << "IO
: " << temp << std::endl;

//--------------------------------------------------------
// Send to Client
//--------------------------------------------------------

float input = 0.0;


char shift_x[] = "00000.00"; char shift_y[] =
"00000.00"; char shift_z[] = "00000.00"; char
shift_r[] = "00000.00"; char shift_p[] =
"00000.00"; char shift_ya[] = "00000.00";

std::cout << "Set X [mm]" << std::endl; std::cin >> input;


sprintf_s(shift_x,"%08.2f",input);

std::cout << "Set Y [mm]" << std::endl; std::cin >> input;


sprintf_s(shift_y,"%08.2f",input);

std::cout << "Set Z [mm]" << std::endl; std::cin >> input;


sprintf_s(shift_z,"%08.2f",input);

std::cout << "Set Roll [deg]" << std::endl; std::cin >> input;
sprintf_s(shift_r,"%08.2f",input); Nhập dữ liệu cần gửi vào bộ điều khiển
robot.
std::cout << "Set Pitch [deg]" << std::endl; std::cin >> input;
sprintf_s(shift_p,"%08.2f",input);

std::cout << "Set Yaw [deg]" << std::endl; std::cin >> input;
sprintf_s(shift_ya,"%08.2f",input);

5-16
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

char buffer[SEND_BUFFER_LEN+1]; sprintf_s(buffer,"%s%s%s%s%s%s",shift_x,shift_y,shift_z,shift_r,shift_p,shift_ya);

std::cout << "Send Data " << std::endl; std::cout << buffer
<< std::endl;

//Send
check = send(sock, buffer, sizeof(buffer), 0); Gửi dữ liệu vào bộ điều khiển
robot
//--------------------------------------------------------
// End Socket
//--------------------------------------------------------

closesocket(sock);
Đóng đầu cắm
WSACleanup(); return 0;

5-17
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển

LƯU Ý

5-18
http://www.nachi-fujikoshi.co.jp/

Tòa nhà Shiodome Sumitomo 17F,


Điện thoại: Fax:
Trụ sở chính ở Nhật Bản +81-3-5568-5236
Minato-ku, TOKYO, 105-0021 NHẬT BẢN
Nachi Robotic Systems Inc. (NRS) http://www.nachirobotics.com/
Trụ sở ở Bắc Mỹ Điện thoại: 248-305-6545 Fax: 248-305-6542 42775 W. 9 Mile Rd. Novi, Michigan 48375, U.S.A

Trung tâm Dịch vụ Indiana Điện thoại: 502-517-1553 Fax: 317-535-3659 715 Pushville Road, Greenwood, Indiana, 46143, U.S.A.

Trung tâm Dịch vụ Nam Caroline Điện thoại: 864-458-8000 Fax: 864-458-8256 1310 Garlington Road, Suite L, Greenville, SC 29615, U.S.A.

Văn phòng Chi nhánh Canada Điện thoại: 905-760-9542 Fax: 905-760-9477 89 Courtland Ave., Unit No.2, Concord, Ontario, L4K 3T4,
CANADA

Urbina No.54, Parque Industrial Naucalpan, Naucalpan de


Văn phòng Chi nhánh Mexico Điện thoại:+52-555312-6556 Fax:+52-55-5312-7248 Juarez, Estado de Mexico C.P. 53489, MEXICO

NACHI EUROPE GmbH http://www.nachi.de/


Văn phòng Trung tâm Đức Điện thoại: Fax: +49-2151-65046-90 Bischofstrasse 99, 47809, Krefeld, ĐỨC

Chi nhánh ở Vương Quốc Anh Điện thoại: Fax: +44-0121-421-7520 Unit 3, 92, Kettles Wood Drive, Woodgate Business
Park, Birmingham B32 3DB, U.K.

Chi nhánh ở CH Séc Điện thoại: Fax: +420-255-734-001 Obchodni 132, 251 01 Cestlice, PRAGUE-
EAST CỘNG HÒA SÉC

NACHI AUSTRALIA PTY. LTD. http://www.nachi.com.au/


Bộ phận Robot & Điện thoại: Fax:
38, Melverton Drive, Hallam, Victoria 3803, , AUSTRALIA
Văn phòng Victoria +61-(0)3-9796-4144 +61-(0)3-9796-3899

Văn phòng Sydney Điện thoại: Fax:


Unit 1, 23-29 South Street, Rydalmere, N.S.W, 2116, AUSTRALIA
+61-(0)2-9898-1678

Văn phòng Brisbane Điện thoại: Fax:


7/96 Gardens Dr,Willawong,QLD 4110, , AUSTRALIA
+61-(0)7-3272-5324

NACHI SHANGHAI CO., LTD. http://www.nachi.com.cn/


Văn phòng Thượng Hải Điện thoại: Fax: 11F Trung tâm Hoàng Gia, Số 7
+86-(0)21-6915-2200 Ngõ 98 Đường Danba Quận Putuo, Thượng Hải 200062, Trung Quốc

NACHI KOREA http://www.nachi-korea.co.kr/


2F Tòa nhà Dongsan
Văn phòng Seoul Điện thoại: Fax:
+82-(0)2-469-2264
Seoul 133-123, HÀN QUỐC

NACHI-FUJIKOSHI CORP giữ bản quyền.


Bộ phận Robot
1-1-1, FUJIKOSHIHONMACHI, THÀNH PHỐ TOYAMA, NHẬT BẢN 930-8511
Điện thoại +81-76-423-5137
Fax +81-76-493-5252
NACHI-FUJIKOSHI CORP. bảo lưu mọi quyền đối với tài liệu này. Nghiêm cấm sao chép hoặc tái bản bất kỳ phần nào của
cuốn sổ tay hướng dẫn này mà không có sự đồng ý trước bằng văn bản của NACHI-FUJIKOSHI CORP. Nội dung của tài liệu
này có thể được sửa đổi mà không cần thông báo. Mọi trang bị mất hoặc chia trang bị lỗi trong tài liệu này sẽ được thay thế.
Trong trường hợp người dùng cuối sử dụng sản phẩm này cho mục đích quân sự hoặc sản xuất vũ khí, sản phẩm này sẽ bị
giới hạn xuất khẩu theo quy định của Luật Quản lý Ngoại hối và Ngoại thương. Vui lòng tìm hiểu kỹ và nắm rõ mọi thể thức
xuất khẩu cần thiết.
Bản gốc Sổ tay hướng dẫn sẽ được soạn thảo bằng tiếng Nhật.

You might also like