Posted on 2009-02-11 15:51
大大毛 閱讀(1324)
評(píng)論(1) 編輯 收藏 所屬分類:
400
問(wèn)題?
???現(xiàn)在有遇到一個(gè)需求,是想直接利用TN5250來(lái)實(shí)現(xiàn)400端資料的下載:
???1. 僅通過(guò)TN5250來(lái)完成,不要使用其他的元件;
???2. 匯出資料格式為T(mén)XT檔案,應(yīng)該是要能夠放到局域網(wǎng)路上;
???3. 匯出資料的動(dòng)作需要做成排程方式(例如每天匯出);
???4. 需求相當(dāng)?shù)募薄?br />
???使用TN5250NF可以直接抓400端資料到PC端,匯出成TXT/XLS等格式的文件。匯出功能實(shí)際由TN4002PC來(lái)完成,該功能使用起來(lái)非常方便。通過(guò)簡(jiǎn)單設(shè)定連線/設(shè)定參數(shù)即可實(shí)現(xiàn)資料的下載。
???如果不考慮到需要做成排程方式來(lái)自動(dòng)進(jìn)行,則完全可以以人工方式來(lái)實(shí)現(xiàn)1-2。
思考
???要做直接利用程式的功能來(lái)實(shí)現(xiàn)自動(dòng)化,首先應(yīng)先弄清楚作業(yè)的方式是怎樣,先來(lái)看看手工是怎樣下載的。
???1. 點(diǎn)選TN5250上的菜單“傳送”-> “從主電腦接收檔案”即可打開(kāi)功能畫(huà)面(圖1):

???2. 需要配置參數(shù)(圖2):

???>> 注意紅色框部分,輸出必須要設(shè)為“檔案”,而筆數(shù)=0則表示將該檔案中全部資料都DOWN,>0則表示最大下載筆數(shù)(如設(shè)為20則僅下載20筆資料)。其他部分根據(jù)需要自行配置。
???>> 檔案名稱處定義需要存放匯出檔案的名稱及路徑,如果需要在網(wǎng)路路徑上匯出文檔則必須先將網(wǎng)絡(luò)路徑映射為本地磁盤(pán)(通過(guò)“我的電腦”上右鍵“連線網(wǎng)路磁碟機(jī)”即可將一個(gè)網(wǎng)絡(luò)路徑映射成本地盤(pán)符),然後再使用,否則會(huì)提示錯(cuò)誤。
???3. 點(diǎn)選上圖的“開(kāi)始接收(R)”即可以開(kāi)始從400下載資料到PC,接收完成後會(huì)跳出訊息提示框(圖3):

???另外,還可以利用圖2上的“檔案”菜單來(lái)實(shí)現(xiàn)對(duì)參數(shù)配置的保存以及載入(Default是存成.tt0檔案)。
???通過(guò)查看保存配置後生成的快捷方式,可以發(fā)現(xiàn)其快捷方式內(nèi)容實(shí)際為(圖4):

