最近做一個上位機畫圖程式,下位機采集一幀資料及深度資訊給上位機畫圖,總體思路是共用一個資料陣列,當畫圖程式滿屏得時候記錄下此時陣列得下標號,然后后面采集得資料繼續放入陣列中,從繪圖框底部繪制陣列下標號以上得資料。
//下面是主采集對話框
float arr[10000][13];//主程式使用了全域變數陣列用于所有畫圖資料
int dat_num=0; //表示采集了多少幀資料;
//主程式采集資料賦予陣列
void CoilDlg::convert_data
dbv1[12]=deep_nm; //第12位是深度資訊,前面0-11是采集得資料
for(int i=0;i<13;i++)
arr[dat_num][i]=dbv1[i]; //12位畫圖資料
//以下是單獨新建得繪圖對話框,使用了訊息機制,主對話框每采集一幀資料繪圖對話框就繪圖一次。
void Ccurve::addcurve
extern float arr[10000][13];//使用主對話框得陣列
int turn_page=0; //表示繪圖翻頁多少次
int aa=0; //表示當前頁面需要繪圖資料在陣列中得下標
W=rect1.Width(); //繪圖對話框得大小
H=rect1.Height();
for(int i=0;i<=data-aa;i++) //此處得data就是資料采集幀數dat_num;
{
(point[i]).X=(arr[data-i][j]-picline[j].return_min())/(picline[j].return_max()-picline[j].return_min())*Tite_W/6+Tite_W*(z-3)/6+left_W;
(point[i]).Y=H-(deepth-400*turn_page-arr[data-1-i][12])*H/400; //設定繪圖坐標沒問題
}
g.DrawCurve(pen,point,data-aa,1.0f); //繪圖,
//上面部分單獨運行沒有問題,可以實作正常動態畫圖。
//下面這幾句想實作翻頁功能,畫圖從對話框底部向上畫,全屏400個點,當畫到最上面得時候就再從最下面重新畫,我想記錄下該深度此時資料陣列得下標data,但是就記錄不上,一旦有這句aa=data程式就報錯;沒有這句就能正常運行,但是滿屏之后就畫不了啦
int xx=H-(deepth-400*turn_page-arr[data-1][12])*H/400; //資料在畫圖框中Y軸得像素坐標
if(xx<=H/400) //一屏畫400個點,最后一個點得坐標已經到最上面一個點得時候準備翻屏
{
turn_page++;
aa=data; //想記錄翻屏時候下標位置。后面再采集得資料繪圖就只會這個下標以上部分得資料
}
下面就是讀取陣列下標得時候深度資訊賦值出報錯問題。正常我這個是6秒采集一幀資料,不應該是訪問沖突,我都是資料放入陣列之后再發送繪圖訊息,下一次給陣列賦值是6秒后得事,怎么都應該繪圖完畢。

uj5u.com熱心網友回復:
這種一般都是陣列越界,你二維陣列中的dat_num在回圈的上面是否賦值了? 你的i,j回圈那里感覺有問題,for回圈的第一層是你的arr陣列的第一維,相當于你的page數量,第二次里面是你的當前頁的繪圖資料,i<data-aa感覺有問題~uj5u.com熱心網友回復:
目前的問題就是我不能記錄aa=data;只要有這一句哪怕把i<data-aa改成i<data都不行,只要沒有aa=data這一句程式就可以正常運行,這一句就是想記錄繪圖到頂點的時候資料下標,我想知道正常一個變化的陣列下標dat_num;使用另一個變數去記錄他某一點的下標號會受到影響嗎?。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/244055.html
標籤:C++ 語言
下一篇:求解 急拜托拜托
