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

📄 trans.cpp

📁 VC环境下电力系统故障录波数据管理系统
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// Trans.cpp : implementation file
//

#include "stdafx.h"
#include "wgl_32.h"
#include "Trans.h"
#include "TTY.h"
#include "ShowWyy.h"
#include "Dialing.h"
#include "Analysis.h"

#include "ZhxSet.h"

#include <stdio.h>
#include <io.h>
#include <time.h>

#define WM_TRANS_MESSAGE WM_USER +101

#define HEADSIZE  256
#define BLOCKSIZE 512L

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

extern CDialing MMyDialing;
extern CZhxSet CMySet;
/////////////////////////////////////////////////////////////////////////////
// CTrans dialog

CTrans::CTrans(CWnd* pParent /*=NULL*/)
	: CDialog(CTrans::IDD, pParent)
{
   lstrcpy(szName, "c:\\wgl-12\\data");
   memset(m_PerStr, 0x00, sizeof(m_PerStr));
   memset(&FileHead, 0x00, sizeof(FileHead));
   memset(&NameIndex, 0x00, sizeof(NameIndex));
   
   TransStatus = 0;
   //{1,1,1,1,1,512,-1}	

   for(int i=0;i<5;i++)
		TransFlag[0][i] =1;
	TransFlag[0][5] = 512;
	TransFlag[0][6]	= -1;		
	//{1,80,1,4100,1,512, -1}
	TransFlag[1][0] = 1;
	TransFlag[1][1]	= 80;		
	TransFlag[1][2] = 1;
	TransFlag[1][3]	= BLOCKSIZE + 4;		
	TransFlag[1][4] = 1;
	TransFlag[1][5]	= 512;		
	TransFlag[1][6] = -1;
   FLAG = 6;
   SendOrRece = 0;

	//{{AFX_DATA_INIT(CTrans)
	m_HangUp = FALSE;
	//}}AFX_DATA_INIT
}


void CTrans::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTrans)
	DDX_Control(pDX, IDC_LIST1, m_List1Ctrl);
	DDX_Control(pDX, IDC_LIST2, m_List2Ctrl);
	DDX_Check(pDX, IDC_HANGUP, m_HangUp);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTrans, CDialog)
	//{{AFX_MSG_MAP(CTrans)
	ON_BN_CLICKED(IDC_HANGUP, OnHangup)
	ON_WM_PAINT()
	ON_BN_CLICKED(IDC_RECEIVE, OnReceive)
	ON_MESSAGE(WM_TRANS_MESSAGE, OnWMTRANSMESSAGE)
	ON_NOTIFY(NM_CLICK, IDC_LIST2, OnClickList2)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST2, OnDblclkList2)
	ON_BN_CLICKED(IDC_GETDIR, OnGetdir)
	ON_BN_CLICKED(IDC_RECEIVE_CONFIG, OnReceiveConfig)
	ON_BN_CLICKED(IDC_REDIAL, OnRedial)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTrans message handlers

