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

想把以下VB程式碼轉成BCB 麻煩大大幫忙

答題得分者是:暗黑破壞神
esju0000
一般會員


發表:7
回覆:9
積分:3
註冊:2007-09-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-29 20:38:56 IP:140.121.xxx.xxx 訂閱
我需要藉由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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-29 21:52:54 IP:122.118.xxx.xxx 未訂閱

[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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-05-29 22:11:51 IP:140.121.xxx.xxx 訂閱
謝謝暗黑大大
不過我照大大的方式改
我新改好的程式碼:
[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 ByteArray;
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);
}
[/code]
但矩陣仍是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 重新編輯於 2008-05-29 22:12:56, 註解 無‧
esju0000 重新編輯於 2008-05-30 00:49:01, 註解 無‧
esju0000 重新編輯於 2008-05-30 03:46:24, 註解 無‧
esju0000 重新編輯於 2008-05-30 03:52:34, 註解 無‧
esju0000 重新編輯於 2008-05-30 03:59:48, 註解 無‧
esju0000
一般會員


發表:7
回覆:9
積分:3
註冊:2007-09-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-05-30 12:32:25 IP:140.121.xxx.xxx 訂閱
感謝暗黑大大~
你給的指點和我的爬文都是對的
錯的是我豬腦沒把工程師的程式看完
剛剛突然看到得做Comm的設定
像是每秒傳輸速率(鮑率?)還有資料位元等等
改好設定後就能用了~
最後再次感謝暗黑大大^^
系統時間:2017-10-19 13:22:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!