電導(dǎo)法測(cè)定乙酸解離常數(shù)實(shí)驗(yàn)數(shù)據(jù)處理軟件設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
引言
高校實(shí)驗(yàn)是傳授知識(shí)和技能、訓(xùn)練科學(xué)思維和方法、培 養(yǎng)科學(xué)精神和品德、全面實(shí)施高等教育的重要環(huán)節(jié),在高等 教育中起著無(wú)法替代的作用。物理化學(xué)實(shí)驗(yàn)是一門(mén)獨(dú)立的基 礎(chǔ)實(shí)驗(yàn)課程。隨著電子技術(shù)、計(jì)算機(jī)技術(shù)在高等教育中的應(yīng)用, 高校的物理化學(xué)研究已經(jīng)滲透到自然科學(xué)的各個(gè)領(lǐng)域,并派 生了許多與物理化學(xué)相關(guān)的交叉學(xué)科,因此,物理化學(xué)實(shí)驗(yàn) 是通往現(xiàn)代科學(xué)研究的橋梁。物理化學(xué)實(shí)驗(yàn)的主要目的是使 學(xué)生初步了解物理化學(xué)的研究方法與技能,學(xué)會(huì)重要的物理化 學(xué)性能測(cè)定,熟悉物理化學(xué)實(shí)驗(yàn)現(xiàn)象的觀察和記錄、實(shí)驗(yàn)條 件的判斷和選擇、實(shí)驗(yàn)數(shù)據(jù)的測(cè)量和處理、實(shí)驗(yàn)結(jié)果的分析 和歸納等一整套實(shí)驗(yàn)方法,加深對(duì)物理化學(xué)基本理論的理解, 培養(yǎng)學(xué)生嚴(yán)謹(jǐn)認(rèn)真、實(shí)事求是的科學(xué)態(tài)度和作風(fēng)以及解決實(shí) 際化學(xué)問(wèn)題的能力。
為此,本文給出了如何用Visual FoxPro 6.0軟件來(lái)編寫(xiě) 電導(dǎo)法測(cè)定乙酸解離常數(shù)的具體方法。
1弱電解質(zhì)電離常數(shù)的測(cè)定
1.1測(cè)定原理
一般情況下,當(dāng)AB型弱電解質(zhì)在溶液中的電離達(dá)到平 衡時(shí),電離平衡常數(shù)Kc與原始濃度C和電離度a有以下關(guān)系:
(1)
由于在一定溫度下,Kc是常數(shù),因此,可以通過(guò)測(cè)定AB 型弱電解質(zhì)在不同濃度時(shí)的a值來(lái)通過(guò)式(1)求出Kc。
醋酸溶液的電離度可用電導(dǎo)法來(lái)測(cè)定。一般情況下,將 電解質(zhì)溶液注入電導(dǎo)池內(nèi),溶液電導(dǎo)G的大小與兩電極之間 的距離/成反比,與電極的面積A成正比:
G=kA/1(2)
式中,A〃為電導(dǎo)池常數(shù),以Ke”表示;為電導(dǎo)率。其物理意 義表示在兩平行且相距1 m,面積均為1 m2的兩電極間,電 解質(zhì)溶液的電導(dǎo),其單位以S ? m-1表示。
由于電極的/和A不易精確測(cè)量,因此,實(shí)驗(yàn)中可用一 種已知電導(dǎo)率值的溶液,先求出電導(dǎo)池常數(shù)Kce,?然后把待測(cè) 溶液注入該電導(dǎo)池,測(cè)出其電導(dǎo)值,再根據(jù)式Q)求出其電導(dǎo)率。
溶液的摩爾電導(dǎo)率是把含有1Q電解質(zhì)的溶液置于相距 為1 m的兩平行板電極之間的電導(dǎo)。通常以&表示,單位為 S ? m2 ? mol-1^摩爾電導(dǎo)率與電導(dǎo)率的關(guān)系為:
TOC \o "1-5" \h \z
/Km
以CAm對(duì)1/Am作圖,其直線的斜率為(K3)2Kc。這樣, 若已知Km值,就可求得Kc。
1.2實(shí)驗(yàn)步驟
基于上述原理,所確定的實(shí)驗(yàn)步驟如下:
調(diào)整恒溫槽溫度為25.0笆±0.3 °C。
用洗凈、烘干的叉形管1支,加入20 mL的0.1 mol/ L醋酸溶液,測(cè)其電導(dǎo)率。
⑶用吸取醋酸的移液管從電導(dǎo)池中吸出10 mL溶液棄去, 用另一支液管取10 mL電導(dǎo)水注入電導(dǎo)池,混合均勻,等溫 度恒定后,測(cè)其電導(dǎo)率。如此操作,共稀釋四次。
(4)倒去醋酸,洗凈電導(dǎo)池,然后用電導(dǎo)水淋洗。最后注 入20 mL電導(dǎo)水,測(cè)其電導(dǎo)率。
2軟件設(shè)計(jì)
2.1軟件開(kāi)發(fā)工具的選擇
本軟件使用 Visual FoxPro 6.0 開(kāi)發(fā)制作。Visual FoxPro
6.0是一個(gè)強(qiáng)大的Windows平臺(tái)開(kāi)發(fā)工具,具有面向?qū)ο缶?程的特點(diǎn)和可視化的編程方法,Visual FoxPro 6.0可提供對(duì)象 和事件處理模式,并可利用面向?qū)ο缶幊?OOP)的特點(diǎn),使用 戶不用加入太多代碼,就可方便地寫(xiě)出具有模擬操作系統(tǒng)功能 的、標(biāo)準(zhǔn)的Windows程序。Visual FoxPro 6.0是以關(guān)系模型 為基礎(chǔ)的、功能強(qiáng)大的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),它能夠迅 速而簡(jiǎn)單地建立用戶的數(shù)據(jù)庫(kù),從而方便地使用和管理數(shù)據(jù)。
Visual FoxPro 6.0是自含型數(shù)據(jù)庫(kù)管理系統(tǒng),是解釋型和編譯 型混合的系統(tǒng),可以解釋方式定義并操縱數(shù)據(jù)庫(kù),也可以將 操作過(guò)程編寫(xiě)為程序進(jìn)行編譯,然后脫離系統(tǒng)直接運(yùn)行,由 它生成的軟件,小巧靈活,使用方便,占用內(nèi)存?。?]。
2.2系統(tǒng)功能
本系統(tǒng)主要具有以下幾方面的功能:
2.2.1實(shí)驗(yàn)選項(xiàng)信息的輸入、修改與保存
本系統(tǒng)可以隨時(shí)方便地輸入、修改實(shí)驗(yàn)選項(xiàng)信息。由于 實(shí)驗(yàn)結(jié)果會(huì)受到環(huán)境的影響,因此,需要客觀準(zhǔn)確地保存室溫、 大氣壓、實(shí)驗(yàn)時(shí)間、所用儀器編號(hào)等實(shí)驗(yàn)選項(xiàng)信息,以方便 以后的數(shù)據(jù)分析。
2.2.2實(shí)驗(yàn)數(shù)據(jù)的輸入、計(jì)算、保存與顯示
本系統(tǒng)可以方便地輸入測(cè)定的實(shí)驗(yàn)數(shù)據(jù),并精確地計(jì)算 和明確地顯示。本文的實(shí)驗(yàn)過(guò)程需要測(cè)定乙酸的電導(dǎo)率、水 的電導(dǎo)率等數(shù)據(jù),由于這些數(shù)據(jù)通常都以科學(xué)計(jì)數(shù)法表示, 輸入比較困難,同時(shí),這些數(shù)據(jù)都比較小(在10-5左右),而 計(jì)算的結(jié)果可能會(huì)達(dá)到10-10左右,這就給數(shù)據(jù)的輸入、計(jì)算、 保存、顯示都提出了很高的要求。
2.2.3實(shí)驗(yàn)數(shù)據(jù)的輸出與讀取
本系統(tǒng)對(duì)于測(cè)定的實(shí)驗(yàn)數(shù)據(jù)可隨時(shí)方便地保存與讀取。 此實(shí)驗(yàn)需要測(cè)定的數(shù)據(jù)較多,實(shí)驗(yàn)用時(shí)較長(zhǎng),對(duì)實(shí)驗(yàn)數(shù)據(jù)方 便的保存與讀取將會(huì)讓實(shí)驗(yàn)過(guò)程變得簡(jiǎn)單、輕松,減少不必 要的重復(fù),同時(shí)也保證了數(shù)據(jù)的準(zhǔn)確性。
2.2.4實(shí)驗(yàn)結(jié)果的顯示
通過(guò)本系統(tǒng)可以快速計(jì)算出實(shí)驗(yàn)結(jié)果并顯示。通過(guò)結(jié)果 的顯示,有利于發(fā)現(xiàn)誤差較大的數(shù)據(jù),并及時(shí)修改。
2.2.5實(shí)驗(yàn)報(bào)告單的輸出
本系統(tǒng)可以方便、快速地生成專業(yè)的實(shí)驗(yàn)報(bào)告單。記錄 實(shí)驗(yàn)者、實(shí)驗(yàn)溫度、室溫、實(shí)驗(yàn)時(shí)間、所用儀器,實(shí)驗(yàn)結(jié)果 等與實(shí)驗(yàn)相關(guān)的所有信息,并對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)處理。
2.3關(guān)鍵程序設(shè)計(jì)及說(shuō)明
根據(jù)以上實(shí)驗(yàn)需求,本系統(tǒng)可由實(shí)驗(yàn)選項(xiàng)信息輸入、實(shí) 驗(yàn)數(shù)據(jù)輸入、實(shí)驗(yàn)結(jié)果顯示、實(shí)驗(yàn)報(bào)告單輸出等四大模塊組成。 2.3.1實(shí)驗(yàn)數(shù)據(jù)的輸入與計(jì)算程序
由于實(shí)驗(yàn)中測(cè)定的數(shù)據(jù)是以科學(xué)計(jì)數(shù)法表示的,為了方 便、快速輸入,本設(shè)計(jì)采用文本框加微調(diào)按鈕的方式輸入。 而對(duì)于顯示,由于在計(jì)算機(jī)中用科學(xué)計(jì)數(shù)法表示的數(shù)字將保 留15位有效數(shù)字,不利于查看,因此,本系統(tǒng)將計(jì)算的結(jié)果 四舍五入保留4位有效數(shù)字后轉(zhuǎn)化成文本類(lèi)型,以便于觀察。 具體代碼如下:
**以下是輸入數(shù)據(jù)驗(yàn)證程序
if thisform.spinner1.value>100 or thisform.spinner1.
value<0
messagebox(" 您輸入的 溫度 數(shù)值不正確,請(qǐng)檢查
更改!",0+16," 錯(cuò)誤提示 ")
thisform.spinner1.setfocus
return 0
endif
if thisform.text3.value<=0
messagebox(" 您輸入的 乙酸溶液濃度 數(shù)值不正確,
請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text3.setfocus
return 0
endif
if thisform.text2.value<0
messagebox(" 您輸入的 電導(dǎo)水電導(dǎo)率 數(shù)值不正確,
請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text2.setfocus
return 0
endif
if thisform.text2.value=0
P=messagebox(" 您輸入的 電導(dǎo)水電導(dǎo)率為 0 ,是否
繼續(xù)?",4+32+256," 提示信息 ")
if p=7
thisform.text2.setfocus
return 0
endif
endif
if thisform.text1.value<0
messagebox(" 您輸入的 原溶液電導(dǎo)率 數(shù)值不正確,
請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text1.setfocus
return 0
endif
if thisform.text1.value=0
p=messagebox(" 您輸入的 原 溶液電導(dǎo)率為 0 ,是
否繼續(xù)?",4+32+256," 提示信息 ")
if p=7
thisform.text1.setfocus
return 0
endif
endif
if thisform.text4.value<0
messagebox(" 您輸入的 第 一 次稀釋溶液電導(dǎo)率 數(shù)
值不正確,請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text4.setfocus
return 0
endif
if thisform.text4.value=0
p=messagebox(" 您輸入的 第 一 次稀釋溶液電導(dǎo)率
為 0 ,是否繼續(xù)?",4+32+256," 提示信息 ")
if p=7
thisform.text4.setfocus
return 0
endif
endif
if thisform.text5.value<0
messagebox(" 您輸入的 第 二 次稀釋溶液電導(dǎo)率 數(shù)
值不正確,請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text5.setfocus
return 0
endif
if thisform.text5.value=0
p=messagebox(" 您輸入的 第 二 次稀釋溶液電導(dǎo)率
為 0 ,是否繼續(xù)?",4+32+256," 提示信息 ")
if p=7
thisform.text5.setfocus
return 0
endif
endif
if thisform.text6.value<0
messagebox(" 您輸入的 第 三 次稀釋溶液電導(dǎo)率 數(shù)
值不正確,請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text6.setfocus
return 0
endif
if thisform.text6.value=0
p=messagebox(" 您輸入的 第 三 次稀釋溶液電導(dǎo)率
為 0 ,是否繼續(xù)?",4+32+256," 提示信息 ")
if p=7
thisform.text6.setfocus
return 0
endif
endif
if thisform.text7.value<0
messagebox(" 您輸入的 第 四 次稀釋溶液電導(dǎo)率 數(shù)
值不正確,請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text7.setfocus
return 0
endif
if thisform.text7.value=0
p=messagebox(" 您輸入的 第 四 次稀釋溶液電導(dǎo)率
為 0 ,是否繼續(xù)?",4+32+256," 提示信息 ")
if p=7
thisform.text7.setfocus
return 0
endif
endif
if thisform.text1.value=0 and thisform.text4.value=0 and
thisform.text5.value=0 and thisform.text5.value=0 and thisform.
text7.value=0
messagebox(" 您沒(méi)有輸入任何電導(dǎo)率數(shù)據(jù),請(qǐng)重新
輸入!",0+16," 錯(cuò)誤提示 ")
thisform.text1.setfocus
return 0
endif
2.3.2 實(shí)驗(yàn)數(shù)據(jù)輸出程序
為了方便隨時(shí)保存實(shí)驗(yàn)數(shù)據(jù),本設(shè)計(jì)制作了實(shí)驗(yàn)數(shù)據(jù)
保存表單,可將實(shí)驗(yàn)數(shù)據(jù)保存到任意路徑。具體代碼如下:
“輸出數(shù)據(jù)”按鈕的單擊事件代碼如下:
** 以下檢測(cè)試驗(yàn)數(shù)據(jù)有效性
do case
case thisform.spinner1.value>100 or thisform.spinner1.
value<0
messagebox(" 您輸入的 溫度 數(shù)值不正確,請(qǐng)檢查
更改!",0+16," 錯(cuò)誤提示 ")
thisform.spinner1.setfocus
return 0
case thisform.text3.value<=0
messagebox(" 您輸入的 乙酸溶液濃度 數(shù)值不正
確,請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text3.setfocus
return 0
case thisform.text2.value<0
messagebox(" 您輸入的 電導(dǎo)水電導(dǎo)率 數(shù)值不正
確,請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text2.setfocus
return 0
case thisform.text1.value<0
messagebox(" 您輸入的 原溶液電導(dǎo)率 數(shù)值不正
確,請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text1.setfocus
return 0
case thisform.text4.value<0
messagebox(" 您輸入的 第一次稀釋溶液電導(dǎo)率 數(shù)
值不正確,請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text4.setfocus
return 0
case thisform.text5.value<0
messagebox(" 您輸入的 第二次稀釋溶液電導(dǎo)率 數(shù)
值不正確,請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text5.setfocus
return 0
case thisform.text6.value<0
messagebox(" 您輸入的 第三次稀釋溶液電導(dǎo)率 數(shù)
值不正確,請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text6.setfocus
return 0
case thisform.text7.value<0
messagebox(" 您輸入的 第四次稀釋溶液電導(dǎo)率 數(shù)
值不正確,請(qǐng)檢查更改!",0+16," 錯(cuò)誤提示 ")
thisform.text7.setfocus
return 0
case thisform.text1.value=0 and thisform.text4.value=0
and thisform.text5.value=0 and thisform.text5.value=0 and
thisform.text7.value=0
messagebox(" 您沒(méi)有輸入任何電導(dǎo)率數(shù)據(jù),請(qǐng)重新
輸入!",0+16," 錯(cuò)誤提示 ")
thisform.text1.setfocus
return 0
OTHERWISE
&& 以下是文件路徑選擇和命名
do form save
&& 以下是用輸入的名稱在制定的路徑生成數(shù)據(jù)文件
if not empty(wjlj)
creat dbf ("&wjlj") ; && 此處的 " " 不可省略
(SPINNER1 n(4,2),;
TEXT3 n(8,4),;
TEXT2 N (5,4),;
SPINNER3 i,;
text1 n(8,4),;
spinner2 i,;
text4 n(8,4),;
spinner4 i,;
text5 n(8,4),;
spinner5 i,;
text6 n(8,4),;
spinner6 i,;
text7 n(8,4),;
spinner7 i )
&& 以下是數(shù)據(jù)保存
insert into "&wjlj" values (thisform.spinner1.value,; &&
此處的“”不可省略
thisform.text3.value,;
thisform.text2.value,;
thisform.spinner3.value,;
thisform.text1.value,;
thisform.spinner2.value,;
thisform.text4.value,;
thisform.spinner4.value,;
thisform.text5.value,;
thisform.spinner5.value,;
thisform.text6.value,;
thisform.spinner6.value,;
thisform.text7.value,;
thisform.spinner7.value)
use
messagebox(" 數(shù)據(jù)保存成功 ! ",0+64," 提示信息 ")
else
messagebox(" 您的數(shù)據(jù)尚未保存! ",0+48," 提示信息 ")
endif
endcase
“數(shù)據(jù)保存”表單的“路徑選擇”按鈕單擊事件代碼如下:
cdir=getdir()
if empty(cdir)
thisform.text2.value="mainp"+"\DATA\"
else
thisform.text2.value=cdir
endif
thisform.command3.setfocus
thisform.refresh
“數(shù)據(jù)保存”表單的“保存”按鈕單擊事件代碼 [7] 如下:
if empty(alltrim(thisform.text1.value))
messagebox(" 請(qǐng)輸入文件名稱!",0+16," 錯(cuò)誤提示 ")
thisform.text1.setfocus
return 0
endif
cdir=thisform.text2.value
cdirfile="cdir+alltrim(thisform.text1.value)"
public wjlj
wjlj=(&cdirfile)
thisform.release
2.3.3 實(shí)驗(yàn)數(shù)據(jù)讀取程序
為了方便數(shù)據(jù)輸入,本設(shè)計(jì)還制作了實(shí)驗(yàn)數(shù)據(jù)讀取表
單,以隨時(shí)方便地從任意位置讀取以前保存的試驗(yàn)數(shù)據(jù)。具
體代碼 [8] 如下:
“讀取數(shù)據(jù)”按鈕的單擊事件代碼如下:
do form read
** 以下是數(shù)據(jù)查詢
if empty(dqlj)
messagebox(" 沒(méi)有可讀取的數(shù)據(jù)! ",0+48," 提示信
息 ")
else
** 定義數(shù)組 temp1
dimension temp1(1)
SELECT *;
FROM "&dqlj"; && 此處的 "" 不可省略
inTO array temp1
if alen(temp1)<>14
messagebox(" 您選取的數(shù)據(jù)文件錯(cuò)誤! ",0+16," 錯(cuò)
誤提示 ")
else
** 以下是數(shù)據(jù)顯示
thisform.spinner1.value=temp1(1)
thisform.text3.value=temp1(2)
thisform.text2.value=temp1(3)
thisform.spinner3.value=temp1(4)
thisform.text1.value=temp1(5)
thisform.spinner2.value=temp1(6)
thisform.text4.value=temp1(7)
thisform.spinner4.value=temp1(8)
thisform.text5.value=temp1(9)
thisform.spinner5.value=temp1(10)
thisform.text6.value=temp1(11)
thisform.spinner6.value=temp1(12)
thisform.text7.value=temp1(13)
thisform.spinner7.value=temp1(14)
THISFORM.refresh
messagebox(" 數(shù)據(jù)讀取成功! ",0+64," 提示信息")
endif
endif
“讀取數(shù)據(jù)”表單的“路徑選擇”按鈕單擊事件代碼如下:
if curdir()<>"mainp"+"\DATA\"
CD &MAINP.+"\DATA\"
endif
cdir=getfile(" 數(shù)據(jù)文件 :dbf"," 數(shù)據(jù)文件名 :","",0," 選擇文
件 ")
if empty(cdir)
thisform.command3.enabled=.f.
thisform.command2.setfocus
else
thisform.text1.value=cdir
thisform.command3.enabled=.t.
thisform.command3.setfocus
endif
cd ..
thisform.refresh
2.4系統(tǒng)界面設(shè)計(jì)與使用方法
為了更好地記錄實(shí)驗(yàn)進(jìn)行的過(guò)程,系統(tǒng)中也設(shè)計(jì)了實(shí)驗(yàn) 選項(xiàng)表單,可以進(jìn)行實(shí)驗(yàn)者、室溫、氣壓等信息的輸入,這 樣有助于后邊生成詳細(xì)的實(shí)驗(yàn)報(bào)告單。在以上工作都完成后, 即可通過(guò)“打印結(jié)果”按鈕打印出實(shí)驗(yàn)報(bào)告單。
3結(jié)語(yǔ)
本系統(tǒng)是為物化實(shí)驗(yàn)“電導(dǎo)法測(cè)定乙酸解離度”量身定 做的,可與實(shí)驗(yàn)過(guò)程緊密配合,并可對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行快捷精 確處理,而且能迅速生成專業(yè)化的實(shí)驗(yàn)報(bào)告單,不用人工進(jìn) 行任何工作就可直接得到實(shí)驗(yàn)結(jié)果。
實(shí)驗(yàn)過(guò)程中所得數(shù)據(jù)大多為科學(xué)計(jì)數(shù)法表示的數(shù)字,難 以輸入,而本系統(tǒng)采用底數(shù)、指數(shù)分別輸入的方式,因而使得 數(shù)據(jù)的輸入變得簡(jiǎn)單有趣。
利用本系統(tǒng),在整個(gè)實(shí)驗(yàn)過(guò)程中,只需要輸入實(shí)驗(yàn)中測(cè) 定的電導(dǎo)率數(shù)據(jù),就可以得到最終的實(shí)驗(yàn)結(jié)果并生成實(shí)驗(yàn)報(bào) 告單,整個(gè)處理過(guò)程不需要任何人工干預(yù),簡(jiǎn)單快捷。實(shí)驗(yàn) 完成后,可快速得到專業(yè)詳盡的實(shí)驗(yàn)報(bào)告單,實(shí)驗(yàn)報(bào)告單包含 實(shí)驗(yàn)時(shí)間、氣壓、所用儀器編號(hào)、實(shí)驗(yàn)人員等信息,同時(shí)省略 了對(duì)實(shí)驗(yàn)數(shù)據(jù)的處理。
20210916_6142cbd91a354__電導(dǎo)法測(cè)定乙酸解離常數(shù)實(shí)驗(yàn)數(shù)據(jù)處理軟件設(shè)計(jì)