欢迎来到虫虫下载站 | 资源下载 资源专辑 关于我们
虫虫下载站

commwizarddlg.cpp

实现网络+串口 红外接收、发送
CPP
第 1 页 / 共 5 页
字号:
		return hbr;
		break;	
	}
	//return hbr;
}
//学习与控制按扭
void CCommWizardDlg::OnStuctr() 
{
	
	CString strSend;
	UpdateData(true);
	char hexdt[150]; 

	//m_bStudy = 1;//读取返回:成功或失败
		//清除接收缓冲区准备接收应答信息
		for(int i=0;i<512;i++)
		{
			byTemp[i] = 0xAA;//
		}
		for(i = 0;i<150;i++)
		{
			hexdt[i] = 0x00;
			SendSerData[i] = 0x00;
		}
		nRec = 0;//接收缓冲记数清除


	if(m_nInputMode > 1)
	{
		CByteArray hexdata;
		int len=String2Hex(m_sStuCtrl ,hexdata);
		if(!m_bSerialSet)
			m_Com.SetOutput(COleVariant(hexdata));


    		int lent = String2HexA(m_sStuCtrl,hexdt);
			for(int i=0;i<lent;i++)
			{
				SendSerData[i+1] = ((unsigned char)hexdt[i]);    //格式化网络数据命令  2008.06.23 ZQL
				SendSerData[0] ++;
			}
			//	if(!m_bSerialSet)
		    //        SendCmd(st);//发送命令

			if(m_bSerialSet)
			{
				m_bSerSendFlag = 1;//网络操作标志,发送数据
				AfxBeginThread(Serial_WriteThead,&SocketPr);//

			}
	}
	else
		m_Com.SetOutput(COleVariant(m_sStuCtrl));//发送数据

	SetTimer(6,350,NULL);

	

}

void CCommWizardDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{	
	CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

void CCommWizardDlg::OnVscrollEditReceive() 
{
	//UpdateData(false);	
}

void CCommWizardDlg::OnUpdateEditReceive() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function to send the EM_SETEVENTMASK message to the control
	// with the ENM_UPDATE flag ORed into the lParam mask.
	
	// TODO: Add your control notification handler code here
	//UpdateData(false);	
}

void CCommWizardDlg::OnSetfocusEditReceive() 
{
	//UpdateData(false);
	
}
//计算
void CCommWizardDlg::OnAdu() 
{
	float H1,L1,D1,U1, H2,L2,D2,U2;
	CString str;
	UpdateData(true);

	U1 = m_nAu;
	D1 = m_nAd;

	H1 = (5050*U1-250*D1)/4800;
	L1 = 25*U1 -24*H1;


	str.Format("%d",(unsigned short)H1);
	m_sMAUp = str;

	str.Format("%d",(unsigned short)L1);
	m_sMADown = str;


	U2 = m_nBu;
	D2 = m_nBd;

	H2 = (5050*U2-250*D2)/4800;
	L2 = 25*U2 - 24*H2;

	str.Format("%d",(unsigned short)H2);
	m_sMBUp = str;

	str.Format("%d",(unsigned short)L2);
	m_sMBDown = str;

    UpdateData(false);
	

}

void CCommWizardDlg::OnEditchangeStuday() 
{

}

void CCommWizardDlg::OnChangeEditWendu() 
{


	
}

void CCommWizardDlg::OnEditupdateStuday() 
{
	// TODO: Add your control notification handler code here

}

void CCommWizardDlg::OnSetfocusStuday() 
{

}

