版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五年级上册数学期末教学质量监测试卷分析合集
- Unit1 topic 3 Section D 说课稿 -2024-2025学年仁爱科普版八年级英语上册
- 2025年护理班班主任工作计划范文
- 人教版(新)八年级历史与社会下册:7.1工业革命说课稿
- 2025幼儿园小班班主任工作计划表
- 2025年小学各年级班主任工作计划范文
- 光通信电缆相关行业投资方案范本
- 热电偶相关行业投资规划报告范本
- 2025年护理人员工作计划
- 2025年班主任安全的工作计划
- 高中新教材化学必修一课后习题答案(人教版)
- GB/T 19326-2022锻制支管座
- GB/T 9740-2008化学试剂蒸发残渣测定通用方法
- GB/T 7424.1-1998光缆第1部分:总规范
- 拘留所教育课件02
- 护士事业单位工作人员年度考核登记表
- 儿童营养性疾病管理登记表格模板及专案表格模板
- 天津市新版就业、劳动合同登记名册
- 数学分析知识点的总结
- 2023年重症医学科护理工作计划
- 年会抽奖券可编辑模板
评论
0/150
提交评论