人生与我
人生与我

Reputation: 11

Lua Script: Convert Multiple "if" into simpler form

I am trying to make a condition where the percentage would be calculated based on the number of fan operated and the amount of airflow. This is what I come out with

function System01()

CFM_SHOP1 = addr_getword("@W_HDW1")
CFM_SHOP2 = addr_getword("@W_HDW2")
STATUS_SHOP1 = addr_getbit("@B_M1")
STATUS_SHOP2 = addr_getbit("@B_M2")
OUTPUT_SHOP1 = addr_getword("@W_HDW10")
OUTPUT_SHOP2 = addr_getword("@W_HDW11")


CFM_1 = CFM_SHOP1 + CFM_SHOP2

if STATUS_SHOP1 == 1 then
   OUTPUT_SHOP1 = CFM_SHOP1 * 10000 / CFM_1
   addr_setword("@W_HDW10", OUTPUT_SHOP1)
   if STATUS_SHOP2 == 1 then
      OUTPUT_SHOP2 = CFM_SHOP2 * 10000 / CFM_1
      addr_setword("@W_HDW11", OUTPUT_SHOP2)
   end      
   TOTAL_1 = OUTPUT_SHOP1 + OUTPUT_SHOP2
   addr_setword("@W_HDW19", TOTAL_1)
end

if STATUS_SHOP2 == 1 then
   OUTPUT_SHOP2 = CFM_SHOP2 * 10000 / CFM_1
   addr_setword("@W_HDW11", OUTPUT_SHOP2)
   if STATUS_SHOP1 == 1 then
      OUTPUT_SHOP1 = CFM_SHOP1 * 10000 / CFM_1
      addr_setword("@W_HDW10", OUTPUT_SHOP1)
   end   
   TOTAL_1 = OUTPUT_SHOP1 + OUTPUT_SHOP2
   addr_setword("@W_HDW19", TOTAL_1)
end

addr_setbit("@B_M1", STATUS_SHOP1)
addr_setbit("@B_M2", STATUS_SHOP2)
addr_setbit("@B_M3", STATUS_SHOP3)

end

Is there any way that I can simplified it? Please note that this is only two example I give. There is total of 9 fan so it will be really complicated if i just use 'if'. Thanks in advance

Upvotes: 1

Views: 145

Answers (1)

Egor Skriptunoff
Egor Skriptunoff

Reputation: 23727

To simplify the code use for-loop

function System01()

   local CFM_SHOP = {}
   local CFM = 0
   for j = 1, 9 do
      CFM_SHOP[j] = addr_getword("@W_HDW"..tostring(j))
      CFM = CFM + CFM_SHOP[j]
   end

   local STATUS_SHOP = {}
   for j = 1, 9 do
      STATUS_SHOP[j] = addr_getbit("@B_M"..tostring(j))
   end

   local OUTPUT_SHOP = {}
   for j = 1, 9 do
      OUTPUT_SHOP[j] = addr_getword("@W_HDW"..tostring(j+9))
   end

   local TOTAL = 0
   for j = 1, 9 do
      if STATUS_SHOP[j] == 1 then
         OUTPUT_SHOP[j] = CFM_SHOP[j] * 10000 / CFM
         addr_setword("@W_HDW"..tostring(j+9), OUTPUT_SHOP[j])
      end
      TOTAL = TOTAL + OUTPUT_SHOP[j]
   end
   addr_setword("@W_HDW19", TOTAL)

   for j = 1, 9 do
      addr_setbit("@B_M"..tostring(j), STATUS_SHOP[j])
   end

end

Upvotes: 2

Related Questions