用户自定义电机初始化

2024-08-21 20:28

本文主要是介绍用户自定义电机初始化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用户自定义电机初始化,一般就是举升和旋转电机初始化

int AGVBasicDriverControl::controlUserMotorInit()
{int result=0;KEYSTATE keyStatus;KEYSTATE keyStatusUp, keyStatusDown;float angleDiff, heightDiff;bool initActionFinshFlag=false;if(mLiftManualPlatformControl.size()==0//小车举升平台控制输出&&mRotateManualPlatformControl.size()==0)//小车旋转平台控制输出{result=1;qDebug()<<"没有举升旋转马达,直接退出初始化";return result;}if(mUserMotorInitStep==0) //初始化第0步,将各个控制马达初始化标志置复位{for(int i=0;i<mLiftManualPlatformControl.size();i++){mLiftManualPlatformControl[i].nLiftPlatformInitStep=0;if(mCartLiftMotorParameterList[i].downLimitIoAddr!=0&&mCartLiftMotorParameterList[i].upLimitIoAddr==0)//有下限位,没有上限位{getInputIOStatus(mCartLiftMotorParameterList[i].downLimitIoAddr,keyStatusUp);if(keyStatusUp==KEY_OFF)mLiftManualPlatformControl[i].nLiftPlatformInitStep=1;//跳过顶盘上升5mm阶段,进入顶盘下降寻找原点}mLiftManualPlatformControl[i].mLiftMotorInitFlag=false;mLiftManualPlatformControl[i].mLiftPlatformHeightRef=0;pComManualLiftMotorCurrentHeight[i]=-1;//用于显示举升马达当前高度mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.clear();//平台升降位置记忆序列}for(int i=0;i<mRotateManualPlatformControl.size();i++){mRotateManualPlatformControl[i].nRotationPlatformInitStep=0;mRotateManualPlatformControl[i].mRotationMotorInitFlag=false;mRotateManualPlatformControl[i].mRotationPlatformAngleRef=0;pComManualRotateMotorCurrentAngle[i]=-1;mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.clear();}mUserMotorInitStep=1;qDebug()<<"用户马达初始化跳转到第 1 步";}else if(mUserMotorInitStep==1)//初始化第1步,升降电机归位零点{if(mLiftManualPlatformControl.size()==0){mUserMotorInitStep=2; //跳转到旋转盘升降初始化}initActionFinshFlag=true;for(int i=0;i<mLiftManualPlatformControl.size();i++){if(mCartLiftMotorParameterList[i].downLimitIoAddr==0)//没有指定升降马达IO,不需要初始化{mLiftManualPlatformControl[i].mLiftMotorInitFlag=true;}if(mLiftManualPlatformControl[i].mLiftMotorInitFlag==false){initActionFinshFlag=false;if(mCartLiftMotorParameterList[i].downLimitIoAddr!=0&&mCartLiftMotorParameterList[i].upLimitIoAddr!=0)//有上下限位{getInputIOStatus(mCartLiftMotorParameterList[i].downLimitIoAddr,keyStatusUp);getInputIOStatus(mCartLiftMotorParameterList[i].upLimitIoAddr,keyStatusDown);if(keyStatusUp==KEY_ON&&keyStatusDown==KEY_ON){xAGVAlarmErrorManager::addErrorCode(ERROR_AGV_LIFT_MOTOR_INIT_FAULT,0);qDebug()<<"升降电机上下限位同时感应到信号,请检查,确定限位的常开常闭属性";}}if(mLiftManualPlatformControl[i].nLiftPlatformInitStep==0)//顶盘上升5mm{if(getInputIOStatus(mCartLiftMotorParameterList[i].upLimitIoAddr,keyStatus)==true){
//                        qDebug()<<"mLiftManualPlatformControl[i].mLiftPlatformHeightRef"<<mLiftManualPlatformControl[i].mLiftPlatformHeightRef<<"mCartLiftMotorParif(mLiftManualPlatformControl[i].mLiftPlatformHeightRef>5.0f||keyStatus==KEY_ON){mLiftManualPlatformControl[i].nLiftPlatformInitStep=1;mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.clear();setLiftPlatformMotorSpeed(i,0);qDebug()<<"升降电机初始化第 0步完成,进入第1步";}else{setLiftPlatformMotorSpeed(i,PLATFORM_LIFT_INIT_SPEED_FAST);//上升控制mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.append(mLiftManualPlatformControl[i].mLiftPlatformHeightRef);if(mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.size()>MAX_MOTOR_POS_REM){mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.removeAt(0);if(fabs(mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem[MAX_MOTOR_POS_REM-1]-mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem[0])<PLATFORM_LIFT_INIT_SPEED_FAST/10.0f){xAGVAlarmErrorManager::addErrorCode(ERROR_AGV_LIFT_MOTOR_INIT_FAULT,0);}}}}else{setLiftPlatformMotorSpeed(i,0);qDebug()<<"IO通信主板超时等待中";}}else if(mLiftManualPlatformControl[i].nLiftPlatformInitStep==1)//顶盘下降寻找原点{if(getInputIOStatus(mCartLiftMotorParameterList[i].downLimitIoAddr,keyStatus)==true){if(keyStatus==KEY_ON){mLiftManualPlatformControl[i].nLiftPlatformInitStep=2;mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.clear();setFollowPlatformLiftMotorSpeed(0);qDebug()<<"顶升马达初始化第 1步完成,进入第2步";}else{
//                            qDebug()<<"顶升马达速度输出"<<PLATFORM_LIFT_INIT_SPEED_FAST;setLiftPlatformMotorSpeed(i,PLATFORM_LIFT_INIT_SPEED_FAST*-1);//下降控制mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.append(mLiftManualPlatformControl[i].mLiftPlatformHeightRef);if(mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.size()>MAX_MOTOR_POS_REM){mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.removeAt(0);if(fabs(mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem[MAX_MOTOR_POS_REM-1]-mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem[0])<PLATFORM_LIFT_INIT_SPEED_FAST/10.0f){xAGVAlarmErrorManager::addErrorCode(ERROR_AGV_LIFT_MOTOR_INIT_FAULT,0);}}}}else{setLiftPlatformMotorSpeed(i,0);qDebug()<<"IO通信主板超时等待中";}}else if(mLiftManualPlatformControl[i].nLiftPlatformInitStep==2)//顶盘举升确定顶升原点{if(getInputIOStatus(mCartLiftMotorParameterList[i].downLimitIoAddr,keyStatus)==true){if(keyStatus==KEY_OFF){mLiftManualPlatformControl[i].mFollowPlatformLiftBeginHeightRem=mLiftManualPlatformControl[i].mLiftPlatformHeightRef*-1;if(mLiftManualPlatformControl[i].mFollowPlatformLiftBeginHeightRem>mCartLiftMotorParameterList[i].liftHeight){mLiftManualPlatformControl[i].mFollowPlatformLiftBeginHeightRem=mCartLiftMotorParameterList[i].liftHeight;}if(mLiftManualPlatformControl[i].mFollowPlatformLiftBeginHeightRem<0){mLiftManualPlatformControl[i].mFollowPlatformLiftBeginHeightRem=0;}mLiftManualPlatformControl[i].nLiftMotorPlusNum=0;mLiftManualPlatformControl[i].nLiftPlatformInitStep=3;mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.clear();setLiftPlatformMotorSpeed(i,0);qDebug()<<"举升马达初始化第 2步完成,进入第3步,回到原来高度 "<<mLiftManualPlatformControl[i].mFollowPlatformLiftBeginHeightRem;}else{setLiftPlatformMotorSpeed(i,PLATFORM_LIFT_INIT_SPEED_SLOW);//上升控制mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.append(mLiftManualPlatformControl[i].mLiftPlatformHeightRef);if(mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.size()>MAX_MOTOR_POS_REM){mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem.removeAt(0);if(fabs(mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem[MAX_MOTOR_POS_REM-1]-mLiftManualPlatformControl[i].lstPlatformLiftHeightRefRem[0])<PLATFORM_LIFT_INIT_SPEED_FAST/10.0f){xAGVAlarmErrorManager::addErrorCode(ERROR_AGV_LIFT_MOTOR_INIT_FAULT,0);}}}}else{setLiftPlatformMotorSpeed(i,0);qDebug()<<"IO通信主板超时等待中";}}else if(mLiftManualPlatformControl[i].nLiftPlatformInitStep==3)//顶盘举升到原来起始位置{heightDiff=mLiftManualPlatformControl[i].mFollowPlatformLiftBeginHeightRem-mLiftManualPlatformControl[i].mLiftPlatformHeightRef;if(fabs(heightDiff)<0.5){mLiftManualPlatformControl[i].nLiftPlatformInitStep=4;//跳到转盘初始化步骤setLiftPlatformMotorSpeed(i,0);//上升控制qDebug()<<"举升马达初始化第 3步完成,进入第4步";}else{setLiftPlatformMotorSpeed(i,PLATFORM_LIFT_INIT_SPEED_FAST*sign(heightDiff));//上升控制}}else{mLiftManualPlatformControl[i].mLiftMotorInitFlag=true;qDebug()<<"完成举升马达"<<i<<"初始化所有动作";}}else{setLiftPlatformMotorSpeed(i,0);}}if(initActionFinshFlag==true){mUserMotorInitStep=2;//跳转到旋转马达初始化qDebug()<<"完成举伸马达初始化所有动作,进入旋转马达初始化";}}else if(mUserMotorInitStep==2)//初始化第2步,旋转电机归位零点{if(mRotateManualPlatformControl.size()==0){mUserMotorInitStep=3; //跳转到下一步}initActionFinshFlag=true;for(int i=0;i<mRotateManualPlatformControl.size();i++){if(mCartRotateMotorParameterList[i].rotateRightZeroIoAddr==0)//没有指定旋转马达IO,不需要初始化{mRotateManualPlatformControl[i].mRotationMotorInitFlag=true;}if(mRotateManualPlatformControl[i].mRotationMotorInitFlag==false){initActionFinshFlag=false;if(mRotateManualPlatformControl[i].nRotationPlatformInitStep==0)//顶盘逆时针旋转10度{if(getInputIOStatus(mCartRotateMotorParameterList[i].rotateLeftLimitIoAddr,keyStatus)==true){setRotatePlatformMotorSpeed(i,PLATFORM_ROTATE_INIT_SPEED_FAST);mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.append(mRotateManualPlatformControl[i].mRotationPlatformAngleRef);if(mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.size()>MAX_MOTOR_POS_REM){mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.removeAt(0);if(fabs(mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem[MAX_MOTOR_POS_REM-1]-mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem[0])<PLATFORM_ROTATE_INIT_SPEED_FAST/10.0f){xAGVAlarmErrorManager::addErrorCode(ERROR_AGV_ROTATE_MOTOR_INIT_FAULT,0);}}if(mRotateManualPlatformControl[i].mRotationPlatformAngleRef>10.0f||keyStatus==KEY_ON){mRotateManualPlatformControl[i].nRotationPlatformInitStep=1;mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.clear();setRotatePlatformMotorSpeed(i,0);}}else{qDebug()<<"IO通信主板超时等待中";}}else if(mRotateManualPlatformControl[i].nRotationPlatformInitStep==1)//顶盘顺时针旋转查找原点{if(getInputIOStatus(mCartRotateMotorParameterList[i].rotateRightZeroIoAddr,keyStatus)==true){setRotatePlatformMotorSpeed(i,PLATFORM_ROTATE_INIT_SPEED_FAST*-1);mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.append(mRotateManualPlatformControl[i].mRotationPlatformAngleRef);if(mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.size()>MAX_MOTOR_POS_REM){mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.removeAt(0);if(fabs(mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem[MAX_MOTOR_POS_REM-1]-mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem[0])<PLATFORM_ROTATE_INIT_SPEED_FAST/10.0f){xAGVAlarmErrorManager::addErrorCode(ERROR_AGV_ROTATE_MOTOR_INIT_FAULT,0);}}if(keyStatus==KEY_ON){mRotateManualPlatformControl[i].nRotationPlatformInitStep=2;mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.clear();setRotatePlatformMotorSpeed(i,0);qDebug()<<"旋转马达初始化第 1步完成,进入第2步";}}else{setRotatePlatformMotorSpeed(i,0);qDebug()<<"IO通信主板超时等待中";}}else if(mRotateManualPlatformControl[i].nRotationPlatformInitStep==2)//顶盘逆时针旋转确定原点{if(getInputIOStatus(mCartRotateMotorParameterList[i].rotateRightZeroIoAddr,keyStatus)==true){setRotatePlatformMotorSpeed(i,PLATFORM_ROTATE_INIT_SPEED_SLOW);mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.append(mRotateManualPlatformControl[i].mRotationPlatformAngleRef);if(mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.size()>MAX_MOTOR_POS_REM){mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.removeAt(0);if(fabs(mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem[MAX_MOTOR_POS_REM-1]-mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem[0])<PLATFORM_ROTATE_INIT_SPEED_SLOW/10.0f){xAGVAlarmErrorManager::addErrorCode(ERROR_AGV_ROTATE_MOTOR_INIT_FAULT,0);}}if(keyStatus==KEY_OFF){mRotateManualPlatformControl[i].nRotationPlatformInitStep=3;mRotateManualPlatformControl[i].mFollowPlatformRotationBeginAngleRem=mRotateManualPlatformControl[i].mRotationPlatformAngleRef*-1;mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.clear();mRotateManualPlatformControl[i].nRotationMotorPlusNum=0;setRotatePlatformMotorSpeed(i,0);qDebug()<<"旋转马达初始化第 2步完成,进入第3步";}}else{setRotatePlatformMotorSpeed(i,0);qDebug()<<"IO通信主板超时等待中";}}else if(mRotateManualPlatformControl[i].nRotationPlatformInitStep==3)//顶盘旋转到原来起始位置{angleDiff=fmodToNP180Degree(mRotateManualPlatformControl[i].mFollowPlatformRotationBeginAngleRem-mRotateManualPlatformControl[i].mRotationPlif(fabs(angleDiff)<0.1){setRotatePlatformMotorSpeed(i,0);mRotateManualPlatformControl[i].nRotationPlatformInitStep=6;//跳到顶盘旋转到原来起始位置步骤mRotateManualPlatformControl[i].lstPlatformRotateAngleRefRem.clear();qDebug()<<"顶盘初始化第 5步完成,进入第6步";}else{if(fabs(angleDiff)>5)setRotatePlatformMotorSpeed(i,PLATFORM_ROTATE_INIT_SPEED_FAST*sign(angleDiff));elsesetRotatePlatformMotorSpeed(i,PLATFORM_ROTATE_INIT_SPEED_SLOW*sign(angleDiff));}}else{mRotateManualPlatformControl[i].nRotationPlatformInitStep=4;mRotateManualPlatformControl[i].mRotationMotorInitFlag=true;qDebug()<<"完成旋转马达"<<i<<"初始化所有动作";}}else{setRotatePlatformMotorSpeed(i,0);mRotateManualPlatformControl[i].mRotationMotorInitFlag=true;}}if(initActionFinshFlag==true){mUserMotorInitStep=3;//跳转到旋转马达初始化qDebug()<<"完成旋转马达初始化所有动作,结束用户马达初始化动作";}}else if(mUserMotorInitStep==3)//初始化第3步,升降电机回复原来高度{result=1;}return result;
}

这篇关于用户自定义电机初始化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1094198

相关文章

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

c++的初始化列表与const成员

初始化列表与const成员 const成员 使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。 不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。 在定义const成员时进行初始化,该语法只有在C11语法标准下才支持。 初始化列表 在构造函数小括号后面,主要用于给