【LabVIEW開(kāi)發(fā)】如何使用LabVIEW對(duì).ini配置文件進(jìn)行讀/寫操作?

人類的悲歡并不相通肤粱,我只覺(jué)得他們吵鬧

一弹囚、 為什么要使用ini文件?

??作為工控人員领曼,在開(kāi)發(fā)上位機(jī)的過(guò)程中鸥鹉,經(jīng)常會(huì)碰到這種需求:甲方要求在每次運(yùn)行軟件時(shí),軟件的初始配置信息需要和上次退出時(shí)的配置信息保持相同庶骄,如上一次使用過(guò)程中設(shè)置的溫度報(bào)警值毁渗、壓力報(bào)警值等參數(shù)的設(shè)置信息;本此試驗(yàn)過(guò)程中单刁,會(huì)根據(jù)實(shí)際情況重新設(shè)置新的報(bào)警值并保存下來(lái)灸异,方便下一次試驗(yàn)時(shí)直接使用。
??要實(shí)現(xiàn)這個(gè)目標(biāo)羔飞,可以使用ini文件肺樟,將這些配置信息存儲(chǔ)到ini文件中,當(dāng)程序開(kāi)始運(yùn)行并初始化時(shí)逻淌,讀取該ini文件里面的內(nèi)容進(jìn)行軟件的初始化么伯,在程序運(yùn)行過(guò)程中,一旦用戶修改配置信息卡儒,軟件就及時(shí)將當(dāng)前的修改配置信息保存到ini文件中田柔。

二、 ini文件簡(jiǎn)介

??ini是英文“初始化”(initialization)的縮寫骨望,一種文件擴(kuò)展名硬爆,也就是一種文件格式。正如其英語(yǔ)所表示的意思擎鸠,ini文件被用來(lái)對(duì)操作系統(tǒng)或特定程序初始化或進(jìn)行參數(shù)設(shè)置缀磕,是某些平臺(tái)或軟件上配置文件的非正式標(biāo)準(zhǔn),常見(jiàn)于Windows操作系統(tǒng)。打開(kāi)Win平臺(tái)電腦的C盤虐骑,在一些系統(tǒng)文件的根目錄中可以很輕松的找到這種類型的配置文件准验,如下圖所示:


電腦C盤中的ini文件

??隨著Windows操作系統(tǒng)引入注冊(cè)表以后,其逐漸取代了ini文件統(tǒng)管Windows各項(xiàng)配置的功能廷没,ini類型的配置文件才在系統(tǒng)中大幅減少。但是其配置參數(shù)的理念被廣泛使用到其它各種應(yīng)用軟件中垂寥,用于保存程序的一些固定參數(shù)颠黎,如應(yīng)用軟件登錄的用戶名和密碼、溫度報(bào)警的閾值等信息滞项。
??ini文件的類容格式主要由:[section]段(或節(jié))和key - value(鍵值對(duì))組成狭归。“段”用方括號(hào)括起來(lái)文判,單獨(dú)占一行过椎,“鍵值對(duì)”另占一行。個(gè)人感覺(jué)與python的字典dict數(shù)據(jù)類型有點(diǎn)相似戏仓,只是表現(xiàn)形式有點(diǎn)差別疚宇,ini文件格式如下圖所示:


ini文件格式

??同一個(gè)ini文件中的段名必須唯一。每個(gè)字段由一系列“=”隔開(kāi)的鍵和鍵值組成赏殃,鍵名代表配置選項(xiàng)敷待,值代表該選項(xiàng)的設(shè)置,同一個(gè)段內(nèi)鍵名必須唯一仁热,但不同段之間的鍵名并無(wú)關(guān)系榜揖。等號(hào)左邊的字符串為鍵名,右邊的字符串為鍵值抗蠢。

三举哟、如何新建 ini文件

??1、在電腦桌面右鍵新建一個(gè)文本文檔迅矛,也就是txt文件妨猩,然后重命名該文件,將該文件的后綴由“.txt”修改為“.ini”诬乞,然后點(diǎn)擊回車册赛、點(diǎn)確定就OK了,如下圖所示的ini文件:


