-- This is a one-line comment that ends at the end of the line --[[ This a multi-line (long) [comment](http://www.lua.org/manual/5.1/manual.html#2.1) that ends with this closing bracket --> ]] --[=[ This is also a long comment ]=] --[[--------------------------------------------------- Procedura decodifica Allarmi: - ricezione tab elenco allarmi gestiti a bitmap, se ## = silenziati - produzione var string con status finale risultati - ricezione obj stato corrente x i vari allarmi - decodifica x ogni info ricevuta dello stato allarmi relativo - invio (salvataggio) stato allarmi tramite funzione ---------------------------------------------------]]-- -- ricezione da codice tab status allarmi, attenzione da C# è 0 based, qui è 1 based --> fix costruzione tabella -- variabile semaforo callMode x chiamate locali o remote da NLua callMode = callMode or '' -- se non è da NLua inizializzo variabili accessorie if(callMode ~= 'NLua') then alarmList = {"##Allarme01", "Allarme02", "AllarmeSilenziato03", "##Allarme04", "Allarme05", "Allarme06", "Allarme07", "##Allarme08"} numAlarm = #alarmList -- valori status da testare bitMask = 0 lastVal = 0 currVal = 3 end 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] end else alarmListTable = alarmList end -- calcolo maschera... for i = 1, numAlarm,1 do 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 -- print("AL"..i.." | "..val) --end --print('------------------------------') -- --for i,val in ipairs(alarmListTable) do -- print("AL"..i.." | "..val) --end