You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mitlib.pub/MITLIB/IODll/Motor_ETEL.h

193 lines
5.9 KiB
C++

// Motor_ETEL.h: interface for the CMotor_ETEL class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_MOTOR_ETEL_H__FC570503_D3D0_404B_91B5_62C2067BD698__INCLUDED_)
#define AFX_MOTOR_ETEL_H__FC570503_D3D0_404B_91B5_62C2067BD698__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "MotorBase.h"
class CMotor_ETEL : public CMotorBase
{
public:
CMotor_ETEL(CMtrProfile mtrProfile, double *dpPos, CMotionControllerBase *pBaseController);
virtual ~CMotor_ETEL();
// **************************************************************
// Methods declaration
// **************************************************************
// method to close the axis
void CloseAxis() override;
// method to initialize and configure the axis
void ConstructAxis() override;
// method to On/Off motor
bool OnMotor() override;
bool OffMotor() override;
bool IsBenchDebug() override;
// method to stop motor with decceleration
bool DecelStop() override;
// method to trigger Emergency stop the motor int EStop();
bool EmergStop() override;
// method to get commanded position
bool GetMotorCommandedPosition(int iMtrNo, double *pRaw) override;
// method to get other motor axis IO status
int GetMotionIOStatus(const CMtrProfile &mtrProfile) override;
// method to get Other axis motor ready status
BOOL IsMotorReady(const CMtrProfile &mtrProfile) override;
// method to get Other axis Alarm status
BOOL IsMotorAlarm(const CMtrProfile &mtrProfile) override;
// method to get Other axis negative/ccw limit status
BOOL IsNegLmtHit(const CMtrProfile &mtrProfile) override;
// method to get Other axis positive/cw limit status
BOOL IsPosLmtHit(const CMtrProfile &mtrProfile) override;
// method to get Other axis home sensor status
bool IsMtrOn(const CMtrProfile &mtrProfile) override;
// method to get other motor axis current position
bool GetMotorPosition(const CMtrProfile &mtrProfile, double *pRawPosition) override;
// method to get motor axis current position error
bool GetMotorPositionError(double *pRawPositionError) override;
// method to do homing by index signal
BOOL HomeByIndex() override;
// method to do homing by Home Sensor
BOOL HomeBySensor() override;
// method to move absolute
bool AbsoluteMove(double dPosition, int nMode, PROFILE_CURVE curve) override;
// method to move relative distance
bool RelativeMove(double dDistance, PROFILE_CURVE curve) override;
// method to move continuously
int MoveContinuously(bool bCW = true) override;
// method to process interrupt to decode what happen to the motor
void ProcessInt(int nIntCode = 0) override;
// method to reset single trigger
int ResetSingleTrigger(double dPosition = 0.0) override;
// method to set the commanded position register
bool SetMotorCommandedPosition(double dPosition) override;
// method to set homing modes
int SetHomeMode(int iHomeMode) override;
// method to set the mechanical coversion factor
bool RefreshMotorConversionFactor() override;
// method to set multiple trigger
virtual bool SetMotorMultipleTrigger(const multiple_trigger &trigger) override;
// method to force set the current position
bool SetMotorPosition(double dPosition) override;
// method to arm multiaxis for simultaneous motion,
// nMode = 0 : Normal multi-axis move
// nMode = 1 : Gantry move
int SimultaneousMove(int nNoOfAxis, CMtrProfile *mtrProfile, double *dPosition, double *dStartVel, double *dMaxVel, double *dAcc, int nMode = 0) override;
// method to move motor in s-curve continuously
int SMoveContinuously(bool bCW = true) override;
void SetMotorProfile(double dValue, motion_profile::PROFILE_TYPE type) override;
// method to move profile
int UpdateProfile() override;
int GantryEnable(int nNoOfAxis, CMtrProfile *mtrProfile) override;
int GantryDisable(int nNoOfAxis, CMtrProfile *mtrProfile) override;
int ResetAlarm(bool bReset) override;
// Stop Motion Time Counter and return the time
long StopMotionTimeCounter();
// Logging of messages
void Log(CString csMsg);
private:
enum ETEL_DRIVE_STATUS
{
MOTOR_ON_STATUS,
MOTOR_READY_STATUS,
MOTOR_ALARM_STATUS,
};
// Get Axis Status, Polling, Bus Busy
dword GetAxisStatusM60();
// Get Other Axis Status M60, Polling, Bus busy
dword GetAxisStatusM60(CMtrProfile mtrProfile);
// Get Axis Status M63
// Get Other Axis Status M63
// Get Axis Home Complete Status
bool IsAxisHomeSequenceCompleted();
// Check if axis is in Homing Sequence
bool IsAxisInHoming();
bool m_bBenchDebugWithActualHardware;
BOOL GenerateNewHomePosition();
DSA_DRIVE_GROUP *m_group;
// method to move profile
int UpdateProfile(CMtrProfile mtrProfile, int nDepth, double dAcc, double dSpd, double dJerk);
// Gary 28Sep11, V1.29.03 added separate method to set gantry move profile
int UpdateGantryProfile(int nDepth, double dAcc, double dSpd, double dJerk);
// MIT BT 0000030, Gary Lam 17Jan13, V1.29.08
int iso_upi_converter(double isovalue, long &lInc);
int trigger_pulse_generator_event_setting(int ntrigger_event_number, double dtrigger_start_on_position, double dtrigger_direction, long lgenerator_used, double ddelta_position);
bool ResetDrive();
bool ResetDriveError();
bool GetDriveStatus(int nMtrNo, ETEL_DRIVE_STATUS status);
bool UpdateHomingProfile();
bool ConfigureTriggerUseRealPosition();
bool ClearTriggerOutput();
bool ConfigureTriggerOutput(int nCmpSource);
bool ConfigureTriggerOutputMask();
enum PULSE_GENERATOR
{
PG1,
PG2,
};
bool ConfigureTriggerOutputPulse(PULSE_GENERATOR pg);
};
#endif // !defined(AFX_MOTOR_ETEL_H__FC570503_D3D0_404B_91B5_62C2067BD698__INCLUDED_)