新建的ini文件

??2震嫉、由于ini文件本質(zhì)上還是文本文件,在Windows操作系統(tǒng)上直接雙擊打開(kāi)就可以進(jìn)行內(nèi)容的編輯了。由于人人可以編輯,微軟后來(lái)就用注冊(cè)表逐漸取代了ini文件的配置功能。但是ini文件還是由自己的優(yōu)勢(shì)的镰官,簡(jiǎn)單易懂,易于編輯拓哺,復(fù)制簡(jiǎn)便础淤,這都是ini文件的優(yōu)點(diǎn)玻侥。

??3姑食、特別注意

??我們?cè)谛陆╰xt文件的時(shí)候煌茬,txt文件有兩種格式浑吟,一個(gè)是“UTF-8”格式,如下圖所示:


UTF-8格式文件

??另一種格式是“ANSI”耗溜,實(shí)際上就是GBK格式,如下圖所示:


ANSI格式文件
??我為什么要把txt文件的兩種格式拿出來(lái)單獨(dú)說(shuō)呢省容?

??主要是從txt文件變來(lái)的ini文件抖拴,編碼模式與txt是一樣的。而我在實(shí)際的編程過(guò)程中發(fā)現(xiàn):LabVIEW無(wú)法識(shí)別“UTF-8”格式的ini文件腥椒,即便你寫的所有步驟都是正確的阿宅,程序仍然讀不到配置文件中的信息。
??而當(dāng)所有程序不變笼蛛,把ini文件改為“ANSI”格式后洒放,程序就可以順利讀到配置文件里的信息了。至于如何把txt文件的編碼格式改為“ANSI”滨砍,大家就自行百度吧往湿,貌似要修改注冊(cè)表。一個(gè)比較簡(jiǎn)便的方法是惋戏,找一個(gè)ANSI格式的ini文件领追,復(fù)制過(guò)來(lái),然后按自己的需要進(jìn)行修改就可以了响逢。當(dāng)然绒窑,如果你電腦txt文件的默認(rèn)格式就是ANSI,就不用管我說(shuō)的這些廢話舔亭。
??新建的ini配置文件放在LabVIEW項(xiàng)目所在的文件根目錄里些膨,方便后面vi程序的讀取和寫入。

四钦铺、實(shí)戰(zhàn)練習(xí)

??LabVIEW實(shí)戰(zhàn)練習(xí)主要分為3個(gè)部分:讀取ini文件订雾、寫入ini文件以及同時(shí)讀取和寫入ini文件。單獨(dú)的read和write相對(duì)簡(jiǎn)單一些职抡,同時(shí)read和write更接近我們實(shí)際的項(xiàng)目編程葬燎。
??LabVIEW中提供了一組用于操作配置文件的函數(shù)集,位于函數(shù)選板“編程”“文件I/O”“配置文件VI”子選板中,如下圖所示:


配置文件VI面板

??這些函數(shù)集實(shí)際是經(jīng)過(guò)二次封裝的VI程序谱净,可以完成對(duì)ini配置文件的打開(kāi)及關(guān)閉操作窑邦、段和鍵的讀寫及刪除操作等功能。而“讀取健”模塊本身是一個(gè)多態(tài)VI壕探,如下圖所示:
Read Key.vi

??點(diǎn)擊該多態(tài)vi圖標(biāo)上的小三角形冈钦,我們可以看到,該多態(tài)vi可以讀取的數(shù)據(jù)類型包括:布爾李请、雙精度浮點(diǎn)數(shù)瞧筛、I32、路徑导盅、字符串和U32较幌。如果我們需要讀取float型數(shù)據(jù),直接選擇雙精度就可以了白翻,或者用默認(rèn)的自動(dòng)狀態(tài)乍炉,程序會(huì)根據(jù)具體的實(shí)際情況,將讀取的配置文件數(shù)據(jù)轉(zhuǎn)換相應(yīng)的數(shù)據(jù)類型滤馍。至于啥是多態(tài)vi岛琼,我們暫時(shí)不要管它,先用再說(shuō)巢株,等以后對(duì)LabVIEW了解得比較深入了槐瑞,理解這些概念都不難。LabVIEW中對(duì)配置文件的編程方式同普通文本文件類似阁苞,遵循著打開(kāi)困檩、讀寫及關(guān)閉的三步原則。后面給出的示例都是遵循該思路來(lái)進(jìn)行操作的猬错。
??1窗看、我的開(kāi)發(fā)環(huán)境

