跳到主要内容

TCP/IP 控制外部设备

插件的新建过程请参考 IO 控制案例,新建插件后请遵循userAPI.luahttpAPI.luadaemon.luaui/pages/Main.tsx 的顺序去完成插件业务逻辑的开发。

示例流程

userAPI.lua 模块

---@param position string
---@param socket number
function userApiModule.moveTo(position, socket)
TCPWrite(socket, "moveTo_absolutePosition"..","..position.."\n")
TCPRead(socket, 3 , 'string')
end

function userApiModule.getPosition()
local socket = GetVal('TCP_SOCKET_NAME')
local result = nil
local err = nil
if socket then
TCPWrite(socket, "get_position\n")
err, result = TCPRead(socket, 3, "string")
end

return result
end

httpAPI.lua 模块


---移动升降柱
httpModule.moveTo = function(params)
local socket = GetVal('TCP_SOCKET_NAME')
if socket then
userAPI.moveTo(params.position, socket)
end
return {
--- Your responce data
--- example: status = true
}
end

---初始化 TCP 连接
httpModule.init = function(params)
local result = CreateTCPConnection(params.ip, params.port, 10000)
if result.socket then
SetVal('TCP_SOCKET_NAME', result.socket)
end
return {
--- Your responce data
--- example: status = true
}
end

daemon.lua 模块

local userAPI = require('userAPI')

local function handleInLoop()
local data = userAPI.getPosition()
if data then
mqtt.publish({ position = data })
else
mqtt.publish({})
end
end

ui/pages/Main.tsx 模块

import { Button } from '@dobot-plus/components'
import { useEffect, useState } from 'react'
import { http } from '@dobot/http/http'
import { DobotPlusApp } from '@dobot/components/DobotPlusApp'

function App() {
const [position, setPosition] = useState(0)

function handleButton1Click() { http.moveTo({ position: position + 50 }) }

function handleButton2Click() { http.moveTo({ position: position - 50 }) }

function handleMessage(msg: object | string) {
const { position } = msg as { position: number }
if (position) {
setPosition(position)
}
}

useEffect(() => {
http.init({
ip: '192.168.5.1',
port: '123'
})
}, [])

return (
<div className="app">
<DobotPlusApp useMqtt={true} onMessage={handleMessage}>
<Button type="primary" onClick={handleButton1Click}>Move up</Button>
<Button type="primary" onClick={handleButton2Click}>Move down</Button>
<span>{position}</span>
</DobotPlusApp>
</div>
)
}

export default App

运行调试

调试插件指令可进行以下两种情形的开发工作:

  • 仅调试页面
  • 连接真机进行调试
dpt dev

在执行上述命令时,命令行会提示开发者是否连接真机进行测试

$ dpt dev
? Debug lua on real device? Yes
? Please check the device IP: 192.168.5.1 and port: 22001 (y/n)

开发者需要确定:

  • 控制器的真实IP是否正确,默认是 192.168.5.1
  • 控制器服务端口是否正确,默认是 22001
  • SFTP 服务相关配置是否正确

上述配置的详细信息请查看 dpt.json 配置文件

{
"ip": "192.168.5.1", // 控制器 IP
"port": 22001, // 控制器端口
"pluginPort": 22100
}

构建插件

在完成插件的开发、调试、优化后,可执行最终的构建工作,执行

dpt build

在程序顺利执行完毕后,当前文件夹下会出现 dist 文件夹和 output 文件夹。

  • dist 文件夹中存放着本次构建后的插件代码,用于开发者检查构建结果
  • output 文件夹存放着压缩后的 zip 文件,文件名格式为 <插件名>-<版本号>.zip,该文件为实际在客户端导入使用的的插件。