線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1621
推到 Plurk!
推到 Facebook!

如果我用二進制的方式接收串口數據,要如何將這些數據轉化成float型並存儲到數組中並繪制成 曲線?

答題得分者是:st33chen
blue36sea
一般會員


發表:13
回覆:35
積分:23
註冊:2008-10-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-10-12 16:13:59 IP:222.240.xxx.xxx 訂閱
上位機是delphi,下位機為dsp,我要發送命令如“c”給下位機,表示要下位機發送電流采樣的數據給上 位機,該數據下位機已經采集了5000個存儲在dsp的緩衝區,現在,我要將從串口接收的這些數據提取出 來,轉化成float型來存儲到數組裏,再將這些數據顯示(用tchart中的fastline顯示曲線),且從dsp傳 過來的數據是電流采樣值6.7898這樣的數據。

請問:
如果我用二進制的方式接收串口數據,要如何將這些數據轉化成float型並存儲到數組中並繪制成 曲線?(另一種方式是用文本的形式提取串口數據。)
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-10-14 15:26:32 IP:122.116.xxx.xxx 未訂閱
您好,

您的問題應可細分為二個子問題
1. 如何從 dsp 抓資料
2. 抓來的資料如何繪圖
我的想法是, 把資料 從 dsp 抓下來存成一個 database 的 table, 再用 tdbchart 抓 table 的資料繪圖 會是比較簡單的做法
所以本問題的重點應是如何從 dsp 抓資料

要請問一下, dsp 如何存放資料? (資料是否是固定長度? 若不固定, 一筆一筆間如何分隔?)

如果您已有辦法 "用文本的形式提取串口數據" 那不就用 strtofloat function 將每筆數據轉為 float 後再存在 table 就好了嗎?


===================引 用 blue36sea 文 章===================
上位機是delphi,下位機為dsp,我要發送命令如“c”給下位機,表示要下位機發送電流采樣的數據給上 位機,該數據下位機已經采集了5000個存儲在dsp的緩衝區,現在,我要將從串口接收的這些數據提取出 來,轉化成float型來存儲到數組裏,再將這些數據顯示(用tchart中的fastline顯示曲線),且從dsp傳 過來的數據是電流采樣值6.7898這樣的數據。

請問:
如果我用二進制的方式接收串口數據,要如何將這些數據轉化成float型並存儲到數組中並繪制成 曲線?(另一種方式是用文本的形式提取串口數據。)
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
blue36sea
一般會員


發表:13
回覆:35
積分:23
註冊:2008-10-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-10-15 09:19:01 IP:222.247.xxx.xxx 訂閱
因為采用文本接受的方式,下位機dsp太占資源,所以只能用二進制的方式接收dsp傳來的數據,不過dsp傳送的數據是整數,是以十六位的方式先發送低八位,再發送高八位,上位機接收到數據將其轉化為十六進制再轉化為十進制。
現在就剩編程實現了,有興趣的可以將實現程序發上來,謝謝!
===================引 用 blue36sea 文 章===================
上位機是delphi,下位機為dsp,我要發送命令如“c”給下位機,表示要下位機發送電流采樣的數據給上 位機,該數據下位機已經采集了5000個存儲在dsp的緩衝區,現在,我要將從串口接收的這些數據提取出 來,轉化成float型來存儲到數組裏,再將這些數據顯示(用tchart中的fastline顯示曲線),且從dsp傳 過來的數據是電流采樣值6.7898這樣的數據。

請問:
如果我用二進制的方式接收串口數據,要如何將這些數據轉化成float型並存儲到數組中並繪制成 曲線?(另一種方式是用文本的形式提取串口數據。)
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-10-15 16:15:38 IP:122.116.xxx.xxx 未訂閱
假設
1. var astr, bstr : string; ii : integer;
2. 收到的低八位放在 astr, 高八位放在 bstr
試一下
ii := ord(astr[1]) 256*ord(bstr[1]);
得一個數據.

如果 ok
請自行寫一個 loop 去處理所有數據.




===================引 用 blue36sea 文 章===================
因為采用文本接受的方式,下位機dsp太占資源,所以只能用二進制的方式接收dsp傳來的數據,不過dsp傳送的數據是整數,是以十六位的方式先發送低八位,再發送高八位,上位機接收到數據將其轉化為十六進制再轉化為十進制。
現在就剩編程實現了,有興趣的可以將實現程序發上來,謝謝!
===================引 用 blue36sea 文 章===================
上位機是delphi,下位機為dsp,我要發送命令如“c”給下位機,表示要下位機發送電流采樣的數據給上 位機,該數據下位機已經采集了5000個存儲在dsp的緩衝區,現在,我要將從串口接收的這些數據提取出 來,轉化成float型來存儲到數組裏,再將這些數據顯示(用tchart中的fastline顯示曲線),且從dsp傳 過來的數據是電流采樣值6.7898這樣的數據。

請問:
如果我用二進制的方式接收串口數據,要如何將這些數據轉化成float型並存儲到數組中並繪制成 曲線?(另一種方式是用文本的形式提取串口數據。)
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
blue36sea
一般會員


發表:13
回覆:35
積分:23
註冊:2008-10-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-10-16 21:17:58 IP:222.247.xxx.xxx 訂閱
數據轉化成十進制後存在數組中,我要將這些數據繪制成實時曲線,用tchart中的fastline繪制,要看到它的動態效果,請問要怎麽編程實現啊?或者還有更好的方法實現動態曲線?謝謝!
st33chen
尊榮會員


發表:15
回覆:591
積分:1201
註冊:2005-09-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-10-18 08:58:53 IP:122.116.xxx.xxx 未訂閱
您好,

没人回答的話, 可否想一下我的想法,

我曾用 java 繪圖, 不曾用 delphi 去繪圖, 所以不知 delphi 有無其他元件可做動態曲線.
如果您的 動態曲線 是畫一個點後等數秒後再畫第二點並形成一條線段, 再等數秒後再畫第三點形成第二條線段, 以此類推...
那可不可以用 timer 元件, 故定隔數秒餵入一個數据到 繪圖元件並 refresh 該繪圖元件?


===================引 用 blue36sea 文 章===================
數據轉化成十進制後存在數組中,我要將這些數據繪制成實時曲線,用tchart中的fastline繪制,要看到它的動態效果,請問要怎麽編程實現啊?或者還有更好的方法實現動態曲線?謝謝!
------
IS IT WHAT IT IS
我是 李慕白 請倒著唸.
又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦);
都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2008-10-18 09:00:48, 註解 無‧
blue36sea
一般會員


發表:13
回覆:35
積分:23
註冊:2008-10-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-10-20 17:19:28 IP:222.247.xxx.xxx 訂閱
可以采用延時函數,或者定時器timer來實現,每畫一個點就延時或者觸發定時器一次。本問題已結案。
編輯記錄
blue36sea 重新編輯於 2008-10-20 17:21:48, 註解 無‧
系統時間:2024-05-07 13:01:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!