迪文科技论坛

 找回密码
 立即注册
搜索
查看: 338|回复: 10

【开源】DWIN触摸屏实现日志记录功能

[复制链接]

8

主题

110

回帖

1628

积分

金牌会员

Rank: 6Rank: 6

积分
1628
QQ
发表于 2025-5-17 23:28:22 | 显示全部楼层 |阅读模式
本帖最后由 wolfgd 于 2025-5-17 23:37 编辑

最近项目上需要记录称量异常数据及历史故障记录,发现开发环境中没有合适的组件能方便的实现,那就自己动手...

应用的场景: 记录实时数据、记录用户操作日志、记录故障信息等场景

日志记录主要实现功能:
        1.搭建软件RTC时钟或硬件RTC时钟 RX8130
        2.LOG_MAX_MSG 配置日志最大记录数,
        3.LOG_MSG_LEN 配置单条记录最大长度
        4.初始化日志结构体,配置起始地址、间隔距离、每页显示记录条数
        5.实现插入日志记录、移动到第一页,移动到下一页,移动到上一页、移动到最后一页功能
        6.当插入记录缓冲区满时,自动剔除最老的记录,并保存新记录
开发环境
Keil C51或 TKStudio

测试环境:
智能屏: EKT043 开发板

DGUS T5L固件版本:V6.5        DWIN Tools 版本: 7.6.48

通讯配置:
通讯4 中断(bps: 115200,n,8,1)烧写口,调试口,上位机口 ModBus RTU Slave



例子工程:
源码:  


演示视频:
【迪文触摸屏实现日志记录功能】 https://www.bilibili.com/video/B ... 92cba3283b42c300dec

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

8

主题

110

回帖

1628

积分

金牌会员

Rank: 6Rank: 6

积分
1628
QQ
 楼主| 发表于 2025-5-19 14:00:17 | 显示全部楼层
源码解析
1. 地址分配说明

初始化日志函数(log.c)
void Log_Init(xLog_t *ptr,uint16_t dgus_addr,uint16_t interval,uint8_t pageSize)
初始化起始地址 0x1200,信息间隔地址0x100 每页显示5条信息
Log_Init(&logWeight,0x1200,0x100,5);

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

8

主题

110

回帖

1628

积分

金牌会员

Rank: 6Rank: 6

积分
1628
QQ
 楼主| 发表于 2025-5-19 14:12:23 | 显示全部楼层
2.插入记录,随机产生重量数据,当重量在±0.20内判为合格
//依据业务需求可重新设计函数,插入重量数值到日志缓冲区
//每条记录有多个字段信息时,也通过 sprintf 函数整理为一条文本信息进行显示。
void Log_InsertInt(xLog_t *ptr,int16_t value)
{
        float tmp;
        uint8_t flag;
        uint16_t color;
        uint8_t buff[20];
        uint8_t len;
        tmp=value;
        flag=0;
        if(value>5020) flag=1;
        if(value<4980) flag=2;
        tmp/=100;       
        switch(flag)
        {
                case 0:
                        color=0x0;
                        len=sprintf(buff,"合格: %3.2f kg",tmp);
                        break;
                case 1:
                        color=0xf800;
                        len=sprintf(buff,"超重: %3.2f kg",tmp);
                        break;
                case 2:
                        color=0x001f;
                        len=sprintf(buff,"超轻: %3.2f kg",tmp);
                        break;
        }
        Log_InsertMsg(ptr,buff,color); //添加记录到日志缓冲区
}
回复

使用道具 举报

8

主题

110

回帖

1628

积分

金牌会员

Rank: 6Rank: 6

积分
1628
QQ
 楼主| 发表于 2025-5-19 14:15:14 | 显示全部楼层
3. 调用函数显示每页数据

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

9

回帖

347

积分

中级会员

Rank: 3Rank: 3

积分
347
发表于 2025-5-20 16:32:33 | 显示全部楼层
感谢分享
回复

使用道具 举报

2

主题

10

回帖

1698

积分

金牌会员

Rank: 6Rank: 6

积分
1698
发表于 2025-5-20 20:26:19 | 显示全部楼层
多谢分享
回复

使用道具 举报

4

主题

20

回帖

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2025-6-3 23:05:09 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

4

主题

20

回帖

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2025-6-6 23:29:50 | 显示全部楼层
本帖最后由 jesen2010 于 2025-6-6 23:31 编辑

今天试了LOG DEMO,感谢LZ分享如此好的东西,DGO2框架非常NICE,对于控制modbus的设备,比如传感器什么的,都不需要额外再加MCU,直接一个屏就搞定了,第二点是uart4下载速度提高了不止一点点,LZ给我说过,试试日志DEMO,速度有提升,之前没感觉到,因为一直勾选了“兼容早期版本”,无意中把这个选项勾掉了,速度一下就起来了,现在是用的921600,下载字库都感觉很快了,只是之前用另一个屏是V65的内核,3M都可以的,但是现在这个4寸方屏,3M通信不上,不知道是不是内核不是最新的原因,明天把内核更新了再试试,再次感谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

4

主题

20

回帖

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2025-6-6 23:36:52 | 显示全部楼层
还有一个问题请教一下LZ,就是在用户操作命令中,如果0x1000 高8位不为0时,即cmd<>0,这里往串口下发数据时会根据是06还是16功能码,选择用cmd覆盖变量量的值或者插入cmd,这个考量是用在什么场景呢?
回复

使用道具 举报

8

主题

110

回帖

1628

积分

金牌会员

Rank: 6Rank: 6

积分
1628
QQ
 楼主| 发表于 2025-6-10 11:04:48 | 显示全部楼层
jesen2010 发表于 2025-6-6 23:36
还有一个问题请教一下LZ,就是在用户操作命令中,如果0x1000 高8位不为0时,即cmd0,这里往串口下发数据时会 ...

我通常只允许修改前几个数据,后续只读。当触摸屏修改参数或发送命令时,添加一个命令字,下位MCU或PLC方便识别当前发送数据是什么内容,数据验证符合,再将数据存储或判断当前系统状态是否能执行。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-6-18 21:59 , Processed in 0.032096 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表