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

📄 demodlg.cpp

📁 通过串口控制下位机的程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
}



void CDemoDlg::OnSelendokComboParity() 
{
	// TODO: Add your control notification handler code here
	char temp;
	int i=m_Parity.GetCurSel();
	switch(i)
	{
	case 0:
		temp='N';
		break;
	case 1:
		temp='O';
		break;
	case 2:
		temp='E';
		break;
	}
	m_cParity=temp;
	CString strStatus;
	if (m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
	{
		if(!m_bOpenPort)
		{
			m_Port.StartMonitoring();
			m_ctrlIconOpenoff.SetIcon(m_hIconRed);
			strStatus.Format("STATUS:COM%d OPENED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
		}
		else
		{
			m_ctrlIconOpenoff.SetIcon(m_hIconOff);
			strStatus.Format("STATUS:COM%d CLOSED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
		}
		m_ctrlPortStatus.SetWindowText(strStatus);

	}
	else
	{
		AfxMessageBox("没有成功,请重试");
		m_ctrlIconOpenoff.SetIcon(m_hIconOff);
	}

}

void CDemoDlg::OnSelendokComboStopbits() 
{
	// TODO: Add your control notification handler code here
	// TODO: Add your control notification handler code here
	int i=m_StopBits.GetCurSel();
	switch(i)
	{
	case 0:
		i=1;
		break;
	case 1:
		i=2;
		break;
	}
	m_nStopbits=i;
	CString strStatus;
	if (m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
	{
		if(!m_bOpenPort)
		{
			m_Port.StartMonitoring();
			m_ctrlIconOpenoff.SetIcon(m_hIconRed);
			strStatus.Format("STATUS:COM%d OPENED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
		}
		else
		{
			m_ctrlIconOpenoff.SetIcon(m_hIconOff);
			strStatus.Format("STATUS:COM%d CLOSED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
		}
		m_ctrlPortStatus.SetWindowText(strStatus);

	}
	else
	{
		AfxMessageBox("没有成功,请重试");
		m_ctrlIconOpenoff.SetIcon(m_hIconOff);
	}
}

void CDemoDlg::OnSelendokComboComselect() 
{
	// TODO: Add your control notification handler code here
		if(m_Port.m_hComm!=NULL)
	{
		m_Port.ClosePort();
	}

	m_nCom=m_Com.GetCurSel()+1;
	CString strStatus;
	if (m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
	{
		if(!m_bOpenPort)
		{
			m_Port.StartMonitoring();
			m_ctrlIconOpenoff.SetIcon(m_hIconRed);
			strStatus.Format("STATUS:COM%d OPENED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
		}
		else
		{
			m_ctrlIconOpenoff.SetIcon(m_hIconOff);
			strStatus.Format("STATUS:COM%d CLOSED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
		}
		m_ctrlPortStatus.SetWindowText(strStatus);

	}
	else
	{
		m_ctrlIconOpenoff.SetIcon(m_hIconOff);
		AfxMessageBox("没有发现此串口或被占用");
	}

}

void CDemoDlg::OnSelendokComboBaud() 
{
	// TODO: Add your control notification handler code here
		CString temp;
	int i=m_Baud.GetCurSel();
	switch(i)
	{
	case 0:
		i=300;
		break;
	case 1:
		i=600;
		break;
	case 2:
		i=1200;
		break;
	case 3:
		i=2400;
		break;
	case 4:
		i=4800;
		break;
	case 5:
		i=9600;
		break;
	case 6:
		i=19200;
		break;
	case 7:
		i=38400;
		break;
	case 8:
		i=43000;
		break;
	case 9:
		i=56000;
		break;
	case 10:
		i=57600;
		break;
	case 11:
		i=115200;
		break;
	default:
		break;

	}
	m_nBaud=i;
	CString strStatus;
	if (m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
	{
		if(!m_bOpenPort)
		{
			m_Port.StartMonitoring();
			m_ctrlIconOpenoff.SetIcon(m_hIconRed);
			

			strStatus.Format("STATUS:COM%d OPENED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
		}
		else
		{
			m_ctrlIconOpenoff.SetIcon(m_hIconOff);
			strStatus.Format("STATUS:COM%d CLOSED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
		}
		m_ctrlPortStatus.SetWindowText(strStatus);

	}
	else
	{
		AfxMessageBox("没有成功,请重试");
		m_ctrlIconOpenoff.SetIcon(m_hIconOff);

	}

}

void CDemoDlg::CurrentControlStatus(int ControlStatus)
{  
	CString str;
	CString strTemp;
	switch(ControlStatus)
	{
	case 0:	
		str="同步0";  
		strTemp.Format("当前运动状态:%s",str);
		m_ctrlControlStatus.SetWindowText(strTemp);// 显示当前运动状态
		break;
	case 1:
			if(flag1==1)
			{
				str="同步1";  
				strTemp.Format("当前运动状态:%s",str);
				flag1=0;

			}
			else
			{
				str="已打开服务器";  
				strTemp.Format("当前运动状态:%s",str);
				flag1=1;

		}
		m_ctrlControlStatus.SetWindowText(strTemp);// 显示当前运动状态
		break;
	case 2:
			if(flag2==1)
			{
				str="同步2";  
				strTemp.Format("当前运动状态:%s",str);
				flag2=0;

			}
			else
			{
				str="已关闭服务器与客户端的连接";  
				strTemp.Format("当前运动状态:%s",str);
				flag2=1;

		}
		m_ctrlControlStatus.SetWindowText(strTemp);// 显示当前运动状态
		break;

	case 110:
		str="后退";  
		strTemp.Format("当前运动状态:%s",str);
		m_ctrlControlStatus.SetWindowText(strTemp);// 显示当前运动状态
		break;
	case 111:
		str="前进";  
		strTemp.Format("当前运动状态:%s",str);
		m_ctrlControlStatus.SetWindowText(strTemp);// 显示当前运动状态
		break;

	case 121:
		str="左转";  
		strTemp.Format("当前运动状态:%s",str);
		m_ctrlControlStatus.SetWindowText(strTemp);// 显示当前运动状态
       	break;
    case 120:
		str="右转";  
		strTemp.Format("当前运动状态:%s",str);
		m_ctrlControlStatus.SetWindowText(strTemp);// 显示当前运动状态
		break;

	case 041:
		str="电机已启动";  
		strTemp.Format("当前运动状态:%s",str);
		m_ctrlControlStatus.SetWindowText(strTemp);// 显示当前运动状态
		break;
	case 040:
		str="电机已关闭";  
		strTemp.Format("当前运动状态:%s",str);
		m_ctrlControlStatus.SetWindowText(strTemp);// 显示当前运动状态
	    break;

	case 29:
		str="停止";  
		strTemp.Format("当前运动状态:%s",str);
		m_ctrlControlStatus.SetWindowText(strTemp);// 显示当前运动状态
		break;		
	case 055:
		str="紧急停止";  
		strTemp.Format("当前运动状态:%s",str);
		m_ctrlControlStatus.SetWindowText(strTemp);// 显示当前运动状态
 		break;		

	case 256:
		str="状态已经复位";  
		strTemp.Format("当前运动状态:%s",str);
		m_ctrlControlStatus.SetWindowText(strTemp);// 显示当前运动状态
    
		break;
	default:
		str="错误";  
		strTemp.Format("当前运动状态:%s",str);
		m_ctrlControlStatus.SetWindowText(strTemp);
	}
	UpdateData(FALSE);

}

void CDemoDlg::StrtoHex(CString str)
{
	char data[512]; 
	int len=Str2Hex(m_strSendData,data);
	m_Port.WriteToPort(data,len);
}

void CDemoDlg::OnButtonReset() 
{
	// TODO: Add your control notification handler code here
    OnButtonClosemotor();// 关闭电机
	flag2=0;
	OnButtonSyn2();// 关闭连接
	OnButtonCountreset();
    OnDestroy();//释放资源
	// OnInitDialog();// 初始化对话框
	m_Com.SetCurSel(0);
	m_Baud.SetCurSel(5);
	m_Parity.SetCurSel(0);
	m_DataBits.SetCurSel(0);
	m_StopBits.SetCurSel(1);
    m_ctrlHexSend.SetCheck(1);
	m_ctrlHexReceive.SetCheck(1);

	CString strStatus;
	m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512);
	m_Port.StartMonitoring();
	strStatus.Format("STATUS:COM%d OPENED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
	m_ctrlIconOpenoff.SetIcon(m_hIconRed);
    m_ctrlPortStatus.SetWindowText(strStatus);
	CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDIT_CYCLETIME);
	CString strText;
	m_nCycleTime=1000;
	strText.Format("%d",m_nCycleTime);
	pEdit->SetWindowText(strText);   //Display cycle time

	m_strSendData="欢迎您使用该演示软件!";
	char cr=13,lf=10;
	m_strSendData+=cr+lf;

	// m_ctrlAutoClear.SetCheck(1);
	// m_ctrlEditSendFile.SetWindowText("No File Selected!");

	// m_animIcon.SetImageList(IDB_ANIM_IMGLIST,4,RGB(0,0,0));   
	SetTimer(4,200,NULL);
	ShowWindow(SW_SHOW); 

	CurrentControlStatus(256);// 显示当前状态
	OnButtonCountreset();
	UpdateData(FALSE);
}

BOOL CDemoDlg::PreTranslateMessage(MSG *pMsg)
{
	

// TODO: Add your specialized code here and/or call the base class

//截获ESC和回车键,避免按下此键时关闭对话框

	if (pMsg->message == WM_KEYDOWN)

	{   LPARAM  temp;
		temp=pMsg->wParam;
		switch(temp) 
		{

			case VK_ESCAPE://屏蔽ESC键
				return true;
				break;
			case VK_RETURN:
				// (pMsg->wParam==VK_RETURN) */
				return true; 
				break;


			case VK_UP :// 前进
				OnButtonOnward();
				break;
			case VK_DOWN:
				OnButtonReverse();
				break;
		
			case VK_LEFT:
                OnButtonTurnleft();
				break;

			case VK_RIGHT:
				OnButtonTurnright();
				break;

			case VK_SPACE:
				OnButtonStop();
				return true; 

				break;
		default:
			return 0;
			break;
		}

	/*if (pMsg->wParam==VK_ESCAPE):

		return true; 

	 // if(pMsg->wParam==VK_RETURN) */

	// 	return true; 

	}

	return CDialog::PreTranslateMessage(pMsg);

	
}

void CDemoDlg::OnButtoncReverse() 
{
	// TODO: Add your control notification handler code here
	
}

⌨️ 快捷键说明

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