??Windows10(64bit),LabVIEW2017(32bit)

??2倦炒、讀取ini文件

??這部分要達(dá)到的功能比較簡(jiǎn)單显沈,就是將上圖(ANSI格式文件)中的溫度、壓力和流量對(duì)應(yīng)的數(shù)據(jù)進(jìn)行讀取并在前面板對(duì)應(yīng)的數(shù)值顯示框中顯示出來(lái)逢唤。具體實(shí)現(xiàn)代碼如下圖所示:


read部分的前面板和程序面板

??從上圖可以看到拉讯,前面板只有3個(gè)數(shù)值顯示框,程序面板主要包括“打開(kāi)”鳖藕、“讀取”魔慷、“關(guān)閉”3個(gè)函數(shù)模塊≈鳎“打開(kāi)”模塊需要填寫ini文件的文件路徑院尔,才能打開(kāi)相應(yīng)的配置文件蜻展;ini文件中有三個(gè)鍵值對(duì),所以我使用了3個(gè)Read Key.vi模塊來(lái)同時(shí)讀取這3個(gè)數(shù)據(jù)邀摆,讀取配置信息完成后纵顾,使用“Close Config Data.vi”關(guān)閉該配置文件。程序運(yùn)行的結(jié)果如下圖所示:


read部分的運(yùn)行結(jié)果

??從上圖中我們可以看到栋盹,LabVIEW程序成功讀到了文件名為“配置.ini”文件中對(duì)應(yīng)的數(shù)據(jù)施逾,并在前面板中顯示出來(lái)。這個(gè)時(shí)候就有個(gè)問(wèn)題例获,上文中ini文件的字段中有3個(gè)鍵值對(duì)汉额,要使用3個(gè)Read Key.vi模塊來(lái)進(jìn)行讀取,如果配置文件中字段的鍵值對(duì)有10個(gè)或者20個(gè)榨汤,難道也要用20個(gè)Read Key.vi模塊來(lái)進(jìn)行讀取嗎蠕搜?那程序也太長(zhǎng)了吧?
??答案顯然是不需要收壕,當(dāng)然你非要使用這種一字長(zhǎng)蛇陣也不是不可以讥脐。當(dāng)數(shù)量比較多的時(shí)候,我們第一個(gè)需要考慮點(diǎn)就是使用for循環(huán)啼器,有幾個(gè)數(shù)據(jù),就循環(huán)幾次俱萍,這樣程序看起來(lái)會(huì)簡(jiǎn)潔很多端壳,也方便自己后期閱讀和修改。

??同樣也是讀取上圖中文件名為“配置.ini”的文件枪蘑,加入for循環(huán)后损谦,可以達(dá)到同樣的效果,實(shí)現(xiàn)程序如下圖所示:


read部分修改后的程序

??上圖中最主要的改變就是把需要讀取的健名全部放到一個(gè)字符串?dāng)?shù)組中岳颇,最后讀取的數(shù)據(jù)也被放到一個(gè)數(shù)組中照捡,后面索引一下數(shù)組就可以得到相應(yīng)的數(shù)據(jù)。程序運(yùn)行的結(jié)果與上面的結(jié)果是一樣的话侧,就不貼出來(lái)了栗精。
??3、寫入ini文件

??寫入部分的程序也比較簡(jiǎn)單瞻鹏,主要思路是通過(guò)在前面板的數(shù)值輸入框中輸入自己想要設(shè)定的數(shù)據(jù)悲立,新的數(shù)據(jù)就寫入到了對(duì)應(yīng)的ini配置文件里,以實(shí)現(xiàn)vi程序?qū)ni文件的寫入操作新博,具體實(shí)現(xiàn)代碼如下圖所示:


