PC與外部機器的通訊問題 |
答題得分者是:sryang
|
Mich
一般會員 發表:8 回覆:10 積分:8 註冊:2003-09-15 發送簡訊給我 |
程式主要是pc與外部機器(變頻器v7)做資料的傳輸,通訊格式(參數)是由Edit1~Edit7的值來決定,並用Label2
顯示變頻器傳回的數值。 現在我遇到的問題是:將資料傳給變頻器,變頻器依參數指令動作,但過約1秒後變頻器跳CE(MEMOBUS通訊異常), 而Label1為無顯示(猜測可能是收到不可見字元,因為PC傳給變頻器的資料很多是不可見字元,包含0x00); 請問各位前輩 1.我要如何將ASCII的數值顯示出來(例如:'A' 顯示65或0x41),如此我才可以判斷錯誤的原因。 2.我有試過將WaitTx顯示在Label1上做監看,但是當Edit如果有設00,之後的資料不會顯示在Label1上,是因為字串以null為結尾的原因嗎? 那為什麼變頻器有接收到後面的資料(因為變頻器依參數指令動作); 以下是部分相關的程式: AnsiString WaitTx = AnsiString(char(Edit1->Text.ToInt())) AnsiString(char(Edit2->Text.ToInt())) AnsiString(char(Edit3->Text.ToInt())) AnsiString(char(Edit4->Text.ToInt())) AnsiString(char(Edit5->Text.ToInt())) AnsiString(char(Edit6->Text.ToInt())) AnsiString(char(Edit7->Text.ToInt())); Serial_Port->TxString=WaitTx; //等待傳送的字串 Serial_Port->Transmission(); //傳送的函式 Serial_Port->Received(); Label1->Caption=Serial_Port->RxBuf //顯示接收的字串 //RxBuf在標頭檔宣告為字元陣列// char RXBuf[128]; 初學BCB,如果問題太膚淺,也請各位前輩多多指教,謝謝!! |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
Serial_Port 是自己寫的元件嗎?如果是的話,就增加寫入 char 陣列的介面,就可以解決問題了。
一般 Serial_Port 元件會有類似 WriteBuf(Buf,Size) 的介面如: char Buf[7]; Buf[0]=Edit1->Text.ToInt(); Buf[1]=Edit2->Text.ToInt(); Buf[2]=Edit3->Text.ToInt(); Buf[3]=Edit4->Text.ToInt(); Buf[4]=Edit5->Text.ToInt(); Buf[5]=Edit6->Text.ToInt(); Buf[6]=Edit7->Text.ToInt(); Serial_Port->WriteBuf(Buf,7); 這樣,即使是 7 個 0 也都可以送出。 AnsiString 基本上是以 0 作結尾的,如果使用 Serial_Port->TxString=WaitTx; 0 之後不送是很正常的。 Buf 顯示除錯可以使用 printf 例如: AnsiString as=EmptyStr; for(int i=0;i<7;i ) as.cat_printf("Buf[%d]=0xX\n", i, Buf[i]) Label1->Caption=as; 接收到的也可相同的方式查看內容。參考 AnsiString::printf, 有更多格式說明。
------
http://www.ViewMove.com |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
Mich
一般會員 發表:8 回覆:10 積分:8 註冊:2003-09-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |