8.4 Cálculo de dispositivo

8.4.1 Reglas

El nombre de la función para el script de cálculo de dispositivo debe ser calc

  • La variable incorporada device se refiere a este dispositivo, el tipo es Device
function calc()
    --[[
    return:     La variable devuelta después del cálculo, puede ser un número, array, tabla, cadena, etc.
    Si el script tiene un error, los datos reportados serán el contenido del error
    ]]
    return {}
end

8.4.2 Ejemplos

8.4.2.1 Combinar dos variables para calcular una nueva variable

Código

function calc()
    local result=device.current
    if(result.cnc_runstatus==1 and #result.cnc_alarm>0)
    then
        result.custom=2
    end
    return result
end

8.4.2.2 Eliminar una variable

Código

function calc()
    local result=device.current
    result.cnc_runstatus=nil
    return result
end

8.4.2.3 Expandir Alarm Array[Object] en variables normales

Convertir del siguiente formato

{
  "cnc_alarm": [
    {
      "alarm_no": 1,
      "alarm_type": "T01",
      "alarm_msg": "待机中"
    },
    {
      "alarm_no": 204,
      "alarm_type": "XXX",
      "alarm_msg": "急停"
    }
  ]
}

a

{
  "cnc_alarm_1_msg": "待机中",
  "cnc_alarm_1_no": 1,
  "cnc_alarm_1_type": "T01",
  "cnc_alarm_2_msg": "急停",
  "cnc_alarm_2_no": 204,
  "cnc_alarm_2_type": "XXX"
}

Código

function calc()
    local result=device.current
    for i, v in ipairs(result.cnc_alarm) do
        result['cnc_alarm_' .. i .. '_msg'] = v.alarm_msg
        result['cnc_alarm_' .. i .. '_no'] = v.alarm_no
        result['cnc_alarm_' .. i .. '_type'] = v.alarm_type
    end
    result.cnc_alarm = nil
    return result
end

8.4.2.4 Expandir coordinate Array[Object] en variables normales

Convertir del siguiente formato

{
  "cnc_mecpos": [
    {
      "axis": "X",
      "value": -84.4
    },
    {
      "axis": "Y",
      "value": 2.986
    },
    {
      "axis": "Z",
      "value": -108.181
    }
  ]
}

a

{
  "cnc_mecpos_X": -84.4,
  "cnc_mecpos_Y": 2.986,
  "cnc_mecpos_Z": -108.181
}

Código

function calc()
    local result=device.current
    for i, v in ipairs(result.cnc_mecpos) do
        result['cnc_mecpos_'..v.axis]=v.value
    end
    result.cnc_mecpos=nil
    return result
end