機械社區
標題: 求助,一道plc面試題的困惑 [打印本頁]
作者: 還做讀書狼 時間: 2012-2-6 19:50
標題: 求助,一道plc面試題的困惑
最近在網上搜索到了一道plc面試題,我先把作者的原話搬上來:
. U" w4 @( O* n6 RPLC編程-關于一道簡單面試題
2011年04月25日
我給出的筆試題中,其中有一道是要求當I0.0為1時,Q7.0-Q7.7這八個燈以5s間隔依次點亮,每個亮5s,走馬燈式循環,直到I0.0為0時停止。
結果很是失望,一年半時間里,面試過不知道多少個人,情況大致是這樣:
70%的人用各種點的串并聯加定時器來搭,結果仍然是做不出來;
約10%的人用上面的辦法做成功了;
約10%的人用計數器(C)對5S脈沖計數,之后如下方式輸出:
LD C==0 OUT Q7.0;...........................................LD C==7 OUT Q7.7
之后C==8時清零,重復以上動作。這樣也算實現了。
約10%的人用移位的方法實現,這才是我期待的答案。討論答案的時候有人提及某些小型PLC可能會沒有循環移位指令,提醒一下,再差的PLC也會支持四則運算,自動化專業總得學過單片機的吧,那怎么想不到整數乘2就相當于左移,除2就相當于右移呢?再利用上進位寄存器或余數寄存器判斷復位不就可以了,就算不知道進位寄存器或余數寄存器,那么可以在這個數為H80時不做乘法而為其賦H01,或為H01時不做除法而為其賦H80就可以了。
結果就是這樣,我還沒要求必須完整給出程序,思路正確就行,當然能直接給出程序最好。
而我最期待的,是采用循環加尋址操作,因為移位畢竟有限制,超過32位或64位就不能直接實現了,只能自己對多寄存器移位同時控制好數據的同步。而用尋址,可以很方便的擴展這個功能。我們設計一個算法時,除了要解決當前問題外,還要考慮這個算法能不能重用,如何做到重用,這樣在類似的項目中可以方便套用它,會提高不少效率。
當然這種簡單的東西實際工作是用不到的,我只是需要了解對方的編程思想以及對PLC的理解。雖然最初PLC是為了代替繼電接觸器而生,但時至今日,這東西已經有了突飛猛進的發展,如果我們在工作兩三年后,還是只會用這么簡單的方式解決問題,那就有點說不過去了。這么簡單的問題,都要浪費上很多時間,工作效率大打折扣,結果還要死不少腦細胞。有人做這題用一個多小時最后做不對,有人兩分鐘就直接寫完程序了,那一個系統上萬步的程序,時間上就要差多少,更不要提質量了。
有人說,怕這樣用PLC,會不穩定。我說,如果擔心這個,那就不要用PLC了,既然它提供了這些功能,就應該是通過了測試的。雖然我們要把有可能出現的問題都考慮周全,以保證系統的可靠性,但天災人禍的事任誰也沒有辦法的。如果真發生這樣的問題,你可以直接給PLC廠家發郵件報告這個BUG。
其實如果我們單片機或匯編了解得多一點,會發現PLC很容易,指令系統都差不多,基本上就照著單片機的指令來的,當然有的提供了一些更高級一些的功能,如通信類指令,數據表格類指令等,另外如ST語言還可以操作數組,甚至有的PLC如AB能搞出類似對象的數據結構,但編程思想基本上還是一致的。或許因為我是學機械的,而當初又專門學過匯編,所以在使用PLC時才喜歡套用匯編的方式吧,雖然大學也開過兩門PLC課程。
發發牢騷,希望能提醒剛進入工控這個行業的同行們,多一些創新思維,眼界要放寬,多接觸些新東西,不要書上說老師說網上說,自己想出來的,未必就比別人差,如果所有的人都是書上說老師說網上說的,那人類不要發展了,早點刨坑把自己埋了吧。
————————————————分割線————— —————————分割線— _____——————————————
見到這個題目后我也做了一遍,用三菱fx2n系列,第一次用的是定時器控制下一個燈,當下一個燈亮起的時候,同時使用復位指令對前一個燈置0.寫的程序見圖。(沒有寫完8個燈,只寫了4個燈)。調試后沒有問題。
第二次是按照上面那個面試官的思路寫的。問題就出現了,只能運行到第三個燈,后面的不能運行。(附圖是我更改了幾次的程序,開始的時候還使用了觸電比較指令也一樣沒有到達預期目的)
現在想請教一下,假如我按照面試官的思路(即使用四則運算的乘法mul)該如何修改我的這段程序?謝謝!
5 i/ x# A) q6 W t7 r
作者: 還做讀書狼 時間: 2012-2-6 19:51
漏了一個圖了,現在這個圖是使用四則運算的程序。上面兩個圖的順序反了,不好意思!
作者: 留在未來 時間: 2012-2-6 22:34
這個東西要看具體情況,比如只是控制幾個燈,那用PLC內部計時器加繼電器控制是最簡單的,干嘛用移位的那么復雜。' d8 K; C: w4 v2 p9 K
不過如果是控制成百上千個燈,那這個時候用移位的方法就顯得很簡單了,不用寫上成百上千行程序。
作者: luyupei 時間: 2012-2-7 13:19
沒看太懂,不過那些東西都很有用。有時候感覺邏輯關系不知道怎么做,如果對這些東西熟悉的話就簡單了。上面的程序用VC很好實現,而且調理清晰。
作者: 往事隨風LEO 時間: 2012-2-7 21:01
{:soso_e113:}管他捏!只要實現功能就來賽!不管白貓還是黑貓能捉老鼠就是好貓,關鍵問題是把問題攻克!
作者: 爽爽01 時間: 2012-2-7 22:27
大哥 移位在大學課本里根本被忽略了,一般都是用功能指令來實現。比如這里的mov指令。所以用移位來實現的人很少哦。當熱方法不是唯一的只有通過仿真后才能實踐出最后的方法。
作者: tbygr 時間: 2012-2-7 22:29
雖然看不懂,還學習下,以后備用
作者: apay 時間: 2012-2-7 22:40
頭大中,看都不敢看,
作者: 還做讀書狼 時間: 2012-2-8 21:10
apay 發表于 2012-2-7 22:40
; M& v9 B! u+ A
頭大中,看都不敢看,
# }3 \. l% t' _( ~( N那段文字 看的確實頭疼!
作者: 北京機床維修 時間: 2012-2-13 21:53
寫的不錯,其實我們上學學的是什么?知識的運用!學到的知識要舉一反三,觸類旁通。不過現在的課本在有些方面來說真的不能說好,講了一大堆沒用的話,真正有用的就那么一點。重點的東西還是要自己去總結思考。如果一個人想快速的學習掌握某技術要領,那看書會讓他頭大的很。因為他看不到一個總表。現在的書讓我說應該在最前頁或是最后頁的地方加上總表,匯總一下書中所有的重點。如:某PLC編程手冊中詳細的說明了每個程序的含義、結構、使用條件、使用方法等,在最前頁把所有的程序、列表、格式匯總一下。這樣我們在看書的時候,只要一翻書就能看到自己學到哪里了,還有哪里不明白,不會的,第一時間了解到自己的學習狀況,第一時間加深了所學知識的印象。當然,必要的筆記還是不能少的。
作者: tomys7017 時間: 2012-2-13 23:23
謝謝分享喔滿不錯的喔
作者: Frankdechao 時間: 2012-2-14 11:36
提示: 作者被禁止或刪除 內容自動屏蔽
作者: 北京機床維修 時間: 2012-2-16 17:18
還做讀書狼 發表于 2012-2-6 19:51 
0 T1 J; |1 v1 C( O1 V2 W漏了一個圖了,現在這個圖是使用四則運算的程序。上面兩個圖的順序反了,不好意思!
+ v) ?4 K: o m/ L# m, h我剛做的。電腦上,PLC上都點亮了。你看看。做的肯定還有不足,比如占空間大,程序煩索等。大家也給點意見。
6 r2 y: H) H! |; h[attach]240479[/attach]/ n0 H- Q" z( r% G7 O; g
[attach]240480[/attach]; k& ?# i9 `! m0 j! r7 C
作者: zhaowanneng 時間: 2012-2-17 17:24
c:\11.jpg
作者: zhaowanneng 時間: 2012-2-17 17:33
這個就是用四則運算實現的,其實這明顯就是一個順序控制,用順序控制最簡單,不用動腦筋,記得學VB的時候,老師就說過,印度的軟件之所以比中國強,就是印度追求的是大家都看得懂,而中國軟件人員追求的是只有我能看懂。順便做個說明,[b]本人現居住北京通州區附近,初學電工,考取了低壓本,想求一份電工學徒的工作,QQ.1196940288 非誠勿擾
作者: changkongceyi 時間: 2012-2-18 16:40
我還沒學位移指令呢....
作者: zhouyang 時間: 2012-2-18 16:54
如果我們能遇見一面就好啦!我在編成是就追尋多用應用指令!要與眾不同 我們很對味呀 期待你更多的問題
5 Y' W- m2 M9 n, F* | D f有意和你結識朋友 13674274316 沈陽 周楊
歡迎光臨 機械社區 (http://www.ytsybjq.com/) |
Powered by Discuz! X3.5 |