Files
mapo-mono/MP.MONO.DECODER/lua/StatusDecoder.lua
T
2022-06-24 17:03:50 +02:00

160 lines
4.2 KiB
Lua

--[[---------------------------------------------------
Procedura calcolo statistiche parametri:
Variabili IN:
- lastMode
- valList(<double>): elenco VALORI double da processare
- numRec(int): conteggio numero recorda da processare
Variabili OUT:
- calcVal(double): valore calcolato finale
-----------------------------------------------------]]
-- Per eventuale debug
local ZBS = "c:/ZeroBraneStudio"
if not package.path:find(ZBS,1,true) then
package.path = ZBS .. "/lualibs/?/?.lua;" .. ZBS .. "/lualibs/?.lua;" .. package.path
package.cpath = ZBS .. "/bin/?.dll;" .. ZBS .. "/bin/clibs53/?.dll;" .. package.cpath
end
-- se non è da NLua inizializzo variabili accessorie
local function checkInit()
if (callMode ~= 'NLua') then
-- imposto valori test
dataList = {}
dataList["MACHINE STATUS"] = 1
dataList["PROCESS STATUS"] = 2
dataList["PROCESS MODE"] = 2
end
numRec = tablelength(dataList)
end
function tablelength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
-- Main function: effettua calcolo stato secondo i parametri ricevuti
local function doCalc()
-- se ho dati processo
if(numRec > 0) then
-- /************************************************************************
-- *
-- * <BROADCAST_EVENT DESCRIPTION = "MACHINE STATUS" IDENTIFIER = "1" >
-- * <!--
-- * DESCRIPTION:
-- * 0: MACHINE OFF
-- * 1: MACHINE ON
-- * -->
-- *
-- * <BROADCAST_EVENT DESCRIPTION = "PROC 1 STATUS" IDENTIFIER = "500" >
-- * <!--
-- * DESCRIPTION:
-- * 1: IDLE
-- * 2: CYCLE (RUN)
-- * 3: HOLD (HOLD, RUNH, HRUN)
-- * 6: ERROR
-- * 8: RESET
-- * 11: PAUSE (WAIT, INPUT)
-- * -->
-- *
-- * <BROADCAST_EVENT DESCRIPTION = "PROC 1 MODE" IDENTIFIER = "501" >
-- * <!--
-- * DESCRIPTION:
-- * 1: MDI
-- * 2: AUTO
-- * 3: STEP (BLK-BLK)
-- * 4: MANU (MANJOG)
-- * 5: MANJ (INCJOG)
-- * 6: RETPROF (PROFILE)
-- * 7: HOME
-- * 8: HPG (HANDWHEEL)
-- * -->
-- *
-- *
-- *************************************************************************/
-- calcolo dello statusId
if(dataList["MACHINE STATUS"] == 0) then
statusId = 7
else
if(dataList["PROCESS MODE"] == 1) then
statusId = 8
elseif(dataList["PROCESS MODE"] == 2) then
statusId = 2
elseif(dataList["PROCESS MODE"] == 3) then
statusId = 9
elseif(dataList["PROCESS MODE"] == 4) then
statusId = 5
elseif(dataList["PROCESS MODE"] == 5) then
statusId = 10
elseif(dataList["PROCESS MODE"] == 6) then
statusId = 11
elseif(dataList["PROCESS MODE"] == 7) then
statusId = 12
elseif(dataList["PROCESS MODE"] == 8) then
statusId = 13
end
end
-- calcolo del processId
if(dataList["PROCESS STATUS"] == 1) then
modeId = 2
elseif(dataList["PROCESS STATUS"] == 2) then
modeId = 1
elseif(dataList["PROCESS STATUS"] == 3) then
modeId = 3
elseif(dataList["PROCESS STATUS"] == 6) then
modeId = 8
elseif(dataList["PROCESS STATUS"] == 8) then
modeId = 9
elseif(dataList["PROCESS STATUS"] == 11) then
modeId = 10
end
calcOk = true
-- altrimenti errore
else
numRec = 1
calcOk = false
end
end
local function displayTestInfo()
if (callMode ~= 'NLua') then
print('------------------------------')
print('calcOk: ' .. tostring(calcOk))
for i,val in pairs(dataList) do
print(""..i.." | "..val)
end
print('statusId: ' .. statusId)
print('modeId: ' .. modeId)
print('------------------------------')
end
end
-- MAIN
function doProcess()
-- variabile semaforo callMode (locali o remote da NLua)
callMode = callMode or ''
numRec = 0
statusId = 0
modeId = 0
dataList = dataList or {}
calcOk = false
--vero task da eseguire
checkInit()
doCalc()
displayTestInfo()
end
if (callMode ~= 'NLua') then
doProcess()
end