BOOL CTrans::OnInitDialog() 
{
	CDialog::OnInitDialog();
    
	UINT ID_No[3] = {IDS_TOPIC1_STRING, IDS_TOPIC2_STRING, IDS_TOPIC3_STRING};
	CString Topic;
	LV_COLUMN lv_Column;

	for(int i = 0; i<3; i++)
	   {
	    memset(&lv_Column, 0x00, sizeof(LV_COLUMN));
		lv_Column.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
        lv_Column.fmt  = LVCFMT_LEFT;
	    
		if(i==0)lv_Column.cx = 100;
		else if (i==1)lv_Column.cx = 130;
		else lv_Column.cx = 80;

	    Topic.LoadString(ID_No[i]);
	    lv_Column.pszText  =(char *) LPCTSTR(Topic);
	    lv_Column.cchTextMax = Topic.GetLength();
	    lv_Column.iSubItem = i;
        ((CListCtrl *)GetDlgItem(IDC_LIST1))->InsertColumn(i, &lv_Column);
	    ((CListCtrl *)GetDlgItem(IDC_LIST2))->InsertColumn(i, &lv_Column);
       }
    
	// TODO: Add extra initialization here
	GetDlgItem(IDC_STATUS)->GetWindowRect(&m_StatusRect);
	ScreenToClient(&m_StatusRect);
    
	m_HangUp = TRUE;
	((CButton *)GetDlgItem(IDC_HANGUP))->SetCheck(1);
	((CButton *)GetDlgItem(IDC_SEND))->EnableWindow(FALSE);
	((CButton *)GetDlgItem(IDC_RECEIVE))->EnableWindow(FALSE);

    AddLeftList();    
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CTrans::OnHangup() 
{
	// TODO: Add your control notification handler code here
	m_HangUp ^=  1;

}

void CTrans::OnOK() 
{
	// TODO: Add extra validation here
	if(m_HangUp == TRUE)
	   MyTTY.CloseConnection();
	UpdateData();
	DestroyWindow();
	
}

void CTrans::OnCancel() 
{
	// TODO: Add extra cleanup here
	if(m_HangUp == TRUE)
	   MyTTY.CloseConnection();
	DestroyWindow();
}

/*
void CTrans::OnSend() 
{
	CListCtrl *temp;
	temp = (CListCtrl *)GetDlgItem(IDC_LIST1);

	((CButton *)GetDlgItem(IDC_SEND))->EnableWindow(TRUE);
	((CButton *)GetDlgItem(IDC_RECEIVE))->EnableWindow(FALSE);

    UINT Count = temp->GetItemCount();
	LV_ITEM lvItem;
    char FileName[13];

	for(UINT i=0; i<Count; i++)
	   {
	     memset(&lvItem, 0x00, sizeof(LV_ITEM));

         lvItem.mask = LVIF_TEXT|LVIF_STATE;
		 lvItem.iItem = i;
		 lvItem.iSubItem = 0;
         lvItem.pszText = FileName;
         lvItem.cchTextMax = 12;
         lvItem.stateMask = LVIS_SELECTED;
                  
		 BOOL WWW = temp->GetItem(&lvItem);

		 if(lvItem.mask & LVIF_STATE)
		   {
		    if(lvItem.state & LVIS_SELECTED)break;
		   }
	   }
    if(i==Count)return;

	char tempstr[13];
	temp->GetItemText(i, 0, tempstr, 13);
	lstrcpy(szName, m_strRecordPath.GetBuffer(_MAX_DIR));
	m_strRecordPath.ReleaseBuffer();
	lstrcat(szName, tempstr);
    WyySendFile();
}
*/

void CTrans::Delay(UINT Dtime)
{
 DWORD OldTime;
 OldTime = GetCurrentTime();
 while((GetCurrentTime() - OldTime) < Dtime);
}


int CTrans::WyyReceFile(void)
{
 DWORD OldTime, TimeOut,OldTwo;
 int i;
 BOOL wyyt=TRUE;
 BYTE far *buf;
 char ch;
 int SENDTIME = 0;

NEXTTIME:
TransStatus = RECEIVING;
 lstrcpy(StatusStr, "正在准备接收,请稍等...");
 InvalidateRect(&m_StatusRect);
 UpdateWindow();
 
 if( MissConnected() )
	{ AfxMessageBox("调制解调器没有连通!"); return (-1); }

 if(strlen(szName)==0)return (-1);

 buf = (BYTE far *)malloc(512);
 if(buf==NULL)
	{ AfxMessageBox("No enough memory.",MB_OK); return (-1);}
 buf[0]=0x81; buf[1]=0x00; buf[2]=0x01; buf[3] = 0x02;
 buf[4]='W';  buf[5]='M';  buf[7]=2;

 strcpy((char *)(buf+8), szName);
 buf[8+strlen(szName)+1]=-1;
 buf[8+strlen(szName)+2]=-1;
 ch=0;
 for(i=7;i<512;i++)ch+=buf[i];
 buf[6]=ch;

 WriteCommBlock( MyTTY.npTTYInfo, buf , 512);
 
 MyTTY.npTTYInfo->HeadPtr = 0;
 MyTTY.npTTYInfo->TailPtr = 0;
 
 OldTwo = TimeOut=0;
 OldTime = GetCurrentTime();
 while(MyTTY.npTTYInfo->HeadPtr==0 && TimeOut<30)
  {
	if( MissConnected() )
	  {
		 AfxMessageBox("线路中断!");
		 free(buf);	return (-1);
	  }	
	TimeOut = (GetCurrentTime()-OldTime)/1000;
  }
 free(buf);
 if(TimeOut>=30)
 {
 	 if(SENDTIME<3)
	{
		SENDTIME++;
		Sleep(100);
		goto NEXTTIME;
	}
 }
 if(MyTTY.npTTYInfo->Queue[MyTTY.npTTYInfo->TailPtr]==0x90)
	 {
	   Sleep(10);
	   int lll = ReceiveFile();
	  if(lll>0)
	  {
		  WinExec("arj e send.arj -y",SW_HIDE);
		  Sleep(2000);
		  int Index = GetNewName();
		  
		  wsprintf(WyyFileName,"%swgu%02d.wgl", m_strRecordPath, Index);
		  rename(ReceFileName, WyyFileName);
		  remove(ReceFileName);
		  ((CListCtrl *)GetDlgItem(IDC_LIST1))->DeleteAllItems( );
		  AddLeftList();
		  return (1);
	  }
	  return (0);
	 }
 else
	{	
	 if(SENDTIME<3)
	{
		SENDTIME++;
		Sleep(100);
		goto NEXTTIME;
	}
	 AfxMessageBox("出错: 等待远方的握手信号出错!",MB_OK);
	 return (-1);
	}
}


int CTrans::WyyReceConfig(void)
{
 DWORD OldTime, TimeOut,OldTwo;
 int i;
 BOOL wyyt=TRUE;
 BYTE far *buf;
 char ch;
 int SENDTIME = 0;

NEXTTIME:

 TransStatus = RECEIVING;
  
 lstrcpy(StatusStr, "正在准备接收,请稍等...1");
 InvalidateRect(&m_StatusRect);
 UpdateWindow();
 
 if( MissConnected() )
	{ 
	  AfxMessageBox("调制解调器没有连通!"); 
      TransStatus = 0;	 
	  return (-1); 
	 }
 lstrcpy(szName, "CONFIG");
 if(strlen(szName)==0){ TransStatus = 0;	return (-1); }
 
 buf = (BYTE far *)malloc(512);
 if(buf==NULL)
	{ AfxMessageBox("No enough memory.",MB_OK); TransStatus = 0; return (-1);}
 buf[0]=0x81; buf[1]=0x00; buf[2]=0x01; buf[3] = 0x02;
 buf[4]='W';  buf[5]='M';  buf[7]=8;

 strcpy((char *)(buf+8), szName);
 buf[8+strlen(szName)+1]=-1;
 buf[8+strlen(szName)+2]=-1;
 ch=0;
 for(i=7;i<512;i++)ch+=buf[i];
 buf[6]=ch;

 WriteCommBlock( MyTTY.npTTYInfo, buf , 512);
 
 MyTTY.npTTYInfo->HeadPtr = 0;
 MyTTY.npTTYInfo->TailPtr = 0;
 
 OldTwo = TimeOut=0;
 OldTime = GetCurrentTime();
 while(MyTTY.npTTYInfo->HeadPtr==0 && TimeOut<30)
  {
	if( MissConnected() )
	  {
		 AfxMessageBox("线路中断!");
		 TransStatus = 0;
		 free(buf);	return (-1);
	  }	
	TimeOut = (GetCurrentTime()-OldTime)/1000;
  }
 free(buf);
 if(TimeOut>=30)
 {
 	 if(SENDTIME<3)
	{
		SENDTIME++;
		Sleep(100);
		goto NEXTTIME;
	}
 }

 if(MyTTY.npTTYInfo->Queue[MyTTY.npTTYInfo->TailPtr]==0x90)
	 {
      Sleep(10);
	 int kkkk = ReceiveFile(); 
	  if(kkkk>0)
	  {
		  WinExec("arj e send.arj -y",SW_HIDE);
		  Sleep(2000);

		  char tempstr[256];
		  wsprintf(tempstr,"%ssys1.dat", m_strRecordPath);
		  remove(tempstr);
		  rename("sys1.dat", tempstr);
		  
		  wsprintf(tempstr,"%ssys2.dat", m_strRecordPath);
		  remove(tempstr);
		  rename("sys2.dat", tempstr);

		  wsprintf(tempstr,"%sglconfig.dat", m_strRecordPath);
		  remove(tempstr);
		  rename("glconfig.dat", tempstr);
		  AfxMessageBox("配置文件已正确接收!");
		  TransStatus = 0;
		  return (1);
	  }
		  
	  TransStatus = 0;
	  return (0);
 
	}
	else
	{
	 if(SENDTIME<3)
	 {
		 SENDTIME++;
		 Sleep(100);
		 goto NEXTTIME;
	 }

	 AfxMessageBox("出错: 等待远方的握手信号出错!",MB_OK);
	 TransStatus = 0;
	 return (-1);
	}
}

int CTrans::GetNewName(void)
{
	for(int i=0; i<100; i++)
	{
		if(NameIndex[i]==0)break;
	}
	if(i==100)i=0;
	return (i);
}

int CTrans::WyyReceList(void)
{
 DWORD OldTime, TimeOut;
 int i;
 unsigned char far *buf;
 char ch;
 int SENDTIME=0;

NEXTTIME:

 TransStatus = RECEIVING;
 lstrcpy(StatusStr, "正在列远方目录,请稍等...");
 InvalidateRect(&m_StatusRect);
 UpdateWindow();
 
 if( MissConnected() )
	{ AfxMessageBox("调制解调器没有连通!"); TransStatus = 0; return (-1); }

 buf = (BYTE far *)malloc(512);
 if(buf==NULL)
	{ AfxMessageBox("No enough memory.",MB_OK); TransStatus = 0; return (-1);}
 buf[0]=0x81; buf[1]=0x00; buf[2]=0x01; buf[3] = 0x02;
 buf[4]='W';  buf[5]='M';
 buf[7]=1;
 lstrcpy(szName, m_strDataPath);
 strcpy((char *)(buf+8),szName);
 buf[8+strlen(szName)+1]=-1;
 buf[8+strlen(szName)+2]=-1;
 ch=0;
 for(i=7;i<512;i++)ch+=buf[i];
 buf[6]=ch;
 
 MyTTY.npTTYInfo->HeadPtr = 0;
 MyTTY.npTTYInfo->TailPtr = 0;
 memset(MyTTY.npTTYInfo->Queue, 0x00, 4000);
 TimeOut=0 ;
 OldTime = GetCurrentTime();
 WriteCommBlock( MyTTY.npTTYInfo, buf , 512); 

⌨️ 快捷键说明

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