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

📄 portsenddlg.cpp

📁 用VC++开发的基于AVR单片机ATmega16的24路舵机控制器的上位机源码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//保存文件
  CString sSql,str,str1;
  int i=m_LIST.GetCurSel();
	if(i==-1)
		i=0;
   m_LIST.GetText(i,sSql);
   i=m_LIST.GetCount();
//保存时转换为十进制数
	char hhex,lhex;
	int Djzh,Djzl,Djz;
   	for(i=47;i>0;i--)
	{
	 //int j=i/2+1;
	 hhex=sSql[i];//
	 Djzl=ConvertHexChar(hhex);
	 i--;
	 lhex=sSql[i];
	 Djzh=ConvertHexChar(lhex);
	 Djz=Djzh*16+Djzl;
	 str.Format("%d",Djz);
	 if(i!=0)
	   str=","+str;
     str1=str+str1;
	}	 
  out.WriteString(str1);//sSql
  out.Close();
}

void CPortsendDlg::OnButtred() 
{
	// TODO: Add your control notification handler code here
	//显示文件打开对话框
  CFileDialog dlg(TRUE, "SQL", "*.txt",OFN_HIDEREADONLY
                     |OFN_OVERWRITEPROMPT,"Text Files(*.txt)|*.txt|SQL Files(*.sql)|*.sql|All Files(*.*)|*.*||"); 
  if ( dlg.DoModal()!=IDOK ) return;
//获取文件的绝对路径
  CString sFileName=dlg.GetPathName();
//打开文件
  CStdioFile out;
  out.Open(sFileName, CFile::modeRead);
  CString sSql="",s;
  //out.ReadString(s);
  int j;
  CString str,str1="",str2="";
while(out.ReadString(s))
{
	int len=s.GetLength();
	j=1;
    for(int i=len-1;i>=0;i--)
    {
		str=s.GetAt(i);
       	if (str!=',')
		{
	   	 str1=str+str1;
		 j++;
		 if(i==0)
		 {
			 int con=atoi(str1);//str1.Format("%x",str);
	         str1.Format("%x",con);
	            if(con<16)
	    	       str1="0"+str1;
	         str2=str1+str2;
		 }
		}
		else
		{
           	if(j!=1)
			{
	           	int con=atoi(str1);//str1.Format("%x",str);
	          str1.Format("%x",con);
	            if(con<16)
	    	       str1="0"+str1;
		         str2=str1+str2;
			     str1="";
				 j=1;
				}
			}
			
	}
    j=m_LIST.GetCurSel();
    m_LIST.InsertString(j,str2);
    m_LIST.SetCurSel(j);
	str2="";

}
//out.Close();
//m_LIST.AddString(sSql);
m_LIST.GetText(0,m_strTXData);//sSql;//s; 
out.Close();
UpdateData(false); //读取编辑框内容
//AfxMessageBox(sSql);
	
}

void CPortsendDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	//测试程序
    //int m_DJBS[25],j;
  //UpdateData(TRUE); //读取编辑框内容
  //m_DJBS[0]=11;
  //m_DJBS[1]=m_DJBS1;  m_DJBS[2]=m_DJBS2;  m_DJBS[3]=m_DJBS3;  m_DJBS[4]=m_DJBS4;
  //m_DJBS[5]=m_DJBS5;  m_DJBS[6]=m_DJBS6;  m_DJBS[7]=m_DJBS7;  m_DJBS[8]=m_DJBS8;
  //m_DJBS[9]=m_DJBS9;  m_DJBS[10]=m_DJBS10; m_DJBS[11]=m_DJBS11;m_DJBS[12]=m_DJBS12;
  //m_DJBS[13]=m_DJBS13;m_DJBS[14]=m_DJBS14;m_DJBS[15]=m_DJBS15;m_DJBS[16]=m_DJBS16;
  //m_DJBS[17]=m_DJBS17;m_DJBS[18]=m_DJBS18;m_DJBS[19]=m_DJBS19;m_DJBS[20]=m_DJBS20;
  //m_DJBS[21]=m_DJBS21;m_DJBS[22]=m_DJBS22;m_DJBS[23]=m_DJBS23;m_DJBS[24]=m_DJBS24;
    CString str,str1;
  //j=outcou-1;
  //	str.Format("%x",m_DJBS[outcou]);
	//测试程序
	m_LIST.GetText(outcou-1,str);//2006
	//if(m_DJBS[outcou]<16)
	//	  str=	"0"+str;
     //str1.Format("%x",j);
	 //if(j<16)
	//	 str1="0"+str1;
	str="c118"+str+"d1";
    CByteArray hexdata;
    int len=String2Hex(str,hexdata); //此处返回的len可以用于计算发送了多少个十六进制数
    m_ctrlComm.SetOutput(COleVariant(hexdata)); //发送十六进制数据
	outcou--;
	if(outcou<=0)
	{
	  KillTimer(nIDEvent);
	}


	CDialog::OnTimer(nIDEvent);
}

