現(xiàn)場設備運行過程中有時候我們需要更改在線數(shù)據(jù)塊的結構(比如增加一些變量),但是如果直接更改數(shù)據(jù)塊并下載會導致其重新初始化。這意味著CPU會將數(shù)據(jù)塊中變量的實際值用初始值替換,將會導致實際數(shù)據(jù)的丟失,甚至引起設備故障。一種變通的方法是:使用快照先將實際值保存到初始值,然后盡快修改下載。這種方法只適用于實際值短時間變化影響不大的情況。有沒有一種方法既能更改在線數(shù)據(jù)塊的結構,又不引起數(shù)據(jù)塊重新初始化呢?答案是:有的。下面我來詳細介紹下。本文包括如下幾個主題:
結構性更改;
下載但不重新初始化的工作原理;
重置預留存儲區(qū)
1、結構性更改
默認情況下,數(shù)據(jù)塊的結構性更改會導致其下載時重新初始化。
數(shù)據(jù)塊的結構性更改包括:
①其中變量名稱的更改;
②其中變量的增加或刪除;
③其中變量保持特性的更改;
從上面描述來看,我們在數(shù)據(jù)塊中增加變量屬于結構性更改,怎樣使其不重新初始化呢?這需要使用數(shù)據(jù)塊的一個屬性——預留存儲區(qū)。
注①:初始值修改不屬于結構性更改,因此下載時不會引起數(shù)據(jù)塊重新初始化。
注②:這里的數(shù)據(jù)塊既可以是全局數(shù)據(jù)塊,也可以是函數(shù)塊的背景數(shù)據(jù)塊。
2、數(shù)據(jù)塊下載但不重新初始化的工作原理
首先,只有“優(yōu)化的塊”才支持該功能。勾選“優(yōu)化的塊訪問”屬性的數(shù)據(jù)塊或函數(shù)塊默認有一個預留存儲區(qū),激活該預留區(qū)后,后續(xù)聲明的變量/參數(shù)都存放在該區(qū)域中。
選中數(shù)據(jù)塊,右鍵單擊,選擇【屬性】菜單,可以看到“優(yōu)化的塊訪問”選項,如下圖所示:
在上述屬性對話框中,單擊【下載但不重新初始化】。勾選【啟用下載,但不重新初始化變量】便啟用該功能。在【存儲器預留區(qū)域】中設置預留存儲區(qū)的大小,比如100字節(jié);在【預留可保持型存儲器】中設置保持型存儲器的大小,如下圖所示:
設置完成后單擊【確定】,該數(shù)據(jù)塊便有了設定大小的預留存儲區(qū),但尚未激活。在未激活的情況下,往數(shù)據(jù)塊中添加的變量仍存放在默認存儲區(qū)。如果進行了結構性更改,則下載時仍會提示需要重新初始化。
那么怎樣激活呢?
打開數(shù)據(jù)塊,在其上方有一個紅色的、激活預留存儲區(qū)的按鈕,如下圖所示:
單擊該按鈕會彈出一個對話框:
單擊【確定】后,再次往數(shù)據(jù)塊中添加的變量,都存放在預留存儲區(qū)中。此時下載不會再提示需要重新初始化。
3、重置預留存儲區(qū)
隨著變量的添加,預留存儲區(qū)會越來越小。在【下載但不重新初始化】頁面可以查看剩余的存儲區(qū)字節(jié)數(shù)。若項目已經(jīng)階段性完成,可以在適當?shù)臅r候將預留存儲區(qū)的數(shù)據(jù)集成到常規(guī)存儲區(qū),以清空預留存儲區(qū)便于后續(xù)使用。此時可以選中數(shù)據(jù)塊并單擊右鍵,在彈出的對話框中選擇【編譯】→【軟件(復位存儲器預留區(qū)域)】,如下圖所示:
系統(tǒng)會提示下載時需要重新初始化,單擊【確定】,完成重置,此時預留存儲區(qū)的可使用字節(jié)數(shù)恢復成設定值。
審核編輯:劉清
-
存儲器
+關注
關注
38文章
7653瀏覽量
167460 -
cpu
+關注
關注
68文章
11080瀏覽量
217155
原文標題:怎樣在博途環(huán)境下載但不重新初始化數(shù)據(jù)塊?
文章出處:【微信號:方正智芯,微信公眾號:方正智芯】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
定義IO初始化結構體
IM 系列設備過載保護機制下界面初始化中斷的底層邏輯與解決方案
使用jlink連接mcu查看日志,偶發(fā)重新初始化,部分線程未退出,變量錯位怎么解決?
STM32CubeMX用于STM32配置和初始化C代碼生成
EE-359:ADSP-CM40x啟動時間優(yōu)化和器件初始化

EE-88:使用21xx編譯器在C中初始化變量

LDC1614在使用過程中,ldc的數(shù)據(jù)會突然全變成0,并且只能復位重新初始化才會恢復,為什么?
OMAP5912多媒體處理器初始化參考指南

STM32F407 MCU使用SD NAND?不斷電初始化失效解決方案

評論