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