Completata prima bozza simulazione decodifica allarmi..
This commit is contained in:
+73
-12
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user