📄 iec103dlg.cpp
字号:
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 + -