📄 ctrlbord.cpp
字号:
m_displayWnd.DrawLine();
}
else
send_req=true;
}
void CCtrlBord::OnCheckTrige()
{
UpdateData(1);
if(m_TrigeMode)
{m_check_trige_button.SetWindowText("↑沿触发");
code[0]='G';
}
else
{
m_check_trige_button.SetWindowText("↓沿触发");
code[0]='F';
}
m_displayWnd.m_nTriggerType=m_TrigeMode;
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
}
void CCtrlBord::OnScaleline()
{
m_displayWnd.DisScaleLine();
}
void CCtrlBord::OnSave()
{
CFile file;
if( !file.Open( "C:\\test.bin",CFile::modeCreate | CFile::modeWrite ) )
MessageBox("Create file error!");
else
{ file.Write(addata,1000);
file.Close();
}
}
void CCtrlBord::OnSignalTrig()
{
UpdateData(1);
if(m_single_trige){code[0]='H';
m_single_trige_button.SetWindowText("单次触发");
}
else{code[0]='J';
m_single_trige_button.SetWindowText("自动触发");
}
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
}
void CCtrlBord::OnAc()
{
m_dc_button.SetCheck(0);
m_gnd_button.SetCheck(0);
}
void CCtrlBord::OnDc()
{
m_ac_button.SetCheck(0);
m_gnd_button.SetCheck(0);
}
void CCtrlBord::OnGnd()
{
m_dc_button.SetCheck(0);
m_ac_button.SetCheck(0);
}
void CCtrlBord::OnSelchangeComboSelectFt()
{
unsigned char ItemID=(unsigned char)m_FT_comb.GetCurSel ();
// CString mes;
// mes.Format("%d",ItemID);
// MessageBox(mes);
code[0]='E';
code[1]=ItemID;
// while(busy_flag);
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
}
void CCtrlBord::OnKeyUp()
{
}
void CCtrlBord::OnKeyLeft()
{
}
void CCtrlBord::OnKeyRight()
{
}
void CCtrlBord::OnKeyDown()
{
}
void CCtrlBord::OnKeyOk()
{
}
void CCtrlBord::OnKeyExit()
{
}
BEGIN_EVENTSINK_MAP(CCtrlBord, CFormView)
//{{AFX_EVENTSINK_MAP(CCtrlBord)
ON_EVENT(CCtrlBord, IDC_MSCOMM, 1 /* OnComm */, OnOnCommMscomm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CCtrlBord::OnOnCommMscomm()
{
VARIANT vR;
static int count;
// MessageBeep(-1);
if(m_ComPort.GetCommEvent()!=2)
return;
int l=m_ComPort.GetInBufferCount();
if(l!=1032)return;
// if(!isRun)
// return;
busy_flag=true;
unsigned char * data;
m_ComPort.SetBreak(0);
m_ComPort.SetInputLen(1032); //12
vR=m_ComPort.GetInput();
data=(unsigned char *)vR.parray->pvData;
if(isRun)
{
memcpy(adbuffer,data,1032);
Data_analyse();
m_displayWnd.DrawLine();
m_mes.Format("正在采集%d",count++);
UpdateData(0);
if(send_req)
{ SendMessageToCom(code,5);
send_req=false;
Sleep(10);
}
// else
// {
code[0]='C'; //启动采集数据
SendMessageToCom(code,5);
// }
}
busy_flag=false;
}
void CCtrlBord::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
code[0]='A';
code[1]=0;
code[2]='O';
code[3]='O';
code[4]='O';
m_FT_comb.SetCurSel(2);
m_select_ch1.SetCheck(1);
m_ch1_button.SetCheck(1);
m_trig_ctrl.SetRange(0,1024,1);
m_trig_ctrl.SetPos(512);
m_ComPort.SetCommPort(1); //选择串行端口
m_ComPort.SetPortOpen(TRUE);
m_ComPort.SetSettings("115200,n,8,1");
m_ComPort.SetInputMode(1);
m_ComPort.SetRThreshold(1032);//12
m_ComPort.SetInputLen(0);
m_ComPort.GetInput();
//code[0]='D'; //开始采集数据
//code[0]='D'; //开始采集数据
//SendMessageToCom(code,5);
}
void CCtrlBord::SendMessageToCom(unsigned char *data, int n)
{
//#ifdef COMM
int i;
// COleVariant varOutput;
unsigned char Sum=0;
CByteArray array;
array.RemoveAll();
array.SetSize(n);
for(i=0;i<n;i++)
array.SetAt(i,data[i]);
if(!m_ComPort.GetPortOpen())
m_ComPort.SetPortOpen(1);
m_ComPort.SetOutput(COleVariant(array));
// #endif
}
void CCtrlBord::OnOff()
{
//unsigned char c='F';
//SendMessageToCom(&c,1);
}
void CCtrlBord::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
UpdateData(1);
WORD v,t;
// unsigned char * p;
CSliderCtrl *pSlider = (CSliderCtrl *)pScrollBar;
if(pSlider == &m_trig_ctrl)
{
m_trig_vlot = pSlider->GetPos ();
v=1024-m_trig_vlot;
m_vlot_dis.Format ("%.2fV",(0.852*v)/1024.0);
// v=m_trig_vlot;
v<<=2;
t=v;
code[0]='B';
t>>=8;
code[1]=(unsigned char ) t&0x00ff;
code[2]=(unsigned char )v&0x00ff;
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
// SendMessageToCom(code,5);
// code[0]='A';
}
UpdateData(0);
CFormView::OnVScroll(nSBCode, nPos, pScrollBar);
}
void CCtrlBord::OnJk1()
{
UpdateData(1);
code[0]='A';
if(m_JK1)
code[1]=0x11;
else
code[1]=0x10;
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
//SendMessageToCom(code,5);
}
void CCtrlBord::OnJk2()
{
UpdateData(1);
code[0]='A';
if(m_JK2)
code[1]=0x13;
else
code[1]=0x12;
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
}
void CCtrlBord::OnJk3()
{
UpdateData(1);
code[0]='A';
if(m_JK3)
code[1]=0x15;
else
code[1]=0x14;
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
}
void CCtrlBord::OnJk4()
{
UpdateData(1);
code[0]='A';
if(m_JK4)
code[1]=0x17;
else
code[1]=0x16;
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
}
void CCtrlBord::OnDb10()
{
UpdateData(1);
code[0]='A';
if(m_db10)
code[1]=0x18;
else
code[1]=0x19;
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
}
void CCtrlBord::OnDb2()
{
UpdateData(1);
code[0]='A';
if(m_db2)
code[1]=0x1c;
else
code[1]=0x1d;
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
}
void CCtrlBord::OnDb5()
{
UpdateData(1);
code[0]='A';
if(m_db5)
code[1]=0x1a;
else
code[1]=0x1b;
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
}
void CCtrlBord::OnCh1andch3()
{
// TODO: Add your control notification handler code here
}
void CCtrlBord::OnCh1subch2()
{
// TODO: Add your control notification handler code here
}
void CCtrlBord::OnCha()
{
m_select_ch2.SetCheck(0);
UpdateData(1);
code[0]='A';
code[1]=0x3a;
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
}
void CCtrlBord::OnChb()
{
m_select_ch1.SetCheck(0);
code[0]='A';
code[1]=0x3b;
if(!isRun)
SendMessageToCom(code,5);
else
send_req=true;
}
/*
unsigned int sampleT; //采样频率的周期,ns为单位
unsigned int T_div; //显示每点的时间,ns为单位
*/
void CCtrlBord::Data_analyse()
{
int dv=T_div/sampleT;
int i,j,n;
for(i=0;i<8;i++)
addata[1024+i]=adbuffer[1024+i];
switch(dv=0)
{ case 0:
n=0;
// 丢掉第0个数据
for(i=sampleT*3;i<2*DISWIDTH*T_div;i+=T_div)
{
if(i%sampleT==0)
addata[n]=adbuffer[i/sampleT];
else
//disbuffer[n]=Intrepol_lagrange(i,pbuf);
addata[n]=Intrepol_sin(i,adbuffer);
n++;
}
break;
case 400:
for(j=400;j<1024;j+=400)
{ for(i=0;i<1023;i++)
addata[i]=addata[i+1];
addata[1024]=adbuffer[j];
}
break;
case 1000:
for(i=0;i<1023;i++)
addata[i]=addata[i+1];
addata[1024]=adbuffer[1000];
break;
default:
memcpy(addata,adbuffer,1032);
break;
}
}
/*正弦内插计算公式
∞ sin[PI*(t-nTs)/Ts]
X(t)=∑ X(nTs)* ------------------
-∞ (PI*(t-nTs)/Ts)
其中Ts :采样周期
t给定的时间
*/
#define IntMM 15
unsigned char CCtrlBord::Intrepol_sin(int t, LPBYTE pbuf)
{
int n=t/sampleT;
//int x1=(n+1)*Sample_T;
//int x0=n*Sample_T;
float q=PI/sampleT;
int a[2*IntMM+1],s,m;
float tt;
s=0;
for(int i=0;i<IntMM;i++)
{ tt=q*(t-(n-(IntMM-i))*sampleT);
a[i]=(int)1000.0*sin(tt)/tt;
m=n-(IntMM-i);
if(m<=0)
m=0;
s+=pbuf[m]*a[i];
}
tt=q*(t-(n-(IntMM-i))*sampleT);
a[i]=(int)1000.0*sin(tt)/tt;
m=n-(IntMM-i);
if(m<=0)
m=0;
s+=pbuf[m]*a[i];
i++;
for(;i<2*IntMM+1;i++)
{tt=q*(t-(n+(i-IntMM))*sampleT);
a[i]=(int)1000.0*sin(tt)/tt;
m=n+(i-IntMM);
if(m<0)
m=0;
s+=pbuf[m]*a[i];
}
s/=1000;
if(s>255)
s=255;
if(s<0)
s=0;
return (BYTE)(s);
}
unsigned char CCtrlBord::Intrepol_lagrange(int t, LPBYTE pbuf)
{
int n=t/sampleT;
int x1=(n+1)*sampleT;
int x0=n*sampleT;
int n_3,n_2,n_1;
BYTE s;
n_3=n-3;
n_2=n-2;
n_1=n-1;
if(n_3<0)n_3=0;
if(n_2<0)n_2=0;
if(n_1<0) n_1=0;
// s=-0.0909*(pbuf[n_3]+pbuf[n+4])+0.1273*(pbuf[n_2]+pbuf[n+3])-0.2122*(pbuf[n_1]+pbuf[n+2])
// +0.6366*(pbuf[n]+pbuf[n+1]);
s=(BYTE)(pbuf[n]*(t-x1)/(x0-x1) + pbuf[n+1]*(t-x0)/(x1-x0));
return s;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -