ABB使用TPWrite指令在示教器上显示中文

由于ABB机器人默认不支持中文显示,其原因是字符串类型没有使用中文编码,下面使用Python语言,通过Socket跟机器人通讯编程,来把接收到的字符串经过gbk转码后,返回给机器人之后,再打印可显示为中文。
当然可以使用任意编程语言,去处理编码问题,都可以让其显示中文。
示例代码如下:
ABB机器人做为客户端

VAR socketdev client_socket;
VAR string string1:="";
VAR robtarget Actualpos:=[[404.99,500.00,355.75],[0.190809,0,0.981627,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
PROC R_Tcp_Socket()
    TPErase;
    SocketClose client_socket;
    SocketCreate client_socket;
    SocketConnect client_socket,"127.0.0.1",8005;
    TPWrite "socket client connect successful";
    Actualpos := CRobT(\Tool:=MyTool\WObj:=Workobject_1);
    string1:= NumToStr(Actualpos.trans.x,2) + "," + NumToStr(Actualpos.trans.y,2)+ "," + NumToStr(Actualpos.trans.z,2);
    SocketSend client_socket\Str:=string1;
    SocketReceive client_socket\Str:=received_string;
    TPWrite received_string;
    
    string1 := GetSysInfo(\RobotType) ;
    SocketSend client_socket\Str:=string1;
    SocketReceive client_socket\Str:=received_string;
    TPWrite received_string;

ENDPROC

Python做为服务器端

import socket
import threading

def handle_client_request(service_client_socket, ip_port):

while True:
    # 接收客户端发送的数据
    recv_data = service_client_socket.recv(1024)
    
    send_data = recv_data.decode("gbk")
    print(send_data)
    if send_data[0].isdigit():
        if recv_data:
            send_data = '您当前的位置:' + send_data
            print(send_data)
            # 回复
            service_client_socket.send(send_data.encode('gbk'))
        else:
            print("客户端下线了:", ip_port)
            break
    else:
        if recv_data:
            send_data = '您的型号:' + send_data
            print(send_data)
            # 回复
            service_client_socket.send(send_data.encode('gbk'))
        else:
            print("客户端下线了:", ip_port)
            break
# 终止和客户端进行通信
service_client_socket.close()

if __name__ == ‘__main__’:

tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置端口号复用,让程序退出端口号立即释放
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 绑定端口号
tcp_server_socket.bind(("", 8005))
# 设置监听, listen后的套接字是被动套接字,只负责接收客户端的连接请求
tcp_server_socket.listen(128)
# 循环等待接收客户端的连接请求
while True:
    # 等待接收客户端的连接请求
    service_client_socket, ip_port = tcp_server_socket.accept()
    print("客户端连接成功:", ip_port)
    # 当客户端和服务端建立连接成功以后,需要创建一个子线程,不同子线程负责接收不同客户端的消息
    sub_thread = threading.Thread(target=handle_client_request, args=(service_client_socket, ip_port))
    # 设置守护主线程
    sub_thread.setDaemon(True)
    # 启动子线程
    sub_thread.start()       
# tcp服务端套接字可以不需要关闭,因为服务端程序需要一直运行
# tcp_server_socket.close()

运行效果如下图:
在这里插入图片描述
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值