本文轉(zhuǎn)載在我的微信公眾號(hào):古德曼汽車工業(yè)鸭丛。
希望關(guān)注本專欄的朋友罐监,也能一并關(guān)注微信公眾號(hào)眉抬。
原文地址:汽車工程師眼中的C#?
背景
不少讀者問(wèn)過(guò)【思想】贯吓,公眾號(hào)里的工具都是用什么編寫(xiě)的。答案就是C#蜀变。那么本期內(nèi)容就是聊下C#悄谐,內(nèi)容涉及C#的介紹、C#在汽車行業(yè)中的運(yùn)用库北、分享【思想】的學(xué)習(xí)經(jīng)歷與C#視頻教程爬舰,希望能給這個(gè)行業(yè)想學(xué)編程的工程師提供個(gè)思路们陆。
前言
先從【思想】是如何結(jié)識(shí)C#的坪仇,那應(yīng)該是大一,【思想】剛完成C語(yǔ)言的學(xué)習(xí)后就對(duì)編程有了很大的興趣椅文。所以就自學(xué)了C++,想做一些帶界面的Windows程序惜颇。由于【思想】大學(xué)學(xué)的是機(jī)械設(shè)計(jì)與自動(dòng)化皆刺,沒(méi)系統(tǒng)的學(xué)習(xí)過(guò)數(shù)據(jù)結(jié)構(gòu)這類的專業(yè)課,內(nèi)存管理經(jīng)常沒(méi)做好凌摄,內(nèi)存溢出等錯(cuò)誤讓【思想】差點(diǎn)放棄學(xué)習(xí)羡蛾,后來(lái)在一位妹子的推薦下接觸了C#,才挽回了一點(diǎn)信心锨亏。
C#是什么痴怨?
C#讀作CSharp,它是微軟.NET框架的其中一種與語(yǔ)言形式屯伞。起初的.NET框架編譯器支持C#與VB,NET兩種語(yǔ)言腿箩,C#的語(yǔ)法繼承了C/C++豪直,VB.Net則繼承了VB劣摇。
與Java、C++等一樣弓乙,C#也是一種面向?qū)ο蟮木幊陶Z(yǔ)言末融。C#對(duì)學(xué)過(guò)C/C++語(yǔ)言的朋友是比較友好的,所以受眾群體也比較廣一點(diǎn)∠救停現(xiàn)在主流的Windows系統(tǒng)(Win7以上版本)默認(rèn)都支持.Net4.0勾习,基本開(kāi)發(fā)出來(lái)的程序也不需要額外的安裝運(yùn)行庫(kù),可直接運(yùn)行懈玻。
C#的官方開(kāi)發(fā)環(huán)境就是宇宙最強(qiáng)IDE-VisualStudio巧婶。目前最新版已經(jīng)出到2019,但是安裝后的體積很大涂乌。簡(jiǎn)易想學(xué)習(xí)的可以安裝比較早期的版本艺栈,推薦使用2015版。可以支持大家使用C#開(kāi)發(fā)可執(zhí)行文件(EXE),動(dòng)態(tài)鏈接庫(kù)(DLL)免姿,甚至網(wǎng)頁(yè)程序泼疑。
說(shuō)了這么多,C#相較于C++到底有什么優(yōu)勢(shì)與不足呢闯狱?之前介紹過(guò)為什么【思想】結(jié)識(shí)了C#洽沟,這里就詳細(xì)說(shuō)說(shuō):在開(kāi)發(fā)比較復(fù)雜的程序時(shí)攘宙,為什么要搭建數(shù)據(jù)結(jié)構(gòu)丈莺。
舉個(gè)例子:在學(xué)習(xí)C語(yǔ)言的數(shù)組功能時(shí)划煮,就直接int a[10]這么一個(gè)語(yǔ)句就搞定了缔俄。但是實(shí)際上我們希望數(shù)組的長(zhǎng)度是動(dòng)態(tài)的牵现。這里就要用到鏈表瞎疼、堆棧、列隊(duì)等數(shù)據(jù)結(jié)構(gòu)茅茂,同時(shí)我們還要對(duì)這些數(shù)據(jù)結(jié)構(gòu)多排序檢索等操作空闲。這就需要程序員頻繁對(duì)內(nèi)存控件進(jìn)行操作碴倾。
這就很容易出現(xiàn)問(wèn)題跌榔,上圖這樣內(nèi)存錯(cuò)誤的情況也成為家常便飯僧须。當(dāng)時(shí)【思想】學(xué)習(xí)C++的時(shí)候也經(jīng)常因?yàn)檫@種內(nèi)存錯(cuò)誤哭暈在廁所担平。
所以暂论,【思想】個(gè)人認(rèn)為C#最棒的優(yōu)點(diǎn)就是它已經(jīng)封裝了非常豐富的數(shù)據(jù)結(jié)構(gòu)空免,在編程時(shí)可以直接調(diào)用。復(fù)雜的數(shù)據(jù)結(jié)構(gòu)問(wèn)題扼菠,微軟的工程師已經(jīng)幫大家考慮好了循榆。當(dāng)然【思想】認(rèn)為無(wú)法直接訪問(wèn)內(nèi)存也是他的劣勢(shì),比如做CAN通訊映挂,Socket通訊經(jīng)常要操作結(jié)構(gòu)體柑船,在這方面C#并不夠靈活鞍时。
C#在汽車行業(yè)中的應(yīng)用
C#在汽車行業(yè)中的應(yīng)用扣蜻,有大一部分都是在電控系統(tǒng)開(kāi)發(fā)工具的制作上。例如锐极,開(kāi)發(fā)一款控制器的同時(shí)灵再,還需要設(shè)計(jì)一個(gè)上位機(jī)工具檬嘀,用于開(kāi)發(fā)及生產(chǎn)的階段調(diào)試责嚷、售后故障診斷罕拂、程序的燒寫(xiě)爆班、數(shù)據(jù)標(biāo)定等辱姨。
圖片來(lái)源網(wǎng)絡(luò)
C#的應(yīng)用枢舶,讓汽車工程只需要考慮自己專業(yè)方面的邏輯,復(fù)雜的數(shù)據(jù)結(jié)構(gòu)完全可以托管給.net編譯器凉泄,這樣做出來(lái)的程序相對(duì)穩(wěn)定胀糜,開(kāi)發(fā)速度也比較快蒂誉。
另外怖竭,如果覺(jué)得C#的官方控件太過(guò)單一痊臭,也可以使用一些比較適合汽車領(lǐng)域的第三方控件,例如NI、Dotnetbar這類第三方控件,能夠迅速的提高用戶界面的品質(zhì)绽乔,上圖為NI國(guó)家儀器提供的第三方工業(yè)風(fēng)格控件。
思想作品介紹
下面介紹一下【思想】開(kāi)發(fā)的一些小工具,有一部分已經(jīng)在之前的文章有過(guò)詳細(xì)解析,還有一部分由于種種原因還沒(méi)能跟大家見(jiàn)面删顶,這里先預(yù)告一下,厲害的都會(huì)有的坚弱。
底層與邏輯層交互接口生成工具
之前提到過(guò)的底層與邏輯層交互接口生成工具输虱,導(dǎo)入DBC與IO輸入表宪睹,可以大大縮短人工寫(xiě)代碼的工作量。目前工具還處于開(kāi)發(fā)階段促煮,具體生成的原理可以留意文章下方的推薦閱讀。
DBC與EXCEL轉(zhuǎn)換工具
實(shí)現(xiàn)DBC文件與Excel表格文件的自由轉(zhuǎn)換民珍,詳細(xì)的功能介紹可以看下之前的文章:Excel與DBC文件的互相轉(zhuǎn)換
CAN總線分析工具
后續(xù)古德曼汽車工業(yè)也會(huì)推出基于C#與周立功CAN卡組成的總線分析工具,目前處于測(cè)試階段蝶溶,敬請(qǐng)期待!大致功能就是在線通過(guò)dbc文件解析報(bào)文信息,并通過(guò)圖形形式呈現(xiàn)每窖,類似一個(gè)簡(jiǎn)易的CANoe稽莉。
AVL-CRUISE自動(dòng)化后處理工具
由于【思想】之前從事了一段時(shí)間的動(dòng)力經(jīng)濟(jì)性仿真岸霹,也基于C#開(kāi)發(fā)出了AVL-CRUISE自動(dòng)化后處理工具,它可以自動(dòng)的收集CRUISE仿真工程的參數(shù)與結(jié)果,自動(dòng)歸檔到數(shù)據(jù)庫(kù)。這個(gè)工具的功能已經(jīng)十分完善致讥,但是由于當(dāng)前的數(shù)據(jù)保密,暫時(shí)還不能和大家見(jiàn)面咳榜。
最后
最后分享一下【思想】的學(xué)習(xí)方法涌韩。那就是在工作中學(xué)習(xí)臣樱,在折騰中學(xué)習(xí)」秃粒【思想】是一個(gè)非常愛(ài)折騰的人,應(yīng)該可以稱極客了秸仙,經(jīng)常折騰一些朋友都不清楚干嘛的東西。也做過(guò)不少小東西寂纪,在這過(guò)程中學(xué)習(xí)了不少知識(shí)席吴。除了折騰過(guò)C捞蛋、C++孝冒、C#之外還學(xué)習(xí)過(guò)HTML、JavaScript拟杉、CSS、PHP搬设,數(shù)據(jù)庫(kù)也玩過(guò)ACCESS拿穴、Mssql默色、Mysql腿宰。也編寫(xiě)過(guò)自己的網(wǎng)站程序(可以在【原文鏈接】訪問(wèn))呕诉,分享自己的折騰經(jīng)歷拖刃⊙氲【思想】希望分享自己的學(xué)習(xí)方法苞也,幫助到想自我學(xué)習(xí)的朋友們,希望大家也能夠嘗試下。
推薦閱讀
②-CRUISE與Isight聯(lián)合仿真優(yōu)化