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

📄 iec103dlg.cpp

📁 IEC60870-5-103规约测试工具。 目前只能打开COM1口
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				if ( DataType == 1 )
				{
					memset( &temp, '\0', sizeof( temp ) );
					memcpy( temp, (pData+6+j), pData[j+4] );
					AddColorLine( temp );
					str.Format( "%d", m_ListCount );
					Protectdlg->m_List.InsertItem( m_ListCount, str );
					Protectdlg->m_List.SetItemText( m_ListCount, 1, (LPCTSTR)temp );
					m_ListCount++;
				}
				else if ( DataType == 3 )
				{
					m_shortvalue = 0;
					memcpy( &m_shortvalue, (pData+6+j), pData[j+4] );
					str.Format( "%d", m_shortvalue );
					AddColorLine( str );
					Protectdlg->m_List.SetItemText( m_ListData, 2, (LPCTSTR)str );
					m_ListData++;
				}
				else if ( DataType == 7 )
				{
					m_floatvalue = 0.0f;
					memcpy( &m_floatvalue, (pData+6+j), pData[j+4] );
					str.Format( "%.3f", m_floatvalue );
					AddColorLine( str );
					Protectdlg->m_List.SetItemText( m_ListData, 2, (LPCTSTR)str );
					m_ListData++;
				}
				str.Format( "通用标识序号GIN条目= %d ", pData[j] );
				AddColorString( str );
				str.Format( "通用标识序号GIN组 = %d ", pData[1+j] );
				AddColorString( str );
				str.Format( "描述类别KOD= %d ", pData[2+j] );
				AddColorString( str );
				str.Format( "数据类型DATATYPE= %d ", DataType );
				AddColorString( str );
				str.Format( "数据宽度DATASIZE= %d ", pData[4+j] );
				AddColorString( str );
				str.Format( "数目NUMBER= %d", pData[5+j]&0x7f );
				AddColorString( str );
				str.Format( "后续状态位CONT= %d", (pData[5+j]>>7) );
				AddColorLine( str );
				j += 6+pData[j+4];
			}
			if ( m_Cont )
			{
			}
			else
			{
				if ( m_Rii == 3 )
				{
// 					m_Gin++;
// 					if ( m_Gin >= m_Ngd )
// 					{
// 						m_Gin = 0;
// 					}
// 					else
// 					{
// 						m_nPollFrame |= GEN2_FRAME;
// 					}
				}
				else
				{
					m_nPollFrame |= GEN3_FRAME;
				}
			}
		}
		break;
	}
}

void CIEC103Dlg::ProcYX( BYTE* buffer, int count /* = 0  */)
{
	int i;
	BYTE DPI;
	for( i = 0; i < count; i++ ) {
		CString temp, str = "";
		temp.Format( "FUN= %3d ", buffer[10+i*3] );
		str += temp;
		temp.Format( "INF= %3d ", buffer[11+i*3] );
		str += temp;
		DPI = (buffer[12+i*3]&0x03);
		temp.Format( "DPI= %02X ", DPI );
		str += temp;
		switch( DPI ) {
		case 1:		temp = " 开(OFF)";	break;
		case 2:		temp = " 合(ON)";	break;
		default:	temp = " 未用";		break;
		}
		str += temp;
		AddColorLine( str );
	}
}

void CIEC103Dlg::ProcYC( BYTE* buffer, int count /* = 0  */)
{
	int i;
	short Value;
	for( i = 0; i < count; i++ ) {
		CString temp, str = "";
		temp.Format( "FUN= %3d ", buffer[10] );
		str += temp;
		
		temp.Format( "INF= %3d ", buffer[11+i*3]);
		str += temp;

		Value = buffer[13+i*3];
		Value <<= 8;
		Value += buffer[12+i*3];
		temp.Format( "VAL= %3d ", Value );
		str += temp;
		AddColorLine( str );			
	}
}

