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

📄 dlggongzhuang_bk.h

📁 串口收发工具
💻 H
📖 第 1 页 / 共 2 页
字号:
	byBufTemp[0] = 0x7E;
	byBufTemp[1] = byGroupNo;
	byBufTemp[2] = byAddrNo;
	byBufTemp[3] = 0;
	byBufTemp[4] = 0;
	byBufTemp[5] = 0x30;
	byBufTemp[6] = 0;
	byBufTemp[7] = LOBYTE(CManager::Crc16Parity(&byBufTemp[1],6));
	byBufTemp[8] = HIBYTE(CManager::Crc16Parity(&byBufTemp[1],6));
	
	m_doc = ((CMainFrame*)AfxGetMainWnd())->GetDoc();
	if(m_doc)
		m_doc->SendData(byBufTemp,sizeof(byBufTemp),true);
	SendCodeToHEX(byBufTemp,9);
}
/*
void CDlgGongzhuang::OnGzMaster() 
{
	// TODO: Add your command handler code here
	memset(ycValue,0,sizeof(ycValue));
	memset(ycValueOld,0,sizeof(ycValueOld));
	memset(yxValue,-1,sizeof(yxValue));
	memset(yxValueOld,-1,sizeof(yxValueOld));
	for(int i=0;i<GONGZHUANG_YXOUNT;i++)
		yxicon[i].ShowWindow(SW_HIDE);

	KillTimer(3);
	bYKBegin = false;
	
	CRect rc,rcToolBar;
	GetClientRect(rc);
	m_toolBar.GetClientRect(rcToolBar);
	rc.top+=rcToolBar.Height()+5;
	rc.left = xBmp + nPowerWidth;

	RedrawWindow(rc);
}

void CDlgGongzhuang::OnGzInfo() 
{
	// TODO: Add your command handler code here
	SetStatusBarInfo("");

	KillTimer(1);
		
	CRect rc,rcToolBar;
	GetClientRect(rc);
	m_toolBar.GetClientRect(rcToolBar);
	rc.top+=rcToolBar.Height()+5;
	rc.left = xBmp + nPowerWidth;
	RedrawWindow(rc);
}
*/
void CDlgGongzhuang::SetStatusBarInfo(CString str)
{
	m_statusBar.SetPaneText(1,str);
}

void CDlgGongzhuang::I2CTest()
{
	KillTimer(1);
	nCurOperation = GONGZHUANG_TEST_I2C;

	SetStatusBarInfo("");	

	BYTE byBufTemp[11];
	byBufTemp[0] = 0x7E;
	byBufTemp[1] = byGroupNo;
	byBufTemp[2] = byAddrNo;
	byBufTemp[3] = 2;
	byBufTemp[4] = 0;
	byBufTemp[5] = 0x70;
	CString strTemp;
	editGzNo.GetWindowText(strTemp);
	byBufTemp[6] = BYTE(atoi(strTemp));
	byBufTemp[7] = 0x02;
	byBufTemp[8] = 0;
	WORD parity = CManager::Crc16Parity(&byBufTemp[1],8);
	byBufTemp[9] =  (BYTE)LOBYTE(parity);
	byBufTemp[10] = (BYTE)HIBYTE(parity);

	m_doc = ((CMainFrame*)AfxGetMainWnd())->GetDoc();
	if(m_doc)
		m_doc->SendData(byBufTemp,sizeof(byBufTemp),true);
	SetTimer(3,timer3,NULL);
	//((CMaintainApp*)AfxGetApp())->BeginWaitCursor();
	SendCodeToHEX(byBufTemp,11);
}

void CDlgGongzhuang::SPITest()
{
	KillTimer(1);
	nCurOperation = GONGZHUANG_TEST_SPI;

	SetStatusBarInfo("");	

	BYTE byBufTemp[11];
	byBufTemp[0] = 0x7E;
	byBufTemp[1] = byGroupNo;
	byBufTemp[2] = byAddrNo;
	byBufTemp[3] = 2;
	byBufTemp[4] = 0;
	byBufTemp[5] = 0x70;
	CString strTemp;
	editGzNo.GetWindowText(strTemp);
	byBufTemp[6] = BYTE(atoi(strTemp));
	byBufTemp[7] = 0x03;
	byBufTemp[8] = 0;
	WORD parity = CManager::Crc16Parity(&byBufTemp[1],8);
	byBufTemp[9] =  (BYTE)LOBYTE(parity);
	byBufTemp[10] = (BYTE)HIBYTE(parity);

	m_doc = ((CMainFrame*)AfxGetMainWnd())->GetDoc();
	if(m_doc)
		m_doc->SendData(byBufTemp,sizeof(byBufTemp),true);
	SetTimer(3,timer3,NULL);
	//((CMaintainApp*)AfxGetApp())->BeginWaitCursor();
	SendCodeToHEX(byBufTemp,11);
}

