Lua脚本 - 编码场景

时间:2013-04-29 11:23:59

标签: scripting lua scenarios

情况:

有两个传感器,我想在某个文件中保存每个传感器的值数据。但它不起作用。我正在使用linux系统,文件仍然是空的。 我的代码出了什么问题?有什么建议吗?

我的代码是:

--Header file

require("TIMER")
require("TIMESTAMP")
require("ANALOG_IN")

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");

       end

       TIMER.sleep(timer,500)
    end

    -- close the file
    filehandle:close()

end 

print("start main")
main()

2 个答案:

答案 0 :(得分:1)

我不知道这个libs究竟做了什么。 但是这段代码不正确; 1)你没有关闭while声明。 如果在实际代码中你在文件句柄之前关闭它:close()然后尝试调用filehandle:flush() 2)你忘了逗号: filehandle:write(timestr,“ - 传感器的值:”,tostring(valueOfSensor_1),tostring(valueOfSensor_2)“\ n”) (它应该像attemt那样调用一个数字值)。 3)尝试打印valueOfSensor_1和valueOfSensor_2值。可能没有数据。

答案 1 :(得分:1)

除了@moteus指出的错别字,不应该这样:

    if (valueOfSensor_1 and valueOfSensor_2 > 0) then

是这样的吗?

    if (valueOfSensor_1 > 0 and valueOfSensor_2 > 0) then

修改 ,以回应您对其他答案的评论:

  

仍然是错误..它说“尝试调用字段'数据'(零值)

如果没有堆栈跟踪,我无法确定,但最有可能的是,ANALOG_IN库代码中发生了一些不好的事情。您可能没有正确使用它。

尝试转变:

    valueOfSensor_1 = ANALOG_IN.readAnalogIn(analogsensor_1);
    valueOfSensor_2 = ANALOG_IN.readAnalogIn(analogsensor_2);

进入这个:

    success, valueOfSensor_1 = pcall(ANALOG_IN.readAnalogIn, analogsensor_1);
    if not success then 
        print("Warning: error reading the value of sensor 1:\n"..valueOfSensor_1)
        valueOfSensor_1 = 0
    end

    success, valueOfSensor_2 = pcall(ANALOG_IN.readAnalogIn, analogsensor_2);
    if not success then
        print("Warning: error reading the value of sensor 2:\n"..valueOfSensor_2)
        valueOfSensor_2 = 0
    end

如果ANALOG_IN中的失败不是系统性的,它将解决它。如果系统调用失败,您将收到一个巨大的警告日志,并且会显示空的collection_of_data.txt

请注意ANALOG_IN不是标准的Lua库。您应该检查其文档,并注意其使用的详细信息。