今天正好看有童鞋写的接收处理代码满满整页的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, --速度报警上限
。。。这样无论有多少需要设置的参数,都是那三四行代码解决。