发表于:2003-12-28 23:20:00
13楼
GaryLin:
我下载了你给的地址icpdas.com的关于7017的用于BCB的实例,
它有几个文件:
2003-05-05 11:48 60,135 I7000.H
2002-12-18 10:15 14,848 I7000bc.lib
2002-12-18 10:24 3,997 I7000U.CPP
2002-09-23 11:43 19,428 I8000.h
2002-07-10 18:53 15,639 I87000.h
2003-12-28 02:53 3,813 Project1.bpr
1998-09-25 17:38 693 Project1.cpp
2003-05-07 08:55 28,672 Project1.exe
1998-09-24 15:26 876 Project1.res
2002-03-19 13:06 4,070 Uart.h
2002-12-18 10:15 1,536 Uartbc.lib
2003-12-28 22:23 4,590 Unit1.cpp
2003-12-28 22:23 51 Unit1.ddp
2003-12-28 02:52 3,857 Unit1.dfm
1998-09-28 09:12 1,581 Unit1.h
----
其中,它的对7017发指令并收数据的过程是这样的:
在unit1.cpp中:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Word wRet ;
if ( bCfgChg && bComOpen ) // Reopen Com port
{
Close_Com( cPort );
bComOpen = false;
};
if ( ! bComOpen )
OpenCom();
w7000[0] = (Word) cPort ; // COM Port
w7000[1] = (Word) StrToInt( "0x" + Address->Text ); // Module Address
switch ( TypeComboBox->ItemIndex ) { // Module ID
case 0: w7000[2] = 0x7017;
break;
case 1: w7000[2] = 0x7018;
break;
};
if ( RadioButton1->Checked )
w7000[3] = 1 ; // CheckSum Enable
else
w7000[3] = 0 ;
w7000[4] = 100; // TimeOut = 0.1 second
w7000[5] = (Word) StrToInt(Channel->Text) ;
w7000[6] = 1; // string debug
wRet = AnalogIn(w7000 , f7000, szSend , szReceive );
//这里是收信。存到szReceive里。该函数是在Uart.h中定义的。包看Project1.bpr项目文件(类似于VC的工作区文件、工程文件),可见该项目需要I7000bc.lib、Uartbc.lib库。然而,该示例没有给出库的源程序。
if ( wRet != 0 )
{
//Application->MessageBox( (char) "The Error Code:" + IntToStr(wRet),
// (char) "AnalogIn() error !!! " , MB_OK );
ShowMessage( "AnalogIn() Error!!\nThe Error Code:" + IntToStr(wRet) );
Close_Com (cPort);
};
if ( w7000[6] == 1 )
{
TVarRec args[3] = {6,3, f7000[0] };
Edit1->Text = Format("%*.*f", args, 2);
Edit2->Text = szReceive; //注意,这里是给Edit2赋值,其值在前面已经得到。
};
}
========
故,我难以从示例中得到我为什么如下过程会失败的原因:因为不知道应该怎么发指令,接收信息后应该给4017什么回复或处理?
对4017(7017兼容)发指令:
#020(CR)(即:#AAN)
仅仅前面一次可以得到正确的返回值0.0003,后面就会有乱码了。