2013-05-01 523 views
1

情况:Lua脚本错误

我想要保存某个文件中的传感器值的数据记录。

代码是..

--Header file 
require("TIMER") 
require("IPBOX") 
require("ANALOG_IN") 
require("LOG") 

function OnExit() 
print("Exit code...do something") 
end 

function main() 
timer = "Timer" 
local analogsensor_1 = "AIR_1" 
local analogsensor_2 = "AIR_2" 
local timestr = os.data("%Y-%m-%d %H:%M:%S") 


-- open the file for writing binary data 
local filehandle = io.open("collection_of_data.txt", "a") 


while true do 
    valueOfSensor_1 = ANALOG_IN.readAnalogIn(analogsensor_1); 
    valueOfSensor_2 = ANALOG_IN.readAnalogIn(analogsensor_2); 

    if (valueOfSensor_1 > 0 and valueOfSensor_2 > 0) then 

     -- save values of sensors   
     filehandle:write(timestr, " -The Value of the Sensors: ", tostring(valueOfSensor_1), tostring(valueOfSensor_2)"\n"); 

     -- save values using rolling log appender:   
     LOG.log_event(ScenarioLoggerDevicenameInDeviceList, " -The Value of the Sensors: ", tostring(valueOfSensor_1), tostring(valueOfSensor_2), "any other string you wish to add", "etc", "etc") 
     LOG.log_event(ScenarioLoggerDevicenameInDeviceList, " -The Value of the Sensors: ", tostring(valueOfSensor_1)) 
     print("Hello3"..valueOfSensor_1) 
    end 

TIMER.sleep(timer,500) 
end 

-- close the file 
filehandle:close() 

end 

print("start main") 
main() 

在这一行:

filehandle:write(timestr, " -The Value of the Sensors: ", tostring(valueOfSensor_1), tostring(valueOfSensor_2)"\n"); 

我得到一个错误:

"attemp to index global 'filehandle' (a nil value)" 

我怎样才能解决这个问题?

回答

2

io.open返回nil如果无法打开文件。这可能是由于“文件未找到”,“权限被拒绝”以及其他原因。要找出问题,io.open有第二个返回值,它可以让你检查错误(实际上,它甚至会返回第三个值,这是一个错误代码整数 - 但其含义与系统有关)。

变化:

local filehandle = io.open("collection_of_data.txt", "a") 

local filehandle, message = io.open("collection_of_data.txt", "a") 
if not filehandle then 
    print(message) 
end 

您也可以使用下面的Lua成语:

local filehandle = assert(io.open("collection_of_data.txt", "a")) 

这也将这样做。如果assert的第一个参数是nil,则会打印第二个参数(第二个返回值为io.open)。如果第一个参数不是nil,它将被简单地返回。