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





