第一段代码:http://topic.csdn.net/u/20120209/09/bd34612e-e716-463f-a00a-5ffda72b9131.html?4960问题一:这段代码的作用是什么呢?问题二:该怎样用C#开发,才可以与其通信呢?// 忬懺庢摼僞僽偵愗傝懼偊
void CITCWebTestDlg::ChangeDispToGetStatus( void )
{
// 尰嵼昞帵拞偺僞僽偑堎側傞応崌偼壗傕偟側偄
int index = m_TabCmd.GetCurSel();
if( index != 2 ) {
return;
} // 儃僞儞昞帵
m_BtnSendReq.ShowWindow( TRUE ); // 憲怣儃僞儞傪昞帵
showOnOffTestBtn( FALSE ); // On/Off僥僗僩娭楢儃僞儞傪旕昞帵 // 庴怣僨乕僞傪昞帵
CString strRecv;
CString str;
str.Format( _T("size: %d\r\n"), m_GetStatus.size );
strRecv = str;
str.Format( _T("cmd: %d\r\n"), m_GetStatus.cmd );
strRecv += str;
str.Format( _T("reserve1: %d\r\n"), m_GetStatus.reserve1 );
strRecv += str;
str.Format( _T("reserve2: %d\r\n"), m_GetStatus.reserve2 );
strRecv += str;
str.Format( _T("reserve3: %d\r\n"), m_GetStatus.reserve3 );
strRecv += str;
str.Format( _T("reserve4: %d\r\n"), m_GetStatus.reserve4 );
strRecv += str;
str.Format( _T("reserve5: %d\r\n"), m_GetStatus.reserve5 );
strRecv += str;
str.Format( _T("A/C num: %d\r\n"), m_GetStatus.num );
strRecv += str;
#ifdef SPDC_TEST_ENABLE
strRecv += _T("addr stat err onoff mode vmode vamount enableTemp roomTemp setTemp fanSpeed fanDir fSign reserve6    ID        time         Cool         Heat        Power          COP\r\n");
int i;
for( i=0; i<m_GetStatus.num; i++ ) {
TCHAR tempErrCode[3];
tempErrCode[0] = m_GetStatus.Stat[i].errCode[0];
tempErrCode[1] = m_GetStatus.Stat[i].errCode[1];
tempErrCode[2] = _T('\0');
if(tempErrCode[0] == 0) {
tempErrCode[0] = 'X';
tempErrCode[1] = 'X';
}
str.Format( _T("% 4d % 4d % 3s % 5d %04x  %04x    %04x % 10x % 8.1f % 7.1f % 8d % 6d % 5d % 8d % 5d % 10d % 8.4f % 8.4f % 8.4f % 8.4f\r\n"),
m_GetStatus.Stat[i].addr,
m_GetStatus.Stat[i].stat,
tempErrCode,
m_GetStatus.Stat[i].onoff,
m_GetStatus.Stat[i].mode,
m_GetStatus.Stat[i].vmode,
m_GetStatus.Stat[i].vamount,
m_GetStatus.Stat[i].enableTemp,
m_GetStatus.Stat[i].roomTemp,
m_GetStatus.Stat[i].setTemp,
m_GetStatus.Stat[i].fanSpeed,
m_GetStatus.Stat[i].fanDirection,
m_GetStatus.Stat[i].filterSign,
m_GetStatus.Stat[i].reserve6,
m_GetStatus.Stat[i].performanceDataID,
m_GetStatus.Stat[i].performaceDataUpdatedTime,
m_GetStatus.Stat[i].coolingLoad,
m_GetStatus.Stat[i].heatingLoad,
m_GetStatus.Stat[i].powerConsumption,
m_GetStatus.Stat[i].cop
);
strRecv += str;
}
#else // SPDC_TEST_ENABLE
strRecv += _T("addr stat err onoff mode enableTemp roomTemp setTemp fanSpeed fanDir fSign\r\n");
int i;
for( i=0; i<m_GetStatus.num; i++ ) {
TCHAR tempErrCode[3];
tempErrCode[0] = m_GetStatus.Stat[i].errCode[0];
tempErrCode[1] = m_GetStatus.Stat[i].errCode[1];
tempErrCode[2] = _T('\0');
str.Format( _T("% 4d % 4d % 3s % 5d %04x % 10x % 8.1f % 7.1f % 8d % 6d % 5d\r\n"),
m_GetStatus.Stat[i].addr,
m_GetStatus.Stat[i].stat,
tempErrCode,
m_GetStatus.Stat[i].onoff,
m_GetStatus.Stat[i].mode,
// m_GetStatus.Stat[i].vmode,
// m_GetStatus.Stat[i].vamount,
m_GetStatus.Stat[i].enableTemp,
m_GetStatus.Stat[i].roomTemp,
m_GetStatus.Stat[i].setTemp,
m_GetStatus.Stat[i].fanSpeed,
m_GetStatus.Stat[i].fanDirection,
// m_GetStatus.Stat[i].filterSign,
m_GetStatus.Stat[i].filterSign
// m_GetStatus.Stat[i].reserve6
);
strRecv += str;
}
#endif // SPDC_TEST_ENABLE
// 昞帵峏怴
m_EditRecv.SetWindowText( strRecv );
UpdateData( FALSE );
}// 忬懺愝掕僞僽偵愗傝懼偊
void CITCWebTestDlg::ChangeDispToSetStatus( void )
{
// 尰嵼昞帵拞偺僞僽偑堎側傞応崌偼壗傕偟側偄
int index = m_TabCmd.GetCurSel();
if( index != 3 ) {
return;
} // 儃僞儞昞帵
m_BtnSendReq.ShowWindow( TRUE ); // 憲怣儃僞儞傪昞帵
showOnOffTestBtn( FALSE ); // On/Off僥僗僩娭楢儃僞儞傪旕昞帵 // 庴怣僨乕僞傪昞帵
CString strRecv;
CString str;
str.Format( _T("size: %d\r\n"), m_SetStatus.size );
strRecv = str;
str.Format( _T("cmd: %d\r\n"), m_SetStatus.cmd );
strRecv += str;
str.Format( _T("reserve1: %d\r\n"), m_SetStatus.reserve1 );
strRecv += str;
str.Format( _T("reserve2: %d\r\n"), m_SetStatus.reserve2 );
strRecv += str;
str.Format( _T("reserve3: %d\r\n"), m_SetStatus.reserve3 );
strRecv += str;
strRecv += bitmapToStr( m_SetStatus.bitmap );
// 昞帵峏怴
m_EditRecv.SetWindowText( strRecv );
UpdateData( FALSE );
}// 價僢僩儅僢僾僨乕僞傪Hex昞帵
CString CITCWebTestDlg::bitmapToStr( char bitmap[16] )
{
CString resultStr = _T("bitmap:\r\n");
int i;
for( i=0; i<16; i++ ) {
int j;
for( j=0; j<8; j++ ) {
if( (bitmap[i] & (1 << j)) == 0 ) {
resultStr += _T("0");
}
else {
resultStr += _T("1");
}
}
resultStr += _T("\r\n");
}
resultStr += _T("\r\n");
return resultStr;
}// OnOff僥僗僩娭楢void CITCWebTestDlg::sendOnOffCmd( BOOL cmd )
{
#ifdef SPDC_TEST_ENABLE
// 憲怣儃僞儞柍岠壔
m_BtnSendReq.EnableWindow( FALSE ); // 憲怣僨乕僞僿僢僟偺嶌惉
memset( m_pSendBuff, 0, ITCWEB_SENDBUFF_SIZE );
SetAcStatReqHdr_t* pHdr = (SetAcStatReqHdr_t*)m_pSendBuff;
pHdr->size = 128 * sizeof(SetAcStatReqDat_t);
pHdr->cmd = ITCWEB_CMD_REQ_SET_STAT;
pHdr->num = 128;
// 憲怣僨乕僞僐儅儞僪偺嶌惉
SetAcStatReqDat_t* pCmd = (SetAcStatReqDat_t* )(pHdr + 1);
int i;
for( i=0; i<128; i++ ) {
pCmd[i].addr = i;
pCmd[i].bitmap = 1;
if( cmd ) {
pCmd[i].onoff = 1;
}
else {
pCmd[i].onoff = 0;
}
}
// 憲怣僨乕僞僒僀僘
m_SendSize = sizeof(SetAcStatReqHdr_t) + (128 * sizeof(SetAcStatReqDat_t)); // 僜働僢僩愙懕(幚嵺偺憲怣偼OnConnect偱峴偆)
connectSocket();
#endif // SPDC_TEST_ENABLE
}void CITCWebTestDlg::sendOnOffStatReq( void )
{
#ifdef SPDC_TEST_ENABLE
// 憲怣儃僞儞柍岠壔
m_BtnSendReq.EnableWindow( FALSE ); // 憲怣僨乕僞偺嶌惉
memset( m_pSendBuff, 0, ITCWEB_SENDBUFF_SIZE );
GetAcStatusReq_t* pPkt = (GetAcStatusReq_t*)m_pSendBuff;
pPkt->size = sizeof(GetAcStatusReq_t);
pPkt->cmd = ITCWEB_CMD_REQ_GET_STAT;
memset( pPkt->bitmap, 0xFF, 16 );
// 憲怣僨乕僞僒僀僘
m_SendSize = sizeof(GetAcStatusReq_t); // 僜働僢僩愙懕(幚嵺偺憲怣偼OnConnect偱峴偆)
connectSocket();
#endif // SPDC_TEST_ENABLE
}void CITCWebTestDlg::calcResult( void )
{
#ifdef SPDC_TEST_ENABLE
// 僗僥乕僞僗僠僃僢僋
if( !m_OnOffState ) {
return;
}
if( !m_OnOffTimeUp ) {
return;
}
m_OnOffTimeUp = FALSE; // 僥僗僩夞悢傪僀儞僋儕儊儞僩
m_OnOffTstCount++; // 僄儔乕夞悢傪廤寁
int i;
bool errFlag = false;
for( i=0; i<128; i++ ) {
// 愙懕忬懺傪僠僃僢僋
if( m_GetStatus.Stat[i].stat != 1 ) {
m_OnOffErrNum++;
errFlag = true;
continue;
}
// OnOff忬懺傪僠僃僢僋
if( m_OnOffCmd ) {
if( m_GetStatus.Stat[i].onoff != 1 ) {
m_OnOffErrNum++;
errFlag = true;
continue;
}
}
else {
if( m_GetStatus.Stat[i].onoff != 0 ) {
m_OnOffErrNum++;
errFlag = true;
continue;
}
}
}
if( errFlag ) {
m_OnOffErrCount++;
} // 堦妵敪掆
if( m_OnOffCmd ) {
m_OnOffCmd = FALSE;
}
else {
m_OnOffCmd = TRUE;
}
sendOnOffCmd( m_OnOffCmd ); // 昞帵峏怴
ChangeDispToOnOffTest();
#endif // SPDC_TEST_ENABLE
}// On/Off僥僗僩僞僽偵愗懼偊
void CITCWebTestDlg::ChangeDispToOnOffTest( void )
{
#ifdef SPDC_TEST_ENABLE
// 尰嵼昞帵拞偺僞僽偑堎側傞応崌偼壗傕偟側偄
int index = m_TabCmd.GetCurSel();
if( index != 4 ) {
return;
} // 儃僞儞昞帵
m_BtnSendReq.ShowWindow( FALSE ); // 憲怣儃僞儞傪旕昞帵
showOnOffTestBtn( TRUE ); // On/Off僥僗僩娭楢儃僞儞傪昞帵
if( m_OnOffState ) {
// 僥僗僩幚峴拞
m_EditInterval.EnableWindow( FALSE );
m_BtnStart.EnableWindow( FALSE );
m_BtnStop.EnableWindow( TRUE );
}
else {
// 僥僗僩掆巭拞
m_EditInterval.EnableWindow( TRUE );
m_BtnStart.EnableWindow( TRUE );
m_BtnStop.EnableWindow( FALSE );
} // 忬懺昞帵
CString resultStr;
CString str;
// 僥僗僩幚峴忬懺
if( m_OnOffState ) {
resultStr += _T("On/Off test progress.\r\n");
}
else {
resultStr += _T("State: On/Off test stopped.\r\n");
}
// 帋尡奐巒帪崗
resultStr += _T("Start: ");
time_t t = m_OnOffStartTime.GetTime();
resultStr += _tctime( &t );
resultStr += _T("\r\n");
// 帋尡娫妘(昩)
str.Format( _T("Intvl: %d (min)\r\n") , m_OnOffInterval / 60 );
resultStr += str;
// 巜椷忬懺
resultStr += _T("Comnd: ");
if( m_OnOffCmd ) {
resultStr += _T("On\r\n");
}
else {
resultStr += _T("Off\r\n");
}
// 帋尡夞悢
str.Format( _T("Test count : %d\r\n") , m_OnOffTstCount );
resultStr += str;
// 忬懺晄堦抳夞悢
str.Format( _T("Error count: %d\r\n") , m_OnOffErrCount );
resultStr += str;
// 忬懺晄堦抳偺傋戜悢
str.Format( _T("Error units: %d\r\n") , m_OnOffErrNum );
resultStr += str; // 昞帵峏怴
m_EditRecv.SetWindowText( resultStr );
UpdateData( FALSE );
#endif // SPDC_TEST_ENABLE
}void CITCWebTestDlg::showOnOffTestBtn( BOOL show )
{
m_StaticInterval.ShowWindow( show );
m_EditInterval.ShowWindow( show );
m_BtnStart.ShowWindow( show );
m_BtnStop.ShowWindow( show );
}非常感谢