版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 残疾人服务档案制度
- 工作人员规范化管理制度
- 水利工程档案制度评审会
- 档案管理制度基本规定
- 物质档案管理制度
- 医护日常上下班制度规范
- 志愿者管理制度规范要求
- 2025年昆明航空职业学院马克思主义基本原理概论期末考试模拟题带答案解析
- 2024年珠海艺术职业学院马克思主义基本原理概论期末考试题带答案解析(夺冠)
- 职业拳手休假制度规范
- (2025年)羽毛球三级裁判练习试题附答案
- AI大模型在混凝土增强模型中的应用研究
- 医院培训课件:《标本采集方法》
- 成都新易盛高速率光模块技术与产线扩产升级项目环境影响报告表
- 股骨干骨折脂肪栓塞护理查房
- 美容护肤技术授课张秀丽天津医学高等专科学校04课件
- 公司越级汇报管理制度
- 2025年江苏省淮安市涟水县中考一模化学试题(原卷版+解析版)
- DBJ33T 1307-2023 微型钢管桩加固技术规程
- 叉车安全管理人员岗位职责
- 忠诚宣言:出轨丈夫的保证书
评论
0/150
提交评论