//_Header
//*******************************************************************
//    NOVA Central Controls  ---  Lawrence Livermore Laboratory
//*******************************************************************
//
//_Module_Name:  TABLES		_File:  [TDVAX.CRYOFEP]TABLES.PRX
//
//_Description:	Temperature conversion tables  and interploation tables
//		for dt-500 diode temperature guages and 
//		Chromel vs. Gold-.07% Fe thermocouples
//		
//_Call:
//_Identifier: { none }
//*******************************************************************
//_Author:  John Severyn		_Creation_Date:   16-DEC-82
//_Revisions:
//  1.000   16-dec-82	JRS	Initial Key-in.
//  2.000   03-JAN-83	JRS	Interpolation for diode and tc
//*******************************************************************
//_End


MODULE TABLES
%SET ENCODE_EXTERNAL_NAMES=TRUE

EXPORT TC_VOLTAGE,
	TC_TEMP,
	DIODE_VOLTAGE,
	DIODE_TEMP

DECLARE
	TC_TABLE 	IS 	ARRAY [0..280] OF REAL
	D_TABLE		IS 	ARRAY [0..400] OF REAL

// The following table is from National Bureau of Standards Interim Report 9712
// and is simply the temperature in degrees K verses the voltage output of a
// Chromel vs. gold-0.07 at. % iron thermocouple.

	TC		:	STATIC TC_TABLE INITIALLY TC_TABLE
				(
				 [0]:	     0.0
				,[1]:	     7.85E-6
				,[2]:       17.21E-6
				,[3]:       27.86E-6
				,[4]:       39.59E-6
				,[5]:       52.26E-6
				,[6]:	    65.69E-6
				,[7]:	    79.70E-6
				,[8]:	    94.40E-6
				,[9]:	   109.45E-6
				,[10]:	   124.86E-6
				,[11]:	   140.54E-6
				,[12]:     156.44E-6
				,[13]:     172.50E-6
				,[14]:     188.68E-6
				,[15]:     204.94E-6
				,[16]:	   221.26E-6
				,[17]:	   237.60E-6
				,[18]:	   253.95E-6
				,[19]:	   270.29E-6
				,[20]:	   286.60E-6
				,[21]:	   302.89E-6
				,[22]:     319.15E-6
				,[23]:     335.36E-6
				,[24]:     351.54E-6
				,[25]:     367.67E-6
				,[26]:	   383.77E-6
				,[27]:	   399.82E-6
				,[28]:	   415.85E-6
				,[29]:	   431.84E-6
				,[30]:	   447.81E-6
				,[31]:	   463.76E-6
				,[32]:     479.69E-6
				,[33]:     495.61E-6
				,[34]:     511.52E-6
				,[35]:     527.43E-6
				,[36]:	   543.35E-6
				,[37]:	   559.27E-6
				,[38]:	   575.20E-6
				,[39]:	   591.15E-6
				,[40]:	   607.12E-6
				,[41]:	   623.12E-6
				,[42]:     639.14E-6
				,[43]:     655.19E-6
				,[44]:     671.28E-6
				,[45]:     687.40E-6
				,[46]:	   703.56E-6
				,[47]:	   719.76E-6
				,[48]:	   736.00E-6
				,[49]:	   752.29E-6
				,[50]:	   768.62E-6
				,[51]:	   785.00E-6
				,[52]:     801.42E-6
				,[53]:     817.89E-6
				,[54]:     834.42E-6
				,[55]:     850.99E-6
				,[56]:	   867.61E-6
				,[57]:	   884.29E-6
				,[58]:	   901.01E-6
				,[59]:	   917.79E-6
				,[60]:	   934.61E-6
				,[61]:	   951.49E-6
				,[62]:     968.42E-6
				,[63]:     985.42E-6
				,[64]:    1002.43E-6
				,[65]:    1019.51E-6
				,[66]:	  1036.64E-6
				,[67]:	  1053.82E-6
				,[68]:	  1071.05E-6
				,[69]:	  1088.33E-6
				,[70]:	  1105.66E-6
				,[71]:	  1123.03E-6
				,[72]:    1140.46E-6
				,[73]:    1157.94E-6
				,[74]:    1175.46E-6
				,[75]:    1193.03E-6
				,[76]:	  1210.65E-6
				,[77]:	  1228.31E-6
				,[78]:	  1246.03E-6
				,[79]:	  1263.79E-6
				,[80]:	  1281.59E-6
				,[81]:	  1299.44E-6
				,[82]:    1317.34E-6
				,[83]:    1335.29E-6
				,[84]:    1353.28E-6
				,[85]:    1373.31E-6
				,[86]:	  1389.39E-6
				,[87]:	  1407.51E-6
				,[88]:	  1425.68E-6
				,[89]:	  1443.89E-6
				,[90]:	  1462.14E-6
				,[91]:	  1480.44E-6
				,[92]:    1498.78E-6
				,[93]:    1517.16E-6
				,[94]:    1535.59E-6
				,[95]:    1554.06E-6
				,[96]:	  1572.56E-6
				,[97]:	  1591.11E-6
				,[98]:	  1609.70E-6
				,[99]:	  1628.34E-6
				,[100]:	  1647.01E-6
				,[101]:	  1665.72E-6
				,[102]:   1684.47E-6
				,[103]:   1703.26E-6
				,[104]:   1772.09E-6
				,[105]:   1740.95E-6
				,[106]:	  1759.86E-6
				,[107]:	  1778.80E-6
				,[108]:	  1797.78E-6
				,[109]:	  1816.80E-6
				,[110]:	  1835.85E-6
				,[111]:	  1854.94E-6
				,[112]:   1874.06E-6
				,[113]:   1893.22E-6
				,[114]:   1912.42E-6
				,[115]:   1931.65E-6
				,[116]:	  1950.91E-6
				,[117]:	  1970.21E-6
				,[118]:	  1989.54E-6
				,[119]:	  2008.91E-6
				,[120]:	  2028.31E-6
				,[121]:	  2047.74E-6
				,[122]:   2067.20E-6
				,[123]:   2086.70E-6
				,[124]:   2106.23E-6
				,[125]:   2125.78E-6
				,[126]:	  2145.37E-6
				,[127]:	  2165.00E-6
				,[128]:	  2184.65E-6
				,[129]:	  2204.33E-6
				,[130]:	  2224.04E-6
				,[131]:	  2243.79E-6
				,[132]:   2263.56E-6
				,[133]:   2283.36E-6
				,[134]:   2303.20E-6
				,[135]:   2323.06E-6
				,[136]:	  2342.95E-6
				,[137]:	  2362.87E-6
				,[138]:	  2382.82E-6
				,[139]:	  2402.30E-6		// 30 OR 80?
				,[140]:	  2422.80E-6
				,[141]:	  2442.83E-6
				,[142]:   2462.90E-6
				,[143]:   2482.99E-6
				,[144]:   2503.10E-6
				,[145]:   2523.25E-6
				,[146]:	  2543.42E-6
				,[147]:	  2563.62E-6
				,[148]:	  2583.85E-6
				,[149]:	  2604.10E-6
				,[150]:	  2624.38E-6
				,[151]:	  2644.69E-6
				,[152]:   2665.02E-6
				,[153]:   2685.38E-6
				,[154]:   2705.76E-6
				,[155]:   2726.18E-6
				,[156]:	  2746.61E-6
				,[157]:	  2767.07E-6
				,[158]:	  2787.56E-6
				,[159]:	  2808.07E-6
				,[160]:	  2828.61E-6
				,[161]:	  2849.17E-6
				,[162]:   2869.75E-6
				,[163]:   2890.36E-6
				,[164]:   2910.99E-6
				,[165]:   2931.65E-6
				,[166]:	  2952.33E-6
				,[167]:	  2973.03E-6
				,[168]:	  2993.76E-6
				,[169]:	  3014.50E-6
				,[170]:	  3035.27E-6
				,[171]:	  3056.06E-6
				,[172]:   3076.88E-6
				,[173]:   3097.71E-6
				,[174]:   3118.57E-6
				,[175]:   3139.45E-6
				,[176]:	  3160.35E-6
				,[177]:	  3181.27E-6
				,[178]:	  3202.21E-6
				,[179]:	  3223.17E-6
				,[180]:	  3244.15E-6
				,[181]:	  3265.15E-6
				,[182]:   3286.17E-6
				,[183]:   3307.21E-6
				,[184]:   3328.27E-6
				,[185]:   3349.34E-6
				,[186]:	  3370.44E-6
				,[187]:	  3391.56E-6
				,[188]:	  3412.69E-6
				,[189]:	  3433.85E-6
				,[190]:	  3455.02E-6
				,[191]:	  3476.21E-6
				,[192]:   3497.41E-6
				,[193]:   3518.64E-6
				,[194]:   3539.88E-6
				,[195]:   3561.14E-6
				,[196]:	  3582.42E-6
				,[197]:	  3603.72E-6
				,[198]:	  3625.03E-6
				,[199]:	  3646.36E-6
				,[200]:	  3667.71E-6
//				,[X0]:	   124.86E-6
//				,[X1]:	   140.54E-6
//				,[X2]:      17.21E-6
//				,[X3]:      27.86E-6
//				,[X4]:      39.59E-6
//				,[X5]:      52.26E-6
//				,[X6]:	    65.69E-6
//				,[X7]:	    79.70E-6
//				,[X8]:	    94.40E-6
//				,[X9]:	   109.45E-6
				)

