⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testlfpprotocolview.cpp

📁 一个很好的LFP规约调试器
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	memcpy( m_recebuffer.buffer, &m_recebuffer.buffer[m_start], m_recebuffer.count );
	SetEvent( m_hPostMsgEvent );
	return 0L;
}

void CTestLFPProtocolView::OnSize(UINT nType, int cx, int cy) 
{
	CFormView::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	if( !m_bInit ) return;
	CRect	rect;
	GetClientRect( rect );
	m_MSG.MoveWindow( rect );
}

void CTestLFPProtocolView::MainSend( void )
{
	int count;
	WORD checkSum;
	BYTE	buffer[512];
	if( ( m_nCurFrame == 0 || m_nFramePoll & NSAP_ACK_FRAME ) ) {
		count = 0;
		buffer[0] = 0xeb; buffer[1] = 0x90;
		buffer[2] = 0xeb; buffer[3] = 0x90;
		buffer[4] = NSAC_STX;
		if( m_nFramePoll & NSAP_ACK_FRAME ) {
			m_nFramePoll &= ~NSAP_ACK_FRAME;
			if( GetACKFrame( &buffer[5], count ) ) {
				m_nCurFrame = 0;
			}
		}
		else if( GetYKFrame( &buffer[5], count, m_nCurFrame ) ) { //insert yk command
		}
		else if( GetC2Frame( &buffer[5], count, m_nCurFrame ) ) { //setting value
		}
		else if( GetC9Frame( &buffer[5], count, m_nCurFrame ) ) {
		}
		else if( GetC10Frame( &buffer[5], count, m_nCurFrame ) ) {
		}
		else if( GetC8Frame( &buffer[5], count, m_nCurFrame ) ) {
		}
		else if( GetC7Frame( &buffer[5], count, m_nCurFrame ) ) {
		}
		else if( m_nFramePoll & NSAP_C1_FRAME ) { //query command 1
			//GetNextUnit();
			m_nFramePoll &= ~NSAP_C1_FRAME;
			if( GetC1Frame( &buffer[5], count ) ) {
				m_nCurFrame = NSAP_C1;
			}
		}
		else if( m_nFramePoll & NSAP_C20_FRAME ) { //query command 2
			m_nFramePoll &= ~NSAP_C20_FRAME;
			if( GetC20Frame( &buffer[5], count ) ) {
				m_nCurFrame = NSAP_C20;
			}
		}
		else if( m_nFramePoll & NSAP_C15_FRAME ) { //yc frame
			m_nFramePoll &= ~NSAP_C15_FRAME;
			if( GetC15Frame( &buffer[5], count ) ) {
				m_nCurFrame = NSAP_C15;
			}
		}
		else if( m_nFramePoll & NSAP_C19_FRAME ) { //yx frame
			m_nFramePoll &= ~NSAP_C19_FRAME;
			if( GetC19Frame( &buffer[5], count ) ) {
				m_nCurFrame = NSAP_C19;
			}
		}
		else if( m_nFramePoll & NSAP_C4_FRAME ) { //protect frame
			m_nFramePoll &= ~NSAP_C4_FRAME;
			if( GetC4Frame( &buffer[5], count ) ) {
				m_nCurFrame = NSAP_C4;
			}
		}
		else if( m_nFramePoll & NSAP_C16_FRAME ) { //ym frame
			m_nFramePoll &= ~NSAP_C16_FRAME;
			if( GetC16Frame( &buffer[5], count ) ) {
				m_nCurFrame = NSAP_C16;
			}
		}
		else if( m_nFramePoll & NSAP_C35_FRAME ) {
			m_nFramePoll &= ~NSAP_C35_FRAME;
			if( GetC35Frame( &buffer[5], count ) ) {
				m_nCurFrame = NSAP_C35;
			}
		}
		if( count >= 4 ) {
			checkSum = GetCheckSum16( &buffer[5], count+1 );
			buffer[6+count] = checkSum & 0x00ff;
			buffer[7+count] = (checkSum >> 8) & 0x00ff;
			buffer[8+count] = NSAC_ETX;
			WriteCommData( buffer, 9+count );
			RichEditFormat.crTextColor = RGB( 255, 0, 0 );
			ShowMSG( buffer, 9+count, TRUE );
			m_nSendPoint = 0;
		}
	}
}

