The tank farm is supported through a special CAMAC card that resides in slot 19 of crate DE (at CHL) on Dec-T. This card is described in the "082 Module Tank Farm Interface" writeup by Bob Ducar. All Dec-T communication with the tank farm goes through this card.
There are two ways an application program can access the tank farm: through an aggregate device or through individual devices.
There is one aggregate device that provides all the tank farm readings (valve positions, temperature, and pressure) for all 13 tanks. This device is used by the special tank farm page. It has only a reading property; its sole purpose is to conveniently read the whole shebang without loading down data acquisition facilities. Since tank farm logging will use its own special display program I think this device will be used for logging also.
There are also 65 individual devices, one per valve, temperature, or pressure, that provide a single reading each. These devices are used for parameter page display. They may also support alarm block properties if such become desirable. All valves are moved by writing to the setting property of the appropriate device.
The information in this document is of use to two people: the person writing the application and the person entering the data base information. I can think of only items that these people need that I cannot provide in this document:
This device supports only the reading property. Its node is Dec-T. There is no scaling information. The maximum length is 224 bytes (112 words). The default length is 2 bytes. The default collection time should be 10 seconds or longer.
|0||OID = 1D (hex)|
The 112 word buffer you get from the aggregate device is designed to fit nicely into a two dimensional fortran array of one word integers which you declare thusly:
INTEGER*2 AGG (0:7, 0:13)
The second subscript is the tank number (1-13). "Tank 0" is not used, but you have to declare space for it in the array anyway. The first subscript allows you to extract the five readings per tank as follows:
AGG(1,I) -- Dirty Valve position for I-th tank AGG(2,I) -- Clean Valve position for I-th tank AGG(3,I) -- Scrubber Valve position for I-th tank AGG(4,I) -- Temperature of I-th tank AGG(5,I) -- Pressure of I-th tank
Subscripts 0, 7, and 8 are not used but you have to make the array big enough for them anyway.
Each of the readings above is an 11 bit long two's complement number stored in the upper 11 bits of the word. There are in addition two status bits in the word for each reading:
2**3 -- 1 if in local mode, 0 otherwise 2**2 -- 1 if parity error detected, 0 if OK
All devices support the reading property. Only the valves, three per tank, have the setting property. There are no basic status or basic control properties. The node is is Dec-T. The scaling information needs to be decided. The maximum and default length is 2 bytes. The default collection time can be 1 second. The SSDN for both reading and setting is:
|0||OID = 1D (hex)|
|0||tank & device|
Where the tank and device byte is as follows:
TTTT/0DDD TTTT = Tank number (1 to 13) DDD = 1 Dirty valve 2 Clean valve 3 Scrubber valve 4 Temperature 5 Pressure
The reading that comes from these devices is always a single word. The format of this word is the same as described under the aggregate device, to wit:
RRRR/RRRR/RRR0/0LP0 R = Reading, two's complement L = Local mode (1) or remote mode (0) P = Parity error (1) or OK (0)
If you want to operate a valve you transmit a single word to the setting property of one of the valves. This word contains a time in thirds of a second. Thus a value of 30 means 10 seconds, 5 means 5/3 second, and so on. Send the straight value to open the valve, negate the value to close the valve. Thus you send a value of -30 to close the valve for 10 seconds.
The timing for valve movement is rather inexact. The actual length of time that we will send the signal will be within half a second or so of the time you specify in your setting.