Logic Machine Forum
Error in script - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: Error in script (/showthread.php?tid=6111)



Error in script - CristianAgata - 10.09.2025

Good morning,
I have a problem in this resident script.
Code:
function calcolo32bit (data)
  if data[3] then
    --log('sono passato', data)
        local byte_1 = data[6]
        local byte_2 = data[5]
        local byte_3 = data[4]
        local byte_4 = data[3]
      byte_received = ((byte_4 * 16777216)+(byte_3 * 65536)+(byte_2 * 256)+byte_1)
        --log(byte_received)
        s = bit.rshift(byte_received, 31)
        --log(s)
        exp1 = bit.rshift(byte_received, 23)
        --log(exp1)
        matissa = bit.band(byte_received , 8388607)
        --log(matissa)
        matissa2 = (matissa * 0.0000001) + 1
        --log(matissa2)
        risultato = (((-1)^s) * (2^(exp1-127))* matissa2)
      return(risultato)
  else
    return(0)
  end
end

function crc_calc(inv,cmd_set)
 
  inv_num = {0x02,0x03,0x04,0x05,0x06,0x07}

  --log('inv_num',inv_num[inv])

  cmd = {{0x32,0x20,0x20,0x20,0x20,0x20,0x20},
      {0x3B,0x01,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x02,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x03,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x04,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x08,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x09,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x1E,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x31,0x00,0x20,0x20,0x20,0x20},
      {0x4E,0x00,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x01,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x03,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x04,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x05,0x20,0x20,0x20,0x20,0x20}}
 
data = string.char(inv_num[inv],cmd[cmd_set][1],cmd[cmd_set][2],cmd[cmd_set][3],cmd[cmd_set][4],cmd[cmd_set][5],cmd[cmd_set][6],cmd[cmd_set][7])
  --log('valore grezzo = ',data)
    crc_calc = crc16(data)
  --log(crc_calc)
  return (crc_calc)
end

for i = 1, 6, 1 do
 --log(i)        
 crc = crc_calc(i,1)
--log(crc)
end
The first time (i = 1) it works, then it broken and says this error
Code:
Power_one 10.09.2025 13:10:53
Resident script:164: attempt to call global 'crc_calc' (a string value)
stack traceback:
I can't understand what is it the problem.

Can someone help me? Please

B.R. Cristian


RE: Error in script - hocine - 10.09.2025

Code:
function calcolo32bit (data)
  if data[3] then
    --log('sono passato', data)
        local byte_1 = data[6]
        local byte_2 = data[5]
        local byte_3 = data[4]
        local byte_4 = data[3]
      byte_received = ((byte_4 * 16777216)+(byte_3 * 65536)+(byte_2 * 256)+byte_1)
        --log(byte_received)
        s = bit.rshift(byte_received, 31)
        --log(s)
        exp1 = bit.rshift(byte_received, 23)
        --log(exp1)
        matissa = bit.band(byte_received , 8388607)
        --log(matissa)
        matissa2 = (matissa * 0.0000001) + 1
        --log(matissa2)
        risultato = (((-1)^s) * (2^(exp1-127))* matissa2)
      return(risultato)
  else
    return(0)
  end
end

function crc_calc(inv,cmd_set)
 
  inv_num = {0x02,0x03,0x04,0x05,0x06,0x07}
  --log('inv_num',inv_num[inv])
  cmd = {{0x32,0x20,0x20,0x20,0x20,0x20,0x20},
      {0x3B,0x01,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x02,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x03,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x04,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x08,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x09,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x1E,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x31,0x00,0x20,0x20,0x20,0x20},
      {0x4E,0x00,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x01,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x03,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x04,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x05,0x20,0x20,0x20,0x20,0x20}}
 
  data = string.char(inv_num[inv],cmd[cmd_set][1],cmd[cmd_set][2],cmd[cmd_set][3],cmd[cmd_set][4],cmd[cmd_set][5],cmd[cmd_set][6],cmd[cmd_set][7])
  --log('valore grezzo = ',data)
  local crc_result = crc16(data)  -- ✅ use different name
  --log(crc_result)
  return (crc_result)
end

for i = 1, 6, 1 do
--log(i)       
crc = crc_calc(i,1)
--log(crc)
end
hello, try this


