啟動鈕:啟動軸
作為啟動 (Enable) 或停用 (Disable) 鈕用,在選定軸並點擊此鈕後軸將啟動,若軸以啟動則點擊此鈕以停用之。
此鈕名稱為 btnEnable,擁有連接至位置 btnEnableClicked 及 actionEnable 之信號 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;
}
}