文件传输

E5071C

文件传输

有关样本程序的其他方面

概述

这个样本程序说明外部控制器与E5071C之间的文件传输。

这个程序读出外部控制器(或E5071C)上指定文件的数据,然后将其写入E5071C的指定文件(或外部控制器)。

参见这个程序的文件管理

在HT Basic中的样本程序(file_xfr.htb)

10 DIM Src_file$[50],Dst_file$[50],Src_size_char$[50],Inp_char$[30]

20 INTEGER Direction

30 ASSIGN @Agte507x TO 717

40 !

50 CLEAR SCREEN

60 ON ERROR GOTO Direct_select

70 Direct_select: !

80 PRINT "#### File Transfer ####"

90 PRINT " 1: E507x -> Controller"

100 PRINT " 2: Controller -> E507x"

110 PRINT ""

120 PRINT "Input 1 or 2"

130 INPUT "Number?",Inp_char$

140 Direction=IVAL(Inp_char$,10)

150 IF Direction<1 OR Direction>2 THEN Direct_select

160 OFF ERROR

170 !

180 PRINT ""

190 PRINT " Input source file name. ";

200 INPUT "Name?",Src_file$

210 PRINT ": "&Src_file$

220 !

230 IF Direction=2 THEN

240 PRINT " Input source file size. ";

250 INPUT "Size[Byte]?",Src_size_char$

260 PRINT ": "&Src_size_char$&"[Byte]"

270 END IF

280 !

290 PRINT " Input destination file name. ";

300 INPUT "Name?",Dst_file$

310 PRINT ": "&Dst_file$

320 PRINT ""

330 !

340 IF Direction=1 THEN

350 Copy_to_contr(@Agte507x,Src_file$,Dst_file$)

360 ELSE

370 Copy_to_e507x(@Agte507x,Src_file$,Src_size_char$,Dst_file$)

380 END IF

390 !

400 END

410 !=============================================

420 ! File Transfer Function (E507x -> Controller)

430 !=============================================

440 SUB Copy_to_contr(@Agte507x,Src_file$,Dst_file$)

450 DIM Img$[32],Src_size_char$[10],Buff$[9],Err_msg$[100]

460 INTEGER Max_bsize,Block_size,Err_no

470 REAL Src_size

480 !

490 ON ERROR GOTO Skip_purge

500 PURGE Dst_file$

510 Skip_purge: OFF ERROR

520 CREATE Dst_file$,1

530 ASSIGN @Dst_file TO Dst_file$

540 Max_bsize=24576 ! 24KByte

550 !

560 OUTPUT @Agte507x;"*ESE 60"

570 OUTPUT @Agte507x;"*SRE 32"

580 OUTPUT @Agte507x;"*CLS"

590 OUTPUT @Agte507x;"*OPC?"

600 ENTER @Agte507x;Buff$

610 !

620 ON INTR 7 GOTO Err

630 ENABLE INTR 7;2

640 PRINT "Now Copying: "&Src_file$&"(@E507x) -> "&Dst_file$&"(@Contro ller)"

