自己使用.Net在工控方面的應用
說老實話,自己也才畢業兩年,也談不上有什么厲害的地方。就職的是一家典型的國企,在內部從事軟件開發,主要是做工控軟件的上位機,一直以來都感覺做的滿山寨的,為什么呢?因為,從產品的需求、設計、開發、測試以及現場調試都是一人包辦的。真的很厲害嗎?一點也不,本身程序就不是特別大,特別復雜。不過,再怎么山寨,做了兩年了還是有點經驗的。
從剛進公司的第一個項目,一臺小型分揀機到現在手頭的2臺設備,期間也受領導器重吧,斷斷續續的將從服務器搭建以及版本控制等非編程工作也坐了起來。兩年來到底我學了什么呢?從第一設備的VC版本到通過我和我帶領的新同事努力下改進出來的WPF版。我到底做了什么?我想我還是主要在工控領域內學的比較多吧,雖然沒做過下位PLC的程序設計,但那方面也略微知道點皮毛了。下面我談談主要用到的技術:
首先是VC,老資格的上位機編程利器了,實時性好,運行快。但也有它的問題,也許只是我水平不到家。想讓它跟著設備狀態而改變界面真的好麻煩的,特別是我還碰到過雖然釋放 了資源還是莫名內泄露的問題,雖然最后通過自己動手畫刷畫而非加載位圖來實現,但開發周期會比較長。
然后我接觸了.Net,由于是托管代碼,所以內存釋放等方面省事了,而且只要控件的顏色或或size大小,位置等屬性的隨著工控對象的改變而改變,真的帶來了很多的改變啊,開發效率提高了是事實。我在前文中也談及過c#在工控中的優點,有人反對,說速度慢,拜托你以為是飛機導彈啊,上位機的只要將數據采集來顯示下或者給下位機下達控制命令就可以了,頂多查個數據庫,以我遇到的情況為例,雖然很多數據要通信,但真正要反應快的不多,而且有500ms的時間來反映,就算是.Net也夠了。下位機才是需要實時性與效率的,像我們單位采用西門子的PLC,當然別人也能用單片機,c/c++在這里才是英雄用武之地。特別是我們公司的項目一般大部門時間都在機械設計制造,然后是下位機PLC與電氣方面的設計,直到PLC設計完有了接口了才能做上位機,提前做協議?不可能的,硬件不同IO點不同,接口是不同的,至少要機器定型才能做上位機,因此我這里的時間并不多,采用開發周期最短的軟件才是王道!
隨后我接觸了WPF以及WCF,真的不錯。WPF令上位機的界面偶了耳目一新的感覺,連各種古怪的圖形也能通過基本圖形的組合成為“路徑”對象而整體處理。
下面我給幾幅圖看看吧:
由于沒有舊的數據庫,源代碼也不在身邊,就上傳用戶手冊個VC的界面吧,這是VC開發的3個程序的部分界面:
下面再看看我用C# 的winform開發的程序(沒法子,要用到視頻板卡,涉及到窗體指針,用WPF不方便,而且我學習的對象,那位大哥也是winform的,采用同樣的環境避免無謂的錯誤嘛),對了由于截圖時電腦上沒板卡,所以當中框了個框,其實應該是個視頻監控的畫面(類似QQ聊天):
最后是我目前正在做的WPF程序,我看著覺得還行,不過還有很多地方需要完善,WPF路徑對象,動畫功能真贊啊:
在工控開發的工程中,OPC是相當簡單常用而且好用的手段哦,從一開始使用自己寫的函數,到全面使用封裝好的dll,真是省時省力。當然后來的prodave也不錯,不過只是做個試驗沒有真正應用,不過貌似沒有異步通知,得自己定時去刷OPC了。
對了,其實,在最后的程序的過程中,因為要通知另一系統采集數據庫數據并發送它第二個數據庫中,這個功能很想嘗試下WCF啊,就看時間允不允許了。反正啊,這些就是我目前2年來對于自己使用.Net在工控中的應用了。真的,實時性上VC更棒,但是就開發效率以及監控功能而言,.Net要強大的太多了,而且程序編寫也簡單!