2.6.5 範例:使用 ENU 製作第二操作機械面板
當規劃好第二操作機械面板上的功能鍵、指示燈後,第二操作面板利用 ENU 與控制器連結。(下例以 4×4 矩陣鍵盤為範例,並假設將 ENU 的局號設定為第一塊 I/O 單元)
步驟一
繪製按鍵掃描電路圖
按鍵掃描電路圖
步驟二
宣告按鍵
int key1,key2,key3,key4,key5,key6,key7,key8,
key9,key10,key11,key12,key13,key14,key15,key16;
在 PLC 中定義 data line(I1、I2、I3、I4)
data line |
PLC 定義 |
說明 |
I1 |
plc.gdi[0].bit.bit00 |
ENU P0 第 1 腳 |
I2 |
plc.gdi[0].bit.bit01 |
ENU P0 第 2 腳 |
I3 |
plc.gdi[0].bit.bit02 |
ENU P0 第 3 腳 |
I4 |
plc.gdi[0].bit.bit03 |
ENU P0 第 4 腳 |
在 PLC 中定義 scan line(Y1、Y2、Y3、Y4)
scan line |
PLC 定義 |
說明 |
Y1 |
plc.gdo[0].bit.bit00 |
ENU P2 第 1 腳 |
Y2 |
plc.gdo[0].bit.bit01 |
ENU P2 第 2 腳 |
Y3 |
plc.gdo[0].bit.bit02 |
ENU P2 第 3 腳 |
Y4 |
plc.gdo[0].bit.bit03 |
ENU P2 第 4 腳 |
在 PLC 中定義每個按鍵的功能
按鍵定義 |
按鍵 |
說明 |
#define KEY_CycleStart |
key1 |
程式執行 |
#define KEY_FeedHold |
key2 |
程式暫停 |
#define KEY_Home |
key3 |
歸零模式 |
#define KEY_AutoHome |
key4 |
自動歸零 |
#define KEY_Jog |
key5 |
寸動模式 |
#define KEY_HDL |
key6 |
手輪模式 |
#define KEY_SP_CW |
key7 |
主軸正轉 |
#define KEY_SP_CCW |
key8 |
主軸反轉 |
#define KEY_X_Jog_P |
key9 |
X 軸正向寸動按鍵 |
#define KEY_X_Jog_N |
key10 |
X 軸負向寸動按鍵 |
#define KEY_Y_Jog_P |
key11 |
Y 軸正向寸動按鍵 |
#define KEY_Y_Jog_N |
key12 |
Y 軸負向寸動按鍵 |
#define KEY_Z_Jog_P |
key13 |
Z 軸正向寸動按鍵 |
#define KEY_Z_Jog_N |
key14 |
Z 軸負向寸動按鍵 |
#define KEY_A_Jog_P |
key15 |
A 軸正向寸動按鍵 |
#define KEY_A_Jog_N |
key16 |
A 軸負向寸動按鍵 |
步驟三
在 PLC Run 中撰寫掃描按鍵輸入的程式碼
switch(secondPanelKeyScan){
case 0:
Y1 = 1;
Y2 = 0;
Y3 = 0;
Y4 = 0;
secondPanelKeyScan ++;
break;
case 1:
key1 = I1;
key2 = I2;
key3 = I3;
key4 = I4;
Y1 = 0;
Y2 = 1;
Y3 = 0;
Y4 = 0;
secondPanelKeyScan ++;
break;
case 2:
key5 = I1;
key6 = I2;
key7 = I3;
key8 = I4;
Y1 = 0;
Y2 = 0;
Y3 = 1;
Y4 = 0;
secondPanelKeyScan ++;
break;
case 3:
key9 = I1;
key10 = I2;
key11 = I3;
key12 = I4;
Y1 = 0;
Y2 = 0;
Y3 = 0;
Y4= 1;
secondPanelKeyScan ++;
break;
case 4:
key13 = I1;
key14 = I2;
key15 = I3;
key16 = I4;
Y1 = 1;
Y2 = 0;
Y3 = 0;
Y4 = 0;
secondPanelKeyScan = 1;
break;
}
步驟四
在 PLC Run 中定義每個按鍵的對應功能,例如:KEY_CycleStart 對應至 PLC 輸出 plc.vto0.bit.clsrt,作為通知 NC 端程式啟動訊號。
void PLCAPI plcRun(Status & sts, PlcBlock & plc){
……………………………;
plc.vto0.bit.clsrt=KEY_CycleStart;
plc.vto0.bit.fhold=KEY_FeedHold;
……………………………;
}
步驟五
繪製按鍵 LED 燈輸出掃描電路圖
LED 燈輸出掃描電路圖
步驟六
宣告 LED
int LED1,LED2,LED3,LED4,LED5,LED6,LED7,LED8,
LED9,LED10,LED11,LED12,LED13,LED14,LED15,LED16;
在 PLC 中定義 data line(Y5、Y6、Y7、Y8)
data line |
PLC 定義 |
說明 |
Y5 |
plc.gdo[0].bit.bit04 |
ENU P2 第 5 腳 |
Y6 |
plc.gdo[0].bit.bit05 |
ENU P2 第 6 腳 |
Y7 |
plc.gdo[0].bit.bit06 |
ENU P2 第 7 腳 |
Y8 |
plc.gdo[0].bit.bit07 |
ENU P2 第 8 腳 |
在 PLC 中定義 scan line(Y1、Y2、Y3、Y4)
scan line |
PLC 定義 |
說明 |
Y1 |
plc.gdo[0].bit.bit00 |
ENU P2 第 1 腳 |
Y2 |
plc.gdo[0].bit.bit01 |
ENU P2 第 2 腳 |
Y3 |
plc.gdo[0].bit.bit02 |
ENU P2 第 3 腳 |
Y4 |
plc.gdo[0].bit.bit03 |
ENU P2 第 4 腳 |
在 PLC 中定義每個按鍵 LED 的功能
LED 定義 |
LED |
說明 |
#define LED_CycleStart |
LED1 |
程式執行指示燈 |
#define LED_FeedHold |
LED2 |
程式暫停指示燈 |
#define LED_Home |
LED3 |
歸零模式指示燈 |
#define LED_AutoHome |
LED4 |
自動歸零指示燈 |
#define LED_Jog |
LED5 |
寸動模式指示燈 |
#define LED_HDL |
LED6 |
手輪模式指示燈 |
#define LED_SP_CW |
LED7 |
主軸正轉指示燈 |
#define LED_SP_CCW |
LED8 |
主軸反轉指示燈 |
#define LED_X_Jog_P |
LED9 |
X 軸正向寸動指示燈 |
#define LED_X_Jog_N |
LED10 |
X 軸負向寸動指示燈 |
#define LED_Y_Jog_P |
LED11 |
Y 軸正向寸動指示燈 |
#define LED_Y_Jog_N |
LED12 |
Y 軸負向寸動指示燈 |
#define LED_Z_Jog_P |
LED13 |
Z 軸正向寸動指示燈 |
#define LED_Z_Jog_N |
LED14 |
Z 軸負向寸動指示燈 |
#define LED_A_Jog_P |
LED15 |
A 軸正向寸動指示燈 |
#define LED_A_Jog_N |
LED16 |
A 軸負向寸動指示燈 |
步驟七
在 PLC Run 掃描按鍵輸入的程式碼中加入掃描按鍵 LED 的程式碼,LED1~LED16 的狀態由其他部分 PLC Run 執行出結果。
switch(secondPanelKeyScan){
case 0:
Y1 = 1;
Y2 = 0;
Y3 = 0;
Y4 = 0;
Y5 = !LED1;//反向的原因為ENU輸出為負邏輯
Y6 = !LED2;
Y7 = !LED3;
Y8 = !LED4;
secondPanelKeyScan ++;
break;
case 1:
key1 = I1;
key2 = I2;
key3 = I3;
key4 = I4;
Y1 = 0;
Y2 = 1;
Y3 = 0;
Y4 = 0;
Y5 = !LED5;
Y6 = !LED6;
Y7 = !LED7;
Y8 = !LED8;
secondPanelKeyScan ++;
break;
case 2:
key5 = I1;
key6 = I2;
key7 = I3;
key8 = I4;
Y1 = 0;
Y2 = 0;
Y3 = 1;
Y4 = 0;
Y5 = !LED9;
Y6 = !LED10;
Y7 = !LED11;
Y8 = !LED12;
secondPanelKeyScan ++;
break;
case 3:
key9 = I1;
key10 = I2;
key11 = I3;
key12 = I4;
Y1 = 0;
Y2 = 0;
Y3 = 0;
Y4 = 1;
Y5 = !LED13;
Y6 = !LED14;
Y7 = !LED15;
Y8 = !LED16;
secondPanelKeyScan ++;
break;
case 4:
key13 = I1;
key14 = I2;
key15 = I3;
key16 = I4;
Y1 = 1;
Y2 = 0;
Y3 = 0;
Y4 = 0;
Y5 = !LED1;
Y6 = !LED2;
Y7 = !LED3;
Y8 = !LED4;
secondPanelKeyScan = 1;
break;
}
請注意:由於燈號的輸出是由 PLC 快速掃描完成,PLC 的掃描週期為 4 ms,所以當 LED 數目增加時會使得面板的燈號有閃爍的情形發生,而且 ENU 的輸出腳位電流為 10 mA,若要改善燈號閃爍及驅動電流不足的情形,須在電路上另加 IC 如 74HC273 將各燈號的上一次狀態保持住,如此一來便可以改善因 PLC 掃描而造成的閃爍情形。