📄 tcp2serialdlg.cpp
字号:
str.Format( "%d", count );
m_list.SetItemText( 0, 1, str );
if ( OnProcessNetWorkComData( buffer, len ) )
{
}
}
}
BOOL CTcp2SerialDlg::OnProcessSerialComData( BYTE* pBuf, int len )
{
memcpy( &m_SerialData.buffer[m_SerialData.len], pBuf, len );
m_SerialData.len += len;
if ( m_SerialData.len >= m_dt1info.needlen )
{
BYTE temp[32];
switch( m_dt1info.cmd )
{
case 0x05:
{
strtemp tempdata;
tempdata.realvalue = (float)((*(WORD*)pBuf)/100.0f);
tempdata.head[0] = 0xeb; tempdata.head[1] = 0x90;
tempdata.cmd = m_SendNetData.cmd;
tempdata.len = sizeof(tempdata.realvalue);
tempdata.sum = GetSumCheck8( (BYTE*)&tempdata.realvalue, sizeof(tempdata.realvalue) );
tempdata.end = 0x03;
m_tcpClient.Send( &tempdata, sizeof(tempdata) );
memset( &tempdata, 0, sizeof( tempdata ) );
memset( &m_SerialData, 0, sizeof( m_SerialData ) );
return FALSE;
}
break;
case 0x07:
case 0x0d:
m_dt1data.passvalue = (float)(*((WORD*)pBuf)/100.0f);
m_dt1data.upvalue = (float)(*((WORD*)pBuf+1)/100.0f);
m_dt1data.downvalue = (float)(*((WORD*)pBuf+2)/100.0f);
m_dt1data.passtime = *(WORD*)&pBuf[6];
m_dt1data.uptime = *(WORD*)&pBuf[8];
m_dt1data.downtime = *(WORD*)&pBuf[10];
m_sendNetWorkLen += 24;
break;
case 0x09:
case 0x0b:
case 0x0f:
case 0x11:
m_dt1data.passvalue = (float)(*((WORD*)pBuf)/100.0f);
m_dt1data.upvalue = (float)(*((WORD*)pBuf+1)/100.0f);
m_dt1data.downvalue = (float)(*((WORD*)pBuf+2)/100.0f);
m_dt1data.passtime = *(DWORD*)&pBuf[6];
m_dt1data.uptime = *(DWORD*)&pBuf[10];
m_dt1data.downtime = *(DWORD*)&pBuf[14];
m_sendNetWorkLen += 24;
break;
case 0x06:
{
m_dt1data.average = (float)(*( (WORD*)pBuf )/100.0f);
m_dt1data.max = (float)(*( (WORD*)pBuf+1 )/100.0f);
m_dt1data.min = (float)(*( (WORD*)pBuf+2 )/100.0f);
memcpy( temp, &pBuf[6], 4);
m_dt1data.time = *(DWORD*)temp&0x00ff;
memcpy( temp, &pBuf[10], 6 );
struDT1Time time = BCD2Hex( temp, 6 );
memcpy( &m_dt1data.maxtime, &time, sizeof(time) );
memcpy( temp, &pBuf[16], 6 );
time = BCD2Hex( temp, 6 );
memcpy( &m_dt1data.mintime, &time, sizeof(time) );
m_sendNetWorkLen += 28;
}
break;
case 0x08:
case 0x0a:
case 0x0c:
case 0x0e:
case 0x10:
{
m_dt1data.average = (float)(*( (WORD*)pBuf )/100.0f);
m_dt1data.max = (float)(*( (WORD*)pBuf+1 )/100.0f);
m_dt1data.min = (float)(*( (WORD*)pBuf+2 )/100.0f);
memcpy( temp, &pBuf[6], 4);
m_dt1data.time = *(DWORD*)temp;
memcpy( temp, &pBuf[10], 6 );
struDT1Time time = BCD2Hex( temp, 6 );
memcpy( &m_dt1data.maxtime, &time, sizeof(time) );
memcpy( temp, &pBuf[16], 6 );
time = BCD2Hex( temp, 6 );
memcpy( &m_dt1data.mintime, &time, sizeof(time) );
m_sendNetWorkLen += 28;
}
break;
default:
break;
}
memset( &m_SerialData, 0, sizeof( m_SerialData ) );
return TRUE;
}
return FALSE;
}
BOOL CTcp2SerialDlg::OnProcessNetWorkComData( BYTE* pBuf, int len )
{
memcpy( &m_NetWorkData.buffer[m_NetWorkData.len], pBuf, len );
m_NetWorkData.len += len;
int m_old_len = m_NetWorkData.len;
BYTE* pData;
while ( m_NetWorkData.len >= 4 )
{
pData = &m_NetWorkData.buffer[m_old_len-m_NetWorkData.len];
if ( pData[0] != 0xeb ||
pData[1] != 0x90 )
{
m_NetWorkData.len--;
continue;
}
else
{
if ( m_NetWorkData.len < (DWORD)pData[3]+6 )
{
return FALSE;
}
else if ( pData[pData[3]+5] != 0x03 )
{
memset( &m_NetWorkData, 0, sizeof( m_NetWorkData ) );
return FALSE;
}
else if ( GetSumCheck8( pData+2, pData[3]+2 ) != pData[pData[3]+4] )
{
memset( &m_NetWorkData, 0, sizeof( m_NetWorkData ) );
return FALSE;
}
else
{
switch( pData[2] )
{
case 0x14:
m_sendflag |= DT1_REAL_VALUE;
m_SendNetData.cmd = 0x14;
break;
case 0x15:
m_sendflag |= DT1_TODAY_DATA_1;
m_sendflag |= DT1_TODAY_DATA_2;
m_SendNetData.cmd = 0x15;
break;
case 0x16:
m_sendflag |= DT1_TOMONTH_DATA_1;
m_sendflag |= DT1_TOMONTH_DATA_2;
m_SendNetData.cmd = 0x16;
break;
case 0x17:
m_sendflag |= DT1_TOSEASON_DATA_1;
m_sendflag |= DT1_TOSEASON_DATA_2;
m_SendNetData.cmd = 0x17;
break;
case 0x18:
m_sendflag |= DT1_LASTDAY_DATA_1;
m_sendflag |= DT1_LASTDAY_DATA_2;
m_SendNetData.cmd = 0x18;
break;
case 0x19:
m_sendflag |= DT1_LASTMONTH_DATA_1;
m_sendflag |= DT1_LASTMONTH_DATA_2;
m_SendNetData.cmd = 0x19;
break;
case 0x1A:
m_sendflag |= DT1_LASTSEASON_DATA_1;
m_sendflag |= DT1_LASTSEASON_DATA_2;
m_SendNetData.cmd = 0x1a;
break;
}
OnWriteToSerial();
m_NetWorkData.len -= (pData[3]+6);
continue;
}
}
}
int size = m_old_len-m_NetWorkData.len;
if ( size <= 0 )
{
return TRUE;
}
memcpy( m_NetWorkData.buffer, &m_NetWorkData.buffer[size], m_NetWorkData.len );
return TRUE;
}
void CTcp2SerialDlg::OnWriteToNetWork()
{
memcpy( &m_SendNetData.dt1data, &m_dt1data, sizeof(m_dt1data) );
m_SendNetData.head[0] = 0xeb; m_SendNetData.head[1] = 0x90;
m_SendNetData.sumcheck = GetSumCheck8( (BYTE*)&m_dt1data, sizeof(m_dt1data) );
m_SendNetData.len = sizeof(m_dt1data);
m_SendNetData.enddata = 0x03;
m_tcpClient.Send( (BYTE*)&m_SendNetData, sizeof(m_SendNetData) );
static count = 0;
count += sizeof(m_SendNetData);
CString str;
str.Format( "%d", count );
m_list.SetItemText( 0, 0, str );
memset( &m_SendNetData, 0, sizeof(m_SendNetData) );
}
void CTcp2SerialDlg::OnWriteToSerial()
{
BYTE buffer[52];
int len = 52;
memset( buffer, 0xff, sizeof(buffer) );
buffer[50] = 0x01;
if ( m_sendflag&DT1_REAL_VALUE )
{
m_sendflag&=~DT1_REAL_VALUE;
buffer[51] = 05;
m_dt1info.needlen = 2;
}
else if ( m_sendflag&DT1_TODAY_DATA_1 )
{
m_sendflag&=~DT1_TODAY_DATA_1;
buffer[51] = 06;
m_dt1info.needlen = 22;
}
else if ( m_sendflag&DT1_TODAY_DATA_2 )
{
m_sendflag&=~DT1_TODAY_DATA_2;
buffer[51] = 0x07;
m_dt1info.needlen = 12;
}
else if ( m_sendflag&DT1_TOMONTH_DATA_1 )
{
m_sendflag&=~DT1_TOMONTH_DATA_1;
buffer[51] = 0x08;
m_dt1info.needlen = 22;
}
else if ( m_sendflag&DT1_TOMONTH_DATA_2 )
{
m_sendflag&=~DT1_TOMONTH_DATA_2;
buffer[51] = 0x09;
m_dt1info.needlen = 18;
}
else if ( m_sendflag&DT1_TOSEASON_DATA_1 )
{
m_sendflag&=~DT1_TOSEASON_DATA_1;
buffer[51] = 0x0a;
m_dt1info.needlen = 22;
}
else if ( m_sendflag&DT1_TOSEASON_DATA_2 )
{
m_sendflag&=~DT1_TOSEASON_DATA_2;
buffer[51] = 0x0b;
m_dt1info.needlen = 18;
}
else if ( m_sendflag&DT1_LASTDAY_DATA_1 )
{
m_sendflag&=~DT1_LASTDAY_DATA_1;
buffer[51] = 0x0c;
m_dt1info.needlen = 22;
}
else if ( m_sendflag&DT1_LASTDAY_DATA_2 )
{
m_sendflag&=~DT1_LASTDAY_DATA_2;
buffer[51] = 0x0d;
m_dt1info.needlen = 12;
}
else if ( m_sendflag&DT1_LASTMONTH_DATA_1 )
{
m_sendflag&=~DT1_LASTMONTH_DATA_1;
buffer[51] = 0x0e;
m_dt1info.needlen = 22;
}
else if ( m_sendflag&DT1_LASTMONTH_DATA_2 )
{
m_sendflag&=~DT1_LASTMONTH_DATA_2;
buffer[51] = 0x0f;
m_dt1info.needlen = 18;
}
else if ( m_sendflag&DT1_LASTSEASON_DATA_1 )
{
m_sendflag&=~DT1_LASTSEASON_DATA_1;
buffer[51] = 0x10;
m_dt1info.needlen = 22;
}
else if ( m_sendflag&DT1_LASTSEASON_DATA_2 )
{
m_sendflag&=~DT1_LASTSEASON_DATA_2;
buffer[51] = 0x11;
m_dt1info.needlen = 18;
}
m_dt1info.cmd = buffer[51];
m_com.WriteData( buffer, len );
}
void CTcp2SerialDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch( nIDEvent )
{
case 999:
m_nCount++;
if ( m_nCount >= 20 )
{
memset( &m_SerialData, 0, sizeof( m_SerialData ) );
m_nCount = 0;
}
break;
}
CDialog::OnTimer(nIDEvent);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -