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

有關RS232與BCB

尚未結案
lvzhong1
一般會員


發表:29
回覆:18
積分:9
註冊:2007-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-01-26 18:50:15 IP:140.124.xxx.xxx 訂閱
我現在晶片透過RS232傳值到BCB~
傳值的格式:$1234! (連續傳送數值會變)
起始 數值 結束
那我BCB上面我要如何顯示 中間的值(1234),顯示在Edit上,可以顯示後我就會用Chart畫波形圖

我想了很久我是不是要先用Buf.Length()先看Buf中有多少個字串在一個一個存起來~
在取我想要的~但我始終程式寫不出來~
所以想請教各位前輩~可否幫我想一下~有疑問我在PO出來~謝謝^^
CoffeeX
中階會員


發表:18
回覆:121
積分:72
註冊:2005-02-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-30 11:27:38 IP:140.125.xxx.xxx 訂閱
<textarea class="cpp" rows="10" cols="60" name="code"> AnsiString GetAnsi; int NumCount; double *dArray; GetAnsi = "$1234!"; GetAnsi = GetAnsi.SubString(1,GetAnsi.Length-1); NumCount = GetAnsi.Length; dArray = new double[NumCount]; for(int i = 0;i < NumCount; i ) { dArray[i] = StrToInt(GetAnsi[i]); } Series1->AddArray(dArray,NumCount); </textarea>
未測試!應該稍為修改就能用了,new的請自行delete...
------
=.=???
lvzhong1
一般會員


發表:29
回覆:18
積分:9
註冊:2007-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-31 13:42:23 IP:140.124.xxx.xxx 訂閱
CoffeeX前輩你好:
如果說 GetAnsi = "$1234!"; 這個部分不是定值,而是要看我晶片中所算出來的值
在經由RS232傳至Buf那我要如何做修改呢?
其他部分因該沒問題~
謝謝~可以在教我一下要如何修改...感謝

CoffeeX
中階會員


發表:18
回覆:121
積分:72
註冊:2005-02-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-31 16:40:09 IP:140.125.xxx.xxx 訂閱
參考看看吧

不太確定你所謂的不是定值,可舉例嗎?是沒有$ 與!作為開始與結束或...?
還是這樣的問題: AnsiString MyAnsi(YourBuffer);//輸入為char或string...
程式碼:
<textarea class="cpp" rows="10" cols="60" name="code"> int First; int End; int CutCount; AnsiString MyAnsi = "$1234567!"; AnsiString TmpAnsi; First = MyAnsi.Pos("$"); End = MyAnsi.Pos("!"); CutCount = End - First -1; TmpAnsi = MyAnsi.SubString(First 1,CutCount); </textarea>

------
=.=???
lvzhong1
一般會員


發表:29
回覆:18
積分:9
註冊:2007-01-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-31 19:35:47 IP:140.124.xxx.xxx 訂閱
CoffeeX前輩你好:
抱歉!!我說的不是很明白
因為我單片會一直傳送數值(身體上量到的訊號),透過RS232一直傳至BCB(會顯示波形,像心電圖這樣)
我傳送的格式 $數值!$數值!$數值!$數值!$數值!$數值!$數值!$數值!$數值!......................這樣一直傳(中間的數值會看身體上的變化而定)
那我所要擷取的部分是中間那個數值
(小新手)謝謝~

CoffeeX
中階會員


發表:18
回覆:121
積分:72
註冊:2005-02-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-01-31 20:04:34 IP:140.125.xxx.xxx 訂閱
能否指出你收到的單筆資料example,
如:$123456!$123,456! 或 $,1,2... 或 $123!,$123456!

如果是一個值一個值接到,
你可以用AnsiCompareIC("$")與AnsiCompareIC("!")
每當接到"!"後則將整個ansi匯出畫出圖,再清空
之後就重新產生一個ansi
MyAnsi = TmpAnsi;直到"!"出現

如果是"好幾段"($..!$...!$...!)一起接到就採用已提及之方法,取出第一段之$!,之後把此段Ansi移除後在繼續下一個$!直到Ansi空掉
------
=.=???
lvzhong1
一般會員


