想把以下VB程式碼轉成BCB 麻煩大大幫忙 |
答題得分者是:暗黑破壞神
|
esju0000
一般會員 發表:7 回覆:9 積分:3 註冊:2007-09-01 發送簡訊給我 |
我需要藉由RS232控制一台監視攝影機
現在有工程師給的VB程式碼如下 使用工程師給的程式可以做到簡單的上下左右 但我自己用BCB改寫卻一直無法使監視器轉動 我猜想應該是送出的字串有問題 麻煩大大門能不吝指教~ VB程式碼: [code vb] Private Sub Command1_Click() Dim ByteArray() As Byte ReDim ByteArray(6) ByteArray(0) = &HFF 'Always FF ByteArray(1) = &H1 'Camera 1(Address) ByteArray(2) = &H88 'Command 1 ByteArray(3) = &H8 'Command 2, Up ByteArray(4) = &H3F 'Pan Speed H00~H3F ByteArray(5) = &H3F 'Tilt Speed H00~H3F ByteArray(6) = &HFF And (CLng(ByteArray(1)) CLng(ByteArray(2)) CLng(ByteArray(3)) CLng(ByteArray(4)) CLng(ByteArray(5))) MSComm1.Output = ByteArray End Sub End Sub[/code] 我用BCB改的: [code cpp] int t2=1,t3=136,t5=63,t6=63,t7; String S1,S2,S3,S4,S5,S6,S7,sdata; void __fastcall TForm1::Button4Click(TObject *Sender) { int t4=8; S1=IntToHex(255,2); //0xFF 'Always FF S2=IntToHex(t2,2); //0x01 'Camera 1(Address) S3=IntToHex(t3,2); //0x88 'Command 1 S4=IntToHex(t4,2); //0x08 'Command 2, Up S5=IntToHex(t5,2); //0x3F 'Pan Speed H00~H3F S6=IntToHex(t6,2); //0x3F 'Tilt Speed H00~H3F t7=t2 t3 t4 t5 t6; S7=IntToHex(t7,2); //0x0F 'S2~S6末兩碼之總和 sdata=S1 S2 S3 S4 S5 S6 S7; Comm1->OutputString(sdata); } [/code] |
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
[code cpp] unsigned char ByteArray[21]; ByteArray[0] = 0xFF; ByteArray[1] = 0x01; ....... 其它沒什麼問題了. [/code] ===================引 用 esju0000 文 章=================== 我需要藉由RS232控制一台監視攝影機 [code vb] Private Sub Command1_Click() Dim ByteArray() As Byte ReDim ByteArray(6) ByteArray(0) = &HFF 'Always FF ByteArray(1) = &H1 'Camera 1(Address) ByteArray(2) = &H88 'Command 1 ByteArray(3) = &H8 'Command 2, Up ByteArray(4) = &H3F 'Pan Speed H00~H3F ByteArray(5) = &H3F 'Tilt Speed H00~H3F ByteArray(6) = &HFF And (CLng(ByteArray(1)) CLng(ByteArray(2)) CLng(ByteArray(3)) CLng(ByteArray(4)) CLng(ByteArray(5))) MSComm1.Output = ByteArray End Sub End Sub[/code] 我用BCB改的: [code cpp] int t2=1,t3=136,t5=63,t6=63,t7; String S1,S2,S3,S4,S5,S6,S7,sdata; void __fastcall TForm1::Button4Click(TObject *Sender) { int t4=8; S1=IntToHex(255,2); //0xFF 'Always FF S2=IntToHex(t2,2); //0x01 'Camera 1(Address) S3=IntToHex(t3,2); //0x88 'Command 1 S4=IntToHex(t4,2); //0x08 'Command 2, Up S5=IntToHex(t5,2); //0x3F 'Pan Speed H00~H3F S6=IntToHex(t6,2); //0x3F 'Tilt Speed H00~H3F t7=t2 t3 t4 t5 t6; S7=IntToHex(t7,2); //0x0F 'S2~S6末兩碼之總和 sdata=S1 S2 S3 S4 S5 S6 S7; Comm1->OutputString(sdata); } [/code] |
esju0000
一般會員 發表:7 回覆:9 積分:3 註冊:2007-09-01 發送簡訊給我 |
謝謝暗黑大大
不過我照大大的方式改 我新改好的程式碼: [code cpp] unsigned char ByteArray[7]; String sdata; void __fastcall TForm1::Button4Click(TObject *Sender) { ByteArray[0]=0xFF; ByteArray[1]=0x01; ByteArray[2]=0x88; ByteArray[3]=0x08; ByteArray[4]=0x3F; ByteArray[5]=0x3F; ByteArray[6]=ByteArray[1] ByteArray[2] ByteArray[3] ByteArray[4] ByteArray[5]; sdata=IntToStr(ByteArray[0]) IntToStr(ByteArray[1]) IntToStr(ByteArray[2]) IntToStr(ByteArray[3]) IntToStr(ByteArray[4]) IntToStr(ByteArray[5]) IntToStr(ByteArray[6]) ; Button8->Caption=ByteArray[1]; Comm1->OutputString(sdata); [/code] ByteArray會變成10進位的資料 我又搜尋了站上文章 找到一篇跟我很類似的 http://delphi.ktop.com.tw/board.php?cid=168&fid=913&tid=35700 再次修改好後變成下面的程式碼 [code cpp] DynamicArray void __fastcall TForm1::Button4Click(TObject *Sender) { ByteArray.Length = 7; ByteArray[0]=0xFF; ByteArray[1]=0x01; ByteArray[2]=0x88; ByteArray[3]=0x08; ByteArray[4]=0x3F; ByteArray[5]=0x3F; ByteArray[6]=0xFF & ByteArray[1] ByteArray[2] ByteArray[3] ByteArray[4] ByteArray[5]; Button8->Caption=ByteArray[6]; Comm1->OutputByte(ByteArray); } 但矩陣仍是10進位的QQ 可我必須傳16進位的控制指令說~ 這樣改應該很接近工程師得版本了阿(怒~) 但我的監視器如今依舊紋風不動>.<(飛踢) 再多問一個蠢問題 工程師版本中有一行 ByteArray(6) = &HFF And (CLng(ByteArray(1)) CLng(ByteArray(2)) 看不是很懂為啥要And 真的是很麻煩大大~ 不知道用肝當祭品能不能召喚暗黑破壞神~XD ===================引 用 暗黑破壞神 文 章=================== [code cpp] unsigned char ByteArray[21]; ByteArray[0] = 0xFF; ByteArray[1] = 0x01; ....... 其它沒什麼問題了. [/code] |
esju0000
一般會員 發表:7 回覆:9 積分:3 註冊:2007-09-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |