Completata prima bozza simulazione decodifica allarmi..
This commit is contained in:
@@ -24,15 +24,34 @@ callMode = callMode or ''
|
||||
-- se non è da NLua inizializzo variabili accessorie
|
||||
if(callMode ~= 'NLua')
|
||||
then
|
||||
alarmList = {"Allarme01", "Allarme02", "##Silenzio", "##Allarme04", "Allarme05", "Allarme06", "Allarme07", "##Allarme08"}
|
||||
alarmList = {"##Allarme01", "Allarme02", "AllarmeSilenziato03", "##Allarme04", "Allarme05", "Allarme06", "Allarme07", "##Allarme08"}
|
||||
numAlarm = #alarmList
|
||||
--print(alarmList)
|
||||
-- valori status da testare
|
||||
bitMask = 0
|
||||
lastVal = 0
|
||||
currVal = 3
|
||||
end
|
||||
|
||||
alarmListTable={}
|
||||
function testBit(testVal, i)
|
||||
local answ=0
|
||||
local idx=2^(i-1)
|
||||
-- verifico se sia bit diverso...
|
||||
answ = (testVal&idx == idx)
|
||||
return answ
|
||||
end
|
||||
|
||||
function valMask(testVal)
|
||||
return testVal & bitMask
|
||||
end
|
||||
|
||||
-- init tabella
|
||||
alarmListTable = {}
|
||||
alarmListActive = {}
|
||||
alarmStatus = ""
|
||||
|
||||
if numAlarm > 0 and alarmList[0] ~= nil
|
||||
then
|
||||
bitMask = 0
|
||||
for i = numAlarm,1, -1
|
||||
do
|
||||
alarmListTable[i] = alarmList[i-1]
|
||||
@@ -41,12 +60,59 @@ else
|
||||
alarmListTable = alarmList
|
||||
end
|
||||
|
||||
print('------------------------------')
|
||||
for i = 1, numAlarm
|
||||
-- calcolo maschera...
|
||||
for i = 1, numAlarm,1
|
||||
do
|
||||
print("AL"..i.." | "..alarmListTable[i])
|
||||
if(string.sub(alarmListTable[i],0,2)~='##')
|
||||
then
|
||||
bitMask = bitMask + 2^(i-1)
|
||||
end
|
||||
end
|
||||
|
||||
--print('BitMask: '..bitMask)
|
||||
|
||||
for i = 1, numAlarm do
|
||||
bTest = testBit(valMask(currVal),i)
|
||||
if(bTest)
|
||||
then
|
||||
-- print("AL"..i.." | "..alarmListTable[i])
|
||||
alarmListActive[i]=alarmListTable[i]
|
||||
end
|
||||
end
|
||||
|
||||
-- confronto lastVal e currVal
|
||||
if(valMask(lastVal) ~= valMask(currVal))
|
||||
then
|
||||
print('LastVal: '.. lastVal .. ' | CurrVal: '.. currVal .. ' || LastValMask: '.. valMask(lastVal) .. ' | CurrValMask: '.. valMask(currVal))
|
||||
--for i = 1, numAlarm
|
||||
--do
|
||||
-- bTest = testBit(valMask(currVal),i)
|
||||
-- if(bTest)
|
||||
-- then
|
||||
-- -- print("AL"..i.." | "..alarmListTable[i])
|
||||
-- alarmListActive[i]=alarmListTable[i]
|
||||
-- end
|
||||
--end
|
||||
-- salva nuovo valore corrente (post mask)
|
||||
lastVal = valMask(currVal)
|
||||
else
|
||||
print('UNCHANGED | LastValMask: '.. valMask(lastVal) .. ' | CurrValMask: '.. valMask(currVal))
|
||||
end
|
||||
|
||||
for k, v in pairs(alarmListActive) do
|
||||
alarmStatus = alarmStatus .. k .. ' - ' .. v .. ' | '
|
||||
end
|
||||
|
||||
if(#alarmStatus == 0) then
|
||||
alarmStatus = 'All OK'
|
||||
else
|
||||
if(#alarmStatus > 3) then
|
||||
alarmStatus = string.sub(alarmStatus, 0, #alarmStatus -3)
|
||||
end
|
||||
end
|
||||
|
||||
--print(alarmStatus)
|
||||
|
||||
--print('------------------------------')
|
||||
--
|
||||
--for i,val in pairs(alarmListTable) do
|
||||
@@ -57,42 +123,3 @@ end
|
||||
--for i,val in ipairs(alarmListTable) do
|
||||
-- print("AL"..i.." | "..val)
|
||||
--end
|
||||
|
||||
rawVal = 6
|
||||
b0 = 1
|
||||
b1 = 2
|
||||
b2 = 4
|
||||
--bVal = bit.tobit(rawVal)
|
||||
--bHex = bit.tohex(rawVal)
|
||||
--print(bit.band(bVal,b0))
|
||||
--print(bit.band(bVal,b1))
|
||||
--print(bit.band(bVal,b2))
|
||||
--print(bHex)
|
||||
|
||||
--print('------------------------------')
|
||||
--print(6&1 == 1)
|
||||
--print(6&2 == 2)
|
||||
--print(6&4 == 4)
|
||||
--print(6&2 == 8)
|
||||
--print(6&4 == 16)
|
||||
--print('------------------------------')
|
||||
--print(6|1)
|
||||
--print(6|2)
|
||||
--print(6|4)
|
||||
--print(6|2)
|
||||
--print(6|4)
|
||||
|
||||
--OR, XOR, AND = 1, 3, 4
|
||||
--
|
||||
--function bitoper(a, b, oper)
|
||||
-- local r, m, s = 0, 2^31
|
||||
-- repeat
|
||||
-- s,a,b = a+b+m, a%m, b%m
|
||||
-- r,m = r + m*oper%(s-a-b), m/2
|
||||
-- until m < 1
|
||||
-- return r
|
||||
--end
|
||||
--
|
||||
--print(bitoper(6,3,OR)) --> 7
|
||||
--print(bitoper(6,3,XOR)) --> 5
|
||||
--print(bitoper(6,3,AND)) --> 2
|
||||
Reference in New Issue
Block a user