陳健偉
(福建出入境檢驗(yàn)檢疫局檢驗(yàn)檢疫技術(shù)中心,福建 福州 350003)
為適應(yīng)現(xiàn)代紡織品的性能需求,越來越多的紡織品采用了多組分纖維混紡的方式,從而對紡織纖維檢測工作提出了更高的要求?,F(xiàn)行標(biāo)準(zhǔn)FZ/T 01026-2017《紡織品 定量化學(xué)分析 多組分纖維混合物》給出了4組分乃至更多組分纖維混紡比的計(jì)算模型[1],其基本操作方法是將混合物中的各組分逐一溶解,類似于GB/T 2910.2-2009中的方案4[2]。該標(biāo)準(zhǔn)給出了n組分纖維混合物試樣凈干質(zhì)量百分率的計(jì)算公式(以下簡稱“通用計(jì)算式”),并以此為基礎(chǔ),對4/5/6組分混紡織物定量化學(xué)分析結(jié)果計(jì)算進(jìn)行了示例。若混合物纖維組分?jǐn)?shù)大于6,則應(yīng)利用通用計(jì)算式進(jìn)行計(jì)算。為簡化計(jì)算過程,避免因變量過多導(dǎo)致計(jì)算出錯(cuò),有必要利用計(jì)算機(jī)語言實(shí)現(xiàn)纖維定量順序溶解方案的算法。
VBA的英文全稱是Visual Basic for Application,是VB語言的子集,不但繼承了VB的開發(fā)機(jī)制,而且與VB有著相同的程序結(jié)構(gòu)和開發(fā)環(huán)境。它能簡單直觀地訪問Office軟件的各個(gè)部分,比如可以直接讀寫Excel單元格。這使我們學(xué)習(xí)程序設(shè)計(jì)變得非常直觀,能利用編程輕松地解決實(shí)際工作問題[3]。故選擇Excel中自帶的VBA開發(fā)工具實(shí)現(xiàn)上述算法,并開發(fā)出計(jì)算工具。
先新建一個(gè)Excel文件,另存為xlsm格式,然后打開此文件進(jìn)行計(jì)算工具界面的設(shè)計(jì)。確定需要輸入的內(nèi)容包括:試樣凈干質(zhì)量m、組分?jǐn)?shù)n、每一組分的名稱和公定回潮率、每一步溶解采用的試劑(用于確定質(zhì)量損失修正系數(shù),即d值)、每一步溶解完剩余的質(zhì)量r;需要輸出的內(nèi)容是各組分的凈干質(zhì)量百分率P或者公定質(zhì)量百分率PA(根據(jù)需要選擇)。
由于纖維類型及其回潮率、溶解試劑都是種類較多而相對固定的,這幾類數(shù)據(jù)通過下拉選擇的形式輸入較為合適;計(jì)算方式也可以設(shè)計(jì)成選擇的形式,備選項(xiàng)包括“凈干含量”和“結(jié)合回潮率含量”兩種。另外,由于d值較多,在點(diǎn)擊需要輸入d值的單元格時(shí),可根據(jù)纖維類型和溶解試劑給出相應(yīng)提示。根據(jù)這些思路,先在Sheet1工作表設(shè)計(jì)出工具主界面,見表1。
表1 計(jì)算工具主界面
其中,B1單元格用于輸入組分?jǐn)?shù),設(shè)置其數(shù)據(jù)有效性條件為“允許整數(shù),介于2到20”。D1單元格用于輸入凈干質(zhì)量m,設(shè)置其小數(shù)位數(shù)為4位。F1單元格設(shè)置其有效性條件為“允許序列,來源:凈干含量,結(jié)合回潮率”。第1列從A4開始往后的單元格用于輸入組分名稱,第2行從C2開始往后的單元格用于輸入試劑名稱;第3行從C3開始往后的單元格用于輸入每一步溶解完剩余的質(zhì)量r(小數(shù)位數(shù)也設(shè)為4位),第2列從B4開始往后的單元格用于顯示計(jì)算結(jié)果。此外,H1單元格用于顯示d值填寫提示。
為了便于纖維類型及其回潮率、溶解試劑的選擇輸入,在Sheet2工作表中設(shè)計(jì)出如圖2的備選資料界面(此表可擴(kuò)展)。然后將上述用于輸入組分名稱的單元格的有效性條件設(shè)置為“允許序列,來源==Sheet2!$A$2:$A$99”,用于輸入試劑名稱的單元格的有效性條件設(shè)置為“允許序列,來源=Sheet2!$C$2:$C$99”。至此完成工具界面設(shè)計(jì)。
圖2 備選資料界面
首先,定義普通變量n、m和一維數(shù)組變量r、P、PA、A,以及二維數(shù)組變量d,以上變量的意義與標(biāo)準(zhǔn)一致;定義各個(gè)循環(huán)用的整型變量i、j、k,以及存放臨時(shí)計(jì)算數(shù)據(jù)的double型變量temp1、temp2。以下是各個(gè)模塊的主要功能。
當(dāng)B1單元格內(nèi)容改變時(shí)觸發(fā)兩個(gè)事件,一是重新對n賦值,二是根據(jù)n的大小確定需要填寫的單元格區(qū)域,并用其他顏色高亮;同時(shí)參照FZ/T 01026-2017中表1的形式,在相應(yīng)單元格填上“溶解”、“--”等字樣,以便于辨識(shí)。代碼從略。
當(dāng)點(diǎn)擊需要填寫d值的單元格時(shí),根據(jù)此單元格位置,先找到對應(yīng)的纖維類型和溶解試劑,然后在H1單元格給出相應(yīng)的填寫提示,例如“聚酯纖維 在75%硫酸中損失系數(shù)”。代碼從略。
此模塊為核心模塊。先用各單元格填寫的內(nèi)容對相應(yīng)變量進(jìn)行賦值,然后計(jì)算。
先計(jì)算Pn:
temp1 = 1
For i = 1 To n - 1
temp1 = temp1 ? d(n, i)
Next
P(n) = Round(100 ? r(n - 1) ? temp1 / m, 2)
再計(jì)算Pk(2≤k≤n-1):
For k = n - 1 To 2 Step -1
temp1 = 0
For i = k + 1 To n
temp2 = 1
For j = 1 To k - 1
temp2 = temp2 ? d(i, j)
Next
temp2 = P(i) / temp2
temp1 = temp1 + temp2
Next
temp1 = 100 ? r(k - 1) / m - temp1
For j = 1 To k - 1
temp1 = temp1 ? d(k, j)
Next
P(k) = Round(temp1, 2)
Next
計(jì)算P1,完成凈干含量的求解:
P(1) = 100
For i = 2 To n
P(1) = P(1) - P(i)
Next
P(1) = Round(P(1), 2)
計(jì)算公定質(zhì)量百分率PA:
temp1 = 0
For i = 1 To n
A(i) = Application.VLookup(Cells(i + 3, 1),Sheet2.Range("A2:B99"), 2, False)
PA(i) = P(i) ? (1 + 0.01 ? A(i))
temp1 = temp1 + PA(i)
Next
PA(n) = 100
For i = 1 To n - 1
PA(i) = Round(100 ? PA(i) / temp1, 1)
PA(n) = Round(PA(n) - PA(i), 1)
Next
最后根據(jù)需要,將凈干質(zhì)量百分率P或公定質(zhì)量百分率PA填寫回對應(yīng)單元格,模塊結(jié)束。
包括“清空質(zhì)量記錄和結(jié)果”和“初始化”兩個(gè)模塊,前者用于同樣的實(shí)驗(yàn)條件下輸入新的m、r值進(jìn)行結(jié)果計(jì)算,后者用于初始化界面以設(shè)計(jì)新的實(shí)驗(yàn)條件。代碼從略。
以FZ/T 01026-2017的附錄A~附錄C給出的示例[1],用本工具進(jìn)行計(jì)算,結(jié)果如表1(按照第1組分、第2組分、第3組分……的順序排列,用斜杠分隔開)。
由表1可見,本工具的計(jì)算結(jié)果與標(biāo)準(zhǔn)對比,在凈干質(zhì)量百分率P的結(jié)果里面僅有≤0.01%的計(jì)算誤差,由于足夠小可以忽略;而公定質(zhì)量百分率PA的結(jié)果則與標(biāo)準(zhǔn)完全一致;在填完各組數(shù)據(jù)后,運(yùn)行“計(jì)算”模塊馬上能得到結(jié)果,計(jì)算效率高。
表1 本工具計(jì)算結(jié)果與標(biāo)準(zhǔn)結(jié)果對照
文章所描述的工具對于順序溶解方案通用性強(qiáng),計(jì)算結(jié)果準(zhǔn)確、計(jì)算過程高效,對簡化多組分纖維定量結(jié)果計(jì)算過程具有指導(dǎo)意義。使用時(shí)可以根據(jù)需要在工具中加入更多的功能,例如坩堝和稱量瓶質(zhì)量的輸入模塊,以及平行實(shí)驗(yàn)計(jì)算功能等,使之更加便于實(shí)際使用。