现在出现如下问题: 1。接收框的数据和teechart的曲线需要一段时间才能将接受的数据显示出来
2. 不能实现滚动显示
3.基于的数据室正弦波,但显示的却不是正弦波
我是初学者,以这个项目争取入门,现求助各位大侠,帮我看一下部分代码,如何解决问题!正纠结中,想尽快解决问题,拜托!如何知道怎样解决,请告诉我具体的代码 ,谢谢!
BOOL CCommDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
m_com.SetCurSel(0);
m_speed.SetCurSel(2);
//m_Comm.SetInBufferSize(4096); //接收缓冲区
//m_Comm.SetOutBufferSize(1024);//发送缓冲区
// m_Comm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_Comm.SetInputMode(1);//以二进制方式读写数据
m_Comm.SetRThreshold(1);//接
m_Comm.SetInputLen(0); //设置当前接收区数据长度为0
m_Comm.GetInput();
//((CSeries)m_ctrlchart.Series(0)).FillSampleValues(50);
SetTimer(1,1000,NULL);
OnTchart1();
return TRUE; // return TRUE unless you set the focus to a control
}
void CCommDlg::OnComm()
{
if(stop)return;
double dValue;
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[9000]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp,tempdata,usaldata;
if(m_Comm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_Comm.GetInput(); //读缓冲区
//m_Comm.SetInBufferCount(0);
//m_Comm.SetInBufferSize(4096 );
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);//字符型
strtemp.Format("%f",bt); //将字符送入临时变量strtemp存放
m_ReceiveData+=_T(strtemp); //加入接收编辑框对应字符串
usaldata+=strtemp;
}
if(m_ReceiveData != '/n')//若没接收完一串完整的字符串则继续接.对应下位机程序协议
{
tempdata=usaldata;
usaldata = "";//清空字符串
}
dValue= atof(tempdata); //将字符串转换为浮点数
((CSeries)m_ctrlchart.Series(0)).AddXY(m_time++,dValue,NULL,RGB(0,255,0));
}
UpdateData(FALSE);
}
void CCommDlg::OnTchart1()
{
// TODO: 在此添加命令处理程序代码
((CSeries)m_ctrlchart.Series(0)).Clear();
}
void CCommDlg::OnTimer(UINT_PTR nIDEvent)
{
if (((CSeries)m_ctrlchart.Series(0)).get_Count()>50)
((CSeries)m_ctrlchart.Series(0)).Delete(0);
CDialog::OnTimer(nIDEvent);
// TODO: Add your message handler code here and/or call default
}
2. 不能实现滚动显示
3.基于的数据室正弦波,但显示的却不是正弦波
我是初学者,以这个项目争取入门,现求助各位大侠,帮我看一下部分代码,如何解决问题!正纠结中,想尽快解决问题,拜托!如何知道怎样解决,请告诉我具体的代码 ,谢谢!
BOOL CCommDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
m_com.SetCurSel(0);
m_speed.SetCurSel(2);
//m_Comm.SetInBufferSize(4096); //接收缓冲区
//m_Comm.SetOutBufferSize(1024);//发送缓冲区
// m_Comm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_Comm.SetInputMode(1);//以二进制方式读写数据
m_Comm.SetRThreshold(1);//接
m_Comm.SetInputLen(0); //设置当前接收区数据长度为0
m_Comm.GetInput();
//((CSeries)m_ctrlchart.Series(0)).FillSampleValues(50);
SetTimer(1,1000,NULL);
OnTchart1();
return TRUE; // return TRUE unless you set the focus to a control
}
void CCommDlg::OnComm()
{
if(stop)return;
double dValue;
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[9000]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp,tempdata,usaldata;
if(m_Comm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_Comm.GetInput(); //读缓冲区
//m_Comm.SetInBufferCount(0);
//m_Comm.SetInBufferSize(4096 );
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k);//字符型
strtemp.Format("%f",bt); //将字符送入临时变量strtemp存放
m_ReceiveData+=_T(strtemp); //加入接收编辑框对应字符串
usaldata+=strtemp;
}
if(m_ReceiveData != '/n')//若没接收完一串完整的字符串则继续接.对应下位机程序协议
{
tempdata=usaldata;
usaldata = "";//清空字符串
}
dValue= atof(tempdata); //将字符串转换为浮点数
((CSeries)m_ctrlchart.Series(0)).AddXY(m_time++,dValue,NULL,RGB(0,255,0));
}
UpdateData(FALSE);
}
void CCommDlg::OnTchart1()
{
// TODO: 在此添加命令处理程序代码
((CSeries)m_ctrlchart.Series(0)).Clear();
}
void CCommDlg::OnTimer(UINT_PTR nIDEvent)
{
if (((CSeries)m_ctrlchart.Series(0)).get_Count()>50)
((CSeries)m_ctrlchart.Series(0)).Delete(0);
CDialog::OnTimer(nIDEvent);
// TODO: Add your message handler code here and/or call default
}
2.滚动显示需要你自己做个处理 把TeeChart的横轴每次从新设置一下 把x轴坐标每次向前移动一个
3.不是正弦 不是TeeChart的问题 检查你的数据