10 文件读写 - 物联型
我司物联型系列的产品,内置FREERTOS系统,则在文件系统上,内部基础LUA 库里面的文件io读写,不同于M系列大彩API脚本,本文对文件读写、注意事项做相关说明,如下所示
- 路径说明
- 读文件
- 写文件
适用范围:物联型
例程下载链接:《物联型文件读写》(点击跳转)
例程下载链接:《物联型CSV文件读写》(点击跳转)
10.1 路径说明
屏内路径
屏幕内部可以分为A区、B区、C区,每个区作用如下所示
- A区:系统区,存储组态工程文件,默认值为100M(Flash大小为1Gbit)或12M(Flash 大小为128Mbit)
- B区:数据区,存储配置信息,记录数据、历史曲线等默认值为10M(Flash 大小为1Gbit)或1M(Flash 大小为128Mbit)
- C区:备份区,备份数据区域文件,如ota升级,将工程下载到C区,默认值为0,如下所示,Flash 大小为1Gbit的区域配置示意图
如上所示,关于物联型号文件读写,建议写在B区,避免破坏A区、C区文件,B区文件读写需要注意以下两点
- 手动创建文件夹:在工程目录下创建“Public”文件夹,此文件夹表示B区,此后读写操作均在B区完成
- 分配空间大小:在工程属性-高级设置-存储分区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.txt'
end
function on_sd_inserted(dir)
file_path = dir..'/'..'test.txt'
end
10.2 写文件
本例程写B区文件,SD卡/ U盘读取,更改对应文件路径即可
画面配置
按钮控件ID1:分别用于触发写文件
文本控件ID2:键盘输入数值,用于按钮按下时候写到文件里面
文本控件ID8:无实际用途,作为提示信息,在读文件过程,显示文件是否存在
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:无实际用途,作为提示信息,在读文件过程,显示文件是否存在
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
运行预览
编译下载,下载到实体屏体验