Appearance
应用示例
textmsg函数
使用textmsg()可以打印类型为字符串的信息至aubo_control日志中。其打印信息可在示教器的主页界面中看到。
textmsg的LUA函数定义: textmsg(msg: string) -> nil
用法:
(1)当变量类型为String(字符串)时:-- 获取机器人的名称 name = getName() textmsg(name)
(2)当变量类型为Boolean(布尔值) 时:
-- 机器人是否已经停止下来 is_steady = isSteady() textmsg(tostring(is_steady))
(3)当变量类型为Number(数字) 时:
-- 获取机器人的模式状态 mode_type = getRobotModeType() textmsg("The type of robot mode is "..mode_type)
(4)当变量类型为Table(表) 时:
-- 获取当前的机械臂关节角度 joint_positions = getJointPositions() textmsg(table.concat(joint_positions, ', '))
TCP/IP通信示例
实现TCP/IP通信的方法
这里有两种方法可以实现机器人和外部设备的socket通信:
方法1是使用Lua的Socket库。
Lua的Socket库是一种通用的网络编程库,允许在Lua脚本中创建Socket连接,进行数据传输和接收。
方法2是使用由遨博提供的Socket类Lua接口。
遨博提供了专门的Socket类脚本接口,允许机器人直接与外部设备进行通信。
遨博的Socket类Lua接口介绍
socketOpen
函数定义:
luasocketOpen(address: string, port: number, socket_name: string) -> nil
功能:建立TCP/IP以太网socket通信
参数:
- address:目标服务器的IP地址
- port:目标服务器的端口号
- socket_name:socket名称
示例:
luasocketOpen('192.168.10.46', '8000', "socket_0")
socketSendLine
函数定义:
luasocketSendLine(str: string, socket_name: string) -> nil
功能:向服务器发送带有换行字符的字符串,以ASCII编码将字符串通过socket发送
参数:
- str:要发送的字符串
- socket_name:socket名称
示例:
luasocketSendLine("abcd", "socket_0")
socketReadString
函数定义:
luasocketReadString(variable: string, socket_name: string, prefix: string, suffix: string, interpret_escape: boolean) -> number
功能:从socket中读取所有数据,并将数据作为字符串返回
参数:
- variable:要读取的字符串
- socket_name:socket 名称
- prefix:指定了从socket中提取的子串(消息)的起始位置。从socket中到达 "prefix" 结束的数据将被忽略和移除
- suffix:指定了从socket中提取的子串(消息)的结束位置。在 "suffix" 之后的任何剩余数据将被保留
- interpret_escape:表示是否解释转义字符。如果设置为true,函数会解释字符串中的转义字符(例如'\r'、'\n'、'\t'等),如果设置为false,则不会解释转义字符,而是将其原样返回
示例:
luasocketReadString("camera", "socket_0", "", "", false)
socketClose
函数定义:
luasocketClose(socket_name: string) -> nil
功能:关闭与服务器的socket连接
参数:
- socket_name:socket 名称
示例:
lua
socketClose("socket_0") ```
通过脚本实现TCP/IP通信的操作步骤
操作步骤如下:
确认外部设备与机器人处于同一局域网中,保证双方可以互相ping通(Windows系统建议关闭防火墙)。
以机器人为客户端,外部设备为服务端,方法1和方法2的脚本代码示例分别如下。
- 方法1:使用Lua的Socket库来实现TCP通信
lualocal socket = require("socket.core") local tcp = socket.tcp() local host = '192.168.10.46' --服务端IP地址 local port = '8000' --串口号 local clicon = tcp:connect(host,port) if(clicon) then textmsg('connect '..host..' ok!') else textmsg('connect error') end take_photo = "get" --发送给服务端的字符串 tcp:settimeout(2) str1 = nil --服务端发送的数据 while (true) do --如果服务端关闭则停止循环 if status =="closed" then textmsg("server is closed!") break end --发送给服务端字符串 tcp:send(take_photo) sleep(1) --接收服务端发送的字符串,只有接收到good,停止循环 s, status, str1 = tcp:receive() if str1 == "good" then textmsg("receive: "..str1) break end end tcp:close()
这段代码的主要作用是机器人与指定的服务端建立TCP连接,然后发送字符串 "get" 给服务端,并且持续接收服务端发送的数据,直到接收到 "good" 字符串为止,最后关闭TCP连接。
- 方法2:使用由遨博提供的Socket类接口来实现TCP通信
luaip = "192.168.10.46" --服务端IP地址 port = 8000 --串口号 client_name = "socket_0" --客户端名称 rec_key = "camera" --接收服务端发送的字符串 socketOpen(ip, port, client_name) ----与服务端建立通信 socketSendLine("abcd", client_name) --发送给服务端字符串 sleep(1) rec_str = "" --接收服务端发送的字符串后停止循环 while(rec_str == nil or rec_str == "") do socketReadString(rec_key, client_name, "", "", false) sleep(0.1) rec_str = getString(rec_key, "") textmsg("**********") textmsg(rec_str) textmsg("**********") sleep(1) socketSendLine("dfgh", client_name) end socketClose(client_name)
这段代码的主要作用机器人是与服务端建立Socket连接,发送一些字符串给服务端,然后循环地接收服务端发送的字符串,直到接收到非空的字符串为止,最后关闭与服务端的socket连接。
以TCP调试助手来模拟服务端,指定服务器的监听端口号为8000。
以机械臂作为客户端,修改方法1或方法2的示例代码中服务器的IP地址和端口号。
在示教器中新建一个脚本模板,运行方法1或方法2中的脚本示例。
注意:运行工程前,请取消勾选”程序一直循环“。
运行结果如下:
方法1:使用Lua的Socket库来实现TCP通信
运行示教器工程后,TCP调试助手会一直接收到机器人发送的“get”字符串。
在TCP调试助手中向机器人发送“good”字符串后,
机器人停止循环发送“get”字符串,并且关闭socket连接。
方法2:使用由遨博提供的Socket类接口来实现TCP通信
运行示教器工程后,TCP调试助手会一直接收到机器人发送的“dfgh”字符串。
在TCP调试助手中向机器人发送一个非空的字符串,例如“stop”后,
机器人停止循环发送“dfgh”字符串,并且关闭socket连接。