void CTestLFPProtocolView::MainRun( void )
{
	m_nSendTime++;
	if( m_nCurFrame != 0 ) {
		m_nSendPoint++;
		if( m_nSendPoint > 10 ) {
			m_nSendPoint = 0;
			m_nCurFrame = 0;
		}
	}
	if( m_nCurFrame == 0 && m_bIsC35Frame == FALSE ) {
		m_nFramePoll |= NSAP_C35_FRAME;
		dev_addr++;
		if( dev_addr > endaddr ) {
			dev_addr = startaddr;
			m_bIsC35Frame = TRUE;
		}
	}
	if( m_nCurFrame == 0 && m_bIsC35Frame == TRUE && m_bPoll == TRUE ) {
		if( m_bPolling == TRUE ) {
			dev_addr++;
			if( dev_addr > endaddr ) dev_addr = startaddr;
			m_nFramePoll++;
		}
		else m_nPollCount++;
		if( m_nPollCount > 3 ) m_nPollCount = 0;
		if( m_nPollCount == 0 ) {
			m_nFramePoll |= NSAP_C1_FRAME;
		}
		else if( m_nPollCount == 1 ) {
			m_nFramePoll |= NSAP_C20_FRAME;
		}
		else if( m_nPollCount == 2 ) {
			m_nFramePoll |= NSAP_C15_FRAME;
		}
		else if( m_nPollCount == 3 ) {
			m_nFramePoll |= NSAP_C19_FRAME;
		}
		else if( m_nPollCount == 4 ) {
			m_nFramePoll |= NSAP_C4_FRAME;
		}
		else if( m_nPollCount == 5 ) {
			m_nFramePoll |= NSAP_C16_FRAME;
		}
	}
	if( m_nSendTime == 300 ) {
//		m_nFramePoll |= NSAP_C8_FRAME;
		m_nSendTime = 0;
	}
}

void CTestLFPProtocolView::MainSystemWait( void )
{
	if( dev_ctrl.system_type == SYS_IDEL ) return;
	if( dev_ctrl.system_type == YK_EXECUTE ) {
		CLfpYk	dlg;
		dev_ctrl.system_type = SYS_IDEL;
		dlg.yktype = YK_EXECUTE;
		dlg.m_bykcmd = m_bYkValue;
		dlg.m_yknum = m_bYkNum;
		if( dlg.DoModal() == IDOK ) {
			nYkState = YK_EXECUTE;
			dev_ctrl.dev_ctrl_yk = TRUE;
		}
		else {
			nYkState = YK_CANCEL;
			dev_ctrl.dev_ctrl_yk = TRUE;
		}
	}
	else if( dev_ctrl.system_type == SET_VALUE ) {
		dev_ctrl.system_type = SYS_IDEL;
		if(	AfxMessageBox( "定值修改返校成功,确认修改?", MB_OKCANCEL) == IDOK ) {
			dev_ctrl.dev_ack_settings = TRUE;
		}
		else {
		}
		dev_ctrl.dev_setted_settings = FALSE;
	}
}

void CTestLFPProtocolView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch( nIDEvent ) {
	case PROTOCOL_RUN:	MainRun();	break;
	case PROTOCOL_POLL:	MainSend();	break;
	case WAIT_TIME:		MainSystemWait();	break;
	default:	break;
	}
	CFormView::OnTimer(nIDEvent);
}

void CTestLFPProtocolView::OnSystemSetting() 
{
	// TODO: Add your command handler code here
	CPollSet	dlg;
	sprintf( dlg.m_staddr, "%d", startaddr );
	sprintf( dlg.m_enaddr, "%d", endaddr );
	if( dlg.DoModal() == IDOK ) {
		startaddr = (BYTE)atoi( dlg.m_staddr );
		endaddr = (BYTE)atoi( dlg.m_enaddr );
	}
}

