126 lines
3.1 KiB
Lua
126 lines
3.1 KiB
Lua
|
|
-- 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
|