650 OUTPUT @Agte507x;":MMEM:TRAN? """&Src_file$&""""

660 WAIT .1

670 ENTER @Agte507x USING "#,A";Buff$

680 ENTER @Agte507x USING "#,A";Digit$

690 Img$="#,"&Digit$&"A"

700 ENTER @Agte507x USING Img$;Src_size_char$

710 !

720 Src_size=VAL(Src_size_char$)

730 WHILE Src_size>0

740 IF Src_size>Max_bsize THEN

750 Block_size=Max_bsize

760 ELSE

770 Block_size=Src_size

780 END IF

790 !

800 ALLOCATE Dat$[Block_size]

810 Img$="#,"&VAL$(Block_size)&"A"

820 ENTER @Agte507x USING Img$;Dat$

830 OUTPUT @Dst_file USING Img$;Dat$

840 DEALLOCATE Dat$

850 !

860 Src_size=Src_size-Block_size

870 END WHILE

880 !

890 PRINT "Done"

900 ENTER @Agte507x USING "#,A";Buff$

910 ASSIGN @Dst_file TO *

920 !

930 GOTO Skip_error

940 Err: OFF INTR 7

950 OUTPUT @Agte507x;";:SYST:ERR?"

960 ENTER @Agte507x;Err_no,Err_msg$

970 PRINT "Error occurred!!"

980 PRINT " No:";Err_no,"Description: "&Err_msg$

990 Skip_error: OFF INTR 7

1000 SUBEND

1010 !=============================================

1020 ! File Transfer Function (Controller -> E507x)

1030 !=============================================

1040 SUB Copy_to_e507x(@Agte507x,Src_file$,Src_size_char$,Dst_file$)

1050 DIM Img$[32],Header$[10],Buff$[9],Err_msg$[100]

1060 INTEGER Max_bsize,Block_size,Err_no

1070 REAL Src_size

1080 !

1090 ON ERROR GOTO File_error

1100 ASSIGN @Src_file TO Src_file$

1110 OFF ERROR

1120 Max_bsize=24576 ! 24KByte

1130 !

1140 OUTPUT @Agte507x;"*CLS"

1150 OUTPUT @Agte507x;"*OPC?"

1160 ENTER @Agte507x;Buff$

1170 !

1180 PRINT "Now Copying: "&Src_file$&"(@Controller) -> "&Dst_file$&"(@ E507x)"

1190 Header$="#"&VAL$(LEN(Src_size_char$))&Src_size_char$

1200 OUTPUT @Agte507x;":MMEM:TRAN """&Dst_file$&""","&Header$;

1210 !

1220 Src_size=VAL(Src_size_char$)

1230 WHILE Src_size>0

1240 IF Src_size>Max_bsize THEN

1250 Block_size=Max_bsize

1260 ELSE

1270 Block_size=Src_size

1280 END IF

1290 !

1300 ALLOCATE Dat$[Block_size]

1310 Img$="#,"&VAL$(Block_size)&"A"

1320 ENTER @Src_file USING Img$;Dat$

1330 OUTPUT @Agte507x USING Img$;Dat$

1340 DEALLOCATE Dat$

1350 !

1360 Src_size=Src_size-Block_size

1370 END WHILE

1380 !

1390 OUTPUT @Agte507x;"",END

1400 ASSIGN @Src_file TO *

1410 !

1420 OUTPUT @Agte507x;";:SYST:ERR?"

1430 ENTER @Agte507x;Err_no,Err_msg$

1440 IF Err_no=0 THEN

1450 PRINT "Done"

1460 ELSE

1470 PRINT "Error occurred!!"

1480 PRINT " No:";Err_no,"Description: "&Err_msg$

1490 END IF

1500 GOTO Skip_error

1510 File_error:OFF ERROR

1520 PRINT "File name NOT found!"

1530 Skip_error:!

1540 SUBEND

说明

40行

为I/O通道分配GPIB地址。

60行到130行

如果发生错误(例如无效输入),这些行允许用户返回到输入起始行并重新输入数据,同时输入指示传输方向的数字。然后,这些行显示传输方向列表,并提示用户输入选择的数字。

80行到130行

这些行通过键入适当的数字显示传输方向列表,并提示用户选择多项中的一个。

140行到150行

将输入值转换成整数,并将其储存到方向变量。如果方向中包括无效值,可以返回到输入起始行。

180行到210行

这些行从用户输入获得用于复制的源文件名称,将其储存到Src_file$变量,并显示Src_file$值。

180行到210行

这些行从用户输入获得用于复制的源文件名称,将其储存到Src_file$变量,并显示Src_file$值。

230行到270行

如果方向值为2(从外部控制器到E5071C),这些行获得用于复制的源文件大小,将其储存到Src_size_char$,并显示Src_size_char$值。

290行到320行

这些行从用户输入获得用于复制的源文件名称,将其储存到Src_file$变量,并显示Src_file$值。

350行

如果方向值为1(从E5071C到外部控制器),这些行使用子程序Copy_to_contr将E5071C上名称为Src_file$的文件传输到外部控制器上名称为Dst_file$的文件上。

370行

如果方向值为2,这些行使用子程序Copy_to_e507x将外部控制器上名称为Src_file$的文件传输到E5071C上名称为Dst_file$的文件。

Copy_to_contr在第440到1000行出现,是将文件从E5071C传输到外部控制器的子程序,描述如下。

490行到520行

如果已经存在名为File$的文件,这些行删除该文件,并新创建一个名为File$的文件。

530行

为I/O口分配用于复制的目标文件。

540行

这行将每次传输的最大量传输数据(以字节为单位)储存到Max_bsize变量中,传输数据为24 K字节,以满足HTBasic中字符数组的大小限制。

560行到600行

当这些行出错,找不到用于复制的源文件时,这些行对系统进行配置,以发出SRQ。

620行到630行

这些行为SRQ中断设置分支目标,以启动SRQ中断。

640行到650行

这些行显示说明传输开始的消息,并执行读出E5071C上文件的数据的命令。

670行到680行

这些行读出块数据中的标题符(#),读出表示数据大小(以字节为单位)的数字(数字符号)个数,然后将其储存到Digit$变量中。

690行

这行创建Digit$中读取字符的格式。

700行

这行读取以字节为单位的数据大小,并将其储存到Src_size_char$变量。

720行

这行读取以字节为单位的数据大小,并将其储存到Src_size_char$变量。

730行到870行

这些行重复下面的程序,直到Src_size为0。

740行到780行: 如果Src_size比Max_bsize大,这些行将Max_bsize的值分配给Block_size变量(传输数据以字节为单位)。如果Src_size等于或小于Max_bsize,将Src_size的值分配给Block_size。

800行这行定义与Block_size大小相同的Dat$字符串变量,并将其储存在内存区域。

810行 这行定义与Block_size大小相同的Dat$字符串变量,并将其储存在内存区域。

820行 这行从E5071C的文件上读取数据,然后将其保存到Dat$。

830行 这行将Dat$的内容写入外部控制器的文件。

840行到860行 这些行清除Dat$的内存区域,并除去Src_size的Block_size。

890行到900行

这些行显示指示传输完成的消息,然后读取数据末尾的消息结束标志。

940行到980行

这些行定义差错处理器,处理器获取并显示发生差错的次数和消息。

Copy_to_e507x在第1040到1540行出现,它是将文件从外部控制器传输到E5071C的子程序,描述如下。

1090行到1110行

为I/O口分配用于复制的目标文件。

1120行

这行将每次传输的最大数量(24 K字节)传输数据(以字节为单位)储存到Max_bsize变量。

1140行到1160行

清除差错序列。

1180行

显示测量开始的消息。

1190行到1200行

这些行创建一个标题部分,该标题部分指示将发送Src_size_char$字节数量的数据,然后发送命令及其参数的标题部分,以将数据写到E5071C的文件上。

1220行

这行将Src_size_char$变量转换为实数,并将其保存到Src_size变量。

1230行到1370行

这些行重复下面的程序,直到Src_size为0。

1240行到1280行: 如果Src_size比Max_bsize大,这些行将Max_bsiize的值分配给Block_size变量(传输数据以字节为单位)。如果Src_size等于或小于Max_bsize,将Src_size的值分配给Block_size。

1300行 这行定义与Block_size大小相同的Dat$字符串变量,并将其储存在储存区域。

1310行 这行创建读取字符的格式,读取字符数量与Block_size字符的数量相同。

1320行 这行从外部控制器的文件上读取数据,然后将其保存到Dat$。

1330行 这行将Dat$的内容写到E5071C的文件上。

1340行行到1360行 这些行清除Dat$的储存区域,并除去Src_size的Block_size。

1390行

这行发送数据末尾的消息结束标志。

1420行行到1430行

这些行获取差错序列的差错次数和差错消息,然后分别将其储存到Err_no和Err_msg$变量中。

1440行到1490行

如果Err_no等于0(没有出现差错),这些行显示指示传输完成的消息,如果Err_no不等于0(出现差错),显示Err_no与Err_msg$。

1510行到520行

这些行处理没有找到要复制的源文件的情况。