void CTestLFPProtocolView::ReadConfig( void )
{
	int				m_num;
	int				count = 0;
	CString			mItem;
	CStringArray	m_StrArray;
	CIniFile	config( ".//config.ini" );
	config.ReadSection( "port_set", m_StrArray );
	m_num = m_StrArray.GetSize();
	if( m_num <= 0 ) {
		AfxMessageBox( "没有找到config.ini或格式非法!" );
		return;
	}
	mItem = m_StrArray.GetAt( count++ );
	mItem = config.ReadString( "port_set", mItem );
	if( mItem != "" ) strcpy( strComNo, mItem.GetBuffer( 0 ) );
	if( count >= m_num ) return;
	mItem = m_StrArray.GetAt( count++ );
	mItem = config.ReadString( "port_set", mItem );
	if( mItem != "" ) dwBaudRate = (DWORD)atoi( mItem.GetBuffer( 0 ) );
	if( count >= m_num ) return;
	mItem = m_StrArray.GetAt( count++ );
	mItem = config.ReadString( "port_set", mItem );
	if( mItem != "" ) DataSize = (BYTE)atoi( mItem.GetBuffer( 0 ) );
	if( count >= m_num ) return;
	mItem = m_StrArray.GetAt( count++ );
	mItem = config.ReadString( "port_set", mItem );
	if( mItem != "" ) Parity = atoi( mItem.GetBuffer( 0 ) );
	if( count >= m_num ) return;
	mItem = m_StrArray.GetAt( count );
	mItem = config.ReadString( "port_set", mItem );
	if( mItem != "" ) StopBit = atoi( mItem.GetBuffer( 0 ) );

	config.ReadSection( "system", m_StrArray );
	m_num = m_StrArray.GetSize();
	if( m_num <= 0 ) {
		AfxMessageBox( "没有找到config.ini或格式非法!" );
		return;
	}
	count = 0;
	mItem = m_StrArray.GetAt( count++ );
	mItem = config.ReadString( "system", mItem );
	if( mItem != "" ) startaddr = (BYTE)atoi( mItem );
	if( count >= m_num ) return;
	mItem = m_StrArray.GetAt( count++ );
	mItem = config.ReadString( "system", mItem );
	if( mItem != "" ) endaddr = (BYTE)atoi( mItem );
	if( count >= m_num ) return;
	mItem = m_StrArray.GetAt( count );
	mItem = config.ReadString( "system", mItem );
	strcpy( filepath, mItem.GetBuffer( 0 ) );



	config.ReadSection( "model", m_StrArray );
	m_num = m_StrArray.GetSize();
	if( m_num <= 0 ) {
		AfxMessageBox( "没有找到config.ini或格式非法!" );
		return;
	}
	dev_num = m_num;
	for( int i = 0; i < m_num; i++ ) {
		mItem = m_StrArray.GetAt( i );
		mItem = config.ReadString( "model", mItem );
		sscanf( (LPSTR)(LPCTSTR)mItem, "%x %s", &m_devtype[i].dev_type, m_devtype[i].dev_name );
	}
}

void CTestLFPProtocolView::OnFileOpen() 
{
	// TODO: Add your command handler code here
	static char displayname[MAX_PATH];
    LPITEMIDLIST pidlBrowse;    // PIDL selected by user 
	BROWSEINFO bi;
	bi.hwndOwner = this->m_hWnd;
	bi.pidlRoot = NULL;
	bi.pszDisplayName = displayname;
	bi.lpszTitle = "请选择NSA3000装置模板所在的文件夹";
	bi.ulFlags = BIF_EDITBOX ;
	bi.lpfn = NULL;
	pidlBrowse = SHBrowseForFolder( &bi );
	if( pidlBrowse != NULL ) {
		SHGetPathFromIDList( pidlBrowse, filepath );
	}
	m_bEnable = FALSE;
}

void CTestLFPProtocolView::OnUpdateFileOpen(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable( m_bEnable );
}