write部分的前面板和程序面板

??前面板就是3個(gè)數(shù)值輸入框薪夕,分別對(duì)應(yīng)溫度、壓力赫悄、流量原献;程序面板也遵循打開(kāi)馏慨、讀寫及關(guān)閉的三步原則。Write Key.vi函數(shù)模塊放在了for循環(huán)中姑隅,該模塊的輸入端參數(shù)分別是段名写隶、鍵名和將要寫入的數(shù)值3個(gè)部分,段名和寫入的值有3個(gè)粤策,所以用數(shù)組來(lái)進(jìn)行輸入樟澜。不然,就要使用3個(gè)Write Key.vi函數(shù)模塊進(jìn)行寫入操作叮盘,不是特別簡(jiǎn)潔秩贰。程序運(yùn)行的結(jié)果如下圖所示:


write部分的運(yùn)行結(jié)果

??從上述結(jié)果可以看到,ini文件的原始數(shù)據(jù)分別是20.0柔吼、30.0毒费、40.0,運(yùn)行程序后愈魏,在前面板的數(shù)值輸入框輸入新的值觅玻,關(guān)閉vi程序后,新的數(shù)據(jù)其實(shí)已經(jīng)寫入到了ini文件中培漏,但是ini文件無(wú)法自動(dòng)刷新數(shù)據(jù)溪厘,所以需要重新打開(kāi)ini文件,新的數(shù)據(jù)就刷新出來(lái)了牌柄。由于在LabVIEW中畸悬,雙精度浮點(diǎn)數(shù)默認(rèn)是精確到小數(shù)點(diǎn)后第六位,所以我們會(huì)看到珊佣,寫入并保存到ini文件中的數(shù)據(jù)蹋宦,小數(shù)點(diǎn)后都有6個(gè)0。
??這里面還有小問(wèn)題咒锻,就是點(diǎn)擊程序運(yùn)行的時(shí)候冷冗,由于每個(gè)數(shù)值輸入框都有一個(gè)默認(rèn)值0,這個(gè)時(shí)候惑艇,程序一運(yùn)行蒿辙,這3個(gè)數(shù)值輸入框的默認(rèn)值0其實(shí)已經(jīng)寫入到了ini文件中了,只是我們手動(dòng)輸入新值后敦捧,新值才把這個(gè)寫入默認(rèn)值0替換掉了须板。

先賣個(gè)關(guān)子,下面會(huì)講到如何規(guī)避這個(gè)問(wèn)題兢卵。

??4习瑰、同時(shí)讀取和寫入ini文件

??同時(shí)讀/寫ini文件的編程思路是:第一、程序運(yùn)行時(shí)秽荤,直接讀取ini配置文件中的原始數(shù)據(jù)并在前面板顯示出來(lái)甜奄;第二柠横、自定義的其他功能程序;第三课兄、在前面板數(shù)值輸入框中輸入自己想要修改的數(shù)據(jù)牍氛,程序會(huì)自動(dòng)寫入到ini文件并保存下來(lái)。3個(gè)部分采用平鋪式順序結(jié)構(gòu)進(jìn)行編寫烟阐,具體的實(shí)現(xiàn)程序如下圖所示:


同時(shí)讀/寫的前面板和程序面板

