啟動鈕:啟動軸

作為啟動 (Enable)停用 (Disable) 鈕用,在選定軸並點擊此鈕後軸將啟動,若軸以啟動則點擊此鈕以停用之。

此鈕名稱為 btnEnable,擁有連接至位置 btnEnableClickedactionEnable 之信號 clicked,在 btnEnableClicked,點擊 Enable 其將停用,而 updateAxisData 更新鈕的狀態。

updateAxisData 中,若 Enable 為停用,檢查鈕的文字,若文字為 "Enable",將其設為 "Disable" 並啟用該鈕,表示點擊 Enable 後鈕會更改為 Disable,且 Jog Forward Jog Backward 將啟用;同理,若文字為 "Disable",將其設為 "Enable" 並啟用該鈕,表示點擊 Disable 後鈕會更改為 Enable,且 Jog 鈕將停用。

若啟用 Enable,我們使用軸的電力狀態來決定鈕的文字與 Jog 鈕是否啟用。

以下代碼在 QtGui.cpp 中:

void QtGui::btnEnableClicked()
{
   ui->btnEnable->setEnabled(false);
}

以下代碼在 QtGui.cpp 中:

void QtGui::updateAxisData(axisData data)
{
   if (!ui->btnEnable->isEnabled())
   {
      if (ui->btnEnable->text() == "Enable" && data.powerStatus)
      {
         ui->btnEnable->setText("Disable");
         ui->btnEnable->setEnabled(true);
         ui->btnJogForward->setEnabled(true);
         ui->btnJogBackward->setEnabled(true);
      }
      else if (ui->btnEnable->text() == "Disable" && !data.powerStatus)
      {
         ui->btnEnable->setText("Enable");
         ui->btnEnable->setEnabled(true);
         ui->btnJogForward->setEnabled(false);
         ui->btnJogBackward->setEnabled(false);
      }
   }
   else
   {
      if (data.powerStatus)
      {
         ui->btnEnable->setText("Disable");
         ui->btnJogForward->setEnabled(true);
         ui->btnJogBackward->setEnabled(true);
      }
      else
      {
         ui->btnEnable->setText("Enable");
         ui->btnJogForward->setEnabled(false);
         ui->btnJogBackward->setEnabled(false);
      }
   }
   .........
}

actionEnable 中啟用軸,首先為防止錯誤,我們使用 ResetAxis 來重置軸的警報,接著使用 PowerAxis 以啟用軸,並將其電量狀態設為 TRUE,若軸已啟用,則使用 PowerAxis 以將軸停用,並將其電力狀態設為 FALSE,為防 PowerAxis 耗費過久時間執行,我們使用 WaitForCommand 以提供 1 秒的時段來完成,若未在時間內完成,下個指令將執行。

以下代碼在 ksworker.cpp 中:

void ksWorker::actionEnable()
{
   if (powerStatus[currentIndex] == FALSE)
   {
      ResetAxis(currentIndex);
      KsCommandStatus Command = { 0 };
      Command = WaitForCommand(1, FALSE, PowerAxis(currentIndex, TRUE, TRUE, TRUE));

      if(Command.Done) 
         powerStatus[currentIndex] = TRUE;
   }
   else
   {
      KsCommandStatus Command = { 0 };
      Command = WaitForCommand(1, FALSE, PowerAxis(currentIndex, FALSE, FALSE, FALSE));

      if (Command.Done) 
         powerStatus[currentIndex] = FALSE;
   }
}