???>> 紅色部分即為我保存的配置檔--配置檔實(shí)際是一個(gè)INI文件,可使用記事本打開(kāi)
???因此,使用“TN4002PC.EXE /f=配置檔名稱”這樣的形式即可從命令行實(shí)際對(duì)此功能的調(diào)用(先要將參數(shù)都配置好存在配置檔中)。OK,現(xiàn)在剩下就是要將這個(gè)命令行能夠被放在“計(jì)劃任務(wù)”中。
???通過(guò)手工測(cè)試可以發(fā)現(xiàn)有一些問(wèn)題還待解決:
???1. 在匯出完成後一定會(huì)有訊息框跳出(圖3),這個(gè)是相當(dāng)於MSGBOX的窗口,它會(huì)將整個(gè)程式阻塞在那裏,如果不將它消掉(回車或空格)就會(huì)造成多次處理出錯(cuò)。
???2. 配置參數(shù)時(shí)無(wú)法為匯出的TXT文檔指定一個(gè)動(dòng)態(tài)名稱,因?yàn)槭且詣?dòng)將匯出資料放在一個(gè)固定路徑下,所以每回匯出的文檔名稱都應(yīng)該有所不同,例如保存成帶日期格式。
解決方法
???因?yàn)槭切枰獎(jiǎng)討B(tài)生成匯出文檔名以及消掉作業(yè)完成後的MSGBOX訊息框,所以是必須要有程序來(lái)協(xié)助解決,程序使用VBS來(lái)實(shí)現(xiàn)(先前有想到用BAT,但是無(wú)法解決MSGBOX的問(wèn)題)。
???程式的處理方法:
???1. 利用VBS來(lái)動(dòng)態(tài)生成TTO配置文件,只要每次修改掉保存的文件名稱就好,這樣就可以每次生成的TXT都有所不同。
?????????解析保存配置的TTO檔案,提取PC_FILENAME設(shè)定,在文件名後加上處理的日期和時(shí)間(路徑/文件類型保持不變),最後再存成一個(gè)新的TTO配置檔。
???2. 利用VBS來(lái)執(zhí)行CMD命令(命令格式見(jiàn)圖4),完成對(duì)匯出功能的調(diào)用。
?????????為T(mén)N4002PC指定新生成的TTO配置檔,實(shí)現(xiàn)功能的調(diào)用。
???3. 在匯出完成後發(fā)送鍵盤(pán)指令關(guān)掉MSGBOX框。
?????????因?yàn)閂BS中看似沒(méi)法能夠直接獲取TN4002PC的窗口,所以是添加處理--在程式處理過(guò)程中每間隔一段時(shí)間就去檢查生成的TXT檔案大小是否有變化,如果沒(méi)有變化則認(rèn)定可能已匯出完成,卡在MSGBOX窗口,VBS程式就要激活MSGBOX窗口並發(fā)送鍵盤(pán)的空格。
???4. 在“計(jì)劃任務(wù)”中設(shè)置對(duì)VBS程序的調(diào)用。
?????????利用計(jì)劃任務(wù)精靈可以完成對(duì)VBS程序的調(diào)用,因?yàn)槲疫@裏設(shè)計(jì)是要將配置的TTO文件名做為參數(shù)傳給VBS程序。而XP下試過(guò)幾次都無(wú)法能在計(jì)劃任務(wù)中直接將參數(shù)傳遞過(guò)去(2003卻可以),所以就只有多做一只BAT(放置對(duì)VBS程式的傳參調(diào)用)放在計(jì)劃任務(wù)中。
BAT批處理程序(藍(lán)色即為VBS程序,紅色為保存的TTO配置檔)
start?RunVBS.vbs?C:\FGPPOLR.tto
VBS程序
VBS程序
Dim
?ws,fso
Dim
?ttoFile,tmpFile,sTmpfileName,sTxtfileName
Dim
?line,sDate
'
當(dāng)前的日期/時(shí)間
sDate?
=
?
Year
(
Now
())?
&
?
Right
(
"
0
"
&
Month
(
Now
()),
2
)?
&
?
Right
(
"
0
"
&
Day
(
Now
()),
2
)?
&
?
Right
(
"
0
"
?
&
?
Hour
(
Now
()),
2
)?
&
?
Right
(
"
0
"
?
&
?
Minute
(
Now
()),
2
)?
&
?
Right
(
"
0
"
?
&
?
Second
(
Now
()),
2
)
Set
?ws?
=
?WScript.CreateObject(
"
WScript.Shell
"
)
Set
?fso?
=
?
CreateObject
(
"
Scripting.FileSystemObject
"
)
'
新生成TTO配置檔,放在系統(tǒng)TEMP路徑中
sTmpfileName?
=
?fso.getspecialfolder(
2
)?
&
?
"
\
"
?
&
?sDate?
&
?
"
.tto
"
If
?WScript.Arguments.Count
>
0
?
Then
????
Set
?ttoFile?
=
?fso.openTextFile(WScript.Arguments(
0
),
1
,
False
)
????
Set
?tmpFile?
=
?fso.openTextFile(sTmpfileName,
2
,
True
)
????
While
?
Not
?ttoFile.AtEndOfStream
????????line?
=
?ttoFile.ReadLine()
????????
'
查找到PC_FILENAME參數(shù)設(shè)定,並在文件名上加入日期/時(shí)間
????????
If
?
InStr
(
1
,line,
"
PC_FILENAME=
"
)
=
1
?
Then
????????????
If
?
InstrRev
(line,
"
.
"
)
>
0
?
Then
????????????????line?
=
?
Mid
(line,
1
,
InstrRev
(line,
"
.
"
)
-
1
)?
&
?
"
_
"
?
&
?sDate?
&
?
Right
(line,
Len
(line)
-
InstrRev
(line,
"
.
"
)
+
1
)
????????????
Else
????????????????line?
=
?line?
&
?
"
_
"
?
&
?sDate
????????????
End
?
If
????????????sTxtfileName?
=
?
Mid
(line,
13
)
????????
End
?
If
????????tmpFile.WriteLine(line)
????
Wend
????tmpFile.close
????ttoFile.close
????
If
?
True
?
Then
????
Dim
?oExec,lastSize,newSize,blnFlag1
????blnFlag1?
=
?
False
????lastSize?
=
?
-
2
????
'
調(diào)用TN4002PC來(lái)完成匯出操作
????
Set
?oExec?
=
?ws.exec(
"
C:\TN5250NF\TN4002PC.EXE?/f=
"
?
&
?sTmpfileName)
????
Do
?
While
?oExec.Status?
=
?
0
????????WScript.Sleep?
5000
????????
If
?blnFlag1?
=
?
False
?
Then
????????????
If
?fso.FileExists(sTxtfileName)?
Then
????????????????newSize?
=
?fso.GetFile(sTxtfileName).Size
????????????????
If
?newSize?
=
?lastSize?
Then
????????????????????blnFlag1?
=
?
True
????????????????
Else
????????????????????lastSize?
=
?newSize
????????????????
End
?
If
????????????
End
?
If
????????
Else
????????????
'
如果一段時(shí)間內(nèi)匯出檔案大小無(wú)變化,則激活窗口並發(fā)送空格
????????????ws.AppActivate?
"
TN4002PC
"
?
????????????ws.SendKeys?
"
?
"
??
????????
End
?
If
????
Loop
????
End
?
If
End
?
If
Set
?ws?
=
?
Nothing
??
WScript.quit
排程執(zhí)行完後(每次都會(huì)有FDF--欄位定義和TXT--檔案內(nèi)容兩個(gè)文件生成,多次RUN出文件名會(huì)不同):
下載
??????VBS文件