void CTestLFPProtocolView::OnFileSave() 
{
	// TODO: Add your command handler code here
	char		text[32];
	CIniFile	config( ".//config.ini" );
	config.WriteString( "port_set", "comno", strComNo );
	sprintf( text, "%d", dwBaudRate );
	config.WriteString( "port_set", "baudrate", text );
	sprintf( text, "%d", DataSize );
	config.WriteString( "port_set", "datasize", text );
	sprintf( text, "%d", Parity );
	config.WriteString( "port_set", "parity", text );
	sprintf( text, "%d", StopBit );
	config.WriteString( "port_set", "stopbit", text );
	sprintf( text, "%d", startaddr );
	config.WriteString( "system", "startaddr", text );
	sprintf( text, "%d", endaddr );
	config.WriteString( "system", "endaddr", text );
	config.WriteString( "system", "path", filepath );
}

WORD CTestLFPProtocolView::GetCheckSum16( BYTE* pData, int count )
{
	int i;
	WORD result = 0;
	BYTE* pBuf = pData;

	for( i = 0; i < count; i++ ) {
		result += *pBuf;
		pBuf++;
	}

	return result;
}

BOOL CTestLFPProtocolView::GetACKFrame( BYTE* buffer, int& count )
{
	BYTE* pData = buffer;

	*pData = dev_addr; pData++;
	*pData = NSAP_ACK; pData++;
	*pData = 1; pData++;
	*pData = 0; pData++;
	*pData = 4; pData++;
	count = 4;
	return TRUE;
}

BOOL CTestLFPProtocolView::GetC7Frame( BYTE* buffer, int& count, DWORD& frame )
{
	BYTE* pData = buffer;

	if( dev_ctrl.dev_ctrl_reset == FALSE ) return FALSE;
	*pData = 0xff; pData++;
	*pData = NSAP_C7; pData++;
	*pData = 1; pData++;
	*pData = 0; pData++;
	*pData = 4; pData++;
	count = 4;
	dev_ctrl.dev_ctrl_reset = FALSE;
	return TRUE;
}

BOOL CTestLFPProtocolView::GetC8Frame( BYTE* buffer, int& count, DWORD& frame )
{
	SYSTEMTIME	systemtime;
	WORD millsec;
	BYTE* pData = buffer;

	if( dev_ctrl.dev_set_time == FALSE ) return FALSE;
	*pData = 0xff; pData++;
	*pData = NSAP_C8; pData++;
	*pData = 1; pData++;
	*pData = 0; pData++;
	*pData = 12; pData++;
	GetLocalTime( &systemtime );
	millsec = systemtime.wMilliseconds; millsec *= 10;
	if( millsec > 900 ) {
		m_nFramePoll |= NSAP_C8_FRAME;
		return FALSE;
	}
	millsec += 40;
	*pData = systemtime.wYear - 2000; pData++;
	*pData = systemtime.wMonth & 0x00ff; pData++;
	*pData = systemtime.wDay & 0x00ff; pData++;
	*pData = systemtime.wHour & 0x00ff; pData++;
	*pData = systemtime.wMinute & 0x00ff; pData++;
	*pData = systemtime.wSecond & 0x00ff; pData++;
	*pData = millsec & 0x00ff; pData++;
	*pData = (millsec >> 8) & 0x00ff;
	count = 12;
	dev_ctrl.dev_set_time = FALSE;
	return TRUE;
}

BOOL CTestLFPProtocolView::GetC1Frame( BYTE* buffer, int& count )
{
	BYTE* pData = buffer;
	*pData = dev_addr; pData++;
	*pData = NSAP_C1; pData++;
	*pData = 1; pData++;
	*pData = 0; pData++;
	*pData = 4; pData++;
	count = 4;
	return TRUE;
}

BOOL CTestLFPProtocolView::GetC2Frame( BYTE* buffer, int& count, DWORD& frame )
{
	BYTE* pData = buffer;
	if( dev_ctrl.dev_call_settings == FALSE ) return FALSE;
	*pData = dev_addr; pData++;
	*pData = NSAP_C2; pData++;
	*pData = 1; pData++;
	*pData = 0; pData++;
	*pData = 4; pData++;
	count = 4;
	frame = NSAP_C2;
	dev_ctrl.dev_call_settings = FALSE;
	return TRUE;
}

