mrDarker
2025-05-29 958cfa6b2e1c1eec0e20edc50816ef18f10cbf09
SourceCode/Bond/Servo/CEFEM.cpp
@@ -126,6 +126,211 @@
      return 0;
   }
   int CEFEM::SendHome(int seq)
   {
      SERVO::ROBOT_CMD_PARAM cmd = {};
      cmd.sequenceNo = static_cast<short>(seq);
      cmd.rcmd = static_cast<short>(SERVO::RCMD::Robot_home);
      return robotCmd(cmd);
   }
   int CEFEM::SendTransfer(int seq, int armNo, int fromPos, int toPos, int fromSlot, int toSlot)
   {
      SERVO::ROBOT_CMD_PARAM cmd = {};
      cmd.sequenceNo = static_cast<short>(seq);
      cmd.rcmd = static_cast<short>(SERVO::RCMD::Transfer);
      cmd.armNo = static_cast<short>(armNo);
      cmd.getPosition = static_cast<short>(fromPos);
      cmd.getSlotNo = static_cast<short>(fromSlot);
      cmd.putPosition = static_cast<short>(toPos);
      cmd.putSlotNo = static_cast<short>(toSlot);
      return robotCmd(cmd);
   }
   int CEFEM::SendMoveToGet(int seq, int armNo, int pos, int slot)
   {
      SERVO::ROBOT_CMD_PARAM cmd = {};
      cmd.sequenceNo = static_cast<short>(seq);
      cmd.rcmd = static_cast<short>(SERVO::RCMD::Move);
      cmd.armNo = static_cast<short>(armNo);
      cmd.getPosition = static_cast<short>(pos);
      cmd.getSlotNo = static_cast<short>(slot);
      cmd.subCmd = 1;
      return robotCmd(cmd);
   }
   int CEFEM::SendMoveToPut(int seq, int armNo, int pos, int slot)
   {
      SERVO::ROBOT_CMD_PARAM cmd = {};
      cmd.sequenceNo = static_cast<short>(seq);
      cmd.rcmd = static_cast<short>(SERVO::RCMD::Move);
      cmd.armNo = static_cast<short>(armNo);
      cmd.putPosition = static_cast<short>(pos);
      cmd.putSlotNo = static_cast<short>(slot);
      cmd.subCmd = 2;
      return robotCmd(cmd);
   }
   int CEFEM::SendGet(int seq, int armNo, int pos, int slot)
   {
      SERVO::ROBOT_CMD_PARAM cmd = {};
      cmd.sequenceNo = static_cast<short>(seq);
      cmd.rcmd = static_cast<short>(SERVO::RCMD::Get);
      cmd.armNo = static_cast<short>(armNo);
      cmd.getPosition = static_cast<short>(pos);
      cmd.getSlotNo = static_cast<short>(slot);
      return robotCmd(cmd);
   }
   int CEFEM::SendPut(int seq, int armNo, int pos, int slot)
   {
      SERVO::ROBOT_CMD_PARAM cmd = {};
      cmd.sequenceNo = static_cast<short>(seq);
      cmd.rcmd = static_cast<short>(SERVO::RCMD::Put);
      cmd.armNo = static_cast<short>(armNo);
      cmd.putPosition = static_cast<short>(pos);
      cmd.putSlotNo = static_cast<short>(slot);
      return robotCmd(cmd);
   }
   int CEFEM::SendExchange(int seq, int armNo, int pos, int getSlot, int putSlot)
   {
      SERVO::ROBOT_CMD_PARAM cmd = {};
      cmd.sequenceNo = static_cast<short>(seq);
      cmd.rcmd = static_cast<short>(SERVO::RCMD::One_Action_Exchange);
      cmd.armNo = static_cast<short>(armNo);
      cmd.getPosition = static_cast<short>(pos);
      cmd.putPosition = static_cast<short>(pos);
      cmd.getSlotNo = static_cast<short>(getSlot);
      cmd.putSlotNo = static_cast<short>(putSlot);
      return robotCmd(cmd);
   }
   int CEFEM::SendCommandClear(int seq)
   {
      SERVO::ROBOT_CMD_PARAM cmd = {};
      cmd.sequenceNo = static_cast<short>(seq);
      cmd.rcmd = static_cast<short>(SERVO::RCMD::Command_Clear);
      return robotCmd(cmd);
   }
   int CEFEM::SendBatchGet(int seq, int getPos, int getSlot)
   {
      SERVO::ROBOT_CMD_PARAM cmd = {};
      cmd.sequenceNo = static_cast<short>(seq);
      cmd.rcmd = static_cast<short>(SERVO::RCMD::Batch_get);
      cmd.armNo = ARM_ALL;
      cmd.getPosition = static_cast<short>(getPos);
      cmd.getSlotNo = static_cast<short>(getSlot);
      return robotCmd(cmd);
   }
   int CEFEM::SendBatchPut(int seq, int putPos, int putSlot)
   {
      SERVO::ROBOT_CMD_PARAM cmd = {};
      cmd.sequenceNo = static_cast<short>(seq);
      cmd.rcmd = static_cast<short>(SERVO::RCMD::Batch_put);
      cmd.armNo = ARM_ALL;
      cmd.putPosition = static_cast<short>(putPos);
      cmd.putSlotNo = static_cast<short>(putSlot);
      return robotCmd(cmd);
   }
   int CEFEM::SendMoveToGetAndHome(int seq, int armNo, int getPos, int getSlot)
   {
      SERVO::ROBOT_CMD_PARAM cmds[2] = {};
      // Move to Get
      cmds[0].sequenceNo = static_cast<short>(seq);
      cmds[0].rcmd = static_cast<short>(SERVO::RCMD::Move);
      cmds[0].armNo = static_cast<short>(armNo);
      cmds[0].getPosition = static_cast<short>(getPos);
      cmds[0].getSlotNo = static_cast<short>(getSlot);
      cmds[0].subCmd = 1;
      // Home
      cmds[1].sequenceNo = static_cast<short>(seq + 1);
      cmds[1].rcmd = static_cast<short>(SERVO::RCMD::Robot_home);
      return robotCmds(cmds, 2);
   }
   int CEFEM::SendMoveToPutAndHome(int seq, int armNo, int putPos, int putSlot)
   {
      SERVO::ROBOT_CMD_PARAM cmds[2] = {};
      // Move to Put
      cmds[0].sequenceNo = static_cast<short>(seq);
      cmds[0].rcmd = static_cast<short>(SERVO::RCMD::Move);
      cmds[0].armNo = static_cast<short>(armNo);
      cmds[0].putPosition = static_cast<short>(putPos);
      cmds[0].putSlotNo = static_cast<short>(putSlot);
      cmds[0].subCmd = 2;
      // Home
      cmds[1].sequenceNo = static_cast<short>(seq + 1);
      cmds[1].rcmd = static_cast<short>(SERVO::RCMD::Robot_home);
      return robotCmds(cmds, 2);
   }
   int CEFEM::SendTransferAndHome(int seq, int armNo, int fromPos, int toPos, int fromSlot, int toSlot)
   {
      SERVO::ROBOT_CMD_PARAM cmds[2] = {};
      // Transfer
      cmds[0].sequenceNo = static_cast<short>(seq);
      cmds[0].rcmd = static_cast<short>(SERVO::RCMD::Transfer);
      cmds[0].armNo = static_cast<short>(armNo);
      cmds[0].getPosition = static_cast<short>(fromPos);
      cmds[0].getSlotNo = static_cast<short>(fromSlot);
      cmds[0].putPosition = static_cast<short>(toPos);
      cmds[0].putSlotNo = static_cast<short>(toSlot);
      // Home
      cmds[1].sequenceNo = static_cast<short>(seq + 1);
      cmds[1].rcmd = static_cast<short>(SERVO::RCMD::Robot_home);
      return robotCmds(cmds, 2);
   }
   int CEFEM::SendGetAndPut(int seq, int armNo, int getPos, int getSlot, int putPos, int putSlot)
   {
      SERVO::ROBOT_CMD_PARAM cmds[2] = {};
      cmds[0].sequenceNo = static_cast<short>(seq);
      cmds[0].rcmd = static_cast<short>(SERVO::RCMD::Get);
      cmds[0].armNo = static_cast<short>(armNo);
      cmds[0].getPosition = static_cast<short>(getPos);
      cmds[0].getSlotNo = static_cast<short>(getSlot);
      cmds[1].sequenceNo = static_cast<short>(seq + 1);
      cmds[1].rcmd = static_cast<short>(SERVO::RCMD::Put);
      cmds[1].armNo = static_cast<short>(armNo);
      cmds[1].putPosition = static_cast<short>(putPos);
      cmds[1].putSlotNo = static_cast<short>(putSlot);
      return robotCmds(cmds, 2);
   }
   int CEFEM::SendPutAndHome(int seq, int armNo, int putPos, int putSlot)
   {
      SERVO::ROBOT_CMD_PARAM cmds[2] = {};
      // Put
      cmds[0].sequenceNo = static_cast<short>(seq);
      cmds[0].rcmd = static_cast<short>(SERVO::RCMD::Put);
      cmds[0].armNo = static_cast<short>(armNo);
      cmds[0].putPosition = static_cast<short>(putPos);
      cmds[0].putSlotNo = static_cast<short>(putSlot);
      // Home
      cmds[1].sequenceNo = static_cast<short>(seq + 1);
      cmds[1].rcmd = static_cast<short>(SERVO::RCMD::Robot_home);
      return robotCmds(cmds, 2);
   }
   void CEFEM::init()
   {
      CEquipment::init();
@@ -204,7 +409,7 @@
         // eq cim mode change
         CEqCimModeChangeStep* pStep = new CEqCimModeChangeStep();
         pStep->setName(STEP_CIM_MODE_CHANGE);
         pStep->setWriteSignalDev(0x70);
         pStep->setWriteSignalDev(0x60);
         pStep->setCimModeDev(0x15);
         if (addStep(STEP_ID_CIMMODE_CHANGED_CMD_REPLY, pStep) != 0) {
            delete pStep;
@@ -215,7 +420,7 @@
         // eq cim message
         CEqCimMessageCmdStep* pStep = new CEqCimMessageCmdStep();
         pStep->setName(STEP_CIM_MESSAGE_CMD);
         pStep->setWriteSignalDev(0x71);
         pStep->setWriteSignalDev(0x61);
         pStep->setCimMessageDev(0x0);
         if (addStep(STEP_ID_CIM_MSG_SET_CMD_REPLY, pStep) != 0) {
            delete pStep;
@@ -227,25 +432,13 @@
         // CIM Message Confirm
         CEqReadIntStep* pStep = new CEqReadIntStep(__INT32, 0x5f80);
         pStep->setName(STEP_EQ_CIM_MESSAGE_CONFIRM);
         pStep->setWriteSignalDev(0x59);
         pStep->setWriteSignalDev(0x49);
         if (addStep(STEP_ID_CIM_MSG_CONFIRM_REPORT, pStep) != 0) {
            delete pStep;
         }
      }
      {
         // VCR1 Event Report
         /*
         CEqVcrEventStep* pStep = new CEqVcrEventStep();
         pStep->setName(STEP_EQ_VCR1_EVENT_REPORT);
         pStep->setWriteSignalDev(0x4a);
         pStep->setReturnDev(0x91e);
         pStep->setVcrEventReportDev(0x5fef);
         if (addStep(STEP_ID_VCR1_EVENT_REPORT, pStep) != 0) {
            delete pStep;
         }
         */
         // VCR Event Report
         // 机器上报扫码结果,扫码器预计安装在巡边检机器上
         CEqReadStep* pStep = new CEqReadStep(0x5fef, 15 * 2,
@@ -267,7 +460,7 @@
         // eq cim message clear
         CEqCimMessageClearStep* pStep = new CEqCimMessageClearStep();
         pStep->setName(STEP_CIM_MESSAGE_CLEAR);
         pStep->setWriteSignalDev(0x72);
         pStep->setWriteSignalDev(0x62);
         pStep->setClearCimMessageDev(0x13);
         if (addStep(STEP_ID_CIM_MSG_CLEAR_CMD_REPLY, pStep) != 0) {
            delete pStep;
@@ -278,7 +471,7 @@
         // datetime set cmd
         CEqDateTimeSetCmdStep* pStep = new CEqDateTimeSetCmdStep();
         pStep->setName(STEP_DATETIME_SET_CMD);
         pStep->setWriteSignalDev(0x73);
         pStep->setWriteSignalDev(0x63);
         pStep->setDateTimeDev(0x16);
         if (addStep(STEP_ID_DATETIME_SET_CMD_REPLY, pStep) != 0) {
            delete pStep;
@@ -289,7 +482,7 @@
         // vcr enable
         CEqVCREnableStep* pStep = new CEqVCREnableStep();
         pStep->setName(STEP_EQ_VCR_ENABLE);
         pStep->setWriteSignalDev(0x74);
         pStep->setWriteSignalDev(0x64);
         pStep->setEqVCRModeDev(0x1F);
         if (addStep(STEP_ID_VCR_ENABLE_CMD_REPLY, pStep) != 0) {
            delete pStep;
@@ -300,7 +493,7 @@
         // eq mode change
         CEqModeChangeStep* pStep = new CEqModeChangeStep();
         pStep->setName(STEP_EQ_MODE_CHANGE);
         pStep->setWriteSignalDev(0x75);
         pStep->setWriteSignalDev(0x65);
         pStep->setEqModeDev(0x1E);
         if (addStep(STEP_ID_EQMODE_CHANGE_CMD_REPLY, pStep) != 0) {
            delete pStep;
@@ -328,56 +521,6 @@
            delete pStep;
         }
      }
      // CEqCassetteTranserStateStep
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT1_EMPTY, 0xd8,
         STEP_ID_PORT1_EMPTY, 0x6050);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT1_LOAD_EADY, 0xe0,
         STEP_ID_PORT1_LOAD_READY, 0x6050);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT1_LOADED, 0xe8,
         STEP_ID_PORT1_LOADED, 0x6050);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT1_INUSE, 0xf0,
         STEP_ID_PORT1_INUSE, 0x6050);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT1_UNLOAD_EADY, 0xf8,
         STEP_ID_PORT1_UNLOAD_READY, 0x60f50);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT1_BLOCKED, 0x100,
         STEP_ID_PORT1_BLOCKED, 0x6050);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT2_EMPTY, 0xd9,
         STEP_ID_PORT2_EMPTY, 0x6070);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT2_LOAD_EADY, 0xe1,
         STEP_ID_PORT2_LOAD_READY, 0x6070);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT2_LOADED, 0xe9,
         STEP_ID_PORT2_LOADED, 0x6070);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT2_INUSE, 0xf1,
         STEP_ID_PORT2_INUSE, 0x6070);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT2_UNLOAD_EADY, 0xf9,
         STEP_ID_PORT2_UNLOAD_READY, 0x6070);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT2_BLOCKED, 0x101,
         STEP_ID_PORT2_BLOCKED, 0x6070);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT3_EMPTY, 0xda,
         STEP_ID_PORT3_EMPTY, 0x6090);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT3_LOAD_EADY, 0xe2,
         STEP_ID_PORT3_LOAD_READY, 0x6090);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT3_LOADED, 0xea,
         STEP_ID_PORT3_INUSE, 0x6090);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT3_INUSE, 0xf2,
         STEP_ID_PORT3_INUSE, 0x6090);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT3_UNLOAD_EADY, 0xfa,
         STEP_ID_PORT3_UNLOAD_READY, 0x6090);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT3_BLOCKED, 0x102,
         STEP_ID_PORT3_BLOCKED, 0x6090);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT4_EMPTY, 0xdb,
         STEP_ID_PORT4_EMPTY, 0x60b0);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT4_LOAD_EADY, 0xe3,
         STEP_ID_PORT4_LOAD_READY, 0x60b0);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT4_LOADED, 0xeb,
         STEP_ID_PORT4_LOADED, 0x60b0);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT4_INUSE, 0xf3,
         STEP_ID_PORT4_INUSE, 0x60b0);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT4_UNLOAD_EADY, 0xfb,
         STEP_ID_PORT4_UNLOAD_READY, 0x60b0);
      ADD_EQ_PORT_STATUS_STEP(STEP_EQ_PORT4_BLOCKED, 0x103,
         STEP_ID_PORT4_BLOCKED, 0x60b0);
      {
         // Received Job Report Upstream#1~9