10 文件读写 - 物联型

我司物联型系列的产品,内置FREERTOS系统,则在文件系统上,内部基础LUA 库里面的文件io读写,不同于M系列大彩API脚本,本文对文件读写、注意事项做相关说明,如下所示

  1. 路径说明
  2. 读文件
  3. 写文件

适用范围:物联型

例程下载链接:《物联型文件读写》(点击跳转)

​ 《物联型CSV文件读写》(点击跳转)

10.1 路径说明

屏内路径

屏幕内部可以分为A区、B区、C区,每个区作用如下所示

  1. A区:系统区,存储组态工程文件,默认值为100M(Flash大小为1Gbit)或12M(Flash 大小为128Mbit)
  2. B区:数据区,存储配置信息,记录数据、历史曲线等默认值为10M(Flash 大小为1Gbit)或1M(Flash 大小为128Mbit)
  3. C区:备份区,备份数据区域文件,如ota升级,将工程下载到C区,默认值为0,如下所示,Flash 大小为1Gbit的区域配置示意图

Wflash_attr

如上所示,关于物联型号文件读写,建议写在B区,避免破坏A区、C区文件,B区文件读写需要注意以下两点

  • 手动创建文件夹:在工程目录下创建“Public”文件夹,此文件夹表示B区,此后读写操作均在B区完成

W_creatPublic

  • 分配空间大小:在工程属性-高级设置-存储分区B(Mbyte)中,需要分配大小大于0,一般默认即可

假设对屏内的test文件读写,路径如下所示

local file_path = ‘B:/test.txt’
SD卡/U盘路径

读写SD卡或U盘里的”test.txt“文件时,应巧妙利用LUA脚本SD卡、USB插入触发的回调函数里获取盘符,如下所示

local file_path = ‘’

function  on_usb_inserted(dir)
    file_path = dir..'/'..'test.lua'
end

function  on_sd_inserted(dir)
    file_path = dir..'/'..'test.lua'
end

10.2 写文件

本例程写B区文件,SD卡/ U盘读取,更改对应文件路径即可

画面配置

按钮控件ID1:分别用于触发写文件

文本控件ID2:键盘输入数值,用于按钮按下时候写到文件里面

文本控件ID8:无实际用途,作为提示信息,在读文件过程,显示文件是否存在

Wflash_ctrlattr

LUA脚本

上电时候在on_init会调用my_read_file()读取文件;若点按钮控件ID3也会读取文件,并显示在文本控件ID4中,代码如下所示

local sc_Home = 0
local file_path =  "B:/test.txt" 

-- 自定义函数(非回调函数,可以修改)
-- info 需要写入文件的数据
function my_write_file(info)

    local wfile = io.open(file_path,"w")                    -- 以覆盖写入的方式打开文本

    if wfile ~= nil
    then
        wfile:write(info)
        set_text(sc_Home, 8, 'W : The '..file_path..' exist :'..info..' !')
    else
        set_text(sc_Home, 8, 'W :The '..file_path..': does not exist !!')
    end

    wfile:close()
end

--用户通过触摸修改控件后,执行此回调函数。
--点击按钮控件,修改文本控件、修改滑动条都会触发此事件。
function on_control_notify(screen,control,value)
    if screen == sc_Home
    then
        if control == 1 and value == 0
        then
            local write_str = get_text(sc_Home, 2)

            my_write_file(write_str)
            flush_nor()     
        ......
    end
end

10.3 读文件

本例程读取B区文件,SD卡/ U盘读取,更改对应文件路径即可

画面配置

按钮控件ID3:触发读文件动作

文本控件ID4:显示读取文件的内容

文本控件ID8:无实际用途,作为提示信息,在读文件过程,显示文件是否存在

Wflash_ctrlattr

LUA脚本

点击文本控件ID2,弹出键盘输入字符。当用户点击“W键”时候,将文件控件ID2里面的值写在txt文件里面,代码如下所示

-- 自定义函数(非回调函数,可以修改)
function my_read_file()

    local info = nil
    local rfile = io.open(file_path,"r")

    if rfile ~= nil
    then
        rfile:seek("set")
        info = rfile:read("a")
        set_text(sc_Home, 8, 'R : The '..file_path..' exist :'..info..' !')    
    else
        set_text(sc_Home, 8, 'R :The '..file_path..': does not exist !!')
    end

    rfile:close()
    return info 
end

--初始化函数
function on_init()
    my_read_file()
end

--用户通过触摸修改控件后,执行此回调函数。
--点击按钮控件,修改文本控件、修改滑动条都会触发此事件。
function on_control_notify(screen,control,value)
    if screen == sc_Home
    then
        ......
        elseif control == 3 and value == 0
        then
            local read_str = my_read_file()
            set_text(sc_Home, 4, read_str)    
        end
    end
end

运行预览

编译下载,下载到实体屏体验

results matching ""

    No results matching ""