void CIEC103Dlg::ProcDD( BYTE* buffer, int count /* = 0  */)
{
	int i;
	DWORD Value;
	for( i = 0; i < count; i++ ) {
		CString str = "";
		memcpy( &Value, &buffer[12+i*5], 4 );
		str.Format( "PIN= %3d ", Value );
		AddColorLine( str );			
	}
}

BYTE CIEC103Dlg::GetSYNC( BYTE* buffer, int count /* = 0  */)
{
	if ( buffer[0] == LPCI_SYN && buffer[4] == LPCI_ETX )
	{
		return LPCI_SYN;
	}
	if ( buffer[0] == LPCI_STX && buffer[3] == LPCI_STX )
	{
		if ( buffer[1] == buffer[2] )
		{
			return LPCI_STX;
		}
	}
	return 0;
}

void CIEC103Dlg::RCU_NA( BYTE* buffer, int& count )
{
	IEC103data.fcb = 0;
	buffer[0] = LPCI_SYN;
	buffer[1] = 0x40|C_RCU_NA;
	buffer[2] = 1;
	buffer[3] = buffer[1]+buffer[2];
	buffer[4] = LPCI_ETX;
	count = 5;
}

void CIEC103Dlg::PL1_NA( BYTE* buffer, int& count )
{
	buffer[0] = LPCI_SYN;
	buffer[1] = 0x40|IEC103data.fcb|IEC103data.fcv|C_PL1_NA;
	buffer[2] = 1;
	buffer[3] = buffer[1]+buffer[2];
	buffer[4] = LPCI_ETX;
	count = 5;
}

void CIEC103Dlg::PL2_NA( BYTE* buffer, int& count )
{
	buffer[0] = LPCI_SYN;
	buffer[1] = 0x40|IEC103data.fcb|IEC103data.fcv|C_PL2_NA;
	buffer[2] = 1;
	buffer[3] = buffer[1]+buffer[2];
	buffer[4] = LPCI_ETX;
	count = 5;
}

void CIEC103Dlg::IGI_NA( BYTE* buffer, int& count ) //总召唤启动
{
	static time;
	buffer[0] = LPCI_STX;
	buffer[1] = 0x09;
	buffer[2] = 0x09;
	buffer[3] = LPCI_STX;
	buffer[4] = 0x40|IEC103data.fcb|IEC103data.fcv|C_SND_AK;
	buffer[5] = 0x01;
	buffer[6] = C_IGI_NA;
	buffer[7] = 0x81;
	buffer[8] = COT_IGI;
	buffer[9] = 0x01;
	buffer[10] = FUN_GLB;
	buffer[11] = 0x00;
	buffer[12] = time;
	buffer[13] = SumCheck( &(buffer[4]), buffer[1] );
	buffer[14] = LPCI_ETX;
	count = 15;
	time++;
}