// The following table was generated by using the DT-500 detailed response curves
// from Lake Shore Cryogenics Inc.  Exitation current=10 ua., voltage is Vf(forward biased voltage)
// I don't have actual tables at this time
// so the tables were generated by manually reading the graph   JRS

	DIODE		:	STATIC D_TABLE INITIALLY D_TABLE
				(
				 [0]:	     2.42
				,[1]:	     2.40
				,[2]:        2.31
				,[3]:        2.23
				,[4]:        2.16
				,[5]:        2.11
				,[6]:	     2.05
				,[7]:	     2.00
				,[8]:	     1.96
				,[9]:	     1.92
				,[10]:	     1.88
				,[11]:	     1.84
				,[12]:       1.80
				,[13]:       1.76
				,[14]:       1.72
				,[15]:       1.67
				,[16]:	     1.63
				,[17]:	     1.58
				,[18]:	     1.54
				,[19]:	     1.50
				,[20]:	     1.45
				,[21]:	     1.41
				,[22]:       1.37
				,[23]:       1.32
				,[24]:       1.27
				,[25]:       1.22
				,[26]:	     1.18
				,[27]:	     1.17
				,[28]:	     1.16
				,[29]:	     1.15
				,[30]:	     1.14
				,[31]:	     1.136
				,[32]:       1.132
				,[33]:       1.128
				,[34]:       1.124
				,[35]:       1.120
				,[36]:	     1.116
				,[37]:	     1.112
				,[38]:	     1.108
				,[39]:	     1.104
				,[40]:	     1.100
				)
