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 掃描而造成的閃爍情形。