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

請問ComPort元件回傳值問題

缺席
Peter Tseng
一般會員


發表:3
回覆:6
積分:1
註冊:2007-10-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-27 10:26:56 IP:60.249.xxx.xxx 訂閱
請問一下我已 ComPort Library version 2.63之元件接收Modbus協定之設備
如何才能使正確的數字顯示於Label1及ListBox1上?

procedure TFVoltage.ComPRxChar(Sender: TObject; Count: Integer);
var InPchar :pchar;
s : string;
begin
s := stringofchar(' ',Count);
ComP.Read(InPchar,count);
move(inpchar^,pchar(s)^,count); //此處用Trace方式會顯示 #1#3#$14#9#3#$1B#4#$E 等字元
Label1.Caption := (string(InPchar)); //目前以下兩行顯示奇怪符號,請問如何才能使上一行之字元轉成正常數字
ListBox1.Items.Insert(0,Label1.Caption);
end;
max5020
資深會員


發表:26
回覆:275
積分:320
註冊:2003-06-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-30 17:32:05 IP:59.120.xxx.xxx 訂閱
這個問題,
必須先了解,
資料數據接的格式,
才能正確的反推出正確的數字,
例如: Hi-Byte, Low-Byte的問題等...
可能是第幾個Byte開始是什麼數據,
或是Leading Code是什麼???
Peter Tseng
一般會員


發表:3
回覆:6
積分:1
註冊:2007-10-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-30 20:38:52 IP:59.116.xxx.xxx 訂閱
這問題我已經自行解決了,程式片斷如下

var s : string;
i : smallint;
begin
Label1.Caption := '';
s := stringofchar(' ',DataSize);
move(dataptr^,pchar(s)^,DataSize);
for i := 0 to DataSize-1 do
begin
if (s[i]<>'') and (i>3) and (i<(DataSize-2)) then
// inttohex(byte(s[i]),2))) 由 #1#3#9#3#10..(字元模式)轉成 HEX(16進位)
Label1.Caption := Label1.Caption '[' inttostr(strtoint('0x' inttohex(byte(s[i]),2))) '] '
else if (byte(s[i])=0) and (i>3) and (i<(DataSize-2)) then
Label1.Caption := Label1.Caption '[' '0' '] ';
end;
ListBox1.Items.Insert(0,Label1.Caption);
end;
Peter Tseng
一般會員


發表:3
回覆:6
積分:1
註冊:2007-10-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-30 20:45:18 IP:59.116.xxx.xxx 訂閱
不好意思,我所用的Com port 元件已經改用 TCommPortDriver元件了,該元件之接收部分的
程式片斷如下

procedure TFVoltage.com7ReceiveData(Sender: TObject; DataPtr: Pointer;
DataSize: Cardinal);
var s : string;
i : smallint;
begin
Label1.Caption := '';
s := stringofchar(' ',DataSize);
move(dataptr^,pchar(s)^,DataSize);
for i := 0 to DataSize-1 do
begin
if (s[i]<>'') and (i>3) and (i<(DataSize-2)) then
Label1.Caption := Label1.Caption '[' inttostr(strtoint('0x' inttohex(byte(s[i]),2))) '] '
else if (byte(s[i])=0) and (i>3) and (i<(DataSize-2)) then
Label1.Caption := Label1.Caption '[' '0' '] ';
end;
ListBox1.Items.Insert(0,Label1.Caption);
end;
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-03-31 10:10:30 IP:210.66.xxx.xxx 訂閱
想請教一下
1. 您的元件來自那裏........
2. 您使用後,此元件的穩定性如何
3. 此元件不用 READ 的動作嗎??
4. 此元件 LPT PORT 可以用嗎

謝謝您

------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
編輯記錄
ANDY8C 重新編輯於 2009-03-31 10:12:03, 註解 無‧
Peter Tseng
一般會員


發表:3
回覆:6
積分:1
註冊:2007-10-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-03-31 11:00:26 IP:60.249.xxx.xxx 訂閱
基本上這元件跟其它Com port元件一樣都需要先下command 然後設備會回傳Message回來再做接收
至於LPT Port,此元件並無法支援
Peter Tseng
一般會員


發表:3
回覆:6
積分:1
註冊:2007-10-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-03-31 11:05:15 IP:60.249.xxx.xxx 訂閱
不好意思,再補充一下,該元件跟ComPort Library version 2.63用法都一樣,穩定度這兩套
也都還不錯,接收Modbus設備回傳值,只要包率相關值設定好,甚少有loss情況發生
ANDY8C
資深會員


發表:114
回覆:582
積分:299
註冊:2006-10-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-04-01 10:18:51 IP:210.66.xxx.xxx 訂閱
謝謝您

===================引 用 Peter Tseng 文 章===================
不好意思,再補充一下,該元件跟ComPort Library version 2.63用法都一樣,穩定度這兩套
也都還不錯,接收Modbus設備回傳值,只要包率相關值設定好,甚少有loss情況發生
------
---------------------------------------
偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩.
系統時間:2017-12-15 18:16:07
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!