void CPortsendDlg::OnButttestall() 
{
	// TODO: Add your control notification handler code here

	outcou=m_LIST.GetCount();
    m_Timer.Start();
   //iTimerID=SetTimer(1,800,NULL) ;
	//SetTimer(1,100,NULL);
	
}

void CPortsendDlg::OnSelchangeCombt() 
{
	// TODO: Add your control notification handler code here
   int i=m_COMBT.GetCurSel();
	 CString str;
	 m_COMBT.GetLBText(i,str);
     m_ctrlComm.SetSettings(str);//("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位
	
}

void CPortsendDlg::OnSelchangeComcom() 
{
	// TODO: Add your control notification handler code here
	int k=m_COMCOM.GetCurSel();
	CString str1;
	m_COMCOM.GetLBText(k,str1);
	if(str1=="com1")
	{
	  if(m_ctrlComm.GetPortOpen())
     m_ctrlComm.SetPortOpen(FALSE);

     m_ctrlComm.SetCommPort(1); //选择com1
     if( !m_ctrlComm.GetPortOpen())
     m_ctrlComm.SetPortOpen(TRUE);//打开串口
     else
     AfxMessageBox("cannot open serial port");
	 int i=m_COMBT.GetCurSel();
	 CString str;
	 m_COMBT.GetLBText(i,str);
     m_ctrlComm.SetSettings(str);//("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位 

     m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
     m_ctrlComm.SetRThreshold(1); 	 

	}
	if(str1=="com2")
	{
     if(m_ctrlComm.GetPortOpen())
     m_ctrlComm.SetPortOpen(FALSE);

     m_ctrlComm.SetCommPort(2); //选择com1
     if( !m_ctrlComm.GetPortOpen())
     m_ctrlComm.SetPortOpen(TRUE);//打开串口
     else
     AfxMessageBox("cannot open serial port");
	 int i=m_COMBT.GetCurSel();
	 CString str;
	 m_COMBT.GetLBText(i,str);
     m_ctrlComm.SetSettings(str);//("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位 

     m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
     m_ctrlComm.SetRThreshold(1); 
	}
	
}

