Lua应用示例
【Lua示例】读取LM2-Q系列激光位移传感器的测量值
【一越智能并联机器人】读取编码器值并发送视觉抓取坐标指令到机器人
【Lua示例】按照日期动态创建目录并保存输入的图片
【Lua示例】单字节字符串拆分归类
【Lua示例】ASCII码转换
【Lua示例】获取指定月份天数
【Lua示例】TCP通讯发送十六进制字符串
【Lua示例】TCP 报文粘包拆包解析脚本说明文档
本站点使用 MrDoc 构建
-
+
首页
【Lua示例】TCP通讯发送十六进制字符串
**概述** 根据系统当前运行状态,选择发送“启动”或“停止”的十六进制字符串命令。先将十六进制字符串转换为字节数组,再通过通讯通道写出。适用于设备启停控制、协议报文下发、按状态自动切换命令等场景。 **技术说明** 环境:NASI 单字节,VG3 Lua Runtime 依赖:LuaSystem(IsRunning)、LuaString(ToByteArray)、LuaCommu(WriteByteArray) 排序:无 边界:十六进制字符串必须以空格分隔,转换后才能发送;通道号需与设备实际连接一致,否则命令无法送达 **函数列表** ``` --1. LuaString:ToByteArray(str, sep) 将空格分隔的十六进制字符串转换为字节数组 参数: str (string) 十六进制字符串,如 "00 00 00 0B" sep (string) 分隔符,通常为空格 " " 返回: bytes (table) 字节数组,可直接用于通讯发送 ``` 示例: ``` local hexByte = LuaString:ToByteArray("00 00 00 0B", " ") --2. LuaCommu:WriteByteArray(channel, bytes) 通过指定通讯通道发送字节数组 参数: channel (number) 通讯通道号,如 0、1 bytes (table) 要发送的字节数组 返回: isSuc (boolean) 发送是否成功 ``` 示例: ``` local isSuc = LuaCommu:WriteByteArray(1, hexByte) ``` **运行实例** 输入:当前系统未运行 发送启动命令成功 ``` OUT1 = false ``` 输入:当前系统正在运行 发送停止命令成功 ``` OUT1 = true ``` **命令报文参考** 命令 十六进制字符串 说明 启动 00 00 00 00 00 0B 01 10 00 38 00 02 04 01 00 00 00 发送后系统启动 停止 00 00 00 00 00 0B 01 10 00 38 00 02 04 02 00 00 00 发送后系统停止 **场景一:根据运行状态自动启停** ``` -- 读取VG3流程运行状态 -- 0是普通流程,1是全局流程 local isRunning = LuaSystem:IsRunning(0) -- 启动/停止命令(十六进制字符串) local Run = "00 00 00 00 00 0B 01 10 00 38 00 02 04 01 00 00 00" local Stop = "00 00 00 00 00 0B 01 10 00 38 00 02 04 02 00 00 00" -- 十六进制字符串转字节数组 local hexByte = LuaString:ToByteArray(Run, " ") local hexByte1 = LuaString:ToByteArray(Stop, " ") -- 未运行则启动,运行中则停止 if not isRunning then local isSuc = LuaCommu:WriteByteArray(1, hexByte) else local isSuc = LuaCommu:WriteByteArray(0, hexByte1) end OUT1 = isRunning ``` **场景二:只发送一条十六进制命令** ``` -- 定义要发送的十六进制字符串 local Run = "00 00 00 00 00 0B 01 10 00 38 00 02 04 01 00 00 00" -- 转为字节数组 local hexByte = LuaString:ToByteArray(Run, " ") -- 通过通道1发送 local isSuc = LuaCommu:WriteByteArray(1, hexByte) LuaLog:Debug(string.format("发送结果: %s", tostring(isSuc))) ``` **完整代码** ``` --============================================ -- 发送十六进制字符串控制启动/停止 --============================================ -- 读取VG3流程运行状态 -- 0是普通流程,1是全局流程 local isRunning = LuaSystem:IsRunning(0) -- 启动命令:十六进制字符串 local Run = "00 00 00 00 00 0B 01 10 00 38 00 02 04 01 00 00 00" -- 停止命令:十六进制字符串 local Stop = "00 00 00 00 00 0B 01 10 00 38 00 02 04 02 00 00 00" -- 将十六进制字符串转换为字节数组(按空格分隔) local hexByte = LuaString:ToByteArray(Run, " ") local hexByte1 = LuaString:ToByteArray(Stop, " ") -- 根据运行状态选择发送启动或停止命令 if not isRunning then -- 未运行:通道1发送启动命令 local isSuc = LuaCommu:WriteByteArray(1, hexByte) else -- 运行中:通道0发送停止命令 local isSuc = LuaCommu:WriteByteArray(0, hexByte1) end -- 输出当前运行状态 OUT1 = isRunning ```
李玉军
2026年9月17日 10:54
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码