You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TCP/IP连接称重秤数据对比报错“数字与字符串比较”求助

问题解决:Lua中字符串与数字对比错误修复

问题根源

你遇到的「Attempt to compare Number with String」错误,本质是**Actual_Weight变量的类型被意外篡改**:

  • 初始时你将它设为数字0,但后续循环中用字符串拼接操作..把提取的重量字符拼接到它上面,导致它变成了字符串类型
  • 后续用这个字符串和数字280做大小对比,Lua会直接抛出类型不匹配的错误

修复方案

1. 修正变量初始化与字符串提取

把Actual_Weight初始化为空字符串,避免拼接时的类型冲突;提取完重量字符串后,用tonumber()转换为数字类型:

修改后的global.lua代码:

Pre_Data = ''
Post_Data = ''
Weight = ''  -- 改为字符串,避免和后续拼接冲突
Data_Char = 0
Actual_Weight = ''  -- 初始化为空字符串
WEIGHT_WEIGHT_WEIGHT = 0 
function Get_Weight()
    resultOpen1,socket1 = TCPCreate(false, '192.168.1.10', 1001)
    if resultOpen1 == 0 then
        print("Create TCP Client Success!")
    else
        print("Create TCP Client failed, code:", resultOpen1)
    end
    resultOpen1 = TCPStart(socket1, 0)
    if resultOpen1 == 0 then
        print("Connect TCP Server Success!")
    else
        print("Connect TCP Server failed, code:", resultOpen1)
    end
    print(resultOpen1)
    resultWrite1 = TCPWrite(socket1, '%01R$$')
    resultRead1,Pre_Data = TCPRead(socket1, 0, 'string')
    Pre_Data = Pre_Data.buf
    resultRead1,Post_Data = TCPRead(socket1, 0, 'string')
    Post_Data = Post_Data.buf
    Weight = Pre_Data..Post_Data
    print(Weight)
    -- 简化字符串提取:直接截取第7到第11位,无需循环拼接
    Actual_Weight = string.sub(Weight, 7, 11)
    -- 转换为数字类型
    Actual_Weight = tonumber(Actual_Weight)
    print(Actual_Weight)
    -- 释放TCP连接资源,避免泄漏
    TCPStop(socket1)
    TCPClose(socket1)
end

2. 确保对比逻辑的类型一致性

后续的对比代码无需修改,现在WEIGHT_WEIGHT_WEIGHT会是数字类型,和280对比不会报错:

Get_Weight()
WEIGHT_WEIGHT_WEIGHT = Actual_Weight
Sync()
if WEIGHT_WEIGHT_WEIGHT > 280 then
    MovJ(P1)
else
    MovJ(P2)
end

额外优化建议

  • 字符串提取直接用string.sub(Weight,7,11)完成,无需循环拼接,代码更简洁高效
  • 每次TCP请求完成后,调用TCPStop和TCPClose释放连接资源,避免长期运行后出现连接耗尽问题
  • 可增加类型检查逻辑,比如判断tonumber(Actual_Weight)是否为nil,避免提取到无效字符时导致后续逻辑出错

内容的提问来源于stack exchange,提问作者Sniper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:34:49