void CPortsendDlg::OnButtrun()//
{
// TODO: Add your control notification handler code here
	// TODO: Add your control notification handler code here
	//显示文件打开对话框

	int m_listr[26][400],count=0,count1=0;
	for(int m=0;m<=25;m++)
	{
		for(int n=0;n<=399;n++)
		  m_listr[m][n]=0;
	}
	for( m=0;m<=399;m++)
		m_listr[1][m]=79;
	for( m=0;m<=399;m++)
		m_listr[7][m]=79;
  int m_licount=0;//实际要保存数据行数
  CFileDialog dlg(TRUE, "SQL", "*.txt",OFN_HIDEREADONLY
                     |OFN_OVERWRITEPROMPT,"Text Files(*.txt)|*.txt|SQL Files(*.sql)|*.sql|All Files(*.*)|*.*||"); 
  if ( dlg.DoModal()!=IDOK ) return;
//获取文件的绝对路径
  CString sFileName=dlg.GetPathName();
//打开文件
  CStdioFile out;
  out.Open(sFileName, CFile::modeRead);
  CString sSql="",s;
  int j,m_bscz,z=0,k=0,n=1;
  CString str,str1="",str2="",str3="";
  int len;
while(out.ReadString(s))
{
    len=s.GetLength();
	j=1;
    for(int i=0;i<=len-1;i++)
    {
		str=s.GetAt(i);
       	if (str!=',')
		{
		   if(str!='-')
		   {
	   	       str1=str1+str;
		       j++;
		      if(j==2)
			  {
                if(m_djbs[n][2]==0)//转化为实际加减
			      z=1;
			  }	
		   }
		   else
		   {
			 j++;
			 z=1;
			 if(m_djbs[n][2]==0)//转化为实际加减
				 z=0;	 
		   }
            if(i==len-1)
			{
              int con=atoi(str1);
			  count++;
			  if(z==0)//基数是增加
			  {
			    con=m_bscz+con;
			  }
			  else
			  {
				 con=m_bscz-con;
			  } 
			 /* if((m_djbs[n][3]>con)&&(m_djbs[n][4]<con))
			  {
					 MessageBox("数据超出范围");
					 break;
			  }
			  */
			  count1=count;
              m_listr[n][count]=con;
	          str1.Format("%d",con);
	          str2=str2+str1;
			}
			
		}
		else
		{
           	if(j!=1)
			{		
	          	int con=atoi(str1);//str1.Format("%x",str);	
				count++;
                if(k==0)
				 {
					 m_bscz=m_djbs[con][1];//步态初始值
					 n=con;

				 }
				 else
				 {
					 if(z==0)
					 {
					    con=m_bscz+con;
					 }
					 else
					 {
						 con=m_bscz-con;
					 }
					 /*if((m_djbs[n][3]>con)||(m_djbs[n][4]<con))
					 {
						 MessageBox("数据超出范围");
						 break;
					 }
					 */
				 }
                  
				    m_listr[n][count]=con;
	                str1.Format("%d",con);
		            str2=str2+str1+",";
			        str1="";
				    j=1;
				    k++;
				    z=0;
				// }
				// else
				// {
				//	 MessageBox("数据超出范围");
				//	 break;
				// }
			}
		}
	}

	k=0;
	count=0;
    str1="";
	j=1;
	z=0;
    j=m_LIST.GetCurSel();
    m_LIST.InsertString(j,str2);
    m_LIST.SetCurSel(j);
	str2=str2+"\n";
	str3=str3+str2;
	str2="";
   m_licount++;
}
  m_LIST.GetText(0,m_strTXData);//sSql;//s; 
  out.Close();
  UpdateData(false); //读取编辑框内容
  str1="";
  str2="";
  str3="";
  for(i=2;i<=count1;i++)
  {
	  for(j=1;j<=24;j++)
	  {
       // if((m_djbs[j][3]<=m_listr[j][i])&&(m_djbs[j][4]<=m_listr[j][i])) 
	//	{
		    str1.Format("%d",m_listr[j][i]);
	    	if(j==24)
		      str2=str2+str1;
    	    else
	 	     str2=str2+str1+",";
	//	}
	//	else
	//	{
	//		MessageBox("数据超出范围");
	//		return;
	//	}
	  }
      str2=str2+"\n";
	  str3=str2+str3;
	  str2="";
  }
//保存数据到文件
	 CFileDialog dlg1(FALSE, "SQL", "*.txt",OFN_HIDEREADONLY 
                     | OFN_OVERWRITEPROMPT,"Text Files(*.txt)|*.txt|SQL Files(*.sql)|*.sql|All Files(*.*)|*.*||"); 
  if ( dlg1.DoModal()!=IDOK ) return;
//获取文件的绝对路径
  CString sFileName1=dlg1.GetPathName();
  CStdioFile out1;
//打开文件
  out1.Open(sFileName1, CFile::modeCreate | CFile::modeWrite);
//保存文件
 // CString sSql1,str,str1;
 
   out1.WriteString(str3);


  //out.WriteString(str1);//sSql
  out1.Close();
//保存数据到文件
}

