大家一起支持原创,推动机器人使用和发展本公众号对各类ABB机器人应用,仿真,毕业设计提供技术支持,详细后台留言 本公众号诚挚希望与各机器人培训机构,机器人使用单元合作,提供技术支持,详细后台留言
1. 例如相机需要一次性发送2000个数据,数据为浮点数(发送字符串类型),使用逗号分隔,如下。以下数据若使用字符串类型,大概有17KB。对于超大数据,建议使用每4个byte表示一个单精度浮点数方式发送,机器人接受按照此方式接受并解析,可以大大减小数据规模。
-1.98,-2.98,-3.98,-4.98,-5.98,-6.98,-7.98,-8.98,-9.98,-10.98, ... -1996.98,-1997.98,-1998.98,-1999.98,-2000.98
2. 机器人可以一次性接受大量数据并存入内置buffer内。使用socketReceive指令时,每次最多从buffer提取1024字节。 可以使用SocketPeek函数获取buffer中未提取数据的大小 PERS num a200{2000}:=[-1.98,-2.98,-3.98,-4.98,-5.98,-6.98,-7.98,-8.98,-9.98,-10.98, -11.98,-12.98,-13.98,-14.98,-15.98,-16.98,-17.98,-18.98,-19.98,-20.98, -21.98,-22.98,-23.98,-24.98,-25.98,-26.98,-27.98,-28.98,-29.98,-30.98, -31.98,-32.98,-33.98,-34.98,-35.98,-36.98,-37.98,-38.98,-39.98,-40.98, ... -1991.98,-1992.98,-1993.98,-1994.98,-1995.98,-1996.98,-1997.98,-1998.98,-1999.98,-2000.98]; VAR rawbytes raw{100};
PROC recvBig3() CONST string sep:=","; VAR num RawDataCount:=1;
VAR string str1; VAR string str_result; VAR bool flag1; VAR num count:=1;
rConnect;
SocketReceive sock1\RawData:=raw{RawDataCount}; WHILE SocketPeek(sock1)>0 DO RawDataCount:=RawDataCount+1; SocketReceive sock1\RawData:=raw{RawDataCount}; ENDWHILE
str_result:=""; count:=1;
FOR i FROM 1 TO RawDataCount DO FOR j FROM 1 TO RawBytesLen(raw{i}) DO UnpackRawBytes raw{i},j,str1\ASCII:=1; IF str1=sep THEN flag1:=StrToVal(str_result,a200{count}); incr count; str_result:=""; str1:=""; ENDIF str_result:=str_result+str1; ENDFOR ENDFOR flag1:=StrToVal(str_result,a200{count}); TPWrite ""\Num:=RawDataCount;
ENDPROC
PROC rConnect()
IF SocketGetStatus(sock1)<>SOCKET_CONNECTED THEN SocketClose sock1; SocketCreate sock1; SocketConnect sock1,CamIP,CamPort;
ENDIF ENDPROC
3. 如果服务器按照每4个字节发送一个单精度数,机器人可以按照以下代码解析 VAR num a199{2000}; pers num a200{2000}; PROC recvBig4() VAR num RawDataCount:=1; !rawbytes array count VAR num count:=1; ! put all receive data into rawbytes SocketReceive sock1\RawData:=raw{RawDataCount}; WHILE SocketPeek(sock1)>0 DO RawDataCount:=RawDataCount+1; SocketReceive sock1\RawData:=raw{RawDataCount}; ENDWHILE
count:=1;
FOR i FROM 1 TO RawDataCount DO FOR j FROM 1 TO RawBytesLen(raw{i}) step 4 DO UnpackRawBytes raw{i}\Network,j,a199{count}\Float4; ! 如果服务器采用大端法,此处使用\Network参数 ! 如果服务器采用小端法,此处代码如下: ! UnpackRawBytes raw{i},j,a199{count}\Float4; incr count; ENDFOR ENDFOR
FOR i FROM 1 TO 2000 DO a200{i}:=a199{i}; ENDFOR
TPWrite ""\Num:=RawDataCount; ENDPROC
服务器发送4字节浮点数python测试代码: import socket import struct
HOST = 'localhost' PORT = 4999
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.bind((HOST, PORT)) s.listen() print(f'Server is listening on {HOST}:{PORT}') conn, addr = s.accept() conn.settimeout(120) with conn: print(f'Connected by {addr}') data_array = [] for i in range(1,2001): data_array.append(i*(-1)-0.9) for num in data_array: packed_data = struct.pack('>f', num) conn.sendall(packed_data) print('Data sent successfully') conn.recv(1000)
******************************** 如何获取更多经典文章? 关注公众号 ABB机器人实战技巧,点击页面底部的往期经典和配置,查看更多经典内容
点击阅读原文,学习robotstudio仿真,获取完整教学视频 更多内容 ★ 如何搜索历史文章
★基于pcsdk传输文件到HOME及加载 通过总线发送实数及负整数 ★使用定时中断向PLC发送机器人位置
★信号的准确提早触发
★变位机校准
★ABB机器人零位校准的那些秘密
★创建UDP通讯
★旋转姿态的左乘与右乘 ★通过socket控制机器人启停 上位机仪表盘实时显示机器人速度
★机器人画哆啦A梦 上位机实时控制机器人运动之EGM Python控制ABB机器人运动 通过Excel批量修改EIO文件 带连杆的机器人正运动学计算 制作四连杆机构 机器人PROFINET同时做CONTROLLER和DEVICE ★语音控制ABB机器人
★手机访问web控制机器人 ★自定义伺服焊枪
★制作输送链抓取搬运码垛工作站 ★随机物料产生与抓取
★四轴机器人定义TCP ★自定义外部轴-变位机
★示教四点完成码垛 ★multimove之双机器人与变位机
Robotware6.08碰撞预测启用与关闭
SMB板针脚解释
四六关节耦合限制
求两点间距离 新I/O DSQC1030配置 ABB机器人配置伺服焊枪 转角路径故障不提示设置 外部PLC选择机器人程序 一键回HOME程序 机器人各轴上下限位修改
Wobjdata数据解释
输送链跟踪与视觉的联系
急停与自动停止接线
|