void CCommWizardDlg::OnSelchangeStuday() 
{
	//m_sWendu	
	switch( m_comSty.GetCurSel())
	{
	case 0:
		{
				m_edWendu.Clear();
				m_edWendu.SetSel(0,-1);
				m_edWendu.SetLimitText(0);
				m_edWendu.ReplaceSel("非法命令!");

			AfxMessageBox("非法命令");
		}
		break;
	case 1:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 关机");

		}
		break;
	case 2:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 16度");
		}
		break;
	case 3:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 17度");

		}
		break;
	case 4:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 18度");

		}
		break;
	case 5:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 19度");

		}
		break;
	case 6:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 20度");

		}
		break;
	case 7:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 21度");
		}
		break;
	case 8:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 22度");

		}
		break;

	case 9:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 23度");
		}
		break;
	case 10:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 24度");
		}
		break;
	case 11:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 25度");
		}
		break;
	case 12:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 26度");
		}
		break;
	case 13:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 27度");

		}
		break;
	case 14:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 28度");
		}
		break;
	case 15:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 29度");
		}
		break;
	case 16:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 30度");

		}
		break;
	case 17:
	case 34:
	case 51:
	case 68:
		{
			m_sWendu ="非法命令";
			UpdateData(false);
			AfxMessageBox("非法命令");
		}
		break;

	default:
		{
			m_edWendu.Clear();
			m_edWendu.SetSel(0,-1);
			m_edWendu.SetLimitText(0);
			m_edWendu.ReplaceSel(" 控制开");

		}		
		break;
	}	
}
/**********************************************
*
*            串口网络测试线程 
*               ZQL
*            2008.06.19
**********************************************/
UINT Serial_SocketThead(LPVOID pParam)
{
#if 1   //zql
	struct SocketPress *tmpParam;
	tmpParam =(struct SocketPress*)pParam;	//线程参数	
	CString tmpmsg,showmsg,sAir;

	int RecDataLen=0,SendDataLen=0;//接收、发送数据长度

	char *str;

	unsigned int sclient;
	struct sockaddr_in server;
	int status,ret;

	int loops=0;
	int DoLoop=0;

	int data_len=150,m=0,j=0;
	INT sum = 0;
	long readtimesok =0,errortimes =0,lostserver =0;
    char ch[]={0xf4,0x11,0xaa,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
			   0x00,0x00,0x00,0x00,0x00,0x00
	};

	CHAR data[150];

		WSADATA wsd;
		if((status=WSAStartup(MAKEWORD(2,2),&wsd))!=0)
		{
			AfxMessageBox("wsastartup() failed!");
			return FALSE;
		}

		ZeroMemory(&server,sizeof(server));
		server.sin_family=AF_INET;
		int nPort= atoi( tmpParam->dxDlg->ServerPort ); 
		server.sin_port=htons(2008);//nPort);
		server.sin_addr.s_addr=inet_addr(tmpParam->dxDlg->ServerIP);


#if 1  //zql
		if((sclient=socket(AF_INET,SOCK_STREAM,0))==SOCKET_ERROR)
		{
			AfxMessageBox("Socket failed !");
			return FALSE;
		}
#endif


		if(connect(sclient,(struct sockaddr *)&server,sizeof(server))==SOCKET_ERROR)//<0)
		{			
			m_bTime = 0;
#if 1
			tmpmsg.Format("连接失败!\r\n");
			showmsg=tmpmsg;
			tmpParam->dxDlg->m_sRev.ReplaceSel(showmsg);
#endif

			m_bSTATE =0;

			closesocket(sclient);
			WSACleanup();
		}

	while(1)
	{

#if 0
		if(!m_bConvert)
		{
			tmpmsg.Format("建立连接成功!\r\nThe ARM Server's IP is:%s\r\n\r\n",HOST_IP_ADDR);
			showmsg+=tmpmsg;
			tmpParam->dxDlg->m_sRev.ReplaceSel(showmsg);
		}
#endif	

		m_nCountTime  = 0;//定时器清零
		m_uSecondPortTime = 0;//主端口重联次数清零
		  ZeroMemory(data,sizeof(data));		  
			//for(m=0;m<150;m++)
			//	data[m] = 0xff;

			//if(tmpParam->dxDlg->m_bSerTest)
			//{
				ch[4]=0xc0;//串口测试命令
			//}
			//else
			//	ch[4]=0x00;
#if 0   ///////////////
			//告警测试
			if(ch[5]==0xdd)
			{
	    		m_sAlarm = 1;
			}	
			else
	    		m_sAlarm = 0;
#endif

			if(m_bSerSendFlag)
			{
				ch[6] = 0xac;//RS485 发送命令
			}
			else
				ch[6] = 0;

			if(m_bSerSendFlag ==0)
				continue;

			ch[7] = m_bSerSendFlag; //置位发送标志
			if(ch[7] == 0x01)
			{
				m_bSerSendFlag = 0; //清除发送标志
				for(m = 0;m<150;m++)
					ch[8 + m] = SendSerData[m];
			}
			//发送数据
			ret=0;
			SendDataLen = sizeof(ch);
			str=ch;
			while(SendDataLen>0)
			{
				ret=send(sclient,str,SendDataLen,0);
				if(ret ==SOCKET_ERROR)
				{
					CString m_Err_Message;
					m_Err_Message.Format("错误:Client无法发送数据;\n错误码:%d",WSAGetLastError());
					AfxMessageBox(m_Err_Message);//,"系统错误",MB_OK|MB_ICONSTOP);
					return 0;
				}
				SendDataLen-=ret;
				if(SendDataLen>0)
				{
					str=ch+SendDataLen;
				}

			}
			ch[6] = 0x00;
			ch[7] = 0x00;//串口数据标志

			//接收数据
			int total_flag=0,total_data=0,data_tmplen=0,m;
			char datatmp[150];
			ret = 0;
			do
			{
				ret = recv(sclient,datatmp,data_len,0);

				if(!total_flag)
				{
					total_flag = 1;
					total_data = data[1];
				}

				for(m=0;m<ret;m++)
				{
					data[data_tmplen + m] = datatmp[m];
				}
				
				data_tmplen +=ret;

			}while(data_tmplen < total_data);


			if(!m_bConvert)
			{
				if( (data[1] > 0) && ((unsigned char)data[0] == 3) )//数据长度
				{
					if(!m_bConvert)
					{
						loops++;
						if(loops>=14)
						{
							tmpParam->dxDlg->m_sRev.SetSel(0,-1);
							//tmpParam->dxDlg->m_sRev.Clear();
							tmpParam->dxDlg->m_strReceive.Empty();
							loops=0;
						}			
						showmsg.Empty();
						tmpmsg.Empty();

					}
					tmpmsg.Format("\r\n串口%02x 接收: ",(unsigned char)data[0]);
					showmsg+=tmpm

⌨️ 快捷键说明

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