#pragma once #include #include "../config/bean/AxisCfg.h" #include "SysParam.h" #include "../Communication/BaseData.h" #include "../DataManage/RWData.h" #include // 用于读取时返回的结构体 typedef struct { bool ServoOn; //轴伺服ON_RW bool ServoHomeIndexOn; //轴伺服成立原点_RW bool ServoReset; //轴伺服复位_RW bool MoveP; //轴相对左运动_手动_RW bool MoveN; //轴相对右运动_手动_RW bool MovePContinue; //轴左JOG_手动_RW bool MoveNContinue; //轴右JOG_手动_RW bool MoveAbsPos; //轴绝对值运动_手动_RW bool MotionStop; //轴急停_RW bool ServoRDY; //轴伺服RDY状态_R bool ServoHomeDone; //轴指令运行HOME_Done_R bool ResetDone; //轴指令运行RESET_Done_R bool ServoBusy; //轴伺服BUSY_R bool ServoException; //轴伺服异常_R bool Runable; //轴可运行状态_R short ExceptionCode; //轴伺服异常字_R bool ServoBreakOn; //主轴伺服刹车_RW bool BindSlaveOn; //主轴伺服绑定从轴_RW bool BindSlaveFinish; //主从轴已经绑定_R bool SlaveServoBreakOn; //从轴伺服刹车_RW bool SlaveUnbind; //从轴伺服解除绑定_RW float Pos; float Torque; float ShowPos; float RPos; } AxisStateValue; #pragma pack(1) class AxisState { public: AxisState(); virtual ~AxisState(); virtual void GetValue(AxisStateValue& value); //virtual void Update(unsigned char* addr); virtual void Update(const ReadData& rd); //virtual void UpdatePosAndLoad(unsigned char* addr); virtual void SetAxisCfg(AxisCfg* cfg) { m_AxisCfg = cfg; } virtual void SetZeroPos(); virtual float GetShowPos(); protected: void InsertMp(void* startPtr, size_t count, const string& suff = ""); map m_baseMp; public: char m_startFlag; //开始标志 BoolData* m_ServoOn; //轴伺服ON_RW BoolData* m_ServoHomeIndexOn; //轴伺服成立原点_RW BoolData* m_ServoReset; //轴伺服复位_RW BoolData* m_MoveP; //轴相对左运动_手动_RW BoolData* m_MoveN; //轴相对右运动_手动_RW BoolData* m_MovePContinue; //轴左JOG_手动_RW BoolData* m_MoveNContinue; //轴右JOG_手动_RW BoolData* m_MoveAbsPos; //轴绝对值运动_手动_RW BoolData* m_MotionStop; //轴急停_RW BoolData* m_ServoRDY; //轴伺服RDY状态_R BoolData* m_ServoHomeDone; //轴指令运行HOME_Done_R BoolData* m_ResetDone; //轴指令运行RESET_Done_R BoolData* m_ServoBusy; //轴伺服BUSY_R BoolData* m_ServoException; //轴伺服异常_R BoolData* m_Runable; //轴可运行状态_R ShortData* m_ExceptionCode; //轴伺服异常字_R FloatData* m_Pos; //当前位置 FloatData* m_Torque; //当前扭矩 FloatData* m_ShowPos; FloatData* m_RPos; char m_endFlag; //结束标志 std::shared_mutex mtx; AxisCfg* m_AxisCfg; }; class MainAxisState : public AxisState { public: MainAxisState() : m_ServoBreakOn(new BoolData("ServoBreakOn", u8"主轴伺服刹车_RW")) , m_BindSlaveOn(new BoolData("BindSlaveOn", u8"主轴伺服绑定从轴_RW")) , m_BindSlaveFinish(new BoolData("BindSlaveFinish", u8"主从轴已经绑定_R")){ InsertMp(&m_ServoBreakOn, 1); InsertMp(&m_BindSlaveOn, 1); InsertMp(&m_BindSlaveFinish, 1); } ~MainAxisState(){} void GetValue(AxisStateValue& value); //void Update(unsigned char* addr); public: BoolData* m_ServoBreakOn; //主轴伺服刹车_RW BoolData* m_BindSlaveOn; //主轴伺服绑定从轴_RW BoolData* m_BindSlaveFinish; //主从轴已经绑定_R }; class SlaveAxisState : public AxisState { public: SlaveAxisState() : m_ServoBreakOn(new BoolData("ServoBreakOn", u8"从轴伺服刹车_RW")) , m_Unbind(new BoolData("Unbind", u8"从轴伺服解除绑定_RW")) { InsertMp(&m_ServoBreakOn, 1); InsertMp(&m_Unbind, 1); } ~SlaveAxisState(){} void GetValue(AxisStateValue& value); //void Update(unsigned char* addr); public: BoolData* m_ServoBreakOn; //从轴伺服刹车_RW BoolData* m_Unbind; //从轴伺服解除绑定_RW }; #pragma pack() #if 0 class AxisState { public: AxisState(); ~AxisState(); public: bool m_MoldMainServoOn; //打印主轴伺服ON_RW bool m_MoldMainServoHomeIndexOn; //打印主轴伺服ON_RW bool m_MoldMainServoReset; //打印主轴伺服复位_RW bool m_MoldMainServoBreakOn; //打印主轴伺服刹车_RW bool m_MoldMainBindSlaveOn; //打印主轴伺服绑定从轴_RW bool m_MoldMainMoveUp; //打印主轴相对上运动_手动_RW bool m_MoldMainMoveDown; //打印主轴相对下运动_手动_RW bool m_MoldMainMoveUpContinue; //打印主轴上JOG_手动_RW bool m_MoldMainMoveDownContinue; //打印主轴下JOG_手动_RW bool m_MoldMainMoveAbsPos; //打印主轴绝对值运动_手动_RW bool m_MoldMainMotionStop; //打印主轴急停_RW bool m_MoldMainServoRDY; //打印主轴伺服RDY状态_R bool m_MoldMainServoHomeDone; //打印主轴指令运行HOME_Done_R bool m_MoldMainResetDone; //打印主轴指令运行RESET_Done_R bool m_MoldMainServoBusy; //打印主轴伺服BUSY_R bool m_MoldMainServoException; //打印主轴伺服异常_R bool m_MoldMainBindSlaveFinish; //打印主从轴已经绑定_R bool m_MoldMainRunable; //打印主轴可运行状态_R short m_MoldMainServoExceptionCode; //打印主轴伺服异常字_R bool m_MoldSlaveServoOn; //打印从轴伺服ON_RW bool m_MoldSlaveServoHomeIndexOn; //打印从轴伺服成立原点_RW bool m_MoldSlaveServoReset; //打印从轴伺服复位_RW bool m_MoldSlaveServoBreakOn; //打印从轴伺服刹车_RW bool m_MoldSlaveUnbind; //打印从轴伺服解除绑定_RW bool m_MoldSlaveMoveUp; //打印从轴相对上运动_手动_RW bool m_MoldSlaveMoveDown; //打印从轴相对下运动_手动_RW bool m_MoldSlaveMoveUpContinue; //打印从轴上JOG_手动_RW bool m_MoldSlaveMoveDownContinue; //打印从轴下JOG_手动_RW bool m_MoldSlaveMoveAbsPos; //打印从轴绝对值运动_手动_RW bool m_MoldSlaveMotionStop; //打印从轴急停_RW bool m_MoldSlaveServoRDY; //打印从轴伺服RDY状态_R bool m_MoldSlaveServoHomeDone; //打印从轴指令运行HOME_Done_R bool m_MoldSlaveResetDone; //打印从轴指令运行RESET_Done_R bool m_MoldSlaveServoBusy; //打印从轴伺服BUSY_R bool m_MoldSlaveServoException; //打印从轴伺服异常_R bool m_MoldSlaveRunable; //打印从轴可运行状态_R short m_MoldSlaveServoExceptionCode; //打印从轴伺服异常字_R bool m_CleanMainServoOn; //清粉主轴伺服ON_RW bool m_CleanMainServoHomeIndexOn; //清粉主轴伺服成立原点_RW bool m_CleanMainServoReset; //清粉主轴伺服复位_RW bool m_CleanMainServoBreakOn; //清粉主轴伺服刹车_RW bool m_CleanMainBindSlaveOn; //清粉主轴伺服绑定从轴_RW bool m_CleanMainMoveUp; //清粉主轴相对上运动_手动_RW bool m_CleanMainMoveDown; //清粉主轴相对下运动_手动_RW bool m_CleanMainMoveUpContinue; //清粉主轴上JOG_手动_RW bool m_CleanMainMoveDownContinue; //清粉主轴下JOG_手动_RW bool m_CleanMainMoveAbsPos; //清粉主轴绝对值运动_手动_RW bool m_CleanMainMotionStop; //清粉主轴急停_RW bool m_CleanMainServoRDY; //清粉主轴伺服RDY状态_R bool m_CleanMainServoHomeDone; //清粉主轴指令运行HOME_Done_R bool m_CleanMainResetDone; //清粉主轴指令运行RESET_Done_R bool m_CleanMainServoBusy; //清粉主轴伺服BUSY_R bool m_CleanMainServoException; //清粉主轴伺服异常_R bool m_CleanMainBindSlaveFinish; //清粉主从轴已经绑定_R bool m_CleanMainRunable; //清粉主轴可运行状态_R short m_CleanMainServoExceptionCode; //清粉主轴伺服异常字_R bool m_CleanSlaveServoOn; //清粉从轴伺服ON_RW bool m_CleanSlaveServoHomeIndexOn; //清粉从轴伺服成立原点_RW bool m_CleanSlaveServoReset; //清粉从轴伺服复位_RW bool m_CleanSlaveServoBreakOn; //清粉从轴伺服刹车_RW bool m_CleanSlaveUnbind; //清粉从轴伺服解除绑定_RW bool m_CleanSlaveMoveUp; //清粉从轴相对上运动_手动_RW bool m_CleanSlaveMoveDown; //清粉从轴相对下运动_手动_RW bool m_CleanSlaveMoveUpContinue; //清粉从轴上JOG_手动_RW bool m_CleanSlaveMoveDownContinue; //清粉从轴下JOG_手动_RW bool m_CleanSlaveMoveAbsPos; //清粉从轴绝对值运动_手动_RW bool m_CleanSlaveMotionStop; //清粉从轴急停_RW bool m_CleanSlaveServoRDY; //清粉从轴伺服RDY状态_R bool m_CleanSlaveServoHomeDone; //清粉从轴指令运行HOME_Done_R bool m_CleanSlaveResetDone; //清粉从轴指令运行RESET_Done_R bool m_CleanSlaveServoBusy; //清粉从轴伺服BUSY_R bool m_CleanSlaveServoException; //清粉从轴伺服异常_R bool m_CleanSlaveRunable; //清粉从轴可运行状态_R short m_CleanSlaveServoExceptionCode; //清粉从轴伺服异常字_R bool m_LoadAxisServoOn; //移载轴伺服ON_RW bool m_LoadAxisServoHomeIndexOn; //移载轴伺服成立原点_RW bool m_LoadAxisServoReset; //移载轴伺服复位_RW bool m_LoadAxisMoveLeft; //移载轴相对左运动_手动_RW bool m_LoadAxisMoveRight; //移载轴相对右运动_手动_RW bool m_LoadAxisMoveLeftContinue; //移载轴左JOG_手动_RW bool m_LoadAxisMoveRightContinue; //移载轴右JOG_手动_RW bool m_LoadAxisMoveAbsPos; //移载轴绝对值运动_手动_RW bool m_LoadAxisMotionStop; //移载轴急停_RW bool m_LoadAxisServoRDY; //移载轴伺服RDY状态_R bool m_LoadAxisServoHomeDone; //移载轴指令运行HOME_Done_R bool m_LoadAxisResetDone; //移载轴指令运行RESET_Done_R bool m_LoadAxisServoBusy; //移载轴伺服BUSY_R bool m_LoadAxisServoException; //移载轴伺服异常_R bool m_LoadAxisRunable; //移载轴可运行状态_R short m_LoadAxisServoExceptionCode; //移载轴伺服异常字_R bool m_ArmServoOn; //铺粉轴伺服ON_RW bool m_ArmServoHomeIndexOn; //铺粉轴伺服成立原点_RW bool m_ArmServoReset; //铺粉轴伺服复位_RW bool m_ArmMoveFront; //铺粉轴相对前运动_手动_RW bool m_ArmMoveBack; //铺粉轴相对后运动_手动_RW bool m_ArmMoveFrontContinue; //铺粉轴前JOG_手动_RW bool m_ArmMoveBackContinue; //铺粉轴后JOG_手动_RW bool m_ArmMoveAbsPos; //铺粉轴绝对值运动_手动_RW bool m_ArmMotionStop; //铺粉轴急停_RW bool m_ArmServoRDY; //铺粉轴伺服RDY状态_R bool m_ArmServoHomeDone; //铺粉轴指令运行HOME_Done_R bool m_ArmResetDone; //铺粉轴指令运行RESET_Done_R bool m_ArmServoBusy; //铺粉轴伺服BUSY_R bool m_ArmServoException; //铺粉轴伺服异常_R bool m_ArmRunable; //铺粉轴可运行状态_R short m_ArmServoExceptionCode; //铺粉轴伺服异常字_R bool m_SupplyServoOn; //供粉转轴伺服ON_RW bool m_SupplyServoHomeIndexOn; //供粉转轴伺服成立原点_RW bool m_SupplyServoReset; //供粉转轴伺服复位_RW bool m_SupplyMovePositive; //供粉转轴相对正转运动_手动_RW bool m_SupplyMoveNegative; //供粉转轴相对反转运动_手动_RW bool m_SupplyMovePositiveContinue; //供粉转轴正转JOG_手动_RW bool m_SupplyMoveNegativeContinue; //供粉转轴反转JOG_手动_RW bool m_SupplyMoveAbsPos; //供粉转轴绝对值运动_手动_RW bool m_SupplyMotionStop; //供粉转轴急停_RW bool m_SupplyServoRDY; //供粉转轴伺服RDY状态_R bool m_SupplyServoHomeDone; //供粉转轴指令运行HOME_Done_R bool m_SupplyResetDone; //供粉转轴指令运行RESET_Done_R bool m_SupplyServoBusy; //供粉转轴伺服BUSY_R bool m_SupplyServoException; //供粉转轴伺服异常_R bool m_SupplyRunable; //供粉转轴可运行状态_R short m_SupplyServoExceptionCode; //供粉转轴伺服异常字_R bool m_MoldCylinderSeparatePosRecord; //打印升降与缸体分离位记录_RW bool m_Print3RSeparateRecord; //打印3R脱离位记录__RW bool m_Print3RSeparateCheckDistanceRecord; //打印3R脱离检测距离记录__RW bool m_PrintJackupDeoxygenMinPosRecord; //打印顶升轴除氧压缩最低点记录__RW bool m_PrintJackupPlatformBottomPosRecord; //打印顶升轴基板底座缸平面位置记录__RW bool m_PrintJackupPlatformPlanePosRecord; //打印顶升轴基板缸平面位置记录_RW bool m_PrintPlatformHightRecord; //打印基板厚度计算__RW bool m_MoldUpLimitPosRecord; //打印轴上软限位记录_RW bool m_MoldDownLimitPosRecord; //打印升降轴下软限位记录_RW bool m_CleanTrackConnectPosRecord; //清粉升降轨道对接位记录_RW bool m_CleanBoxCylinderConnectPosRecord; //清粉箱与缸体对接位记录_RW bool m_Clean3RSeparatePosRecord; //清粉升降3R对接分离位记录_RW bool m_Clean3RSeparateCheckDistanceRecord; //清粉升降3R分离检测距离记录_RW bool m_CleanLowestPosRecord; //清粉升降最低点记录_RW bool m_CleanUpLimitRecord; //清粉升降上软限位记录_RW bool m_CleanDownLimitRecord; //清粉升降下软限位记录_RW bool m_LoadAxisTrackPrintPosRecord; //移载轴轨道打印位记录_RW bool m_LoadAxisTrackCleanPosRecord; //移载轴轨道清粉位记录_RW bool m_LoadAxisTrackWaitPosRecord; //移载轴轨道等待位记录_RW bool m_LoadAxisLeftLimitRecord; //移载轴轨道左软限位记录_RW bool m_LoadAxisRightLimitRecord; //移载轴轨道右软限位记录_RW bool m_ArmPowderAcceptPosRecord; //铺粉轴接粉位记录_RW bool m_ArmPowderDropFrontPosRecord; //铺粉轴前下粉位记录_RW bool m_ArmPrintFrontLimitRecord; //铺粉轴打印面前限位记录_RW bool m_ArmPrintBackLimitRecord; //铺粉轴打印面后限位记录_RW bool m_ArmFrontLimitRecord; //铺粉轴前软限位记录_RW bool m_ArmBackLimitRecord; //铺粉轴后软限位记录_RW bool m_BlockMoldSoftPosLimit; //屏蔽打印轴软件位置限制_RW bool m_BlockCleanSoftPosLimit; //屏蔽清粉轴软件位置限制_RW bool m_BlockLoadAxisSoftPosLimit; //屏蔽移载轴软件位置限制_RW bool m_BlockArmSoftPosLimit; //屏蔽铺粉轴软件位置限制_RW bool m_SupplySoftPosLimit; //屏蔽供粉转轴软件位置限制_RW bool m_MoldMainHomeIndexRecord; //打印主轴原点位记录_RW bool m_MoldMainAlignRecord; //打印主轴对齐位记录_RW bool m_MoldMainAlignHomeIndexRelRecord; //打印主轴对齐位与原点相对值记录_RW bool m_MoldSlaveHomeIndexRecord; //打印从轴原点位记录_RW bool m_MoldSlaveAlignRecord; //打印从轴对齐位记录_RW bool m_MoldSlaveAlignHomeIndexRelRecord; //打印从轴对齐位与原点相对值记录_RW bool m_CleanMainHomeIndexRecord; //清粉主轴原点位记录_RW bool m_CleanMainAlignRecord; //清粉主轴对齐位记录_RW bool m_CleanMainAlignHomeIndexRelRecord; //清粉主轴对齐位与原点相对值记录_RW bool m_CleanSlaveHomeIndexRecord; //清粉从轴原点位记录_RW bool m_CleanSlaveAlignRecord; //清粉从轴对齐位记录_RW bool m_CleanSlaveAlignHomeIndexRelRecord; //清粉从轴对齐位与原点相对值记录_RW }; #endif