📄 powerdlg.cpp
字号:
for (k=2;k<len-1;k++)
{
BYTE bt =*(char *)(data2+k);
//data3[k-2] =*(char *)(data2+k);
//str +=data3[k-2];
strtemp.Format("%c",bt);
str +=strtemp;
}
str+='\0';
strcpy(data3,str);
/*/////////////////////
strtemp.Format("%c",data3[3]);
MessageBox(strtemp);
*//////////////////////
for (k=0;k<7;k++)
{
outputTorque +=data3[k];
outputRate +=data3[k+7];
inputTorque +=data3[k+14];
inputRate +=data3[k+21];
}
outputTorque +='\0';
outputRate +='\0';
inputTorque +='\0';
inputRate +='\0';
//MessageBox(outputTorque);
doutputTorque = atof(outputTorque);
doutputRate = atof(outputRate);
dinputRate = atof(inputRate);
dinputTorque = atof(inputTorque);
if(m_bPowerRTflag) //第一次读
{
dinputTorque1 =dinputTorque;
m_bPowerRTflag =FALSE;
}
else
{
dinputTorque2 =dinputTorque;
m_bPowerRTflag =TRUE;
}
//dpower = (doutputTorque*doutputRate)/(dinputTorque*dinputRate);
dpower = fabs(doutputTorque/(dinputTorque*160));
if(dpower<2.5)//效率值小于2.5,数据正常
{
m_nTotalnumber++;//读取的次数加1
m_nRdNumber++;//每组读取的次数加1
m_nReadNumber++; //读数次数加1
pApp->pCTestFormDoc->pPowerInRate[m_nRdNumber-1] =dinputRate;
pApp->pCTestFormDoc->pPowerOutRate[m_nRdNumber-1] =doutputRate;
pApp->pCTestFormDoc->pPowerInTorque[m_nRdNumber-1] =dinputTorque;
pApp->pCTestFormDoc->pPowerOutTorque[m_nRdNumber-1] =doutputTorque;
pApp->pCTestFormDoc->pPowerData[m_nRdNumber-1] =dpower;
}
else
m_nPowerRTime --; //计数器减1,放弃此次读数
/*///-------测试开始------------////
CString string,string5;
string.Format("%d",m_nTotalnumber);
string5.Format("%5.3f",dpower);
MessageBox(string);
MessageBox(inputRate);
MessageBox(outputRate);
MessageBox(inputTorque);
MessageBox(outputTorque);
MessageBox(string5);
////-------测试结束------------///*/
//m_bPowerRTflag = FALSE;
//过度过程试验所需操作
////---------------过度过程试验所需操作开始-------------------////
if (m_bResepOn)
{
//获得输出转速上升时间的起点
if (m_bOutputRate_timef&&(doutputRate>=(m_dOutputRate_set*m_dOutputRate_ratef)))
{
m_bOutputRate_timef=FALSE;//不再读取系统时间
pApp->pCTestFormDoc->pPowerRespData[0]=GetSystemTime();//获得系统时间
pApp->pCTestFormDoc->pPowerRespData[1]=doutputRate;
pApp->pCTestFormDoc->pPowerRespData[2]=m_nTotalnumber;
}
//获得输出转速上升时间的终点
if (m_bOutputRate_timet&&(doutputRate>=(m_dOutputRate_set*m_dOutputRate_ratet)))
{
m_bOutputRate_timet=FALSE;//不再读取系统时间
pApp->pCTestFormDoc->pPowerRespData[3]=GetSystemTime();//获得系统时间
pApp->pCTestFormDoc->pPowerRespData[4]=doutputRate;
pApp->pCTestFormDoc->pPowerRespData[5]=m_nTotalnumber;
}
//获得输出转速峰值所对应的时间
////----------------////
//进行了3次读数
if (m_nReadNumber>3)
{
double rdata,mdata,ldata;
//寻找峰值
//右侧值
rdata=pApp->pCTestFormDoc->pPowerOutRate[m_nRdNumber-1];
//中间值
mdata=pApp->pCTestFormDoc->pPowerOutRate[m_nRdNumber-2];
//左侧值
ldata=pApp->pCTestFormDoc->pPowerOutRate[m_nRdNumber-3];
//是峰值且该值比稳定的输出转速大,则该值即为所找峰值
if (m_bOutputRate_times&&(mdata>=rdata)&&(mdata<=ldata)&&mdata>m_dOutputRate_set)
{
//获取该时刻的系统时间
m_bOutputRate_timep=FALSE;//不再读取系统时间
pApp->pCTestFormDoc->pPowerRespData[6]=GetSystemTime();//获得系统时间
pApp->pCTestFormDoc->pPowerRespData[7]=doutputRate;
pApp->pCTestFormDoc->pPowerRespData[8]=m_nTotalnumber;
}
}
////----------------////
//获得输出转速在稳定范围内的次数
////----------------////
if (m_bOutputRate_times&&(doutputRate>=(m_dOutputRate_set*(1-m_dOutputRate_stable)))
&&(doutputRate<=(m_dOutputRate_set*(1+m_dOutputRate_stable))))
{
m_nOutputRate_redn++;
}
if (m_bOutputRate_times&&(m_nReadNumber>10))//已经进行了10次读数
{
double divide=m_nReadNumber/m_nOutputRate_redn;
if (divide>dividerate)
{
m_bOutputRate_times=FALSE;//不再读取系统时间
pApp->pCTestFormDoc->pPowerRespData[9]=GetSystemTime();//获得系统时间
pApp->pCTestFormDoc->pPowerRespData[10]=m_nTotalnumber-10;
m_nOutputRate_addn =m_nTotalnumber/3;
m_nReadNumber=1; //读数次数清零
}
m_nReadNumber=1;
m_nOutputRate_redn=1;
}
////----------------////
}
////----------------过度过程试验所需操作结束-------------------////
if (m_nPowerRTime > 0)
{
//先将列表控制框中的内容清除
m_cPowerRdata.DeleteAllItems();
//将输出扭矩显示在列表控制框中
m_cPowerRdata.InsertItem(LVIF_TEXT|LVIF_STATE,
0, //要插入条目的索引号
outputTorque, //第一栏要插入的字符串
LVIS_SELECTED|LVIS_FOCUSED,
LVIS_SELECTED|LVIS_FOCUSED,
0,
0);
//将输出转速显示在列表控制框中
m_cPowerRdata.SetItemText(0,1,outputRate);//条目的索引号,
//第几栏(从0开始),要设置的字符串
//将输入扭矩显示在列表控制框中
m_cPowerRdata.SetItemText(0,2,inputTorque);
//将输入转速显示在列表控制框中
m_cPowerRdata.SetItemText(0,3,inputRate);
//读数计数器赋为0
m_nPowerRTime = 0;
}
//用于判断效率仪读取的数据是否为m_nNumber(4)的倍数
int nresidue =m_nTotalnumber%m_nNumber;
int nresidue1 =m_nTotalnumber%64;
if ((nresidue==0)&&m_nTotalnumber>0)
{
switch(hitnumber)
{
case 0x011: //效率试验
pApp->pCTestFormDoc->nPowerNumber = m_nRdNumber;
pApp->pCTestFormDoc->nTotalPowerNumber = m_nTotalnumber;
//发送消息至画图对话框
pApp->pCTestFormView->powerDrawDlg.SendMessage(WM_POWERDAQ_FINISH,0,0);
break;
case 0x012: //超载试验
pApp->pCTestFormDoc->nPowerNumber = m_nNumber;
pApp->pCTestFormDoc->nTotalPowerNumber = m_nTotalnumber;
//发送消息至画图对话框
pApp->pCTestFormView->overDrawDlg.SendMessage(WM_POWERDAQ_FINISH,0,0);
break;
default:
break;
}
if(nresidue1==0)
m_nRdNumber=0;//重新开始一组读数
}
////-----------度过程试验所需操作开始----------------////
if (m_bResepOn&&(m_nReadNumber>m_nOutputRate_addn))
{
//停止接收数据,并发送消息至过度过程试验绘图窗口,触发画图
m_bPowerReceive =FALSE;
pApp->pCTestFormDoc->nPowerNumber = m_nTotalnumber;
pApp->pCTestFormDoc->nTotalPowerNumber = m_nTotalnumber;
pApp->pCTestFormView->respDrawDlg.SendMessage(WM_POWERDAQ_FINISH,0,0);
}
////-----------度过程试验所需操作结束----------------////
//////////////////////////////////////////
/*/两次读得的输入扭矩相差不到0.01,停止接收数据
if(fabs(dinputTorque2 - dinputTorque1)<0.01)
m_bPtestReceive = FALSE;
else
m_bPtestReceive = TRUE;
*///
//////////////////////////////////
}
}
}
//响应点击过渡过程试验中开始试验按钮的函数
void PowerDlg::OnMotrespstarthit(WPARAM wParam, LPARAM lParam)
{
// MessageBox("0");
m_bResepOn =TRUE;//进行过度过程试验
//获得输出值的设定比例值
int rate = (int)wParam;
//获得输出值的设定值
m_dOutputRate_set = (double)lParam;
//获取过度过程各个设定值
switch(rate)
{
case 0x000:
m_dOutputRate_ratef=0.0;//用于存放过度过程试验中输出转速的上升起点
m_dOutputRate_ratet=1.0;//用于存放过度过程试验中输出转速的上升终点
m_dOutputRate_stable=0.10;//用于存放过度过程试验中输出转速的稳定范围
//MessageBox("0");
break;
case 0x001:
m_dOutputRate_ratef=0.0;//用于存放过度过程试验中输出转速的上升起点
m_dOutputRate_ratet=1.0;//用于存放过度过程试验中输出转速的上升终点
m_dOutputRate_stable=0.10;//用于存放过度过程试验中输出转速的稳定范围
//MessageBox("1");
break;
case 0x010:
m_dOutputRate_ratef=0.0;//用于存放过度过程试验中输出转速的上升起点
m_dOutputRate_ratet=1.0;//用于存放过度过程试验中输出转速的上升终点
m_dOutputRate_stable=0.10;//用于存放过度过程试验中输出转速的稳定范围
break;
case 0x011:
m_dOutputRate_ratef=0.0;//用于存放过度过程试验中输出转速的上升起点
m_dOutputRate_ratet=1.0;//用于存放过度过程试验中输出转速的上升终点
m_dOutputRate_stable=0.10;//用于存放过度过程试验中输出转速的稳定范围
break;
case 0x100:
m_dOutputRate_ratef=0.0;//用于存放过度过程试验中输出转速的上升起点
m_dOutputRate_ratet=1.0;//用于存放过度过程试验中输出转速的上升终点
m_dOutputRate_stable=0.10;//用于存放过度过程试验中输出转速的稳定范围
break;
case 0x101:
m_dOutputRate_ratef=0.0;//用于存放过度过程试验中输出转速的上升起点
m_dOutputRate_ratet=1.0;//用于存放过度过程试验中输出转速的上升终点
m_dOutputRate_stable=0.10;//用于存放过度过程试验中输出转速的稳定范围
break;
case 0x110:
m_dOutputRate_ratef=0.0;//用于存放过度过程试验中输出转速的上升起点
m_dOutputRate_ratet=1.0;//用于存放过度过程试验中输出转速的上升终点
m_dOutputRate_stable=0.10;//用于存放过度过程试验中输出转速的稳定范围
//MessageBox("110");
break;
case 0x111:
m_dOutputRate_ratef=0.0;//用于存放过度过程试验中输出转速的上升起点
m_dOutputRate_ratet=1.0;//用于存放过度过程试验中输出转速的上升终点
m_dOutputRate_stable=0.10;//用于存放过度过程试验中输出转速的稳定范围
break;
default:
//MessageBox("0");
break;
}
//开始接收数据
//PowerOpenport();
OnBupowerReceive();
//获得过度过程试验开始读数的系统时间
m_dReadDatatime_start = GetSystemTime();
}
//获得系统时间
double PowerDlg::GetSystemTime()
{
CString strTime;
double dmin,dsec,dtime;
CTime CurrentTime=CTime::GetCurrentTime();
dmin=CurrentTime.GetMinute();
dsec=CurrentTime.GetSecond();
dtime=dmin+dsec/60.0;
return dtime;
}
//点击效率试验主控窗口开始按钮消息响应函数
void PowerDlg::OnMotpowstarthit(WPARAM wParam, LPARAM lParam)
{
//MessageBox("123");
//开始接收数据
//PowerOpenport();
OnBupowerReceive();
}
//点击超载试验主控窗口开始按钮消息响应函数
void PowerDlg::OnMotoverstarthit(WPARAM wParam, LPARAM lParam)
{
//MessageBox("123");
//开始接收数据
OnBupowerReceive();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -