今天正好看有童鞋写的接收处理代码满满整页的switch,case....给个建议,其实我们可以善于使用工具,(有能力就创作工具,磨刀不误砍柴工。)简洁高效还不容易出BUG。以远程设置设备参数为例:...
                    
                    
                         
                            今天正好看有童鞋写的接收处理代码满满整页的switch,case....给个建议,其实我们可以善于使用工具,(有能力就创作工具,磨刀不误砍柴工。)简洁高效还不容易出BUG。
以远程设置设备参数为例:如果有成百上千的参数要设置显然使用switch这样的办法不适用(理论上也可以,但是代码太冗杂)
使用json就很方便:
--[[命令格式:json
远程升级:例:{"cmd":"update"}                   立马远程升级
设置命令:例:
{"cmd":"set","type":"packInterval","ext":300}   打包数据上传间隔:数值为有效时间,单位秒。
{"cmd":"set","type":"Reading","ext":120}        设置为阅读模式:数值为有效的时间,单位秒。
{"cmd":"set","type":"VsetMax","ext":6}          数值为速度报警上限
...等等]]
--- 数据接收处理供MQTTtask调用,禁止local!
function dataReceiveProc(receiveData)
    local tjsondata,result1,errinfo = json.decode(receiveData)
    if result1 then
        if tjsondata.cmd == "set" then
            PD[tjsondata.type] = tjsondata.ext
        elseif tjsondata.cmd == "update" then
            update.request()
        else
        end
    else
        log.info(filename.."dataReceiveProc",errinfo)
    end
    return true
end
直接就可以赋值到我们程序定义号的参数表中,而表中的数据直接会影响到各个子函数的运行。实例(部分):
-- 项目数据表ProjectData
PD = {
    --需要设置的参数:
    Reading = 0,         --阅读模式设置和计时
    packInterval=300,   --打包数据上传间隔,单位秒,注意:刚设置后为下个周期生效
    stairSize =0.406,   --梯级纵深
    TsetMax = 90,       --温度报警上限
    TsetMin = -10,      --温度报警下限
    VsetMax = 3,        --速度报警上限
。。。这样无论有多少需要设置的参数,都是那三四行代码解决。