ENDDECLARE



PROCEDURE TC_VOLTAGE		(TEMPERATURE: 	IN REF REAL, 	VOLTAGE: OUT REF REAL)
	VOLTAGE:=(TC[INTEGER(TEMPERATURE)])+(TEMPERATURE-REAL(INTEGER(TEMPERATURE)))*
			(TC[1+INTEGER(TEMPERATURE)]-TC[INTEGER(TEMPERATURE)])
ENDPROCEDURE


PROCEDURE TC_VOLTAGE_2		(TEMPERATURE: 	IN REF REAL, 	VOLTAGE: OUT REF REAL)
	declare 
		r : real initially temperature
		t : integer initially integer (r)
	enddeclare

	VOLTAGE:=(TC[ t ])+(r-REAL(t)) * (TC[t + 1]-TC[t])
ENDPROCEDURE


PROCEDURE TC_VOLTAGE_3		(TEMPERATURE: 	IN REF REAL, 	VOLTAGE: OUT REF REAL)
	declare 
		r : real initially temperature
		t : integer 
	enddeclare
	t := integer (r)
	VOLTAGE:=(TC[ t ])+(r-REAL(t)) * (TC[t + 1]-TC[t])
ENDPROCEDURE



PROCEDURE TC_TEMP		(VOLTAGE:	 IN REF REAL,	TEMPERATURE: OUT REF REAL)
	FOR I:=0 TO 200 DO
		IF TC[I]>VOLTAGE DO
			TEMPERATURE:=REAL(I-1)+ (VOLTAGE-TC[I-1])/(TC[I]-TC[I-1])
			RETURN
		ENDIF
	ENDFOR
ENDPROCEDURE



PROCEDURE DIODE_VOLTAGE		(TEMPERATURE: 	IN REF REAL, 	VOLTAGE: OUT REF REAL)

// interpolate between points in the diode table for temp less than or equal to 40 deg k
	IF TEMPERATURE<=40 DO
		VOLTAGE:=(DIODE[INTEGER(TEMPERATURE)])-(TEMPERATURE-REAL(INTEGER(TEMPERATURE)))*
			(DIODE[INTEGER(TEMPERATURE)]-DIODE[1+INTEGER(TEMPERATURE)])
// use one straight line from 40 thur 67.5
	ORIF (TEMPERATURE>40.0 AND TEMPERATURE<=67.5) DO
		VOLTAGE:=1.2362 - (3.49925E-3*TEMPERATURE)
// and another if temp is >67.5 and less than 431 deg k
	ORIF (TEMPERATURE>67.5 AND TEMPERATURE<431) DO
		VOLTAGE:=1.1825 - (2.751E-3*TEMPERATURE)
	OTHERWISE
		VOLTAGE:=9999.0		// to flag errors
	ENDIF
ENDPROCEDURE



PROCEDURE DIODE_TEMP		(VOLTAGE:	 IN REF REAL,	TEMPERATURE: OUT REF REAL)

// if the voltage is greater than 1.1 use the table for the non-linear region
	IF (VOLTAGE>=1.10 AND VOLTAGE<2.42)  DO
		FOR I:=0 TO 40 DO
			IF DIODE[I]<VOLTAGE DO
				TEMPERATURE:=REAL(I)+ (VOLTAGE-DIODE[I])/(DIODE[I-1]-DIODE[I])
				RETURN
			ENDIF
		ENDFOR
// if voltage is between 1.10 and 1.00, use the first linear region equation and compute the temperature
	ORIF (VOLTAGE<1.1 AND VOLTAGE>=1.00)DO
		TEMPERATURE:=431.0-(289.92*VOLTAGE)
// if voltage is between 1.00 and 0.02, use the second linear region equation and compute the temperature
	ORIF (VOLTAGE<1.00 AND VOLTAGE>0.02)DO
		TEMPERATURE:=431.0-(363.5*VOLTAGE)
	OTHERWISE
		TEMPERATURE:=9999.9		// just to flag opens or shorts in the sensor
	ENDIF

ENDPROCEDURE

ENDMODULE