發表:29
回覆:18
積分:9
註冊:2007-01-23

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-31 20:45:33 IP:140.124.xxx.xxx 訂閱
CoffeeX前輩你好:
以下是我用終端機用出來的數值
中間那些數值就是我想要顯示在圖上的數據~(圖1)
我是用BCB中的Tcomm元件
-------------------------------------------------------------------------------------------------------------------------------------
我大概可以把數值給取出來了,但是發現有時候數值會lose,可以有時候又不會,是程式有問題嗎?
(感覺上正常如圖2,不正常如圖3)
還有就是如果我想把我取出來的Char,想轉成Int,也會出現程式錯誤(如圖4)
謝謝,我是新手所以問題會比較多一點~如果還有疑問我在解釋~感謝
程式碼:
<textarea class="cpp" rows="10" cols="60" name="code"> ------------------------------------------------------------------------------ void __fastcall TForm1::Comm1ReceiveData(TObject *Sender) { String Buf,ReceiveStr,TmpAnsi; int result; int First,End; int CutCount; Buf=Comm1->Input; ReceiveStr=ReceiveStr Buf; if(!ReceiveStr.IsEmpty()) { BufLen=ReceiveStr.Length(); Edit1->Text=""; First = ReceiveStr.Pos("$"); End = ReceiveStr.Pos("!"); CutCount = End - First -1; TmpAnsi =ReceiveStr.SubString(First 1,CutCount); //result =StrToInt(TmpAnsi);這一行是轉換 Edit1->Text=TmpAnsi; Send->Text=Send->Text TmpAnsi '\r' '\n' ; ReceiveStr= ReceiveStr.Delete(1,End) ; } } ------------------------------------------------------------------------------</textarea>
圖1

圖2

圖3

圖4

CoffeeX
中階會員


發表:18
回覆:121
積分:72
註冊:2005-02-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-02-01 11:51:04 IP:140.125.xxx.xxx 訂閱
你的圖都看不到喔....
先前我寫rs232也會有lose的現象,
這部份你可以要先想辦法加以確定問題點,
char 轉 int ?
我是直接用AnsiString的建構子載入char * 再利用其ToInt函數動作,
AnsiString MyAnsi(MyChar);
MyAnsi.ToInt;
------
=.=???
lvzhong1
一般會員


發表:29
回覆:18
積分:9
註冊:2007-01-23

發送簡訊給我
#9 引用回覆 回覆 發表時間:2007-02-01 14:34:53 IP:140.124.xxx.xxx 訂閱
CoffeeX前輩你好:
我已經將圖片重新放上去了!!
可否在幫我看一下~謝謝^^
CoffeeX
中階會員


發表:18
回覆:121
積分:72
註冊:2005-02-18

發送簡訊給我
#10 引用回覆 回覆 發表時間:2007-02-01 22:19:50 IP:218.164.xxx.xxx 訂閱
可以試著在help檔中搜尋此錯誤,
通常都有很詳盡的說明
你圖4的問題如同以下程式碼:
char MyChar[2];
MyChar[0] = '1';
MyChar[1] = 'NULL';

int NoError = StrToInt(MyChar[0]);
int WillError = StrToInt(MyChar[1]);


問題就在於你不可能將空字串轉換成數字...
所以請者出為何會獲得空字串,或如何進行相關程序上的判斷^^
------
=.=???
CoffeeX
中階會員


發表:18
回覆:121
積分:72
註冊:2005-02-18

發送簡訊給我
#11 引用回覆 回覆 發表時間:2007-02-01 23:30:12 IP:218.164.xxx.xxx 訂閱
可以試著在help檔中搜尋此錯誤,
通常都有很詳盡的說明
你圖4的問題如同以下程式碼:
char MyChar[2];
MyChar[0] = '1';
MyChar[1] = 'NULL';

int NoError = StrToInt(MyChar[0]);
int WillError = StrToInt(MyChar[1]);


問題就在於你不可能將空字串轉換成數字...
所以請者出為何會獲得空字串,或如何進行相關程序上的判斷^^
------
=.=???
lvzhong1
一般會員


發表:29
回覆:18
積分:9
註冊:2007-01-23

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-02-02 20:43:30 IP:140.124.xxx.xxx 訂閱
CoffeeX前輩你好:
還有一個問題想問你一下~
程式碼
------------------------------------
int valuem,idex;
bool fs;
char inbuff[10000];
DynamicArray DataByte;
DataByte=Comm1->ReadInputByte();
for(int i=1;i {
if(DataByte[i]=='!')
fs=true;
if(fs)
{
inbuff[idex]=DataByte[i 1];<----這邊我只要寫這樣就會出現錯誤(圖1)~如果我寫inbuff[idex]=DataByte[i]就不會
idex ;
if(DataByte[i]=='!')
{
// Edit1->Text="";
idex=0;
fs=false;
Edit1->Text= inbuff];

--------------------------------------------------------------------

這是我程式上的問題嗎?我有去看help不過我還是找不出來問題點~所以請教你一下.....謝謝^^
CoffeeX
中階會員


發表:18
回覆:121
積分:72
註冊:2005-02-18

發送簡訊給我
#13 引用回覆 回覆 發表時間:2007-02-02 22:18:25 IP:218.164.xxx.xxx 訂閱
在你列出的錯誤訊息,那已經很明確的指出這個錯誤了喔,
當index<0或是大於這個陣列的長度時將會丟出此錯誤訊息,
請參考c 的書輯中有關throw的部份
------
=.=???
系統時間:2024-05-09 5:51:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!