全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:5008
推到 Plurk!
推到 Facebook!

RS-232接收訊號需乘上一個值後並顯示

尚未結案
jackyqoo
一般會員


發表:3
回覆:6
積分:1
註冊:2015-08-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2016-01-06 11:53:39 IP:120.105.xxx.xxx 訂閱
用RS-232接收訊號,

例如: Memo1上顯示 1111(我接收到的)

)*2的部分我會寫]

請問各位我該如何將ASCII轉成十進位?
------
學無止境
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2016-01-06 15:07:23 IP:60.250.xxx.xxx 訂閱
在這連結中,
http://delphi.ktop.com.tw/board.php?cid=168&fid=912&tid=107426

各位大大您好,

我是
接收沒問題,但接收到的是ASCII,

Memo2我想讓他顯示30 [(1111=15*2
請問各位我該如何將ASCII轉成十進位?
jackyqoo
一般會員


發表:3
回覆:6
積分:1
註冊:2015-08-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2016-01-06 15:45:05 IP:120.105.xxx.xxx 訂閱
抱歉我沒說清楚

大大您好,

因傳輸進來的是ASCII,還有個換行指令,無法直接做進位的轉換,(直接轉的話會一直跳aftcast大大的ShowMessage字串那含有非0及1的值)

想請問大大,是否我收到後可以先把ASCII轉其它進位,

===================引 用 taishyang 文 章=================== 在這連結中,
http://delphi.ktop.com.tw/board.php?cid=168&fid=912&tid=107426

hexStr中, 所以只要用StrToInt("0x" hexStr) 就會得到15



------
學無止境
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2016-01-07 09:35:56 IP:60.250.xxx.xxx 訂閱
傳輸進來的內容是什麼?
預期的結果是?



===================引 用 jackyqoo 文 章===================
抱歉我沒說清楚

大大您好,

因傳輸進來的是ASCII,還有個換行指令,無法直接做進位的轉換,(直接轉的話會一直跳aftcast大大的ShowMessage字串那含有非0及1的值)

想請問大大,是否我收到後可以先把ASCII轉其它進位,

===================引 用 taishyang 文 章=================== 在這連結中,
http://delphi.ktop.com.tw/board.php?cid=168&fid=912&tid=107426

hexStr中, 所以只要用StrToInt("0x" hexStr) 就會得到15



jackyqoo
一般會員


發表:3
回覆:6
積分:1
註冊:2015-08-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2016-01-07 11:55:36 IP:120.105.xxx.xxx 訂閱
taishyang大大您好 以下是我的程式碼
String Temp;

char inbuff[1024];

DWORD nBytesRead,dwEvent,dwError;

COMSTAT cs;

ClearCommError(hComm,&dwError,&cs);

if(cs.cbInQue>sizeof(inbuff))

{

PurgeComm(hComm,PURGE_RXCLEAR);

return;

}

ReadFile(hComm,inbuff,cs.cbInQue,&nBytesRead,NULL);

inbuff[cs.cbInQue]=''; //以上是RS-232接收

TStringList *sList = new TStringList();

sList->Delimiter = ','; // 宣告逗號為字串分割

sList->DelimitedText =mReceive->Text inbuff;

mReceive->Text=mReceive->Text inbuff; // ,命令,值,

if(sList->Strings[1]==1010) //檢視命令是否為A值的命令

{AnsiString szHex1=sList->Strings[2];

AnsiString szDec1;

szDec1=IntToStr(StrToInt("0x" szHex1));

float f;

float a=szDec1.ToDouble();

float b=0.0054931640625;

f=a*b;

Memo2->Lines->Add(String(f));} //計算A後顯示

else if(sList->Strings[1]==0101) //檢視命令是否為B值的命令

{AnsiString szHex=sList->Strings[2];

AnsiString szDec;

szDec=IntToStr(StrToInt("0x" szHex));

Memo3->Text=szDec; } //計算B後顯示

else {Null;}





現在我接收到的訊號有 傳輸進來的內容是什麼?

預期的結果是?

------
學無止境
編輯記錄
jackyqoo 重新編輯於 2016-01-07 15:14:52, 註解 無‧
jackyqoo 重新編輯於 2016-01-07 15:19:23, 註解 無‧
jackyqoo 重新編輯於 2016-01-07 15:21:49, 註解 無‧
jackyqoo 重新編輯於 2016-01-07 15:52:11, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2016-01-08 09:42:58 IP:60.250.xxx.xxx 訂閱
程式沒排版落落長很難花時間去仔細看
直覺上你這兩行有問題
if(sList->Strings[1]==1010)
else if(sList->Strings[1]==0101)
你用字串跟數值比較? 下斷點看就知道哪裡出問題了

系統時間:2024-11-21 16:31:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!