void CIEC103Dlg::SYN_TA( BYTE* buffer, int& count )  /* Clock Synchronization */
{
	SYSTEMTIME osTime;
	BYTE ChkSum=0; 
	buffer[0] = LPCI_STX;
	buffer[1] = 15;
	buffer[2] = 15;
	buffer[3] = LPCI_STX;
	buffer[4] = 0x40|IEC103data.fcb|IEC103data.fcv|C_SYN_NK;
	buffer[5] = 0xff;
	buffer[6] = C_SYN_TA; 
	buffer[7] = 0x81; 
	buffer[8] = COT_SYN;
	buffer[9] = 0xff;   
	buffer[10] = FUN_GLB;    
	buffer[11] = 0;
	GetLocalTime((SYSTEMTIME*) &osTime);
	buffer[12] = LOBYTE(osTime.wMilliseconds+osTime.wSecond*1000);    //ms_L
	buffer[13] = HIBYTE(osTime.wMilliseconds+osTime.wSecond*1000);    //ms_H
	buffer[14] = LOBYTE(osTime.wMinute);
	buffer[15] = LOBYTE(osTime.wHour);
	BYTE aa = LOBYTE(osTime.wDay);
	buffer[16] =aa+(BYTE)((LOBYTE(osTime.wDayOfWeek))<<5);
	buffer[17] = LOBYTE(osTime.wMonth);
	buffer[18] = LOBYTE(osTime.wYear-2000);
	buffer[19] = SumCheck( &(buffer[4]), buffer[1] );
	buffer[20] = LPCI_ETX;
	count = 21;
}
/*
void CIEC103Dlg::GEN_NA( BYTE* buffer, int& count ) //电度
{
	buffer[0] = LPCI_STX;
	buffer[1] = 10;
	buffer[2] = 10;
	buffer[3] = LPCI_STX;
	buffer[4] = 0x40|IEC103data.fcb|IEC103data.fcv|C_SND_AK;;
	buffer[5] = 1;
	buffer[6] = 0x58;    //TYP	88
	buffer[7] = 0x1;    // 
	buffer[8] = 2;
	buffer[9] = 1;
	buffer[10] = 1;
	buffer[11] = 0;
	buffer[12] = 0x45;
	buffer[13] = 1;//RII
	buffer[14] = SumCheck( &(buffer[4]), buffer[1] );
	buffer[15] = LPCI_ETX;
	count = 16;
	m_GEN_NA = FALSE;
}
*/

void CIEC103Dlg::GEN1_NA( BYTE* buffer, int& count )
{
	buffer[0] = LPCI_STX;
	buffer[1] = 10;
	buffer[2] = 10;
	buffer[3] = LPCI_STX;
	buffer[4] = 0x40|IEC103data.fcb|IEC103data.fcv|C_SND_AK;
	buffer[5] = 1;
	buffer[6] = 21;
	buffer[7] = 0x81;
	buffer[8] = 42;
	buffer[9] = 1;
	buffer[10] = 254;
	buffer[11] = 240;
	buffer[12] = 2;
	buffer[13] = 0;
	buffer[14] = SumCheck( &(buffer[4]), buffer[1] );
	buffer[15] = LPCI_ETX;
	count = 16;
}

void CIEC103Dlg::GEN2_NA( BYTE* buffer, int& count )
{
	buffer[0] = LPCI_STX;
	buffer[1] = 0x0d;
	buffer[2] = 0x0d;
	buffer[3] = LPCI_STX;
	buffer[4] = 0x40|IEC103data.fcb|IEC103data.fcv|C_SND_AK;
	buffer[5] = 1;
	buffer[6] = 21;
	buffer[7] = 0x81;
	buffer[8] = 42;
	buffer[9] = 1;
	buffer[10] = 254;
	buffer[11] = 241;
	buffer[12] = 2;
	buffer[13] = 1;
	buffer[14] = m_Gin;//
	buffer[15] = 0;
	buffer[16] = 10;
	buffer[17] = SumCheck( &(buffer[4]), buffer[1] );
	buffer[18] = LPCI_ETX;
	count = 19;
}

void CIEC103Dlg::GEN3_NA( BYTE* buffer, int& count )
{
	buffer[0] = LPCI_STX;
	buffer[1] = 0x0d;
	buffer[2] = 0x0d;
	buffer[3] = LPCI_STX;
	buffer[4] = 0x40|IEC103data.fcb|IEC103data.fcv|C_SND_AK;
	buffer[5] = 1;
	buffer[6] = 21;
	buffer[7] = 0x81;
	buffer[8] = 42;
	buffer[9] = 1;
	buffer[10] = 254;
	buffer[11] = 241;
	buffer[12] = 3;
	buffer[13] = 1;
	buffer[14] = m_Gin;//
	buffer[15] = 0;
	buffer[16] = 1;
	buffer[17] = SumCheck( &(buffer[4]), buffer[1] );
	buffer[18] = LPCI_ETX;
	count = 19;
}