??由上圖可知搬俊,順序結(jié)構(gòu)的第一幀是ini文件的讀取部分,在程序開(kāi)始運(yùn)行時(shí)蜒茄,讀取原始ini文件中的內(nèi)容唉擂,在上面的代碼中,首先在當(dāng)前vi程序目錄下使用“Open Config Data.vi”函數(shù)模塊打開(kāi)“配置.ini”文件檀葛,將該函數(shù)模塊的參數(shù)“在必要時(shí)創(chuàng)建文件”設(shè)為假玩祟,即文件不存在時(shí)不要?jiǎng)?chuàng)建文件,若文件不存在屿聋,則該函數(shù)會(huì)返回一個(gè)錯(cuò)誤空扎,此時(shí)不作任何處理,否則讀取該ini文件润讥。此部分與本節(jié)第2小節(jié)的程序基本一致转锈,就不做過(guò)多解釋。
??順序結(jié)構(gòu)的第二幀是實(shí)現(xiàn)自定義功能的部分楚殿,如果沒(méi)有其他功能需求黑忱,也可以直接刪掉
??順序結(jié)構(gòu)的第三幀是ini文件的寫入部分,程序使用事件結(jié)構(gòu)勒魔,就是為了規(guī)避上面第3小節(jié)提到的程序已運(yùn)行就把輸入框的默認(rèn)值寫入到ini文件中,使用事件結(jié)構(gòu)后菇曲,只有當(dāng)相應(yīng)的輸入框的數(shù)值發(fā)生變化冠绢,才會(huì)將新值寫入到ini文件中。程序的具體細(xì)節(jié)與上面第3小節(jié)基本一樣常潮,也不做過(guò)多解釋弟胀。程序運(yùn)行的結(jié)果如下圖所示:


同時(shí)讀/寫部分的運(yùn)行結(jié)果

??從運(yùn)行結(jié)果圖中可以看到,程序一運(yùn)行時(shí)喊式,就讀到了ini文件的原始數(shù)據(jù)孵户,隨著我在數(shù)據(jù)輸入框輸入新的數(shù)值,數(shù)值就寫入到了ini文件岔留,重啟ini文件可以到新的數(shù)據(jù)已保存到其中夏哭。

五、小結(jié)

??1献联、注意txt文件的編碼格式竖配,如果不是ANSI格式何址,需要將其更改為ANSI格式,否則LabVIEW無(wú)法讀寫該配置文件进胯;
??2用爪、寫入部分的程序盡量使用事件結(jié)構(gòu),可以規(guī)避輸入框默認(rèn)值直接寫入到配置文件中胁镐;
??3偎血、本文只列舉了雙精度浮點(diǎn)數(shù)的讀寫實(shí)現(xiàn)過(guò)程,其他類型數(shù)據(jù)的讀寫程序都差不多盯漂,最重要的是理解編程的思路颇玷,并學(xué)會(huì)舉一反三;
??4宠能、記得多學(xué)多練亚隙,活學(xué)活用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末违崇,一起剝皮案震驚了整個(gè)濱河市阿弃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌羞延,老刑警劉巖渣淳,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伴箩,居然都是意外死亡入愧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門嗤谚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)棺蛛,“玉大人,你說(shuō)我怎么就攤上這事巩步∨陨蓿” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵椅野,是天一觀的道長(zhǎng)终畅。 經(jīng)常有香客問(wèn)我,道長(zhǎng)竟闪,這世上最難降的妖魔是什么离福? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮炼蛤,結(jié)果婚禮上妖爷,老公的妹妹穿的比我還像新娘。我一直安慰自己理朋,他們只是感情好赠涮,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布子寓。 她就那樣靜靜地躺著,像睡著了一般笋除。 火紅的嫁衣襯著肌膚如雪斜友。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天垃它,我揣著相機(jī)與錄音鲜屏,去河邊找鬼。 笑死国拇,一個(gè)胖子當(dāng)著我的面吹牛洛史,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酱吝,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼也殖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了务热?” 一聲冷哼從身側(cè)響起忆嗜,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崎岂,沒(méi)想到半個(gè)月后捆毫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冲甘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年绩卤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片江醇。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡濒憋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陶夜,到底是詐尸還是另有隱情跋炕,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布律适,位于F島的核電站,受9級(jí)特大地震影響遏插,放射性物質(zhì)發(fā)生泄漏捂贿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一胳嘲、第九天 我趴在偏房一處隱蔽的房頂上張望厂僧。 院中可真熱鬧,春花似錦了牛、人聲如沸颜屠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)甫窟。三九已至密浑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間粗井,已是汗流浹背尔破。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浇衬,地道東北人懒构。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像耘擂,于是被迫代替她去往敵國(guó)和親胆剧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容