void CDlgGongzhuang::AddrLineTest()
{
	KillTimer(1);
	nCurOperation = GONGZHUANG_TEST_ADDRLINE;

	SetStatusBarInfo("");

	BYTE byBufTemp[11];
	byBufTemp[0] = 0x7E;
	byBufTemp[1] = byGroupNo;
	byBufTemp[2] = byAddrNo;
	byBufTemp[3] = 2;
	byBufTemp[4] = 0;
	byBufTemp[5] = 0x70;
	CString strTemp;
	editGzNo.GetWindowText(strTemp);
	byBufTemp[6] = BYTE(atoi(strTemp));
	byBufTemp[7] = 0x04;
	byBufTemp[8] = 0;
	WORD parity = CManager::Crc16Parity(&byBufTemp[1],8);
	byBufTemp[9] =  (BYTE)LOBYTE(parity);
	byBufTemp[10] = (BYTE)HIBYTE(parity);

	m_doc = ((CMainFrame*)AfxGetMainWnd())->GetDoc();
	if(m_doc)
		m_doc->SendData(byBufTemp,sizeof(byBufTemp),true);
	SetTimer(3,timer3,NULL);
	//((CMaintainApp*)AfxGetApp())->BeginWaitCursor();
	SendCodeToHEX(byBufTemp,11);
}

void CDlgGongzhuang::BuzzerTest(bool bBeginOrStop)
{
	KillTimer(1);

	BYTE byBufTemp[11];
	byBufTemp[0] = 0x7E;
	byBufTemp[1] = byGroupNo;
	byBufTemp[2] = byAddrNo;
	byBufTemp[3] = 2;
	byBufTemp[4] = 0;
	byBufTemp[5] = 0x70;
	byBufTemp[6] = 0;
	byBufTemp[7] = 0x05;
	byBufTemp[8] = bBeginOrStop?0:1;
	WORD parity = CManager::Crc16Parity(&byBufTemp[1],8);
	byBufTemp[9] =  (BYTE)LOBYTE(parity);
	byBufTemp[10] = (BYTE)HIBYTE(parity);

	m_doc = ((CMainFrame*)AfxGetMainWnd())->GetDoc();
	if(m_doc)
		m_doc->SendData(byBufTemp,sizeof(byBufTemp),true);
	SendCodeToHEX(byBufTemp,11);
}

void CDlgGongzhuang::CommTest()
{
	KillTimer(1);

	nCurOperation = GONGZHUANG_TEST_COMM;

	SetStatusBarInfo("");

	BYTE byBufTemp[11];
	byBufTemp[0] = 0x7E;
	byBufTemp[1] = byGroupNo;
	byBufTemp[2] = byAddrNo;
	byBufTemp[3] = 2;
	byBufTemp[4] = 0;
	byBufTemp[5] = 0xf0;//工装功能码为70,上传时最高位为1,即f0
	byBufTemp[6] = 0;
	//串口测试正确的标准是收发一致,此处为了让返回的数据在处理时方便,自定义了一个扩展功能码ff
	//这样返回判断时ff标明是串口测试返回
	byBufTemp[7] = 0xff;
	byBufTemp[8] = 0;
	byBufTemp[9] = LOBYTE(CManager::Crc16Parity(&byBufTemp[1],8));
	byBufTemp[10] = HIBYTE(CManager::Crc16Parity(&byBufTemp[1],8));

	m_doc = ((CMainFrame*)AfxGetMainWnd())->GetDoc();
	if(m_doc)
		m_doc->SendData(byBufTemp,sizeof(byBufTemp),true);
	SetTimer(3,timer3,NULL);
	//((CMaintainApp*)AfxGetApp())->BeginWaitCursor();
	SendCodeToHEX(byBufTemp,11);
}

