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