




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、int Check_OriginSignal(int cardno,int axis,int mode) if (mode=0) if(!STOP0_Highaxis-1) int bit= 2,8,14,20; /stop0return read_bit(cardno,bitaxis-1)=0?1:0; else int bit= 2,8,14,20; /stop0return read_bit(cardno,bitaxis-1)=1?1:0; else if(!STOP1_Highaxis-1) int bit= 3,9,15,21; /stop1return read_bit(cardn
2、o,bitaxis-1)=0?1:0; else int bit= 3,9,15,21; /stop1return read_bit(cardno,bitaxis-1)=1?1:0; int Check_LimitSignal(int cardno,int axis,int mode) if(!LMTLevel_Highaxis- 1) /低电平有效if (mode) int bit= 0,6,12,18; /LMT-return read_bit(cardno,bitaxis-1)=0?1:0; else int bit= 1,7,13,19; /LMT+return read_bit(ca
3、rdno,bitaxis-1)=0?1:0; else/高电平有效if (mode) int bit= 0,6,12,18; /LMT-return read_bit(cardno,bitaxis-1)=1?1:0; else int bit= 1,7,13,19; /LMT+return read_bit(cardno,bitaxis-1)=1?1:0; /*单轴回原点 * 功能:执行单轴回原点运动参数:cardno 卡号axis 轴号 (1-4) backDir 回原点方向0:正向1:负向logical0 回原点stop0设置0:低电平有效1:高电平有效logical1 回原点stop1设
4、置0:低电平有效1:高电平有效-1:无效(不搜索 Z相)homeStartV 回原点启始速度,取值范围:0-2M homeSpeed 回原点驱动速度,取值范围:0-2M homeAcc 回原点加速度,取值范围:0-64000 searchRange 原点范围(不宜过大 ) searchSpeed stop0搜索速度 (不宜过高 ) phaseSpeed Z相搜索速度(不宜过高 ) pulseUnit 每转脉冲返回值0:回原点成功 ; -1:参数错误 ; -2:回原点失败 ,(碰到限位或原点范围过小);1:回原点被中止说明: (1) 回原点分为四大步 : 第一步 :快速接近 stop0(logi
5、cal0原点设置 ),找到 stop0; 第二步 :慢速反向离开 stop0,反向移动指定原点范围脉冲数; 第三步 :再次慢速接近 stop0; 第四步 :慢速接近 stop1(logical1编码器 Z相). (2) 第四步可以选择是否执行,通过 logical1来选择 . (3) 若需多轴回原点 ,必须等待上一轴回原点结束后,才能执行下一轴的回原点动作. */int _stdcall home1(int cardno,int axis,int backDir,int logical0 ,int logical1 ,longhomeStartV,long homeSpeed, long ho
6、meAcc,long searchRange, long searchSpeed, longphaseSpeed , long pulseUnit) staticMSG msg; static int nCount =0; int workstep=0,status=-1,value=-1; /步骤;驱动状态intStopSignal=0; /停止信号long longPulse =2147483647; /长脉冲, 4字节上限Stop_Flagaxis-1=0; /标记该轴开始运动if (cardno=max_card_number ) return -1;/卡号判断if(axis4) re
7、turn -1; /轴号判断if(backDir1) return -1; /方向判断if(logical0 != 0 & logical0 != 1 ) return -1; /STOP0方式判断if(logical1 != 0 & logical1 != 1 & logical1 !=- 1) return -1; /STOP1方式判断/搜索范围 ,搜索速度 ,每转脉冲判断if(searchRange 0|searchSpeed 0|pulseUnit=homeSpeed) homeStartV=homeSpeed; set_startv (cardno,axis,
8、homeStartV); set_speed (cardno,axis,homeSpeed); else set_startv (cardno,axis,homeStartV); set_speed (cardno,axis,homeSpeed); set_acc (cardno,axis,homeAcc); set_stop0_mode (cardno,axis,1,logical0);/设定stop0有效电平Start_Run (axis); while (TRUE) switch(workstep) case0:/发送长脉冲/if(Check_OriginSignal(cardno,ax
9、is,0) /已经在原点 ,不发送长脉冲直接反向退出StopSignal=1;/由原点引起workstep=2; break; /pmove(cardno,axis,backDir?-longPulse:longPulse); workstep+; break ; case1:/分析是否碰到原点或限位if (backDir=1 & StopSignal= 0)/负向回原点 if(Check_OriginSignal(cardno,axis, 0) StopSignal=1;/由stop0原点引起if (Check_LimitSignal(cardno,axis, 1) StopSign
10、al=2;/由负限位引起 if ( backDir=0 & StopSignal= 0)/正向回原点 if(Check_OriginSignal(cardno,axis, 0) StopSignal=1;/由原点引起if (Check_LimitSignal (cardno,axis, 0) StopSignal=2;/由正限位引起 get_status (cardno,axis,&status);/驱动状态检测if (status) break;/驱动进行中,继续检测if (StopSignal=0) /未检测到正常停止信号 set_stop0_mode (cardno,ax
11、is,0,0); if (StopSignal=2) /原点模式时,由限位引起的停止 return -2; set_stop0_mode (cardno,axis,0,0); StopSignal=0; workstep+; break ; case2:/低速经过原点set_startv (cardno,axis,searchSpeed); set_speed (cardno,axis,searchSpeed); pmove(cardno,axis,backDir?searchRange:-searchRange);/搜索范围workstep+; break ; case3:/判断驱动结束,设
12、置原点有效get_status (cardno,axis,&status);/判断运动是否停止if (status) break; /驱动进行中,继续读信号和状态set_stop0_mode (cardno,axis,1,logical0); /设定stop0有效电平workstep+; break ; case4:/低速接近原点pmove(cardno,axis,backDir?-searchRange:searchRange); workstep+; break ; case5:/读信号和状态if (backDir=1 & StopSignal= 0)/负向回原点 if(C
13、heck_OriginSignal(cardno,axis, 0) StopSignal=1;/由stop0 原点引起if (Check_LimitSignal (cardno,axis, 1) StopSignal=2;/由负限位引起 if ( backDir=0 & StopSignal= 0)/正向回原点 if(Check_OriginSignal(cardno,axis, 0) StopSignal=1;/由stop0 原点引起if (Check_LimitSignal (cardno,axis, 0) StopSignal=2;/由正限位引起 get_status (card
14、no,axis,&status); if (status) break;/驱动进行中,继续读信号和状态if (StopSignal=0 | StopSignal=2) /未检测到正常停止信号 set_stop0_mode (cardno,axis,0,0); return -2; if(logical1=-1) /不搜索 Z,回原点完成set_stop0_mode (cardno,axis,0,0); set_command_pos (cardno,axis,0); set_actual_pos (cardno,axis,0); returnSUCCESSFUL; else if (l
15、ogical1=0|logical1=1)/搜索Z相 set_stop0_mode (cardno,axis, 0,0); workstep+; break; case6: /编码器 Z相,移动与每转脉冲数等长的位移 StopSignal=0; set_startv (cardno,axis,phaseSpeed); /低速接近 Z相set_speed (cardno,axis,phaseSpeed); /低速接近 Z相set_stop1_mode (cardno,axis,1,logical1);/设置Stop1有效电平pmove(cardno,axis,backDir?pulseUnit:
16、-pulseUnit); workstep+; break; case7:/判断搜索 Z相信号结果 if(Check_OriginSignal(cardno,axis, 1) StopSignal=1;/由STOP1引起get_status (cardno,axis,&status); if (status) break;/驱动进行中,继续读信号和状态if (StopSignal=0) /转了一圈仍然没有找到 Z信号set_stop1_mode (cardno,axis, 0,0); return -2; set_stop1_mode (cardno,axis,0,0); set_command_pos (cardno,axis,0); set_actual_pos (cardno,axis,0); returnSUCCESSFUL; if (Stop_Flagaxis-1=1)/响应外部的停止信号 ,退出break; /转让控制权PeekMessage (&msg,NULL ,0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 店长测试题及答案
- 2024年葫芦岛市高校毕业生“三支一扶”计划招募考试真题
- 学生学习自我评价的取向演进与趋势研究
- 《茅屋为秋风所破歌》教学设计
- 《老人与海鸥》课堂教学汇编
- 掌声说课课件下载
- 2025至2030中国保温材料检测行业市场发展现状及供给需求与前景趋势报告
- 2025至2030中国体育俱乐部行业市场发展现状及典型案例与投资报告
- 2025至2030中国亚麻行业供需分析及发展前景报告
- 2025至2030中国下拉式水龙头行业产业运行态势及投资规划深度研究报告
- SDS汽油安全技术说明书
- 【企业安全管理】粉尘涉爆企业安全培训
- GeneralEnglish-入学测试(剑桥五级)附有答案
- 教海探航论文
- IPC-A-610国际标准中英文对照(doc 17)
- JJF(建材)110-2019水泥雷氏夹膨胀测定仪校准规范-(高清现行)
- 《纳尼亚传奇》阅读交流(课堂PPT)
- 某航空公司教学材料之十八案例
- 县级课题研究过程记录
- 中山大学综合评价招生综合素质测试题总结
- 预制场(梁场)建设方案
评论
0/150
提交评论