void CDlgGongzhuang::ClockTest()
{
	KillTimer(1);

	nCurOperation = GONGZHUANG_TEST_CLOCK;

	SetStatusBarInfo("");		

	BYTE byBufTemp[18];
	byBufTemp[0] = 0x7E;
	byBufTemp[1] = byGroupNo;
	byBufTemp[2] = byAddrNo;
	byBufTemp[3] = 0x09;
	byBufTemp[4] = 0x00;
	byBufTemp[5] = 0x10;
	byBufTemp[6] = 0x00;//基站状态
	CTime t = CTime::GetCurrentTime();
	byBufTemp[7] = LOBYTE(t.GetYear());
	byBufTemp[8] = HIBYTE(t.GetYear());
	byBufTemp[9] = t.GetMonth();
	byBufTemp[10] = t.GetDay();
	byBufTemp[11] = t.GetHour();
	byBufTemp[12] = t.GetMinute();
	byBufTemp[13] = t.GetSecond();
	byBufTemp[14] = 0x00;
	byBufTemp[15] = 0x00;
	byBufTemp[16] = LOBYTE(CManager::Crc16Parity(&byBufTemp[1],15));
	byBufTemp[17] = HIBYTE(CManager::Crc16Parity(&byBufTemp[1],15));

	m_doc = ((CMainFrame*)AfxGetMainWnd())->GetDoc();
	if(m_doc)
		m_doc->SendData(byBufTemp,sizeof(byBufTemp),true);
	SendCodeToHEX(byBufTemp,18);
	//发送完当前时间后召唤时间
	memset(byBufTemp,0,sizeof(byBufTemp));
	byBufTemp[0] = 0x7E;
	byBufTemp[1] = byGroupNo;
	byBufTemp[2] = byAddrNo;
	byBufTemp[3] = 0;
	byBufTemp[4] = 0;
	byBufTemp[5] = 0x11;
	byBufTemp[6] = 0x00;//
	byBufTemp[7] = LOBYTE(CManager::Crc16Parity(&byBufTemp[1],6));
	byBufTemp[8] = HIBYTE(CManager::Crc16Parity(&byBufTemp[1],6));

	m_doc = ((CMainFrame*)AfxGetMainWnd())->GetDoc();
	if(m_doc)
		m_doc->SendData(byBufTemp,9,true);
	SetTimer(3,timer3,NULL);
	//((CMaintainApp*)AfxGetApp())->BeginWaitCursor();
	SendCodeToHEX(byBufTemp,9);
}

void CDlgGongzhuang::ProcessGzData(BYTE *buf,int len)
{
	BYTE byHead = 0x7E;
	BYTE byFuncCode,byExtendFuncCode;
	int i;
	CString str;

	if ((buf[0]!=byHead)||(buf[1]!=byGroupNo)||(buf[2]!=byAddrNo))//帧头组号站号
		return ;
	
	byFuncCode = buf[5];		//功能码
	byExtendFuncCode = buf[7];	//扩展功能码

	switch(byFuncCode) {
	case 0xB0://ycyx return
		nYcCount = buf[7];//yc count
		if (nYcCount <= 0)		return;
		nYxCount = buf[8]*8;//yx count 
		if (nYxCount <= 0)		return;
		
		if(nYcCount>GONGZHUANG_YCOUNT)
			nYcCount = GONGZHUANG_YCOUNT;
		if (nYxCount>GONGZHUANG_YXOUNT)
			nYxCount = GONGZHUANG_YXOUNT;
				
		//取得遥测
		for (i=0;i<nYcCount;i++)
			ycValue[i] = (float)0.1*MAKEWORD(buf[2*i+9],buf[2*i+10]);
		
		//取得遥信
		for(i=0;i<nYxCount/8;i++)
			for (int j=0;j<8;j++)
				yxValue[i*8+j] = (buf[9+2*buf[7]+i]>>j)&0x1;
		break;

	case 0x91://召唤时钟返回
		KillTimer(3);
		strRtn.Format(_T("返回时间:%d-%d-%d %d:%d:%d"),MAKEWORD(buf[7],buf[8]),buf[9],buf[10],buf[11],buf[12],buf[13]);
		SetStatusBarInfo(strRtn);
		//((CMaintainApp*)AfxGetApp())->EndWaitCursor();
		break;
	case 0xf0://工装测试测试返回
		switch(byExtendFuncCode) {
		case 0x02://I2C return
			str = _T("I2C");
			break;
		case 0x03://SPI return
			str = _T("SPI");
			break;
		case 0x04://addrline return
			str = _T("地址线");
			break;
		case 0x07://yt return
			str = _T("遥调");
			break;
		case 0xff://comm return
			str = _T("串口");
			break;
		default:
			break;
		}
		//((CMaintainApp*)AfxGetApp())->EndWaitCursor();
		if(buf[9])
			strRtn = str + GZ_TEST_ERROR;
		else
			strRtn = str + GZ_TEST_OK;
			
		SetStatusBarInfo(strRtn);
		KillTimer(3);
		break;
		
	default:
		break;
	}
}


