《FOXBOT编程手册》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
FOXBOT‧編程手冊富士康.工業機器人FOXBOT編程手冊(Ver.2007.1)58
1FOXBOT‧編程手冊58
2FOXBOT‧編程手冊簡介FOXBOT的編程手冊由FOXBOT指令手冊和CypressEnable編輯器語言參考手冊組成.FOXBOT指令手冊主要用于機器人的運動控制指令;CypressEnable主要用于程序的變量命名﹑流程控制﹑子程序等。程序編輯界面是CypressEnable編輯器﹐程序中的語句語法要求應符合CypressEnable的要求。58
3FOXBOT‧編程手冊FOXBOT指令手冊58FOXBOT‧編程手冊58
4FOXBOT‧編程手冊目錄ACCEL1CURPOS1DECEL1DEFIO1DEFPOS2DELAY2DEFJNT2DIST2DRIVE3DRIVEA3FIG3GOHOME3HOME4IN4J2P5MOVE5OUT6POSRX7POSRY7POSRZ7POSX7POSY8POSZ8RESETIO8ROBOTSTOP8ROTATE9SETIO9SPEED10WAIT10附錄1058
5FOXBOT‧編程手冊ACCEL功能:指定內部加速度比例格式:ACCEL〈加速度比例>範例:ACCEL50CURPOS功能:取得目前的位置(typeP格式)格式:Positiontype變數=CURPOS說明:範例:DEFPOSlp1lp1=CURPOSMSGBOXPOSX(lp1)&chr(13)&chr(10)&_POSY(lp1)&chr(13)&chr(10)&_POSZ(lp1)&chr(13)&chr(10)&_POSRX(lp1)&chr(13)&chr(10)&_POSRY(lp1)&chr(13)&chr(10)&_POSRZ(lp1)&chr(13)&chr(10)&_FIG(lp1)DECEL功能:指定內部減速度比例格式:DECEL〈減速度比例>說明:範例:DECEL50DEFIO功能:聲明IO變數格式:DEFIO<變量名稱>=說明:通過變量名聲明指定變量作為一個IO變量 6FOXBOT‧編程手冊Notes:對于字或整型,使用MSB作為一個信號位。Byte允許數字值范圍﹐MSB端口號:開始端口地址+7Integer允許數字值范圍﹐MSB端口號:開始端口地址+15DEFPOS功能﹕聲明一個位置類型變量格式﹕DEFPOS<變量名>舉例﹕DEFPOSlpx‘聲明lpx作為位置類型變量注意﹕一個語句只能聲明一個位置變量類型相關指令poseP格式﹕DimlpxasposePDELAY功能﹕暫停程序處理,延時一個指定的周期時間,格式﹕DELAY〈Delaytime〉說明﹕程序處理停止直到暫停時間到。單位:ms舉例﹕DIMli1AsIntegerDelay100‘延時100ms(0.1s)Delayli1+10‘延時li1+10msDEFJNT功能﹕聲明一個關節類型變量格式﹕DEFJNT〈變量名〉舉例﹕DEFJNTljx‘聲明ljx作為一個關節類型變量DIST功能﹕返回兩點之間的距離格式﹕DIST(〈位置類型變量1〉,〈位置類型變量2〉)說明﹕獲得位置1和位置2之間的距離舉例﹕Dimlf1ASSingleDEFPOSlp158 7FOXBOT‧編程手冊DEFPOSlp2lp1=CURPOSlp1.x=lp2。x+10lp1。y=lp2。y+10lp1。z=lp2.z+10lp1。rx=lp2.rx+10lp1.ry=lp2.ry+10lp1.rz=lp2。r2+10lf1=DIST(lp1,lp2)‘lf1等于lp1和lp2之間的距離MSGBOXlf1DRIVE功能:執行每個軸的相對運動格式:DRIVE(〈軸號>﹐〈相對運動量>)說明﹕移動指定軸﹐移動量用角度來表示,角度的正負表示移動的方向。舉例﹕DRIVE1,30’移動1軸﹐30度。DRIVEA功能﹕執行每個軸的絕對運動格式﹕DRIVEA〈軸號〉﹐〈角度〉說明﹕移動指定軸到指定角度舉例﹕DRIVEA1,—30‘移動1軸到—30度。FIG功能﹕提取一個形態。格式﹕FIG(位置類型變量)說明:從位置數據提取一個形態舉例﹕DIMlp1ASposePli1=FIG(lp1)‘指定一個lp1的形態給li1GOHOME功能﹕移動到HOME語句定義的坐標位置58 8FOXBOT‧編程手冊格式:GOHOME說明:移動機器人使用PTP控制從當前位置到HOME位置使用HOME語句聲明一個原點位置如果沒有設置HOME﹐執行這個語句將會出現錯誤。舉例﹕GOHOME‘機器人從當前位置移動到原點位置HOME功能﹕聲明任意位置為原點位置格式﹕HOME〈位置類型變量〉說明﹕聲明任意的位置類型的坐標作為原點位置舉例﹕DimJJAsposeJSpeed30JJ。J5=20'賦值20度給JJ.J5,其他JJ的組成是0HomeJJ'設置JJ作為原點位置GoHome'移動到原點位置EndIN功能﹕IO變量值賦給指定變量格式﹕IN<變量名〉=<IO變量>舉例﹕'!TITLE”EXAMPLE_IN”Dimli1AsInteger’Declareli1andli2asIntegerDimli2AsInteger'Declaresamp1asTypeIOvariable,DEFIOsamp1=Integer,48’lengthis16(integer),startingfromIO(48)'GetthecurrentIOstatusdefinedinsamp1'intointegerformatandassignittoli1Inli1=samp1’GetIOstatusstartingfrom56intoaninteger’andassignittoli2Inli2=IO(56)'Showli1andli258 9FOXBOT‧編程手冊'(ifonlyIO(56)ison,li1=256meaning100000000’inbinarystartingfromport48andli2=1)MsgBox"li1=”&li1&Chr(13)&Chr(10)_&"li2="&li2J2P功能﹕關節類型變量轉換成位置類型變量。格式﹕J2P〈關節類型變量〉,〈位置類型變量〉舉例﹕Dimlj1asposeJDimlp1asposePlj1.j1=0lj1。j2=0lj1.j3=0lj1。j4=0lj1.j5=0lj1.j6=0J2Plj1,lp1Msgboxlp1.x&“”lp1.y&“"lp1.z_lp1。rx&“”lp1。ry&“”lp1。rzMOVE功能﹕移動機器人末端操作器到指定坐標.格式﹕MOVE<插補方法>,@<到達目標位置確認形式>,<路徑目標位置〉, 10FOXBOT‧編程手冊@0:運動位置到達目標位置就算到達。@P:實際位置到達目標位置附近即算到達,且不減速而往下一位置。@E:編碼器值核實點,實際位置到達目標位置,停下來﹐檢查編碼器的值是否在一定時間內不超出一定範圍才算到達。下面的例子都是機器人從當前位置P1經過P2經過運動(@P)P1P2P3到達P3﹕‘PROGRAMPASS_MOVE‘TAKEARMMOVEP,@P,P(2),S=10MOVEP,@0,P(3),S=10END伺服偏離(@0)P1P2P3PROGRAMEND_MOVETAKEARMMOVEL,@0,P(2),S=10MOVEL,@0,P(3),S=10END編碼器值檢查運動(@E)P1P2P3PROGRAMENCODER_MOVETAKEARMMOVEL,@E,P(2),S=10MOVEL,@0,P(3),S=10ENDOUT功能﹕給輸出IO變量賦值格式﹕OUT〈I/O變量>=<變量名〉舉例﹕’!TITLE"EXAMPLE_OUT"Dimli1AsInteger'Declareli1asInteger'Declaresamp1asTypeIOvariable,lengthis16(integer),startingfromIO(30)DEFIOsamp1=Integer,30'assign2^5—1=31(11111inHexvalue)toli1li1=2^5-1'Outputtheli1datafromtheportdeclaredinsamp1Outsamp1=li1'Delay3secondsDelay3000’assign2^5-1=31(11111inHexvalue)toli1li1=2^5—1'Outputtheli1datafromtheport3858 11FOXBOT‧編程手冊OutIO(38)=li1POSRX功能﹕獲得繞X軸旋轉的角度格式﹕POSRX<位置類型變量〉舉例﹕Dimlf1AsSingleDEFPOSlplp1=CURPOSElf1=POSRX(lp1)‘指定X軸旋轉lp1部分給lf1POSRY功能﹕獲得繞Y軸旋轉的角度格式﹕POSRY<位置類型變量〉舉例﹕Dimlf1AsSingleDEFPOSlplp1=CURPOSElf1=POSRY(lp1)‘指定Y軸旋轉lp1部分給lf1POSRZ功能﹕獲得繞Z軸旋轉的角度格式﹕POSRZ<位置類型變量>說明﹕從位置坐標系中提出繞Z軸旋轉部分舉例﹕Dimlf1AsSingleDEFPOSlplp1=CURPOSElf1=POSRZ(lp1)‘指定Z軸旋轉lp1部分給lf1POSX功能﹕獲得X坐標格式﹕POSX〈位置類型變量〉舉例﹕DIMlf1AsSingleDEFPOSlp1lf1=POSX(lp1)‘指定lp1的X部分給lf158 12FOXBOT‧編程手冊POSY功能﹕獲得Y坐標格式﹕POSY<位置類型變量〉說明﹕從位置類型或向量類型坐標值提出Y部分.舉例﹕DIMlf1AsSingleDIMlp1AsposePlf1=POSY(lp1)‘指定lp1的Y部分給lf1POSZ功能﹕獲得Z坐標格式﹕POSZ<位置類型變量〉說明﹕從位置類型變量坐標值提出Z部分.舉例﹕DIMlf1AsSingleDIMlp1AsposePlf1=POSZ(lp1)‘指定lp1的Z部分給lf1RESETIO功能﹕設置一個IO口為OFF格式﹕RESETIO 13FOXBOT‧編程手冊ROTATE功能﹕繞指定向量執行旋轉運動格式﹕ROTATE<旋轉平面>,〈角度>,〈向量>,〈速度百分比〉說明﹕旋轉平面﹕XYH,XZH,YZH;XY,XZ,YZ旋轉平面與XYH,XZH,YZH平行,向量是相對工具坐標系,旋轉平面與XY,YZ,YZ平行﹐向量是相對工件坐標系半徑應是向量在指定平面的投影距離。注意﹕機器人6軸端面與指定旋轉平行﹐才能畫圓。范例﹕’AssignJ(0)positionJ(0).J1=0J(0).J2=0J(0).J3=90J(0).J4=0J(0).J5=30J(0).J6=0’MovetoJ(0)MOVEP,J(0),S=50'AssignJ(0).J2anewpositionJ(0).J2=60’MovetonewJ(0)MOVEP,J(0),S=50’Rotate360degreeonXYplanaroundavectorV(0)describedinToolCoordinateROTATEXYH,360,V(0),S=100’AssignJ(0).J2anewpositionJ(0).J2=0'MovetonewJ(0)MOVEP,J(0),S=50EndSETIO功能﹕設置一個IO口為ON。格式﹕SETIO(IO變量)說明﹕設置指定IO為ON舉例‘!titile“example_setio”‘takearmSETIO(40)58 14FOXBOT‧編程手冊‘設置IO(24)點為ONSPEED功能﹕指定內部關節合成速度。格式﹕SPEED〈運動速度>說明﹕運動速度是內部關節合成最大速度的百分比(%)﹐范圍:0。1-100最大速度是指TCP點的最大速度舉例﹕SPEED50機器人有內部速度和外部速度。外部速度是指示教器上設定的速度內部速度是指用SPEED指令設定的值。實際速度=最大速度*內部速度*外部速度例如﹕內部速度=70%外部速度30%實際速度=最大速度*0.7*0。3舉例﹕SPEED50WAIT功能﹕程序停止直到條件滿足。格式﹕WAIT〈條件表達〉說明:程序被停止直到條件被滿足.舉例:WAITIO(10)=ON’程序等一直到IO(10)為ON[注意]l不能在指令后直接添加注釋﹐需要另取一行﹐以單引號(’)開頭。l程序編寫后不能以只讀(onlyread)的方式存儲。58 15FOXBOT‧編程手冊附錄58 16FOXBOT‧編程手冊指令說明頁數ACCEL指定內部加速度比例CURPOS取得目前的位置(typeP格式)DECEL指定內部減速度比例DEFIO宣告IO變數DEFJNT宣告Jointtype變數DEFPOS宣告Positiontype變數DELAY使程式執行延遲一段指定的時間DIST取得兩點間的距離DRIVE執行單軸之相對運動DRIVEA執行單軸之絕對運動FIG取得一typeP變數之figure值GOHOME移動至HOME指令所指定之位置(Home位置)HOME指定Home位置IN將IO埠狀態資料給一變數(此資料定義於一IO變數內)J2P關節變量轉換成位置變量MOVE移動至指定的位置OUT輸出IO狀態資料至IO埠(此IO埠定義於一IO變數內)POSRX取得一typeP變數之RX值POSRY取得一typeP變數之RY值POSRZ取得一typeP變數之RZ值POSX取得一typeP變數之X值POSY取得一typeP變數之Y值POSZ取得一typeP變數之Z值RESETIO使一個IO埠設為OFFROBOTSTOP使robot停止並SERVOOFFROTATE對某一指定向量作旋轉運動SETIO使一個IO埠設為ONSPEED指定內部速度比例WAIT根據某一狀況暫停程式執行58 17FOXBOT‧編程手冊CypressEnable編輯器語言參考手冊58FOXBOT‧編程手冊58 18FOXBOT‧編程手冊目錄CYPRESSENABLE程序編寫規范0注釋0數字0變量和常量名0變量類型1其他數據類型2控制結構3子程序和函數5ByRef&ByVal參數傳遞5文件輸入輸出6數組7腳本語言概述8函數和語句快速參考8語言參考A-Z12Abs函數12Asc函數12Atn函數13CBool函數13CDate函數13CDbl函數14Chr函數14CInt函數15CLng函數15Close語句15Const語句16Cos函數17CSng函數17CStr函數17CVar函數18Date函數18Day函數19Dim語句19Do.。.Loop語句20End語句2058 19FOXBOT‧編程手冊EOF函數21Exit語句21Exp函數22FileCopy函數22FileLen函數22Fix函數22Foreach…Next語句23For.。.Next語句23FreeFile函數24Function語句24Global語句25GoTo語句26Hour函數26If.。。Then。。。Else語句26Input#語句27Input函數28InStr函數28Int函數29IsArray函數29IsDate函數29函數IsEmpty30IsNull函數30IsNumeric函數30Kill語句31LBound函數31Lcase函數32Left函數32Len函數33Let語句33LineInput#語句34LOF函數34Log函數34函數Mid35Minute函數35Month函數36Name語句36Now函數36OnError語句3658 20FOXBOT‧編程手冊Open語句37OptionBase語句38OptionExplicit語句38Print方法39Randomize語句41ReDim語句41Rem語句41Right函數42Rnd函數43Second函數43Seek函數44Seek語句44SelectCase語句45SendKeys函數46Sin函數46Space函數47Sqr函數47Static語句48Stop語句48Str函數49StrComp函數49String函數50Sub語句50Tan函數51Time函數51Timer事件51Trim,Ltrim﹐Rtrim函數52Type語句52Ubound函數53UCase函數54Val函數54VarType54Weekday函數55While。。。Wend語句55Write#語句56Year函數5658 21FOXBOT‧編程手冊CypressEnable程序編寫規范這部分主要描述Enable語言的一般元素,包括注釋﹑語句﹑數字的不同表達形式﹑變量數據類型(包括用戶定義類型)﹑多流程程序控制結構等.注釋格式﹕’注釋內容說明﹕注釋是不可執行的代碼行﹐是為了便于編程人員閱讀程序而加入的.注釋目前只能單獨占一行﹐Enable將忽略出現在撇號或者Rem之后的任何文本。Rem和所有其他的關鍵字以及Enable的大部分名稱都是大小寫不敏感的.范例﹕MsgBoxMsg’顯示信息語句說明﹕在Enable里沒有語句結束符﹐一行可以放多條語句﹐通過“:”隔開。范例﹕x。AddPoint(25,100):x。AddPoint(0,75)等價于﹕x。AddPoint(25,100)x.AddPoint(0,75)續行符在Enable中續行符用下划線“_”表示﹐在續行符”_”前后都要有空格。范例﹕x.AddPoint_(25,100)數字CypressEnable支持三種數字表達形式﹕十進制﹑八進制和十六進制。本手冊中所使用的大部分數字用十進制表示。使用八進制或者十六進制需要分別在數字前加前綴"&O”或”&H”。變量和常量名58 22FOXBOT‧編程手冊變量和常量名必須以字母開頭﹐可以包含大寫字母A~Z﹑小寫字母a~z﹑下划線”_”和數字0~9。變量與常量名都不超過40個字符﹐也不能使用保留字(可參見本手冊語言概述部分的保留字表).但是對象成員名和屬性名不受此項規則的限制﹐可以使用保留字.變量類型Variant變體變量說明﹕與VB類似﹐當在CypressEnable中引入變量時不必在首行聲明(如果使用了optionexplicit則例外﹐可參見optionexplicit說明)。如果使用一個變量但沒有事先聲明則系統隱式聲明其為Variant類型。Variant變量也可以使用”Asvariant”以DimxAsVariant的形式顯式地聲明。Variant數據類型能夠存儲數值﹑字符串﹑日期和時間。使用Variant類型變量時不必顯式地從一個類型轉換到另外一個類型﹐數據類型轉換是自動完成的.格式﹕Dim變量名As變量類型范例﹕SubMainDimx'variantvariablex=10x=x+8x="F”&xprintx'printsF18EndSub一個Variant類型變量可以很容易地改變其類型﹐其內部表示可以使用VarType函數確定.VarType返回一個與顯式數據類型一致的值(可在語言參考A~Z參見VarType的返回值).當以Variant變量存儲數據時所使用的數據類型總是盡可能緊湊的。比如﹐如果對Variant變量賦值一個很小的整數值﹐它將以integer類型存儲﹔如果賦值的數據包含小數部分﹐將以double類型存儲。58 23FOXBOT‧編程手冊如果運用Variant變量進行數值運算﹐往往有必要確定其存儲的是否是有效的數值﹐從而避免出錯。這可由IsNumeric函數實現。變體變量和串聯字符串和數字串聯的結果是字符串.使用”&”操作符可以確保無論何種數據類型都能連接成功﹐&操作符不能對數值進行數學運算﹐它只是簡單地把它們當作字符串連接起來。可以使用IsEmpty函數確認Variant變量之前是否被賦過值。其他數據類型CypressEnable有12個數據類型﹐在下表只列出常用的几種﹕數據類型表類型類型聲明符存儲空間大小范圍類型聲明Byte1字節0to255DimBvarAsByteBoolean2個字節DimBoolvarAsBooleanString$字符串長度0to65,500字符DimStrVarAsStringInterger%2字節DimInt_VarAsIntegerLong&4字節DimLong_VarAsLongSingle!4字節DimSing_VarAsSingleDouble#8字節DimDbl_VarAsDoubleVariant按需分配DimXAsAnyUserDefinedType每個元素的尺寸之和變量范圍CypressEnable程序可由多個文件組成﹐每個文件可包含多個子程序和函數。不同的文件中變量名可以重復使用﹐變量可以是局部的﹐也可以是全局的。變量的聲明在CypressEnable中變量用DIM語句聲明。要聲明一個除variant類型之外的變量﹐必須在變量名后跟隨As說明變量類型或者附加類型聲明符。例如﹐%代表Integer類型。58 24FOXBOT‧編程手冊格式﹕Dim變量名As變量類型范例﹕SubMainDimXAsIntegerDimYAsDoubleDimName$,Age%'multipledeclarationononelineDimvEndSub控制結構CypressEnable有完整的過程控制功能﹐可用的控制結構有Do循環﹐While循環﹐For循環﹐SelectCase﹐IfThen和IfThenElse.另外﹐CypressEnable還有一個跳轉語句﹕GoTo。GoTo語句跳轉到語句所指定的標號處。范例﹕Gotolabel1……。label1:程序跳到以”Label1:”所標記的部分循環結構循環結構是指程序重復執行循環語句中的一行或多行代碼。DO循環Do。。。Loop循環允許以不確定的次數重復執行某個語句塊.Do.。。Loop的變種有DoWhile和DoLoopWhile.格式﹕DoWhile條件語句塊。。.[ExitDo]語句塊..。LoopDo語句塊。.。LoopWhile條件DoWhile在進入循環體之前檢查條件﹐當條件滿足時才執行循環體里的程序塊。DoLoopWhile在執行語句塊之后檢查條件,因此可以保証語句塊至少執行一次.While循環58 25FOXBOT‧編程手冊While…Wend循環與Do…While循環類似﹐在執行循環體之前檢查循環條件.While條件語句塊。。。WendFor。.。Next循環For…Next循環有一個循環計數變量﹐它以確定的次數執行循環體。循環計數變量在每次執行循環之后增加或減少。如果未用Step指定變化幅度計數器缺省增加1。格式﹕For變量=<開始值>To<結束值〉[Step〈增量〉]語句塊.。.NextIf和Select語句If…Then塊有單行和多行語法。If語句的條件可以是比較式或表達式﹐但它必須可以轉化為True或False。格式﹕If條件Then語句塊。.’單行語法If條件Then’多行語法語句塊...EndIfIf語句的一個變種是If.。。Then...Else語句。根據的條件不同執行不同語句塊時可使用該語句。還有一個變種是If.。。Then。.。ElseIf。.。語句﹐使用該語句有可能使代碼過長并且難于理解﹐此時可以考慮用Select語句代替。If條件Then語句塊...ElseIf條件Then語句塊.。。Else語句塊。..EndIfSelectCaseSelectCase語句測試同一個變量的值﹐根據不同的值執行不同的語句塊.該語句易于閱讀﹑理解和跟蹤﹐應該用該語句代替復雜的If.。。Then.。。ElseIf語句。格式﹕SelectCase〈表達式>Case值1語句塊58 26FOXBOT‧編程手冊Case值2語句塊Case值3語句塊。..CaseElse語句塊EndSelect子程序和函數命名習慣子程序和函數名必須以字母開頭﹐可以包含大寫字母A~Z﹑小寫字母a~z﹑下划線”_"和數字0~9.子程序和函數名不超過40個字符﹐且不能使用保留字(可參見本手冊語言概述部分的保留字表)。子程序格式﹕Sub<子程序名>語句塊EndSub函數格式﹕Function<函數名>As〈類型>語句塊〈函數名〉=〈表達式>語句塊EndFunctionByRef&ByVal參數傳遞關鍵字ByRef允許其他子程序和函數改變以參數形式傳入的變量﹔關鍵字ByVal不允許其他子程序和函數改變以參數形式傳入的變量﹐并且參數在它們的局部過程之外不能重新賦值。ByRef是Enable的默認參數傳遞方式﹐不需要顯式說明。在傳遞參數時可以用()強制進行ByVal傳遞.如下例﹕SubOnevar1,var2,(var3)參數var1,var2以ByRef方式傳遞﹐形參指向實參內存單元﹐當SubOne形參被改變時﹐58 27FOXBOT‧編程手冊實參也將改變﹔參數var3用()強制以ByVal方式傳遞﹐在函數內值的改變不會影響到函數外變量的值。FunctionR(XAsString,ByValnAsInteger)在本例中函數R接受兩個參數X和n。第二個參數n按值傳遞﹐當改變形參的值時﹐實參的值不會改變。下列樣例代碼中數組變量和用戶定義類型變量按引用傳遞參數。范例﹕SubMainDimx(5)AsIntegerDimiAsIntegerfori=0to5x(i)=inextiPrintiJoe(i),x‘()強制i進行值傳遞print”shouldbe6:”;x(2),iEndSubSubJoe(ByRefjAsInteger,ByRefy()AsInteger)print"Joe:”;j,y(2)j=345fori=0to5print"i:";i;"y(i):";y(i)nextiy(2)=3*y(2)EndSub文件輸入輸出Enable支持順序文件和二進制文件I/O.適用于文件訪問的函數和語句有﹕EOF,FileCopy,FileLen,Seek,Open,Close,Input,LineInput,Print和Write’FileI/OExamplesSubMainOpen”TESTFILE”ForInputAs#1’Openfile.DoWhileNotEOF(1)’Loopuntilendoffile.LineInput#1,TextLine’Readlineintovariable.PrintTextLine'PrinttoDebugwindow.LoopClose#1'Closefile.EndSubSubFileIO_Example()DimMsg'Declarevariable。CallMake3Files()'Createdatafiles。Msg=”Severaltestfileshavebeencreatedonyourdisk。"Msg=Msg&”ChooseOKtoremovethetestfiles.”MsgBoxMsg58 28FOXBOT‧編程手冊ForI=1To3Kill”TEST"&I'Removedatafilesfromdisk.NextIEndSubSubMake3Files()DimI,FNum,FName'Declarevariables.ForI=1To3FNum=FreeFile'Determinenextfilenumber。FName=”TEST"&FNumOpenFNameForOutputAsFNum’Openfile.Print#I,”Thisistest#”&I’Writestringtofile。Print#I,”Hereisanother";”line”;INextIClose’Closeallfiles.EndSub數組CypressEnable支持一維和多維數組.數組可以使用相同的名稱代表一系列具有相同數據類型的變量﹐每個變量都有唯一的索引。數組有上下邊界。Enable為數組中的每個索引數據分配內存空間。在使用中定義數組不要不必要地過長。數組中所有的元素都有相同的數據類型。Enable支持的數組變量類型有﹕bytes,Booleans,longs,integers,singles,double,strings,variants以及用戶自定義類型。聲明固定大小數組的方法有﹕l全局數組﹐使用Dim語句在過程代碼模塊之外聲明數組﹔l局部數組﹐使用Dim語句在過程內聲明數組。CypressEnable支持動態數組。聲明數組時必須給出數組上邊界﹐并且上邊界必須是整數.范例﹕DimArrayName(10)AsIntergerDimSum(20)AsDouble創建全局數組時只須在過程之外使用Dim語句.DimCounters(12)AsIntegerDimSums(26)AsDouble58 29FOXBOT‧編程手冊在過程內聲明數組使用Static語句與使用Dim語句效果相同。StaticCounters(10)AsIntegerStaticSums(22)AsDouble第一個聲明創建一個具有11個元素的數組﹐下標從0到10.若要改變缺省的下邊界﹐可在模塊聲明區域放置一個OptionBase語句。OptionBase1另一個方法是使用To關鍵字顯式指定下邊界(-32768~32767的整數)。DimCounters(1To13)AsIntegerDimSums(100To126)AsString在前一個聲明中﹐數組Counters的下標索引從1到13﹐數組SUM的下標索引從100到126。注意﹕許多其他的Basic版本允許不事先聲明就可以使用數組﹐EnableBasic不允許這么做﹐在使用前必須聲明。循環提供了一種有效的處理數組的方法。例如﹕下例中For循環將數組所有元素初始化為5﹕StaticCounters(1To20)AsIntegerDimIAsIntegerForI=1To20Counter(I)=5NextI多維數組CypressEnable支持多維數組﹐例如下面范例在過程內聲明了一個二維數組﹕StaticMat(20,20)AsDouble可以明確聲明數組任意一維或者兩維的下邊界.StaticMat(1to10,1to10)AsDouble可以使用For循環有效處理多維數組.在下列語句中﹐多維數組的元素被賦值。DimLAsInteger,JAsIntegerStaticTestArray(1To10,1to10)AsDoubleForL=1to10ForJ=1to10TestArray(L,J)=I*10+JNextJNextL數組的維數可以多于兩維。Enable中數組的上邊界不能任意。DimArrTest(5,3,2)如果沒有在之前的代碼中使用語句OptionBase1﹐58 30FOXBOT‧編程手冊則該聲明創建的三維數組的大小為(6,4,3)。OptionBase1語句設置數組的下邊界為1﹐而不是默認的0。腳本語言概述函數和語句快速參考類型/函數/語句控制流程Goto,End,OnError,Stop,Do。。。Loop,ExitLoop,For...Next,ExitFor,If。.Then。.Else.。。EndIf,Stop,While。.。Wend,SelectCase轉換Chr,Hex,Oct,Str,CDbl,CInt,Clng,CSng,CStr,CVar,CDate,Asc,Val,Date,Fix,Int,Day,Weekday,Month,Year,Hour,Minute,Second文件I/OFileCopy,Open,Close,Print#,Kill,FreeFile,LOF,FileLen,Seek,EOF,Write#,Input,LineInput,Name,Put數學Exp,Log,Sqr,Rnd,Abs,Sgn,Atn,Cos,Sin,Tan,Int,Fix過程Function,EndFunction,Sub,EndSub,Exit,Global字符串Let,Len,InStr,Left,Mid,Asc,Chr,Right,LCase,Ucase,InStr,LTrim,RTrim,Trim,OptionCompare,Len,Space,String,StrComp變量和常數Dim,IsNull,IsNumeric,VarType,Const,IsDate,IsEmpty,IsNull,OptionExplicit,Global,Static錯誤處理OnError,Resume日期/時間Date,Now,Time,Timer數組58 31FOXBOT‧編程手冊OptionBase,OptionExplicit,Static,Dim,Global,Lbound,Ubound,Erase,ReDim其他SendKeys,Rem數據類型變量類型說明用法String$DimStr_VarAsStringInteger%DimInt_VarAsIntegerLong&DimLong_VarAsLongSingle!DimSing_VarAsSingleDouble#DimDbl_VarAsDoubleVariantDimXAsAnyBooleanDimXAsBooleanByteDimXAsByte運算符算朮運算符運算符功能用法^乘方x=y^2-負數x=—2*乘法x%=2*3/除法x=10/2Mod取余數x=yModz+加法x=2+3-減法x=6-4*算朮運算符遵從算朮優先級規則’+'or'&'可用于字符串連接運算符在表達式中的優先級操作數描述運算符運算順序()括號最高^乘冪-負號/,*除/乘mod求余+,—,&加減與=,〈〉,〈,>,〈=,>=關系58 32FOXBOT‧編程手冊not邏輯非and邏輯與or邏輯或Xor邏輯異或Eqv邏輯等關系運算符操作數功能用法<小于X〈Y<=小于等于X<=Y=等于X=Y〉=大于等于X>=Y>大于X>Y〈>不等于X<>Y邏輯運算符操作數功能用法Not邏輯非IfNot(x)And邏輯與If(x〉y)And(x〈Z)Or邏輯或if(x=y)Or(x=z)函數﹐語句﹐保留字—快速參考Abs,Access,Alias,And,AnyApp,AppActivate,Asc,Atn,AsBase,Beep,Begin,Binary,ByValCall,Case,ChDir,ChDrive,Choose,Chr,Const,Cos,CurDir,CDbl,CInt,CLng,CSng,CStr,CVar,CDate,Close,CreateObjectDate,Day,Declare,Dim,Dir,Do.。。Loop,Dialog,DDEInitiateDDEExecute,DateSerial,DateValue,DoubleElse,ElseIf,End,EndIf,EOF,Eqv,Erase,Err,ErrorExit,Exp,ExplicitFalse,FileCopy,FileLen,Fix,For,For.。.Next,Format,FunctionGet,GetAttr,GoTo,Global,GetObjectHex,Hour58 33FOXBOT‧編程手冊If..。Then..。Else。。.[EndIf],Imp,Input,InputBox,InStr,Int,Integer,Is,IsEmpty,IsNull,IsNumeric,IsDateKillLBound,LCase,Left,Len,Let,LOF,Log,Long,Loop,LTrimLineInputMid,Minute,MkDir,Mod,Month,MsgBoxName,Next,Not,NowOct,On,Open,OKButton,Object,Option,Optional,Or,OnErrorPrint,Print#,Private,PutRandomize,Rem,ReDim,RmDir,Rnd,RtrimSeek,SendKeys,Set,SetAttr,Second,Select,Shell,Sin,Sqr,Stop,Str,Sng,Single,Space,Static,Step,Stop,Str,String,Sub,StringCompTan,Text,TextBox,Time,Timer,TimeSerial,TimeVale,Then,Type,Trim,True,To,TypeUBound,UCase,Ucase,UntilVal,Variant,VarTypeWrite#,While,Weekday,Wend,WithXorYear語言參考A-ZAbs函數格式﹕Abs(數值)功能﹕返回數值的絕對值.說明﹕返回值的數據類型與參數相同﹐如果參數是字符串類型且能轉換成數字類型﹐則返回值是Double類型.如果數字參數表達式結果是NULL﹐則Abs返回Null。范例﹕SubMainDimMsg,X,YX=InputBox(”EnteraNumber:")Y=Abs(X)Msg="Thenumberyouenteredis”&XMsg=Msg+".TheAbsolutevalueof"&X&"is”&Y58 34FOXBOT‧編程手冊MsgBoxMsg’DisplayMessage.EndSubAsc函數格式﹕Asc(str)功能﹕返回str字符串中第一個字符的ASCII值。范例﹕SubMain()DimI,Msg'Declarevariables.ForI=Asc(”A”)ToAsc("Z")'FromAthroughZ。Msg=Msg&Chr(I)'Createastring.NextIMsgBoxMsg’Displayresults.EndSubAtn函數格式﹕Atn(rad)功能﹕返回數字的反正切值.說明﹕參數rad可以是任意的數字表達式﹐返回結果是用弧度表示的角度。范例﹕SubAtnExample()DimMsg,Pi’Declarevariables。Pi=4*Atn(1)’CalculatePi。Msg=”Piisequalto”&Str(Pi)MsgBoxMsg’Displayresults.EndSub58 35FOXBOT‧編程手冊CBool函數格式:CBool(expression)功能:將一個數據類型轉換成布爾型。Expression必須是有效的字符串或數值表達式。范例:SubMainDimA,B,CheckA=5:B=5Check=CBool(A=B)PrintCheckA=0Check=CBool(A)PrintCheckEndSubCDate函數格式﹕CDate(expression)功能﹕將任何有效表達式轉換成日期類型變量.參數expression必須是有效的字符串或數值日期表達式﹐可以表達從公元30年1月1日到公元9999年12月31日的日期時間。范例﹕SubMainDimMyDate,MDate,MTime,MSTimeMybDate=”May,29,1959”’Definedate.MDate=CDate(MybDate)'ConverttoDatedatatype。MTime=”10:32:27PM”’Definetime。MSTime=CDate(MTime)'ConverttoDatedatatype。PrintMDatePrintMSTimeEndSubCDbl函數格式﹕CDbl(expression)功能﹕將數據從一個類型轉換成double。參數Expression必須是有效的字符串或數值表達式。范例﹕SubMain()DimyAsIntegery=25555’theintegerexpressiononlyallowsfor5digitsIfVarType(y)=2ThenPrintyx=CDbl(y)’Convertstheintegervalueofytodoublevaluex=x*100000'yisnow10digitsintheformofx’58 36FOXBOT‧編程手冊PrintxEndIfEndSubChr函數格式﹕Chr(num)功能﹕返回只有一個字符的字符串﹐該字符的ASCII碼值為參數值num。范例﹕SubChrExample()DimX,Y,Msg,NLNL=Chr(10)ForX=1to2ForY=Asc(”A”)ToAsc(”Z")Msg=Msg&Chr(Y)NextYMsg=Msg&NLNextXMsgBoxMsgEndSubCInt函數格式﹕CInt(expression)功能﹕將任何有效的表達式值轉換成integer類型數據。范例﹕SubMain()DimyAsLongy=25PrintVarType(y)IfVarType(y)=3ThenPrintyx=CInt(y)’ConvertsthelongvalueofytoanintegervaluePrintxPrintVarType(x)EndIfEndSub58 37FOXBOT‧編程手冊CLng函數格式﹕CLng(expression)功能﹕將任何有效的表達式值轉換為long型數據.范例﹕SubMain()DimyAsIntegery=25000'theintegerexpressioncanonlyholdfivedigitsIfVarType(y)=2ThenPrintyx=CLng(y)’Convertstheintegervalueofxtolongvaluex=x*10000’yisnowtendigitsintheformofxPrintxEndIfEndSubClose語句格式﹕Close[[#filenumber][,[#]filenumber],,,說明﹕Close語句只有一個參數Filenumber﹐Filenumber是用Open語句打開文件時所使用的一個整數。如果Close語句沒有參數﹐則關閉所有已經打開的文件。范例﹕SubMainOpen"c:\test.txt"ForInputAs#1DoWhileNotEOF(1)MyStr=Input(10,#1)MsgBoxMyStrLoopClose#1EndSubSubMake3Files()DimI,FNum,FName'Declarevariables。ForI=1To3FNum=FreeFile'Determinenextfilenumber。FName=”TEST"&FNumOpenFNameForOutputAsFNum'Openfile。Print#I,”Thisistest#”&I’Writestringtofile。Print#I,”Hereisanother”;"line";INextIClose'Closeallfiles。EndSub58 38FOXBOT‧編程手冊Const語句格式﹕Constname=expression功能﹕定義一個常量。常量必須在使用前定義。CypressEnable中﹐在過程外或模塊級定義的常量是全局的。下面模塊級之外使用GlobalConst語法和使用Const語法是一致的.范例﹕GlobalConstHeight=14。4357ConstPI=3。14159’GlobaltoallproceduresinamoduleSubMain()Radius=10CylArea=Height*(Radius*Radius)*PIMsgBox”ThevolumeofCylinderxis”&CylAreaEndSubCos函數格式﹕Cos(rad)功能﹕返回角度的余弦值.說明﹕Rad必須用弧度表示且是一個有效的數值表達式.如果沒有指定返回值類型為single或者integer﹐Cos函數缺省返回doulbe類型值。范例﹕SubMain()DimJAsDoubleDimIAsSingle'Declarevariables。DimKAsIntegerForI=1To10’58 39FOXBOT‧編程手冊Msg=Msg&Cos(I)&",”'CosfunctioncallJ=Cos(I)PrintJK=Cos(I)PrintKNextIMsgBoxMsg'Displayresults。MsgBoxMsg1EndSubCSng函數格式﹕CSng(expression)功能﹕將任何有效表達式轉換成single類型數據。范例﹕DimyAsIntegery=25IfVarType(y)=2ThenPrintyx=CSng(y)’ConvertstheintegervalueofytoasinglevaluePrintxEndIfCStr函數格式﹕CStr(expression)功能﹕將任何有效表達式轉換為string類型數據.范例﹕SubMainDimYAsIntegerY=25PrintYIfVarType(Y)=2ThenX=CStr(Y)'convertsYToaStrX=X+"hello”'ItistocombineYwithstringsPrintXEndIfEndSubCVar函數格式﹕CVar(expression)功能﹕將任何有效表達式值轉換為variant類型值。范例﹕SubMainDimMyIntAsInteger58 40FOXBOT‧編程手冊MyInt=4534PrintMyIntMyVar=CVar(MyInt&”0.23”)’makesMyIntaVariant+0。32PrintMyVarEndSubDate函數格式﹕Date,Date()功能﹕返回當前系統日期。范例﹕SubMainx=Date()PrintDatePrintxPrint“VarType:“&VarType(Date)MyTime=”08:04:23PM”MyDate=”03/03/95"MyDate="January﹐27﹐1993"SysDate=DateMsgBoxSysdate,0,”SystemDate"MsgBoxNow,0,”Now"MsgBoxMyTime,0,"MyTime"MsgBoxSecond(MyTime)&”Seconds"MsgBoxMinute(MyTime)&”Minutes”MsgBoxHour(MyTime)&”Hours"MsgBoxDay(MyDate)&”Days”MsgBoxMonth(MyDate)&"Months”MsgBoxYear(MyDate)&”Years”'Returnssystemtimeinthesystem-definedlongtimeformat。MsgBoxFormat(Time,”ShortTime”)&"ShortTime”MsgBoxFormat(Time,"LongTime")&"LongTime"’Returnssystemdateinthesystem-definedlongdateformat.MsgBoxFormat(Date,"ShortDate”)&”ShortDate"MsgBoxFormat(Date,”LongDate")&”LongDate”MyDate=”30﹐December﹐91"'useofEuropeandateprintMydateMsgBoxMyDate,0,”MyDateInternational。。."MsgBoxDay(MyDate),0,”day”MsgBoxMonth(MyDate),0,”month”MsgBoxYear(MyDate),0,"year"MyDate=”30—Dec-91"'anotherofEuropeandateusageprintMydateMsgBoxMyDate,0,”MyDateInternational...”MsgBoxDay(MyDate),0,"day"MsgBoxMonth(MyDate),0,”month"58 41FOXBOT‧編程手冊MsgBoxYear(MyDate),0,”year"MsgBoxFormat(”Thisisit",”〉")’Returns”THISISIT".EndSubDay函數格式﹕Day(dateexpression)功能﹕返回一個與傳入的dateexpression字符串相對應的variant類型日期數據。Dateexpression可以是字符串或者任何能代表日期的表達式。相關主題﹕Month,Weekday,Hour,Second范例﹕SubMainDimMDate,MDayMDate=#May,29,1959#MDay=Day(MDate)Print"TheDaylistedisthe"&MDayEndSubDim語句格式﹕Dim變量名[(下標)][AsType][,name][AsType]]功能﹕聲明變量或者數組.目前支持的數據類型有﹕integer﹐long﹐single﹐double﹐string和variant。范例﹕SubMainDimxAsLongDimyAsIntegerDimzAssingleDimaAsdoubleDimsAsStringDimvAsVariant'ThisisthesameasDimxorDimxasanyEndSubDo.。。Loop語句格式:Do[{While|Until}條件][語句塊][ExitDo][語句塊]LoopDo[語句塊][ExitDo]58 42FOXBOT‧編程手冊[語句塊]Loop[{While|Until}條件]功能:當條件為真或者滿足時重復執行一組語句。相關主題:While,Wend范例:SubMain()DimValue,Msg’Declarevariables。DoValue=InputBox(”Enteravaluefrom5to10.")IfValue〉=5AndValue〈=10ThenExitDo’ExitDo...Loop。ElseBeep’Beepifnotinrange。EndIfLoopEndSubEnd語句格式:End[{Function|If|Sub}]功能﹕結束一個諸如子程序或函數的程序段或語句塊。相關主題:Exit,Function,If。..Then.。。Else,SelectCase,Stop范例:SubMain()DimVar1asStringVar1=”hello”MsgBox"CallingTest”TestVar1MsgBoxVar1EndSubSubTest(wvar1asstring)wvar1="goodbye"MsgBox”UseofEndStatement"End58 43FOXBOT‧編程手冊EndSubEOF函數格式:EOF(Filenumber)功能:在讀取文件時返回一個數值指示是否到達文件末尾。相關主題:Open語句范例:SubMainOpen"TESTFILE"ForInputAs#1'Openfile.DoWhileNotEOF(1)’Loopuntilendoffile.MyStr=Input(10,#1)'Gettencharacters。MsgBoxMyStrLoopClose#1'Closefile。EndSubExit語句格式:Exit{Do|For|Function|Sub}功能:退出循環或過程。相關主題:End和Stop語句范例:SubMain()DimValue,Msg'Declarevariables.DoValue=InputBox(”Enteravaluefrom5to10.”)IfValue>=5AndValue〈=10Then’Checkrange。ExitDo’ExitDo。。。Loop。ElseBeep’Beepmakesomenoise.EndIfLoopEndSubExp函數格式:Exp(num)功能:返回以自然對數e為底的指數函數值,常量e的近似值是2.71828。相關主題:Log范例:SubExpExample()'Exp(x)ise^xsoExp(1)ise^1ore.58 44FOXBOT‧編程手冊DimMsg,ValueOfE’Declarevariables.ValueOfE=Exp(1)’Calculatevalueofe.Msg=”Thevalueofeis"&ValueOfEMsgBoxMsg’Displaymessage.EndSubFileCopy函數格式:FileCopy(sourcefile,destinationfile)功能:從源文件復制文件到目的文件。參數sourcefile,destinationfile必須是有效的字符串表達式。Sourcefile是被拷貝的文件名,destinationfile是拷貝的文件名。范例:DimSourceFile,DestinationFileSourceFile=”SRCFILE"'Definesourcefilename。DestinationFile="DESTFILE"’Definetargetfilename。FileCopySourceFile,DestinationFile’Copysourcetotarget.FileLen函數格式:FileLen(filename)功能:返回以字節表示的文件長度﹐返回值類型是longinteger類型。相關主題:LOF函數范例:SubMainDimMySizeMySize=FileLen("C:\TESTFILE”)’Returnsfilelength(bytes)。PrintMySizeEndSubFix函數格式:Fix(數字)功能:返回一個數的整數部分。相關主題:Int范例:SubMainDimMySizeMySize=Fix(4。345)PrintMySizeEndSubForeach…Next語句格式:58 45FOXBOT‧編程手冊ForEachelementingroup[語句塊][ExitFor][語句塊]Next[element]功能:對于在某個集合中的每一個數組元素重復執行一組語句。如果每個循環元素都是唯一的Foreach…Next可以嵌套使用。ForEach…。Next語句不能使用用戶自定義類型的數組。范例:SubMaindimz(1to4)asdoublez(1)=1.11z(2)=2.22ForEachvInzPrintvNextvEndSubFor..。Next語句格式:For計數器=<表達式1>to〈表達式2>[step增量][語句組]Next[計數]功能:以指定的次數循環執行一個語句塊。范例:Submain()Dimx,y,zForx=1to5Fory=1to5Forz=1to5Print"Looping",z,y,xNextzNextyNextxEndSub58 46FOXBOT‧編程手冊FreeFile函數格式:FreeFile功能﹕返回一個整數值﹐代表下一個可使用于Open語句的文件句柄.相關主題:Open,Close,Write范例﹕SubMainDimMx,FileNumberForMx=1To3FileNumber=FreeFileOpen"c:\e1\TEST"&MxForOutputAs#FileNumberWrite#FileNumber,”Thisisasample.”Close#FileNumberNextMxOpen”c:\e1\test1”ForInputAs#1DoWhileNotEOF(1)MyStr=Input(10,#1)MsgBoxMyStrLoopClose#1EndSubFunction語句格式﹕Function函數[(參數)][As類型][語句][語句塊]函數名=表達式[語句塊]函數名=表達式EndFunction聲明和定義一個過程﹐該過程接收參數并返回一個指定數據類型的值。當需要傳遞可選參數列表時﹐格式如下:Sub([ByVal]變量[As類型][,ByVal]變量[Astype])…))其中可選參數ByVal指明按值傳遞方式而不是按引用傳遞(參看手冊ByRef和58 47FOXBOT‧編程手冊ByVal).可選參數Astype用來指明數據類型。有效的類型有String,Integer,Double,Long,和Varaint.相關主題:Dim,End,Exit,Sub范例:SubMainDimIasintegerForI=1to10PrintGetColor2(I)NextIEndSubFunctionGetColor2(c%)AsLongGetColor2=c%*25Ifc%〉2ThenGetColor2=255’0x0000FF–紅EndIfIfc%〉5ThenGetColor2=65280’0x00FF00–GreenEndIfIfc%〉8ThenGetColor2=16711680’0xFF0000–BlueEndIfEndFunctionGlobal語句格式:GlobalConst常量。Global語句必須位于過程代碼之外。全局變量可在程序的所有函數和子程序中使用。相關主題:Dim,Const和Type語句范例:GlobalConstHeight=14。4357ConstPI=3。14159SubMain()Radius=10CylArea=Height*(Radius*Radius)*PIMsgBox"ThevolumeofCylinderxis"&CylAreaEndSub58 48FOXBOT‧編程手冊GoTo語句格式:GoTolabel功能:無條件轉移到過程指定的標號﹐其無須返回.范例:Submain()Dimx,y,zForx=1to5Fory=1to5Forz=1to5Print"Looping",z,y,xIfy〉3ThenGoToLabel1EndIfNextzNextyNextxLabel1:EndSubHour函數格式:Hour(string)此函數返回0~23之間的整數,對應于參數string指定的日期時間中的小時數。參數String是以字符串形式描述的代表日期和時間的數字,可描述從1980年1月1日到9999年12月31日的日期時間.可參考Format函數中的范例。If.。。Then...Else語句語法1:If條件Thenthenpart[Elseelsepart]格式2:If條件Then[語句塊]ElseIf條件Then[語句塊]58 49FOXBOT‧編程手冊Else[語句塊]EndIf語法2If條件Then語句相關主題:SelectCase范例:SubIfTest'demoIf.。。Then...ElseDimmsgasStringDimnlasStringDimsomeIntasIntegernl=Chr(10)msg=”Less”someInt=4If5>someIntThenmsg=”Greater":BeepMsgBox“"&msgIf3>someIntThenmsg=”Greater"BeepElsemsg=”Less”EndIfMsgBox“"&msgIfsomeInt=1Thenmsg=”Spring”ElseIfsomeInt=2Thenmsg=”Summer"ElseIfsomeInt=3Thenmsg=”Fall”ElseIfsomeInt=4Thenmsg=”Winter”Elsemsg=”Salt”EndIfMsgBox“”&msgEndSubInput#語句格式:Input#filenumber,variablelist功能:從順序文件中讀取數據并賦值給變量。此命令有兩類參數﹕filenumber,variablelist。filenumber是Open語句中打開文件時用于標識文件的數字﹔variablelist是指用逗號分開參數列表,用于接收從文件讀取的數據。58 50FOXBOT‧編程手冊范例:DimMyString,MyNumberOpen”c:\TESTFILE”ForInputAs#1'打開文件用來輸入DoWhileNotEOF(1)'循環到文件結束Input#1,MyString,MyNumber'讀入數據到兩個變量LoopClose#1'關閉文件Input函數格式:Input(n,[#]filenumber)功能:從順序文件中讀取字符。此函數有兩個參數﹕n和filenumber。N指明從順序文件讀取的字節數﹔filenumber是Open語句中打開文件時用于標識文件的數字。范例:SubMainOpen"TESTFILE”ForInputAs#1'打開文件DoWhileNotEOF(1)’循環至文件結束。MyStr=Input(10,#1)’讀入十個字母.MsgBoxMyStrLoopClose#1’關閉文件.EndSubInStr函數格式:InStr(numbegin,string1,string2)該函數返回字符串string2第一次在字符串string1中出現的位置。參數Numbegin是必須的,用來設置在string1中搜索的起始位置﹐Numbegin必須是小于65,535的正整數。參數string1是被檢索的字符串,參數string2是要尋找的字符串。相關主題:Mid函數范例:SubMain()B$="GoodBye”A%=InStr(2,B$,"Bye”)C%=Instr(3,B$,”Bye")EndSub58 51FOXBOT‧編程手冊Int函數格式:Int(number)功能﹕取整函數,返回參數number的整數部分。相關主題:FixIsArray函數格式:IsArray(variablename)功能﹕判斷參數variablename是否是一個數組﹐返回值為boolean類型.相關主題:IsEmpty,IsNumeric,VarType,IsObject范例:SubMainDimMArray(1To5)AsInteger,MCheckMCheck=IsArray(MArray)PrintMCheckEndSubIsDate函數格式:IsDate(variant)功能:判斷variant類型參數是否可以轉換成日期類型。相關主題:IsEmpty,IsNumeric,VarType范例:SubMainDimxAsStringDimMArrayAsInteger,MCheckMArray=345x="January,1,1987"MCheck=IsDate(MArray)MChekk=IsDate(x)MArray1=CStr(MArray)MCheck1=CStr(MCheck)PrintMArray1&"isadate”&Chr(10)&MCheckPrintx&"isadate”&Chr(10)&MChekkEndSub58 52FOXBOT‧編程手冊函數IsEmpty格式:IsEmpty(variant)功能:判斷variant類型參數是否已被初始化.相關主題:IsDate,IsNull,IsNumeric,VarType范例:SubMainDimx'Emptyx=5'NotEmpty-Longx=Empty’Emptyy=x'BothEmptyMsgBox“x”&”IsEmpty:”&IsEmpty(x)EndSubIsNull函數格式:IsNull(v)功能﹕判斷variant類型參數v是否為NULL.說明﹕若v為Null﹐則返回TURE,否則返回FALSE。NULL是一個特殊值,它表示參數v不含有任何數據。這不同于零長度的空字符串。相關主題:IsDate,IsEmpty,IsNumeric,VarTypeIsNumeric函數格式:IsNumeric(v)功能:判斷參數v是否可以轉換成數值類型數據。說明﹕參數v可以是任意的variant類型﹑數值﹑日期或字符串型(如果字符串是由數字組成的).相關主題:IsDate,IsEmpty,IsNull,VarType范例:SubForm_Click()DimTestVar'Declarevariable.TestVar=InputBox(”Pleaseenteranumber,letter,orsymbol。”)IfIsNumeric(TestVar)Then'Evaluatevariable。MsgBox”Entereddataisnumeric。"‘Messageifnumber.ElseMsgBox”Entereddataisnotnumeric.”’Messageifnot.EndIfEndSub58 53FOXBOT‧編程手冊Kill語句格式:Killfilename功能:刪除參數filename指定的文件.如果要刪除一個目錄則使用RmDir語句。范例:ConstNumberOfFiles=3SubMain()DimMsg’Declarevariable.MakeFiles()'Createdatafiles。Msg="Severaltestfileshavebeencreated.Youmaysee”Msg=Msg&"thembyswitchingtasks.ChooseOKtoremovethem。”MsgBoxMsgForI=1ToNumberOfFilesKill”TEST”&I'Removedatafilesfromdisk.NextIEndSubSubMakeFiles()DimI,FNum,FName'Declarevariables。ForI=1ToNumberOfFilesFNum=FreeFile’Determinenextfilenumber。FName=”TEST"&IOpenFNameForOutputAsFNum'Openfile。Print#FNum,"Thisistest#"&I’Writestringtofile。Print#FNum,"Hereisanother”;”line”;INextIClose’Closeallfiles。EndSubLBound函數格式:LBound(array[,dimension])功能:返回指定數組中特定維數的最小可用下標值。相關主題:UBound函數范例:58 54FOXBOT‧編程手冊OptionBase1SubMainDima(10)AsDoubleMsgBox”LBound:"&LBound(a)&”UBound:”&UBound(a)DimiAsIntegerFori=0to3a(i)=2+i*3.1NextiPrinta(0),a(1),a(2),a(3)EndSubLcase函數格式:Lcase[$](string)功能:把字符串參數string中的所有字母都轉換成小寫字母。相關主題:Ucase函數范例:SubMainMyString=”〈-Trim-〉"’Initializestring.TrimString=LTrim(MyString)'TrimString="<-Trim—>".MsgBox”|”&TrimString&"|"TrimString=LCase(RTrim(MyString))’TrimString="〈-trim—〉”。MsgBox”|"&TrimString&”|”TrimString=LTrim(RTrim(MyString))'TrimString="<-Trim-〉”。MsgBox"|"&TrimString&"|"'UsingtheTrimfunctionaloneachievesthesameresult。TrimString=UCase(Trim(MyString))'TrimString="<-TRIM—>".MsgBox”|"&TrimString&”|”EndSubLeft函數格式:Left(string,num)功能:返回字符串參數string中最左邊的num個字符﹐返回值為Variant類型。Left$函數的返回值為字符串類型。范例:SubMain()DimLWord,Msg,RWord,SpcPos,UsrInp’Declarevariables.Msg=”Entertwowordsseparatedbyaspace.”UsrInp=InputBox(Msg)'Getuserinput.printUsrInpSpcPos=InStr(1,UsrInp,””)’Findspace。IfSpcPosThenLWord=Left(UsrInp,SpcPos—1)’Getleftword。58 55FOXBOT‧編程手冊print”LWord:";LWordRWord=Right(UsrInp,Len(UsrInp)—SpcPos)’Getrightword.Msg="Thefirstwordyouenteredis"&LWordMsg=Msg&"."&”Thesecondwordis”Msg=”Thefirstwordyouenteredis〈”&LWord&”>"Msg=Msg&RWord&”。”ElseMsg=”Youdidn’tentertwowords。"EndIfMsgBoxMsg’Displaymessage.MidTest=Mid("MidWordTest",4,5)PrintMidTestEndSubLen函數格式:Len(string)功能:返回字符串參數string中字符的個數。相關主題:InStr范例:SubMain()A$="CypressEnable”StrLen%=Len(A$)’thevalueofStrLenis14MsgBoxStrLen%EndSubLet語句格式:[Let]variablename=expression功能:賦值語句,把表達式的賦給變量。Let關鍵詞是可選的﹐一般很少使用。范例:SubForm_Click()DimMsg,Pi’Declarevariables.LetPi=4*Atn(1)’CalculatePi。Msg=”Piisequalto"&Str(Pi)MsgBoxMsg’Displayresults。EndSub58 56FOXBOT‧編程手冊LineInput#語句格式:LineInput#filenumber﹐name功能:從順序文件中讀入一行到一個string或者variant類型變量中。參數filenumber是Open語句中打開文件時用于標識文件的數字﹔參數name是用于保存從文件中讀入的文本的變量名。相關主題:Open范例﹕SubMainOpen"TESTFILE"ForInputAs#1’Openfile。DoWhileNotEOF(1)’Loopuntilendoffile。LineInput#1,TextLine’Readlineintovariable。PrintTextLine’PrinttoDebugwindow。LoopClose#1'Closefile。EndSubLOF函數格式:LOF(filenumber)功能:返回打開文件的以字節為單位的大小﹐參數filenumber是必需的.相關主題:FileLen范例SubMainDimFileLengthOpen”TESTFILE"ForInputAs#1FileLength=LOF(1)PrintFileLengthClose#1EndSubLog函數格式:Log(num)功能:返回參數num的自然對數,參數num必須是大于零的實數。58 57FOXBOT‧編程手冊相關主題:Exp,Sin,Cos范例:SubForm_Click()DimI,Msg,NLNL=Chr(13)&Chr(10)Msg=Exp(1)&NLForI=1to3Msg=Msg&Log(Exp(1)^I)&NLNextIMsgBoxMsgEndSub函數Mid格式﹕string=Mid(strgvar,begin,length)功能﹕返回字符串strgvar從begin開始的長度為length的子串。范例﹕SubMain()DimLWord,Msg,RWord,SpcPos,UsrInp’Declarevariables.Msg="Entertwowordsseparatedbyaspace。"UsrInp=InputBox(Msg)'Getuserinput。SpcPos=InStr(1,UsrInp,"")’Findspace.IfSpcPosThenLWord=Left(UsrInp,SpcPos—1)’Getleftword。print"LWord:”;LWordRWord=Right(UsrInp,Len(UsrInp)—SpcPos)’Getrightword。Msg=”Thefirstwordyouenteredis"&LWordMsg=Msg&”。"&"Thesecondwordis”Msg="Thefirstwordyouenteredis〈”&LWord&”〉"Msg=Msg&RWord&”。”ElseMsg="Youdidn’tentertwowords."58 58FOXBOT‧編程手冊EndIfMsgBoxMsg'Displaymessage.MidTest=Mid("MidWordTest”,4,5)PrintMidTestEndSubMinute函數格式﹕Minute(string)功能﹕返回串參數string指定的時間中的分鐘部分﹐必須為0~59之間的整數Month函數格式﹕Month(number)功能﹕返回1~12之間的整數﹐參數numbe是描述日期時間的字符串。相關主題﹕Day,Hour,Weekday,Year范例﹕SubMainMyDate="03/03/96"printMyDatex=Month(MyDate)printxEndSubName語句格式:NameoldnameAsnewname功能:從新命名一個目錄或文件名。參數oldname﹐newname是代表新舊名稱的字符串﹐可以包含路徑。相關主題:KillNow函數格式:Now功能:返回系統當前日期和時間。函數返回值是以double存儲的包含日期和時間的variant類型數據.該數據可表示100年1月1日到9999年12月31日之間的日期和時間。數據的整數部分代表日期﹐小數部分代表時間.范例:SubMain()DimToday58 59FOXBOT‧編程手冊Today=NowEndSubOnError語句格式:OnError{GoToline|ResumeNext|GoTo0}功能:使能錯誤處理路徑并指定錯誤處理路徑的語句標號。參數line指語句標號﹐語句標號必須存在﹐否則將產生錯誤。范例:SubMainOnErrorGoTodudeDimxasobjectx。draw'Objectnotsetjpe’Undefinedfunctioncallprint1/0'DivisionbyzeroErr。Raise6'Generatean”Overflow”errorMsgBox”Back"MsgBox"Jack"ExitSubdude:MsgBox"HELLO”PrintErr.Number,Err。DescriptionResumeNextMsgBox"Shouldnotgethere!"MsgBox"What?”EndSub生成錯誤的語法為:Err.RaisexOpen語句格式:Openfilename$[Formode][Accessaccess]As[#]filenumber功能:打開文件進行輸入輸出操作。在對文件進行任何I/O操作之前必須打開該文件。OPEN語句參數有﹕filename﹕要打開的文件名字或路徑﹔mode﹕指定文件打開模式的保留字﹐打開模式有Append,Binary,Input,Output。如果filename對應的文件不存在,以Append,Binary或Output模式打開文件可以創建該文件﹔access﹕指定在打開文件上所允許執行的訪問操作的保留字﹐訪問操作有Read,Write﹔filenumber﹕處于1~255之間的整數﹐用于標識打開的文件﹐只要文件處于打開狀態﹐該數字一直和文件相關聯﹐其他文件I/O操作可以使用該數字與相應的文件進行交互。文件打開模式參數可以是下列模式保留字中的一種.Input﹕順序輸入模式﹔Output﹕順序輸出模式﹔58 60FOXBOT‧編程手冊Append﹕添加模式,此模式會把文件指針設置到文件最后位置,可用Print#或Write#語句擴展文件﹔Binary﹕二進制模式。參數mode是指定可以在已打開的文件上執行哪種操作的保留字.如果文件已經被另一個過程打開并且指定的訪問類型不被允許﹐Open操作失敗并產生一個訪問被拒絕的錯誤。參數access可以是下列訪問模式保留字中的一種﹕Read﹕以只讀方式打開文件﹔Write﹕以只寫模式打開文件﹔ReadWrite﹕以讀寫模式打開文件﹐此模式只對隨機訪問文件和二進制文件有效﹐并且文件必須以append模式打開.以下范例把數據寫入測試文件﹐然后再讀出.SubMain()Open”TESTFILE"ForOutputAs#1’Opentowritefile.userData1$=InputBox("Enteryourowntexthere")userData2$=InputBox("Entermoreofyourowntexthere”)Write#1,"ThisisatestoftheWrite#statement."Write#1,userData1$,userData2Close#1Open”TESTFILE”forInputAs#2'Opentoreadfile.DoWhileNotEOF(2)LineInput#2,FileData’Readalineofdata.PRintFileData’Constructmessage.LoopClose#2'Closeallopenfiles。MsgBox”TestingPrintStatement”’Displaymessage.Kill"TESTFILE”’Removefilefromdisk.EndSubOptionBase語句格式:OptionBasenumber功能:聲明數組下標的缺省下邊界。OptionBase語句不是必須的。如果需要使用該語句﹐則在同一模塊中只能使用一次,且必須位于聲明部分并在定義數組之前使用。參數number的值必須是0或1,缺省下標下邊界是0。使用to子句可以在dim﹐global和static語句中指定數組的上下邊界﹐這樣會更靈活.當然如果不使用to子句明確指定下界也可以使用OptionBase語句把所有數組缺省下邊界設置為1。58 61FOXBOT‧編程手冊相關主題:Dim,Global和Lbound語句范例:OptionBase1’Modulelevelstatement.SubMainDimA(),Msg,NL’Declarevariables。NL=Chr(10)’Definenewline。ReDimA(20)’Createanarray。Msg="ThelowerboundoftheAarrayis”&LBound(A)&”.”Msg=Msg&NL&”Theupperboundis”&UBound(A)&"."MsgBoxMsg’Displaymessage.EndSubOptionExplicit語句格式:OptionExplicit功能:強制顯式聲明變量。該語句在程序聲明部分使用。該語句可以包含在聲明文件中﹐或者位于所有的文件之外。如果該語句出現在文件的中間部分﹐則對編譯緩沖區的其余部分起作用。相關主題:Const和Global語句范例:OptionExplicitSubMainPrinty‘becauseyisnotexplicitlydimmedanerrorwilloccur.EndSubPrint方法格式:Print[expr,expr。.。]功能﹕輸出字符串到一個對象。范例:SubPrintExample()DimMsg,Pi'聲明變量LetPi=4*_Atn(1)'計算Pi.Msg="Piisequalto”&Str(Pi)MsgBoxMsg'顯示結果PrintPi在信息編輯窗口輸出結果EndSub58 62FOXBOT‧編程手冊Print#語句格式:Print#filenumber,[[{Spc(n)|Tab(n)}][expressionlist][{;|,}]]功能﹕向一個順序文件寫數據。Print語句描述:filenumber﹕在打開順序文件時使用在Open語句里數字﹐用于標識文件。Filenumber之前的符號#的是必需的。Spc(n)﹕可選函數﹐用于在打印輸出時插入n個空格,允許多次使用﹔Tab(n)﹕可選函數﹐用于在打印輸出時定位到第n列,允許多次使用﹔Expressionlist﹕可以寫入文件的數值和/或字符串的表達式﹔{;|,}﹕確定下一個字符輸出位置的字符。分號“﹔”指示緊接最后一個字符輸出下一個字符﹔逗號指示在下一個輸出區域的起始處輸出下一個字符。每隔14列是一個輸出區域。如果沒有兩個字符都沒有指定﹐則下一個字符在下一行輸出.如果省略Expressionlist﹐Print#語句在文件里輸出一個空白行﹐逗號不能省略﹐因為Print#將數據映象寫入到文件中﹐必須分割數據以保証正確輸出。如果用逗號作為分割符﹐Print#在文件的輸出區域將以空格代替。Print#語句variant類型數據寫入文件的方式與寫入任何其他數據類型一樣。但也有一些例外:如果variant變量的實際值為空,則Print#不會向文件中寫入任何數據項﹔如果variant變量的實際值為Null,則Print#將向文件中寫入#NULL#﹔如果variant變量的實際值為日期類型,則Print#將向中寫入在WIN.INI文件中定義的簡短日期格式的日期﹐如果日期或時間部分丟失或為零﹐則Print#僅將提供的部分寫入文件.下面是一個將文件寫入測試文件的范例:范例:SubMainDimI,FNum,FName’聲明變量。ForI=1To3FNum=FreeFile’定義下一個文件號碼。58 63FOXBOT‧編程手冊FName="TEST"&FNumOpenFNameForOutputAsFNum'打開文件。Print#I,"Thisistest#”&I’將字符串寫入文件。Print#I,"Hereisanother”;"line";INextIClose’關閉所有文件.EndSub下面的范例是將數據寫入測試文件并讀取﹕SubMain()DimFileData,Msg,NL’聲明變量。NL=Chr(10)'定義換行。Open"TESTFILE”ForOutputAs#1'打開寫入文件。Print#2,"ThisisatestofthePrint#statement."Print#2,'輸出空格線到文件。Print#2,”Zone1",”Zone2"'在兩個輸出區域之間輸出.Print#2,"Withnospacebetween";"."’兩個字符串一起輸出。CloseOpen"TESTFILE”forInputAs#2'打開并讀出文件。DoWhileNotEOF(2)LineInput#2,FileData’讀出一行數據。Msg=Msg&FileData&NL'創建信息。MsgBoxMsgLoopClose'關閉所有文件.MsgBox"TestingPrintStatement”’顯示信息。Kill”TESTFILE"’將文件從盤中移出.EndSubRandomize語句格式:Randomize[number]功能﹕初始化隨機數發生器.說明﹕Randomize語句有一個可選參數number﹐該參數可以是任何有效的數字,用來初始化隨機數發生器。如果省略該參數,則使用Timer函數的返回值作為缺省的隨機數發生器的種子。范例:SubMainDimMValueRandomize’初試化隨機數值發生器.MValue=Int((6*Rnd)+1)PrintMValueEndSubReDim語句58 64FOXBOT‧編程手冊格式:ReDimvarname(subscripts)[AsType][,varname(subscripts)]功能﹕聲明動態數組并重新分配存儲空間。ReDim語句用于確定或重新確定已經用帶空括號聲明的動態數組的尺寸。可以使用ReDim語句反復地改變一個數組中元素的個數,但不要改變數組的維數或者元素的類型.范例:SubMainDimTestArray()AsIntegerDimIReDimTestArray(10)ForI=1To10TestArray(I)=I+10PrintTestArray(I)NextIEndSubRem語句格式:Remremark‘remark功能﹕在程序中的添加注釋.參數remark是添加在代碼里的說明性注釋。范例:RemThisisaremarkSubMain()DimAnswer,Msg'聲明變量。DoAnswer=InputBox("Enteravaluefrom1to3.”)Answer=2IfAnswer>=1AndAnswer<=3Then'檢查范圍.ExitDo’退出循環.ElseBeep'如果不在范圍發出警告音。EndIfLoopMsgBox"Youenteredavalueintheproperrange。”EndSubRight函數格式:Right(stringexpression,n)功能﹕返回字符串stringexpression最右邊n個字符。說明﹕參數n是將返回的字符數目,必須是longinteger類型數據.相關主題:Len,Left,Mid函數。范例:58 65FOXBOT‧編程手冊’這個范例用正確的函數將用戶輸入的兩個字符中的第一個返回SubMain()DimLWord,Msg,RWord,SpcPos,UsrInp'聲明變量.Msg=”Entertwowordsseparatedbyaspace。”UsrInp=InputBox(Msg)’用戶輸入。printUsrInpSpcPos=InStr(1,UsrInp,"")’尋找位置。IfSpcPosThenLWord=Left(UsrInp,SpcPos—1)’得到左邊字符。print”LWord:”;LWordRWord=Right(UsrInp,Len(UsrInp)—SpcPos)’得到右邊字符.Msg=”Thefirstwordyouenteredis”&LWordMsg=Msg&”。"&"Thesecondwordis"Msg="Thefirstwordyouenteredis<"&LWord&">"Msg=Msg&RWord&".”ElseMsg="Youdidn’tentertwowords.”EndIfMsgBoxMsg'顯示信息。EndSubRnd函數格式:Rnd(number)功能﹕生成一個隨機數.說明﹕參數number必須是有效的數值表達式.范例:'這個范例用Rnd函數用1—6之間隨機發生的數字來模仿兩個滾動的骰子.每次程序都運行SubMain()DimDice1,Dice2,Msg'聲明變量.Dice1=CInt(6*Rnd()+1)'產生第一個骰子數值。Dice2=CInt(6*Rnd()+1)’產生第二個骰子數值.Msg=”Yourolleda”&Dice1Msg=Msg&"anda"&Dice2Msg=Msg&"foratotalof"Msg=Msg&Str(Dice1+Dice2)&”."MsgBoxMsg’顯示信息。EndSubSecond函數格式:Second(number)功能﹕返回參數number表示的時間中的秒數。說明﹕參數number必須是一個有效的數值表達式。58 66FOXBOT‧編程手冊相關主題:Day,Hour,Minute,Now范例:'格式函數范例'這個范例展示了格式函數在定義命名和用戶定義格式的數值的不同用法’數據用分隔符(/),’時間用分隔符(:),AM/PM字面上、實際上的版本輸出顯示依靠于本地代碼運行設置的系統'如果時間和日期在變化的外部環境中顯示,則在現場代碼中采用短的時間和短的日期格式'如果被運行代碼顯示,采用不同于現場代碼的短時間和短日期格式。'我的時間和我的日期顯示在變化的環境中,用當前短時間和短日期的系統設置SubMainMyTime="08:04:23PM”MyDate="03/03/95”MyDate=”January27,1993"MsgBoxNowMsgBoxMyTimeMsgBoxSecond(MyTime)&"Seconds”MsgBoxMinute(MyTime)&”Minutes"MsgBoxHour(MyTime)&"Hours"MsgBoxDay(MyDate)&"Days”MsgBoxMonth(MyDate)&"Months”MsgBoxYear(MyDate)&”Years"’返回當前系統時間.MsgBoxFormat(Time,"ShortTime”)MyStr=Format(Time,"LongTime")’Returnssystemdateinthesystem—definedlongdateformat.MsgBoxFormat(Date,"ShortDate")MsgBoxFormat(Date,”LongDate”)’這部分不被支持MsgBoxFormat(MyTime,”h:n:s”)’返回"17:4:23"。MsgBoxFormat(MyTime,”hh:nn:ss")'返回”05:04:23”。MsgBoxFormat(MyDate,”dddd,mmmdyyyy”)’如果格式不被支持,返回一個字符串MsgBoxFormat(23)'返回"23”。’用戶定義格式.MsgBoxFormat(5459.4,”##,##0.00")'返回"5,459。40”。MsgBoxFormat(334.9,"###0。00")'返回”334。90".MsgBoxFormat(5,"0.00%")'返回”500。00%"。MsgBoxFormat("HELLO",”<")’返回"hello".MsgBoxFormat(”Thisisit",">")’返回"THISISIT"。EndSubSeek函數格式:Seek(filenumber)說明﹕參數filenumber58 67FOXBOT‧編程手冊是使用在Open語句的參數且必須是一個有效的數值表達式。Seek返回下一個操作將要發生的以字節數表示的位置.文件中第一個字節是位置1。相關主題:Open范例:SubMainOpen"TESTFILE"ForInputAs#1’打開要讀的文件。Fori=1To24Step3’循環直到文件結束.Seek#1,i’尋找字節位置MyChar=Input(1,#1)'讀下一個數據特征。PrintMyChar'輸出數據特征NextiClose#1’關閉文件。EndSubSeek語句格式:Seekfilenumber,position說明﹕參數filenumber是使用在Open語句的參數且必須是一個有效的數值表達式。參數position指出下一個讀或寫將要發生的位置.CypressEnable位置是相對于文件開頭字節位置。Seek語句設定文件中下一個讀或寫操作發生的位置。相關主題:Open范例:SubMainOpen”TESTFILE"ForInputAs#1'Openfileforreading.Fori=1To24Step3’Loopuntilendoffile。Seek#1,i'SeektobytepositionMyChar=Input(1,#1)’Readnextcharacterofdata.PrintMyChar'PrintcharacterofdataNextiClose#1’Closefile.EndSubSelectCase語句根據表達式的測試值執行多個語句組中符合測試條件的語句.格式1:SelectCasetestvarCasevar1語句塊Casevar2語句塊CaseElse語句塊EndSelect58 68FOXBOT‧編程手冊格式2:SelectCaseNumber'EvaluateNumber.Case1To5’包含數字1—5。…’ThefollowingistheonlyCaseclausethatevaluatestoTrue。Case6,7,8'6-8之間的數字。…Case9To10'數字9或10.…CaseElse'其它數值。…EndSelect相關主題:If.。.Then。。.Else范例:’Thistestshowsnestedselectstatementsandifuncommented,'theexitforstatementSubTest()Forx=1to5printxSelectCasexCase2Print”OuterCaseTwo”Case3Print”OuterCaseThree”ExitForSelectCasexCase2Print”InnerCaseTwo"Case3Print”InnerCaseThree”ExitForCaseElse'Mustbesomethingelse.Print"InnerCaseElse:”,xEndSelectPrint”DonewithInnerSelectCase"CaseElse'Mustbesomethingelse.Print"OuterCaseElse:",xEndSelectNextxPrint”DonewithForLoop"EndSubSendKeys函數格式:SendKeys(Keys,[wait])功能﹕向活動窗口發送一個或多個擊鍵﹐就象直接在鍵盤上輸入一樣。SendKeys語句有兩個參數:第一個參數keys是發送到活動窗口的字符串﹔第二個參數wait是一個可選參數﹐58 69FOXBOT‧編程手冊如果忽略就假定其為false。如果wait為true﹐則擊鍵必須在控制返回到調用程序之前得到處理。范例:SubMain()DimI,X,Msg’聲明變量。X=Shell("Calc.exe",1)’打開系統附件計算器。ForI=1To5'建立計算循環。SendKeysI&”{+}",True'發送鍵盤動作到計算器NextI'添加I的每個數值。AppActivate"Calculator”’從新激活計算器。SendKeys”%{F4}",True’Alt+F4關閉計算器。EndSubSin函數格式:Sin(rad)功能﹕計算并返回弧度rad的正弦值。范例:SubMain()pi=4*Atn(1)rad=90*(pi/180)x=Sin(rad)printxEndSubSpace函數格式:Space[$](number)功能﹕在print#語句中跳過指定數目的空格。說明﹕參數number表示空格的數量。范例:’ThissampleshowsthespacefunctionSubMainMsgBox”Hello"&Space(20)&”There”EndSubSqr函數格式:Sqr(num)功能﹕計算并返回數值num的平方根。說明﹕參數num必須是大于或等于零的有效數字。范例:58 70FOXBOT‧編程手冊SubForm_Click()DimMsg,Number'Declarevariables.Msg=”Enteranon-negativenumber."Number=InputBox(Msg)'Getuserinput。IfNumber<0ThenMsg="Cannotdeterminethesquarerootofanegativenumber."ElseMsg="Thesquarerootof"&Number&”is”Msg=Msg&Sqr(Number)&"。”EndIfMsgBoxMsg'Displayresults.EndSubStatic語句格式:Staticvariable功能﹕聲明變量并分配存儲空間。以Static語句聲明的變量其值在程序運行過程中始終保留。相關主題:Dim,Function,Sub范例:'此例展示了如何用關鍵詞static在程序Joe中保持變量I的值.’IfDimisusedinsteadofStatictheni’isemptywhenprintedonthesecondcallaswellasthefirst.SubMainFori=1to2Joe2NextiEndSubSubJoe(jasintegerStaticiprinti58 71FOXBOT‧編程手冊i=i+5printiEndSubStop語句格式:Stop功能﹕終止程序的執行。說明﹕Stop語句可以用在代碼中的任意位置。范例:Submain()Dimx,y,zForx=1to5Fory=1to5Forz=1to5Print”Looping",z,y,xNextzNextyStopNextxEndSubStr函數格式:Str(numericexpr)功能﹕將數字表達式numericexpr的值轉換為字符串類型。相關主題:Val范例:Submain()Dimmsga=-1msgBox"Num=”&Str(a)MsgBox"Abs(Num)="&Str(Abs(a))EndSub58 72FOXBOT‧編程手冊StrComp函數格式:StrComp(nstring1,string2,[compare])功能﹕字符串比較函數。其返回值是variant類型﹐代表兩個字符串的比較結果.范例:SubMainDimMStr1,MStr2,MCompMStr1="ABCD":MStr2="today”'Definevariables.printMStr1,MStr2MComp=StrComp(MStr1,MStr2)’Returns—1。printMCompMComp=StrComp(MStr1,MStr2)’Returns—1。printMCompMComp=StrComp(MStr2,MStr1)'Returns1.printMCompEndSubString函數格式:String(numeric,charcode)功能﹕字符串生成函數。說明﹕創建由numeric個單個字符charcode組成的字符串。Charcode代表單個字符﹐numeric是一個整數值.相關主題:Space函數范例:SubMainDimMStringMString=String(5,"*”)'Returns”*****"。MString=String(5,42)’Returns"44444”。MString=String(10,"Today”)’Returns"TTTTTTTTTT".PrintMStringEndSubSub語句格式:58 73FOXBOT‧編程手冊SubSubName[(arguments)]Dim[variable(s)][語句塊][ExitFunction]EndSub功能﹕聲明并定義一個子程序說明﹕當需要傳遞參數列表時需遵循以下格式:([ByVal]variable[Astype][,ByVal]variable[Astype])…))可選參數ByVal指明變量是按值傳遞參數﹐而不是按引用傳遞(參見本手冊“ByRefandByVal”)。可選參數Astype指明所使用的數據類型。有效的數據類型有:string,integer,double,long和variant(參見本手冊“數據類型”)。相關主題:Dim,Function范例:SubMainDimDSTAsStringDST="t1”mkdirDSTmkdir”t2”EndSubTan函數格式:Tan(angle)功能﹕計算角度angle的正切值.說明﹕參數angle必須是用弧度表示的有效角度相關主題:Atn,Cos,Sin范例:SubMain()DimMsg,Pi'聲明變量。Pi=4*Atn(1)’計算Pi。Msg=”Piisequalto”&PiMsgBoxMsg'顯示結果.x=Tan(Pi/4)MsgBoxx&”isthetangentofPi/4”EndSubTime函數格式:Time[()]功能﹕返回當前系統時間。58 74FOXBOT‧編程手冊相關主題:設置時間使用TIME$語句。范例:SubMainx=Time(Now)PrintxEndSubTimer事件格式:TimerTimer事件用來追蹤流逝的時間或者作為停止時鐘顯示在對話里。Timer的值是從午夜開始的秒數。相關主題:Hour,Minute,Now,Second范例:SubMainDimTSAsSingleDimTEAsSingleDimTELAsSingleTS=TimerMsgBox"StartingTimer”TE=TimerTT=TE—TSPrintTTEndSubTrim,Ltrim﹐Rtrim函數格式:[L|R]Trim(String)功能﹕Ltrim,Rtrim和Trim函數返回一個刪除了前導空格﹑后導空格或者同時刪除前后導空格的字符串。說明﹕Ltrim,Rtrim和Trim都返回字符串。Ltrim刪除字符串前導空格﹔Rtrim刪除字符串后導空格﹔Trim移除字符串前后導空格。范例:SubMainMyString=”〈-Trim—〉”’Initializestring.TrimString=LTrim(MyString)'TrimString=”<—Trim->”.MsgBox"|”&TrimString&"|”TrimString=LCase(RTrim(MyString))’TrimString=”<—trim-〉”.MsgBox”|”&TrimString&”|”TrimString=LTrim(RTrim(MyString))’TrimString=”<—Trim—>"。MsgBox"|"&TrimString&”|”'UsingtheTrimfunctionaloneachievesthesameresult.58 75FOXBOT‧編程手冊TrimString=UCase(Trim(MyString))'TrimString="<-TRIM—〉”。MsgBox”|”&TrimString&”|”EndSubType語句格式:Type用戶類型元素名As類型名[元素名As類型名]。..EndType功能﹕定義一個包含一個或多個元素的用戶自定義類型一旦用Type語句定義了用戶自定義類型,就可以在程序的任意位置聲明該類型的變量。可使用Dim或Static聲明用戶自定義類型變量。行號和行標號不能出現在Type…EndType語句塊中。用戶自定義類型常用于數據記錄,因為數據記錄常常由許多不同數據類型相關元素組成﹐Enable中數組不能作為用戶自定義類型的元素。范例:Typetype1aAsIntegerdAsDoublesAsStringEndTypeTypetype2aAsStringoAstype1EndTypeTypetype3bAsIntegercAstype2EndTypeDimtype2aAstype2Dimtype2bAstype2Dimtype1aAstype1Dimtype3aastype3SubForm_Click()a=5type1a。a=7472type1a.d=23。1415type1a。s="YES”type2a.a="43-fortythree"type2a.o。s="YabaDabaDoo”type3a.c.o.s="COS"type2b。a=”943-ninehundredandfortythree”58 76FOXBOT‧編程手冊type2b。o。s=”Yogi”MsgBoxtype1a.aMsgBoxtype1a.dMsgBoxtype1a。sMsgBoxtype2a。aMsgBoxtype2a.o。sMsgBoxtype2b。aMsgBoxtype2b.o。sMsgBoxtype3a。c.o.sMsgBoxaEndSubUbound函數格式:Ubound(arrayname[,dimension])功能﹕返回數組指定維數的下標上界。相關主題:Dim,Global,Lbound和optionbase范例:SubMainDima(10)AsDoubleMsgBox”LBound:”&LBound(a)&"UBound:"&UBound(a)DimiAsIntegerFori=1to3a(i)=2+iNextiPrinta(1),a(1),a(2),a(3)EndSubUCase函數格式:Ucase(String)功能﹕將參數字符串String中的所有字母轉換成大寫字母。范例:SubMainMyString=”<-Trim—〉”'Initializestring.TrimString=LTrim(MyString)’TrimString="〈—Trim-〉".MsgBox”|”&TrimString&"|"TrimString=LCase(RTrim(MyString))'TrimString="<—trim—>".MsgBox"|"&TrimString&"|”TrimString=LTrim(RTrim(MyString))'TrimString=”<—Trim—〉”。MsgBox”|"&TrimString&”|"'UsingtheTrimfunctionaloneachievesthesameresult.TrimString=UCase(Trim(MyString))’TrimString="<—TRIM-〉".MsgBox"|”&TrimString&"|"58 77FOXBOT‧編程手冊EndSubVal函數格式:Val(string)功能﹕返回有數字組成的字符串string的數字值。范例:SubmainDimMsgDimYourValAsDoubleYourVal=Val(InputBox$("Enteranumber"))Msg="Thenumberyoueneredis:”&YourValMsgBoxMsgEndSubVarType格式:VarType(varname)功能﹕返回一個標識參數varname的內部存儲方式的數值﹐參數Varname為variant類型.變量類型返回值Empty0Null1Integer2Long3Single4Double5Date/Time7String8相關主題:IsNull,IsNumeric范例:IfVarType(x)=5ThenPrint”VartypeisDouble"'DisplayvariabletypeWeekday函數格式:Weekday(date,firstdayofweek)功能﹕返回日期時間在一周中位序相關主題:Hour,Second,Minute,Day范例:SubMainx=Weekday(#5/29/1959#)PrintxEndSubWhile...Wend語句58 78FOXBOT‧編程手冊格式:Whilecondition[語句塊]Wend功能﹕while。。。Wend語句以while開始流程控制結構。Condition是任意的數值或者是可以轉化為true或者false的表達式.只有條件為“真”才執行程序語句。相關主題:Do。.。Loop語句范例:SubMainConstMax=5DimA(5)AsStringA(1)="Programmer”A(2)="Engineer”A(3)="President"A(4)=”TechSupport”A(5)=”Sales"Exchange=TrueWhileExchangeExchange=FalseForI=1ToMaxMsgBoxA(I)NextIWendEndsubWrite#語句格式:Write#filenumber[,parameterlist]說明﹕向一個順序文件寫入并格式化數據﹐該文件必須以output或者append模式打開。以逗號分隔的參數列被寫入到指定文件中。如果沒有指定參數﹐換行符將被寫入到文件中。相關主題:Open和Print#語句范例:SubMain()Open”TESTFILE”ForOutputAs#1’打開寫入文件。userData1$=InputBox(”Enteryourowntexthere")userData2$=InputBox(”Entermoreofyourowntexthere”)Write#1,”ThisisatestoftheWrite#statement.”Write#1,userData1$,userData2Close#1Open”TESTFILE"forInputAs#2’打開讀文件。DoWhileNotEOF(2)LineInput#2,FileData'讀一行數據。58 79FOXBOT‧編程手冊PRintFileData'創建信息。LoopClose#2'關閉所有打開文件.MsgBox"TestingPrintStatement"’顯示信息.Kill"TESTFILE”'從盤中移除文件.EndSubYear函數格式:Year(serial#)功能﹕返回對應于日期字符串參數serial#的年份值﹐返回的年份值處于1930~2029之間。如果參數seria#l是一個Null值,則函數返回值是Null.相關主題:Date,Date$函數/語句,Day,Hour,Month,Minute,Now,Second.范例:SubMainMyDate=”11/11/94”x=Year(MyDate)printxEndSub58說明﹕移動機器人從當前位置到指定的目標位置.對于〈位置〉﹐位置類型〈P型〉,關節類型〈J型〉可以使用。插補方法說明P(PTP)PTP(點到點)﹕運動從一個點到另一個點﹐機器人移動的路徑依賴機器人的姿態﹐不是一條直線。運動路徑可以不是一條直線LCP控制,到達目標位置的路徑是一條直線AB運動路徑是一條直線機器人手臂從一個運動到另一個運動有三種方法確定第一個運動的完成。58
此文档下载收益归作者所有