前言
实现类似日志一样,记录信息的功能,类似下图一样。
准备工作
1、确定数据的存储形式。
2、规划信息要存储在EEPROM的位置,以及最多可以存储条信息,类似下图。
建议:
- 最好是让存储空间连续,方便遍历。比如让每一条信息存储所用的字节数为8或者其他。
- 建议信息的时间使用类似时间戳的形式存储,信息内容使用数字或者位来表示对应的内容。如下图,时间的存储分为了三个部分,年存储为数字年,月和日存储为月1000+日,时和分存储为时100+分。
- 如果使用字符串的话,注意有一个"0/“也是占一个字节的。意思就是如果你要存储的字符串是4个字节的,但实际要加上"0/”,也就是5个字节。
开始操作
1、创建页面
2、功能代码
数据处理
代码:
//*******************************************************************************
// 数据处理
//******************************************************************************/
//
// 记录故障
temp_4.val=0
while(temp_4.val<=26)
{
substr old_info_temp.txt,temp_strs.txt,temp_4.val,1
if(temp_strs.txt=="1")
{
temp_1.val=temp_4.val
click alarm_save,1 // 保存故障信息
}
temp_4.val++
}
//
// 记录告警
temp_4.val=32
while(temp_4.val<=57)
{
substr old_info_temp.txt,temp_strs.txt,temp_4.val,1
if(temp_strs.txt=="1")
{
temp_1.val=temp_4.val
click alarm_save,1 // 保存告警信息
}
temp_4.val++
}
保存数据
代码:
//*******************************************************************************
// 故障和告警信息保存
// 数据写入的形式:
// 年月*1000日时*100分告警 如2024/06/03 12:00存储为2024060031200
//******************************************************************************/
temp_2.val=0
if(temp_1.val<=26) // 故障
{
if(gFaultNum.val!=10)
{
gFaultNum.val++
}
substr Loading.FaultTemp.txt,temp_strs.txt,0,4 // 第一个位置
covx temp_strs.txt,temp_3.val,0,0
if(temp_strs.txt==""||temp_3.val==0) // 第一个位置没有存储有效的时间数据
{
click alarm_save,0
covx temp_1.val,temp_strs.txt,0,0
if(temp_1.val<10)
{
temp_time.txt+="0"+temp_strs.txt
}else
{
temp_time.txt+=temp_strs.txt
}
Loading.FaultTemp.txt=temp_time.txt
}else // 第一个位置已经被写入数据,需要将数据向后移动
{
click alarm_save,0
covx temp_1.val,temp_strs.txt,0,0 // 需要被添加的数据
if(temp_1.val<10)
{
temp_time.txt+="0"+temp_strs.txt
}else
{
temp_time.txt+=temp_strs.txt
}
//
substr FaultTemp.txt,AFTemp.txt,0,144
FaultTemp.txt=temp_time.txt+AFTemp.txt // 更新数据
}
//
}else // 告警
{
if(gAlarmNum.val!=10)
{
gAlarmNum.val++
}
substr Loading.AlarmTemp.txt,temp_strs.txt,0,4 // 第一个位置
covx temp_strs.txt,temp_3.val,0,0
if(temp_strs.txt==""||temp_3.val==0) // 第一个位置没有存储有效的时间数据
{
click alarm_save,0
covx temp_1.val,temp_strs.txt,0,0
temp_time.txt+=temp_strs.txt
Loading.AlarmTemp.txt=temp_time.txt
}else // 第一个位置已经被写入数据,需要将数据向后移动
{
click alarm_save,0
covx temp_1.val,temp_strs.txt,0,0
temp_time.txt+=temp_strs.txt // 需要被添加的数据
//
substr Loading.AlarmTemp.txt,AFTemp.txt,0,144
Loading.AlarmTemp.txt=temp_time.txt+AFTemp.txt // 更新数据
}
}
时间处理
比如“2024/02/01 12:05”转换为三部分,第一部分是2024 ,第二部分是02001,第三部分是1205
代码:
//*******************************************************************************
// 告警和故障时间
//******************************************************************************/
// 年
covx rtc0,temp_strs.txt,0,0
temp_time.txt=temp_strs.txt
//月*1000+日
temp_3.val=rtc1
temp_3.val*=1000
temp_3.val+=rtc2
covx temp_3.val,temp_strs.txt,0,0
strlen temp_strs.txt,temp_3.val
if(temp_3.val==5)
{
temp_time.txt+=temp_strs.txt
}else
{
temp_time.txt+="0"+temp_strs.txt
}
// 时*100+分
temp_3.val=rtc3
temp_3.val*=100
temp_3.val+=rtc4
covx temp_3.val,temp_strs.txt,0,0
strlen temp_strs.txt,temp_3.val
if(temp_3.val==4)
{
temp_time.txt+=temp_strs.txt
}else
{
temp_time.txt+="0"+temp_strs.txt
}
离开当前页面存储数据到EEPROM功能
代码:
//*******************************************************************************
// 保存故障和告警数据
//******************************************************************************/
//
// 保存故障和告警数量
wepo gFaultNum.val,692
wepo gAlarmNum.val,688
//
// 故障
if(Loading.FaultTemp.txt!="")
{
temp_1.val=0
temp_2.val=0
temp_3.val=864 // 故障开始位置
while(temp_2.val==0&&temp_1.val<=135)
{
substr Loading.FaultTemp.txt,temp_strs.txt,temp_1.val,4
if(temp_strs.txt=="") // 无效的数据
{
temp_2.val=1
}else
{
substr Loading.FaultTemp.txt,temp_strs.txt,temp_1.val,15
// 年
substr temp_strs.txt,temp_time.txt,0,4
covx temp_time.txt,temp_4.val,0,0
wepo temp_4.val,temp_3.val
// 月 日
temp_3.val+=4
substr temp_strs.txt,temp_time.txt,4,5
covx temp_time.txt,temp_4.val,0,0
wepo temp_4.val,temp_3.val
// 时 分
temp_3.val+=4
substr temp_strs.txt,temp_time.txt,9,4
covx temp_time.txt,temp_4.val,0,0
wepo temp_4.val,temp_3.val
// 故障
temp_3.val+=4
substr temp_strs.txt,temp_time.txt,13,2
covx temp_time.txt,temp_4.val,0,0
wepo temp_4.val,temp_3.val
temp_3.val+=4
}
temp_1.val+=15
}
}
//
// 告警
if(Loading.AlarmTemp.txt!="")
{
temp_1.val=0
temp_2.val=0
temp_3.val=704 // 告警开始位置
while(temp_2.val==0&&temp_1.val<=135)
{
substr Loading.AlarmTemp.txt,temp_strs.txt,temp_1.val,4
if(temp_strs.txt=="") // 有无效的数据
{
temp_2.val=1
}else
{
substr Loading.AlarmTemp.txt,temp_strs.txt,temp_1.val,15
// 年
substr temp_strs.txt,temp_time.txt,0,4
covx temp_time.txt,temp_4.val,0,0
wepo temp_4.val,temp_3.val
// 月 日
temp_3.val+=4
substr temp_strs.txt,temp_time.txt,4,5
covx temp_time.txt,temp_4.val,0,0
wepo temp_4.val,temp_3.val
// 时 分
temp_3.val+=4
substr temp_strs.txt,temp_time.txt,9,4
covx temp_time.txt,temp_4.val,0,0
wepo temp_4.val,temp_3.val
// 故障
temp_3.val+=4
substr temp_strs.txt,temp_time.txt,13,2
covx temp_time.txt,temp_4.val,0,0
wepo temp_4.val,temp_3.val
temp_3.val+=4
}
temp_1.val+=15
}
}
显示页面显示数据
这里就不作什么说明了,稍后将工程直接上传。可以直接查看工程
实际效果
工程
如果需要下载工程,工程在文章顶部。