Completata prima bozza simulazione decodifica allarmi..

This commit is contained in:
Samuele Locatelli
2022-03-15 19:56:54 +01:00
parent a1471b8613
commit a7923ed8da
2 changed files with 145 additions and 57 deletions
+73 -12
View File
@@ -15,39 +15,100 @@ if (numTest == 1)
{
// inserisco dati in LUA...
List<string> alarmList = new List<string>();
string alarmStatus = "";
string luaPath = Path.Combine(Directory.GetCurrentDirectory(), "lua", "AlarmDecoder.lua");
state.NewTable("alarmListTable");
LuaTable tabA = state.GetTable("alarmListTable");
#if false
alarmList = new List<string>() { "Allarme01", "Allarme02", "##Allarme03", "Allarme04" };
//state.NewTable("alarmList");
//state.DoString(" print(alarmList) ");
state["alarmList"] = alarmList;
//state.DoString(" print(alarmList) ");
state["numAlarm"] = alarmList.Count;
state["lastVal"] = 0;
state["currVal"] = 3;
// chiamo script
string luaPath = Path.Combine(Directory.GetCurrentDirectory(), "lua", "AlarmDecoder.lua");
state.DoFile(luaPath);
LuaTable tabA = state.GetTable("alarmListFix");
tabA = state.GetTable("alarmListTable");
#endif
// aggiorno valori
alarmList = new List<string>() { "Allarme01", "Allarme02", "##Allarme03", "Allarme04", "Allarme05", "##Allarme06", "Allarme07", "Allarme08" };
alarmList = new List<string>() { "Allarme01", "Allarme02", "##Allarme03", "Allarme04", "##Allarme05", "Allarme06", "Allarme07", "Allarme08" };
state["alarmList"] = alarmList;
state["numAlarm"] = alarmList.Count;
// rieseguo
//state.DoString(@"
//function setupAlarms()
// for i = numAlarm,1, -1
// do
// alarmListTable[i] = alarmList[i-1]
// end
//end
//");
//var scriptFunc = state["setupAlarms"] as LuaFunction;
//var res2 = scriptFunc.Call();
// eseguo
state["lastVal"] = 0;
state["currVal"] = 3;
state.DoFile(luaPath);
alarmStatus = state.GetString("alarmStatus");
Console.WriteLine(alarmStatus);
//tabA = state.GetTable("alarmListActive");
//foreach (var item in tabA.Values)
//{
// Console.WriteLine(item);
//}
Thread.Sleep(800);
state["currVal"] = 7;
state.DoFile(luaPath);
alarmStatus = state.GetString("alarmStatus");
Console.WriteLine(alarmStatus);
//tabA = state.GetTable("alarmListActive");
//foreach (var item in tabA.Values)
//{
// Console.WriteLine(item);
//}
Thread.Sleep(800);
state["currVal"] = 15;
state.DoFile(luaPath);
alarmStatus = state.GetString("alarmStatus");
Console.WriteLine(alarmStatus);
//tabA = state.GetTable("alarmListActive");
//foreach (var item in tabA.Values)
//{
// Console.WriteLine(item);
//}
Thread.Sleep(800);
state["currVal"] = 0;
state.DoFile(luaPath);
alarmStatus = state.GetString("alarmStatus");
Console.WriteLine(alarmStatus);
//tabA = state.GetTable("alarmListActive");
//foreach (var item in tabA.Values)
//{
// Console.WriteLine(item);
//}
//state.DoString("a={b={c=2}}");
//LuaTable tabA = state.GetTable("a");
//LuaTable tabB = state.GetTable("a.b");
//state.DoString(" print(a) ");
//foreach (var item in tabA)
//{
// Console.WriteLine(item);
//}
//foreach (var item in tabB)
//{
// Console.WriteLine(item);
//}
//tabA = state.GetTable("alarmListActive");
//foreach (var item in tabA.Values)
//{
// Console.WriteLine(item);
//}
}
else if (numTest == 2)
{
+72 -45
View File
@@ -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