BOOL CTestLFPProtocolView::GetC9Frame( BYTE* buffer, int& count, DWORD& frame )
{
	int		i, j;
	BYTE*	pData = buffer;
	BYTE	nTemp = 0x01;
	float	value = 0.0;
	WORD	aivalue;
	CString	str;
	if( dev_ctrl.dev_set_settings == FALSE ) return FALSE;
	CTestLFPProtocolApp* pApp = ( CTestLFPProtocolApp* )AfxGetApp();
	*pData = dev_addr; pData++;
	*pData = NSAP_C9; pData++;
	*pData = 1; pData++;
	*pData = 0; pData++;
	*pData = 8; pData++;
	buffer[4] = 8;
	str = pApp->m_pMainFrame->m_pSettingValueListCtrl.GetItemText( 0, 2 );
	*pData = (BYTE)atoi( str.GetBuffer( 0 ) );pData++;
	*pData = 0x55; pData++;
	*pData = aivalue_num; pData++;
	*pData = divalue_num; pData++;
	for( i = 0; i < aivalue_num; i++ ) {
		str = pApp->m_pMainFrame->m_pSettingValueListCtrl.GetItemText( i+1, 2 );
		value = (float)atof( str.GetBuffer( 0 ) );
		value += (float)0.004;
		value *= 100;
		aivalue = (WORD)value;
		*pData = aivalue&0xff; pData++;
		*pData = (aivalue>>8)&0xff; pData++;
		buffer[4] += 2;
	}
	for( i = 0; i < (divalue_num+7)/8; i++, pData++ ) {
		*pData = 0;
		nTemp = 0x01;
		for( j = 0; j < 8; j++ ) {
			str = pApp->m_pMainFrame->m_pSettingValueListCtrl.GetItemText( (i<<3)+j+1+aivalue_num, 2 );		
			if( str == "投入" || str == "跳闸" ) {
				*pData |= nTemp;
			}
			else if( str == "退出" || str == "报警" ) {
				*pData &= ~nTemp;
			}
			nTemp <<= 1;
		}
		buffer[4]++;
	}
	count = buffer[4];
	frame = NSAP_C9;
	dev_ctrl.dev_set_settings = FALSE;
	dev_ctrl.dev_setted_settings = TRUE;
	return TRUE;
}

BOOL CTestLFPProtocolView::GetC10Frame( BYTE* buffer, int& count, DWORD& frame )
{
	BYTE* pData = buffer;
	if( dev_ctrl.dev_ack_settings == FALSE ) return FALSE;
	*pData = dev_addr; pData++;
	*pData = NSAP_C10; pData++;
	*pData = 1; pData++;
	*pData = 0; pData++;
	*pData = 4; pData++;
	count = 4;
	frame = NSAP_C10;
	dev_ctrl.dev_ack_settings = FALSE;
	return TRUE;
}

BOOL CTestLFPProtocolView::GetC11Frame( BYTE* buffer, int& count, DWORD& frame )
{
	BYTE* pData = buffer;
	if( dev_ctrl.dev_setting_area == FALSE ) return FALSE;
	*pData = dev_addr; pData++;
	*pData = NSAP_C11; pData++;
	*pData = 1; pData++;
	*pData = 0; pData++;
	*pData = 4; pData++;
	count = 4;
	frame = NSAP_C11;
	dev_ctrl.dev_setting_area = FALSE;
	return TRUE;
}

BOOL CTestLFPProtocolView::GetC12Frame( BYTE* buffer, int& count, DWORD& frame )
{
	BYTE* pData = buffer;
	if( dev_ctrl.dev_ack_area == FALSE ) return FALSE;
	*pData = dev_addr; pData++;
	*pData = NSAP_C12; pData++;
	*pData = 1; pData++;
	*pData = 0; pData++;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -