2.1 開機初始設定 "plcOpen"
在系統開機時,PLC 會執行 plcOpen 來初始化 I/O、 flag 和變數,在此部份會利用指標 &plc 將 PlcBlock 結構傳入(因為 PlcBlock 定義了 NC 和 PLC 間的溝通結構)。格式如下:
void PLCAPI plcOpen(struct Status &sts, struct PlcBlock &plc, unsigned short *PlcData, long *LongPlcData)
{
.
.
}
&sts 是 status 內部資料結構的指標 ( pointer ),換言之,可以藉此指標取得 Status 的資料。例如:藉由 sts.state0.bManual 得知手動狀態是否開啟。
&plc 是 PLC Block 內部資料結構的指標,換言之,可以藉此指標取得 PLC Block 的資料。例如:藉由 plc.spi0.bit.xplmt 取得 X 軸正向極限的狀態。
*PlcData 是機械參數中 PLC 數據的陣列位址,必須宣告一個變數來存取這個位址。例如:
static unsigned short *para;
*LongPlcData 是機械參數中 PLC 長數據的陣列位址,必須宣告一個變數來存取這個位址。例如:
static long *longPara;
如上述,plcOpen 用來初始化 I/O、 flag 和變數。為了避免開機時輔助系統誤動作,必須要依據輔助裝置的規劃把重要的輸出點設定為 1 或 0。範例如下:(開機時,變頻器訊號為關閉狀態,flag 狀態為 idle,且主軸轉速必須為 0。)
define inverterRun (plc.gdo[0].bit.bit00) //Output 0 is inverter run signal.
//1:turn on
//0:turn off
int inverterFlag; //inverter flag
int inverterSpeed; //inverter speed
enum{IDLE=0, START, FINISH};
void PLCAPI plcOpen(struct Status &sts, struct PlcBlock &plc, unsigned short *PlcData, long *LongPlcData){
inverterRun = 0;
inverterFlag = IDLE;
inverterSpeed = 0;
}
通常,流程控制(flow control)是不會出現在 plcOpen 程序中。