我遇到了关于Lua中循环和表格的问题。
这是一个带有变量knx
的表格(现在是静态的)。
regTable = {
{ RegEddr=3027, count=2, regType="float", knx="1/1/1"},
{ RegEddr=3029, count=2, regType="float", knx="1/1/2"},
{ RegEddr=3031, count=2, regType="float", knx="1/1/3"},
{ RegEddr=2999, count=2, regType="float", knx="1/1/4"},
{ RegEddr=3001, count=2, regType="float", knx="1/1/5"},
{ RegEddr=3003, count=2, regType="float", knx="1/1/6"},
{ RegEddr=3109, count=2, regType="float", knx="1/1/7"},
{ RegEddr=3083, count=2, regType="float", knx="1/1/8"},
{ RegEddr=3059, count=2, regType="float", knx="1/1/9"},
{ RegEddr=3203, count=4, regType="int64", knx="1/1/10"},
}
function readRegisters()
for idx, register in pairs(regTable) do
if register.regType=="int" then
valueInt = mb:readregisters(register.RegEddr)
grp.write(register.knx, valueInt)
elseif register.regType=="float" then
value1, value2 = mb:readregisters(register.RegEddr,register.count)
if value1 then
valueFloat = bit.lshift(value1, 16) + value2
valueFloat = lmcore.inttohex(valueFloat, 4)
valueFloat = knxdatatype.decode(valueFloat, dt.float32)
grp.write(register.knx, valueFloat)
end
elseif register.regType=="int64" then
valueInt1, valueInt2, valueInt3, valueInt4 = mb:readregisters(register.RegEddr,register.count)
if valueInt4 then
valueInt64 = valueInt4
log(valueInt64)
grp.write(register.knx, valueInt64)
end
end
end --end for
end --end function
在另一个脚本中,我调用函数readRegisters()
,因此我有地址列表,但我不知道用户需要多少个地址,无论是10个还是100个。这就是为什么拥有地址列表而不是动态列表的+1步骤不是最优的原因。
1/1/1
1/1/2
...
1/1/255
您能帮我解决一个问题吗?如何在这个表格中动态添加地址变量knx
?