#pragma once #include enum AxisType{ ServoAxis, ForcerAxis, StepAxis, WrongAxis,//错误轴 }; enum CardType { GTS = 0, LeiSai = 1, APS = 2, ACS = 3, }; enum HomeMethod { IO2HOME = 1, HOME2HOME = 2, INDEX2HOME = 4, DIRECT2HOME = 5, NEGLIMITINDEXHOME = 6, POSLIMITINDEXHOME = 7, NEGLIMITHOME = 8, POSLIMITHOME = 9, }; struct CardData { int m_nBoardIndex; CardType m_nCardType; int m_nCardIndex; }; struct AxisData{ virtual void virtualMark(){};//!<提供用于转换的虚函数表 int m_nID; //!<整个控制库中独特的轴编号 std::string m_sName; //!<轴名称 int m_nCardType /*= GTS; */; //!<卡的类型,固高,雷赛,ACS, int m_nCardIndex; //!<卡号,属于这种类型的第几张卡 int m_nAxisIndexInCard; //!<该轴在卡中的索引 int m_nAxisNumInCard; //!<该轴对应卡所含轴的总轴数 //******************************************************************** //UI中不使用 //int m_nBoardNum; //卡号,所有卡的排序;2024/10/28 int m_nAxisType = ServoAxis; //轴类型,不从具体表column中读取 std::string m_sCommAddress; //通讯地址 int m_nPort; //端口号 int m_nSerialPort; //串口号 unsigned int m_nBaudRate; //波特率,需要为无符号整型 std::string m_sIPLocal; //上位机本地IP地址 std::string m_sIPDriver; //驱动器IP地址 int m_nRemotePort; //驱动器端口 int m_nHeadType; //? int m_nModuleType; //模块类型是什么东西? int m_nMotorID; //卡? int m_nTranceducerType; //超声类型 //******************************************************************** //General Parameters int m_nNegativeLimitSwitch; //负限位开关(用1和0表示开关)(!!!) int m_nNegLimSwIndex; //负限位开关io的index int m_nNegLimSwLevel; //负限位电平(01常开常闭) int m_nPositiveLimitSwitch; //正限位开关,用1和0表示开关 int m_nPosLimSwIndex; //正限位开关io的index int m_nPosLimSwLevel; //正限位电平(01常开常闭) int m_nAbortAtHWLimit; //在硬件限位触发时是否中止操作(0,1) int m_nHighVoltageMode; //是否处于高压模式(0,1) //******************************************************************** //advance parameter 先进参数 int m_nEncoderFaultIndex; //编码器故障索引:暂时不需要 int m_nEncoderFaultBit; //编码器故障位:暂时不需要 int m_nEncoderFaultLevel; //编码器故障级别:暂时不需要 double m_fMotorTemperatureGain; //电机温度增益:暂时不需要 double m_fMotorTemperatureTimeConstant; //电机温度时间常数:暂时不需要 double m_fMotorTemperatureLimit; //电机温度限制:暂时不需要 int m_nDriveCardType; //驱动器类型(控制卡?):暂时不需要 int m_nDriveCardStatusBitMask; //驱动器卡状态位掩码:暂时不需要 double m_fKxab; //暂时不需要 double m_fKyab; //暂时不需要 double m_fKza; //暂时不需要 double m_fKza2; //暂时不需要 double m_fKtv; //电压到达时间:暂时不需要 double m_fKta; //电流到达时间:暂时不需要 //********************************************************************** //trackball parameter double m_fPositionerRate1; //定位器比率1:暂时不需要 double m_fPositionerRate2; //定位器比率2:暂时不需要 double m_fPositionerGain1; //定位器增益1:暂时不需要 double m_fPositionerGain2; //定位器增益2:暂时不需要 double m_fPositionerGain3; //定位器增益3:暂时不需要 //********************************************************************** //other parameters double m_fPosScaleFactor; //位置比例因子:物理单位与脉冲的关系 cnts/um;CntsPerCircle/Pitch double m_fSpringCoefficient1 = 0; //弹簧系数1:暂时不需要 double m_fSpringCoefficient2 = 0; //弹簧系数2:暂时不需要 double m_fSpringCoefficient3 = 0; //弹簧系数3:暂时不需要 int m_nUPHEnhance; //(!!!) }; // //控制轴 struct ControlAxisData : AxisData { //******************************************************************** //Home Parameter 回零参数 double m_fPositionTolerance; //位置公差(相当于已有的误差带ErrBand) int m_nHomeSwitch; //原点开关!Home开关 int m_nHomeSwitchIndex; //原点开关索引(Home开关对应的索引) int m_nHomeSwitchLevel; //原点开关电平(Home触发电平,默认应该都是低电平) int m_nIndexPulse; //索引脉冲(Index) int m_nIndexPulseIndex; //index脉冲的索引 int m_nHomingBuffer; //轴对应回零程序存储的Buffer号 int m_nHomingProcId; //回零过程id(回零方式) int m_nHomingDir1; //回零方向1(HomeDir:Home回零方向) int m_nHomingDir2; //回零方向2(IndexDir:Index回零方向) double m_fHomingVel1; //回零速度1;(快速回零速度) double m_fHomingVel2; //回零速度2;(慢速回零速度) double m_fHomingAccel; //回零加速度 double m_fHomingDecel; //回零减速度 double m_fHomingOutputLimit; //回零输出限制:暂时不需要 double m_fHomingErrThresh; //回零错误阈值:暂时不需要 double m_fHomePosition; //回零位置 double m_fInitialPosition; //初始位置(!!!或许相当于已有的零位偏置) //General Parameters 常规参数 double m_fNegCmdLimit; //负命令限位(软限位) double m_fPosCmdLimit; //正命令限位(软限位) double m_fMinimumVelocity; //最小速度 double m_fStopDeceleration; //停止减速度(平滑值) double m_fStopDecelerationSD; //停止减速度(急停) int m_nFindLimitsProc; //寻找限位过程;(?) //**************************************************************************** //other Parameter double m_fMaximumJerk = 0; //最大的加加速度(um/s^3) double m_fMaximumAcceleration = 0; //最大加速度(um/s^2) double m_fMaximumVelocity = 0; //最大速度(um/s) double m_fEndVelocity = 0; //每一段的末端速度(um/s) double m_fNegativeLimitMargin; //负限位外边距(负限位与电机停止位置之间的距离):暂时不需要 double m_fPositiveLimitMargin; //正限位外边距:暂时不需要 }; // //力矩轴 struct ForcerAxisData : AxisData { int m_nOpenPositionMargin; //开环位置边距:暂时不需要 int m_nClosePositionMargin; //闭环位置边距:暂时不需要 double m_fOutputScaleFactor; //输出比例系数:这个目前只在力轴上使用 double m_fOutputOffset; //输出补偿:这个目前只在力轴上使用 double m_fOutputLimit; //输出极限:这个目前只在力轴上使用 double m_fWireClampForceCoefficient;//线夹力系数 }; // //伺服轴 struct ServoAxisData : ControlAxisData { double m_fSafetyModeGain; //安全模式增益 double m_fErrorThreshold; //误差阈值 int m_nErrThreshCount; //错误触发计数 double m_fKa; //电流 double m_fKv; //电压 double m_fKp; //比例调节系数 double m_fKi; //积分调节系数 double m_fKd; //微分调节系数 double m_fIntegratorLimit; //积分器限制 double m_fForceOffset; //力补偿 double m_fForceScaleFactor; //力标度系数 double m_fStaticFriction; //静摩檫力:暂时不需要 double m_fDynamicFrictionCoefficient;//动摩擦系数:暂时不需要 double m_fInertia; //惯性,测试,后删:暂时不需要 double m_fPidOutputErrorThreshold; //pid输出错误阈值 double m_fKip; //电流调节器的比例系数 double m_fKii; //电流调节器的积分系数 int m_nECPR; //电子齿轮比 int m_nQuadDiv; //四阶分频;:暂时不需要 double m_fEpdOnTime; //使能时间:暂时不需要 double m_fEpdOffTime; //关闭时间:暂时不需要 double m_fEpdCurrent; //电流:暂时不需要 double m_fEpdPeak; //峰值:暂时不需要 double m_fDriveAngleCalibCurrent; //驱动角校准电流:暂时不需要 double m_fDriveAngleCalibPos; //驱动角校准位置:暂时不需要 double m_fDriveAngleCalibAngle; //驱动角校准角度:暂时不需要 double m_fDriveAngleAtHome; //原点时的驱动角度:暂时不需要 int m_nDriveAngleCalibCycles; //驱动角校准周期:暂时不需要 double m_fJerkFeedForward; //加加速前馈 double m_fIntegratorSwitchVelocity; //积分开关速度 double m_fBaseMass; //基础质量(负载质量) double m_fForceConstant; //力常数 double m_fOutputLimitGain; //输出限制增益 }; //步进轴 struct StepAxisData :ControlAxisData { //******************************************************************* //other parameter double m_fHoldCurrent; //保持电流 double m_fRunCurrent; //运行电流 double m_fSettlingTime; //稳定时间 int m_nErrorCorrectionMode; //误差修正模型:暂时不需要 };