基于川崎仿真軟件K-ROSET和SOCKET-TOOL軟件對川崎機器人的TCP-IP通訊功能進行仿真測試
鏈接:https://pan.baidu.com/s/1y1jS8IhQGoWBfeH-VrzSTg?
提取碼:9696
;****************************華麗麗的分割線********************************
.PROGRAM open_socket1() #8537;B 創(chuàng)建通信程序
re_connect:
.er_count = 1
connect:
;TCP_CONNECT 套接字號,端口號,IP地址,超時時間
? TCP_CONNECT sock_id1,port1,ip1[1],tout_open1
? IF sock_id1<0 THEN
? ? IF .er_count>=connect_count1 THEN
? ? ? PRINT "無法創(chuàng)建通信"
? ? ELSE
? ? ? .er_count = .er_count+1
? ? ? PRINT "創(chuàng)建連接錯誤? 返回值:",sock_id1," 嘗試次數(shù):",.er_count
? ? ? ;IFPWPRINT 1,1,1,6,10="創(chuàng)建連接錯誤"
? ? ? GOTO connect? ;返回重新連接
? ? END
? ELSE
? ? PRINT "創(chuàng)建連接成功 返回值:",sock_id1
? END
.END
;****************************華麗麗的分割線********************************
.PROGRAM com_init1() #7998;B TCP端口號IP設(shè)定程序
? port1 = 60000? ? ? ? ? ;端口號
? ip1[1] = 192? ? ? ? ? ;IP地址數(shù)組
? ip1[2] = 168
? ip1[3] = 0
? ip1[4] = 3
;
? max_length1 = 255? ? ?;recv數(shù)據(jù)長度
?tout_open1 = 20? ? ? ?;connect超時時間
? tout1 = 10? ? ? ? ? ? ;send超時時間
? tout_rec1 = 10? ? ? ? ;recv超時時間
? sret1 = 0? ? ? ? ? ? ?;send返回值
? ret1 = 0? ? ? ? ? ? ? ;recv返回值
? text_id1 = 0? ? ? ? ? ;判斷recv的數(shù)據(jù)是否正常
? connect_count1 = 5? ? ? ;connect嘗試次數(shù)
? status1=1
? finish=0
.END
;****************************華麗麗的分割線********************************
.PROGRAM close_socket1() #7856;B 中斷通信程序
;TCP_CLOSE 執(zhí)行結(jié)果,套接字號
? TCP_CLOSE ret1,sock_id1; 正常的套接字關(guān)閉
? IF ret<0 THEN
? ? PRINT "斷開連接錯誤 返回值:(",ret1," )","錯誤代碼:",$ERROR(ret1)
;IFPWPRINT 1,1,1,6,10="斷開連接錯誤"
? ? TCP_CLOSE ret1,.sock_id1; 套接字的強制關(guān)閉 (shutdown關(guān)機)
? ? IF ret1<0 THEN
? ? ? PRINT "強制斷開連接錯誤 返回值:",sock_id1
;IFPWPRINT 1,1,1,6,10="強制斷開連接錯誤"
? ? END
? ELSE
? ? PRINT "斷開連接成功 返回值:",sock_id1
? END
.END
;****************************華麗麗的分割線********************************
.PROGRAM send1() #14916560;B 發(fā)送數(shù)據(jù)程序
$send_data=”123456789”
?$send_buf1[1] = $send_data
? buf_n1 = 1 ;send元素數(shù)
;TCP_SEND 執(zhí)行結(jié)果,Socket ID,發(fā)送數(shù)據(jù)字符串變量,元素數(shù),超時時間
? TCP_SEND sret1,sock_id1,$send_buf1[1],buf_n1,tout1
? ? IF sret1<0 THEN
? ? PRINT "發(fā)送失敗? 返回值:",sret1
finish=0
? ? ;IFPWPRINT 1,2,1,6,10="發(fā)送失敗"
? ? ELSE
? ? PRINT "發(fā)送成功? 返回值:",sret1
finish=1
? ? END
.END
;****************************華麗麗的分割線********************************
.PROGRAM reCV1() #13326971;B 接收數(shù)據(jù)程序
? .num = 0 ;接收元素數(shù)
;TCP_RECV 執(zhí)行結(jié)果,Socket ID,接收數(shù)據(jù)字符串變量,元素數(shù),超時時間,數(shù)據(jù)長度
? TCP_RECV ret1,sock_id1,$recv_buf1[1],.num,tout_rec1,255
? IF ret1<0 THEN
? ? PRINT "接收失敗 返回值:",ret1
? ? .$recv_buf[1] = ""
? ELSE
? ? IF .num>0 THEN
? ? PRINT "接收成功 返回值:",ret1
? ? PRINT "接收數(shù)據(jù):",$recv_buf1[1]
? ? ELSE
? ? PRINT "接收數(shù)據(jù)清空"
? ? ? .$recv_buf[1] = ""
? ? END
? END
.END
;****************************華麗麗的分割線********************************
.PROGRAM com_test() #7117; 接受數(shù)據(jù)處理程序
? PRINT 2: "$recv_buf1[1]==",$recv_buf1[1]
? $ccdtext1=$recv_buf1[1]
? ?FOR .i = 0 TO 2
? ? $temp0 = $DECODE($ccdtext1,",",0)
? ? value1[.i] = VAL($temp0)
? ?if $ccdtext1==" " goto 10
? ? $temp0 = $DECODE($ccdtext1,",",1)
? END
? 10
? PRINT "value[0]==",value1[0]
? PRINT "value[1]==",value1[1]
? PRINT "value[2]==",value1[2]
.END
;****************************華麗麗的分割線********************************
.PROGRAM tcpmain() #6968; 通信主程序
? CALL com_init1;端口號參數(shù)
re_connect:
;TCP_STATUS 返回值,端口號,套接字號,錯誤代碼,錯誤子代碼,IP地址
? TCP_STATUS .tcp_cnt1,.port1[0],.sock1[0],.err1[0],.sub1[0],.$ip_add1[0]
? PRINT "TCP_STATUS 返回值:",.tcp_cnt1
? ;PRINT "端口號",.port1[0]
? CALL open_socket1
IF sock_id1<0 THEN
? ? CALL close_socket1
? ? end
? ? ?if sock_id1==0 then
? ? PRINT "無法創(chuàng)建sock連接"
? END
? again:
? DO
? CALL send1
? until finish==1
? 20
? CALL reCV1
? IF ret1<0 THEN
? ? GOTO 20
? ? status1 = 1
? ? PRINT "機器人接受數(shù)據(jù)是=",VAL(.$recv_buf[1])
? END
? TWAIT 0.3
? IF status1>0 THEN
? ? ;CALL com_test
? END
? GOTO again
.END