Professional Documents
Culture Documents
TFDEN-127-003 SocketCommunication DEP Bandich
TFDEN-127-003 SocketCommunication DEP Bandich
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
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
2
1.1 Giới
thiệu
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.
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
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.
Cổng số N1
Đầu cắm
Đầu cắm
Cổng số M2
Cổng số N2
Đầu cắm
Đầ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
1.2 Thuật ngữ
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 3916,
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-3
1.2 Thuật ngữ
LƯU Ý
1-4
2.1 Lập Chương trình Giao tiếp
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.
Để 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
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
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
Máy 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
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.
Thông số kỹ thuật
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.
Thông số kỹ thuật
3-5
3.1 Chức năng của
Đầu cắm
Thông số kỹ thuật
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)
3-4
3.1 Chức năng của
Đầu cắm
Thông số kỹ thuật
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)
3-5
3.1 Chức năng của
Đầu cắm
Thông số kỹ thuật
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)
3-6
3.1 Chức năng của
Đầu cắm
3-7
3.1 Chức năng của
Đầu cắm
Thông số kỹ thuật
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)
3-8
3.1 Chức năng của
Đầu cắm
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ỹ Độ 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).
3-9
3.1 Chức năng của
Đầu cắm
Số
byte
Chuỗi ký tự
Vị trí
bắt đầu
Bộ đệm
Thông số kỹ thuật
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)
3-10
3.1 Chức năng của
Đầu cắm
Thông số kỹ thuật
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)
3-11
3.1 Chức năng của
Đầu cắm
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)
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
Thông số kỹ thuật
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)
3-13
3.1 Chức năng của
Đầu cắm
Chuỗi ký tự
Vị trí Số byte
bắt đầu
Bộ đệm
Thông số kỹ thuật
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)
3-14
3.1 Chức năng của
Đầu cắm
Thông số kỹ thuật
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)
3-15
3.1 Chức năng của
Đầu cắm
Thông số kỹ thuật
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)
3-16
3.1 Chức năng của
Đầu cắm
Thông số kỹ thuật
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)
3-17
3.1 Chức năng của
Đầu cắm
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.
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ủ)
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
Đầ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ủ)
'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.
'CONNECT VISION
Ví dụ về khởi tạo chương trình
‘CREATE SOCKET
SOCKCREATE V150%,0 IF
E1%<0 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%
4-5
4.4 Truy hồi dữ liệu dịch chuyển từ cảm biế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
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
‘ ---------------------- ‘ 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
4-5
4.4 Truy hồi dữ liệu dịch chuyển từ cảm biến
‘ --------------------------------- ‘ 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
4-7
4.4 Truy hồi dữ liệu dịch chuyển từ cảm biến
Đầ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%
4-8
4.5 Quy trình tiếp nhận dữ liệu
Để 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.
SOCKRECV 1, 1, 4, 5, V1%
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
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều khiể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)
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
Để 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.
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
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ị.
dX = 10.2 [mm]
dY = 20.3 [mm]
dZ = -10.5[mm]
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].
5-3
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển
' 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)
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
5-6
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển
#include <stdio.h>
#include <winsock2.h>
#include <iostream>
#include <string.h>
int main(void){
//--------------------------------------------------------
// Socket Setup
//--------------------------------------------------------
SOCKET sock;
sockaddr_in dest;
memset(&dest, 0, sizeof(dest));
//Server address
//xxx.xxx.xxx.xxx
char destination[] = "000.000.000.000"; std::cout << "Set Server
if (WSAStartup(MAKEWORD(2,0), &wsaData) != 0)
{
std::cout << "WSAStartup failed" << std::endl; return 1;
}
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;
}
return -1;
}
std::cout << "Communication to " << destination << " completed" << std::endl;
//--------------------------------------------------------
// Recieve from Server
//--------------------------------------------------------
//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(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
//--------------------------------------------------------
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
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
' 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
5-13
5.1 Giao tiếp của đầu cắm giữa máy tính và bộ điều
khiển
#include <stdio.h>
#include <winsock2.h>
#include <iostream>
#include <string.h>
int main(void){
//--------------------------------------------------------
// Socket Setup
//--------------------------------------------------------
SOCKET sock0; SOCKET
sock;
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;
}
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
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
//--------------------------------------------------------
//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(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
//--------------------------------------------------------
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
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/
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
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