這個問題做起來不太簡單,儘量依你可能看得懂的方式來說明

 


依照你提問的內容歸納幾個程式書寫的重點:


1.程式執行時是待機狀態


2.輸入密碼後才判斷密碼是否正確,密碼共有4個字(英文字串或數字字串)


3.容許有3次輸入錯誤


4.密碼正確時門燈亮綠燈表示可通行,計時30秒後,門燈熄滅成紅燈,恢復為待機狀態


5.錯誤4次時警告燈亮,顯示"非法進入",中止程式(封鎖密碼輸入功能),計時1分鐘(60秒)後,恢復為待機狀態

 

 

 

依以上條件配置面板元件如下:


門燈設定為ON時綠燈,OFF時紅燈


警告燈設定為ON時紅燈,OFF時綠燈

20110405-01  

 

密碼輸入的那個文字元件屬性也要改一下,將顯示的模式改成Password,這樣不論輸入什麼文字顯示出的都是*字

20080804-05  

 

 

再來是程式部分:


為了容易理解就只用比較入門式的寫法,完成的程式如下圖:


大約解說一下程式結構:


1.因為有待機功能程式整個是放在迴圈內,只有按停止鈕時程式才會停止


2.因為程式的需求所以用順序結構將程式分成左右兩部分,左邊是待機和檢查密碼部分,右邊是依照檢查結果處理的部分,任何有待機需求的程式都可以套用這個模式


3.依據程式左右兩邊都要再用到迴圈,停止鈕的寫法是重點,目的是確保能隨時停止程式,又不會執行不需執行的部分


4.密碼比對是利用移位暫存器,在迴圈左邊拉出2個,上面的是新值,下面的是上一次的值。一開始時這2個值是相同的,當輸入新值後,這2個值會有僅一次不相同,此時就會自動進行密碼比對。當密碼比對完畢,這2個值恢復相同,再度成為不動作的待機狀態


5.比對結果是密碼正確或錯誤4次都會停止這個迴圈,按停止鈕也會停止這個迴圈


6.左邊比較簡單,若是右邊迴圈是按停止鈕停止的,就跳過這部分不執行


7.為了簡化程式停止鈕只在待機狀態時有作用,若程式已在進行第二步驟計時部分則沒有作用

20110405-02  

 

 

左邊程式比對密碼的部份:


1.當輸入的密碼和設定密碼完全相同時,錯誤計次部分輸出為0,以錯誤計次輸出的數值為索引,從顯示訊息的文字陣列中輸出"密碼正確"這個字串


2.當輸入的密碼和設定密碼不同時(英文字大小寫也算不同),錯誤計次部分加1,以錯誤計次輸出的數值為索引,從顯示訊息的文字陣列中輸出"還可以輸入?次"這個字串


3.錯誤計次的數值為4時,從顯示訊息的文字陣列中輸出"非法進入"這個字串

20110405-03  

 

 

右邊程式門燈計時的部分:


使用While迴圈搭配Tick Count (ms)元件來計時,當計時到30秒時停止迴圈

20110405-04  

 

 

右邊程式警告燈計時的部分:


同樣使用While迴圈搭配Tick Count (ms)元件來計時,當計時到60秒時停止迴圈


另外將輸入密碼的文字元件Property Node屬性設定為KeyFocus項目放在迴圈內,在迴圈動作期間保持False狀態。這樣在迴圈動作期間都無法輸入密碼,封鎖了輸入功能

20110405-05  

未出師的小工程師 發表在 痞客邦 PIXNET 留言(0) 人氣()