From 5177f412de5fc47b661e69e3f011255b49901a4d Mon Sep 17 00:00:00 2001 From: Samuele Locatelli Date: Mon, 21 Mar 2022 09:13:53 +0100 Subject: [PATCH] Update script LUA --- MP.MONO.DECODER/lua/AlarmDecoder.lua | 142 ++++++++--------- MP.MONO.DECODER/lua/ScratchPad.lua | 146 ++++++++++++++++++ .../lua/{prova.lua => ScratchPad_02.lua} | 0 3 files changed, 219 insertions(+), 69 deletions(-) create mode 100644 MP.MONO.DECODER/lua/ScratchPad.lua rename MP.MONO.DECODER/lua/{prova.lua => ScratchPad_02.lua} (100%) diff --git a/MP.MONO.DECODER/lua/AlarmDecoder.lua b/MP.MONO.DECODER/lua/AlarmDecoder.lua index 4269804..822b17d 100644 --- a/MP.MONO.DECODER/lua/AlarmDecoder.lua +++ b/MP.MONO.DECODER/lua/AlarmDecoder.lua @@ -4,7 +4,7 @@ Procedura decodifica Allarmi: Variabili IN: - alarmList(array/tabella) (elenco allarmi gestiti a bitmap, se ## = silenziati) - currVal(INT) stato corrente -- lastVal(INT) ultimo stato (oppure 0) - opzionale +- lastVal(INT) ultimo stato (oppure 0) - muteMask(INT) valore disableMask x silenziamento allarmi (xFF default = tutto attivo, ogni bit a 0 è silenziato) - opzionale Variabili OUT: @@ -21,22 +21,25 @@ currVal = currVal or 0 lastVal = lastVal or 0 muteMask = muteMask or 0XFF disableMask = disableMask or 0xFF ---disableMask = disableMask or 0x00 -- caso calcolato internamente valueChanged = false prefix = prefix or 'AREA' -- se non è da NLua inizializzo variabili accessorie local function checkInit() - if(callMode ~= 'NLua') then - alarmList = {"Allarme01", "Allarme02", "Allarme03", "Allarme04", "Allarme05", "Allarme06", "Allarme07", "Allarme08", "##Allarme09", "##Allarme10", "##Allarme11", "##Allarme12", "##Allarme13", "##Allarme14", "##Allarme15", "##Allarme16"} - numAlarm = #alarmList - -- valori status da testare - lastVal = 0 - currVal = 255 - disableMask = 0x00 - end + if (callMode ~= 'NLua') then + alarmList = {"Allarme01", "Allarme02", "Allarme03", "Allarme04", "Allarme05", "Allarme06", "Allarme07", + "Allarme08", "##Allarme09", "##Allarme10", "##Allarme11", "##Allarme12", "##Allarme13", + "##Allarme14", "##Allarme15", "##Allarme16"} + numAlarm = #alarmList + -- valori status da testare + lastVal = 0 + currVal = 1403 + disableMask = 0xFF + muteMask = 0xFF3F + end end + local function testBit(testVal, i) local answ=0 local idx=2^(i-1) @@ -51,7 +54,7 @@ end local function setupTable() if numAlarm > 0 and alarmList[0] ~= nil then - disableMask = 0 + --disableMask = 0 for i = numAlarm,1, -1 do alarmListTable[i] = alarmList[i-1] end @@ -59,84 +62,85 @@ local function setupTable() alarmListTable = alarmList end end --- calcolo maschera... -local function setupdisableMask() - if(callMode ~= 'NLua') then - for i = 1, numAlarm,1 do - if(string.sub(alarmListTable[i],0,2)~='##') then - disableMask = disableMask + 2^(i-1) - end - end - disableMask = math.tointeger(disableMask) - end -end + -- confronto lastVal e currVal local function checkVariation() - valueChanged = valMask(lastVal) ~= valMask(currVal) - if(callMode ~= 'NLua') then - if(valueChanged) then - print('LastVal: '.. lastVal .. ' | CurrVal: '.. currVal .. ' || LastValMask: '.. valMask(lastVal) .. ' | CurrValMask: '.. valMask(currVal)) - else - print('UNCHANGED | LastValMask: '.. valMask(lastVal) .. ' | CurrValMask: '.. valMask(currVal)) + valueChanged = valMask(lastVal) ~= valMask(currVal) + if (callMode ~= 'NLua') then + if (valueChanged) then + print('LastVal: ' .. lastVal .. ' | CurrVal: ' .. currVal .. ' || LastValMask: ' .. valMask(lastVal) .. ' | CurrValMask: ' .. valMask(currVal)) + else + print('UNCHANGED | LastValMask: ' .. valMask(lastVal) .. ' | CurrValMask: ' .. valMask(currVal)) + end end - end - - -- salva nuovo valore corrente (post mask) - lastVal = valMask(currVal) + + -- salva nuovo valore corrente (post mask) + lastVal = valMask(currVal) end - local function checkActiveAlarms() - local hasAlarms = 0 - for i = 1, numAlarm do - bTest = testBit(valMask(currVal),i) - if(bTest) then - alarmListActive[#alarmListActive+1]= '[' .. prefix ..'.' .. string.format("%02d",i) ..'] '.. alarmListTable[i] - hasAlarms = 1 + local hasAlarms = 0 + for i = 1, numAlarm do + bTest = testBit(lastVal, i) + --bTest = testBit(valMask(currVal), i) + if (bTest) then + alarmListActive[#alarmListActive + 1] = '[' .. prefix .. '.' .. string.format("%02d", i) .. '] ' .. alarmListTable[i] + hasAlarms = 1 + end end - end - -- ordino allarmi... - if(hasAlarms==1) then - table.sort(alarmListActive) - end -end - -local function calcStatusVar() - for k, v in pairs(alarmListActive) do - alarmStatus = alarmStatus .. v .. ' | ' - end - - if(#alarmStatus == 0) then - alarmStatus = 'All OK' - else - if(#alarmStatus > 3) then - alarmStatus = string.sub(alarmStatus, 0, #alarmStatus -3) + -- ordino allarmi... + if (hasAlarms == 1) then + table.sort(alarmListActive) + end +end +local function calcStatusVar() + for k, v in pairs(alarmListActive) do + alarmStatus = alarmStatus .. v .. ' | ' + end + + if (#alarmStatus == 0) then + alarmStatus = 'All OK' + else + if (#alarmStatus > 3) then + alarmStatus = string.sub(alarmStatus, 0, #alarmStatus - 3) + end end - end end local function displayTestInfo() - if(callMode ~= 'NLua') then - print('muteMask: '.. muteMask .. ' | disableMask: '.. disableMask) - print(alarmStatus) - --print('------------------------------') - --for i,val in pairs(alarmListTable) do - -- print("AL"..i.." | "..val) - --end - end + if (callMode ~= 'NLua') then + print('muteMask: ' .. muteMask .. ' | disableMask: ' .. disableMask) + print(alarmStatus) + -- print('------------------------------') + -- for i,val in pairs(alarmListTable) do + -- print("AL"..i.." | "..val) + -- end + end end +-- calcolo maschera... +local function setupDisableMask() + if (callMode ~= 'NLua') then + for i = 1, numAlarm, 1 do + if (string.sub(alarmListTable[i], 0, 2) ~= '##') then + disableMask = disableMask + 2 ^ (i - 1) + end + end + disableMask = math.tointeger(disableMask) + end +end -- MAIN -alarmListTable = {} +alarmListTable = {} alarmListActive = {} -alarmStatus = "" +alarmStatus = "" checkInit() setupTable() -setupdisableMask() +--setupDisableMask() + checkVariation() checkActiveAlarms() -calcStatusVar() +calcStatusVar() displayTestInfo() diff --git a/MP.MONO.DECODER/lua/ScratchPad.lua b/MP.MONO.DECODER/lua/ScratchPad.lua new file mode 100644 index 0000000..6ac664c --- /dev/null +++ b/MP.MONO.DECODER/lua/ScratchPad.lua @@ -0,0 +1,146 @@ +--[[--------------------------------------------------- +Procedura decodifica Allarmi: + +Variabili IN: +- alarmList(array/tabella) (elenco allarmi gestiti a bitmap, se ## = silenziati) +- currVal(INT) stato corrente +- lastVal(INT) ultimo stato (oppure 0) - opzionale +- muteMask(INT) valore disableMask x silenziamento allarmi (xFF default = tutto attivo, ogni bit a 0 è silenziato) - opzionale + +Variabili OUT: +- alarmStatus (stirng con status finale risultato allarmi attivi) + +Viene calcolato internamente la disableMask dall'elenco allarmi +-----------------------------------------------------]] + +-- ricezione da codice tab status allarmi, attenzione da C# è 0 based, qui è 1 based --> fix costruzione tabella + +-- variabile semaforo callMode (locali o remote da NLua) +callMode = callMode or '' +currVal = currVal or 0 +lastVal = lastVal or 0 +muteMask = muteMask or 0XFF +disableMask = disableMask or 0xFF +valueChanged = false +prefix = prefix or 'AREA' + +-- se non è da NLua inizializzo variabili accessorie +local function checkInit() + if (callMode ~= 'NLua') then + alarmList = {"Allarme01", "Allarme02", "Allarme03", "Allarme04", "Allarme05", "Allarme06", "Allarme07", + "Allarme08", "##Allarme09", "##Allarme10", "##Allarme11", "##Allarme12", "##Allarme13", + "##Allarme14", "##Allarme15", "##Allarme16"} + numAlarm = #alarmList + -- valori status da testare + lastVal = 0 + currVal = 1403 + disableMask = 0xFF + muteMask = 0xFF3F + end +end + + +local function testBit(testVal, i) + local answ=0 + local idx=2^(i-1) + -- verifico se sia bit diverso... + answ = (testVal&idx == idx) + return answ +end + +local function valMask(testVal) + return testVal & disableMask & muteMask +end + +local function setupTable() + if numAlarm > 0 and alarmList[0] ~= nil then + --disableMask = 0 + for i = numAlarm,1, -1 do + alarmListTable[i] = alarmList[i-1] + end + else + alarmListTable = alarmList + end +end + + +-- confronto lastVal e currVal +local function checkVariation() + valueChanged = valMask(lastVal) ~= valMask(currVal) + if (callMode ~= 'NLua') then + if (valueChanged) then + print('LastVal: ' .. lastVal .. ' | CurrVal: ' .. currVal .. ' || LastValMask: ' .. valMask(lastVal) .. ' | CurrValMask: ' .. valMask(currVal)) + else + print('UNCHANGED | LastValMask: ' .. valMask(lastVal) .. ' | CurrValMask: ' .. valMask(currVal)) + end + end + + -- salva nuovo valore corrente (post mask) + lastVal = valMask(currVal) +end + +local function checkActiveAlarms() + local hasAlarms = 0 + for i = 1, numAlarm do + bTest = testBit(lastVal, i) + --bTest = testBit(valMask(currVal), i) + if (bTest) then + alarmListActive[#alarmListActive + 1] = '[' .. prefix .. '.' .. string.format("%02d", i) .. '] ' .. alarmListTable[i] + hasAlarms = 1 + end + end + -- ordino allarmi... + if (hasAlarms == 1) then + table.sort(alarmListActive) + end +end +local function calcStatusVar() + for k, v in pairs(alarmListActive) do + alarmStatus = alarmStatus .. v .. ' | ' + end + + if (#alarmStatus == 0) then + alarmStatus = 'All OK' + else + if (#alarmStatus > 3) then + alarmStatus = string.sub(alarmStatus, 0, #alarmStatus - 3) + end + end +end + +local function displayTestInfo() + if (callMode ~= 'NLua') then + print('muteMask: ' .. muteMask .. ' | disableMask: ' .. disableMask) + print(alarmStatus) + -- print('------------------------------') + -- for i,val in pairs(alarmListTable) do + -- print("AL"..i.." | "..val) + -- end + end +end + +-- calcolo maschera... +local function setupDisableMask() + if (callMode ~= 'NLua') then + for i = 1, numAlarm, 1 do + if (string.sub(alarmListTable[i], 0, 2) ~= '##') then + disableMask = disableMask + 2 ^ (i - 1) + end + end + disableMask = math.tointeger(disableMask) + end +end + +-- MAIN +alarmListTable = {} +alarmListActive = {} +alarmStatus = "" + +checkInit() +setupTable() +--setupDisableMask() + +checkVariation() +checkActiveAlarms() +calcStatusVar() +displayTestInfo() diff --git a/MP.MONO.DECODER/lua/prova.lua b/MP.MONO.DECODER/lua/ScratchPad_02.lua similarity index 100% rename from MP.MONO.DECODER/lua/prova.lua rename to MP.MONO.DECODER/lua/ScratchPad_02.lua