專利名稱:一種粉末圖的指標(biāo)化方法
技術(shù)領(lǐng)域:
本發(fā)明屬于物質(zhì)結(jié)構(gòu)研究領(lǐng)域,尤其是材料研究、礦物研究、X射線物相分析、晶體定向等研究領(lǐng)域。
背景技術(shù):
在應(yīng)用多晶衍射法測(cè)定晶體結(jié)構(gòu),以及晶體定向等多方面,粉末圖的指標(biāo)化是一個(gè)十分重要,也是一個(gè)十分棘手的問(wèn)題,傳統(tǒng)的粉末圖的指標(biāo)化大多采用人工計(jì)算,也有部分衍射儀配有指標(biāo)化程序,但通常只能局限在DOS操作系統(tǒng)下,并且程序無(wú)法安裝到別的電腦上使用,給工作帶來(lái)很多不便。而隨著計(jì)算機(jī)技術(shù)的發(fā)展,采用計(jì)算機(jī)對(duì)粉末圖進(jìn)行指標(biāo)化是趨勢(shì)也是必然。
發(fā)明內(nèi)容
本發(fā)明的目的就在于公開一種用計(jì)算機(jī)VB語(yǔ)言將粉末圖指標(biāo)化的方法,該方法可以在獨(dú)立的電腦上使用,也可直接安裝于粉末衍射儀,通過(guò)運(yùn)行,直接將指標(biāo)化結(jié)果輸出,結(jié)果可以用打印機(jī)打印出來(lái),也可用文檔保存,并且還設(shè)置了滾動(dòng)條,便于查看。其技術(shù)方案如下三斜晶體的面間距公式最有代表性,而其它晶系的晶體其面間距公式是由三斜晶體的面間距公式轉(zhuǎn)化而來(lái)。故只要 這里h、k、l為晶面指數(shù),a、b、c、α、β、γ為單胞參數(shù),d為晶面間距。由于通常h、k、l這些晶面指數(shù)均為整數(shù)(且通常不會(huì)太大,本程序給定其足夠大范圍為-20~20之間)。故當(dāng)h、k、l不同時(shí)為零時(shí),每一組h、k、l都能得到對(duì)應(yīng)的晶面間距,只要當(dāng)此時(shí)的晶面間距與實(shí)際測(cè)得的晶面間距相比較足夠接近時(shí)(可以自由選擇,一般要求低端控制在0.05,高端控制在0.02),所得的h、k、l即為該測(cè)得的晶面間距的晶面。同時(shí),由于要考慮到消光條件,故必須將滿足消光條件的h、k、l剔除,本程序采用下拉菜單將7種不同點(diǎn)陣已設(shè)置好(表1),只需下拉菜單選中即可。
表1幾種基本點(diǎn)陣的系統(tǒng)消光規(guī)則
我們采用單晶法確定了晶體的單胞參數(shù)之后,就可以對(duì)粉末圖進(jìn)行指標(biāo)化。整個(gè)程序設(shè)計(jì)的流程圖如圖1,包含登錄程序、參數(shù)輸入、計(jì)算處理、結(jié)果的顯示輸出以及程序的退出五個(gè)部分。
采用本程序?qū)Σ煌档木w進(jìn)行粉末圖指標(biāo)化,均能得到很好的效果。
本程序采用VB語(yǔ)言在Windows操作系統(tǒng)下工作,其操作方法以LiNbO3晶體為例,其過(guò)程是(1)登錄程序,只要打開程序,即會(huì)出現(xiàn)如圖2的界面;(2)按要求輸入密碼,即可進(jìn)入如圖3的界面,登錄成功,如果密碼有誤則登錄失??;(3)按要求輸入LiNbO3晶體相應(yīng)的參數(shù)(在輸入?yún)?shù)時(shí),可采用按Tab鍵來(lái)跳到下一輸入?yún)^(qū)域);(4)參數(shù)輸完后,按確認(rèn)鍵即可進(jìn)行運(yùn)算處理并輸出結(jié)果,結(jié)果可以在文本上顯示,圖4就是計(jì)算機(jī)運(yùn)行的結(jié)果;(5)圖4結(jié)果可以用打印機(jī)打印出來(lái),也可用文檔保存。指標(biāo)化完一組后,可以按返回鍵,重新開始新的一組計(jì)算;(6)指標(biāo)化結(jié)束以后只需按退出鍵即可(見圖5)。
本發(fā)明的程序可分為以下三大模塊
1、登錄設(shè)計(jì)<pre listing-type="program-listing">Public LoginSucceeded As BooleanPrivate Sub Form_load() Dim topCorner As Integer Dim leftCorner As Integer topCorner=(Screen.Height-Pt1.Height)\2 leftCorner=(Screen.Width-Pt1.Width)\2 Pt1.Move leftCorner,topCornerEnd SubPrivate Sub ExitButton Click() LoginSucceeded=False If MsgBox(″是否確定退出系統(tǒng)?″,36)=6 Then Unload Pt1 End End IfEnd SubPrivate Sub OkButton_Click() sysPath=App.Path Dim Password As String Password=″*******″ If PassText.Text=Password Then Unload Pt1 LoginSucceeded=True FormMai n.Show FormMain.Refresh Else MsgBox″輸入的密碼有誤,請(qǐng)重新輸入?!濉 ?PassText.SetFocus PassText.SelStart=0<!-- SIPO <DP n="3"> --><dp n="d3"/> PassText.SelLength=Len(PassText.Text) End IfEnd SubPrivate Sub PassText_KeyPress(KeyAsciiAs Integer) If KeyAscii=13 Then OkButton ClickEnd Sub</pre>2、相關(guān)參數(shù)的輸入及計(jì)算處理,程序主控模塊Private Sub Cell_KeyPress(Index As Integer,KeyAscii As Integer)If KeyAscii<Asc(″0″)Or KeyAscii>Asc(″9″)ThenKeyAscii=0MsgBox″請(qǐng)輸入數(shù)字!″End IfEnd SubPrivate Sub D0Number_KeyPress(Index As Integer,KeyAscii As Integer)If KeyAscii<Asc(″0″)Or KeyAscii>Asc(″9″)ThenKeyAscii=0MsgBox″請(qǐng)輸入數(shù)字!″End IfEnd SubPrivate Sub Form_load()With ComboSelectDim N As IntegerFor N=0 To 6.AddItem N+1,NNext NFor N=0 To 6Select Case NCase 0.List(0)=″簡(jiǎn)單點(diǎn)陣″Case 1
.List(1)=″體心點(diǎn)陣″Case 2.List(2)=″C面帶心點(diǎn)陣″Case 3.List(3)=″B面帶心點(diǎn)陣″Case 4.List(4)=″A面帶心點(diǎn)陣″Case 5.List(5)=″面帶心點(diǎn)陣″Case 6.List(6)=″三方點(diǎn)陣″End SelectNext NEnd WithComboSelect.Text=″″dianZenKind=″″h=0k=0l=0a=0b=0c=0af=0bt=0gm=0d=0d0Num=0For N=0 To 19d0Val(N)=0Next N
End SubPrivate Sub EditButton_Click ()Screen.MousePointer=11Dim d1,d2,d3,d4,d5,d11,d12,d21,d22,d31,d32,V As DoubleDim kind,Num,Out As IntegerDim jToh,d0 As DoublejToh=pi/180Out=0For Num=0 To 5If (Cell(Num).Text<>″″)And(Cell(Num).Text<>0)ThenOut=2ElseOut=1End IfNext NumIf(ComboSelect.Text<>″″)And(jdtxt.Text<>″″)And(D0Number(0).Text<>″″)And(Out=2)ThenDim txtstring As StringDim cha As DoublefileName=ProjPath &″\result.txt″Set txt=fso.OpenTextFile(fileName,F(xiàn)orWriting)a=CDbl(Cell(0).Text)b=CDbl(Cell(1).Text)c=CDbl(Cell(2).Text)af=CDbl(Cell(3).Text)*jTohbt=CDbl(Cell(4).Text)*jTohgm=CDbl(Cell(5).Text)*jTohd0Num=CInt(D0Number(0).Text)jd=CDbl(jdtxt.Text)dianZenKind=ComboSelect.Text
d4=(1+2*Cos(af)*Cos(bt)*Cos(gm)-Cos(af)*Cos(af)-Cos(bt)*Cos(bt)-Cos(gm)*Cos(gm))V=CDbl(Format((a*b*c*Sqr(d4)),″0000000.0000″))Select Case ComboSelect.TextCase″簡(jiǎn)單點(diǎn)陣″kind=0Case″體心點(diǎn)陣″kind=1Case″C面帶心點(diǎn)陣″kind=2Case″B面帶心點(diǎn)陣"kind=3Case″A面帶心點(diǎn)陣″kind=4Case″面帶心點(diǎn)陣″kind=5Case″三方點(diǎn)陣″kind=6End SelecttxtLineNum=0txt.WriteBlankLines(1)txt.WriteLine(″指標(biāo)化結(jié)果″)txt.WriteBlankLines(1)txt.WriteLine″********************************************************************″txt.WriteBlankLines(1)txt.WriteLine(″晶體名稱″& NameText &″指標(biāo)化精度″&
jdtxt.Text &″V=″& V)txt.WriteLine(″單胞參數(shù)a=″& Cell(0).Text &″b=″&
Cell(1).Text &″c=″& Cell(2).Text &″
txtLineNum=txtLineNum+7Dim M As IntegerM=0For M=0 To (d0Num-1)d0Val(M)=CDbl(ValueDO(M).Text)Next MFor Num=0 To(d0Num-1)d0=d0Val(Num)txt.WriteBlankLines(1)txt.WriteLine″-----------當(dāng)d0=″& d0 &″時(shí)------------------"For h=-20 To 20For k=-20 To 20For l=-20 To 20If(h<>0)Or(k<>0)Or(l<>0)Thend11=(h/a+Cos(af)*Cos(gm)*l/c+Cos(af)*Cos(bt) *k/b)d12=((Cos(af)*Cos(af)*h/a)+Cos(gm)*k/b+Cos(bt)*l/c)d1=((d11-d12)*h/a)d21=((k/b+Cos(af)*Cos(bt)*h/a+Cos(bt)*Cos(gm)*l/c))d22=((Cos(bt)*Cos(bt)*k/b+Cos(gm)*h/a+Cos(af)*l/c))d2=((d21-d22)*k/b)d31=((l/c+Cos(bt)*Cos(gm)*k/b+Cos(af)*Cos(gm)*h/a))d32=((Cos(gm)*Cos(gm)*l/c+Cos(bt)*
h/a+Cos(af)*k/b))d3=((d31-d32)*l/c)d5=(Sqr(d4/(d1+d2+d3)))End Ifd=CDbl(Format(d5,″0000.0000″))cha=CDbl(Format(d-d0,″0000.0000″))txtstring=″Dcal=″& d &″H=″& h &″K=″& k &″L=″& l &″Dcal-Do=″& chaIf Abs(cha)<=j(luò)d ThenSel ect Case kindCase 0txt.WriteLine(txtstring)Case 1If((h+k+l)Mod 2)=1 Thentxt.WriteLine(txtstring)End IfCase 2If((h+k)Mod 2)=1 Thentxt.WriteLine(txtstring)End IfCase 3If((h+l)Mod 2)=1 Thentxt.WriteLine(txtstring)End IfCase 4If((k+l)Mod 2)=1 Thentxt.WriteLine (txtstring)End IfCase 5If(h Mod 2=0 & k Mod 2=0
& 1 Mod 2=0) or (h Mod 2=1 & k Mod 2=1 & 1 Mod 2=1)Thentxt.WriteLine(txtstring)End IfCase 6If((k+l-h)Mod 3)=0 Thentxt.WriteLine(txtstring)End IfCase ElseEnd SelectEnd IfNext lNext kNext htxt.WriteBlankLines(1)txt.WriteLine″-------------------------″txt.WriteBlankLines(1)txtLineNum=txtLineNum+4Next Numtxt.CloseFormMain.HideresultForm.ShowerrortxtElseMsgBox″請(qǐng)檢查是否輸入了主要參數(shù),如單胞參數(shù)、點(diǎn)陣類型、精度等!″End IfEnd SubPrivate Sub ExitButton_Click()If MsgBox(″是否確定退出系統(tǒng)?″,36)=6 ThenUnload FormMainEnd
End IfEnd SubPrivate Sub jdtxt_KeyPress(KeyAscii As Integer)If KeyAscii<Asc(″0″)Or KeyAscii>Asc(″9″)ThenKeyAscii=0MsgBox″請(qǐng)輸入數(shù)字!″End IfEnd SubPrivate Sub ValueDO_KeyPress(Index As Integer,KeyAscii As Integer)If KeyAscii<Asc(″0″)Or KeyAscii>Asc(″9″)ThenKeyAscii=0MsgBox″請(qǐng)輸入數(shù)字!″End IfEnd Sub3、結(jié)果顯示輸出<pre listing-type="program-listing">Private Sub Form load() Screen.MousePointer=1 Set txt=fso.OpenTextFile(fileName,F(xiàn)orReading) resultText.Text=txt.ReadAllEnd SubPrivate Sub Form_Unload(Cancel As Integer) txt.CloseEnd SubPrivate Sub PrintButton_Click() Dim Msg On Error GoTo ErrorHandler Printer.Print resultText.Text Printer.EndDoc Exit SubErrorHandler<!-- SIPO <DP n="11"> --><dp n="d11"/> Msg=″There was a problem printing to your printer″ MsgBox MsgEnd SubPrivate Sub ReturnButton_Click() Unload Me FormMain.ShowEnd SubPrivate Sub ExitButton_Click() If MsgBox(″是否確定退出系統(tǒng),退出系統(tǒng)后不保存結(jié)果?″,36)=6Then Unload Me Unload FormMain End End IfEnd SubPrivate Sub VScrolll_Change() resultLabel.Top=-VScrolll.ValueEnd Sub</pre>本發(fā)明的方法適用于任何點(diǎn)陣的物質(zhì),即可獨(dú)立安裝在電腦上運(yùn)行,也可安裝于粉末衍射儀上,其突出優(yōu)點(diǎn)在于適用性廣,操作方便。
圖1是本發(fā)明的方法程序設(shè)計(jì)的流程圖;圖2是進(jìn)入程序的界面圖;圖3是按要求輸入密碼的界面圖;圖4是以LiNbO3晶體為例,為R方點(diǎn)陣,計(jì)算機(jī)運(yùn)行的結(jié)果圖;圖5是指標(biāo)化結(jié)束后的界面圖;圖6是以Ca3La2(BO3)4晶體為例,為P點(diǎn)陣的結(jié)果圖;圖7是以NaNb6O15F晶體為例,為A點(diǎn)陣的結(jié)果圖;圖8是As晶體為例,為B點(diǎn)陣的結(jié)果圖;圖9是CaV2O6晶體為例,為C點(diǎn)陣的結(jié)果圖;圖10是以CsMgFeF6晶體為例,為F點(diǎn)陣的結(jié)果圖;圖11是以CoMo2S6晶體為例,為I點(diǎn)陣的結(jié)果圖。
具體實(shí)施例方式
實(shí)施例1以LiNbO3晶體為例,為R方點(diǎn)陣,結(jié)果見圖4;實(shí)施例2以Ca3La2(BO3)4晶體為例,為P點(diǎn)陣,結(jié)果見圖6;實(shí)施例3以NaNb6O15F晶體為例,為A點(diǎn)陣,結(jié)果見圖7;實(shí)施例4以As晶體為例,為B點(diǎn)陣,結(jié)果見圖8;實(shí)施例5以CaV2O6晶體為例,為C點(diǎn)陣,結(jié)果見圖9;實(shí)施例6 以CsMgFeF6晶體為例,為F點(diǎn)陣,結(jié)果見圖10;實(shí)施例7以CoMo2S6晶體為例,為I點(diǎn)陣,結(jié)果見圖11。
權(quán)利要求
1.一種粉末圖的指標(biāo)化方法,其特征在于,該方法采用計(jì)算機(jī)進(jìn)行指標(biāo)化,用計(jì)算機(jī)VB程序語(yǔ)言,在Windows操作系統(tǒng)下工作,其包括登錄、參數(shù)輸入、計(jì)算處理、結(jié)果的顯示輸出以及程序的退出幾個(gè)步驟(1)在登錄模塊的設(shè)計(jì)中采用密碼登錄,只有當(dāng)口令正確時(shí),登錄才會(huì)成功;(2)在輸入模塊中只需用鼠標(biāo)或鍵盤Tab鍵將光標(biāo)移到對(duì)應(yīng)的空格里按自己的要求靈活機(jī)動(dòng)的輸入對(duì)應(yīng)的參數(shù),同時(shí)對(duì)參數(shù)的類型也作了規(guī)定,當(dāng)輸入?yún)?shù)有誤時(shí),程序會(huì)及時(shí)給予提醒,在7種不同點(diǎn)陣的輸入設(shè)置中采用下拉式菜單,只需下拉菜單選中即可;(3)在輸入完參數(shù)后只需按確認(rèn)鍵即可進(jìn)入運(yùn)行處理階段,同時(shí)設(shè)置了返回鍵,便于及時(shí)對(duì)輸入的參數(shù)進(jìn)行修改,更方便于運(yùn)行處理;(4)對(duì)指標(biāo)化結(jié)果的處理,可將結(jié)果以文檔形式保存,同時(shí)又可直接用打印機(jī)打印輸出,方便選擇;(5)在退出部分,只需按退出鍵即可。
2.如權(quán)利要求1所述的粉末圖的指標(biāo)化方法,其特征在于該方法可以在獨(dú)立的電腦上使用,也可直接安裝于粉末衍射儀,通過(guò)運(yùn)行本發(fā)明的程序直接將指標(biāo)化結(jié)果輸出,其結(jié)果既可采用文檔保存,也可用打印機(jī)輸出,并且還設(shè)置了滾動(dòng)條,便于查看。
3.一種權(quán)利要求1的粉末圖的指標(biāo)化方法的用途,其特征在于該方法適合于任何點(diǎn)陣的物質(zhì),用于物質(zhì)結(jié)構(gòu)研究,尤其是材料研究、礦物研究、X射線物相分析、晶體定向等研究領(lǐng)域。
全文摘要
本發(fā)明涉及一種利用計(jì)算機(jī)VB語(yǔ)言將粉末圖指標(biāo)化方法編成程序,在計(jì)算機(jī)上運(yùn)行,減少了大量的計(jì)算工作,只需輸入d0和相關(guān)參數(shù)就可得到對(duì)應(yīng)的晶面指數(shù)(HKL)。該方法可應(yīng)用于物質(zhì)結(jié)構(gòu)研究領(lǐng)域,尤其是材料研究、礦物研究、X射線物相分析、晶體定向等研究領(lǐng)域。該方法適用于任何點(diǎn)陣的物質(zhì),適用性強(qiáng)。本方法在Windows操作系統(tǒng)下工作,操作方便簡(jiǎn)單。
文檔編號(hào)G01N23/20GK1508537SQ02154469
公開日2004年6月30日 申請(qǐng)日期2002年12月16日 優(yōu)先權(quán)日2002年12月16日
發(fā)明者胡祖樹, 王國(guó)富, 林州斌, 張莉珍 申請(qǐng)人:中國(guó)科學(xué)院福建物質(zhì)結(jié)構(gòu)研究所