调整转台角度.doc_第1页
调整转台角度.doc_第2页
调整转台角度.doc_第3页
调整转台角度.doc_第4页
调整转台角度.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

调整转台角度.txt不怕偷儿带工具,就怕偷儿懂科技! 1品味生活,完善人性。存在就是机会,思考才能提高。人需要不断打碎自己,更应该重新组装自己。/ CROTATE dialog 调整角度对话框 该段程序的主要思想就是设置调整角度对话框,在对话框中输入目标角度,并让转台启动扫描,使转台角度到达目标角度。即使天线的最大接收方向对准发射天线CROTATE:CROTATE(CWnd* pParent /*=NULL*/): CDialog(CROTATE:IDD, pParent)/AFX_DATA_INIT(CROTATE)m_rotate = 0.0; /目标角度初始设置为0/AFX_DATA_INITvoid CROTATE:DoDataExchange(CDataExchange* pDX) /设置对话框中的输入变量 目标角度m_rotateCDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CROTATE)DDX_Control(pDX, IDC_PROGRESS1, m_pro);DDX_Text(pDX, IDC_EDIT1, m_rotate);/AFX_DATA_MAPCROTATE:CROTATE()if (hCom !=NULL)Close_Comport(hCom);BEGIN_MESSAGE_MAP(CROTATE, CDialog) 设置对话框中的按钮ok,坐标标定,左微调,右微调,退出限位,归零/AFX_MSG_MAP(CROTATE)ON_BN_CLICKED(IDC_RATOTE_OK, OnRatoteOk)ON_BN_CLICKED(IDC_BCALIBTATE, OnBcalibtate)ON_BN_CLICKED(IDC_BLEFT, OnBleft)ON_BN_CLICKED(IDC_BRIGHT, OnBright)ON_BN_CLICKED(IDC_BTCHXW, OnBtchxw)ON_BN_CLICKED(IDC_BZERO, OnBzero)/AFX_MSG_MAPEND_MESSAGE_MAP()/ CROTATE message handlersBOOL CROTATE:OnInitDialog() /输入变量初始化 目标角度定义为-90CDialog:OnInitDialog();/ TODO: Add extra initialization herem_rotate=-90;hCom=Open_Comport(1, 9600); / open the com 1 ;Invalidate(true);UpdateData(false);Poll();return TRUE; / return TRUE unless you set the focus to a control / EXCEPTION: OCX Property Pages should return FALSEvoid CROTATE:AdjustAngle(int mode) /调整角度函数,步进0.2度/MOde=0 ,right turn (increase) ; =1 ,left turn (decrease) ; char* str2com =new char12 ;char haz,laz,sum;float azelfloat;short tmpint,tmpint1;if (mode=0) tmpcmdAZ=tmpcurAZ+0.2f; /转台角度向右,步进为0.2 else tmpcmdAZ=tmpcurAZ-0.2f; /转台角度向左,步进为0.2 if (tmpcmdAZ = 0.0) /如果角度为正,实际角度*10=传输角度 azelfloat = float (floor( tmpcmdAZ * 10.0 + 0.1 );/转台每转过0.1度,伺服控制器就向计算机上报一次转台当前位置角度值。 tmpint = short (azelfloat); tmpint1 = tmpint;haz = char( tmpint1 8 ); /取高八位 laz = tmpint & 0x00ff; /取低八位 else / 如果角度为负,实际角度*10=传输角度azelfloat = float (floor( fabs(tmpcmdAZ) * 10.0 + 0.1 ); tmpint = short (azelfloat);tmpint = tmpint + 1; tmpint1 = tmpint;haz = char( tmpint1 8 ); /取高八位 laz = tmpint & 0x00ff;/取低八位sum =0;sprintf(str2com,%c%c%c%c%c%c%c%c%c%c, 0x55,0x55,0x20,haz,laz,haz,laz,1,1,sum);/启动扫描,每分钟5 Sleep(400) ;Write_Comport(hCom,10, str2com); /发送定位命令delete str2com ;/Sleep(100) ; / query() ;void CROTATE:Poll() /当前角度查询函数char* str2com =new char12 ;char* readstr =new char1024 ;sprintf(str2com,%c%c%c%c%c%c%c%c%c%c, 0x55,0x55,0x26,0,0,0,0,0,0,0xD0);/查询角度 Sleep(500);Write_Comport(hCom,10, str2com); /发送查询命令Sleep(200);int tmpint ;unsigned long BytesRead;char unsigned tmpcharAZ ;char unsigned tmpintH, tmpintL;int tmp ;tmpint = Read_Comport(hCom, &BytesRead, 1024, readstr);if (tmpint)/fprintf(fpklength,%dt%dt%dn,BytesRead,*(readstr + 2),totalk);if (BytesRead = 6) /接收到6个字节或6个字节以上。int k=BytesRead/6 ;tmpcharAZ = *(readstr+3+6*(k-1); /接收最新的数据if (tmpcharAZ128 ) tmpintH = *(readstr+3+6*(k-1) ;tmpintL = *(readstr+4+6*(k-1) ; tmpcurAZ = float(tmpintH*256+tmpintL-65536.0)/10.0); else tmpintH = *(readstr+3+ 6*(k-1) ;tmpintL = *(readstr+4+ 6*(k-1) ; tmp = tmpintH * 256;tmpcurAZ = float( ( tmp + tmpintL) / 10.0);else / if (tmpint)AfxMessageBox(与控制器之间通信不成功!) ;delete str2com ;delete readstr ;void CROTATE:OnRatoteOk() / 按钮ok的函数/ TODO: Add your control notification handler code here/定位到目标角度的ok按钮UpdateData(true);Poll() ; / 查询角度if (fabs(m_rotate-tmpcurAZ)= 0.0) 如果目标角度为正 azelfloat = float (floor( m_rotate * 10.0 + 0.1 );/转台每转过0.1度,伺服控制器就向计算机上报一次转台当前位置角度值。 tmpint = short (azelfloat); tmpint1 = tmpint;haz = char( tmpint1 8 );取高八位 laz = tmpint & 0x00ff; 取低八位 else azelfloat = float (floor( fabs( m_rotate) * 10.0 + 0.1 ); tmpint = short (azelfloat);tmpint = tmpint + 1; tmpint1 = tmpint;haz = char( tmpint1 8 ); laz = tmpint & 0x00ff;sum =0;/sum=0x55+0x55+0x20+haz+laz+haz+laz+1+1;sprintf(str2com,%c%c%c%c%c%c%c%c%c%c, 0x55,0x55,0x20,haz,laz,haz,laz,1,1,sum); /启动扫描,转速为每分钟5Write_Comport(hCom,10, str2com); /发送定位命令 Sleep(200);/开始不断读角度数据,直到到达指定位置BOOL bltoend = true ;char tmpcharAZ ;char unsigned tmpintH, tmpintL;short tmp; unsigned long syspos ; while(bltoend)Sleep(50); /tmpint = Read_Comport(hCom, &BytesRead, 1024, readstr);if (tmpint)if (BytesRead = 6) /接收到6个字节或6个字节以上。for(unsigned long i =1 ;iBytesRead;i+)if(*(readstr+i)=39) /搜寻命令码/0x27应答查询命令,同时将转台当前的绝对位置坐标上报if(*(readstr+i-1)=85) /搜寻同步码 0x55syspos=i ;if(syspos(BytesRead-2) syspos+=1 ; else if(BytesRead-2)=syspos & sysposBytesRead) syspos-=5 ; if (1syspos & sysposBytesRead)tmpcharAZ = *(readstr+syspos); /接收最新的数据if ( (tmpcharAZ & 0x80) = 0x80 ) tmpintH = *(readstr+syspos) ;tmpintL = *(readstr+syspos+1) ; tmp = tmpintH * 256;tmpcharAZ = float( -1.0 * ( (tmp + tmpintL) + 1) / 10.0); else tmpintH = *(readstr+syspos) ;tmpintL = *(readstr+syspos+1) ; tmp = tmpintH * 256;tmpcharAZ = float( ( tmp + tmpintL) / 10.0); int pos =length -int(fabs(m_rotate-tmpcharAZ)/0.1f);m_pro.SetPos(pos);if (fabs(tmpcharAZ-m_rotate)0.05) /到达终点角90bltoend=false ;/Close_Comport(hCom);break ; / exitif (str2com!=NULL) delete str2com ;if (readstr!=NULL) delete readstr ;/Close_Comport(hCom); /关闭串口/CDialog:OnOK();void CROTATE:OnBleft() / TODO: Add your control notification handler code here/左微调Poll();AdjustAngle(1);void CROTATE:OnBright() / TODO: Add your control notification handler code here/右微调Poll();AdjustAngle(0);void CROTATE:OnBcalibtate() / TODO: Add your control notification handler code here/坐标标定char* str2com =new char12 ;sprintf(str2com,%c%c%c%c%c%c%c%c%c%c, 0x55,0x55,0x32,0,0,0,0,0,0,0xDC);/校准转台的绝对零点坐标 Sleep(500);Write_Comport(hCom,10, str2com); /发送坐标标定命令delete str2com ;void CROTATE:OnBtchxw() / TODO: Add your control notification handler code here/退出限位char* str2com =new char12 ; /在转台限位状态下,命令转台自动退出限位。退出限位后,希望立即进行伺服校零sprintf(str2com,%c%c%c%c%c%c%c%c%c%c, 0x55,0x55,0x2E,0,0,0,0,0,0,0xD8); Sleep(500);Write_Comport(hCom,10, str2c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论