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

在XE6,如何用TMS rs232傳chr($81)以上的資料??

答題得分者是:aftcast
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2014-05-12 09:09:11 IP:118.163.xxx.xxx 訂閱
用下面二個語法,傳出去的都是80+3F
VaComm1.WriteText(chr(strtoint('$80')) chr(strtoint('$81')));
VaComm1.WriteText(AnsiString(chr(strtoint('$80'))) AnsiString(chr(strtoint('$81'))));
有其他方法可以傳chr($81)的資料嗎??
------
OS : Win 7 pro
Program : Delphi 7
DataBase : Ms Sql 2008
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2014-05-16 14:47:35 IP:114.32.xxx.xxx 訂閱
感覺是元件的問題… (它似乎不支持unicode?)

可否改用spcomm的最新版來實做? ktop應該有,去年還什麼時候,找一下。若沒有,請來信和我要我自己也修正的版本。

===================引 用 jackiemi2_seed 文 章===================
用下面二個語法,傳出去的都是80 3F
VaComm1.WriteText(chr(strtoint('$80')) chr(strtoint('$81')));
VaComm1.WriteText(AnsiString(chr(strtoint('$80'))) AnsiString(chr(strtoint('$81'))));
有其他方法可以傳chr($81)的資料嗎??
------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2014-05-22 09:59:29 IP:118.163.xxx.xxx 訂閱
aftcast兄您好:
您的信收到了,也安裝好了
程式語法如下,
測試結果,也是不支援chr($80)以上字元

[code delphi]

var ls_send:PansiChar;
begin
ls_send:=PAnsiChar(AnsiString(chr(strtoint('$80')) chr(strtoint('$81'))));
Comm1.WriteCommData(ls_send,Length(ls_send));

[/code]

------
OS : Win 7 pro
Program : Delphi 7
DataBase : Ms Sql 2008
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2014-05-22 12:11:39 IP:114.42.xxx.xxx 訂閱
你好,字元轉換應該如下:
var ls_send:PansiChar;
astr:AnsiString;
begin
ls_send:=PAnsiChar(#$41#$81'K'); //ok的
astr := AnsiChar($41) AnsiChar($82) AnsiChar($42);
ls_send := PAnsiChar(astr); // 也ok的
end;

以上,再試看看。

===================引 用 jackiemi2_seed 文 章===================
aftcast兄您好:
您的信收到了,也安裝好了
程式語法如下,
測試結果,也是不支援chr($80)以上字元

[code delphi]

var ls_send:PansiChar;
begin
ls_send:=PAnsiChar(AnsiString(chr(strtoint('$80')) chr(strtoint('$81'))));
Comm1.WriteCommData(ls_send,Length(ls_send));

[/code]

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2014-05-26 14:51:01 IP:118.163.xxx.xxx 訂閱
aftcast兄您好:
照您的字元轉換語法就可以了
3Q
------
OS : Win 7 pro
Program : Delphi 7
DataBase : Ms Sql 2008
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2014-05-27 10:37:58 IP:118.163.xxx.xxx 訂閱
aftcast兄您好:
有測過$00嗎???
照下面語法,只出現80,00後面的跑不出來

[code delphi]
var ls_send:PansiChar;
astr:AnsiString;

//方法一
astr := AnsiChar($80) AnsiChar($00) AnsiChar($82);
ls_send := PAnsiChar(astr);
//方法二
ls_send:=PAnsiChar(#$80#$00#$82);

Comm1.WriteCommData(ls_send,Length(ls_send));
[/code]

------
OS : Win 7 pro
Program : Delphi 7
DataBase : Ms Sql 2008
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#7 引用回覆 回覆 發表時間:2014-05-28 02:29:25 IP:114.45.xxx.xxx 訂閱
你好,

因這幾天工作上會比較忙,若抽出空再幫你。因delphi語法我不是很熟,不好不測就信手寫來回覆你,以免錯誤。

可是我可以提醒你作法:

假如astr的長度是len。你準備要加入一個 00 的值。
那麼
if (value=0 )
setlength(astr, len 1)
astr[len 1] := 0;
else
原來的方式

若不行,還有別的做法… 待我有時間測delphi。


===================引 用 jackiemi2_seed 文 章===================
aftcast兄您好:
有測過$00嗎???
照下面語法,只出現80,00後面的跑不出來

[code delphi]
var ls_send:PansiChar;
astr:AnsiString;

//方法一
astr := AnsiChar($80) AnsiChar($00) AnsiChar($82);
ls_send := PAnsiChar(astr);
//方法二
ls_send:=PAnsiChar(#$80#$00#$82);

Comm1.WriteCommData(ls_send,Length(ls_send));
[/code]

------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
aftcast
站務副站長


發表:81
回覆:1485
積分:1763
註冊:2002-11-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2014-05-28 19:03:46 IP:114.32.xxx.xxx 訂閱

[code delphi]
var
astr:AnsiString;
len, val :integer;
begin
astr := '12345';
val :=0;
if val=0 then
begin
setlength(astr,Length(astr) 1);
astr[Length(astr) 1] := AnsiChar(0);
end
else
begin
// 之前的做法, astr := AnsiChar($41) AnsiChar($82) AnsiChar($42);
end;

//astr := astr AnsiChar($41);
//len := Length(astr); // = 7
end;

[/code]

===================引 用 jackiemi2_seed 文 章===================
aftcast兄您好:
有測過$00嗎???
照下面語法,只出現80,00後面的跑不出來


------


蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2014-05-28 19:04:42, 註解 無‧
aftcast 重新編輯於 2014-05-28 19:07:28, 註解 無‧
aftcast 重新編輯於 2014-05-28 19:08:27, 註解 無‧
aftcast 重新編輯於 2014-05-28 19:11:02, 註解 無‧
jackiemi2_seed
中階會員


發表:37
回覆:97
積分:76
註冊:2006-09-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2014-05-29 13:54:44 IP:118.163.xxx.xxx 訂閱
找到問題了
Comm1.WriteCommData(ls_send,Length(ls_send));

ls_send資料有$00,不可用length捉長度

改變寫法就好了

[code delphi]
var astr:AnsiString;
begin
astr := AnsiChar($80) AnsiChar($00) AnsiChar($FF) AnsiChar($80) AnsiChar($00) AnsiChar($FF);
Comm1.WriteCommData(PAnsiChar(astr),Length(astr));
[/code]

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