泓格7188E使用MODBUS的SDK,软件狗重启如何保持数据 点击:696 | 回复:4



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2006-07-12 14:02:00
楼主
泓格7188E使用MODBUS的SDK,软件狗重启如何保持数据
使用泓格7188E自带MODBUS的SDK开发程序时发现,如果软件狗重启,iMemory_AI[]等数据全部清0了,这就失去软件狗的意义了,无法恢复现场,现场数据很大,有几百K。如何才能保持数据啊



12315

  • 精华:0帖
  • 求助:0帖
  • 帖子:8帖 | 143回
  • 年度积分:0
  • 历史总积分:173
  • 注册:2004年9月09日
发表于:2006-07-12 14:20:00
1楼
那么只能把数据先存储到flash上了。

MiniOS7_2.0

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 8回
  • 年度积分:0
  • 历史总积分:11
  • 注册:2004年4月23日
发表于:2006-07-14 10:22:00
2楼
存到 falsh 比較不好用,畢竟速度慢而且有寫入次數的限制。
如果沒斷電,只是被  WDT reset,在記憶體裡頭的DATA應該還在,所以只要把DATA存放的位置固定下來,再加上判斷是不是 power on reset,如果不是就不要把 DATA 設為 0。
以後 7186E 會有一個版本可以加裝 128K 的 FRAM,即使斷電 DATA 一樣還在,那時候會更好用。

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2006-07-14 11:51:00
3楼
在 CD:\Napdos\7188xabc\7188xb\demo\bc_tc\memory\top_mem 中
可以找到使用AllocateTopMemory() 的範例。
 
Modbus lib ,請使用 1.6.6 版的。
參考 MBDemo00,將程式最開頭宣告的 
ftp://ftp.icpdas.com/pub/cd/8000cd/napdos/modbus/7188e/demo/
 
//The I/O memory mapping         
unsigned char far iMemory_DI[100];
unsigned char far iMemory_DO[100];
int far iMemory_AI[100];
int far iMemory_AO[100]; 
 
改成用 AllocateTopMemory 來宣告即可。
unsigned char far *iMemory_DI=AllocateTopMemory(100);
unsigned char far *iMemory_DO=AllocateTopMemory(100);
int far *iMemory_AI=AllocateTopMemory(100);
int far *iMemory_AO=AllocateTopMemory(100);
 
再搭配 IsResetByPowerOn 來判斷是不是要給初始值 (0) 即可。

GaryLin

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 1186回
  • 年度积分:0
  • 历史总积分:1263
  • 注册:2003年4月15日
发表于:2006-07-14 13:10:00
4楼
在 CD:\Napdos\7188xabc\7188xb\demo\bc_tc\memory\top_mem 中
可以找到使用AllocateTopMemory() 的範例。
 
Modbus lib ,請用 1.6.6 版的。
參考 MBDemo00,將程式最開頭宣告的 
    ftp://ftp.icpdas.com/pub/cd/8000cd/napdos/modbus/7188e/demo/
 
//The I/O memory mapping         
unsigned char far iMemory_DI[100];
unsigned char far iMemory_DO[100];
int far iMemory_AI[100];
int far iMemory_AO[100]; 
 
改成用 AllocateTopMemory 來宣告即可。
unsigned char far *iMemory_DI=AllocateTopMemory(100);
unsigned char far *iMemory_DO=AllocateTopMemory(100);
int far *iMemory_AI=AllocateTopMemory(100);
int far *iMemory_AO=AllocateTopMemory(100);
 
再搭配 IsResetByPowerOn 來判斷是不是要給初始值 (0) 即可。

热门招聘
相关主题

官方公众号

智造工程师