项目一阶段问题汇总

  实验室需要一个简单的串口通信界面来控制电机驱动器,从而实现对电机的控制(主要是闭环恒速,闭环位置),相关算法已经集成在驱动器里,主要是根据驱动器的手册对寄存器功能的介绍,用mfc界面进行对寄存器的操作。在编写过程中遇到了很多问题,不记下来容易遗忘,才意识到写博客的重要性。由于之前没有学习过c++,只有一些C语言的基础,涉及的问题比较初级,仅仅是为了记录问题解决的过程,在遇到相同问题时可以回忆起解决的办法。

  项目一阶段问题汇总

问题1:串口控件的使用就不多说了,网上有很多控件的教程,要注意控件的更新方式,控件使用出现了崩溃的情况,是在速度框输入负转速时,程序发生了崩溃,经过网上查询相关内容,还没有解决问题,初步猜想是使用UpdateData(1); //控件--->变量  的时机出现了问题,正在排查程序里更新控件的时机,考虑使用单个控件更新来代替更新所有控件。--发现问题是在显示速度中GetDlgItem(IDC_EDIT_FWDSPD)->SetWindowText(strText);//显示到当前速度栏
                                                        //UpdateData(1);//更新控件的值                          删除这句之后就解除了bug

问题2:界面中使用了teechart控件,来绘制实时的转速图像,不得不说此控件很强大,仅仅通过对控件的设置就完成了控件标题、坐标轴标题、鼠标停留显示点的坐标等功能

也通过下面的语句,放置在0.1s周期的定时器的处理函数实现了对转速的绘制。

程序为:if(status.nMotorSpd!=0x0000)//status.nMotorSpd为读回的速度
                    {

                    CSeries SpeedSeries = (CSeries)m_Chart.Series(0);
                    double speed=status.nMotorSpd*Direction;      定义了全局变量实现对不同方向转速的绘制
                    SpeedSeries.Add(speed,NULL,0);//速度不为零时绘制一个点
                    CAxes chartaxis=(CAxes)m_Chart.get_Axis();
                    CAxis chartaxisbottom=(CAxis)chartaxis.get_Bottom();
                    chartaxisbottom.Scroll(1,TRUE);                       实现图像的移动,设置横坐标为固定个数点

                   }

存在的问题是:速度的方向,是否可以用驱动器来识别,现在只是实现了通过判断速度设定值的正负来设置标志Direction

                           使用Add函数添加点,造成图像横坐标是0.1s为单位的,想用Addxy函数实现横坐标单位为s,定义了变量x,在定时器处理函数中进行x++,而后将x*0.1设定为横坐标进行显示,但是x变量的定义,不知道放在何处,全局变量是否可以,以及如何使用。

                         --(类向导直接添加自定义变量?类似Direction)可以实现效果

                         由于使用了多个定时器,使用switch(nIDEvent)来区分各定时器的处理,ontimer函数中语句过于复杂,对图像点的时间精度造成了影响,出现了10s的离心过程只绘制了七八十个点(每个点0.1s)。猜想是定时器执行过程造成了时间延迟,导致了打点精度未知。

                        设置定时器回调函数是否能解决

SetTimer(UINT_PTR nIDEvent,UINT nElapse,void (CALLBACK* lpfnTimer)
void
 CALLBACK EXPORT TimerProc(HWND hWnd, // handle of CWnd that called SetTimer  UINT nMsg, // WM_TIMERUINT nIDEvent // timer identification  DWORD dwTime // system time  );

问题3:在多阶段的转速控制中,增速变换效果符合预期,减速变换效果出现了问题,速度差超过了200转问题很明显,应对离心流程的程序进行检查。项目一阶段问题汇总

提速过程正常,但横轴时间精度明显有问题

项目一阶段问题汇总

第三阶段的300转并非没有写入..而是在执行时出现了问题,降速的速度等同于*停车的速度,*停车减速到指定速度时间过长时可能会引起pi调节器的饱和,也许解决饱和问题能减少超调。  然而在后续的实验中发现了pi正常作用的情况,怀疑是pi控制短时间失效造成超调过大。.