void CPortsendDlg::OnSelchangeList2() 
{
	// TODO: Add your control notification handler code here
	CString str,str1,str2;
	char hhex,lhex;
	int Djzh,Djzl,Djz;
    int i=m_LIST.GetCurSel();
	if(i==-1)
		i=0;
    m_LIST.GetText(i,str);
   	int m_DJBS[25];
   //将数据分开打包
	for(i=0;i<=47;i++)
	{
	 int j=i/2+1;
	 hhex=str[i];//
	 Djzh=ConvertHexChar(hhex);
	 i++;
	 lhex=str[i];
	 Djzl=ConvertHexChar(lhex);
	 Djz=Djzh*16+Djzl;
	 m_DJBS[j]=Djz;
	}	 
   m_DJBS1=m_DJBS[1];  m_DJBS2=m_DJBS[2];  m_DJBS3=m_DJBS[3];  m_DJBS4=m_DJBS[4];
   m_DJBS5=m_DJBS[5];  m_DJBS6=m_DJBS[6];  m_DJBS7=m_DJBS[7];  m_DJBS8=m_DJBS[8];
   m_DJBS9=m_DJBS[9];  m_DJBS10=m_DJBS[10]; m_DJBS11=m_DJBS[11];m_DJBS12=m_DJBS[12];
   m_DJBS13=m_DJBS[13];m_DJBS14=m_DJBS[14];m_DJBS15=m_DJBS[15];m_DJBS16=m_DJBS[16];
   m_DJBS17=m_DJBS[17];m_DJBS18=m_DJBS[18];m_DJBS19=m_DJBS[19];m_DJBS20=m_DJBS[20];
   m_DJBS21=m_DJBS[21];m_DJBS22=m_DJBS[22];m_DJBS23=m_DJBS[23];m_DJBS24=m_DJBS[24];
	 //将数据公开打包
	UpdateData(false); //读取编辑框内容
	m_SCROLLDJ1.SetScrollPos(m_DJBS1);
    m_SCROLLDJ2.SetScrollPos(m_DJBS2);
    m_SCROLLDJ3.SetScrollPos(m_DJBS3);
    m_SCROLLDJ4.SetScrollPos(m_DJBS4);
    m_SCROLLDJ5.SetScrollPos(m_DJBS5);
	m_SCROLLDJ6.SetScrollPos(m_DJBS6);
	m_SCROLLDJ7.SetScrollPos(m_DJBS7);
	m_SCROLLDJ8.SetScrollPos(m_DJBS8);
    m_SCROLLDJ9.SetScrollPos(m_DJBS9);
	m_SCROLLDJ10.SetScrollPos(m_DJBS10);
	m_SCROLLDJ11.SetScrollPos(m_DJBS11);
	m_SCROLLDJ12.SetScrollPos(m_DJBS12);
	
}


void CPortsendDlg::Timout()
{
	static count=0;
	static LARGE_INTEGER old_time={0};
	LARGE_INTEGER now;
    CString str,str1;
	
	if ( ++count<4 ) return;
   m_LIST.GetText(outcou-1,str);//2006
	str="c118"+str+"d1";
    CByteArray hexdata;
    int len=String2Hex(str,hexdata); //此处返回的len可以用于计算发送了多少个十六进制数
    m_ctrlComm.SetOutput(COleVariant(hexdata)); //发送十六进制数据
    //测试时间代码
	::QueryPerformanceCounter(&now);
	now.QuadPart=now.QuadPart/m_gn_countms.QuadPart;
	if ( old_time.QuadPart>0L )
		str1.Format("%d ==> count:%d   size:%d  time:%ld\n",
			++count,
			m_ctrlComm.GetOutBufferCount(),
			m_ctrlComm.GetOutBufferSize(),
			now.QuadPart-old_time.QuadPart
			);
	old_time.QuadPart=now.QuadPart;
	OutputDebugString(str1);
	//测试时间代码
	outcou--;
	if(outcou<=0)
	{
	  m_Timer.Stop();//KillTimer(nIDEvent);
	  MessageBox("发送结束");
	}

}
/*
	
*/

⌨️ 快捷键说明

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