RE: Error in script - CristianAgata - 10.09.2025

(Yesterday, 11:27)hocine Wrote:
Code:
function calcolo32bit (data)
  if data[3] then
    --log('sono passato', data)
        local byte_1 = data[6]
        local byte_2 = data[5]
        local byte_3 = data[4]
        local byte_4 = data[3]
      byte_received = ((byte_4 * 16777216)+(byte_3 * 65536)+(byte_2 * 256)+byte_1)
        --log(byte_received)
        s = bit.rshift(byte_received, 31)
        --log(s)
        exp1 = bit.rshift(byte_received, 23)
        --log(exp1)
        matissa = bit.band(byte_received , 8388607)
        --log(matissa)
        matissa2 = (matissa * 0.0000001) + 1
        --log(matissa2)
        risultato = (((-1)^s) * (2^(exp1-127))* matissa2)
      return(risultato)
  else
    return(0)
  end
end

function crc_calc(inv,cmd_set)
 
  inv_num = {0x02,0x03,0x04,0x05,0x06,0x07}
  --log('inv_num',inv_num[inv])
  cmd = {{0x32,0x20,0x20,0x20,0x20,0x20,0x20},
      {0x3B,0x01,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x02,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x03,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x04,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x08,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x09,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x1E,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x31,0x00,0x20,0x20,0x20,0x20},
      {0x4E,0x00,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x01,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x03,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x04,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x05,0x20,0x20,0x20,0x20,0x20}}
 
  data = string.char(inv_num[inv],cmd[cmd_set][1],cmd[cmd_set][2],cmd[cmd_set][3],cmd[cmd_set][4],cmd[cmd_set][5],cmd[cmd_set][6],cmd[cmd_set][7])
  --log('valore grezzo = ',data)
  local crc_result = crc16(data)  -- ✅ use different name
  --log(crc_result)
  return (crc_result)
end

for i = 1, 6, 1 do
--log(i)       
crc = crc_calc(i,1)
--log(crc)
end
hello, try this
Hi,
thanks but it is the same error. Always first step and then error.
BR Cristian


RE: Error in script - Daniel - 10.09.2025

Where did you get this function from? crc16(data)


RE: Error in script - CristianAgata - 10.09.2025

(Yesterday, 11:48)Daniel Wrote: Where did you get this function from? crc16(data)

sorry i forget to attached a part...... here for you 
Code:
--funzione calcolo CRC16
function crc16(data)
  log('valore passato = ',data)
  local crc = 0xFFFF
for i = 1, #data do
    crc = bit.bxor(crc, data:byte(i))
    for j = 1, 8 do
      local k = bit.band(crc, 1)
      crc = bit.rshift(crc, 1)
      if k ~= 0 then
        crc = bit.bxor(crc, 0x8408)
        end
      end
    end
    --return bit.bxor(crc, 0xFFFF)
  result = string.format("%04X",bit.bxor(crc, 0xFFFF))
  result_low = string.sub(result, 3 , 4)
  result_high = string.sub(result, 1 , 2)
  crc_calc = (',0x'..result_low..',0x'..result_high)
  return crc_calc
end



RE: Error in script - Daniel - 10.09.2025

Try this
Code:
function calcolo32bit (data)
  if data[3] then
    --log('sono passato', data)
        local byte_1 = data[6]
        local byte_2 = data[5]
        local byte_3 = data[4]
        local byte_4 = data[3]
      byte_received = ((byte_4 * 16777216)+(byte_3 * 65536)+(byte_2 * 256)+byte_1)
        --log(byte_received)
        s = bit.rshift(byte_received, 31)
        --log(s)
        exp1 = bit.rshift(byte_received, 23)
        --log(exp1)
        matissa = bit.band(byte_received , 8388607)
        --log(matissa)
        matissa2 = (matissa * 0.0000001) + 1
        --log(matissa2)
        risultato = (((-1)^s) * (2^(exp1-127))* matissa2)
      return(risultato)
  else
    return(0)
  end
end

function crc16(data)
-- log('valore passato = ',data)
  local crc = 0xFFFF
