📄 portsenddlg.cpp
字号:
//保存文件
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 + -