void CDlgGongzhuang::OnI2c() 
{
	// TODO: Add your command handler code here
	OnGzycyxOff();
	I2CTest();
	SetStatusBarInfo(_T("I2C测试"));
}

void CDlgGongzhuang::OnSpi() 
{
	// TODO: Add your command handler code here
	OnGzycyxOff();
	SPITest();
	SetStatusBarInfo(_T("SPI测试..."));
}

void CDlgGongzhuang::OnAddressline() 
{
	// TODO: Add your command handler code here
	OnGzycyxOff();
	AddrLineTest();
	SetStatusBarInfo(_T("地址线测试..."));
}

void CDlgGongzhuang::OnBuzzerOn() 
{
	// TODO: Add your command handler code here
	OnGzycyxOff();
	BuzzerTest(0);
	SetStatusBarInfo(_T("蜂鸣器测试"));
}

void CDlgGongzhuang::OnBuzzerOff() 
{
	// TODO: Add your command handler code here
	OnGzycyxOff();
	BuzzerTest(1);
	SetStatusBarInfo(_T("蜂鸣器测试结束"));
}

void CDlgGongzhuang::OnGzclock() 
{
	// TODO: Add your command handler code here
	OnGzycyxOff();
	ClockTest();
	SetStatusBarInfo(_T("时钟测试..."));
}

void CDlgGongzhuang::OnGzcomm() 
{
	// TODO: Add your command handler code here
	OnGzycyxOff();
	CommTest();
	SetStatusBarInfo(_T("串口测试"));
}

void CDlgGongzhuang::OnGzycyxOn() 
{
	// TODO: Add your command handler code here
	t = SetTimer(1,timer1,NULL);
	SetStatusBarInfo(_T("召唤遥测遥信..."));
}

void CDlgGongzhuang::OnGzycyxOff() 
{
	// TODO: Add your command handler code here
	KillTimer(1);
	nYcCount = 0;
	nYxCount = 0;

	memset(ycValue,0,sizeof(ycValue));
	memset(ycValueOld,0,sizeof(ycValueOld));
	memset(yxValue,-1,sizeof(yxValue));
	memset(yxValueOld,-1,sizeof(yxValueOld));

	CRect rc;
	rc.left = nYcLineLeft;
	rc.right = nYcLineLeft+nCellYcWidth*24;
	rc.top = ntop+9*nCell;
	rc.bottom = ntop+9*nCell+4*nCellYcHigh;

	RedrawWindow(rc);
	for (int j=0;j<8;j++)
	{
		for (int i=0;i<8;i++)
		{
			yxicon[i+j*8].ShowWindow(SW_HIDE);
			yxicon[i+j*8].RedrawWindow();
			
		}
	}

	SetStatusBarInfo(_T("遥测遥信结束"));
	BYTE bytemp;
	SendCodeToHEX(&bytemp,0);
}

void CDlgGongzhuang::OnGzYkbegin() 
{
	// TODO: Add your command handler code here
	OnGzycyxOff();
	YkTestBegin();	
	SetStatusBarInfo(_T("遥控开始"));
}

void CDlgGongzhuang::OnGzYkend() 
{
	// TODO: Add your command handler code here
	OnGzycyxOff();
	YkTestStop();
	SetStatusBarInfo(_T("遥控结束"));
}

void CDlgGongzhuang::OnGzYt() 
{
	// TODO: Add your command handler code here
	OnGzycyxOff();
	YtTest();	
	SetStatusBarInfo(_T("遥调操作..."));
}

void CDlgGongzhuang::SendCodeToHEX(BYTE* buf,int len)
{
	strSendCode.Empty();
	
	CString strTemp;

	for (int i=0;i<len;i++)
	{
		strTemp.Format("%02X ",buf[i]);
		strSendCode += strTemp;
	}
	RedrawWindow(rcSendCode);
}

⌨️ 快捷键说明

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