单片机/MCUwilliam hill官网
直播中

10.01

9年用户 10经验值
擅长:嵌入式技术
私信 关注
[问答]

单片机将故障信息存入EEPROM

最近在做一个单片机系统,系统根据外部条件触发故障,然后将故障发生时的时间和故障类型保存在EEPROM中,上位机端可以通过命令读取历史的故障信息,关于存储信息有没有好的方法,以前没有做过关于这方面,在网上搜也没有搜到,目前一点头绪都没有,求大神给个思路!!
已退回5积分

回帖(15)

lll

2017-8-15 18:57:08
感觉打开了新思路
举报

hello_mcu

2017-8-16 06:44:06
讨论下,思路大概是:
1、程序正常运行-外部触发-启动故障信息记录-操作E2PROM-将信息写入E2PROM;
   上位机读取的顺序是:发送一个指令给单片机,告诉它我要读故障信息;单片机收到后,读取E2PROM,读取故障信息,再通过通信接口给上位机。

楼主没头绪,可以一步步来。
1、E2PROM的驱动做好了吗,能正常读写E2PROM吗,这是首先要实现的。
2、E2PROM搞定了,处理故障触发。外部什么条件输入,会触发故障,建议用标志位来做,在循环中查询这个标志位,一旦置位,就去写故障信息。
3、上位机与单片机的通信接口定了吗?是RS232/485/USB/RJ45/无线?选择一种通信接口,然后就是搞定这个通信接口的驱动,对上位机能正常收发数据。
4、制定通信协议。上位机发什么指令给单片机,单片机会认为这是要读故障信息呢;再具体点,故障信息很多条,上位机发送什么指令表明是读哪一条故障信息;单片机每发一次故障信息,上位机是否要进行确认反馈,以提高可靠性。这就是所谓的通信协议,也要先制定好。
做完以上,大概就能出来了。
举报

10.01

2017-8-16 09:43:33
引用: hello_mcu 发表于 2017-8-16 06:44
讨论下,思路大概是:
1、程序正常运行-外部触发-启动故障信息记录-操作E2PROM-将信息写入E2PROM;
   上位机读取的顺序是:发送一个指令给单片机,告诉它我要读故障信息;单片机收到后,读取E2PROM,读取故障信息,再通过通信接口给上位机。

目前EEPROM驱动OK、通信接口OK、通信协议OK。
主要是存储的结构,还有存储的方式,故障信息存储形式故障码+时间,当上位机接入后,通过上位机的读取命令可以读到EEPROM中存储的最近100条数据,因为EEPROM毕竟容量小,如果一直存会很快就满了,所以只存最近的100条。
但是这样就会有个问题,存储的时候,使用固定大小的EEPROM空间该怎样实现一个先进先出的结构,还是说在系统上电的时候做一个数据结构存储故障信息,在系统下电的时候,将这个结构直接存入EEPROM,在下次上电时在读取出来。
目前我的两种思路(不知道是不是正确):
1.在出现故障时,将标志位置位,存贮时间+故障码,记录存储单元的首地址和结束地址,通过地址确定存入数据条数,如果超出就将下条数据存入首地址,类似一个循环队列
2.在系统中做这样一个结构,在系统上电运行中存储,下电写入EEPROM,上电是读出

不知道对不对,水平有点渣,还望多多指正,谢谢

还有就是有没有一些常用的存储和读取历史数据的方法或结构,推荐参考下
举报

hello_mcu

2017-8-16 21:55:04
引用: 10.01 发表于 2017-8-16 09:43
目前EEPROM驱动OK、通信接口OK、通信协议OK。
主要是存储的结构,还有存储的方式,故障信息存储形式故障码+时间,当上位机接入后,通过上位机的读取命令可以读到EEPROM中存储的最近100条数据,因为EEPROM毕竟容量小,如果一直存会很快就满了,所以只存最近的100条。
但是这样就会有个问题,存储的时候,使用固定大小的EEP ...

恩,后来我回复完了,也觉得不在于驱动、通信了,应该就是存储结构和数据结构的设计问题。
存储结构都是按照实际应用来设计的。
1、我感觉第一条思路好。就是存时间+故障代码。每个故障代码对应的故障详情可以在上位机中查询。E2PROM只能保存100条,那每到90条或者95条,可以由单片机设备主动上送一条命令,请求上位机读取故障信息。全部读完后,全部清掉,接着写后续的故障信息。
      或者就每天都主动读一回故障信息,也不用考虑结束地址、第多少条了,这样更简单点。
这是我的理解,因为不知道楼主是不是单片机设备具体什么功能,所以根据感觉讨论下。
举报

lee_st

2017-8-17 09:34:56
儿科的知识了哦,
举报

lee_st

2017-8-17 09:35:15
i2c的接口eeprom吗?
举报

lee_st

2017-8-17 09:35:31
实时存储即可啊,
举报

lee_st

2017-8-17 09:35:46
没有那么复杂的啊,
举报

10.01

2017-8-17 09:52:26
引用: lee_st 发表于 2017-8-17 09:35
实时存储即可啊,

如果存储数据100条,如何保证这100条数据是最新的记录呢??
举报

lee_st

2017-8-18 09:39:19
循环存储啊,很简单的
举报

lee_st

2017-8-18 09:39:56
搞几个记录序号的变量即可
举报

lee_st

2017-8-18 09:40:16
简单到不能再简单了
举报

lee_st

2017-8-18 09:40:31
侬说是不是这样啊
举报

lee_st

2017-8-18 09:40:46
兄弟,加油啊,自己好好搞
举报

lee_st

2017-8-18 09:41:07
多总结,多分析即可,
举报

更多回帖

发帖
×
20
完善资料,
赚取积分