分区
本文使用的是大彩串口屏M系列的:
串口屏内部有三个分区,分别为A、B、C三个区:
A区:系统区,存储组态工程文件
B区:数据区,存储配置信息,记录数据、历史曲线等
C区:备份区,备份数据区文件
在进行文件读写的时候,建议卸载B区,避免破坏A区、C区文件,B取文件读写需要注意以下两点:
·手动创建文件夹:在工程目录下创建"Public"文件夹,此文件夹表示B区,此后读写操作均在B区完成
分配空间大小:在工程属性-高级设置-存储分区B(Mbyte)中,需要分配大小大于0,一般默认即可。
路径
屏内文件读取
假设对屏内的test文件读写,路径如下所示
lua
local file_path = 'B:/test.txt'
SD卡/U盘路径读取
读写SD卡或U盘里的"test.txt"文件时,应巧妙利用LUA脚本SD卡、USB插入触发的回调函数里获取盘符,如下所示:
lua
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
写文件:读写屏内文件
1.创建Public文件夹,并在该文件夹中创建config.txt文件
config.txt文件中的键值对要与代码中的键值匹配,否则会导致读取异常
2.编写LUA代码
具体代码如下:
lua
local config_file_path = 'B:/config.txt'
-- 配置项
local config_table = {
device_id = "test123456",
verify_pwd = 123456,
alert_stage_1sd_duration_s = 25, -- 第一阶段时长,人员警报秒速
alert_stage_2nd_duration_s = 15, -- 第二阶段时长,关闭电磁阀秒数
is_auto_open_gas_valve = false, --人员在场是否自动打开电磁阀
is_reverse_open_gas_valve = false,--人员在场是否取反打开电磁阀
is_maintain_open_gas_valve = false,--人员在场是否持续打开电磁阀
alert_capture_duration_s = 10,
report_url = "28.19.41.69:8601/MsgPoster",
network_param = {
dhcp = 0,
ipaddr = "",
netmask = "",
gateway = "",
dns = ""
}
} -- 配置文件
-- 将当前的配置参数保存起来
function save_config_table()
local jsonStr = cjson.encode(config_table)
set_text(1,33," ")
write_file(config_file_path, jsonStr)
end
-- 加载配置文件
function load_config_table()
local config1 = read_file(config_file_path)
if config1 ~= nil then
local data1 = cjson.decode(config1)
set_text(1,33," ")
if data1 ~= nil then
config_table = data1
set_text(1,32,"Success")
return
end
end
-- 没有加载成功,将生成默认配制
config_table = {
device_id = "sfm123456",
verify_pwd = 123456,
alert_stage_1sd_duration_s = 25,
alert_stage_2nd_duration_s = 15,
alert_capture_duration_s = 12,
is_auto_open_gas_valve = false,
is_maintain_open_gas_valve = false,
is_reverse_open_gas_valve = false,
report_url = "28.19.41.69:8601/MsgPoster",
network_param = {
dhcp = 0,
ipaddr = "",
netmask = "",
gateway = "",
dns = ""
}
} -- 配置文件
set_text(1,32,"Error")
end
---输入数据
---@param file_path string 路径
---@param info string 文件内容
function write_file(file_path, info)
-- 以覆盖写入的方式打开文本
local wfile = io.open(file_path, "w")
if wfile ~= nil then
wfile:write(info)
set_text(1,33," ")
end
set_text(1,33," ")
wfile:close()
flush_nor()
end