新聞中心
最近有腳友提問,如何在Simulink中實現(xiàn)數(shù)據(jù)的實時滾動?今天借助這篇文章回答一下。

在潛江等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站建設(shè),潛江網(wǎng)站建設(shè)費用合理。
對于這個問題,用C代碼或者m語言實現(xiàn)可能大家都會,就是把數(shù)據(jù)進(jìn)行右移和賦值操作。用Simulink基本模塊搭建,以前沒有接觸過的可能會有些困難。所以,本文將介紹如何通過Simulink實現(xiàn)數(shù)據(jù)滾動。
Simulink建模思路跟C代碼實現(xiàn)的方式基本一致,也是主要分為右移、賦值兩部分,最終搭建的模塊如下圖所示。
上圖中紅框中的右移子系統(tǒng)內(nèi)部需要迭代器和分配器配合使用,如下圖所示。
迭代器用于在一個步長內(nèi)連續(xù)輸出N個數(shù)值,可用于遍訪數(shù)組內(nèi)部的數(shù)據(jù),非常適合對數(shù)組進(jìn)行索引操作,是對數(shù)組類型數(shù)據(jù)處理的神器。
分配器用于對數(shù)組進(jìn)行指定位置的數(shù)據(jù)賦值。Y0是當(dāng)前待處理數(shù)組,Idx1是數(shù)組的某一位索引,U是數(shù)組某一位具體的數(shù)值。假設(shè)Idx1=a,U=b,表達(dá)的意思就是將數(shù)組Y0的第a位數(shù)值替換為b。
所以上圖中,通過迭代器和分配器配合,在每一個仿真步長,將數(shù)組的每一位向下一位賦值,實現(xiàn)該子系統(tǒng)右移的功能。
上圖綠框中的賦值部分相對就比較簡單,只有一個分配器,即將實時刷新的值賦值到第一位,實現(xiàn)數(shù)據(jù)更新。
下面進(jìn)行簡單的仿真驗證,先進(jìn)行模塊基本設(shè)置。
這里設(shè)置滾動的數(shù)組長度為5,初始值為0,所以Delay模塊給定數(shù)組[0 0 0 0 0]。
模型中迭代器長度設(shè)置為4,因為我們只需要對數(shù)組第一位以外的進(jìn)行處理。
兩處分配器都可以設(shè)置為One-based,Index vector(port)。
實時更新的數(shù)據(jù)我們給定一個線性增長的ramp,初始值為0,斜率為1,然后進(jìn)行步長為1s的定步長仿真,結(jié)果如下圖。
從圖中可以看出:
- 初始時刻數(shù)組的第一到第五位均為0,即[0 0 0 0 0];
- 1s時,數(shù)組的第一位被刷新為1,即[1 0 0 0 0];
- 2s時,數(shù)組的第一位被刷新為2,第二位被1s時第一位的1覆蓋,即[2 1 0 0 0];
- 3s時,數(shù)組的第一位被刷新為3,第二位被2s時第一位的2覆蓋,第三位被2s時第二位的1覆蓋,即[3 2 1 0 0];
- ……
實現(xiàn)了數(shù)據(jù)的實時滾動刷新。
以上,通過Simulink的方式實現(xiàn)了數(shù)據(jù)的滾動刷新,在MBD開發(fā)過程還是有很大使用前景的。不管是車輛的能耗計算,還是動態(tài)規(guī)劃等算法的實施,你可能都會用到滾動刷新的實時數(shù)據(jù)。
分享名稱:如何通過Simulink實現(xiàn)數(shù)據(jù)滾動刷新
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/coochpe.html


咨詢
建站咨詢
