1 !Filename:flush 21 ! For manometer revision #3 with greased stopcocks 31 ! Uses 'Paroscientific' gauge 41 ! REPEAT 10 TIMES AUTOMATICALLY 51 ! 61 OPTION BASE 1 71 COM /Data/ Pressure(30),Temp(30),Temp2(30),Pressure_2(30),Temp_2(30),Temp2_2(30),Temp3(30),Temp3_2(30) 81 INTEGER Nsamples 91 COM /Devices/ @Switch,@Dvm,@Vacgauge,@Switch2,@Serial,@Dvm1,@Res 101 Samplegas=14 111 Samplerelay=107 121 Waittime=4*60 131 Nsamples=10 141 ! 151 CLEAR SCREEN 161 ! DISP "TURN ON VACUUM PUMP, PRESS CONTINUE" 171 ! PAUSE 181 ! 182 INPUT "Sample gas?",Samplegas 183 ! 191 CALL Openfile(File$) 201 ! 211 Init ! Initialize devices on HPIB 212 Openvalve(Samplegas) 221 ! Turnon(Samplegas) 231 ! PAUSE 241 ! Pump_on ! Turn on the vacuum pump 243 Openvalve(305) 244 WAIT 1 245 Openvalve(203) 247 ! 248 Get_data(5,Pressure(*),Temp(*),Temp2(*),Nsamples) 249 FOR K=1 TO 4 250 ! Pump_on ! Turn on the vacuum pump 251 Openvalve(305) 252 CALL Createfile(File$,K,@F) 253 Evacuate_system(P0)! Evacuate everything, return initial pressure 254 Pref=0 ! FNGet_press_ref! Get Ruska reference cell pressure 255 OUTPUT @F USING "-,D,1X,2D,1X,D.4D,1X,D.3D";4,Nsamples,P0,Pref 256 PRINT "LOOP NUMBER ";K 257 PRINT USING Header 258 Ratio1(Waittime,Samplerelay,@F,Nsamples) 259 ! Ratio2(Waittime,Samplerelay,@F,Nsamples) 260 ! Ratio3(Waittime,Samplerelay,@F,Nsamples) 261 ! Ratio4(Waittime,Samplerelay,@F,Nsamples) 262 NEXT K 263 ! 264 ASSIGN @F TO * 265 ! 266 Header:IMAGE 9X,"Pressure",3X,"Temp.",13X,"Pressure",3X,"Temp.",13X,"Ratio" 267 Img: IMAGE 4D,3X,3D.6D,3X,2D.3D,10X,3D.6D,3X,2D.3D,10X,2D.6D 268 I: IMAGE -,4D.5D,1X,2D.3D,1X,2D.3D,1X,4D.5D,1X,2D.3D,1X,2D.3D 269 Closevalve(202) 270 Closevalve(209) 271 Closevalve(208) 272 Closevalve(206) 273 END 274 ! 275 ! 276 !************************************************************************ 277 SUB Evacuate_system(P) 278 Pmax=.002 ! System must be evacuated to less than this p 279 Prefmax=.010 ! Max pressure for Ruska reference side 280 K=0 281 ! 282 ! 283 T=TIMEDATE 284 Openvalve(204) 285 WAIT 5 286 Openvalve(203) 287 Openvalve(208) 288 WAIT 15 289 ! Openvalve(209) 290 WAIT 5 291 ! Openvalve(202) 292 WAIT 10 293 ! Openvalve(206) 294 WAIT 10 ! Let gauges respond before continuing 295 Readps(Pressure) 296 REPEAT 297 DISP "ELAPSED TIME: ";TIME$(TIMEDATE-T);PROUND(Pressure,-4) 298 WAIT 1 299 Readps(Pressure) 300 P=FNGetpressure 301 UNTIL PPmin THEN SUBEXIT 317 ! 318 Openvalve(109) 319 Openvalve(201) 320 REPEAT 321 ! Read_ruska(P) 322 Readps(P) 323 UNTIL P>Pmin 324 Closevalve(201) 325 Closevalve(109) 326 SUBEXIT 327 SUBEND 328 ! 329 !************************************************************************ 330 SUB Closevalve(Valve) 331 COM /Devices/ @Switch,@Dvm,@Vacgauge,@Switch2,@Serial,@Dvm1,@Res 332 ! 333 ! Close the appropriate valve. 334 ! Closing a valve means opening the appropriate relay 335 ! on the HP switch/control unit 336 ! 337 DISP "CLOSING VALVE";Valve 338 IF Valve<200 THEN 339 OUTPUT @Switch2;"OPEN "&VAL$(Valve) 340 ELSE 341 OUTPUT @Switch;"OPEN "&VAL$(Valve) 342 END IF 343 WAIT .1 344 SUBEND 345 ! 346 !*************************************************************************** 347 SUB Openvalve(Valve) 348 COM /Devices/ @Switch,@Dvm,@Vacgauge,@Switch2,@Serial,@Dvm1,@Res 349 ! 350 ! Open the appropriate valve. 351 ! Opening a valve means closing the corresponding relay 352 ! on the HP switch/control unit 353 ! 354 DISP "OPENING VALVE";Valve 355 IF Valve<200 THEN 356 OUTPUT @Switch2;"CLOSE "&VAL$(Valve) 357 ELSE 358 OUTPUT @Switch;"CLOSE "&VAL$(Valve) 359 END IF 360 WAIT .1 361 SUBEND 362 ! 363 !************************************************************************* 364 DEF FNGetpressure 365 COM /Devices/ @Switch,@Dvm,@Vacgauge,@Switch2,@Serial,@Dvm1,@Res 366 OUTPUT @Vacgauge;"DS2" 367 ENTER @Vacgauge;P 368 RETURN P 369 FNEND 370 ! 371 !********************************************************************** 372 SUB Stats(Array(*),INTEGER Num,REAL Mean,Stand_dev) 373 OPTION BASE 1 374 Mean=0 375 Stand_dev=0 376 IF Num=0 THEN SUBEXIT 377 ! 378 ! Calculate mean and standard deviation 379 ! 380 Sum=0 381 Sumsq=0 382 FOR I=1 TO Num 383 Sum=Sum+Array(I) 384 Sumsq=Sumsq+Array(I)*Array(I) 385 NEXT I 386 Mean=Sum/Num 387 IF Num>1 THEN 388 IF (Sumsq-Sum*Sum/Num)/(Num-1)>0 THEN !avoid round off error 389 Stand_dev=SQR((Sumsq-Sum*Sum/Num)/(Num-1)) 390 END IF 391 END IF 392 SUBEXIT 393 ! 394 SUBEND 395 ! 396 !*********************************************************************** 397 DEF FNCalc_ratio(P1,T1,P2,T2) 398 ! 399 ! Calculate the ratio between two volumes given the pressure and 400 ! temperature of each volume. Assume that the number of moles of 401 ! gas stays constant i.e., the gas has expanded from one volume 402 ! to the other. 403 ! 404 Vratio=(T1+273.15)*P2/(T2+273.15)/P1 !ideal gas law 405 RETURN Vratio 406 FNEND 407 ! 408 !************************************************************************* 409 DEF FNGet_press_ref 410 COM /Devices/ @Switch,@Dvm,@Vacgauge,@Switch2,@Serial,@Dvm1,@Res 411 OUTPUT @Vacgauge;"DS2" 412 ENTER @Vacgauge;P 413 RETURN P 414 FNEND 415 ! 416 !************************************************************************ 417 SUB Get_data(Waittime,Pressure(*),Temp(*),Temp2(*),INTEGER Numsample) 418 ! 419 ! Read values from all devices. 420 ! 421 OPTION BASE 1 422 COM /Devices/ @Switch,@Dvm,@Vacgauge,@Switch2,@Serial,@Dvm1,@Res 423 ! 424 Sample=0 425 Sampleinterval=5 426 ! 427 ! 428 ! Loop to allow things to stabilize 429 ! 430 T=TIMEDATE 431 REPEAT 432 DISP TIME$(Waittime-(TIMEDATE-T)) 433 UNTIL TIMEDATE-T>Waittime 434 ! 435 ON CYCLE Sampleinterval GOSUB Readdata 436 REPEAT 437 UNTIL Sample=Numsample 438 OFF CYCLE 439 ! 440 ! 441 SUBEXIT 442 ! 443 Readdata: Sample=Sample+1 444 ! 445 Readps(Pressure(Sample)) 446 ! 447 ! 448 OUTPUT @Res;"STAT:MEAS?" 449 REPEAT 450 ENTER @Res;Stat$ 451 St=VAL(Stat$) 452 ! PRINT St 453 UNTIL St=15 454 OUTPUT @Res;"READ? 1" 455 ENTER @Res;A$ 456 R1=VAL(A$) 457 ! PRT #318651 (10/5/2007) 458 A=-240.688842 459 B=2.303800 460 C=.00102069 461 Temp(Sample)=A+B*R1+C*R1^2 462 ! 463 OUTPUT @Res;"READ? 2" 464 ENTER @Res;A$ 465 R2=VAL(A$) 466 ! PRT #318649 (10/5/2007) 467 A=-240.752663 468 B=2.305619 469 C=.00101693 470 ! 471 Temp2(Sample)=A+B*R2+C*R2^2 472 ! 473 OUTPUT @Res;"READ? 3" 474 ENTER @Res;A$ 475 R3=VAL(A$) 476 ! PRT #590753 by Hart (4/29/2002) 477 A=-241.0294 478 B=2.311509 479 C=.00098317 480 ! 481 Temp3(Sample)=A+B*R3+C*R3^2-.005 482 OUTPUT @Res;"READ? 4" 483 ENTER @Res;A$ 484 Temp4=VAL(A$) 485 ! 486 DISP USING I;Sample,Pressure(Sample),Temp(Sample),Temp2(Sample),Temp3(Sample),Temp4,St 487 ! 488 RETURN 489 ! 490 I: IMAGE 2D," P= ",3D.5D," T= ",3D.3D," , ",3D.3D, " ",3D.3D," ",3D.3D," ",3D 491 SUBEND 492 ! 493 !********************************************************************* 494 SUB Init 495 COM /Devices/ @Switch,@Dvm,@Vacgauge,@Switch2,@Serial,@Dvm1,@Res 496 COM /Meters/ Ruska 497 ON TIMEOUT 7,5 GOTO Novoltmeter 498 ASSIGN @Dvm TO 722 499 REMOTE @Dvm 500 CLEAR @Dvm 501 A=SPOLL(@Dvm) 502 ! OUTPUT @Dvm;"F1R46STGZ1D1" ! DC volts, 10v ranke 503 OUTPUT @Dvm;"F5R26STGZ1D1" 504 PRINT "pass Init Dvm, PRESS CONTINUE" 505 ! 506 ! 507 ON TIMEOUT 7,5 GOTO Noswitcher 508 ASSIGN @Switch TO 709 509 OUTPUT @Switch;"RESET" 510 OUTPUT @Switch;"CMON 2" ! Monitor slot 2 511 OUTPUT @Switch;"CLOSE 403, 503" ! Monitor temperature probe 512 ! 513 PRINT "pass Init swithc 709, RESS CONTINUE" 514 ! 515 ON TIMEOUT 7,5 GOTO Noswitcher 516 ASSIGN @Switch2 TO 710 517 OUTPUT @Switch2;"RESET" 518 OUTPUT @Switch2;"CMON 1" ! Monitor slot 1 519 OUTPUT @Switch2;"DMODE 2,2,1,0" 520 ! 521 PRINT "pass Init swithc 710, RESS CONTINUE" 522 ! 523 ON TIMEOUT 7,5 GOTO Nores 524 ASSIGN @Res TO 725 525 OUTPUT @Res;"*CLS" 526 PRINT "pass Init 1529 readout, RESS CONTINUE" 527 OUTPUT @Res;"*IDN?" ! Monitor slot 1 528 ENTER @Res;A$ 529 PRINT A$ 530 ! 531 OUTPUT @Res;"DMODE 2,2,1,0" 532 ! 533 ! 534 ON TIMEOUT 7,5 GOTO Novacgauge 535 ASSIGN @Vacgauge TO 708 536 OUTPUT @Vacgauge;"DS1" 537 ENTER @Vacgauge;A 538 ! 539 ! DISP "pass Init Vacgauge, RESS CONTINUE" 540 ! 541 ! PAUSE 542 Init_ps 543 SUBEXIT 544 ! 545 Novoltmeter:PRINT "VOLTMETER NOT OPERATING." 546 CALL Display("Fix problem and press 'Continue'.",.1) 547 PAUSE 548 GOTO 497 549 Noswitcher:PRINT "RELAY SWITCHER NOT OPERATING." 550 CALL Display("Fix problem and press 'Continue'.",.1) 551 PAUSE 552 GOTO 497 553 Nores: PRINT "1529 Readout NOT OPERATING." 554 CALL Display("Fix problem and press 'Continue'.",.1) 555 PAUSE 556 GOTO 497 557 SUBEXIT 558 Novacgauge:PRINT "VACUUM GAUGE NOT OPERATING." 559 CALL Display("Fix problem and press 'Continue'.",.1) 560 PAUSE 561 GOTO 534 562 SUBEND 563 ! 564 !************************************************************************ 565 SUB Openfile(File$) 566 OPTION BASE 1 567 DIM Mon$(12)[3] 568 DATA JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC 569 READ Mon$(*) 570 File$="" 571 A$=DATE$(TIMEDATE) 572 M$=UPC$(A$[4,6]) 573 FOR I=1 TO 12 574 IF M$=Mon$(I) THEN GOTO A 575 NEXT I 576 File$="NOFILE" 577 SUBEXIT 578 A: M=I 579 D=VAL(A$[1,2]) 580 Y=VAL(A$[10,11]) 581 OUTPUT File$ USING "#,K,2Z,2Z,2Z";"pr",M,D,Y 582 SUBEND 583 !************************************************************************ 584 SUB Createfile(File$,K,@F) 585 DIM Dir$[80],F$[80] 586 Dir$="/users/co2cal/mano/volratio/"&File$ 587 ON ERROR GOTO A 588 CREATE DIR Dir$ 589 A: F$=Dir$&"/"&File$&"." 590 IF K<10 THEN 591 F$=F$&"0"&VAL$(K) 592 ELSE 593 F$=F$&VAL$(K) 594 END IF 595 OFF ERROR 596 ASSIGN @F TO F$;FORMAT ON,RETURN R 597 ASSIGN @F TO * 598 IF R=0 THEN 599 PURGE F$ 600 END IF 601 CREATE F$,1 602 B: ASSIGN @F TO F$;FORMAT ON 603 OUTPUT @F USING "-,K, K";" Volume Calibration",F$ 604 OUTPUT @F USING "-,K";"paro" 605 SUBEXIT 606 SUBEND 607 !********************************************************************** 608 SUB Readps(P) 609 ! 610 ! Read values from all devices. 611 ! 612 OPTION BASE 1 613 COM /Devices/ @Switch,@Dvm,@Vacgauge,@Switch2,@Serial,@Dvm1,@Res 614 ! 615 OUTPUT @Serial;"*0100P3" ! Provoke Paroscientific 616 ENTER @Serial;Pressure$ 617 P=VAL(Pressure$[6]) 618 SUBEND 619 ! 620 !*********************************************************************** 621 SUB Init_ps 622 ! 623 ! Initialize I/O paths to gpib and serial devices. 624 ! 625 COM /Devices/ @Switch,@Dvm,@Vacgauge,@Switch2,@Serial,@Dvm1,@Res 626 ! 627 ON ERROR GOTO Retry 628 A: ASSIGN @Serial TO 9 629 RESET 9 630 CONTROL 9,0;1 631 CONTROL 9,3;9600 632 CONTROL 9,4;3+0+0+48 633 ! 634 ! OUTPUT @Serial;"*9900BR=2400" 635 ! ENTER @Serial;A$ 636 ! PRINT A$ 637 ! 638 ! CONTROL 9,3;2400 639 ! OUTPUT @Serial;"*0100EW" 640 ! OUTPUT @Serial;"*0100UN" 641 ! ENTER @Serial;A$ 642 ! PRINT A$ 643 ! 644 OUTPUT @Serial;"*0100P3" 645 ENTER @Serial;A$ 646 PRINT A$ 647 ! OUTPUT @Serial;"*0100VR" 648 ! ENTER @Serial;A$ 649 ! PRINT A$ 650 ! 651 OUTPUT @Serial;"*0100Q3" 652 ! OUTPUT @Serial;"*0100EW" 653 ! OUTPUT @Serial;"*0100DP=3" 654 ENTER @Serial;A$ 655 PRINT A$ 656 SUBEXIT 657 Retry: PRINT ERRM$ 658 GOTO A 659 SUBEND 660 ! 661 ! 662 ! 663 !************************************************************************ 664 SUB Turnon(Gas) 665 ! 666 ! Turn to the appropriate port number. 667 ! Use 'DWRITE' command for HP3488A switch/control unit, 668 ! which will activate the appropriate digital lines for turning 669 ! the Valco valve. Store the correct binary value for all 670 ! numbers, then send the value for the requested gas to the 671 ! valve. Assumes that the negative true mode is enabled 672 ! for the digital I/O board in the 3488A (see Init subprogram) 673 ! 674 OPTION BASE 1 675 DIM A(16) 676 COM /Devices/ @Switch,@Dvm,@Vacgauge,@Switch2,@Serial,@Dvm1,@Res 677 DATA 17, 18, 19, 20, 21, 22, 23, 24, 25 ! Ports 1-9 678 DATA 48, 49, 50, 51, 52, 53, 54 ! Ports 10-16 679 READ A(*) 680 ! 681 Card=2 682 OUTPUT @Switch2;"DWRITE "&VAL$(Card)&"00,"&VAL$(A(Gas)) 683 SUBEND 684 !************************************************************************ 685 SUB Ratio1(Waittime,Samplerelay,@F,INTEGER Nsamples) 686 OPTION BASE 1 687 COM /Data/ Pressure(*),Temp(*),Temp2(*),Pressure_2(*),Temp_2(*),Temp2_2(*),Temp3(*),Temp3_2(*) 688 Pmax=.015 689 Openvalve(Samplerelay) 690 Closevalve(203) ! prepare to fill volume through valve 201 691 Openvalve(204) 692 WAIT 10 ! Let sample gas flow stabilize 693 Fill_volume ! pressurize system 694 Closevalve(Samplerelay) 695 Closevalve(208) ! close valve to pressure gauge 696 WAIT 10 ! Allow time for stopcock to close 697 Openvalve(203) ! evacuate manifold 698 Get_data(Waittime,Pressure(*),Temp(*),Temp2(*),Nsamples) 699 CALL Stats(Pressure(*),Nsamples,P1,P1s) 700 CALL Stats(Temp(*),Nsamples,T1,T1s) 701 CALL Stats(Temp2(*),Nsamples,T1a,T1as) 702 ! 703 ! Now expand the gas into the next volume 704 REPEAT 705 P=FNGetpressure 706 UNTIL P