基于川崎仿真软件K-ROSET和SOCKET-TOOL软件对川崎机器人的TCP-IP通讯功能进行仿真测试
链接:https://pan.baidu.com/s/1y1jS8IhQGoWBfeH-VrzSTg
提取码:9696
;****************************华丽丽的分割线********************************
.PROGRAM open_socket1() #8537;B 创建通信程序
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 "无法创建通信"
ELSE
.er_count = .er_count+1
PRINT "创建连接错误 返回值:",sock_id1," 尝试次数:",.er_count
;IFPWPRINT 1,1,1,6,10="创建连接错误"
GOTO connect ;返回重新连接
END
ELSE
PRINT "创建连接成功 返回值:",sock_id1
END
.END
;****************************华丽丽的分割线********************************
.PROGRAM com_init1() #7998;B TCP端口号IP设定程序
port1 = 60000 ;端口号
ip1[1] = 192 ;IP地址数组
ip1[2] = 168
ip1[3] = 0
ip1[4] = 3
;
max_length1 = 255 ;recv数据长度
tout_open1 = 20 ;connect超时时间
tout1 = 10 ;send超时时间
tout_rec1 = 10 ;recv超时时间
sret1 = 0 ;send返回值
ret1 = 0 ;recv返回值
text_id1 = 0 ;判断recv的数据是否正常
connect_count1 = 5 ;connect尝试次数
status1=1
finish=0
.END
;****************************华丽丽的分割线********************************
.PROGRAM close_socket1() #7856;B 中断通信程序
;TCP_CLOSE 执行结果,套接字号
TCP_CLOSE ret1,sock_id1; 正常的套接字关闭
IF ret<0 THEN
PRINT "断开连接错误 返回值:(",ret1," )","错误代码:",$ERROR(ret1)
;IFPWPRINT 1,1,1,6,10="断开连接错误"
TCP_CLOSE ret1,.sock_id1; 套接字的强制关闭 (shutdown关机)
IF ret1<0 THEN
PRINT "强制断开连接错误 返回值:",sock_id1
;IFPWPRINT 1,1,1,6,10="强制断开连接错误"
END
ELSE
PRINT "断开连接成功 返回值:",sock_id1
END
.END
;****************************华丽丽的分割线********************************
.PROGRAM send1() #14916560;B 发送数据程序
$send_data=”123456789”
$send_buf1[1] = $send_data
buf_n1 = 1 ;send元素数
;TCP_SEND 执行结果,Socket ID,发送数据字符串变量,元素数,超时时间
TCP_SEND sret1,sock_id1,$send_buf1[1],buf_n1,tout1
IF sret1<0 THEN
PRINT "发送失败 返回值:",sret1
finish=0
;IFPWPRINT 1,2,1,6,10="发送失败"
ELSE
PRINT "发送成功 返回值:",sret1
finish=1
END
.END
;****************************华丽丽的分割线********************************
.PROGRAM reCV1() #13326971;B 接收数据程序
.num = 0 ;接收元素数
;TCP_RECV 执行结果,Socket ID,接收数据字符串变量,元素数,超时时间,数据长度
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 "接收数据:",$recv_buf1[1]
ELSE
PRINT "接收数据清空"
.$recv_buf[1] = ""
END
END
.END
;****************************华丽丽的分割线********************************
.PROGRAM com_test() #7117; 接受数据处理程序
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;端口号参数
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 "无法创建sock连接"
END
again:
DO
CALL send1
until finish==1
20
CALL reCV1
IF ret1<0 THEN
GOTO 20
status1 = 1
PRINT "机器人接受数据是=",VAL(.$recv_buf[1])
END
TWAIT 0.3
IF status1>0 THEN
;CALL com_test
END
GOTO again
.END