void CIEC103Dlg::WGC0_NA( BYTE* buffer, int& count )
{
	BYTE buf[MAX_SIZE/2];
	memset( &buf, 0xcc, sizeof( buf ) );
	buf[0] = LPCI_STX;
	buf[3] = LPCI_STX;
	buf[4] = 0x40|IEC103data.fcb|IEC103data.fcv|C_SND_AK;
	buf[5] = 1;
	buf[6] = 0;
	buf[7] = 0x81;
	buf[8] = 40;
	buf[9] = 1;
	buf[10] = 254;
	buf[11] = 249;
	buf[12] = 5;
	buf[13] = 17;//data;
	int j = 0;
	int len = 0;
	int cont =1;
	for ( int i = 0; i < 2; i++ )
	{
		buf[14+j] = 1;//条目
		buf[15+j] = cont++;//组
		buf[16+j] = 1;
		buf[17+j] = 7;
		buf[18+j] = 4;
		buf[19+j] = 1;
		float m_float;
		CString str;
		str = Protectdlg->m_List.GetItemText( i+1, 2 );
		m_float = (float)atof( str.GetBuffer( 0 ) );
		memcpy( &buf[20+j], &m_float, 4 );
		j += buf[18+j]+6;
		len += j;
	}
	buf[14+j] = SumCheck( &buf[4], len );
	buf[1] = len+16;
	buf[2] = len+16;

}

void CIEC103Dlg::WGC1_NA( BYTE* buffer, int& count )
{

}

BYTE CIEC103Dlg::SumCheck( BYTE* buffer, int count )
{
	BYTE result = 0;
	for( int i = 0; i < count; i++ ) result += buffer[i];
	return result;
}

void CIEC103Dlg::OnBtnClose() 
{
	// TODO: Add your control notification handler code here
	SerialCom.CloseSerial( m_hCom );
	system.opened = FALSE;
	GetDlgItem( IDC_BTN_OPEN )->EnableWindow( TRUE );
	GetDlgItem( IDC_BTN_CLOSE )->EnableWindow( FALSE );
	GetDlgItem( IDC_BTN_PROTECT )->EnableWindow( FALSE );
}

void CIEC103Dlg::OnBtnOpen() 
{
	// TODO: Add your control notification handler code here
	DCB dcb;
	dcb.BaudRate = 9600; dcb.ByteSize = 8;
	dcb.StopBits = ONESTOPBIT; dcb.Parity = EVENPARITY;
	m_hCom = SerialCom.OpenSerial( 1, dcb );
	if( m_hCom != INVALID_HANDLE_VALUE ) {
		Init();
		StartIEC103Thread();
		GetDlgItem( IDC_BTN_OPEN )->EnableWindow( FALSE );
		GetDlgItem( IDC_BTN_CLOSE )->EnableWindow( TRUE );
		GetDlgItem( IDC_BTN_PROTECT )->EnableWindow( TRUE );
	}
}

void CIEC103Dlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	CRect rect;
	GetClientRect( rect );
	rect.top = 35; rect.bottom -= 10;
	rect.left = 10; rect.right -= 10;
	m_msg.MoveWindow( rect );
}

void CIEC103Dlg::OnBtnProtect() 
{
	// TODO: Add your control notification handler code here
	m_Gin = 1;
	m_ListCount = 0;
	m_ListData = 0;
	m_nPollFrame |= GEN2_FRAME;
	Protectdlg = new CIEC103ProtectEx( this );
	Protectdlg->Create( IDD_DIALOG_PROTECT, this );
	Protectdlg->ShowWindow( SW_SHOW );
	Protectdlg->SetActiveWindow();
	Protectdlg->dlg = this;
}

void CIEC103Dlg::OnBtnSet() 
{
	// TODO: Add your control notification handler code here
	m_nPollFrame |= WGC0_FRAME;
}

void CIEC103Dlg::OnCheckShow() 
{
	// TODO: Add your control notification handler code here
	m_bShowMSG = !m_bShowMSG;
}

⌨️ 快捷键说明

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