2.1 開機初始設定 "plcOpen"


在系統開機時,PLC 會執行 plcOpen 來初始化 I/O、 flag 和變數,在此部份會利用指標 &plcPlcBlock 結構傳入(因為 PlcBlock 定義了 NC 和 PLC 間的溝通結構)。格式如下:

void PLCAPI plcOpen(struct Status &sts, struct PlcBlock &plc, unsigned short *PlcData, long *LongPlcData)

{

.

.

}


&stsstatus 內部資料結構的指標 ( pointer ),換言之,可以藉此指標取得 Status 的資料。例如:藉由 sts.state0.bManual 得知手動狀態是否開啟。


&plcPLC 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 程序中。