for i = 1, #data do
    crc = bit.bxor(crc, data:byte(i))
    for j = 1, 8 do
      local k = bit.band(crc, 1)
      crc = bit.rshift(crc, 1)
      if k ~= 0 then
        crc = bit.bxor(crc, 0x8408)
        end
      end
    end
    --return bit.bxor(crc, 0xFFFF)
  result = string.format("%04X",bit.bxor(crc, 0xFFFF))
  result_low = string.sub(result, 3 , 4)
  result_high = string.sub(result, 1 , 2)
  local crc16 = (',0x'..result_low..',0x'..result_high)
  return crc16
end

function crc_calc(inv,cmd_set)
 
  inv_num = {0x02,0x03,0x04,0x05,0x06,0x07}

  --log('inv_num',inv_num[inv])

  cmd = {{0x32,0x20,0x20,0x20,0x20,0x20,0x20},
      {0x3B,0x01,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x02,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x03,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x04,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x08,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x09,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x1E,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x31,0x00,0x20,0x20,0x20,0x20},
      {0x4E,0x00,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x01,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x03,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x04,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x05,0x20,0x20,0x20,0x20,0x20}}
 
data = string.char(inv_num[inv],cmd[cmd_set][1],cmd[cmd_set][2],cmd[cmd_set][3],cmd[cmd_set][4],cmd[cmd_set][5],cmd[cmd_set][6],cmd[cmd_set][7])
--log('valore grezzo = ',data)
   crc1 = crc16(data)
--log(crc_calc)
  return (crc1)
end





for i = 1, 6, 1 do
  local crc = crc_calc(i ,1)
   log(crc)
end



RE: Error in script - CristianAgata - 10.09.2025

(Yesterday, 13:32)Daniel Wrote: Try this
Code:
function calcolo32bit (data)
  if data[3] then
    --log('sono passato', data)
        local byte_1 = data[6]
        local byte_2 = data[5]
        local byte_3 = data[4]
        local byte_4 = data[3]
      byte_received = ((byte_4 * 16777216)+(byte_3 * 65536)+(byte_2 * 256)+byte_1)
        --log(byte_received)
        s = bit.rshift(byte_received, 31)
        --log(s)
        exp1 = bit.rshift(byte_received, 23)
        --log(exp1)
        matissa = bit.band(byte_received , 8388607)
        --log(matissa)
        matissa2 = (matissa * 0.0000001) + 1
        --log(matissa2)
        risultato = (((-1)^s) * (2^(exp1-127))* matissa2)
      return(risultato)
  else
    return(0)
  end
end

function crc16(data)
-- log('valore passato = ',data)
  local crc = 0xFFFF
for i = 1, #data do
    crc = bit.bxor(crc, data:byte(i))
    for j = 1, 8 do
      local k = bit.band(crc, 1)
      crc = bit.rshift(crc, 1)
      if k ~= 0 then
        crc = bit.bxor(crc, 0x8408)
        end
      end
    end
    --return bit.bxor(crc, 0xFFFF)
  result = string.format("%04X",bit.bxor(crc, 0xFFFF))
  result_low = string.sub(result, 3 , 4)
  result_high = string.sub(result, 1 , 2)
  local crc16 = (',0x'..result_low..',0x'..result_high)
  return crc16
end

function crc_calc(inv,cmd_set)
 
  inv_num = {0x02,0x03,0x04,0x05,0x06,0x07}

  --log('inv_num',inv_num[inv])

  cmd = {{0x32,0x20,0x20,0x20,0x20,0x20,0x20},
      {0x3B,0x01,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x02,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x03,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x04,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x08,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x09,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x1E,0x00,0x20,0x20,0x20,0x20},
      {0x3B,0x31,0x00,0x20,0x20,0x20,0x20},
      {0x4E,0x00,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x01,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x03,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x04,0x20,0x20,0x20,0x20,0x20},
      {0x4E,0x05,0x20,0x20,0x20,0x20,0x20}}
 
data = string.char(inv_num[inv],cmd[cmd_set][1],cmd[cmd_set][2],cmd[cmd_set][3],cmd[cmd_set][4],cmd[cmd_set][5],cmd[cmd_set][6],cmd[cmd_set][7])
--log('valore grezzo = ',data)
   crc1 = crc16(data)
--log(crc_calc)
  return (crc1)
end





for i = 1, 6, 1 do
  local crc = crc_calc(i ,1)
   log(crc)
end
thank you so much in this way it works.
So error was in crc16 function.
BR Cristian