在工業(yè)制造領(lǐng)域的信息化系統(tǒng)中,C#始終占據(jù)主流地位。使用C#開發(fā)的SCADA、生產(chǎn)管理系統(tǒng)數(shù)不勝數(shù)。而因其和自動(dòng)化系統(tǒng)的緊密相關(guān)性,很多自控工程師也有著轉(zhuǎn)型上位機(jī)開發(fā)的想法。自控工程師轉(zhuǎn)型上位機(jī)有一個(gè)很大的優(yōu)勢,那就是他們既熟悉設(shè)備又了解工藝,這點(diǎn)是計(jì)算機(jī)專業(yè)的程序員無法相比的。缺點(diǎn)也很明顯,就是他們沒有接受過系統(tǒng)的訓(xùn)練,缺乏完整的知識體系。而市面上的一些教材因?yàn)樽髡邲]有進(jìn)入過自動(dòng)化行業(yè),也沒有真正的上位機(jī)開發(fā)經(jīng)驗(yàn),講解的東西基本都脫離現(xiàn)實(shí)。舉個(gè)例子來說,上升沿觸發(fā)這個(gè)簡單邏輯很多人都未必搞得清楚。更別說報(bào)警進(jìn)入后的應(yīng)答以及未確認(rèn)就離開這個(gè)處理邏輯了。本文是針對想轉(zhuǎn)型上位機(jī)開發(fā)的自控工程師的一些學(xué)習(xí)建議。
1,框架選擇
關(guān)于框架我們推薦.NetFramework。并沒有必要使用現(xiàn)在的.NET(.Net Core后面的版本我們這里統(tǒng)稱為.NET)。原因有二,一是在桌面開發(fā)上,現(xiàn)在的.NetFramework和.NET沒有太大區(qū)別。二是現(xiàn)在的操作系統(tǒng)沒有內(nèi)置.net runtime。如果我們使用.NET來開發(fā)的話,那么部署會(huì)比較麻煩。至于.NetFramework的生命周期的問題,這個(gè)完全不用擔(dān)心,連20多年前的VB6開發(fā)的程序都可以在現(xiàn)在的Windows系統(tǒng)上運(yùn)行,還用得著擔(dān)心.NetFramework嗎?
2,C#語言版本
因?yàn)榭蚣芪覀冞x擇了.NetFramework。那么C#語言版本肯定是7.3了。因?yàn)閺腃#8.0開始,語法特性都是針對.NET了。
3,WinForm or WPF
WinForm容易上手,WPF可以做出很酷炫的交互界面(但是也需要一定的美工基礎(chǔ)),數(shù)據(jù)綁定也比較方便。至于MVVM嘛,WinForm和WPF倒是都支持。個(gè)人建議先從WinForm入手。待后面根據(jù)情況再?zèng)Q定是否需要學(xué)習(xí)WPF。
4,UI組件庫選擇
.NetFramework原生UI比較難看。在學(xué)習(xí)階段,我們可以不用糾結(jié)UI庫。做項(xiàng)目的話原生UI在這個(gè)看臉的時(shí)代確實(shí)有點(diǎn)落伍。所以我們有必要選擇第三方的UI組件庫。UI組件庫非常多,免費(fèi)的和收費(fèi)的都有,如果資金充裕,建議選擇收費(fèi)的第三方庫。收費(fèi)的組件庫在UI的精細(xì)化上和功能上不是免費(fèi)版可以比的。關(guān)于UI組件庫的選擇,請參見<上位機(jī)開發(fā)常用的ui庫(winform)>。
5,數(shù)據(jù)庫
上位機(jī)絕大多數(shù)場景下無需時(shí)序數(shù)據(jù)庫。關(guān)系型數(shù)據(jù)庫即可滿足。常用的有SQL SERVER、MySQL、SQLite、Oracle等。因?yàn)槲覀儾唤ㄗh寫存儲(chǔ)過程,所以哪種數(shù)據(jù)庫對我們來說關(guān)系不大,因?yàn)槎际菢?biāo)準(zhǔn)的SQL語言。如果使用ORM的話,這種差別就更小了。
6,數(shù)據(jù)訪問
剛開始學(xué)習(xí)時(shí)還是需要通過ADO.NET來逐步熟悉數(shù)據(jù)庫訪問。然后嘗試封裝一些SQLHelper等數(shù)據(jù)庫訪問助手類。真正做項(xiàng)目大多使用ORM框架。Entity Framework是微軟的ORM框架,但是稍微重了一些。不建議在上位機(jī)開發(fā)中使用。個(gè)人推薦SqlSugar這樣的輕量級ORM框架。
7,架構(gòu)選擇
上位機(jī)系統(tǒng)一般不是很復(fù)雜。經(jīng)典的三層架構(gòu)即可滿足要求。因?yàn)樾枰蚉LC等控制器交互數(shù)據(jù),所以我們可以再添加一個(gè)設(shè)備驅(qū)動(dòng)層,當(dāng)然也可以把它們和數(shù)據(jù)訪問層放在一起。