透過以開發底層的FlowChart來作流程的控制,把所需流程寫在FlowChart裡面控管目前流程的動向讓使用端可以藉由動態FlowChart來知道目前機台動作在何處。
此篇為工作上遇到自行紀錄部份,如更詳細說明歡迎留言或私訊,小弟不才如有不對的地方凡請告知謝謝!!
可視化圖形介面可以方便我們於第一時間得知道目前機台的操作步驟到哪一動,幫助軟體人員在機台發生Alarm時可以快速知道目前是卡在哪一迴圈中
舉個例子
private object CallProc(string ModuleName, string FuncName, params object[] paras)
{
return FormSet.mMSS.CallProc(ModuleName, FuncName, paras);
}圖形介面畫面

程式碼下載
#region MainFlow Auto流程
private FlowChart.FCRESULT flowChart_Main_Auto_Run()
{
// CallProc("MainF1", "");
return FlowChart.FCRESULT.NEXT;
}
private FlowChart.FCRESULT flowChart_Main_Auto_1_Run()
{
mTray.mHomeOk = false;
mHander.mHomeOk = false;
mMAA.mHomeOk = false;
return FlowChart.FCRESULT.NEXT;
}
private FlowChart.FCRESULT flowChart_Main_Auto_2_Run()
{
///CallProc通知模組動作
CallProc("Hander", "SetHandCanWork");
return FlowChart.FCRESULT.NEXT;
}
private FlowChart.FCRESULT flowChart_Main_Auto_3_Run()
{
///取得Hander移動完成的變數
///bMoveAction 移動完成
bool b1 = (bool)CallProc("Hander", "bMoveActionFinished");
if (b1)
{
return FlowChart.FCRESULT.NEXT;
}
return FlowChart.FCRESULT.IDLE;
}
private FlowChart.FCRESULT flowChart_Main_Auto_4_Run()
{
///取料點位呼叫
///CallProc取得計算點位
///SetTrayCanWork移動到工作點位
int iY_WorkPosition = (int)CallProc("Hander", "Get_iY_WorkPosition");
CallProc("Tray", "SetY_WorkPosition", iY_WorkPosition);
CallProc("Tray", "SetTrayCanWork");
return FlowChart.FCRESULT.NEXT;
}
private FlowChart.FCRESULT flowChart_Main_Auto_5_Run()
{
///取得Tray移動完成變數
bool b1 = (bool)CallProc("Tray", "bTrayActionFinish");
if (b1)
{
return FlowChart.FCRESULT.NEXT;
}
return FlowChart.FCRESULT.IDLE;
}
private FlowChart.FCRESULT flowChart_Main_Auto_6_Run()
{
///取得取料變數
bool b1 = (bool)CallProc("Hander", "bPickActionFinished");
if (b1)
{
return FlowChart.FCRESULT.NEXT;
}
return FlowChart.FCRESULT.IDLE;
}
private FlowChart.FCRESULT flowChart_Main_Auto_7_Run()
{
///平台移動
CallProc("Hander", "SetHandCanWork");
return FlowChart.FCRESULT.NEXT;
}
private FlowChart.FCRESULT flowChart_Main_Auto_8_Run()
{
bool b1 = (bool)CallProc("Hander", "bMoveActionFinished");
if (b1)
{
return FlowChart.FCRESULT.NEXT;
}
return FlowChart.FCRESULT.IDLE;
}
private FlowChart.FCRESULT flowChart_Main_Auto_9_Run()
{
int iY_WorkPosition = (int)CallProc("Hander", "Get_iY_WorkPosition");
CallProc("Tray", "SetY_WorkPosition", iY_WorkPosition);
CallProc("Tray", "SetTrayCanWork");
return FlowChart.FCRESULT.NEXT;
}
private FlowChart.FCRESULT flowChart_Main_Auto_10_Run()
{
bool b1 = (bool)CallProc("Tray", "bTrayActionFinish");
if (b1)
{
return FlowChart.FCRESULT.NEXT;
}
return FlowChart.FCRESULT.IDLE;
}
private FlowChart.FCRESULT flowChart_Main_Auto_11_Run()
{
//放料
bool b1 = (bool)CallProc("Hander", "bPutActionFinished");
if (b1)
{
return FlowChart.FCRESULT.NEXT;
}
return FlowChart.FCRESULT.IDLE;
}
private FlowChart.FCRESULT flowChart_Main_Auto_12_Run()
{
///當按下結批按鈕
bool b1 = (bool)CallProc("Hander", "GetLotEndOk");
bool b2 = (bool)CallProc("Tray","GetLotEndOk");
if (SYSPara.Lotend)
{
CallProc("Hander", "SetCanLotEnd");
CallProc("Tray", "SetCanLotEnd");
if(b1 || b2)
{
return FlowChart.FCRESULT.CASE1;
}
return FlowChart.FCRESULT.IDLE;
}
return FlowChart.FCRESULT.NEXT;
}
private FlowChart.FCRESULT flowChart_Main_Auto_13_Run()
{
bool b1 = (bool)CallProc("Hander", "mLotendOK_check");
bool b2 = (bool)CallProc("Tray", "mLotendOK_check");
//if (b1 && b2)
{
SYSPara.LotendOk = true;
{
MessageBox.Show("結批完成確認", "結批結束",
MessageBoxButtons.OK,
MessageBoxIcon.Stop);
return FlowChart.FCRESULT.IDLE;
}
}
return FlowChart.FCRESULT.NEXT;
}
#endregion