ISIS Logo
LS336
LS336 IOC
LS336.db
Go to the documentation of this file.
1 ################################################################
2 #
3 # Lakeshore 336/350 Temperature Controller template file.
4 #
5 # Macros:
6 # P - Prefix for PV name
7 # PORT - Bus/Port Address (eg. ASYN Port).
8 # ADDR - Address on the bus (optional)
9 # TEMPSCAN - SCAN rate for the temperature/voltage readings
10 # SCAN - SCAN rate for non-temperature/voltage parameters.
11 # ADEL (optional) - Archive deadband for temperatures
12 # MDEL (optional) - Monitor deadband for temperatures
13 #
14 # Notes: The loop/output dependant PVs are in a seperate template file, included in this one.
15 # Generally, set records forward process the associated read records in order
16 # to update the read record faster than their SCAN rate otherwise would do (but they
17 # are not processed in the same processing chain).
18 #
19 # Matt Pearson, June 2013
20 #
21 # June 2014 - modified to support Lakeshore 350. The 350 is almost
22 # identical to the 336 so I just had to modify menu
23 # options. I also added in support for the 3062 option card.
24 #
25 # June 2014 - factor out input sensor records into lakeshore_input.template
26 # and add support for reading input sensor descriptions. This
27 # is also used in lakeshore_option_3062.template.
28 #
29 ################################################################
30 
31 record(bo, "$(P):LS01:DISABLE") {
32  field(DESC, "Disable set records")
33  field(PINI, "YES")
34  field(VAL, "0")
35  field(OMSL, "supervisory")
36  field(ZNAM, "Set Enabled")
37  field(ONAM, "Set Disabled")
38  field(ZSV, "NO_ALARM")
39  field(OSV, "MAJOR")
40 }
41 
42 record(bo, "$(P):LS01:DISABLE_POLL") {
43  field(DESC, "Disable polling")
44  field(PINI, "YES")
45  field(VAL, "0")
46  field(OMSL, "supervisory")
47  field(ZNAM, "Poll Enabled")
48  field(ONAM, "Poll Disabled")
49  field(ZSV, "NO_ALARM")
50  field(OSV, "MAJOR")
51 }
52 
53 ################################################################
54 # Read records
55 ################################################################
56 
57 ##
58 ## Read the ID string from the device.
59 ##
60 record(stringin, "$(P):LS01:ID") {
61  field(DTYP, "stream")
62  field(SDIS, "$(P):LS01:DISABLE")
63  field(INP, "@ls336.proto getID L0 0")
64  field(SCAN, "Passive")
65  field(PINI, "YES")
66 }
67 
68 ##
69 ## Read the model number from the device.
70 ##
71 record(stringin, "$(P):LS01:MODEL") {
72  field(DTYP, "stream")
73  field(SDIS, "$(P):LS01:DISABLE")
74  field(INP, "@ls336.proto getMODEL L0 0")
75  field(SCAN, "I/O Intr")
76 }
77 
78 ##
79 ## Read the serial number from the device.
80 ##
81 record(stringin, "$(P):LS01:SERIAL") {
82  field(DTYP, "stream")
83  field(SDIS, "$(P):LS01:DISABLE")
84  field(INP, "@ls336.proto getSERIAL L0 0")
85  field(SCAN, "I/O Intr")
86 }
87 
88 ##
89 ## Read the firmware from the device.
90 ##
91 record(stringin, "$(P):LS01:FIRMWARE") {
92  field(DTYP, "stream")
93  field(SDIS, "$(P):LS01:DISABLE")
94  field(INP, "@ls336.proto getFIRMWARE L0 0")
95  field(SCAN, "I/O Intr")
96 }
97 
98 
99 ##
100 ## Read the tuning status from the device.
101 ##
102 #record(stringin, "$(P):LS01:TUNEST") {
103 # field(DTYP, "stream")
104 # field(SDIS, "$(P):LS01:DISABLE_POLL")
105 # field(INP, "@ls336.proto getTUNEST L0 0")
106 # field(SCAN, "5 second")
107 #}
108 
109 ##
110 ## Read the tuning status success parameter
111 ##
112 #record(bi, "$(P):LS01:TUNESTSUCCESS") {
113 # field(DTYP, "stream")
114 # field(SDIS, "$(P):LS01:DISABLE_POLL")
115 # field(INP, "@ls336.proto getTUNESTSUCCESS L0 0")
116 # field(SCAN, "5 second")
117 # field(ZNAM, "No Error")
118 # field(ONAM, "Error (see manual)")
119 #}
120 
121 ################################################################
122 # Input sensor records
123 ################################################################
124 
125 record(bo, "$(P):LS01:DISABLE_0") {
126  field(DESC, "Disable A polling")
127  field(PINI, "YES")
128  field(VAL, "1")
129  field(OMSL, "supervisory")
130  field(ZNAM, "Enabled")
131  field(ONAM, "Disabled")
132  field(ZSV, "NO_ALARM")
133  field(OSV, "MINOR")
134  info(autosaveFields, "VAL")
135 }
136 
137 record(bo, "$(P):LS01:DISABLE_1") {
138  field(DESC, "Disable B polling")
139  field(PINI, "YES")
140  field(VAL, "1")
141  field(OMSL, "supervisory")
142  field(ZNAM, "Enabled")
143  field(ONAM, "Disabled")
144  field(ZSV, "NO_ALARM")
145  field(OSV, "MINOR")
146  info(autosaveFields, "VAL")
147 }
148 
149 record(bo, "$(P):LS01:DISABLE_2") {
150  field(DESC, "Disable C polling")
151  field(PINI, "YES")
152  field(VAL, "1")
153  field(OMSL, "supervisory")
154  field(ZNAM, "Enabled")
155  field(ONAM, "Disabled")
156  field(ZSV, "NO_ALARM")
157  field(OSV, "MINOR")
158  info(autosaveFields, "VAL")
159 }
160 
161 record(bo, "$(P):LS01:DISABLE_3") {
162  field(DESC, "Disable D polling")
163  field(PINI, "YES")
164  field(VAL, "1")
165  field(OMSL, "supervisory")
166  field(ZNAM, "Enabled")
167  field(ONAM, "Disabled")
168  field(ZSV, "NO_ALARM")
169  field(OSV, "MINOR")
170  info(autosaveFields, "VAL")
171 }
172 
173 
174 # Template to provide the records required for an input.
175 # This makes use of the macros required by lakeshore336.template
176 # but also requires macros to specify the input channel and index.
177 # The index is to provide a way for the developer to use a different
178 # channel naming scheme.
179 #
180 # For some commands, I hard coded the last part of the record names into
181 # the protocol file. This seems the easiest way to deal with commands
182 # will lots of params returned back, and avoid problematic long INP fields.
183 # For the ZONE commands I used waveforms and subarrays, but that is not as simple.
184 #
185 # Macros:
186 # INPUT - A to D, or D1 to D5
187 # INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
188 # DISABLE - PV name to use for SDIS
189 
190 ##
191 ## Alarm summary record for input
192 ## This summarizes the software limits on the temperature readings,
193 ## the alarm status reading from the controller and the input reading status.
194 ##
195 record(calc, "$(P):LS01:ALARM0_SUMMARY_CALC") {
196  field(INPA, "$(P):LS01:KRDG0 CP MS")
197  field(INPB, "$(P):LS01:ALARM0_HIGH CP MS")
198  field(INPC, "$(P):LS01:ALARM0_LOW CP MS")
199  field(INPD, "$(P):LS01:RDGST0 CP MS")
200  field(CALC, "A")
201  field(FLNK, "$(P):LS01:ALARM0_SUMMARY_CALC2")
202  field(SDIS, "$(P):LS01:DISABLE_0")
203 }
204 
205 record(calcout, "$(P):LS01:ALARM0_SUMMARY_CALC2") {
206  field(INPA, "$(P):LS01:ALARM0_SUMMARY_CALC.STAT")
207  field(CALC, "A!=0?1:0")
208  field(DOPT, "Use CALC")
209  field(OOPT, "Every Time")
210  field(OUT, "$(P):LS01:ALARM0_SUMMARY PP")
211 }
212 
213 record(bi, "$(P):LS01:ALARM0_SUMMARY") {
214  field(ZNAM, "No Alarm")
215  field(ONAM, "Alarm")
216  field(OSV, "MAJOR")
217  field(PINI, "YES")
218  field(VAL, "0")
219  info(archive, "Monitor, 00:00:01, VAL")
220 }
221 
222 ##
223 ## If we disable polling this input, disable the alarm
224 ##
225 record(calcout, "$(P):LS01:ALARM0_SUMMARY_DISABLE") {
226  field(INPA, "$(P):LS01:DISABLE_0 CP")
227  field(CALC, "A==1?0:1")
228  field(DOPT, "Use CALC")
229  field(OOPT, "When Zero")
230  field(OUT, "$(P):LS01:ALARM0_SUMMARY.VAL PP")
231 }
232 
233 
234 ##
235 ## Read the temperature on channel 0 in Kelvin.
236 ##
237 record(ai, "$(P):LS01:KRDG0") {
238  field(DTYP, "stream")
239  field(SDIS, "$(P):LS01:DISABLE_0")
240  field(DESC, "Channel 0 Temperature")
241  field(INP, "@ls336.proto getKRDG(A) L0 0")
242  field(SCAN, "1 second")
243  field(PREC, "3")
244  field(EGU, "K")
245  field(HHSV,"MAJOR")
246  field(HSV, "MINOR")
247  field(LSV, "MINOR")
248  field(LLSV,"MAJOR")
249  field(HYST,"1.0")
250  field(HIHI,"1000")
251  field(HIGH,"1000")
252  field(LOW,"-1")
253  field(LOLO,"-1")
254  field(ADEL, "1")
255  field(MDEL, "0")
256  info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
257  info(archive, "Monitor, 00:00:01, VAL")
258 }
259 
260 ##
261 ## Read the raw voltage on channel 0.
262 ##
263 record(ai, "$(P):LS01:SRDG0") {
264  field(DTYP, "stream")
265  field(SDIS, "$(P):LS01:DISABLE_0")
266  field(INP, "@ls336.proto getSRDG(A) L0 0")
267  field(SCAN, "1 second")
268  field(PREC, "3")
269  field(EGU, "V")
270  field(ADEL, "1")
271  field(MDEL, "0")
272 }
273 
274 ##
275 ## Set sensor 0 name
276 ##
277 record(stringout, "$(P):LS01:INNAME_S0") {
278  field(DESC, "Input 0 Name")
279  field(DTYP, "stream")
280  field(SDIS, "$(P):LS01:DISABLE")
281  field(OUT, "@ls336.proto setINNAME(A) L0 0")
282  field(FLNK, "$(P):LS01:INNAME0.PROC CA")
283 }
284 
285 ##
286 ## Read input sensor 0 name
287 ##
288 record(stringin, "$(P):LS01:INNAME0") {
289  field(DTYP, "stream")
290  field(SDIS, "$(P):LS01:DISABLE")
291  field(INP, "@ls336.proto getINNAME(A) L0 0")
292  field(PINI, "YES")
293  field(SCAN, "Passive")
294 }
295 
296 ##
297 ## Read the high alarm status for input 0.
298 ## This also populates ALARM0_LOW
299 ##
300 record(bi, "$(P):LS01:ALARM0_HIGH") {
301  field(DTYP, "stream")
302  field(SDIS, "$(P):LS01:DISABLE_0")
303  field(INP, "@ls336.proto getALARMST(A,$(P):LS01:ALARM0_LOW) L0 0")
304  field(SCAN, "5 second")
305  field(ZNAM, "Off")
306  field(ONAM, "On")
307  field(OSV, "MAJOR")
308  info(archive, "Monitor, 00:00:01, VAL")
309 }
310 
311 ##
312 ## Read the low alarm status for input 0
313 ##
314 record(bi, "$(P):LS01:ALARM0_LOW") {
315  field(DTYP, "Soft Channel")
316  field(ZNAM, "Off")
317  field(ONAM, "On")
318  field(OSV, "MAJOR")
319  info(archive, "Monitor, 00:00:01, VAL")
320 }
321 
322 ##
323 ## Read the alarm parameters.
324 ## NOTE: the last part of the record name is hard coded into protocol file.
325 ##
326 record(bi, "$(P):LS01:ALARM0") {
327  field(DESC, "Read Alarm Params")
328  field(DTYP, "stream")
329  field(SDIS, "$(P):LS01:DISABLE_0")
330  field(INP, "@ls336.proto getALARM(A,$(P):LS01:ALARM0) L0 0")
331  field(SCAN, "5 second")
332 }
333 
334 ##
335 ## Read the rest of the alarm params.
336 ## NOTE: the last part of the record names are hard coded into protocol file.
337 ##
338 record(bi, "$(P):LS01:ALARM0_ONOFF") {
339  field(DESC, "Alarm Enabled")
340  field(ZNAM, "Disabled")
341  field(ONAM, "Enabled")
342 }
343 record(ai, "$(P):LS01:ALARM0_HIGHVAL") {
344  field(DESC, "Alarm High Value")
345  field(EGU, "K")
346 }
347 record(ai, "$(P):LS01:ALARM0_LOWVAL") {
348  field(DESC, "Alarm Low Value")
349  field(EGU, "K")
350 }
351 record(ai, "$(P):LS01:ALARM0_DB") {
352  field(DESC, "Alarm Deadband")
353  field(EGU, "K")
354 }
355 record(bi, "$(P):LS01:ALARM0_LE") {
356  field(DESC, "Alarm Latch Enable")
357  field(ZNAM, "Non Latching")
358  field(ONAM, "Latching")
359 }
360 record(bi, "$(P):LS01:ALARM0_AU") {
361  field(DESC, "Alarm Audible")
362  field(ZNAM, "Quiet")
363  field(ONAM, "Audible")
364 }
365 record(bi, "$(P):LS01:ALARM0_VIS") {
366  field(DESC, "Alarm Visible")
367  field(ZNAM, "Non Visible")
368  field(ONAM, "Visible")
369 }
370 
371 
372 ##
373 ## Read the input reading status
374 ##
375 record(mbbi, "$(P):LS01:RDGST0") {
376  field(DTYP, "stream")
377  field(SDIS, "$(P):LS01:DISABLE_0")
378  field(ZRST, "Valid")
379  field(ZRVL, "0")
380  field(ONST, "Invalid")
381  field(ONVL, "1")
382  field(TWST, "Temp Under")
383  field(TWVL, "16")
384  field(THST, "Temp Over")
385  field(THVL, "32")
386  field(FRST, "Sensor Zero")
387  field(FRVL, "64")
388  field(FVST, "Sensor Over")
389  field(FVVL, "128")
390  field(ONSV, "MAJOR")
391  field(TWSV, "MAJOR")
392  field(THSV, "MAJOR")
393  field(FRSV, "MAJOR")
394  field(FVSV, "MAJOR")
395  field(SCAN, "5 second")
396  field(INP, "@ls336.proto getRDGST(A) L0 0")
397  info(archive, "Monitor, 00:00:01, VAL")
398 }
399 
400 ##
401 ## Read the input curve number
402 ##
403 record(longin, "$(P):LS01:INCRV0") {
404  field(DTYP, "stream")
405  field(SDIS, "$(P):LS01:DISABLE_0")
406  field(SCAN, "5 second")
407  field(INP, "@ls336.proto getINCRV(A) L0 0")
408 }
409 
410 
411 ##
412 ## Read the input type information.
413 ## NOTE: the last part of the record name is hard coded into protocol file.
414 ##
415 record(bi, "$(P):LS01:INTYPE0") {
416  field(DESC, "Read Input Type Params")
417  field(DTYP, "stream")
418  field(SDIS, "$(P):LS01:DISABLE_0")
419  field(INP, "@ls336.proto getINTYPE(A,$(P):LS01:INTYPE0) L0 0")
420  field(SCAN, "5 second")
421 }
422 
423 ##
424 ## Read the rest of the input type params.
425 ## NOTE: the last part of the record names are hard coded into protocol file.
426 ##
427 record(mbbi, "$(P):LS01:INTYPE0_S") {
428  field(DESC, "Sensor Type")
429  field(ZRST, "Disabled")
430  field(ZRVL, "0")
431  field(ONST, "Diode")
432  field(ONVL, "1")
433  field(TWST, "Platinum RTD")
434  field(TWVL, "2")
435  field(THST, "NTC RTD")
436  field(THVL, "3")
437  field(FRST, "Thermocouple")
438  field(FRVL, "4")
439  field(FVST, "Capacitance")
440  field(FVVL, "5")
441 }
442 record(bi, "$(P):LS01:INTYPE0_AR") {
443  field(DESC, "Auto Range")
444  field(ZNAM, "Off")
445  field(ONAM, "On")
446 }
447 record(mbbi, "$(P):LS01:INTYPE0_R") {
448  field(DESC, "Range")
449  field(ZRST, "10 Ohm / 2.5V / 50mV")
450  field(ZRVL, "0")
451  field(ONST, "30 Ohm / 10V")
452  field(ONVL, "1")
453  field(TWST, "100 Ohm")
454  field(TWVL, "2")
455  field(THST, "300 Ohm")
456  field(THVL, "3")
457  field(FRST, "1 KOhm")
458  field(FRVL, "4")
459  field(FVST, "3 KOhm")
460  field(FVVL, "5")
461  field(SXST, "10 KOhm")
462  field(SXVL, "6")
463  field(SVST, "30 KOhm")
464  field(SVVL, "7")
465  field(EIST, "100 KOhm")
466  field(EIVL, "8")
467 }
468 record(bi, "$(P):LS01:INTYPE0_C") {
469  field(DESC, "Compensation")
470  field(ZNAM, "Off")
471  field(ONAM, "On")
472 }
473 record(mbbi, "$(P):LS01:INTYPE0_U") {
474  field(DESC, "Units")
475  field(ZRST, "None")
476  field(ZRVL, "0")
477  field(ONST, "Kelvin")
478  field(ONVL, "1")
479  field(TWST, "Celcius")
480  field(TWVL, "2")
481  field(THST, "Sensor")
482  field(THVL, "3")
483 }
484 
485 
486 
487 
488 # Template to provide the records required for an input.
489 # This makes use of the macros required by lakeshore336.template
490 # but also requires macros to specify the input channel and index.
491 # The index is to provide a way for the developer to use a different
492 # channel naming scheme.
493 #
494 # For some commands, I hard coded the last part of the record names into
495 # the protocol file. This seems the easiest way to deal with commands
496 # will lots of params returned back, and avoid problematic long INP fields.
497 # For the ZONE commands I used waveforms and subarrays, but that is not as simple.
498 #
499 # Macros:
500 # INPUT - A to D, or D1 to D5
501 # INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
502 # DISABLE - PV name to use for SDIS
503 
504 ##
505 ## Alarm summary record for input
506 ## This summarizes the software limits on the temperature readings,
507 ## the alarm status reading from the controller and the input reading status.
508 ##
509 record(calc, "$(P):LS01:ALARM1_SUMMARY_CALC") {
510  field(INPA, "$(P):LS01:KRDG1 CP MS")
511  field(INPB, "$(P):LS01:ALARM1_HIGH CP MS")
512  field(INPC, "$(P):LS01:ALARM1_LOW CP MS")
513  field(INPD, "$(P):LS01:RDGST1 CP MS")
514  field(CALC, "A")
515  field(FLNK, "$(P):LS01:ALARM1_SUMMARY_CALC2")
516  field(SDIS, "$(P):LS01:DISABLE_1")
517 }
518 
519 record(calcout, "$(P):LS01:ALARM1_SUMMARY_CALC2") {
520  field(INPA, "$(P):LS01:ALARM1_SUMMARY_CALC.STAT")
521  field(CALC, "A!=0?1:0")
522  field(DOPT, "Use CALC")
523  field(OOPT, "Every Time")
524  field(OUT, "$(P):LS01:ALARM1_SUMMARY PP")
525 }
526 
527 record(bi, "$(P):LS01:ALARM1_SUMMARY") {
528  field(ZNAM, "No Alarm")
529  field(ONAM, "Alarm")
530  field(OSV, "MAJOR")
531  field(PINI, "YES")
532  field(VAL, "0")
533  info(archive, "Monitor, 00:00:01, VAL")
534 }
535 
536 ##
537 ## If we disable polling this input, disable the alarm
538 ##
539 record(calcout, "$(P):LS01:ALARM1_SUMMARY_DISABLE") {
540  field(INPA, "$(P):LS01:DISABLE_1 CP")
541  field(CALC, "A==1?0:1")
542  field(DOPT, "Use CALC")
543  field(OOPT, "When Zero")
544  field(OUT, "$(P):LS01:ALARM1_SUMMARY.VAL PP")
545 }
546 
547 
548 ##
549 ## Read the temperature on channel 1 in Kelvin.
550 ##
551 record(ai, "$(P):LS01:KRDG1") {
552  field(DTYP, "stream")
553  field(SDIS, "$(P):LS01:DISABLE_1")
554  field(DESC, "Channel 1 Temperature")
555  field(INP, "@ls336.proto getKRDG(B) L0 0")
556  field(SCAN, "1 second")
557  field(PREC, "3")
558  field(EGU, "K")
559  field(HHSV,"MAJOR")
560  field(HSV, "MINOR")
561  field(LSV, "MINOR")
562  field(LLSV,"MAJOR")
563  field(HYST,"1.0")
564  field(HIHI,"1000")
565  field(HIGH,"1000")
566  field(LOW,"-1")
567  field(LOLO,"-1")
568  field(ADEL, "1")
569  field(MDEL, "0")
570  info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
571  info(archive, "Monitor, 00:00:01, VAL")
572 }
573 
574 ##
575 ## Read the raw voltage on channel 1.
576 ##
577 record(ai, "$(P):LS01:SRDG1") {
578  field(DTYP, "stream")
579  field(SDIS, "$(P):LS01:DISABLE_1")
580  field(INP, "@ls336.proto getSRDG(B) L0 0")
581  field(SCAN, "1 second")
582  field(PREC, "3")
583  field(EGU, "V")
584  field(ADEL, "1")
585  field(MDEL, "0")
586 }
587 
588 ##
589 ## Set sensor 1 name
590 ##
591 record(stringout, "$(P):LS01:INNAME_S1") {
592  field(DESC, "Input 1 Name")
593  field(DTYP, "stream")
594  field(SDIS, "$(P):LS01:DISABLE")
595  field(OUT, "@ls336.proto setINNAME(B) L0 0")
596  field(FLNK, "$(P):LS01:INNAME1.PROC CA")
597 }
598 
599 ##
600 ## Read input sensor 1 name
601 ##
602 record(stringin, "$(P):LS01:INNAME1") {
603  field(DTYP, "stream")
604  field(SDIS, "$(P):LS01:DISABLE")
605  field(INP, "@ls336.proto getINNAME(B) L0 0")
606  field(PINI, "YES")
607  field(SCAN, "Passive")
608 }
609 
610 ##
611 ## Read the high alarm status for input 1.
612 ## This also populates ALARM1_LOW
613 ##
614 record(bi, "$(P):LS01:ALARM1_HIGH") {
615  field(DTYP, "stream")
616  field(SDIS, "$(P):LS01:DISABLE_1")
617  field(INP, "@ls336.proto getALARMST(B,$(P):LS01:ALARM1_LOW) L0 0")
618  field(SCAN, "5 second")
619  field(ZNAM, "Off")
620  field(ONAM, "On")
621  field(OSV, "MAJOR")
622  info(archive, "Monitor, 00:00:01, VAL")
623 }
624 
625 ##
626 ## Read the low alarm status for input 1
627 ##
628 record(bi, "$(P):LS01:ALARM1_LOW") {
629  field(DTYP, "Soft Channel")
630  field(ZNAM, "Off")
631  field(ONAM, "On")
632  field(OSV, "MAJOR")
633  info(archive, "Monitor, 00:00:01, VAL")
634 }
635 
636 ##
637 ## Read the alarm parameters.
638 ## NOTE: the last part of the record name is hard coded into protocol file.
639 ##
640 record(bi, "$(P):LS01:ALARM1") {
641  field(DESC, "Read Alarm Params")
642  field(DTYP, "stream")
643  field(SDIS, "$(P):LS01:DISABLE_1")
644  field(INP, "@ls336.proto getALARM(B,$(P):LS01:ALARM1) L0 0")
645  field(SCAN, "5 second")
646 }
647 
648 ##
649 ## Read the rest of the alarm params.
650 ## NOTE: the last part of the record names are hard coded into protocol file.
651 ##
652 record(bi, "$(P):LS01:ALARM1_ONOFF") {
653  field(DESC, "Alarm Enabled")
654  field(ZNAM, "Disabled")
655  field(ONAM, "Enabled")
656 }
657 record(ai, "$(P):LS01:ALARM1_HIGHVAL") {
658  field(DESC, "Alarm High Value")
659  field(EGU, "K")
660 }
661 record(ai, "$(P):LS01:ALARM1_LOWVAL") {
662  field(DESC, "Alarm Low Value")
663  field(EGU, "K")
664 }
665 record(ai, "$(P):LS01:ALARM1_DB") {
666  field(DESC, "Alarm Deadband")
667  field(EGU, "K")
668 }
669 record(bi, "$(P):LS01:ALARM1_LE") {
670  field(DESC, "Alarm Latch Enable")
671  field(ZNAM, "Non Latching")
672  field(ONAM, "Latching")
673 }
674 record(bi, "$(P):LS01:ALARM1_AU") {
675  field(DESC, "Alarm Audible")
676  field(ZNAM, "Quiet")
677  field(ONAM, "Audible")
678 }
679 record(bi, "$(P):LS01:ALARM1_VIS") {
680  field(DESC, "Alarm Visible")
681  field(ZNAM, "Non Visible")
682  field(ONAM, "Visible")
683 }
684 
685 
686 ##
687 ## Read the input reading status
688 ##
689 record(mbbi, "$(P):LS01:RDGST1") {
690  field(DTYP, "stream")
691  field(SDIS, "$(P):LS01:DISABLE_1")
692  field(ZRST, "Valid")
693  field(ZRVL, "0")
694  field(ONST, "Invalid")
695  field(ONVL, "1")
696  field(TWST, "Temp Under")
697  field(TWVL, "16")
698  field(THST, "Temp Over")
699  field(THVL, "32")
700  field(FRST, "Sensor Zero")
701  field(FRVL, "64")
702  field(FVST, "Sensor Over")
703  field(FVVL, "128")
704  field(ONSV, "MAJOR")
705  field(TWSV, "MAJOR")
706  field(THSV, "MAJOR")
707  field(FRSV, "MAJOR")
708  field(FVSV, "MAJOR")
709  field(SCAN, "5 second")
710  field(INP, "@ls336.proto getRDGST(B) L0 0")
711  info(archive, "Monitor, 00:00:01, VAL")
712 }
713 
714 ##
715 ## Read the input curve number
716 ##
717 record(longin, "$(P):LS01:INCRV1") {
718  field(DTYP, "stream")
719  field(SDIS, "$(P):LS01:DISABLE_1")
720  field(SCAN, "5 second")
721  field(INP, "@ls336.proto getINCRV(B) L0 0")
722 }
723 
724 
725 ##
726 ## Read the input type information.
727 ## NOTE: the last part of the record name is hard coded into protocol file.
728 ##
729 record(bi, "$(P):LS01:INTYPE1") {
730  field(DESC, "Read Input Type Params")
731  field(DTYP, "stream")
732  field(SDIS, "$(P):LS01:DISABLE_1")
733  field(INP, "@ls336.proto getINTYPE(B,$(P):LS01:INTYPE1) L0 0")
734  field(SCAN, "5 second")
735 }
736 
737 ##
738 ## Read the rest of the input type params.
739 ## NOTE: the last part of the record names are hard coded into protocol file.
740 ##
741 record(mbbi, "$(P):LS01:INTYPE1_S") {
742  field(DESC, "Sensor Type")
743  field(ZRST, "Disabled")
744  field(ZRVL, "0")
745  field(ONST, "Diode")
746  field(ONVL, "1")
747  field(TWST, "Platinum RTD")
748  field(TWVL, "2")
749  field(THST, "NTC RTD")
750  field(THVL, "3")
751  field(FRST, "Thermocouple")
752  field(FRVL, "4")
753  field(FVST, "Capacitance")
754  field(FVVL, "5")
755 }
756 record(bi, "$(P):LS01:INTYPE1_AR") {
757  field(DESC, "Auto Range")
758  field(ZNAM, "Off")
759  field(ONAM, "On")
760 }
761 record(mbbi, "$(P):LS01:INTYPE1_R") {
762  field(DESC, "Range")
763  field(ZRST, "10 Ohm / 2.5V / 50mV")
764  field(ZRVL, "0")
765  field(ONST, "30 Ohm / 10V")
766  field(ONVL, "1")
767  field(TWST, "100 Ohm")
768  field(TWVL, "2")
769  field(THST, "300 Ohm")
770  field(THVL, "3")
771  field(FRST, "1 KOhm")
772  field(FRVL, "4")
773  field(FVST, "3 KOhm")
774  field(FVVL, "5")
775  field(SXST, "10 KOhm")
776  field(SXVL, "6")
777  field(SVST, "30 KOhm")
778  field(SVVL, "7")
779  field(EIST, "100 KOhm")
780  field(EIVL, "8")
781 }
782 record(bi, "$(P):LS01:INTYPE1_C") {
783  field(DESC, "Compensation")
784  field(ZNAM, "Off")
785  field(ONAM, "On")
786 }
787 record(mbbi, "$(P):LS01:INTYPE1_U") {
788  field(DESC, "Units")
789  field(ZRST, "None")
790  field(ZRVL, "0")
791  field(ONST, "Kelvin")
792  field(ONVL, "1")
793  field(TWST, "Celcius")
794  field(TWVL, "2")
795  field(THST, "Sensor")
796  field(THVL, "3")
797 }
798 
799 
800 
801 
802 # Template to provide the records required for an input.
803 # This makes use of the macros required by lakeshore336.template
804 # but also requires macros to specify the input channel and index.
805 # The index is to provide a way for the developer to use a different
806 # channel naming scheme.
807 #
808 # For some commands, I hard coded the last part of the record names into
809 # the protocol file. This seems the easiest way to deal with commands
810 # will lots of params returned back, and avoid problematic long INP fields.
811 # For the ZONE commands I used waveforms and subarrays, but that is not as simple.
812 #
813 # Macros:
814 # INPUT - A to D, or D1 to D5
815 # INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
816 # DISABLE - PV name to use for SDIS
817 
818 ##
819 ## Alarm summary record for input
820 ## This summarizes the software limits on the temperature readings,
821 ## the alarm status reading from the controller and the input reading status.
822 ##
823 record(calc, "$(P):LS01:ALARM2_SUMMARY_CALC") {
824  field(INPA, "$(P):LS01:KRDG2 CP MS")
825  field(INPB, "$(P):LS01:ALARM2_HIGH CP MS")
826  field(INPC, "$(P):LS01:ALARM2_LOW CP MS")
827  field(INPD, "$(P):LS01:RDGST2 CP MS")
828  field(CALC, "A")
829  field(FLNK, "$(P):LS01:ALARM2_SUMMARY_CALC2")
830  field(SDIS, "$(P):LS01:DISABLE_2")
831 }
832 
833 record(calcout, "$(P):LS01:ALARM2_SUMMARY_CALC2") {
834  field(INPA, "$(P):LS01:ALARM2_SUMMARY_CALC.STAT")
835  field(CALC, "A!=0?1:0")
836  field(DOPT, "Use CALC")
837  field(OOPT, "Every Time")
838  field(OUT, "$(P):LS01:ALARM2_SUMMARY PP")
839 }
840 
841 record(bi, "$(P):LS01:ALARM2_SUMMARY") {
842  field(ZNAM, "No Alarm")
843  field(ONAM, "Alarm")
844  field(OSV, "MAJOR")
845  field(PINI, "YES")
846  field(VAL, "0")
847  info(archive, "Monitor, 00:00:01, VAL")
848 }
849 
850 ##
851 ## If we disable polling this input, disable the alarm
852 ##
853 record(calcout, "$(P):LS01:ALARM2_SUMMARY_DISABLE") {
854  field(INPA, "$(P):LS01:DISABLE_2 CP")
855  field(CALC, "A==1?0:1")
856  field(DOPT, "Use CALC")
857  field(OOPT, "When Zero")
858  field(OUT, "$(P):LS01:ALARM2_SUMMARY.VAL PP")
859 }
860 
861 
862 ##
863 ## Read the temperature on channel 2 in Kelvin.
864 ##
865 record(ai, "$(P):LS01:KRDG2") {
866  field(DTYP, "stream")
867  field(SDIS, "$(P):LS01:DISABLE_2")
868  field(DESC, "Channel 2 Temperature")
869  field(INP, "@ls336.proto getKRDG(C) L0 0")
870  field(SCAN, "1 second")
871  field(PREC, "3")
872  field(EGU, "K")
873  field(HHSV,"MAJOR")
874  field(HSV, "MINOR")
875  field(LSV, "MINOR")
876  field(LLSV,"MAJOR")
877  field(HYST,"1.0")
878  field(HIHI,"1000")
879  field(HIGH,"1000")
880  field(LOW,"-1")
881  field(LOLO,"-1")
882  field(ADEL, "1")
883  field(MDEL, "0")
884  info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
885  info(archive, "Monitor, 00:00:01, VAL")
886 }
887 
888 ##
889 ## Read the raw voltage on channel 2.
890 ##
891 record(ai, "$(P):LS01:SRDG2") {
892  field(DTYP, "stream")
893  field(SDIS, "$(P):LS01:DISABLE_2")
894  field(INP, "@ls336.proto getSRDG(C) L0 0")
895  field(SCAN, "1 second")
896  field(PREC, "3")
897  field(EGU, "V")
898  field(ADEL, "1")
899  field(MDEL, "0")
900 }
901 
902 ##
903 ## Set sensor 2 name
904 ##
905 record(stringout, "$(P):LS01:INNAME_S2") {
906  field(DESC, "Input 2 Name")
907  field(DTYP, "stream")
908  field(SDIS, "$(P):LS01:DISABLE")
909  field(OUT, "@ls336.proto setINNAME(C) L0 0")
910  field(FLNK, "$(P):LS01:INNAME2.PROC CA")
911 }
912 
913 ##
914 ## Read input sensor 2 name
915 ##
916 record(stringin, "$(P):LS01:INNAME2") {
917  field(DTYP, "stream")
918  field(SDIS, "$(P):LS01:DISABLE")
919  field(INP, "@ls336.proto getINNAME(C) L0 0")
920  field(PINI, "YES")
921  field(SCAN, "Passive")
922 }
923 
924 ##
925 ## Read the high alarm status for input 2.
926 ## This also populates ALARM2_LOW
927 ##
928 record(bi, "$(P):LS01:ALARM2_HIGH") {
929  field(DTYP, "stream")
930  field(SDIS, "$(P):LS01:DISABLE_2")
931  field(INP, "@ls336.proto getALARMST(C,$(P):LS01:ALARM2_LOW) L0 0")
932  field(SCAN, "5 second")
933  field(ZNAM, "Off")
934  field(ONAM, "On")
935  field(OSV, "MAJOR")
936  info(archive, "Monitor, 00:00:01, VAL")
937 }
938 
939 ##
940 ## Read the low alarm status for input 2
941 ##
942 record(bi, "$(P):LS01:ALARM2_LOW") {
943  field(DTYP, "Soft Channel")
944  field(ZNAM, "Off")
945  field(ONAM, "On")
946  field(OSV, "MAJOR")
947  info(archive, "Monitor, 00:00:01, VAL")
948 }
949 
950 ##
951 ## Read the alarm parameters.
952 ## NOTE: the last part of the record name is hard coded into protocol file.
953 ##
954 record(bi, "$(P):LS01:ALARM2") {
955  field(DESC, "Read Alarm Params")
956  field(DTYP, "stream")
957  field(SDIS, "$(P):LS01:DISABLE_2")
958  field(INP, "@ls336.proto getALARM(C,$(P):LS01:ALARM2) L0 0")
959  field(SCAN, "5 second")
960 }
961 
962 ##
963 ## Read the rest of the alarm params.
964 ## NOTE: the last part of the record names are hard coded into protocol file.
965 ##
966 record(bi, "$(P):LS01:ALARM2_ONOFF") {
967  field(DESC, "Alarm Enabled")
968  field(ZNAM, "Disabled")
969  field(ONAM, "Enabled")
970 }
971 record(ai, "$(P):LS01:ALARM2_HIGHVAL") {
972  field(DESC, "Alarm High Value")
973  field(EGU, "K")
974 }
975 record(ai, "$(P):LS01:ALARM2_LOWVAL") {
976  field(DESC, "Alarm Low Value")
977  field(EGU, "K")
978 }
979 record(ai, "$(P):LS01:ALARM2_DB") {
980  field(DESC, "Alarm Deadband")
981  field(EGU, "K")
982 }
983 record(bi, "$(P):LS01:ALARM2_LE") {
984  field(DESC, "Alarm Latch Enable")
985  field(ZNAM, "Non Latching")
986  field(ONAM, "Latching")
987 }
988 record(bi, "$(P):LS01:ALARM2_AU") {
989  field(DESC, "Alarm Audible")
990  field(ZNAM, "Quiet")
991  field(ONAM, "Audible")
992 }
993 record(bi, "$(P):LS01:ALARM2_VIS") {
994  field(DESC, "Alarm Visible")
995  field(ZNAM, "Non Visible")
996  field(ONAM, "Visible")
997 }
998 
999 
1000 ##
1001 ## Read the input reading status
1002 ##
1003 record(mbbi, "$(P):LS01:RDGST2") {
1004  field(DTYP, "stream")
1005  field(SDIS, "$(P):LS01:DISABLE_2")
1006  field(ZRST, "Valid")
1007  field(ZRVL, "0")
1008  field(ONST, "Invalid")
1009  field(ONVL, "1")
1010  field(TWST, "Temp Under")
1011  field(TWVL, "16")
1012  field(THST, "Temp Over")
1013  field(THVL, "32")
1014  field(FRST, "Sensor Zero")
1015  field(FRVL, "64")
1016  field(FVST, "Sensor Over")
1017  field(FVVL, "128")
1018  field(ONSV, "MAJOR")
1019  field(TWSV, "MAJOR")
1020  field(THSV, "MAJOR")
1021  field(FRSV, "MAJOR")
1022  field(FVSV, "MAJOR")
1023  field(SCAN, "5 second")
1024  field(INP, "@ls336.proto getRDGST(C) L0 0")
1025  info(archive, "Monitor, 00:00:01, VAL")
1026 }
1027 
1028 ##
1029 ## Read the input curve number
1030 ##
1031 record(longin, "$(P):LS01:INCRV2") {
1032  field(DTYP, "stream")
1033  field(SDIS, "$(P):LS01:DISABLE_2")
1034  field(SCAN, "5 second")
1035  field(INP, "@ls336.proto getINCRV(C) L0 0")
1036 }
1037 
1038 
1039 ##
1040 ## Read the input type information.
1041 ## NOTE: the last part of the record name is hard coded into protocol file.
1042 ##
1043 record(bi, "$(P):LS01:INTYPE2") {
1044  field(DESC, "Read Input Type Params")
1045  field(DTYP, "stream")
1046  field(SDIS, "$(P):LS01:DISABLE_2")
1047  field(INP, "@ls336.proto getINTYPE(C,$(P):LS01:INTYPE2) L0 0")
1048  field(SCAN, "5 second")
1049 }
1050 
1051 ##
1052 ## Read the rest of the input type params.
1053 ## NOTE: the last part of the record names are hard coded into protocol file.
1054 ##
1055 record(mbbi, "$(P):LS01:INTYPE2_S") {
1056  field(DESC, "Sensor Type")
1057  field(ZRST, "Disabled")
1058  field(ZRVL, "0")
1059  field(ONST, "Diode")
1060  field(ONVL, "1")
1061  field(TWST, "Platinum RTD")
1062  field(TWVL, "2")
1063  field(THST, "NTC RTD")
1064  field(THVL, "3")
1065  field(FRST, "Thermocouple")
1066  field(FRVL, "4")
1067  field(FVST, "Capacitance")
1068  field(FVVL, "5")
1069 }
1070 record(bi, "$(P):LS01:INTYPE2_AR") {
1071  field(DESC, "Auto Range")
1072  field(ZNAM, "Off")
1073  field(ONAM, "On")
1074 }
1075 record(mbbi, "$(P):LS01:INTYPE2_R") {
1076  field(DESC, "Range")
1077  field(ZRST, "10 Ohm / 2.5V / 50mV")
1078  field(ZRVL, "0")
1079  field(ONST, "30 Ohm / 10V")
1080  field(ONVL, "1")
1081  field(TWST, "100 Ohm")
1082  field(TWVL, "2")
1083  field(THST, "300 Ohm")
1084  field(THVL, "3")
1085  field(FRST, "1 KOhm")
1086  field(FRVL, "4")
1087  field(FVST, "3 KOhm")
1088  field(FVVL, "5")
1089  field(SXST, "10 KOhm")
1090  field(SXVL, "6")
1091  field(SVST, "30 KOhm")
1092  field(SVVL, "7")
1093  field(EIST, "100 KOhm")
1094  field(EIVL, "8")
1095 }
1096 record(bi, "$(P):LS01:INTYPE2_C") {
1097  field(DESC, "Compensation")
1098  field(ZNAM, "Off")
1099  field(ONAM, "On")
1100 }
1101 record(mbbi, "$(P):LS01:INTYPE2_U") {
1102  field(DESC, "Units")
1103  field(ZRST, "None")
1104  field(ZRVL, "0")
1105  field(ONST, "Kelvin")
1106  field(ONVL, "1")
1107  field(TWST, "Celcius")
1108  field(TWVL, "2")
1109  field(THST, "Sensor")
1110  field(THVL, "3")
1111 }
1112 
1113 
1114 
1115 
1116 # Template to provide the records required for an input.
1117 # This makes use of the macros required by lakeshore336.template
1118 # but also requires macros to specify the input channel and index.
1119 # The index is to provide a way for the developer to use a different
1120 # channel naming scheme.
1121 #
1122 # For some commands, I hard coded the last part of the record names into
1123 # the protocol file. This seems the easiest way to deal with commands
1124 # will lots of params returned back, and avoid problematic long INP fields.
1125 # For the ZONE commands I used waveforms and subarrays, but that is not as simple.
1126 #
1127 # Macros:
1128 # INPUT - A to D, or D1 to D5
1129 # INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
1130 # DISABLE - PV name to use for SDIS
1131 
1132 ##
1133 ## Alarm summary record for input
1134 ## This summarizes the software limits on the temperature readings,
1135 ## the alarm status reading from the controller and the input reading status.
1136 ##
1137 record(calc, "$(P):LS01:ALARM3_SUMMARY_CALC") {
1138  field(INPA, "$(P):LS01:KRDG3 CP MS")
1139  field(INPB, "$(P):LS01:ALARM3_HIGH CP MS")
1140  field(INPC, "$(P):LS01:ALARM3_LOW CP MS")
1141  field(INPD, "$(P):LS01:RDGST3 CP MS")
1142  field(CALC, "A")
1143  field(FLNK, "$(P):LS01:ALARM3_SUMMARY_CALC2")
1144  field(SDIS, "$(P):LS01:DISABLE_3")
1145 }
1146 
1147 record(calcout, "$(P):LS01:ALARM3_SUMMARY_CALC2") {
1148  field(INPA, "$(P):LS01:ALARM3_SUMMARY_CALC.STAT")
1149  field(CALC, "A!=0?1:0")
1150  field(DOPT, "Use CALC")
1151  field(OOPT, "Every Time")
1152  field(OUT, "$(P):LS01:ALARM3_SUMMARY PP")
1153 }
1154 
1155 record(bi, "$(P):LS01:ALARM3_SUMMARY") {
1156  field(ZNAM, "No Alarm")
1157  field(ONAM, "Alarm")
1158  field(OSV, "MAJOR")
1159  field(PINI, "YES")
1160  field(VAL, "0")
1161  info(archive, "Monitor, 00:00:01, VAL")
1162 }
1163 
1164 ##
1165 ## If we disable polling this input, disable the alarm
1166 ##
1167 record(calcout, "$(P):LS01:ALARM3_SUMMARY_DISABLE") {
1168  field(INPA, "$(P):LS01:DISABLE_3 CP")
1169  field(CALC, "A==1?0:1")
1170  field(DOPT, "Use CALC")
1171  field(OOPT, "When Zero")
1172  field(OUT, "$(P):LS01:ALARM3_SUMMARY.VAL PP")
1173 }
1174 
1175 
1176 ##
1177 ## Read the temperature on channel 3 in Kelvin.
1178 ##
1179 record(ai, "$(P):LS01:KRDG3") {
1180  field(DTYP, "stream")
1181  field(SDIS, "$(P):LS01:DISABLE_3")
1182  field(DESC, "Channel 3 Temperature")
1183  field(INP, "@ls336.proto getKRDG(D) L0 0")
1184  field(SCAN, "1 second")
1185  field(PREC, "3")
1186  field(EGU, "K")
1187  field(HHSV,"MAJOR")
1188  field(HSV, "MINOR")
1189  field(LSV, "MINOR")
1190  field(LLSV,"MAJOR")
1191  field(HYST,"1.0")
1192  field(HIHI,"1000")
1193  field(HIGH,"1000")
1194  field(LOW,"-1")
1195  field(LOLO,"-1")
1196  field(ADEL, "1")
1197  field(MDEL, "0")
1198  info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
1199  info(archive, "Monitor, 00:00:01, VAL")
1200 }
1201 
1202 ##
1203 ## Read the raw voltage on channel 3.
1204 ##
1205 record(ai, "$(P):LS01:SRDG3") {
1206  field(DTYP, "stream")
1207  field(SDIS, "$(P):LS01:DISABLE_3")
1208  field(INP, "@ls336.proto getSRDG(D) L0 0")
1209  field(SCAN, "1 second")
1210  field(PREC, "3")
1211  field(EGU, "V")
1212  field(ADEL, "1")
1213  field(MDEL, "0")
1214 }
1215 
1216 ##
1217 ## Set sensor 3 name
1218 ##
1219 record(stringout, "$(P):LS01:INNAME_S3") {
1220  field(DESC, "Input 3 Name")
1221  field(DTYP, "stream")
1222  field(SDIS, "$(P):LS01:DISABLE")
1223  field(OUT, "@ls336.proto setINNAME(D) L0 0")
1224  field(FLNK, "$(P):LS01:INNAME3.PROC CA")
1225 }
1226 
1227 ##
1228 ## Read input sensor 3 name
1229 ##
1230 record(stringin, "$(P):LS01:INNAME3") {
1231  field(DTYP, "stream")
1232  field(SDIS, "$(P):LS01:DISABLE")
1233  field(INP, "@ls336.proto getINNAME(D) L0 0")
1234  field(PINI, "YES")
1235  field(SCAN, "Passive")
1236 }
1237 
1238 ##
1239 ## Read the high alarm status for input 3.
1240 ## This also populates ALARM3_LOW
1241 ##
1242 record(bi, "$(P):LS01:ALARM3_HIGH") {
1243  field(DTYP, "stream")
1244  field(SDIS, "$(P):LS01:DISABLE_3")
1245  field(INP, "@ls336.proto getALARMST(D,$(P):LS01:ALARM3_LOW) L0 0")
1246  field(SCAN, "5 second")
1247  field(ZNAM, "Off")
1248  field(ONAM, "On")
1249  field(OSV, "MAJOR")
1250  info(archive, "Monitor, 00:00:01, VAL")
1251 }
1252 
1253 ##
1254 ## Read the low alarm status for input 3
1255 ##
1256 record(bi, "$(P):LS01:ALARM3_LOW") {
1257  field(DTYP, "Soft Channel")
1258  field(ZNAM, "Off")
1259  field(ONAM, "On")
1260  field(OSV, "MAJOR")
1261  info(archive, "Monitor, 00:00:01, VAL")
1262 }
1263 
1264 ##
1265 ## Read the alarm parameters.
1266 ## NOTE: the last part of the record name is hard coded into protocol file.
1267 ##
1268 record(bi, "$(P):LS01:ALARM3") {
1269  field(DESC, "Read Alarm Params")
1270  field(DTYP, "stream")
1271  field(SDIS, "$(P):LS01:DISABLE_3")
1272  field(INP, "@ls336.proto getALARM(D,$(P):LS01:ALARM3) L0 0")
1273  field(SCAN, "5 second")
1274 }
1275 
1276 ##
1277 ## Read the rest of the alarm params.
1278 ## NOTE: the last part of the record names are hard coded into protocol file.
1279 ##
1280 record(bi, "$(P):LS01:ALARM3_ONOFF") {
1281  field(DESC, "Alarm Enabled")
1282  field(ZNAM, "Disabled")
1283  field(ONAM, "Enabled")
1284 }
1285 record(ai, "$(P):LS01:ALARM3_HIGHVAL") {
1286  field(DESC, "Alarm High Value")
1287  field(EGU, "K")
1288 }
1289 record(ai, "$(P):LS01:ALARM3_LOWVAL") {
1290  field(DESC, "Alarm Low Value")
1291  field(EGU, "K")
1292 }
1293 record(ai, "$(P):LS01:ALARM3_DB") {
1294  field(DESC, "Alarm Deadband")
1295  field(EGU, "K")
1296 }
1297 record(bi, "$(P):LS01:ALARM3_LE") {
1298  field(DESC, "Alarm Latch Enable")
1299  field(ZNAM, "Non Latching")
1300  field(ONAM, "Latching")
1301 }
1302 record(bi, "$(P):LS01:ALARM3_AU") {
1303  field(DESC, "Alarm Audible")
1304  field(ZNAM, "Quiet")
1305  field(ONAM, "Audible")
1306 }
1307 record(bi, "$(P):LS01:ALARM3_VIS") {
1308  field(DESC, "Alarm Visible")
1309  field(ZNAM, "Non Visible")
1310  field(ONAM, "Visible")
1311 }
1312 
1313 
1314 ##
1315 ## Read the input reading status
1316 ##
1317 record(mbbi, "$(P):LS01:RDGST3") {
1318  field(DTYP, "stream")
1319  field(SDIS, "$(P):LS01:DISABLE_3")
1320  field(ZRST, "Valid")
1321  field(ZRVL, "0")
1322  field(ONST, "Invalid")
1323  field(ONVL, "1")
1324  field(TWST, "Temp Under")
1325  field(TWVL, "16")
1326  field(THST, "Temp Over")
1327  field(THVL, "32")
1328  field(FRST, "Sensor Zero")
1329  field(FRVL, "64")
1330  field(FVST, "Sensor Over")
1331  field(FVVL, "128")
1332  field(ONSV, "MAJOR")
1333  field(TWSV, "MAJOR")
1334  field(THSV, "MAJOR")
1335  field(FRSV, "MAJOR")
1336  field(FVSV, "MAJOR")
1337  field(SCAN, "5 second")
1338  field(INP, "@ls336.proto getRDGST(D) L0 0")
1339  info(archive, "Monitor, 00:00:01, VAL")
1340 }
1341 
1342 ##
1343 ## Read the input curve number
1344 ##
1345 record(longin, "$(P):LS01:INCRV3") {
1346  field(DTYP, "stream")
1347  field(SDIS, "$(P):LS01:DISABLE_3")
1348  field(SCAN, "5 second")
1349  field(INP, "@ls336.proto getINCRV(D) L0 0")
1350 }
1351 
1352 
1353 ##
1354 ## Read the input type information.
1355 ## NOTE: the last part of the record name is hard coded into protocol file.
1356 ##
1357 record(bi, "$(P):LS01:INTYPE3") {
1358  field(DESC, "Read Input Type Params")
1359  field(DTYP, "stream")
1360  field(SDIS, "$(P):LS01:DISABLE_3")
1361  field(INP, "@ls336.proto getINTYPE(D,$(P):LS01:INTYPE3) L0 0")
1362  field(SCAN, "5 second")
1363 }
1364 
1365 ##
1366 ## Read the rest of the input type params.
1367 ## NOTE: the last part of the record names are hard coded into protocol file.
1368 ##
1369 record(mbbi, "$(P):LS01:INTYPE3_S") {
1370  field(DESC, "Sensor Type")
1371  field(ZRST, "Disabled")
1372  field(ZRVL, "0")
1373  field(ONST, "Diode")
1374  field(ONVL, "1")
1375  field(TWST, "Platinum RTD")
1376  field(TWVL, "2")
1377  field(THST, "NTC RTD")
1378  field(THVL, "3")
1379  field(FRST, "Thermocouple")
1380  field(FRVL, "4")
1381  field(FVST, "Capacitance")
1382  field(FVVL, "5")
1383 }
1384 record(bi, "$(P):LS01:INTYPE3_AR") {
1385  field(DESC, "Auto Range")
1386  field(ZNAM, "Off")
1387  field(ONAM, "On")
1388 }
1389 record(mbbi, "$(P):LS01:INTYPE3_R") {
1390  field(DESC, "Range")
1391  field(ZRST, "10 Ohm / 2.5V / 50mV")
1392  field(ZRVL, "0")
1393  field(ONST, "30 Ohm / 10V")
1394  field(ONVL, "1")
1395  field(TWST, "100 Ohm")
1396  field(TWVL, "2")
1397  field(THST, "300 Ohm")
1398  field(THVL, "3")
1399  field(FRST, "1 KOhm")
1400  field(FRVL, "4")
1401  field(FVST, "3 KOhm")
1402  field(FVVL, "5")
1403  field(SXST, "10 KOhm")
1404  field(SXVL, "6")
1405  field(SVST, "30 KOhm")
1406  field(SVVL, "7")
1407  field(EIST, "100 KOhm")
1408  field(EIVL, "8")
1409 }
1410 record(bi, "$(P):LS01:INTYPE3_C") {
1411  field(DESC, "Compensation")
1412  field(ZNAM, "Off")
1413  field(ONAM, "On")
1414 }
1415 record(mbbi, "$(P):LS01:INTYPE3_U") {
1416  field(DESC, "Units")
1417  field(ZRST, "None")
1418  field(ZRVL, "0")
1419  field(ONST, "Kelvin")
1420  field(ONVL, "1")
1421  field(TWST, "Celcius")
1422  field(TWVL, "2")
1423  field(THST, "Sensor")
1424  field(THVL, "3")
1425 }
1426 
1427 
1428 
1429 ################################################################
1430 
1431 ################################################################
1432 # Include 3062 option
1433 ################################################################
1434 
1435 
1436 # This file provides records to read inputs D1 to D5
1437 # that are provided by the 3062 option. This option card
1438 # can be used with both the 336 and 350. By default these
1439 # records are disabled (there is a record to control this).
1440 
1441 # This file can be included in the lakeshore336.template
1442 # so does not need to be instantiated separately. It will
1443 # make use of the macros used in lakeshore336.template.
1444 
1445 # Seperate polling records to control which inputs we are
1446 # reading. If an input is not being polled, it won't
1447 # affect the top level lakeshore alarm.
1448 
1449 record(bo, "$(P):LS01:DISABLE_D2") {
1450  field(DESC, "Disable D2 polling")
1451  field(PINI, "YES")
1452  field(VAL, "1")
1453  field(OMSL, "supervisory")
1454  field(ZNAM, "Enabled")
1455  field(ONAM, "Disabled")
1456  field(ZSV, "NO_ALARM")
1457  field(OSV, "MINOR")
1458  info(autosaveFields, "VAL")
1459 }
1460 
1461 record(bo, "$(P):LS01:DISABLE_D3") {
1462  field(DESC, "Disable D3 polling")
1463  field(PINI, "YES")
1464  field(VAL, "1")
1465  field(OMSL, "supervisory")
1466  field(ZNAM, "Enabled")
1467  field(ONAM, "Disabled")
1468  field(ZSV, "NO_ALARM")
1469  field(OSV, "MINOR")
1470  info(autosaveFields, "VAL")
1471 }
1472 
1473 record(bo, "$(P):LS01:DISABLE_D4") {
1474  field(DESC, "Disable D4 polling")
1475  field(PINI, "YES")
1476  field(VAL, "1")
1477  field(OMSL, "supervisory")
1478  field(ZNAM, "Enabled")
1479  field(ONAM, "Disabled")
1480  field(ZSV, "NO_ALARM")
1481  field(OSV, "MINOR")
1482  info(autosaveFields, "VAL")
1483 }
1484 
1485 record(bo, "$(P):LS01:DISABLE_D5") {
1486  field(DESC, "Disable D5 polling")
1487  field(PINI, "YES")
1488  field(VAL, "1")
1489  field(OMSL, "supervisory")
1490  field(ZNAM, "Enabled")
1491  field(ONAM, "Disabled")
1492  field(ZSV, "NO_ALARM")
1493  field(OSV, "MINOR")
1494  info(autosaveFields, "VAL")
1495 }
1496 
1497 
1498 # Template to provide the records required for an input.
1499 # This makes use of the macros required by lakeshore336.template
1500 # but also requires macros to specify the input channel and index.
1501 # The index is to provide a way for the developer to use a different
1502 # channel naming scheme.
1503 #
1504 # For some commands, I hard coded the last part of the record names into
1505 # the protocol file. This seems the easiest way to deal with commands
1506 # will lots of params returned back, and avoid problematic long INP fields.
1507 # For the ZONE commands I used waveforms and subarrays, but that is not as simple.
1508 #
1509 # Macros:
1510 # INPUT - A to D, or D1 to D5
1511 # INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
1512 # DISABLE - PV name to use for SDIS
1513 
1514 ##
1515 ## Alarm summary record for input
1516 ## This summarizes the software limits on the temperature readings,
1517 ## the alarm status reading from the controller and the input reading status.
1518 ##
1519 record(calc, "$(P):LS01:ALARMD2_SUMMARY_CALC") {
1520  field(INPA, "$(P):LS01:KRDGD2 CP MS")
1521  field(INPB, "$(P):LS01:ALARMD2_HIGH CP MS")
1522  field(INPC, "$(P):LS01:ALARMD2_LOW CP MS")
1523  field(INPD, "$(P):LS01:RDGSTD2 CP MS")
1524  field(CALC, "A")
1525  field(FLNK, "$(P):LS01:ALARMD2_SUMMARY_CALC2")
1526  field(SDIS, "$(P):LS01:DISABLE_D2")
1527 }
1528 
1529 record(calcout, "$(P):LS01:ALARMD2_SUMMARY_CALC2") {
1530  field(INPA, "$(P):LS01:ALARMD2_SUMMARY_CALC.STAT")
1531  field(CALC, "A!=0?1:0")
1532  field(DOPT, "Use CALC")
1533  field(OOPT, "Every Time")
1534  field(OUT, "$(P):LS01:ALARMD2_SUMMARY PP")
1535 }
1536 
1537 record(bi, "$(P):LS01:ALARMD2_SUMMARY") {
1538  field(ZNAM, "No Alarm")
1539  field(ONAM, "Alarm")
1540  field(OSV, "MAJOR")
1541  field(PINI, "YES")
1542  field(VAL, "0")
1543  info(archive, "Monitor, 00:00:01, VAL")
1544 }
1545 
1546 ##
1547 ## If we disable polling this input, disable the alarm
1548 ##
1549 record(calcout, "$(P):LS01:ALARMD2_SUMMARY_DISABLE") {
1550  field(INPA, "$(P):LS01:DISABLE_D2 CP")
1551  field(CALC, "A==1?0:1")
1552  field(DOPT, "Use CALC")
1553  field(OOPT, "When Zero")
1554  field(OUT, "$(P):LS01:ALARMD2_SUMMARY.VAL PP")
1555 }
1556 
1557 
1558 ##
1559 ## Read the temperature on channel D2 in Kelvin.
1560 ##
1561 record(ai, "$(P):LS01:KRDGD2") {
1562  field(DTYP, "stream")
1563  field(SDIS, "$(P):LS01:DISABLE_D2")
1564  field(DESC, "Channel D2 Temperature")
1565  field(INP, "@ls336.proto getKRDG(D2) L0 0")
1566  field(SCAN, "1 second")
1567  field(PREC, "3")
1568  field(EGU, "K")
1569  field(HHSV,"MAJOR")
1570  field(HSV, "MINOR")
1571  field(LSV, "MINOR")
1572  field(LLSV,"MAJOR")
1573  field(HYST,"1.0")
1574  field(HIHI,"1000")
1575  field(HIGH,"1000")
1576  field(LOW,"-1")
1577  field(LOLO,"-1")
1578  field(ADEL, "1")
1579  field(MDEL, "0")
1580  info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
1581  info(archive, "Monitor, 00:00:01, VAL")
1582 }
1583 
1584 ##
1585 ## Read the raw voltage on channel D2.
1586 ##
1587 record(ai, "$(P):LS01:SRDGD2") {
1588  field(DTYP, "stream")
1589  field(SDIS, "$(P):LS01:DISABLE_D2")
1590  field(INP, "@ls336.proto getSRDG(D2) L0 0")
1591  field(SCAN, "1 second")
1592  field(PREC, "3")
1593  field(EGU, "V")
1594  field(ADEL, "1")
1595  field(MDEL, "0")
1596 }
1597 
1598 ##
1599 ## Set sensor D2 name
1600 ##
1601 record(stringout, "$(P):LS01:INNAME_SD2") {
1602  field(DESC, "Input D2 Name")
1603  field(DTYP, "stream")
1604  field(SDIS, "$(P):LS01:DISABLE")
1605  field(OUT, "@ls336.proto setINNAME(D2) L0 0")
1606  field(FLNK, "$(P):LS01:INNAMED2.PROC CA")
1607 }
1608 
1609 ##
1610 ## Read input sensor D2 name
1611 ##
1612 record(stringin, "$(P):LS01:INNAMED2") {
1613  field(DTYP, "stream")
1614  field(SDIS, "$(P):LS01:DISABLE")
1615  field(INP, "@ls336.proto getINNAME(D2) L0 0")
1616  field(PINI, "YES")
1617  field(SCAN, "Passive")
1618 }
1619 
1620 ##
1621 ## Read the high alarm status for input D2.
1622 ## This also populates ALARMD2_LOW
1623 ##
1624 record(bi, "$(P):LS01:ALARMD2_HIGH") {
1625  field(DTYP, "stream")
1626  field(SDIS, "$(P):LS01:DISABLE_D2")
1627  field(INP, "@ls336.proto getALARMST(D2,$(P):LS01:ALARMD2_LOW) L0 0")
1628  field(SCAN, "5 second")
1629  field(ZNAM, "Off")
1630  field(ONAM, "On")
1631  field(OSV, "MAJOR")
1632  info(archive, "Monitor, 00:00:01, VAL")
1633 }
1634 
1635 ##
1636 ## Read the low alarm status for input D2
1637 ##
1638 record(bi, "$(P):LS01:ALARMD2_LOW") {
1639  field(DTYP, "Soft Channel")
1640  field(ZNAM, "Off")
1641  field(ONAM, "On")
1642  field(OSV, "MAJOR")
1643  info(archive, "Monitor, 00:00:01, VAL")
1644 }
1645 
1646 ##
1647 ## Read the alarm parameters.
1648 ## NOTE: the last part of the record name is hard coded into protocol file.
1649 ##
1650 record(bi, "$(P):LS01:ALARMD2") {
1651  field(DESC, "Read Alarm Params")
1652  field(DTYP, "stream")
1653  field(SDIS, "$(P):LS01:DISABLE_D2")
1654  field(INP, "@ls336.proto getALARM(D2,$(P):LS01:ALARMD2) L0 0")
1655  field(SCAN, "5 second")
1656 }
1657 
1658 ##
1659 ## Read the rest of the alarm params.
1660 ## NOTE: the last part of the record names are hard coded into protocol file.
1661 ##
1662 record(bi, "$(P):LS01:ALARMD2_ONOFF") {
1663  field(DESC, "Alarm Enabled")
1664  field(ZNAM, "Disabled")
1665  field(ONAM, "Enabled")
1666 }
1667 record(ai, "$(P):LS01:ALARMD2_HIGHVAL") {
1668  field(DESC, "Alarm High Value")
1669  field(EGU, "K")
1670 }
1671 record(ai, "$(P):LS01:ALARMD2_LOWVAL") {
1672  field(DESC, "Alarm Low Value")
1673  field(EGU, "K")
1674 }
1675 record(ai, "$(P):LS01:ALARMD2_DB") {
1676  field(DESC, "Alarm Deadband")
1677  field(EGU, "K")
1678 }
1679 record(bi, "$(P):LS01:ALARMD2_LE") {
1680  field(DESC, "Alarm Latch Enable")
1681  field(ZNAM, "Non Latching")
1682  field(ONAM, "Latching")
1683 }
1684 record(bi, "$(P):LS01:ALARMD2_AU") {
1685  field(DESC, "Alarm Audible")
1686  field(ZNAM, "Quiet")
1687  field(ONAM, "Audible")
1688 }
1689 record(bi, "$(P):LS01:ALARMD2_VIS") {
1690  field(DESC, "Alarm Visible")
1691  field(ZNAM, "Non Visible")
1692  field(ONAM, "Visible")
1693 }
1694 
1695 
1696 ##
1697 ## Read the input reading status
1698 ##
1699 record(mbbi, "$(P):LS01:RDGSTD2") {
1700  field(DTYP, "stream")
1701  field(SDIS, "$(P):LS01:DISABLE_D2")
1702  field(ZRST, "Valid")
1703  field(ZRVL, "0")
1704  field(ONST, "Invalid")
1705  field(ONVL, "1")
1706  field(TWST, "Temp Under")
1707  field(TWVL, "16")
1708  field(THST, "Temp Over")
1709  field(THVL, "32")
1710  field(FRST, "Sensor Zero")
1711  field(FRVL, "64")
1712  field(FVST, "Sensor Over")
1713  field(FVVL, "128")
1714  field(ONSV, "MAJOR")
1715  field(TWSV, "MAJOR")
1716  field(THSV, "MAJOR")
1717  field(FRSV, "MAJOR")
1718  field(FVSV, "MAJOR")
1719  field(SCAN, "5 second")
1720  field(INP, "@ls336.proto getRDGST(D2) L0 0")
1721  info(archive, "Monitor, 00:00:01, VAL")
1722 }
1723 
1724 ##
1725 ## Read the input curve number
1726 ##
1727 record(longin, "$(P):LS01:INCRVD2") {
1728  field(DTYP, "stream")
1729  field(SDIS, "$(P):LS01:DISABLE_D2")
1730  field(SCAN, "5 second")
1731  field(INP, "@ls336.proto getINCRV(D2) L0 0")
1732 }
1733 
1734 
1735 ##
1736 ## Read the input type information.
1737 ## NOTE: the last part of the record name is hard coded into protocol file.
1738 ##
1739 record(bi, "$(P):LS01:INTYPED2") {
1740  field(DESC, "Read Input Type Params")
1741  field(DTYP, "stream")
1742  field(SDIS, "$(P):LS01:DISABLE_D2")
1743  field(INP, "@ls336.proto getINTYPE(D2,$(P):LS01:INTYPED2) L0 0")
1744  field(SCAN, "5 second")
1745 }
1746 
1747 ##
1748 ## Read the rest of the input type params.
1749 ## NOTE: the last part of the record names are hard coded into protocol file.
1750 ##
1751 record(mbbi, "$(P):LS01:INTYPED2_S") {
1752  field(DESC, "Sensor Type")
1753  field(ZRST, "Disabled")
1754  field(ZRVL, "0")
1755  field(ONST, "Diode")
1756  field(ONVL, "1")
1757  field(TWST, "Platinum RTD")
1758  field(TWVL, "2")
1759  field(THST, "NTC RTD")
1760  field(THVL, "3")
1761  field(FRST, "Thermocouple")
1762  field(FRVL, "4")
1763  field(FVST, "Capacitance")
1764  field(FVVL, "5")
1765 }
1766 record(bi, "$(P):LS01:INTYPED2_AR") {
1767  field(DESC, "Auto Range")
1768  field(ZNAM, "Off")
1769  field(ONAM, "On")
1770 }
1771 record(mbbi, "$(P):LS01:INTYPED2_R") {
1772  field(DESC, "Range")
1773  field(ZRST, "10 Ohm / 2.5V / 50mV")
1774  field(ZRVL, "0")
1775  field(ONST, "30 Ohm / 10V")
1776  field(ONVL, "1")
1777  field(TWST, "100 Ohm")
1778  field(TWVL, "2")
1779  field(THST, "300 Ohm")
1780  field(THVL, "3")
1781  field(FRST, "1 KOhm")
1782  field(FRVL, "4")
1783  field(FVST, "3 KOhm")
1784  field(FVVL, "5")
1785  field(SXST, "10 KOhm")
1786  field(SXVL, "6")
1787  field(SVST, "30 KOhm")
1788  field(SVVL, "7")
1789  field(EIST, "100 KOhm")
1790  field(EIVL, "8")
1791 }
1792 record(bi, "$(P):LS01:INTYPED2_C") {
1793  field(DESC, "Compensation")
1794  field(ZNAM, "Off")
1795  field(ONAM, "On")
1796 }
1797 record(mbbi, "$(P):LS01:INTYPED2_U") {
1798  field(DESC, "Units")
1799  field(ZRST, "None")
1800  field(ZRVL, "0")
1801  field(ONST, "Kelvin")
1802  field(ONVL, "1")
1803  field(TWST, "Celcius")
1804  field(TWVL, "2")
1805  field(THST, "Sensor")
1806  field(THVL, "3")
1807 }
1808 
1809 
1810 
1811 
1812 # Template to provide the records required for an input.
1813 # This makes use of the macros required by lakeshore336.template
1814 # but also requires macros to specify the input channel and index.
1815 # The index is to provide a way for the developer to use a different
1816 # channel naming scheme.
1817 #
1818 # For some commands, I hard coded the last part of the record names into
1819 # the protocol file. This seems the easiest way to deal with commands
1820 # will lots of params returned back, and avoid problematic long INP fields.
1821 # For the ZONE commands I used waveforms and subarrays, but that is not as simple.
1822 #
1823 # Macros:
1824 # INPUT - A to D, or D1 to D5
1825 # INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
1826 # DISABLE - PV name to use for SDIS
1827 
1828 ##
1829 ## Alarm summary record for input
1830 ## This summarizes the software limits on the temperature readings,
1831 ## the alarm status reading from the controller and the input reading status.
1832 ##
1833 record(calc, "$(P):LS01:ALARMD3_SUMMARY_CALC") {
1834  field(INPA, "$(P):LS01:KRDGD3 CP MS")
1835  field(INPB, "$(P):LS01:ALARMD3_HIGH CP MS")
1836  field(INPC, "$(P):LS01:ALARMD3_LOW CP MS")
1837  field(INPD, "$(P):LS01:RDGSTD3 CP MS")
1838  field(CALC, "A")
1839  field(FLNK, "$(P):LS01:ALARMD3_SUMMARY_CALC2")
1840  field(SDIS, "$(P):LS01:DISABLE_D3")
1841 }
1842 
1843 record(calcout, "$(P):LS01:ALARMD3_SUMMARY_CALC2") {
1844  field(INPA, "$(P):LS01:ALARMD3_SUMMARY_CALC.STAT")
1845  field(CALC, "A!=0?1:0")
1846  field(DOPT, "Use CALC")
1847  field(OOPT, "Every Time")
1848  field(OUT, "$(P):LS01:ALARMD3_SUMMARY PP")
1849 }
1850 
1851 record(bi, "$(P):LS01:ALARMD3_SUMMARY") {
1852  field(ZNAM, "No Alarm")
1853  field(ONAM, "Alarm")
1854  field(OSV, "MAJOR")
1855  field(PINI, "YES")
1856  field(VAL, "0")
1857  info(archive, "Monitor, 00:00:01, VAL")
1858 }
1859 
1860 ##
1861 ## If we disable polling this input, disable the alarm
1862 ##
1863 record(calcout, "$(P):LS01:ALARMD3_SUMMARY_DISABLE") {
1864  field(INPA, "$(P):LS01:DISABLE_D3 CP")
1865  field(CALC, "A==1?0:1")
1866  field(DOPT, "Use CALC")
1867  field(OOPT, "When Zero")
1868  field(OUT, "$(P):LS01:ALARMD3_SUMMARY.VAL PP")
1869 }
1870 
1871 
1872 ##
1873 ## Read the temperature on channel D3 in Kelvin.
1874 ##
1875 record(ai, "$(P):LS01:KRDGD3") {
1876  field(DTYP, "stream")
1877  field(SDIS, "$(P):LS01:DISABLE_D3")
1878  field(DESC, "Channel D3 Temperature")
1879  field(INP, "@ls336.proto getKRDG(D3) L0 0")
1880  field(SCAN, "1 second")
1881  field(PREC, "3")
1882  field(EGU, "K")
1883  field(HHSV,"MAJOR")
1884  field(HSV, "MINOR")
1885  field(LSV, "MINOR")
1886  field(LLSV,"MAJOR")
1887  field(HYST,"1.0")
1888  field(HIHI,"1000")
1889  field(HIGH,"1000")
1890  field(LOW,"-1")
1891  field(LOLO,"-1")
1892  field(ADEL, "1")
1893  field(MDEL, "0")
1894  info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
1895  info(archive, "Monitor, 00:00:01, VAL")
1896 }
1897 
1898 ##
1899 ## Read the raw voltage on channel D3.
1900 ##
1901 record(ai, "$(P):LS01:SRDGD3") {
1902  field(DTYP, "stream")
1903  field(SDIS, "$(P):LS01:DISABLE_D3")
1904  field(INP, "@ls336.proto getSRDG(D3) L0 0")
1905  field(SCAN, "1 second")
1906  field(PREC, "3")
1907  field(EGU, "V")
1908  field(ADEL, "1")
1909  field(MDEL, "0")
1910 }
1911 
1912 ##
1913 ## Set sensor D3 name
1914 ##
1915 record(stringout, "$(P):LS01:INNAME_SD3") {
1916  field(DESC, "Input D3 Name")
1917  field(DTYP, "stream")
1918  field(SDIS, "$(P):LS01:DISABLE")
1919  field(OUT, "@ls336.proto setINNAME(D3) L0 0")
1920  field(FLNK, "$(P):LS01:INNAMED3.PROC CA")
1921 }
1922 
1923 ##
1924 ## Read input sensor D3 name
1925 ##
1926 record(stringin, "$(P):LS01:INNAMED3") {
1927  field(DTYP, "stream")
1928  field(SDIS, "$(P):LS01:DISABLE")
1929  field(INP, "@ls336.proto getINNAME(D3) L0 0")
1930  field(PINI, "YES")
1931  field(SCAN, "Passive")
1932 }
1933 
1934 ##
1935 ## Read the high alarm status for input D3.
1936 ## This also populates ALARMD3_LOW
1937 ##
1938 record(bi, "$(P):LS01:ALARMD3_HIGH") {
1939  field(DTYP, "stream")
1940  field(SDIS, "$(P):LS01:DISABLE_D3")
1941  field(INP, "@ls336.proto getALARMST(D3,$(P):LS01:ALARMD3_LOW) L0 0")
1942  field(SCAN, "5 second")
1943  field(ZNAM, "Off")
1944  field(ONAM, "On")
1945  field(OSV, "MAJOR")
1946  info(archive, "Monitor, 00:00:01, VAL")
1947 }
1948 
1949 ##
1950 ## Read the low alarm status for input D3
1951 ##
1952 record(bi, "$(P):LS01:ALARMD3_LOW") {
1953  field(DTYP, "Soft Channel")
1954  field(ZNAM, "Off")
1955  field(ONAM, "On")
1956  field(OSV, "MAJOR")
1957  info(archive, "Monitor, 00:00:01, VAL")
1958 }
1959 
1960 ##
1961 ## Read the alarm parameters.
1962 ## NOTE: the last part of the record name is hard coded into protocol file.
1963 ##
1964 record(bi, "$(P):LS01:ALARMD3") {
1965  field(DESC, "Read Alarm Params")
1966  field(DTYP, "stream")
1967  field(SDIS, "$(P):LS01:DISABLE_D3")
1968  field(INP, "@ls336.proto getALARM(D3,$(P):LS01:ALARMD3) L0 0")
1969  field(SCAN, "5 second")
1970 }
1971 
1972 ##
1973 ## Read the rest of the alarm params.
1974 ## NOTE: the last part of the record names are hard coded into protocol file.
1975 ##
1976 record(bi, "$(P):LS01:ALARMD3_ONOFF") {
1977  field(DESC, "Alarm Enabled")
1978  field(ZNAM, "Disabled")
1979  field(ONAM, "Enabled")
1980 }
1981 record(ai, "$(P):LS01:ALARMD3_HIGHVAL") {
1982  field(DESC, "Alarm High Value")
1983  field(EGU, "K")
1984 }
1985 record(ai, "$(P):LS01:ALARMD3_LOWVAL") {
1986  field(DESC, "Alarm Low Value")
1987  field(EGU, "K")
1988 }
1989 record(ai, "$(P):LS01:ALARMD3_DB") {
1990  field(DESC, "Alarm Deadband")
1991  field(EGU, "K")
1992 }
1993 record(bi, "$(P):LS01:ALARMD3_LE") {
1994  field(DESC, "Alarm Latch Enable")
1995  field(ZNAM, "Non Latching")
1996  field(ONAM, "Latching")
1997 }
1998 record(bi, "$(P):LS01:ALARMD3_AU") {
1999  field(DESC, "Alarm Audible")
2000  field(ZNAM, "Quiet")
2001  field(ONAM, "Audible")
2002 }
2003 record(bi, "$(P):LS01:ALARMD3_VIS") {
2004  field(DESC, "Alarm Visible")
2005  field(ZNAM, "Non Visible")
2006  field(ONAM, "Visible")
2007 }
2008 
2009 
2010 ##
2011 ## Read the input reading status
2012 ##
2013 record(mbbi, "$(P):LS01:RDGSTD3") {
2014  field(DTYP, "stream")
2015  field(SDIS, "$(P):LS01:DISABLE_D3")
2016  field(ZRST, "Valid")
2017  field(ZRVL, "0")
2018  field(ONST, "Invalid")
2019  field(ONVL, "1")
2020  field(TWST, "Temp Under")
2021  field(TWVL, "16")
2022  field(THST, "Temp Over")
2023  field(THVL, "32")
2024  field(FRST, "Sensor Zero")
2025  field(FRVL, "64")
2026  field(FVST, "Sensor Over")
2027  field(FVVL, "128")
2028  field(ONSV, "MAJOR")
2029  field(TWSV, "MAJOR")
2030  field(THSV, "MAJOR")
2031  field(FRSV, "MAJOR")
2032  field(FVSV, "MAJOR")
2033  field(SCAN, "5 second")
2034  field(INP, "@ls336.proto getRDGST(D3) L0 0")
2035  info(archive, "Monitor, 00:00:01, VAL")
2036 }
2037 
2038 ##
2039 ## Read the input curve number
2040 ##
2041 record(longin, "$(P):LS01:INCRVD3") {
2042  field(DTYP, "stream")
2043  field(SDIS, "$(P):LS01:DISABLE_D3")
2044  field(SCAN, "5 second")
2045  field(INP, "@ls336.proto getINCRV(D3) L0 0")
2046 }
2047 
2048 
2049 ##
2050 ## Read the input type information.
2051 ## NOTE: the last part of the record name is hard coded into protocol file.
2052 ##
2053 record(bi, "$(P):LS01:INTYPED3") {
2054  field(DESC, "Read Input Type Params")
2055  field(DTYP, "stream")
2056  field(SDIS, "$(P):LS01:DISABLE_D3")
2057  field(INP, "@ls336.proto getINTYPE(D3,$(P):LS01:INTYPED3) L0 0")
2058  field(SCAN, "5 second")
2059 }
2060 
2061 ##
2062 ## Read the rest of the input type params.
2063 ## NOTE: the last part of the record names are hard coded into protocol file.
2064 ##
2065 record(mbbi, "$(P):LS01:INTYPED3_S") {
2066  field(DESC, "Sensor Type")
2067  field(ZRST, "Disabled")
2068  field(ZRVL, "0")
2069  field(ONST, "Diode")
2070  field(ONVL, "1")
2071  field(TWST, "Platinum RTD")
2072  field(TWVL, "2")
2073  field(THST, "NTC RTD")
2074  field(THVL, "3")
2075  field(FRST, "Thermocouple")
2076  field(FRVL, "4")
2077  field(FVST, "Capacitance")
2078  field(FVVL, "5")
2079 }
2080 record(bi, "$(P):LS01:INTYPED3_AR") {
2081  field(DESC, "Auto Range")
2082  field(ZNAM, "Off")
2083  field(ONAM, "On")
2084 }
2085 record(mbbi, "$(P):LS01:INTYPED3_R") {
2086  field(DESC, "Range")
2087  field(ZRST, "10 Ohm / 2.5V / 50mV")
2088  field(ZRVL, "0")
2089  field(ONST, "30 Ohm / 10V")
2090  field(ONVL, "1")
2091  field(TWST, "100 Ohm")
2092  field(TWVL, "2")
2093  field(THST, "300 Ohm")
2094  field(THVL, "3")
2095  field(FRST, "1 KOhm")
2096  field(FRVL, "4")
2097  field(FVST, "3 KOhm")
2098  field(FVVL, "5")
2099  field(SXST, "10 KOhm")
2100  field(SXVL, "6")
2101  field(SVST, "30 KOhm")
2102  field(SVVL, "7")
2103  field(EIST, "100 KOhm")
2104  field(EIVL, "8")
2105 }
2106 record(bi, "$(P):LS01:INTYPED3_C") {
2107  field(DESC, "Compensation")
2108  field(ZNAM, "Off")
2109  field(ONAM, "On")
2110 }
2111 record(mbbi, "$(P):LS01:INTYPED3_U") {
2112  field(DESC, "Units")
2113  field(ZRST, "None")
2114  field(ZRVL, "0")
2115  field(ONST, "Kelvin")
2116  field(ONVL, "1")
2117  field(TWST, "Celcius")
2118  field(TWVL, "2")
2119  field(THST, "Sensor")
2120  field(THVL, "3")
2121 }
2122 
2123 
2124 
2125 
2126 # Template to provide the records required for an input.
2127 # This makes use of the macros required by lakeshore336.template
2128 # but also requires macros to specify the input channel and index.
2129 # The index is to provide a way for the developer to use a different
2130 # channel naming scheme.
2131 #
2132 # For some commands, I hard coded the last part of the record names into
2133 # the protocol file. This seems the easiest way to deal with commands
2134 # will lots of params returned back, and avoid problematic long INP fields.
2135 # For the ZONE commands I used waveforms and subarrays, but that is not as simple.
2136 #
2137 # Macros:
2138 # INPUT - A to D, or D1 to D5
2139 # INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
2140 # DISABLE - PV name to use for SDIS
2141 
2142 ##
2143 ## Alarm summary record for input
2144 ## This summarizes the software limits on the temperature readings,
2145 ## the alarm status reading from the controller and the input reading status.
2146 ##
2147 record(calc, "$(P):LS01:ALARMD4_SUMMARY_CALC") {
2148  field(INPA, "$(P):LS01:KRDGD4 CP MS")
2149  field(INPB, "$(P):LS01:ALARMD4_HIGH CP MS")
2150  field(INPC, "$(P):LS01:ALARMD4_LOW CP MS")
2151  field(INPD, "$(P):LS01:RDGSTD4 CP MS")
2152  field(CALC, "A")
2153  field(FLNK, "$(P):LS01:ALARMD4_SUMMARY_CALC2")
2154  field(SDIS, "$(P):LS01:DISABLE_D4")
2155 }
2156 
2157 record(calcout, "$(P):LS01:ALARMD4_SUMMARY_CALC2") {
2158  field(INPA, "$(P):LS01:ALARMD4_SUMMARY_CALC.STAT")
2159  field(CALC, "A!=0?1:0")
2160  field(DOPT, "Use CALC")
2161  field(OOPT, "Every Time")
2162  field(OUT, "$(P):LS01:ALARMD4_SUMMARY PP")
2163 }
2164 
2165 record(bi, "$(P):LS01:ALARMD4_SUMMARY") {
2166  field(ZNAM, "No Alarm")
2167  field(ONAM, "Alarm")
2168  field(OSV, "MAJOR")
2169  field(PINI, "YES")
2170  field(VAL, "0")
2171  info(archive, "Monitor, 00:00:01, VAL")
2172 }
2173 
2174 ##
2175 ## If we disable polling this input, disable the alarm
2176 ##
2177 record(calcout, "$(P):LS01:ALARMD4_SUMMARY_DISABLE") {
2178  field(INPA, "$(P):LS01:DISABLE_D4 CP")
2179  field(CALC, "A==1?0:1")
2180  field(DOPT, "Use CALC")
2181  field(OOPT, "When Zero")
2182  field(OUT, "$(P):LS01:ALARMD4_SUMMARY.VAL PP")
2183 }
2184 
2185 
2186 ##
2187 ## Read the temperature on channel D4 in Kelvin.
2188 ##
2189 record(ai, "$(P):LS01:KRDGD4") {
2190  field(DTYP, "stream")
2191  field(SDIS, "$(P):LS01:DISABLE_D4")
2192  field(DESC, "Channel D4 Temperature")
2193  field(INP, "@ls336.proto getKRDG(D4) L0 0")
2194  field(SCAN, "1 second")
2195  field(PREC, "3")
2196  field(EGU, "K")
2197  field(HHSV,"MAJOR")
2198  field(HSV, "MINOR")
2199  field(LSV, "MINOR")
2200  field(LLSV,"MAJOR")
2201  field(HYST,"1.0")
2202  field(HIHI,"1000")
2203  field(HIGH,"1000")
2204  field(LOW,"-1")
2205  field(LOLO,"-1")
2206  field(ADEL, "1")
2207  field(MDEL, "0")
2208  info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
2209  info(archive, "Monitor, 00:00:01, VAL")
2210 }
2211 
2212 ##
2213 ## Read the raw voltage on channel D4.
2214 ##
2215 record(ai, "$(P):LS01:SRDGD4") {
2216  field(DTYP, "stream")
2217  field(SDIS, "$(P):LS01:DISABLE_D4")
2218  field(INP, "@ls336.proto getSRDG(D4) L0 0")
2219  field(SCAN, "1 second")
2220  field(PREC, "3")
2221  field(EGU, "V")
2222  field(ADEL, "1")
2223  field(MDEL, "0")
2224 }
2225 
2226 ##
2227 ## Set sensor D4 name
2228 ##
2229 record(stringout, "$(P):LS01:INNAME_SD4") {
2230  field(DESC, "Input D4 Name")
2231  field(DTYP, "stream")
2232  field(SDIS, "$(P):LS01:DISABLE")
2233  field(OUT, "@ls336.proto setINNAME(D4) L0 0")
2234  field(FLNK, "$(P):LS01:INNAMED4.PROC CA")
2235 }
2236 
2237 ##
2238 ## Read input sensor D4 name
2239 ##
2240 record(stringin, "$(P):LS01:INNAMED4") {
2241  field(DTYP, "stream")
2242  field(SDIS, "$(P):LS01:DISABLE")
2243  field(INP, "@ls336.proto getINNAME(D4) L0 0")
2244  field(PINI, "YES")
2245  field(SCAN, "Passive")
2246 }
2247 
2248 ##
2249 ## Read the high alarm status for input D4.
2250 ## This also populates ALARMD4_LOW
2251 ##
2252 record(bi, "$(P):LS01:ALARMD4_HIGH") {
2253  field(DTYP, "stream")
2254  field(SDIS, "$(P):LS01:DISABLE_D4")
2255  field(INP, "@ls336.proto getALARMST(D4,$(P):LS01:ALARMD4_LOW) L0 0")
2256  field(SCAN, "5 second")
2257  field(ZNAM, "Off")
2258  field(ONAM, "On")
2259  field(OSV, "MAJOR")
2260  info(archive, "Monitor, 00:00:01, VAL")
2261 }
2262 
2263 ##
2264 ## Read the low alarm status for input D4
2265 ##
2266 record(bi, "$(P):LS01:ALARMD4_LOW") {
2267  field(DTYP, "Soft Channel")
2268  field(ZNAM, "Off")
2269  field(ONAM, "On")
2270  field(OSV, "MAJOR")
2271  info(archive, "Monitor, 00:00:01, VAL")
2272 }
2273 
2274 ##
2275 ## Read the alarm parameters.
2276 ## NOTE: the last part of the record name is hard coded into protocol file.
2277 ##
2278 record(bi, "$(P):LS01:ALARMD4") {
2279  field(DESC, "Read Alarm Params")
2280  field(DTYP, "stream")
2281  field(SDIS, "$(P):LS01:DISABLE_D4")
2282  field(INP, "@ls336.proto getALARM(D4,$(P):LS01:ALARMD4) L0 0")
2283  field(SCAN, "5 second")
2284 }
2285 
2286 ##
2287 ## Read the rest of the alarm params.
2288 ## NOTE: the last part of the record names are hard coded into protocol file.
2289 ##
2290 record(bi, "$(P):LS01:ALARMD4_ONOFF") {
2291  field(DESC, "Alarm Enabled")
2292  field(ZNAM, "Disabled")
2293  field(ONAM, "Enabled")
2294 }
2295 record(ai, "$(P):LS01:ALARMD4_HIGHVAL") {
2296  field(DESC, "Alarm High Value")
2297  field(EGU, "K")
2298 }
2299 record(ai, "$(P):LS01:ALARMD4_LOWVAL") {
2300  field(DESC, "Alarm Low Value")
2301  field(EGU, "K")
2302 }
2303 record(ai, "$(P):LS01:ALARMD4_DB") {
2304  field(DESC, "Alarm Deadband")
2305  field(EGU, "K")
2306 }
2307 record(bi, "$(P):LS01:ALARMD4_LE") {
2308  field(DESC, "Alarm Latch Enable")
2309  field(ZNAM, "Non Latching")
2310  field(ONAM, "Latching")
2311 }
2312 record(bi, "$(P):LS01:ALARMD4_AU") {
2313  field(DESC, "Alarm Audible")
2314  field(ZNAM, "Quiet")
2315  field(ONAM, "Audible")
2316 }
2317 record(bi, "$(P):LS01:ALARMD4_VIS") {
2318  field(DESC, "Alarm Visible")
2319  field(ZNAM, "Non Visible")
2320  field(ONAM, "Visible")
2321 }
2322 
2323 
2324 ##
2325 ## Read the input reading status
2326 ##
2327 record(mbbi, "$(P):LS01:RDGSTD4") {
2328  field(DTYP, "stream")
2329  field(SDIS, "$(P):LS01:DISABLE_D4")
2330  field(ZRST, "Valid")
2331  field(ZRVL, "0")
2332  field(ONST, "Invalid")
2333  field(ONVL, "1")
2334  field(TWST, "Temp Under")
2335  field(TWVL, "16")
2336  field(THST, "Temp Over")
2337  field(THVL, "32")
2338  field(FRST, "Sensor Zero")
2339  field(FRVL, "64")
2340  field(FVST, "Sensor Over")
2341  field(FVVL, "128")
2342  field(ONSV, "MAJOR")
2343  field(TWSV, "MAJOR")
2344  field(THSV, "MAJOR")
2345  field(FRSV, "MAJOR")
2346  field(FVSV, "MAJOR")
2347  field(SCAN, "5 second")
2348  field(INP, "@ls336.proto getRDGST(D4) L0 0")
2349  info(archive, "Monitor, 00:00:01, VAL")
2350 }
2351 
2352 ##
2353 ## Read the input curve number
2354 ##
2355 record(longin, "$(P):LS01:INCRVD4") {
2356  field(DTYP, "stream")
2357  field(SDIS, "$(P):LS01:DISABLE_D4")
2358  field(SCAN, "5 second")
2359  field(INP, "@ls336.proto getINCRV(D4) L0 0")
2360 }
2361 
2362 
2363 ##
2364 ## Read the input type information.
2365 ## NOTE: the last part of the record name is hard coded into protocol file.
2366 ##
2367 record(bi, "$(P):LS01:INTYPED4") {
2368  field(DESC, "Read Input Type Params")
2369  field(DTYP, "stream")
2370  field(SDIS, "$(P):LS01:DISABLE_D4")
2371  field(INP, "@ls336.proto getINTYPE(D4,$(P):LS01:INTYPED4) L0 0")
2372  field(SCAN, "5 second")
2373 }
2374 
2375 ##
2376 ## Read the rest of the input type params.
2377 ## NOTE: the last part of the record names are hard coded into protocol file.
2378 ##
2379 record(mbbi, "$(P):LS01:INTYPED4_S") {
2380  field(DESC, "Sensor Type")
2381  field(ZRST, "Disabled")
2382  field(ZRVL, "0")
2383  field(ONST, "Diode")
2384  field(ONVL, "1")
2385  field(TWST, "Platinum RTD")
2386  field(TWVL, "2")
2387  field(THST, "NTC RTD")
2388  field(THVL, "3")
2389  field(FRST, "Thermocouple")
2390  field(FRVL, "4")
2391  field(FVST, "Capacitance")
2392  field(FVVL, "5")
2393 }
2394 record(bi, "$(P):LS01:INTYPED4_AR") {
2395  field(DESC, "Auto Range")
2396  field(ZNAM, "Off")
2397  field(ONAM, "On")
2398 }
2399 record(mbbi, "$(P):LS01:INTYPED4_R") {
2400  field(DESC, "Range")
2401  field(ZRST, "10 Ohm / 2.5V / 50mV")
2402  field(ZRVL, "0")
2403  field(ONST, "30 Ohm / 10V")
2404  field(ONVL, "1")
2405  field(TWST, "100 Ohm")
2406  field(TWVL, "2")
2407  field(THST, "300 Ohm")
2408  field(THVL, "3")
2409  field(FRST, "1 KOhm")
2410  field(FRVL, "4")
2411  field(FVST, "3 KOhm")
2412  field(FVVL, "5")
2413  field(SXST, "10 KOhm")
2414  field(SXVL, "6")
2415  field(SVST, "30 KOhm")
2416  field(SVVL, "7")
2417  field(EIST, "100 KOhm")
2418  field(EIVL, "8")
2419 }
2420 record(bi, "$(P):LS01:INTYPED4_C") {
2421  field(DESC, "Compensation")
2422  field(ZNAM, "Off")
2423  field(ONAM, "On")
2424 }
2425 record(mbbi, "$(P):LS01:INTYPED4_U") {
2426  field(DESC, "Units")
2427  field(ZRST, "None")
2428  field(ZRVL, "0")
2429  field(ONST, "Kelvin")
2430  field(ONVL, "1")
2431  field(TWST, "Celcius")
2432  field(TWVL, "2")
2433  field(THST, "Sensor")
2434  field(THVL, "3")
2435 }
2436 
2437 
2438 
2439 
2440 # Template to provide the records required for an input.
2441 # This makes use of the macros required by lakeshore336.template
2442 # but also requires macros to specify the input channel and index.
2443 # The index is to provide a way for the developer to use a different
2444 # channel naming scheme.
2445 #
2446 # For some commands, I hard coded the last part of the record names into
2447 # the protocol file. This seems the easiest way to deal with commands
2448 # will lots of params returned back, and avoid problematic long INP fields.
2449 # For the ZONE commands I used waveforms and subarrays, but that is not as simple.
2450 #
2451 # Macros:
2452 # INPUT - A to D, or D1 to D5
2453 # INDEX - Index to use for the input channel PV name and DESC (eg. 0 to 3)
2454 # DISABLE - PV name to use for SDIS
2455 
2456 ##
2457 ## Alarm summary record for input
2458 ## This summarizes the software limits on the temperature readings,
2459 ## the alarm status reading from the controller and the input reading status.
2460 ##
2461 record(calc, "$(P):LS01:ALARMD5_SUMMARY_CALC") {
2462  field(INPA, "$(P):LS01:KRDGD5 CP MS")
2463  field(INPB, "$(P):LS01:ALARMD5_HIGH CP MS")
2464  field(INPC, "$(P):LS01:ALARMD5_LOW CP MS")
2465  field(INPD, "$(P):LS01:RDGSTD5 CP MS")
2466  field(CALC, "A")
2467  field(FLNK, "$(P):LS01:ALARMD5_SUMMARY_CALC2")
2468  field(SDIS, "$(P):LS01:DISABLE_D5")
2469 }
2470 
2471 record(calcout, "$(P):LS01:ALARMD5_SUMMARY_CALC2") {
2472  field(INPA, "$(P):LS01:ALARMD5_SUMMARY_CALC.STAT")
2473  field(CALC, "A!=0?1:0")
2474  field(DOPT, "Use CALC")
2475  field(OOPT, "Every Time")
2476  field(OUT, "$(P):LS01:ALARMD5_SUMMARY PP")
2477 }
2478 
2479 record(bi, "$(P):LS01:ALARMD5_SUMMARY") {
2480  field(ZNAM, "No Alarm")
2481  field(ONAM, "Alarm")
2482  field(OSV, "MAJOR")
2483  field(PINI, "YES")
2484  field(VAL, "0")
2485  info(archive, "Monitor, 00:00:01, VAL")
2486 }
2487 
2488 ##
2489 ## If we disable polling this input, disable the alarm
2490 ##
2491 record(calcout, "$(P):LS01:ALARMD5_SUMMARY_DISABLE") {
2492  field(INPA, "$(P):LS01:DISABLE_D5 CP")
2493  field(CALC, "A==1?0:1")
2494  field(DOPT, "Use CALC")
2495  field(OOPT, "When Zero")
2496  field(OUT, "$(P):LS01:ALARMD5_SUMMARY.VAL PP")
2497 }
2498 
2499 
2500 ##
2501 ## Read the temperature on channel D5 in Kelvin.
2502 ##
2503 record(ai, "$(P):LS01:KRDGD5") {
2504  field(DTYP, "stream")
2505  field(SDIS, "$(P):LS01:DISABLE_D5")
2506  field(DESC, "Channel D5 Temperature")
2507  field(INP, "@ls336.proto getKRDG(D5) L0 0")
2508  field(SCAN, "1 second")
2509  field(PREC, "3")
2510  field(EGU, "K")
2511  field(HHSV,"MAJOR")
2512  field(HSV, "MINOR")
2513  field(LSV, "MINOR")
2514  field(LLSV,"MAJOR")
2515  field(HYST,"1.0")
2516  field(HIHI,"1000")
2517  field(HIGH,"1000")
2518  field(LOW,"-1")
2519  field(LOLO,"-1")
2520  field(ADEL, "1")
2521  field(MDEL, "0")
2522  info(autosaveFields, "HIHI HIGH LOW LOLO ADEL MDEL")
2523  info(archive, "Monitor, 00:00:01, VAL")
2524 }
2525 
2526 ##
2527 ## Read the raw voltage on channel D5.
2528 ##
2529 record(ai, "$(P):LS01:SRDGD5") {
2530  field(DTYP, "stream")
2531  field(SDIS, "$(P):LS01:DISABLE_D5")
2532  field(INP, "@ls336.proto getSRDG(D5) L0 0")
2533  field(SCAN, "1 second")
2534  field(PREC, "3")
2535  field(EGU, "V")
2536  field(ADEL, "1")
2537  field(MDEL, "0")
2538 }
2539 
2540 ##
2541 ## Set sensor D5 name
2542 ##
2543 record(stringout, "$(P):LS01:INNAME_SD5") {
2544  field(DESC, "Input D5 Name")
2545  field(DTYP, "stream")
2546  field(SDIS, "$(P):LS01:DISABLE")
2547  field(OUT, "@ls336.proto setINNAME(D5) L0 0")
2548  field(FLNK, "$(P):LS01:INNAMED5.PROC CA")
2549 }
2550 
2551 ##
2552 ## Read input sensor D5 name
2553 ##
2554 record(stringin, "$(P):LS01:INNAMED5") {
2555  field(DTYP, "stream")
2556  field(SDIS, "$(P):LS01:DISABLE")
2557  field(INP, "@ls336.proto getINNAME(D5) L0 0")
2558  field(PINI, "YES")
2559  field(SCAN, "Passive")
2560 }
2561 
2562 ##
2563 ## Read the high alarm status for input D5.
2564 ## This also populates ALARMD5_LOW
2565 ##
2566 record(bi, "$(P):LS01:ALARMD5_HIGH") {
2567  field(DTYP, "stream")
2568  field(SDIS, "$(P):LS01:DISABLE_D5")
2569  field(INP, "@ls336.proto getALARMST(D5,$(P):LS01:ALARMD5_LOW) L0 0")
2570  field(SCAN, "5 second")
2571  field(ZNAM, "Off")
2572  field(ONAM, "On")
2573  field(OSV, "MAJOR")
2574  info(archive, "Monitor, 00:00:01, VAL")
2575 }
2576 
2577 ##
2578 ## Read the low alarm status for input D5
2579 ##
2580 record(bi, "$(P):LS01:ALARMD5_LOW") {
2581  field(DTYP, "Soft Channel")
2582  field(ZNAM, "Off")
2583  field(ONAM, "On")
2584  field(OSV, "MAJOR")
2585  info(archive, "Monitor, 00:00:01, VAL")
2586 }
2587 
2588 ##
2589 ## Read the alarm parameters.
2590 ## NOTE: the last part of the record name is hard coded into protocol file.
2591 ##
2592 record(bi, "$(P):LS01:ALARMD5") {
2593  field(DESC, "Read Alarm Params")
2594  field(DTYP, "stream")
2595  field(SDIS, "$(P):LS01:DISABLE_D5")
2596  field(INP, "@ls336.proto getALARM(D5,$(P):LS01:ALARMD5) L0 0")
2597  field(SCAN, "5 second")
2598 }
2599 
2600 ##
2601 ## Read the rest of the alarm params.
2602 ## NOTE: the last part of the record names are hard coded into protocol file.
2603 ##
2604 record(bi, "$(P):LS01:ALARMD5_ONOFF") {
2605  field(DESC, "Alarm Enabled")
2606  field(ZNAM, "Disabled")
2607  field(ONAM, "Enabled")
2608 }
2609 record(ai, "$(P):LS01:ALARMD5_HIGHVAL") {
2610  field(DESC, "Alarm High Value")
2611  field(EGU, "K")
2612 }
2613 record(ai, "$(P):LS01:ALARMD5_LOWVAL") {
2614  field(DESC, "Alarm Low Value")
2615  field(EGU, "K")
2616 }
2617 record(ai, "$(P):LS01:ALARMD5_DB") {
2618  field(DESC, "Alarm Deadband")
2619  field(EGU, "K")
2620 }
2621 record(bi, "$(P):LS01:ALARMD5_LE") {
2622  field(DESC, "Alarm Latch Enable")
2623  field(ZNAM, "Non Latching")
2624  field(ONAM, "Latching")
2625 }
2626 record(bi, "$(P):LS01:ALARMD5_AU") {
2627  field(DESC, "Alarm Audible")
2628  field(ZNAM, "Quiet")
2629  field(ONAM, "Audible")
2630 }
2631 record(bi, "$(P):LS01:ALARMD5_VIS") {
2632  field(DESC, "Alarm Visible")
2633  field(ZNAM, "Non Visible")
2634  field(ONAM, "Visible")
2635 }
2636 
2637 
2638 ##
2639 ## Read the input reading status
2640 ##
2641 record(mbbi, "$(P):LS01:RDGSTD5") {
2642  field(DTYP, "stream")
2643  field(SDIS, "$(P):LS01:DISABLE_D5")
2644  field(ZRST, "Valid")
2645  field(ZRVL, "0")
2646  field(ONST, "Invalid")
2647  field(ONVL, "1")
2648  field(TWST, "Temp Under")
2649  field(TWVL, "16")
2650  field(THST, "Temp Over")
2651  field(THVL, "32")
2652  field(FRST, "Sensor Zero")
2653  field(FRVL, "64")
2654  field(FVST, "Sensor Over")
2655  field(FVVL, "128")
2656  field(ONSV, "MAJOR")
2657  field(TWSV, "MAJOR")
2658  field(THSV, "MAJOR")
2659  field(FRSV, "MAJOR")
2660  field(FVSV, "MAJOR")
2661  field(SCAN, "5 second")
2662  field(INP, "@ls336.proto getRDGST(D5) L0 0")
2663  info(archive, "Monitor, 00:00:01, VAL")
2664 }
2665 
2666 ##
2667 ## Read the input curve number
2668 ##
2669 record(longin, "$(P):LS01:INCRVD5") {
2670  field(DTYP, "stream")
2671  field(SDIS, "$(P):LS01:DISABLE_D5")
2672  field(SCAN, "5 second")
2673  field(INP, "@ls336.proto getINCRV(D5) L0 0")
2674 }
2675 
2676 
2677 ##
2678 ## Read the input type information.
2679 ## NOTE: the last part of the record name is hard coded into protocol file.
2680 ##
2681 record(bi, "$(P):LS01:INTYPED5") {
2682  field(DESC, "Read Input Type Params")
2683  field(DTYP, "stream")
2684  field(SDIS, "$(P):LS01:DISABLE_D5")
2685  field(INP, "@ls336.proto getINTYPE(D5,$(P):LS01:INTYPED5) L0 0")
2686  field(SCAN, "5 second")
2687 }
2688 
2689 ##
2690 ## Read the rest of the input type params.
2691 ## NOTE: the last part of the record names are hard coded into protocol file.
2692 ##
2693 record(mbbi, "$(P):LS01:INTYPED5_S") {
2694  field(DESC, "Sensor Type")
2695  field(ZRST, "Disabled")
2696  field(ZRVL, "0")
2697  field(ONST, "Diode")
2698  field(ONVL, "1")
2699  field(TWST, "Platinum RTD")
2700  field(TWVL, "2")
2701  field(THST, "NTC RTD")
2702  field(THVL, "3")
2703  field(FRST, "Thermocouple")
2704  field(FRVL, "4")
2705  field(FVST, "Capacitance")
2706  field(FVVL, "5")
2707 }
2708 record(bi, "$(P):LS01:INTYPED5_AR") {
2709  field(DESC, "Auto Range")
2710  field(ZNAM, "Off")
2711  field(ONAM, "On")
2712 }
2713 record(mbbi, "$(P):LS01:INTYPED5_R") {
2714  field(DESC, "Range")
2715  field(ZRST, "10 Ohm / 2.5V / 50mV")
2716  field(ZRVL, "0")
2717  field(ONST, "30 Ohm / 10V")
2718  field(ONVL, "1")
2719  field(TWST, "100 Ohm")
2720  field(TWVL, "2")
2721  field(THST, "300 Ohm")
2722  field(THVL, "3")
2723  field(FRST, "1 KOhm")
2724  field(FRVL, "4")
2725  field(FVST, "3 KOhm")
2726  field(FVVL, "5")
2727  field(SXST, "10 KOhm")
2728  field(SXVL, "6")
2729  field(SVST, "30 KOhm")
2730  field(SVVL, "7")
2731  field(EIST, "100 KOhm")
2732  field(EIVL, "8")
2733 }
2734 record(bi, "$(P):LS01:INTYPED5_C") {
2735  field(DESC, "Compensation")
2736  field(ZNAM, "Off")
2737  field(ONAM, "On")
2738 }
2739 record(mbbi, "$(P):LS01:INTYPED5_U") {
2740  field(DESC, "Units")
2741  field(ZRST, "None")
2742  field(ZRVL, "0")
2743  field(ONST, "Kelvin")
2744  field(ONVL, "1")
2745  field(TWST, "Celcius")
2746  field(TWVL, "2")
2747  field(THST, "Sensor")
2748  field(THVL, "3")
2749 }
2750 
2751 
2752 
2753 
2754 ################################################################
2755 # Now include the loop dependant records, for outputs 1, 2, 3 and 4.
2756 # The common records are in lakeshore336output.template.
2757 ################################################################
2758 
2759 #substitute "TOLERANCE=1"
2760 
2761 # This is included in lakeshore336.template
2762 # This template is for the common functionality shared by all 4 outputs.
2763 #
2764 # There is some logic in this database to provide put_callback functionality
2765 # for setting the temperature and waiting for it to be in range. The input
2766 # sensor PV name used for the in-window calculation changes depending on
2767 # the input sensor selected. In order for this to work it requires the following
2768 # macros:
2769 #
2770 # INPUTA - Sensor 1 PV name
2771 # INPUTB - Sensor 2 PV name
2772 # INPUTC - Sensor 3 PV name
2773 # INPUTD - Sensor 4 PV name
2774 # INPUTD2 - Sensor D2 PV name
2775 # INPUTD3 - Sensor D3 PV name
2776 # INPUTD4 - Sensor D4 PV name
2777 # INPUTD5 - Sensor D5 PV name
2778 # TOLERANCE (optional - defaults to 1)
2779 #
2780 # The input link names must fit into a stringout record for this to work.
2781 # The above link names default to a dummy record.
2782 
2783 ################################################################
2784 # Read records
2785 ################################################################
2786 
2787 ##
2788 ## Record holding the output number
2789 ##
2790 record(stringout, "$(P):LS01:OUTPUT1") {
2791  field(DTYP, "Soft Channel")
2792  field(VAL, "1")
2793  field(PINI, "YES")
2794 }
2795 
2796 ##
2797 ## Read the setpoint temperature.
2798 ##
2799 record(ai, "$(P):LS01:SETP1") {
2800  field(DTYP, "stream")
2801  field(SDIS, "$(P):LS01:DISABLE_POLL")
2802  field(INP, "@ls336.proto getSETP(1) L0 0")
2803  field(SCAN, "1 second")
2804  field(PREC, "3")
2805  field(EGU, "K")
2806  info(archive, "Monitor, 00:00:01, VAL")
2807 }
2808 
2809 ##
2810 ## Read the setpoint limit
2811 ##
2812 
2813 ##
2814 ## Read the ramp parameter. This also populates the ramp status $(P):LS01:RAMPST1,
2815 ##
2816 record(ai, "$(P):LS01:RAMP1") {
2817  field(DTYP, "stream")
2818  field(SDIS, "$(P):LS01:DISABLE_POLL")
2819  field(INP, "@ls336.proto getRAMP(1,$(P):LS01:RAMPST1) L0 0")
2820  field(SCAN, "5 second")
2821  field(PREC, "3")
2822  field(EGU, "K/minute")
2823 }
2824 
2825 ##
2826 ## Read the ramp status parameter.
2827 ##
2828 ## 0=off
2829 ## 1=on
2830 ##
2831 record(bi, "$(P):LS01:RAMPST1") {
2832  field(DTYP, "Soft Channel")
2833  field(ZNAM, "Off")
2834  field(ONAM, "On")
2835 }
2836 
2837 ##
2838 ## Read the range parameter (the heater output power range).
2839 ## This is output specific and is defined in another file.
2840 ##
2841 record(mbbi, "$(P):LS01:RANGE1") {
2842  field(DTYP, "stream")
2843  field(SDIS, "$(P):LS01:DISABLE_POLL")
2844  field(ZRVL, "0")
2845  field(ONVL, "1")
2846  field(TWVL, "2")
2847  field(THVL, "3")
2848  field(FRVL, "4")
2849  field(FVVL, "5")
2850  field(SCAN, "5 second")
2851  field(INP, "@ls336.proto getRANGE(1) L0 0")
2852 }
2853 
2854 ##
2855 ## Read the mode to use for outmode
2856 ## This is output specific and is defined in another file.
2857 ##
2858 record(mbbi, "$(P):LS01:OMMODE1") {
2859 }
2860 
2861 ##
2862 ## Read the manual output parameter.
2863 ##
2864 record(ai, "$(P):LS01:MOUT1") {
2865  field(DTYP, "stream")
2866  field(SDIS, "$(P):LS01:DISABLE_POLL")
2867  field(INP, "@ls336.proto getMOUT(1) L0 0")
2868  field(SCAN, "5 second")
2869 }
2870 
2871 ##
2872 ## Read the PID P parameter. Pass the I and D records into the protocol to read those as well.
2873 ##
2874 record(ai, "$(P):LS01:P1") {
2875  field(DTYP, "stream")
2876  field(SDIS, "$(P):LS01:DISABLE_POLL")
2877  field(INP, "@ls336.proto getPID(1,$(P):LS01:I1,$(P):LS01:D1) L0 0")
2878  field(SCAN, "5 second")
2879 }
2880 
2881 ##
2882 ## Read the PID I parameter.
2883 ##
2884 record(ai, "$(P):LS01:I1") {
2885  field(DTYP, "Soft Channel")
2886  field(SCAN, "Passive")
2887 }
2888 
2889 ##
2890 ## Read the PID D parameter.
2891 ##
2892 record(ai, "$(P):LS01:D1") {
2893  field(DTYP, "Soft Channel")
2894  field(SCAN, "Passive")
2895 }
2896 
2897 ##
2898 ## Read the mode to use for outmode.
2899 ## This also populates the OMI and OMP records.
2900 ## The mbbi strings and values are defined in the output specific templates.
2901 ##
2902 record(mbbi, "$(P):LS01:OMM1") {
2903  field(DTYP, "stream")
2904  field(SDIS, "$(P):LS01:DISABLE_POLL")
2905  field(ZRVL, "0")
2906  field(ONVL, "1")
2907  field(TWVL, "2")
2908  field(THVL, "3")
2909  field(FRVL, "4")
2910  field(FVVL, "5")
2911  field(SCAN, "5 second")
2912  field(INP, "@ls336.proto getOM(1,$(P):LS01:OMI1,$(P):LS01:OMP1) L0 0")
2913 }
2914 
2915 ##
2916 ## Read the input to use for outmode
2917 ##
2918 record(mbbi, "$(P):LS01:OMI1") {
2919  field(DTYP, "Soft Channel")
2920  field(ZRST, "None")
2921  field(ZRVL, "0")
2922  field(ONST, "Input A")
2923  field(ONVL, "1")
2924  field(TWST, "Input B")
2925  field(TWVL, "2")
2926  field(THST, "Input C")
2927  field(THVL, "3")
2928  field(FRST, "Input D")
2929  field(FRVL, "4")
2930  field(FVST, "Input D2")
2931  field(FVVL, "5")
2932  field(SXST, "Input D3")
2933  field(SXVL, "6")
2934  field(SVST, "Input D4")
2935  field(SVVL, "7")
2936  field(EIST, "Input D5")
2937  field(EIVL, "8")
2938 }
2939 
2940 ##
2941 ## Read the power up mode to use for outmode
2942 ##
2943 record(mbbi, "$(P):LS01:OMP1") {
2944  field(DTYP, "Soft Channel")
2945  field(ZRST, "Off")
2946  field(ZRVL, "0")
2947  field(ONST, "On")
2948  field(ONVL, "1")
2949 }
2950 
2951 ################################################################
2952 # Write records
2953 ################################################################
2954 
2955 ##
2956 ## Set the setpoint temperature.
2957 ##
2958 record(ao, "$(P):LS01:SETP_S1") {
2959  field(DTYP, "stream")
2960  field(SDIS, "$(P):LS01:DISABLE")
2961  field(DESC, "Setpoint temperature")
2962  field(OUT, "@ls336.proto setSETP(1) L0 0")
2963  field(PREC, "3")
2964  field(FLNK, "$(P):LS01:SETP_S1_BUSYSET.PROC")
2965  field(EGU, "K")
2966  info(archive, "Monitor, 00:00:01, VAL")
2967 }
2968 
2969 ###############################################################################
2970 
2971 ##
2972 ## A few records to support put_callback on the setpoint. We use the busy record.
2973 ## A temperature window is used. The temperature must be within
2974 ## the window, before the callback is done.
2975 ##
2976 
2977 record(dfanout, "$(P):LS01:SETP_S1_BUSYSET")
2978 {
2979  field(VAL, "0")
2980  field(OUTA, "$(P):LS01:IN_WINDOW1.VAL PP")
2981  field(FLNK, "$(P):LS01:SETP_S1_BUSYSET2")
2982 }
2983 record(dfanout, "$(P):LS01:SETP_S1_BUSYSET2")
2984 {
2985  field(VAL, "1")
2986  field(OUTA, "$(P):LS01:SETP1.PROC PP")
2987  field(OUTB, "$(P):LS01:SETP_S1_BUSY PP")
2988  field(FLNK, "$(P):LS01:CALC_IN_WINDOW1")
2989 }
2990 record(busy, "$(P):LS01:SETP_S1_BUSY")
2991 {
2992 }
2993 record(calcout, "$(P):LS01:CALC_IN_WINDOW1") {
2994  field(PINI, "YES")
2995  field(INPA, "1")
2996  field(INPB, "$(P):LS01:DUMMY1.VAL")
2997  field(INPC, "$(P):LS01:SETP_S1.VAL")
2998  field(CALC, "((B>=(C-A))&&(B<=(C+A)))?1:0")
2999  field(OOPT, "Every Time")
3000  field(OUT, "$(P):LS01:IN_WINDOW1.VAL PP")
3001  field(DOPT, "Use CALC")
3002  field(SCAN, "1 second")
3003  field(PREC, "1")
3004  info(autosaveFields, "A")
3005  info(archive, "Monitor, 00:00:01, A B C VAL")
3006 }
3007 record(bo, "$(P):LS01:IN_WINDOW1") {
3008  field(DESC, "Temperature In Window")
3009  field(VAL, "0")
3010  field(PINI, "YES")
3011  field(OMSL, "supervisory")
3012  field(ZNAM, "Not In Window")
3013  field(ONAM, "In Window")
3014  info(archive, "Monitor, 00:00:01, VAL")
3015 }
3016 
3017 ##
3018 ## Set busy record 'done' when TIME_WINDOW1=1
3019 ##
3020 record(calcout, "$(P):LS01:CALC_BUSY_DONE1") {
3021  field(INPA, "$(P):LS01:IN_WINDOW1.VAL CP")
3022  field(CALC, "(A=1)?0:1")
3023  field(OOPT, "Every Time")
3024  field(OUT, "$(P):LS01:SETP_S1_BUSY.VAL PP")
3025 }
3026 
3027 ###############################################################################
3028 
3029 ##
3030 ## Dummy record to use for input link name default
3031 ##
3032 record(ai, "$(P):LS01:DUMMY1") {
3033 }
3034 
3035 ##
3036 ## Monitor $(P):LS01:OMI1 to determin which input sensor to use
3037 ## to deal with the callback. The below set of records automatically
3038 ## switch the input when the 'control input' is changed. They make
3039 ## use of the input sensor PV names passed into this template.
3040 ##
3041 record(calcout, "$(P):LS01:SET_1_INPUTA") {
3042  field(CALC, "A=1")
3043  field(INPA, "$(P):LS01:OMI1.VAL CP")
3044  field(DOPT, "Use OCAL")
3045  field(OVAL, "1")
3046  field(OOPT, "When Non-zero")
3047  field(OUT, "$(P):LS01:SET_1_INPUTA_LINK.PROC")
3048 }
3049 record(stringout, "$(P):LS01:SET_1_INPUTA_LINK") {
3050  field(VAL, "$(P):LS01:KRDG0.VAL CP")
3051  field(OUT, "$(P):LS01:CALC_IN_WINDOW1.INPB CA")
3052 }
3053 
3054 record(calcout, "$(P):LS01:SET_1_INPUTB") {
3055  field(CALC, "A=2")
3056  field(INPA, "$(P):LS01:OMI1.VAL CP")
3057  field(DOPT, "Use OCAL")
3058  field(OVAL, "1")
3059  field(OOPT, "When Non-zero")
3060  field(OUT, "$(P):LS01:SET_1_INPUTB_LINK.PROC")
3061 }
3062 record(stringout, "$(P):LS01:SET_1_INPUTB_LINK") {
3063  field(VAL, "$(P):LS01:KRDG1.VAL CP")
3064  field(OUT, "$(P):LS01:CALC_IN_WINDOW1.INPB CA")
3065 }
3066 
3067 record(calcout, "$(P):LS01:SET_1_INPUTC") {
3068  field(CALC, "A=3")
3069  field(INPA, "$(P):LS01:OMI1.VAL CP")
3070  field(DOPT, "Use OCAL")
3071  field(OVAL, "1")
3072  field(OOPT, "When Non-zero")
3073  field(OUT, "$(P):LS01:SET_1_INPUTC_LINK.PROC")
3074 }
3075 record(stringout, "$(P):LS01:SET_1_INPUTC_LINK") {
3076  field(VAL, "$(P):LS01:KRDG2.VAL CP")
3077  field(OUT, "$(P):LS01:CALC_IN_WINDOW1.INPB CA")
3078 }
3079 
3080 record(calcout, "$(P):LS01:SET_1_INPUTD") {
3081  field(CALC, "A=4")
3082  field(INPA, "$(P):LS01:OMI1.VAL CP")
3083  field(DOPT, "Use OCAL")
3084  field(OVAL, "1")
3085  field(OOPT, "When Non-zero")
3086  field(OUT, "$(P):LS01:SET_1_INPUTD_LINK.PROC")
3087 }
3088 record(stringout, "$(P):LS01:SET_1_INPUTD_LINK") {
3089  field(VAL, "$(P):LS01:KRDG3.VAL CP")
3090  field(OUT, "$(P):LS01:CALC_IN_WINDOW1.INPB CA")
3091 }
3092 
3093 record(calcout, "$(P):LS01:SET_1_INPUTD2") {
3094  field(CALC, "A=5")
3095  field(INPA, "$(P):LS01:OMI1.VAL CP")
3096  field(DOPT, "Use OCAL")
3097  field(OVAL, "1")
3098  field(OOPT, "When Non-zero")
3099  field(OUT, "$(P):LS01:SET_1_INPUTD2_LINK.PROC")
3100 }
3101 record(stringout, "$(P):LS01:SET_1_INPUTD2_LINK") {
3102  field(VAL, "$(P):LS01:KRDGD2.VAL CP")
3103  field(OUT, "$(P):LS01:CALC_IN_WINDOW1.INPB CA")
3104 }
3105 
3106 record(calcout, "$(P):LS01:SET_1_INPUTD3") {
3107  field(CALC, "A=6")
3108  field(INPA, "$(P):LS01:OMI1.VAL CP")
3109  field(DOPT, "Use OCAL")
3110  field(OVAL, "1")
3111  field(OOPT, "When Non-zero")
3112  field(OUT, "$(P):LS01:SET_1_INPUTD3_LINK.PROC")
3113 }
3114 record(stringout, "$(P):LS01:SET_1_INPUTD3_LINK") {
3115  field(VAL, "$(P):LS01:KRDGD3.VAL CP")
3116  field(OUT, "$(P):LS01:CALC_IN_WINDOW1.INPB CA")
3117 }
3118 
3119 record(calcout, "$(P):LS01:SET_1_INPUTD4") {
3120  field(CALC, "A=7")
3121  field(INPA, "$(P):LS01:OMI1.VAL CP")
3122  field(DOPT, "Use OCAL")
3123  field(OVAL, "1")
3124  field(OOPT, "When Non-zero")
3125  field(OUT, "$(P):LS01:SET_1_INPUTD4_LINK.PROC")
3126 }
3127 record(stringout, "$(P):LS01:SET_1_INPUTD4_LINK") {
3128  field(VAL, "$(P):LS01:KRDGD4.VAL CP")
3129  field(OUT, "$(P):LS01:CALC_IN_WINDOW1.INPB CA")
3130 }
3131 
3132 record(calcout, "$(P):LS01:SET_1_INPUTD5") {
3133  field(CALC, "A=8")
3134  field(INPA, "$(P):LS01:OMI1.VAL CP")
3135  field(DOPT, "Use OCAL")
3136  field(OVAL, "1")
3137  field(OOPT, "When Non-zero")
3138  field(OUT, "$(P):LS01:SET_1_INPUTD5_LINK.PROC")
3139 }
3140 record(stringout, "$(P):LS01:SET_1_INPUTD5_LINK") {
3141  field(VAL, "$(P):LS01:KRDGD5.VAL CP")
3142  field(OUT, "$(P):LS01:CALC_IN_WINDOW1.INPB CA")
3143 }
3144 
3145 
3146 
3147 ##
3148 ## Set the range parameter.
3149 ## The strings are output specific and is defined in another file.
3150 ##
3151 record(mbbo, "$(P):LS01:RANGE_S1") {
3152  field(DTYP, "stream")
3153  field(SDIS, "$(P):LS01:DISABLE")
3154  field(OUT, "@ls336.proto setRANGE(1) L0 0")
3155  field(FLNK, "$(P):LS01:RANGE1.PROC CA")
3156 }
3157 
3158 ##
3159 ## Set the ramp rate parameter.
3160 ##
3161 ## This is the desired temperate increase/decrease rate
3162 ## per second when heating/cooling.
3163 ##
3164 ## The ramp and ramp status parameters are actually one command
3165 ## for the lakeshore. Therefore one must pass into this
3166 ## record the existing/desired ramp status, as well as the
3167 ## desired ramp. This is done automatically by reading the
3168 ## PV which holds the current ramp status.
3169 ##
3170 record(ao, "$(P):LS01:RAMP_S1") {
3171  field(DTYP, "stream")
3172  field(SDIS, "$(P):LS01:DISABLE")
3173  field(OUT, "@ls336.proto setRAMP($(P):LS01:RAMPST1,1) L0 0")
3174  field(PREC, "3")
3175  field(FLNK, "$(P):LS01:RAMP1.PROC CA")
3176  field(EGU, "K/minute")
3177 }
3178 
3179 ##
3180 ## Set the ramp status parameter.
3181 ##
3182 ## 0=off
3183 ## 1=on
3184 ##
3185 ## The ramp and ramp status parameters are actually one command
3186 ## for the lakeshore. Therefore one must pass into this
3187 ## record the existing/desired ramp, as well as the
3188 ## desired ramp status. This is done automatically by reading the
3189 ## PV which holds the current ramp value.
3190 ##
3191 record(bo, "$(P):LS01:RAMPST_S1") {
3192  field(DTYP, "stream")
3193  field(SDIS, "$(P):LS01:DISABLE")
3194  field(OUT, "@ls336.proto setRAMPSTATUS($(P):LS01:RAMP1,1) L0 0")
3195  field(FLNK, "$(P):LS01:RAMP1.PROC CA")
3196  field(ZNAM, "Off")
3197  field(ONAM, "On")
3198 }
3199 
3200 ##
3201 ## Set the manual output value.
3202 ##
3203 record(ao, "$(P):LS01:MOUT_S1") {
3204  field(DTYP, "stream")
3205  field(SDIS, "$(P):LS01:DISABLE")
3206  field(OUT, "@ls336.proto setMOUT(1) L0 0")
3207  field(FLNK, "$(P):LS01:MOUT1.PROC CA")
3208 }
3209 
3210 ##
3211 ## Set the PID P parameter.
3212 ##
3213 record(ao, "$(P):LS01:P_S1") {
3214  field(DTYP, "stream")
3215  field(SDIS, "$(P):LS01:DISABLE")
3216  field(OUT, "@ls336.proto setP(1,$(P):LS01:I1,$(P):LS01:D1) L0 0")
3217  field(FLNK, "$(P):LS01:P1.PROC CA")
3218 }
3219 
3220 ##
3221 ## Set the PID I parameter.
3222 ##
3223 record(ao, "$(P):LS01:I_S1") {
3224  field(DTYP, "stream")
3225  field(SDIS, "$(P):LS01:DISABLE")
3226  field(OUT, "@ls336.proto setI($(P):LS01:P1,1,$(P):LS01:D1) L0 0")
3227  field(FLNK, "$(P):LS01:P1.PROC CA")
3228 }
3229 
3230 ##
3231 ## Set the PID D parameter.
3232 ##
3233 record(ao, "$(P):LS01:D_S1") {
3234  field(DTYP, "stream")
3235  field(SDIS, "$(P):LS01:DISABLE")
3236  field(OUT, "@ls336.proto setD($(P):LS01:P1,$(P):LS01:I1,1) L0 0")
3237  field(FLNK, "$(P):LS01:P1.PROC CA")
3238 }
3239 
3240 ##
3241 ## Set the mode to use for outmode
3242 ## The strings are output specific. This is defined in another file.
3243 ##
3244 record(mbbo, "$(P):LS01:OMM_S1") {
3245  field(DTYP, "stream")
3246  field(SDIS, "$(P):LS01:DISABLE")
3247  field(ZRVL, "0")
3248  field(ONVL, "1")
3249  field(TWVL, "2")
3250  field(THVL, "3")
3251  field(FRVL, "4")
3252  field(FVVL, "5")
3253  field(OUT, "@ls336.proto setOM(1,$(P):LS01:OMI1,$(P):LS01:OMP1) L0 0")
3254  field(FLNK, "$(P):LS01:OMM1.PROC CA")
3255 }
3256 
3257 ##
3258 ## Set the input to use for outmode
3259 ##
3260 record(mbbo, "$(P):LS01:OMI_S1") {
3261  field(DTYP, "stream")
3262  field(SDIS, "$(P):LS01:DISABLE")
3263  field(ZRST, "None")
3264  field(ZRVL, "0")
3265  field(ONST, "Input A")
3266  field(ONVL, "1")
3267  field(TWST, "Input B")
3268  field(TWVL, "2")
3269  field(THST, "Input C")
3270  field(THVL, "3")
3271  field(FRST, "Input D")
3272  field(FRVL, "4")
3273  field(FVST, "Input D2")
3274  field(FVVL, "5")
3275  field(SXST, "Input D3")
3276  field(SXVL, "6")
3277  field(SVST, "Input D4")
3278  field(SVVL, "7")
3279  field(EIST, "Input D5")
3280  field(EIVL, "8")
3281  field(OUT, "@ls336.proto setOMI(1,$(P):LS01:OMM1,$(P):LS01:OMP1) L0 0")
3282  field(FLNK, "$(P):LS01:OMM1.PROC CA")
3283 }
3284 
3285 ##
3286 ## Set the power up mode to use for outmode
3287 ##
3288 record(mbbo, "$(P):LS01:OMP_S1") {
3289  field(DTYP, "stream")
3290  field(SDIS, "$(P):LS01:DISABLE")
3291  field(ZRST, "Off")
3292  field(ZRVL, "0")
3293  field(ONST, "On")
3294  field(ONVL, "1")
3295  field(OUT, "@ls336.proto setOMP(1,$(P):LS01:OMM1,$(P):LS01:OMI1) L0 0")
3296  field(FLNK, "$(P):LS01:OMM1.PROC CA")
3297 }
3298 
3299 ##
3300 ## Set the type of tuning mode
3301 ##
3302 record(mbbo, "$(P):LS01:TUNEMODE_S1") {
3303  field(SDIS, "$(P):LS01:DISABLE")
3304  field(ZRST, "P Only")
3305  field(ZRVL, "0")
3306  field(ONST, "P and I")
3307  field(ONVL, "1")
3308  field(TWST, "P, I and D")
3309  field(TWVL, "2")
3310 }
3311 
3312 
3313 ##
3314 ## Start the tuning process
3315 ##
3316 record(ao, "$(P):LS01:TUNESTART1") {
3317  field(DTYP, "stream")
3318  field(SDIS, "$(P):LS01:DISABLE")
3319  field(DESC, "Start the auto tuning")
3320  field(OUT, "@ls336.proto setATUNE(1,$(P):LS01:TUNEMODE_S1) L0 0")
3321 }
3322 
3323 
3324 ##
3325 ## Read all ZONE settings
3326 ##
3327 record(seq, "$(P):LS01:Z:READ1") {
3328  field(DESC, "Read Output 1 ZONE")
3329  field(DOL1, "1")
3330  field(DLY1, "0.1")
3331  field(LNK1, "$(P):LS01:Z1:ALL1.PROC")
3332  field(DOL2, "1")
3333  field(DLY2, "0.1")
3334  field(LNK2, "$(P):LS01:Z2:ALL1.PROC")
3335  field(DOL3, "1")
3336  field(DLY3, "0.1")
3337  field(LNK3, "$(P):LS01:Z3:ALL1.PROC")
3338  field(DOL4, "1")
3339  field(DLY4, "0.1")
3340  field(LNK4, "$(P):LS01:Z4:ALL1.PROC")
3341  field(DOL5, "1")
3342  field(DLY5, "0.1")
3343  field(LNK5, "$(P):LS01:Z5:ALL1.PROC")
3344  field(DOL6, "1")
3345  field(DLY6, "0.1")
3346  field(LNK6, "$(P):LS01:Z6:ALL1.PROC")
3347  field(DOL7, "1")
3348  field(DLY7, "0.1")
3349  field(LNK7, "$(P):LS01:Z7:ALL1.PROC")
3350  field(DOL8, "1")
3351  field(DLY8, "0.1")
3352  field(LNK8, "$(P):LS01:Z8:ALL1.PROC")
3353  field(DOL9, "1")
3354  field(DLY9, "0.1")
3355  field(LNK9, "$(P):LS01:Z9:ALL1.PROC")
3356  field(DOLA, "1")
3357  field(DLYA, "0.1")
3358  field(LNKA, "$(P):LS01:Z10:ALL1.PROC")
3359  field(PINI, "YES")
3360 }
3361 
3362 ###############################################
3363 # This is included in lakeshore336.template
3364 # This template is for outputs 1 and 2, which can provide heater power.
3365 
3366 ################################################################
3367 # Read records
3368 ################################################################
3369 
3370 ##
3371 ## Read the heater output value.
3372 ##
3373 record(ai, "$(P):LS01:HTR1") {
3374  field(DTYP, "stream")
3375  field(SDIS, "$(P):LS01:DISABLE_POLL")
3376  field(INP, "@ls336.proto getHTR(1) L0 0")
3377  field(SCAN, "5 second")
3378  field(PREC, "1")
3379  field(EGU, "%")
3380  info(archive, "Monitor, 00:00:01, VAL")
3381 }
3382 
3383 ##
3384 ## Define the strings and values for this record.
3385 ##
3386 record(mbbi, "$(P):LS01:RANGE1") {
3387  field(ZRST, "Off")
3388  field(ONST, "Range1/Low")
3389  field(TWST, "Range2/Medium")
3390  field(THST, "Range3/High")
3391  field(FRST, "Range4")
3392  field(FVST, "Range5")
3393 }
3394 
3395 ##
3396 ## Define the strings and values for this record.
3397 ##
3398 record(mbbi, "$(P):LS01:OMM1") {
3399  field(ZRST, "Off")
3400  field(ONST, "Closed Loop PID")
3401  field(TWST, "Zone")
3402  field(THST, "Open Loop")
3403 }
3404 
3405 ##
3406 ## Define the strings and values for this record.
3407 ##
3408 record(mbbo, "$(P):LS01:RANGE_S1") {
3409  field(ZRST, "Off")
3410  field(ONST, "Range1/Low")
3411  field(TWST, "Range2/Medium")
3412  field(THST, "Range3/High")
3413  field(FRST, "Range4")
3414  field(FVST, "Range5")
3415 }
3416 
3417 ##
3418 ## Define the strings and values for this record.
3419 ##
3420 record(mbbo, "$(P):LS01:OMM_S1") {
3421  field(ZRST, "Off")
3422  field(ONST, "Closed Loop PID")
3423  field(TWST, "Zone")
3424  field(THST, "Open Loop")
3425 }
3426 
3427 ##
3428 ## Read the heater status
3429 ##
3430 record(longin, "$(P):LS01:HTRST1") {
3431  field(DTYP, "stream")
3432  field(SDIS, "$(P):LS01:DISABLE_POLL")
3433  field(SCAN, "5 second")
3434  field(INP, "@ls336.proto getHTRST(D5) L0 0")
3435  field(FLNK, "$(P):LS01:HTRST1_CALC")
3436  info(archive, "Monitor, 00:00:01, VAL")
3437 }
3438 
3439 ##
3440 ## Cache the heater status because this is cleared on a read on the controller.
3441 ##
3442 record(calcout, "$(P):LS01:HTRST1_CALC") {
3443  field(INPA, "$(P):LS01:HTRST1.VAL")
3444  field(CALC, "A!=0?A:0")
3445  field(DOPT, "Use CALC")
3446  field(OOPT, "When Non-zero")
3447  field(OUT, "$(P):LS01:HTRST1_CACHE.RVAL PP")
3448 }
3449 record(mbbi, "$(P):LS01:HTRST1_CACHE") {
3450  field(DESC, "Cached HTRST")
3451  field(DTYP, "Raw Soft Channel")
3452  field(ZRST, "No Error")
3453  field(ZRVL, "0")
3454  field(ONST, "Open Load")
3455  field(ONVL, "1")
3456  field(TWST, "Short/Compliance")
3457  field(TWVL, "2")
3458  field(VAL, "0")
3459  field(PINI, "YES")
3460  field(ONSV, "MAJOR")
3461  field(TWSV, "MAJOR")
3462  info(archive, "Monitor, 00:00:01, VAL")
3463 }
3464 
3465 ##
3466 ## Provide record to reset the cached value
3467 ##
3468 record(bo, "$(P):LS01:HTRST1_RESET") {
3469  field(DESC, "Reset Cached HTRST")
3470  field(VAL, "0")
3471  field(OUT, "$(P):LS01:HTRST1_CACHE.RVAL PP")
3472 }
3473 
3474 ###############################################
3475 # Add in ZONE support
3476 ###############################################
3477 
3478 #######################################
3479 #
3480 # Template to support reading and setting
3481 # controller ZONE parameters. It reads the ZONE
3482 # parameters into an array, then uses subArrays to
3483 # extract each parameter.
3484 #
3485 # This template is used by the output template
3486 # and it needs the following macros:
3487 #
3488 # ZONE: zone number
3489 # OUT: output number
3490 #
3491 #######################################
3492 
3493 ##
3494 ## Read the ZONE setting into an array (8 values)
3495 ##
3496 record(waveform, "$(P):LS01:Z1:ALL1") {
3497  field(DTYP, "stream")
3498  field(SDIS, "$(P):LS01:DISABLE_POLL")
3499  field(INP, "@ls336.proto getZONE(1,1) L0 0")
3500  field(SCAN, "Passive")
3501  field(NELM, "8")
3502  field(FTVL, "DOUBLE")
3503  field(PREC, "1")
3504  field(FLNK, "$(P):LS01:Z1:UB1:ARRAY.PROC")
3505 }
3506 
3507 ##
3508 ## Read the ZONE upper boundary setting.
3509 ##
3510 record(subArray, "$(P):LS01:Z1:UB1:ARRAY") {
3511  field(SCAN, "Passive")
3512  field(FTVL, "DOUBLE")
3513  field(INP, "$(P):LS01:Z1:ALL1.VAL MS")
3514  field(MALM, "8")
3515  field(NELM, "1")
3516  field(INDX, "0")
3517  field(PREC, "1")
3518  field(FLNK, "$(P):LS01:Z1:UB1.PROC")
3519 }
3520 record(ai, "$(P):LS01:Z1:UB1") {
3521  field(SCAN, "Passive")
3522  field(INP, "$(P):LS01:Z1:UB1:ARRAY.VAL MS")
3523  field(PREC, "1")
3524  field(FLNK, "$(P):LS01:Z1:P1:ARRAY.PROC")
3525 }
3526 
3527 ##
3528 ## Read the ZONE P setting.
3529 ##
3530 record(subArray, "$(P):LS01:Z1:P1:ARRAY") {
3531  field(SCAN, "Passive")
3532  field(FTVL, "DOUBLE")
3533  field(INP, "$(P):LS01:Z1:ALL1.VAL MS")
3534  field(MALM, "8")
3535  field(NELM, "1")
3536  field(INDX, "1")
3537  field(PREC, "1")
3538  field(FLNK, "$(P):LS01:Z1:P1.PROC")
3539 }
3540 record(ai, "$(P):LS01:Z1:P1") {
3541  field(SCAN, "Passive")
3542  field(INP, "$(P):LS01:Z1:P1:ARRAY.VAL MS")
3543  field(PREC, "1")
3544  field(FLNK, "$(P):LS01:Z1:I1:ARRAY.PROC")
3545 }
3546 
3547 ##
3548 ## Read the ZONE I setting.
3549 ##
3550 record(subArray, "$(P):LS01:Z1:I1:ARRAY") {
3551  field(SCAN, "Passive")
3552  field(FTVL, "DOUBLE")
3553  field(INP, "$(P):LS01:Z1:ALL1.VAL MS")
3554  field(MALM, "8")
3555  field(NELM, "1")
3556  field(INDX, "2")
3557  field(PREC, "1")
3558  field(FLNK, "$(P):LS01:Z1:I1.PROC")
3559 }
3560 record(ai, "$(P):LS01:Z1:I1") {
3561  field(SCAN, "Passive")
3562  field(INP, "$(P):LS01:Z1:I1:ARRAY.VAL MS")
3563  field(PREC, "1")
3564  field(FLNK, "$(P):LS01:Z1:D1:ARRAY.PROC")
3565 }
3566 
3567 ##
3568 ## Read the ZONE D setting.
3569 ##
3570 record(subArray, "$(P):LS01:Z1:D1:ARRAY") {
3571  field(SCAN, "Passive")
3572  field(FTVL, "DOUBLE")
3573  field(INP, "$(P):LS01:Z1:ALL1.VAL MS")
3574  field(MALM, "8")
3575  field(NELM, "1")
3576  field(INDX, "3")
3577  field(PREC, "1")
3578  field(FLNK, "$(P):LS01:Z1:D1.PROC")
3579 }
3580 record(ai, "$(P):LS01:Z1:D1") {
3581  field(SCAN, "Passive")
3582  field(INP, "$(P):LS01:Z1:D1:ARRAY.VAL MS")
3583  field(PREC, "1")
3584  field(FLNK, "$(P):LS01:Z1:MOUT1:ARRAY.PROC")
3585 }
3586 
3587 ##
3588 ## Read the ZONE MOUT setting.
3589 ##
3590 record(subArray, "$(P):LS01:Z1:MOUT1:ARRAY") {
3591  field(SCAN, "Passive")
3592  field(FTVL, "DOUBLE")
3593  field(INP, "$(P):LS01:Z1:ALL1.VAL MS")
3594  field(MALM, "8")
3595  field(NELM, "1")
3596  field(INDX, "4")
3597  field(PREC, "1")
3598  field(FLNK, "$(P):LS01:Z1:MOUT1.PROC")
3599 }
3600 record(ai, "$(P):LS01:Z1:MOUT1") {
3601  field(SCAN, "Passive")
3602  field(INP, "$(P):LS01:Z1:MOUT1:ARRAY.VAL MS")
3603  field(PREC, "1")
3604  field(FLNK, "$(P):LS01:Z1:RANGE1:ARRAY.PROC")
3605 }
3606 
3607 ##
3608 ## Read the ZONE RANGE setting.
3609 ##
3610 record(subArray, "$(P):LS01:Z1:RANGE1:ARRAY") {
3611  field(SCAN, "Passive")
3612  field(FTVL, "DOUBLE")
3613  field(INP, "$(P):LS01:Z1:ALL1.VAL MS")
3614  field(MALM, "8")
3615  field(NELM, "1")
3616  field(INDX, "5")
3617  field(PREC, "1")
3618  field(FLNK, "$(P):LS01:Z1:RANGE1.PROC")
3619 }
3620 record(mbbi, "$(P):LS01:Z1:RANGE1") {
3621  field(INP, "$(P):LS01:Z1:RANGE1:ARRAY.VAL")
3622  field(SCAN, "Passive")
3623  field(ZRST, "Off")
3624  field(ZRVL, "0")
3625  field(ONST, "Range1/Low")
3626  field(ONVL, "1")
3627  field(TWST, "Range2/Medium")
3628  field(TWVL, "2")
3629  field(THST, "Range3/High")
3630  field(THVL, "3")
3631  field(FRST, "Range4")
3632  field(FRVL, "4")
3633  field(FVST, "Range5")
3634  field(FVVL, "5")
3635  field(FLNK, "$(P):LS01:Z1:INPUT1:ARRAY.PROC")
3636 }
3637 
3638 ##
3639 ## Read the ZONE INPUT setting.
3640 ##
3641 record(subArray, "$(P):LS01:Z1:INPUT1:ARRAY") {
3642  field(SCAN, "Passive")
3643  field(FTVL, "DOUBLE")
3644  field(INP, "$(P):LS01:Z1:ALL1.VAL MS")
3645  field(MALM, "8")
3646  field(NELM, "1")
3647  field(INDX, "6")
3648  field(PREC, "1")
3649  field(FLNK, "$(P):LS01:Z1:INPUT1.PROC")
3650 }
3651 record(mbbi, "$(P):LS01:Z1:INPUT1") {
3652  field(INP, "$(P):LS01:Z1:INPUT1:ARRAY.VAL")
3653  field(SCAN, "Passive")
3654  field(ZRST, "None")
3655  field(ZRVL, "0")
3656  field(ONST, "Input A")
3657  field(ONVL, "1")
3658  field(TWST, "Input B")
3659  field(TWVL, "2")
3660  field(THST, "Input C")
3661  field(THVL, "3")
3662  field(FRST, "Input D")
3663  field(FRVL, "4")
3664  field(FVST, "Input D2")
3665  field(FVVL, "5")
3666  field(SXST, "Input D3")
3667  field(SXVL, "6")
3668  field(SVST, "Input D4")
3669  field(SVVL, "7")
3670  field(EIST, "Input D5")
3671  field(EIVL, "8")
3672  field(FLNK, "$(P):LS01:Z1:RATE1:ARRAY.PROC")
3673 }
3674 
3675 ##
3676 ## Read the ZONE RATE setting.
3677 ##
3678 record(subArray, "$(P):LS01:Z1:RATE1:ARRAY") {
3679  field(SCAN, "Passive")
3680  field(FTVL, "DOUBLE")
3681  field(INP, "$(P):LS01:Z1:ALL1.VAL MS")
3682  field(MALM, "8")
3683  field(NELM, "1")
3684  field(INDX, "7")
3685  field(PREC, "1")
3686  field(FLNK, "$(P):LS01:Z1:RATE1.PROC")
3687 }
3688 record(ai, "$(P):LS01:Z1:RATE1") {
3689  field(SCAN, "Passive")
3690  field(INP, "$(P):LS01:Z1:RATE1:ARRAY.VAL MS")
3691  field(PREC, "1")
3692  field(FLNK, "$(P):LS01:Z1:INITCALC1.PROC")
3693 }
3694 
3695 ##############################################################
3696 ##
3697 ## Populate the write records below with the current values.
3698 ## Only do this once at startup.
3699 ##
3700 ###############################################################
3701 
3702 record(calcout, "$(P):LS01:Z1:INITCALC1") {
3703  field(INPA, "0")
3704  field(CALC, "A")
3705  field(VAL, "0")
3706  field(DOPT, "Use OCAL")
3707  field(OOPT, "When Zero")
3708  field(OCAL, "1")
3709  field(OUT, "$(P):LS01:Z1:INITUB1.PROC")
3710 }
3711 
3712 record(dfanout, "$(P):LS01:Z1:INITUB1") {
3713  field(OMSL, "closed_loop")
3714  field(DOL, "$(P):LS01:Z1:UB1.VAL")
3715  field(OUTA, "$(P):LS01:Z1:UB_S1.VAL PP")
3716  field(FLNK, "$(P):LS01:Z1:INITP1.PROC")
3717 }
3718 record(dfanout, "$(P):LS01:Z1:INITP1") {
3719  field(OMSL, "closed_loop")
3720  field(DOL, "$(P):LS01:Z1:P1.VAL")
3721  field(OUTA, "$(P):LS01:Z1:P_S1.VAL PP")
3722  field(FLNK, "$(P):LS01:Z1:INITI1.PROC")
3723 }
3724 record(dfanout, "$(P):LS01:Z1:INITI1") {
3725  field(OMSL, "closed_loop")
3726  field(DOL, "$(P):LS01:Z1:I1.VAL")
3727  field(OUTA, "$(P):LS01:Z1:I_S1.VAL PP")
3728  field(FLNK, "$(P):LS01:Z1:INITD1.PROC")
3729 }
3730 record(dfanout, "$(P):LS01:Z1:INITD1") {
3731  field(OMSL, "closed_loop")
3732  field(DOL, "$(P):LS01:Z1:D1.VAL")
3733  field(OUTA, "$(P):LS01:Z1:D_S1.VAL PP")
3734  field(FLNK, "$(P):LS01:Z1:INITMOUT1.PROC")
3735 }
3736 record(dfanout, "$(P):LS01:Z1:INITMOUT1") {
3737  field(OMSL, "closed_loop")
3738  field(DOL, "$(P):LS01:Z1:MOUT1.VAL")
3739  field(OUTA, "$(P):LS01:Z1:MOUT_S1.VAL PP")
3740  field(FLNK, "$(P):LS01:Z1:INITRANGE1.PROC")
3741 }
3742 record(dfanout, "$(P):LS01:Z1:INITRANGE1") {
3743  field(OMSL, "closed_loop")
3744  field(DOL, "$(P):LS01:Z1:RANGE1.VAL")
3745  field(OUTA, "$(P):LS01:Z1:RANGE_S1.VAL PP")
3746  field(FLNK, "$(P):LS01:Z1:INITINPUT1.PROC")
3747 }
3748 record(dfanout, "$(P):LS01:Z1:INITINPUT1") {
3749  field(OMSL, "closed_loop")
3750  field(DOL, "$(P):LS01:Z1:INPUT1.VAL")
3751  field(OUTA, "$(P):LS01:Z1:INPUT_S1.VAL PP")
3752  field(FLNK, "$(P):LS01:Z1:INITRATE1.PROC")
3753 }
3754 record(dfanout, "$(P):LS01:Z1:INITRATE1") {
3755  field(OMSL, "closed_loop")
3756  field(DOL, "$(P):LS01:Z1:RATE1.VAL")
3757  field(OUTA, "$(P):LS01:Z1:RATE_S1.VAL PP")
3758  field(FLNK, "$(P):LS01:Z1:INITCOUNT1.PROC")
3759 }
3760 
3761 record(dfanout, "$(P):LS01:Z1:INITCOUNT1") {
3762  field(DOL, "1")
3763  field(OUTA, "$(P):LS01:Z1:INITCALC1.A")
3764 }
3765 
3766 
3767 
3768 #############################################
3769 # Write records. There is a calcout record to
3770 # do the actual write.
3771 #############################################
3772 
3773 ##
3774 ## Set the ZONE upper boundary setting.
3775 ##
3776 record(ao, "$(P):LS01:Z1:UB_S1") {
3777  field(SCAN, "Passive")
3778  field(PREC, "1")
3779  field(SDIS, "$(P):LS01:DISABLE")
3780 }
3781 
3782 ##
3783 ## Set the ZONE P setting.
3784 ##
3785 record(ao, "$(P):LS01:Z1:P_S1") {
3786  field(SCAN, "Passive")
3787  field(PREC, "1")
3788  field(SDIS, "$(P):LS01:DISABLE")
3789 }
3790 
3791 ##
3792 ## Set the ZONE I setting.
3793 ##
3794 record(ao, "$(P):LS01:Z1:I_S1") {
3795  field(SCAN, "Passive")
3796  field(PREC, "1")
3797  field(SDIS, "$(P):LS01:DISABLE")
3798 }
3799 
3800 ##
3801 ## Set the ZONE D setting.
3802 ##
3803 record(ao, "$(P):LS01:Z1:D_S1") {
3804  field(SCAN, "Passive")
3805  field(PREC, "1")
3806  field(SDIS, "$(P):LS01:DISABLE")
3807 }
3808 
3809 ##
3810 ## Set the ZONE MOUT setting.
3811 ##
3812 record(ao, "$(P):LS01:Z1:MOUT_S1") {
3813  field(SCAN, "Passive")
3814  field(PREC, "1")
3815  field(SDIS, "$(P):LS01:DISABLE")
3816 }
3817 
3818 ##
3819 ## Set the ZONE RANGE setting.
3820 ##
3821 record(mbbo, "$(P):LS01:Z1:RANGE_S1") {
3822  field(SCAN, "Passive")
3823  field(ZRST, "Off")
3824  field(ZRVL, "0")
3825  field(ONST, "Range1/Low")
3826  field(ONVL, "1")
3827  field(TWST, "Range2/Medium")
3828  field(TWVL, "2")
3829  field(THST, "Range3/High")
3830  field(THVL, "3")
3831  field(FRST, "Range4")
3832  field(FRVL, "4")
3833  field(FVST, "Range5")
3834  field(FVVL, "5")
3835  field(SDIS, "$(P):LS01:DISABLE")
3836 }
3837 
3838 ##
3839 ## Set the ZONE INPUT setting.
3840 ##
3841 record(mbbo, "$(P):LS01:Z1:INPUT_S1") {
3842  field(ZRST, "None")
3843  field(ZRVL, "0")
3844  field(ONST, "Input A")
3845  field(ONVL, "1")
3846  field(TWST, "Input B")
3847  field(TWVL, "2")
3848  field(THST, "Input C")
3849  field(THVL, "3")
3850  field(FRST, "Input D")
3851  field(FRVL, "4")
3852  field(FVST, "Input D2")
3853  field(FVVL, "5")
3854  field(SXST, "Input D3")
3855  field(SXVL, "6")
3856  field(SVST, "Input D4")
3857  field(SVVL, "7")
3858  field(EIST, "Input D5")
3859  field(EIVL, "8")
3860  field(SDIS, "$(P):LS01:DISABLE")
3861 }
3862 
3863 ##
3864 ## Set the ZONE RATE setting.
3865 ##
3866 record(ao, "$(P):LS01:Z1:RATE_S1") {
3867  field(SCAN, "Passive")
3868  field(PREC, "1")
3869  field(SDIS, "$(P):LS01:DISABLE")
3870 }
3871 
3872 ##
3873 ## Record to write the ZONE parameters.
3874 ##
3875 record(calcout, "$(P):LS01:Z1:SET1") {
3876  field(INPA, "$(P):LS01:Z1:UB_S1")
3877  field(INPB, "$(P):LS01:Z1:P_S1")
3878  field(INPC, "$(P):LS01:Z1:I_S1")
3879  field(INPD, "$(P):LS01:Z1:D_S1")
3880  field(INPE, "$(P):LS01:Z1:MOUT_S1")
3881  field(INPF, "$(P):LS01:Z1:RANGE_S1")
3882  field(INPG, "$(P):LS01:Z1:INPUT_S1")
3883  field(INPH, "$(P):LS01:Z1:RATE_S1")
3884  field(CALC, "0")
3885  field(DTYP, "stream")
3886  field(OUT, "@ls336.proto setZONE(1,1) L0 0")
3887  field(SDIS, "$(P):LS01:DISABLE")
3888  field(FLNK, "$(P):LS01:Z1:ALL1.PROC")
3889 }
3890 
3891 
3892 
3893 
3894 
3895 
3896 
3897 
3898 
3899 
3900 #######################################
3901 #
3902 # Template to support reading and setting
3903 # controller ZONE parameters. It reads the ZONE
3904 # parameters into an array, then uses subArrays to
3905 # extract each parameter.
3906 #
3907 # This template is used by the output template
3908 # and it needs the following macros:
3909 #
3910 # ZONE: zone number
3911 # OUT: output number
3912 #
3913 #######################################
3914 
3915 ##
3916 ## Read the ZONE setting into an array (8 values)
3917 ##
3918 record(waveform, "$(P):LS01:Z2:ALL1") {
3919  field(DTYP, "stream")
3920  field(SDIS, "$(P):LS01:DISABLE_POLL")
3921  field(INP, "@ls336.proto getZONE(1,2) L0 0")
3922  field(SCAN, "Passive")
3923  field(NELM, "8")
3924  field(FTVL, "DOUBLE")
3925  field(PREC, "1")
3926  field(FLNK, "$(P):LS01:Z2:UB1:ARRAY.PROC")
3927 }
3928 
3929 ##
3930 ## Read the ZONE upper boundary setting.
3931 ##
3932 record(subArray, "$(P):LS01:Z2:UB1:ARRAY") {
3933  field(SCAN, "Passive")
3934  field(FTVL, "DOUBLE")
3935  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
3936  field(MALM, "8")
3937  field(NELM, "1")
3938  field(INDX, "0")
3939  field(PREC, "1")
3940  field(FLNK, "$(P):LS01:Z2:UB1.PROC")
3941 }
3942 record(ai, "$(P):LS01:Z2:UB1") {
3943  field(SCAN, "Passive")
3944  field(INP, "$(P):LS01:Z2:UB1:ARRAY.VAL MS")
3945  field(PREC, "1")
3946  field(FLNK, "$(P):LS01:Z2:P1:ARRAY.PROC")
3947 }
3948 
3949 ##
3950 ## Read the ZONE P setting.
3951 ##
3952 record(subArray, "$(P):LS01:Z2:P1:ARRAY") {
3953  field(SCAN, "Passive")
3954  field(FTVL, "DOUBLE")
3955  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
3956  field(MALM, "8")
3957  field(NELM, "1")
3958  field(INDX, "1")
3959  field(PREC, "1")
3960  field(FLNK, "$(P):LS01:Z2:P1.PROC")
3961 }
3962 record(ai, "$(P):LS01:Z2:P1") {
3963  field(SCAN, "Passive")
3964  field(INP, "$(P):LS01:Z2:P1:ARRAY.VAL MS")
3965  field(PREC, "1")
3966  field(FLNK, "$(P):LS01:Z2:I1:ARRAY.PROC")
3967 }
3968 
3969 ##
3970 ## Read the ZONE I setting.
3971 ##
3972 record(subArray, "$(P):LS01:Z2:I1:ARRAY") {
3973  field(SCAN, "Passive")
3974  field(FTVL, "DOUBLE")
3975  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
3976  field(MALM, "8")
3977  field(NELM, "1")
3978  field(INDX, "2")
3979  field(PREC, "1")
3980  field(FLNK, "$(P):LS01:Z2:I1.PROC")
3981 }
3982 record(ai, "$(P):LS01:Z2:I1") {
3983  field(SCAN, "Passive")
3984  field(INP, "$(P):LS01:Z2:I1:ARRAY.VAL MS")
3985  field(PREC, "1")
3986  field(FLNK, "$(P):LS01:Z2:D1:ARRAY.PROC")
3987 }
3988 
3989 ##
3990 ## Read the ZONE D setting.
3991 ##
3992 record(subArray, "$(P):LS01:Z2:D1:ARRAY") {
3993  field(SCAN, "Passive")
3994  field(FTVL, "DOUBLE")
3995  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
3996  field(MALM, "8")
3997  field(NELM, "1")
3998  field(INDX, "3")
3999  field(PREC, "1")
4000  field(FLNK, "$(P):LS01:Z2:D1.PROC")
4001 }
4002 record(ai, "$(P):LS01:Z2:D1") {
4003  field(SCAN, "Passive")
4004  field(INP, "$(P):LS01:Z2:D1:ARRAY.VAL MS")
4005  field(PREC, "1")
4006  field(FLNK, "$(P):LS01:Z2:MOUT1:ARRAY.PROC")
4007 }
4008 
4009 ##
4010 ## Read the ZONE MOUT setting.
4011 ##
4012 record(subArray, "$(P):LS01:Z2:MOUT1:ARRAY") {
4013  field(SCAN, "Passive")
4014  field(FTVL, "DOUBLE")
4015  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
4016  field(MALM, "8")
4017  field(NELM, "1")
4018  field(INDX, "4")
4019  field(PREC, "1")
4020  field(FLNK, "$(P):LS01:Z2:MOUT1.PROC")
4021 }
4022 record(ai, "$(P):LS01:Z2:MOUT1") {
4023  field(SCAN, "Passive")
4024  field(INP, "$(P):LS01:Z2:MOUT1:ARRAY.VAL MS")
4025  field(PREC, "1")
4026  field(FLNK, "$(P):LS01:Z2:RANGE1:ARRAY.PROC")
4027 }
4028 
4029 ##
4030 ## Read the ZONE RANGE setting.
4031 ##
4032 record(subArray, "$(P):LS01:Z2:RANGE1:ARRAY") {
4033  field(SCAN, "Passive")
4034  field(FTVL, "DOUBLE")
4035  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
4036  field(MALM, "8")
4037  field(NELM, "1")
4038  field(INDX, "5")
4039  field(PREC, "1")
4040  field(FLNK, "$(P):LS01:Z2:RANGE1.PROC")
4041 }
4042 record(mbbi, "$(P):LS01:Z2:RANGE1") {
4043  field(INP, "$(P):LS01:Z2:RANGE1:ARRAY.VAL")
4044  field(SCAN, "Passive")
4045  field(ZRST, "Off")
4046  field(ZRVL, "0")
4047  field(ONST, "Range1/Low")
4048  field(ONVL, "1")
4049  field(TWST, "Range2/Medium")
4050  field(TWVL, "2")
4051  field(THST, "Range3/High")
4052  field(THVL, "3")
4053  field(FRST, "Range4")
4054  field(FRVL, "4")
4055  field(FVST, "Range5")
4056  field(FVVL, "5")
4057  field(FLNK, "$(P):LS01:Z2:INPUT1:ARRAY.PROC")
4058 }
4059 
4060 ##
4061 ## Read the ZONE INPUT setting.
4062 ##
4063 record(subArray, "$(P):LS01:Z2:INPUT1:ARRAY") {
4064  field(SCAN, "Passive")
4065  field(FTVL, "DOUBLE")
4066  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
4067  field(MALM, "8")
4068  field(NELM, "1")
4069  field(INDX, "6")
4070  field(PREC, "1")
4071  field(FLNK, "$(P):LS01:Z2:INPUT1.PROC")
4072 }
4073 record(mbbi, "$(P):LS01:Z2:INPUT1") {
4074  field(INP, "$(P):LS01:Z2:INPUT1:ARRAY.VAL")
4075  field(SCAN, "Passive")
4076  field(ZRST, "None")
4077  field(ZRVL, "0")
4078  field(ONST, "Input A")
4079  field(ONVL, "1")
4080  field(TWST, "Input B")
4081  field(TWVL, "2")
4082  field(THST, "Input C")
4083  field(THVL, "3")
4084  field(FRST, "Input D")
4085  field(FRVL, "4")
4086  field(FVST, "Input D2")
4087  field(FVVL, "5")
4088  field(SXST, "Input D3")
4089  field(SXVL, "6")
4090  field(SVST, "Input D4")
4091  field(SVVL, "7")
4092  field(EIST, "Input D5")
4093  field(EIVL, "8")
4094  field(FLNK, "$(P):LS01:Z2:RATE1:ARRAY.PROC")
4095 }
4096 
4097 ##
4098 ## Read the ZONE RATE setting.
4099 ##
4100 record(subArray, "$(P):LS01:Z2:RATE1:ARRAY") {
4101  field(SCAN, "Passive")
4102  field(FTVL, "DOUBLE")
4103  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
4104  field(MALM, "8")
4105  field(NELM, "1")
4106  field(INDX, "7")
4107  field(PREC, "1")
4108  field(FLNK, "$(P):LS01:Z2:RATE1.PROC")
4109 }
4110 record(ai, "$(P):LS01:Z2:RATE1") {
4111  field(SCAN, "Passive")
4112  field(INP, "$(P):LS01:Z2:RATE1:ARRAY.VAL MS")
4113  field(PREC, "1")
4114  field(FLNK, "$(P):LS01:Z2:INITCALC1.PROC")
4115 }
4116 
4117 ##############################################################
4118 ##
4119 ## Populate the write records below with the current values.
4120 ## Only do this once at startup.
4121 ##
4122 ###############################################################
4123 
4124 record(calcout, "$(P):LS01:Z2:INITCALC1") {
4125  field(INPA, "0")
4126  field(CALC, "A")
4127  field(VAL, "0")
4128  field(DOPT, "Use OCAL")
4129  field(OOPT, "When Zero")
4130  field(OCAL, "1")
4131  field(OUT, "$(P):LS01:Z2:INITUB1.PROC")
4132 }
4133 
4134 record(dfanout, "$(P):LS01:Z2:INITUB1") {
4135  field(OMSL, "closed_loop")
4136  field(DOL, "$(P):LS01:Z2:UB1.VAL")
4137  field(OUTA, "$(P):LS01:Z2:UB_S1.VAL PP")
4138  field(FLNK, "$(P):LS01:Z2:INITP1.PROC")
4139 }
4140 record(dfanout, "$(P):LS01:Z2:INITP1") {
4141  field(OMSL, "closed_loop")
4142  field(DOL, "$(P):LS01:Z2:P1.VAL")
4143  field(OUTA, "$(P):LS01:Z2:P_S1.VAL PP")
4144  field(FLNK, "$(P):LS01:Z2:INITI1.PROC")
4145 }
4146 record(dfanout, "$(P):LS01:Z2:INITI1") {
4147  field(OMSL, "closed_loop")
4148  field(DOL, "$(P):LS01:Z2:I1.VAL")
4149  field(OUTA, "$(P):LS01:Z2:I_S1.VAL PP")
4150  field(FLNK, "$(P):LS01:Z2:INITD1.PROC")
4151 }
4152 record(dfanout, "$(P):LS01:Z2:INITD1") {
4153  field(OMSL, "closed_loop")
4154  field(DOL, "$(P):LS01:Z2:D1.VAL")
4155  field(OUTA, "$(P):LS01:Z2:D_S1.VAL PP")
4156  field(FLNK, "$(P):LS01:Z2:INITMOUT1.PROC")
4157 }
4158 record(dfanout, "$(P):LS01:Z2:INITMOUT1") {
4159  field(OMSL, "closed_loop")
4160  field(DOL, "$(P):LS01:Z2:MOUT1.VAL")
4161  field(OUTA, "$(P):LS01:Z2:MOUT_S1.VAL PP")
4162  field(FLNK, "$(P):LS01:Z2:INITRANGE1.PROC")
4163 }
4164 record(dfanout, "$(P):LS01:Z2:INITRANGE1") {
4165  field(OMSL, "closed_loop")
4166  field(DOL, "$(P):LS01:Z2:RANGE1.VAL")
4167  field(OUTA, "$(P):LS01:Z2:RANGE_S1.VAL PP")
4168  field(FLNK, "$(P):LS01:Z2:INITINPUT1.PROC")
4169 }
4170 record(dfanout, "$(P):LS01:Z2:INITINPUT1") {
4171  field(OMSL, "closed_loop")
4172  field(DOL, "$(P):LS01:Z2:INPUT1.VAL")
4173  field(OUTA, "$(P):LS01:Z2:INPUT_S1.VAL PP")
4174  field(FLNK, "$(P):LS01:Z2:INITRATE1.PROC")
4175 }
4176 record(dfanout, "$(P):LS01:Z2:INITRATE1") {
4177  field(OMSL, "closed_loop")
4178  field(DOL, "$(P):LS01:Z2:RATE1.VAL")
4179  field(OUTA, "$(P):LS01:Z2:RATE_S1.VAL PP")
4180  field(FLNK, "$(P):LS01:Z2:INITCOUNT1.PROC")
4181 }
4182 
4183 record(dfanout, "$(P):LS01:Z2:INITCOUNT1") {
4184  field(DOL, "1")
4185  field(OUTA, "$(P):LS01:Z2:INITCALC1.A")
4186 }
4187 
4188 
4189 
4190 #############################################
4191 # Write records. There is a calcout record to
4192 # do the actual write.
4193 #############################################
4194 
4195 ##
4196 ## Set the ZONE upper boundary setting.
4197 ##
4198 record(ao, "$(P):LS01:Z2:UB_S1") {
4199  field(SCAN, "Passive")
4200  field(PREC, "1")
4201  field(SDIS, "$(P):LS01:DISABLE")
4202 }
4203 
4204 ##
4205 ## Set the ZONE P setting.
4206 ##
4207 record(ao, "$(P):LS01:Z2:P_S1") {
4208  field(SCAN, "Passive")
4209  field(PREC, "1")
4210  field(SDIS, "$(P):LS01:DISABLE")
4211 }
4212 
4213 ##
4214 ## Set the ZONE I setting.
4215 ##
4216 record(ao, "$(P):LS01:Z2:I_S1") {
4217  field(SCAN, "Passive")
4218  field(PREC, "1")
4219  field(SDIS, "$(P):LS01:DISABLE")
4220 }
4221 
4222 ##
4223 ## Set the ZONE D setting.
4224 ##
4225 record(ao, "$(P):LS01:Z2:D_S1") {
4226  field(SCAN, "Passive")
4227  field(PREC, "1")
4228  field(SDIS, "$(P):LS01:DISABLE")
4229 }
4230 
4231 ##
4232 ## Set the ZONE MOUT setting.
4233 ##
4234 record(ao, "$(P):LS01:Z2:MOUT_S1") {
4235  field(SCAN, "Passive")
4236  field(PREC, "1")
4237  field(SDIS, "$(P):LS01:DISABLE")
4238 }
4239 
4240 ##
4241 ## Set the ZONE RANGE setting.
4242 ##
4243 record(mbbo, "$(P):LS01:Z2:RANGE_S1") {
4244  field(SCAN, "Passive")
4245  field(ZRST, "Off")
4246  field(ZRVL, "0")
4247  field(ONST, "Range1/Low")
4248  field(ONVL, "1")
4249  field(TWST, "Range2/Medium")
4250  field(TWVL, "2")
4251  field(THST, "Range3/High")
4252  field(THVL, "3")
4253  field(FRST, "Range4")
4254  field(FRVL, "4")
4255  field(FVST, "Range5")
4256  field(FVVL, "5")
4257  field(SDIS, "$(P):LS01:DISABLE")
4258 }
4259 
4260 ##
4261 ## Set the ZONE INPUT setting.
4262 ##
4263 record(mbbo, "$(P):LS01:Z2:INPUT_S1") {
4264  field(ZRST, "None")
4265  field(ZRVL, "0")
4266  field(ONST, "Input A")
4267  field(ONVL, "1")
4268  field(TWST, "Input B")
4269  field(TWVL, "2")
4270  field(THST, "Input C")
4271  field(THVL, "3")
4272  field(FRST, "Input D")
4273  field(FRVL, "4")
4274  field(FVST, "Input D2")
4275  field(FVVL, "5")
4276  field(SXST, "Input D3")
4277  field(SXVL, "6")
4278  field(SVST, "Input D4")
4279  field(SVVL, "7")
4280  field(EIST, "Input D5")
4281  field(EIVL, "8")
4282  field(SDIS, "$(P):LS01:DISABLE")
4283 }
4284 
4285 ##
4286 ## Set the ZONE RATE setting.
4287 ##
4288 record(ao, "$(P):LS01:Z2:RATE_S1") {
4289  field(SCAN, "Passive")
4290  field(PREC, "1")
4291  field(SDIS, "$(P):LS01:DISABLE")
4292 }
4293 
4294 ##
4295 ## Record to write the ZONE parameters.
4296 ##
4297 record(calcout, "$(P):LS01:Z2:SET1") {
4298  field(INPA, "$(P):LS01:Z2:UB_S1")
4299  field(INPB, "$(P):LS01:Z2:P_S1")
4300  field(INPC, "$(P):LS01:Z2:I_S1")
4301  field(INPD, "$(P):LS01:Z2:D_S1")
4302  field(INPE, "$(P):LS01:Z2:MOUT_S1")
4303  field(INPF, "$(P):LS01:Z2:RANGE_S1")
4304  field(INPG, "$(P):LS01:Z2:INPUT_S1")
4305  field(INPH, "$(P):LS01:Z2:RATE_S1")
4306  field(CALC, "0")
4307  field(DTYP, "stream")
4308  field(OUT, "@ls336.proto setZONE(1,2) L0 0")
4309  field(SDIS, "$(P):LS01:DISABLE")
4310  field(FLNK, "$(P):LS01:Z2:ALL1.PROC")
4311 }
4312 
4313 
4314 
4315 
4316 
4317 
4318 
4319 
4320 
4321 
4322 #######################################
4323 #
4324 # Template to support reading and setting
4325 # controller ZONE parameters. It reads the ZONE
4326 # parameters into an array, then uses subArrays to
4327 # extract each parameter.
4328 #
4329 # This template is used by the output template
4330 # and it needs the following macros:
4331 #
4332 # ZONE: zone number
4333 # OUT: output number
4334 #
4335 #######################################
4336 
4337 ##
4338 ## Read the ZONE setting into an array (8 values)
4339 ##
4340 record(waveform, "$(P):LS01:Z2:ALL1") {
4341  field(DTYP, "stream")
4342  field(SDIS, "$(P):LS01:DISABLE_POLL")
4343  field(INP, "@ls336.proto getZONE(1,2) L0 0")
4344  field(SCAN, "Passive")
4345  field(NELM, "8")
4346  field(FTVL, "DOUBLE")
4347  field(PREC, "1")
4348  field(FLNK, "$(P):LS01:Z2:UB1:ARRAY.PROC")
4349 }
4350 
4351 ##
4352 ## Read the ZONE upper boundary setting.
4353 ##
4354 record(subArray, "$(P):LS01:Z2:UB1:ARRAY") {
4355  field(SCAN, "Passive")
4356  field(FTVL, "DOUBLE")
4357  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
4358  field(MALM, "8")
4359  field(NELM, "1")
4360  field(INDX, "0")
4361  field(PREC, "1")
4362  field(FLNK, "$(P):LS01:Z2:UB1.PROC")
4363 }
4364 record(ai, "$(P):LS01:Z2:UB1") {
4365  field(SCAN, "Passive")
4366  field(INP, "$(P):LS01:Z2:UB1:ARRAY.VAL MS")
4367  field(PREC, "1")
4368  field(FLNK, "$(P):LS01:Z2:P1:ARRAY.PROC")
4369 }
4370 
4371 ##
4372 ## Read the ZONE P setting.
4373 ##
4374 record(subArray, "$(P):LS01:Z2:P1:ARRAY") {
4375  field(SCAN, "Passive")
4376  field(FTVL, "DOUBLE")
4377  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
4378  field(MALM, "8")
4379  field(NELM, "1")
4380  field(INDX, "1")
4381  field(PREC, "1")
4382  field(FLNK, "$(P):LS01:Z2:P1.PROC")
4383 }
4384 record(ai, "$(P):LS01:Z2:P1") {
4385  field(SCAN, "Passive")
4386  field(INP, "$(P):LS01:Z2:P1:ARRAY.VAL MS")
4387  field(PREC, "1")
4388  field(FLNK, "$(P):LS01:Z2:I1:ARRAY.PROC")
4389 }
4390 
4391 ##
4392 ## Read the ZONE I setting.
4393 ##
4394 record(subArray, "$(P):LS01:Z2:I1:ARRAY") {
4395  field(SCAN, "Passive")
4396  field(FTVL, "DOUBLE")
4397  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
4398  field(MALM, "8")
4399  field(NELM, "1")
4400  field(INDX, "2")
4401  field(PREC, "1")
4402  field(FLNK, "$(P):LS01:Z2:I1.PROC")
4403 }
4404 record(ai, "$(P):LS01:Z2:I1") {
4405  field(SCAN, "Passive")
4406  field(INP, "$(P):LS01:Z2:I1:ARRAY.VAL MS")
4407  field(PREC, "1")
4408  field(FLNK, "$(P):LS01:Z2:D1:ARRAY.PROC")
4409 }
4410 
4411 ##
4412 ## Read the ZONE D setting.
4413 ##
4414 record(subArray, "$(P):LS01:Z2:D1:ARRAY") {
4415  field(SCAN, "Passive")
4416  field(FTVL, "DOUBLE")
4417  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
4418  field(MALM, "8")
4419  field(NELM, "1")
4420  field(INDX, "3")
4421  field(PREC, "1")
4422  field(FLNK, "$(P):LS01:Z2:D1.PROC")
4423 }
4424 record(ai, "$(P):LS01:Z2:D1") {
4425  field(SCAN, "Passive")
4426  field(INP, "$(P):LS01:Z2:D1:ARRAY.VAL MS")
4427  field(PREC, "1")
4428  field(FLNK, "$(P):LS01:Z2:MOUT1:ARRAY.PROC")
4429 }
4430 
4431 ##
4432 ## Read the ZONE MOUT setting.
4433 ##
4434 record(subArray, "$(P):LS01:Z2:MOUT1:ARRAY") {
4435  field(SCAN, "Passive")
4436  field(FTVL, "DOUBLE")
4437  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
4438  field(MALM, "8")
4439  field(NELM, "1")
4440  field(INDX, "4")
4441  field(PREC, "1")
4442  field(FLNK, "$(P):LS01:Z2:MOUT1.PROC")
4443 }
4444 record(ai, "$(P):LS01:Z2:MOUT1") {
4445  field(SCAN, "Passive")
4446  field(INP, "$(P):LS01:Z2:MOUT1:ARRAY.VAL MS")
4447  field(PREC, "1")
4448  field(FLNK, "$(P):LS01:Z2:RANGE1:ARRAY.PROC")
4449 }
4450 
4451 ##
4452 ## Read the ZONE RANGE setting.
4453 ##
4454 record(subArray, "$(P):LS01:Z2:RANGE1:ARRAY") {
4455  field(SCAN, "Passive")
4456  field(FTVL, "DOUBLE")
4457  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
4458  field(MALM, "8")
4459  field(NELM, "1")
4460  field(INDX, "5")
4461  field(PREC, "1")
4462  field(FLNK, "$(P):LS01:Z2:RANGE1.PROC")
4463 }
4464 record(mbbi, "$(P):LS01:Z2:RANGE1") {
4465  field(INP, "$(P):LS01:Z2:RANGE1:ARRAY.VAL")
4466  field(SCAN, "Passive")
4467  field(ZRST, "Off")
4468  field(ZRVL, "0")
4469  field(ONST, "Range1/Low")
4470  field(ONVL, "1")
4471  field(TWST, "Range2/Medium")
4472  field(TWVL, "2")
4473  field(THST, "Range3/High")
4474  field(THVL, "3")
4475  field(FRST, "Range4")
4476  field(FRVL, "4")
4477  field(FVST, "Range5")
4478  field(FVVL, "5")
4479  field(FLNK, "$(P):LS01:Z2:INPUT1:ARRAY.PROC")
4480 }
4481 
4482 ##
4483 ## Read the ZONE INPUT setting.
4484 ##
4485 record(subArray, "$(P):LS01:Z2:INPUT1:ARRAY") {
4486  field(SCAN, "Passive")
4487  field(FTVL, "DOUBLE")
4488  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
4489  field(MALM, "8")
4490  field(NELM, "1")
4491  field(INDX, "6")
4492  field(PREC, "1")
4493  field(FLNK, "$(P):LS01:Z2:INPUT1.PROC")
4494 }
4495 record(mbbi, "$(P):LS01:Z2:INPUT1") {
4496  field(INP, "$(P):LS01:Z2:INPUT1:ARRAY.VAL")
4497  field(SCAN, "Passive")
4498  field(ZRST, "None")
4499  field(ZRVL, "0")
4500  field(ONST, "Input A")
4501  field(ONVL, "1")
4502  field(TWST, "Input B")
4503  field(TWVL, "2")
4504  field(THST, "Input C")
4505  field(THVL, "3")
4506  field(FRST, "Input D")
4507  field(FRVL, "4")
4508  field(FVST, "Input D2")
4509  field(FVVL, "5")
4510  field(SXST, "Input D3")
4511  field(SXVL, "6")
4512  field(SVST, "Input D4")
4513  field(SVVL, "7")
4514  field(EIST, "Input D5")
4515  field(EIVL, "8")
4516  field(FLNK, "$(P):LS01:Z2:RATE1:ARRAY.PROC")
4517 }
4518 
4519 ##
4520 ## Read the ZONE RATE setting.
4521 ##
4522 record(subArray, "$(P):LS01:Z2:RATE1:ARRAY") {
4523  field(SCAN, "Passive")
4524  field(FTVL, "DOUBLE")
4525  field(INP, "$(P):LS01:Z2:ALL1.VAL MS")
4526  field(MALM, "8")
4527  field(NELM, "1")
4528  field(INDX, "7")
4529  field(PREC, "1")
4530  field(FLNK, "$(P):LS01:Z2:RATE1.PROC")
4531 }
4532 record(ai, "$(P):LS01:Z2:RATE1") {
4533  field(SCAN, "Passive")
4534  field(INP, "$(P):LS01:Z2:RATE1:ARRAY.VAL MS")
4535  field(PREC, "1")
4536  field(FLNK, "$(P):LS01:Z2:INITCALC1.PROC")
4537 }
4538 
4539 ##############################################################
4540 ##
4541 ## Populate the write records below with the current values.
4542 ## Only do this once at startup.
4543 ##
4544 ###############################################################
4545 
4546 record(calcout, "$(P):LS01:Z2:INITCALC1") {
4547  field(INPA, "0")
4548  field(CALC, "A")
4549  field(VAL, "0")
4550  field(DOPT, "Use OCAL")
4551  field(OOPT, "When Zero")
4552  field(OCAL, "1")
4553  field(OUT, "$(P):LS01:Z2:INITUB1.PROC")
4554 }
4555 
4556 record(dfanout, "$(P):LS01:Z2:INITUB1") {
4557  field(OMSL, "closed_loop")
4558  field(DOL, "$(P):LS01:Z2:UB1.VAL")
4559  field(OUTA, "$(P):LS01:Z2:UB_S1.VAL PP")
4560  field(FLNK, "$(P):LS01:Z2:INITP1.PROC")
4561 }
4562 record(dfanout, "$(P):LS01:Z2:INITP1") {
4563  field(OMSL, "closed_loop")
4564  field(DOL, "$(P):LS01:Z2:P1.VAL")
4565  field(OUTA, "$(P):LS01:Z2:P_S1.VAL PP")
4566  field(FLNK, "$(P):LS01:Z2:INITI1.PROC")
4567 }
4568 record(dfanout, "$(P):LS01:Z2:INITI1") {
4569  field(OMSL, "closed_loop")
4570  field(DOL, "$(P):LS01:Z2:I1.VAL")
4571  field(OUTA, "$(P):LS01:Z2:I_S1.VAL PP")
4572  field(FLNK, "$(P):LS01:Z2:INITD1.PROC")
4573 }
4574 record(dfanout, "$(P):LS01:Z2:INITD1") {
4575  field(OMSL, "closed_loop")
4576  field(DOL, "$(P):LS01:Z2:D1.VAL")
4577  field(OUTA, "$(P):LS01:Z2:D_S1.VAL PP")
4578  field(FLNK, "$(P):LS01:Z2:INITMOUT1.PROC")
4579 }
4580 record(dfanout, "$(P):LS01:Z2:INITMOUT1") {
4581  field(OMSL, "closed_loop")
4582  field(DOL, "$(P):LS01:Z2:MOUT1.VAL")
4583  field(OUTA, "$(P):LS01:Z2:MOUT_S1.VAL PP")
4584  field(FLNK, "$(P):LS01:Z2:INITRANGE1.PROC")
4585 }
4586 record(dfanout, "$(P):LS01:Z2:INITRANGE1") {
4587  field(OMSL, "closed_loop")
4588  field(DOL, "$(P):LS01:Z2:RANGE1.VAL")
4589  field(OUTA, "$(P):LS01:Z2:RANGE_S1.VAL PP")
4590  field(FLNK, "$(P):LS01:Z2:INITINPUT1.PROC")
4591 }
4592 record(dfanout, "$(P):LS01:Z2:INITINPUT1") {
4593  field(OMSL, "closed_loop")
4594  field(DOL, "$(P):LS01:Z2:INPUT1.VAL")
4595  field(OUTA, "$(P):LS01:Z2:INPUT_S1.VAL PP")
4596  field(FLNK, "$(P):LS01:Z2:INITRATE1.PROC")
4597 }
4598 record(dfanout, "$(P):LS01:Z2:INITRATE1") {
4599  field(OMSL, "closed_loop")
4600  field(DOL, "$(P):LS01:Z2:RATE1.VAL")
4601  field(OUTA, "$(P):LS01:Z2:RATE_S1.VAL PP")
4602  field(FLNK, "$(P):LS01:Z2:INITCOUNT1.PROC")
4603 }
4604 
4605 record(dfanout, "$(P):LS01:Z2:INITCOUNT1") {
4606  field(DOL, "1")
4607  field(OUTA, "$(P):LS01:Z2:INITCALC1.A")
4608 }
4609 
4610 
4611 
4612 #############################################
4613 # Write records. There is a calcout record to
4614 # do the actual write.
4615 #############################################
4616 
4617 ##
4618 ## Set the ZONE upper boundary setting.
4619 ##
4620 record(ao, "$(P):LS01:Z2:UB_S1") {
4621  field(SCAN, "Passive")
4622  field(PREC, "1")
4623  field(SDIS, "$(P):LS01:DISABLE")
4624 }
4625 
4626 ##
4627 ## Set the ZONE P setting.
4628 ##
4629 record(ao, "$(P):LS01:Z2:P_S1") {
4630  field(SCAN, "Passive")
4631  field(PREC, "1")
4632  field(SDIS, "$(P):LS01:DISABLE")
4633 }
4634 
4635 ##
4636 ## Set the ZONE I setting.
4637 ##
4638 record(ao, "$(P):LS01:Z2:I_S1") {
4639  field(SCAN, "Passive")
4640  field(PREC, "1")
4641  field(SDIS, "$(P):LS01:DISABLE")
4642 }
4643 
4644 ##
4645 ## Set the ZONE D setting.
4646 ##
4647 record(ao, "$(P):LS01:Z2:D_S1") {
4648  field(SCAN, "Passive")
4649  field(PREC, "1")
4650  field(SDIS, "$(P):LS01:DISABLE")
4651 }
4652 
4653 ##
4654 ## Set the ZONE MOUT setting.
4655 ##
4656 record(ao, "$(P):LS01:Z2:MOUT_S1") {
4657  field(SCAN, "Passive")
4658  field(PREC, "1")
4659  field(SDIS, "$(P):LS01:DISABLE")
4660 }
4661 
4662 ##
4663 ## Set the ZONE RANGE setting.
4664 ##
4665 record(mbbo, "$(P):LS01:Z2:RANGE_S1") {
4666  field(SCAN, "Passive")
4667  field(ZRST, "Off")
4668  field(ZRVL, "0")
4669  field(ONST, "Range1/Low")
4670  field(ONVL, "1")
4671  field(TWST, "Range2/Medium")
4672  field(TWVL, "2")
4673  field(THST, "Range3/High")
4674  field(THVL, "3")
4675  field(FRST, "Range4")
4676  field(FRVL, "4")
4677  field(FVST, "Range5")
4678  field(FVVL, "5")
4679  field(SDIS, "$(P):LS01:DISABLE")
4680 }
4681 
4682 ##
4683 ## Set the ZONE INPUT setting.
4684 ##
4685 record(mbbo, "$(P):LS01:Z2:INPUT_S1") {
4686  field(ZRST, "None")
4687  field(ZRVL, "0")
4688  field(ONST, "Input A")
4689  field(ONVL, "1")
4690  field(TWST, "Input B")
4691  field(TWVL, "2")
4692  field(THST, "Input C")
4693  field(THVL, "3")
4694  field(FRST, "Input D")
4695  field(FRVL, "4")
4696  field(FVST, "Input D2")
4697  field(FVVL, "5")
4698  field(SXST, "Input D3")
4699  field(SXVL, "6")
4700  field(SVST, "Input D4")
4701  field(SVVL, "7")
4702  field(EIST, "Input D5")
4703  field(EIVL, "8")
4704  field(SDIS, "$(P):LS01:DISABLE")
4705 }
4706 
4707 ##
4708 ## Set the ZONE RATE setting.
4709 ##
4710 record(ao, "$(P):LS01:Z2:RATE_S1") {
4711  field(SCAN, "Passive")
4712  field(PREC, "1")
4713  field(SDIS, "$(P):LS01:DISABLE")
4714 }
4715 
4716 ##
4717 ## Record to write the ZONE parameters.
4718 ##
4719 record(calcout, "$(P):LS01:Z2:SET1") {
4720  field(INPA, "$(P):LS01:Z2:UB_S1")
4721  field(INPB, "$(P):LS01:Z2:P_S1")
4722  field(INPC, "$(P):LS01:Z2:I_S1")
4723  field(INPD, "$(P):LS01:Z2:D_S1")
4724  field(INPE, "$(P):LS01:Z2:MOUT_S1")
4725  field(INPF, "$(P):LS01:Z2:RANGE_S1")
4726  field(INPG, "$(P):LS01:Z2:INPUT_S1")
4727  field(INPH, "$(P):LS01:Z2:RATE_S1")
4728  field(CALC, "0")
4729  field(DTYP, "stream")
4730  field(OUT, "@ls336.proto setZONE(1,2) L0 0")
4731  field(SDIS, "$(P):LS01:DISABLE")
4732  field(FLNK, "$(P):LS01:Z2:ALL1.PROC")
4733 }
4734 
4735 
4736 
4737 
4738 
4739 
4740 
4741 
4742 
4743 
4744 #######################################
4745 #
4746 # Template to support reading and setting
4747 # controller ZONE parameters. It reads the ZONE
4748 # parameters into an array, then uses subArrays to
4749 # extract each parameter.
4750 #
4751 # This template is used by the output template
4752 # and it needs the following macros:
4753 #
4754 # ZONE: zone number
4755 # OUT: output number
4756 #
4757 #######################################
4758 
4759 ##
4760 ## Read the ZONE setting into an array (8 values)
4761 ##
4762 record(waveform, "$(P):LS01:Z3:ALL1") {
4763  field(DTYP, "stream")
4764  field(SDIS, "$(P):LS01:DISABLE_POLL")
4765  field(INP, "@ls336.proto getZONE(1,3) L0 0")
4766  field(SCAN, "Passive")
4767  field(NELM, "8")
4768  field(FTVL, "DOUBLE")
4769  field(PREC, "1")
4770  field(FLNK, "$(P):LS01:Z3:UB1:ARRAY.PROC")
4771 }
4772 
4773 ##
4774 ## Read the ZONE upper boundary setting.
4775 ##
4776 record(subArray, "$(P):LS01:Z3:UB1:ARRAY") {
4777  field(SCAN, "Passive")
4778  field(FTVL, "DOUBLE")
4779  field(INP, "$(P):LS01:Z3:ALL1.VAL MS")
4780  field(MALM, "8")
4781  field(NELM, "1")
4782  field(INDX, "0")
4783  field(PREC, "1")
4784  field(FLNK, "$(P):LS01:Z3:UB1.PROC")
4785 }
4786 record(ai, "$(P):LS01:Z3:UB1") {
4787  field(SCAN, "Passive")
4788  field(INP, "$(P):LS01:Z3:UB1:ARRAY.VAL MS")
4789  field(PREC, "1")
4790  field(FLNK, "$(P):LS01:Z3:P1:ARRAY.PROC")
4791 }
4792 
4793 ##
4794 ## Read the ZONE P setting.
4795 ##
4796 record(subArray, "$(P):LS01:Z3:P1:ARRAY") {
4797  field(SCAN, "Passive")
4798  field(FTVL, "DOUBLE")
4799  field(INP, "$(P):LS01:Z3:ALL1.VAL MS")
4800  field(MALM, "8")
4801  field(NELM, "1")
4802  field(INDX, "1")
4803  field(PREC, "1")
4804  field(FLNK, "$(P):LS01:Z3:P1.PROC")
4805 }
4806 record(ai, "$(P):LS01:Z3:P1") {
4807  field(SCAN, "Passive")
4808  field(INP, "$(P):LS01:Z3:P1:ARRAY.VAL MS")
4809  field(PREC, "1")
4810  field(FLNK, "$(P):LS01:Z3:I1:ARRAY.PROC")
4811 }
4812 
4813 ##
4814 ## Read the ZONE I setting.
4815 ##
4816 record(subArray, "$(P):LS01:Z3:I1:ARRAY") {
4817  field(SCAN, "Passive")
4818  field(FTVL, "DOUBLE")
4819  field(INP, "$(P):LS01:Z3:ALL1.VAL MS")
4820  field(MALM, "8")
4821  field(NELM, "1")
4822  field(INDX, "2")
4823  field(PREC, "1")
4824  field(FLNK, "$(P):LS01:Z3:I1.PROC")
4825 }
4826 record(ai, "$(P):LS01:Z3:I1") {
4827  field(SCAN, "Passive")
4828  field(INP, "$(P):LS01:Z3:I1:ARRAY.VAL MS")
4829  field(PREC, "1")
4830  field(FLNK, "$(P):LS01:Z3:D1:ARRAY.PROC")
4831 }
4832 
4833 ##
4834 ## Read the ZONE D setting.
4835 ##
4836 record(subArray, "$(P):LS01:Z3:D1:ARRAY") {
4837  field(SCAN, "Passive")
4838  field(FTVL, "DOUBLE")
4839  field(INP, "$(P):LS01:Z3:ALL1.VAL MS")
4840  field(MALM, "8")
4841  field(NELM, "1")
4842  field(INDX, "3")
4843  field(PREC, "1")
4844  field(FLNK, "$(P):LS01:Z3:D1.PROC")
4845 }
4846 record(ai, "$(P):LS01:Z3:D1") {
4847  field(SCAN, "Passive")
4848  field(INP, "$(P):LS01:Z3:D1:ARRAY.VAL MS")
4849  field(PREC, "1")
4850  field(FLNK, "$(P):LS01:Z3:MOUT1:ARRAY.PROC")
4851 }
4852 
4853 ##
4854 ## Read the ZONE MOUT setting.
4855 ##
4856 record(subArray, "$(P):LS01:Z3:MOUT1:ARRAY") {
4857  field(SCAN, "Passive")
4858  field(FTVL, "DOUBLE")
4859  field(INP, "$(P):LS01:Z3:ALL1.VAL MS")
4860  field(MALM, "8")
4861  field(NELM, "1")
4862  field(INDX, "4")
4863  field(PREC, "1")
4864  field(FLNK, "$(P):LS01:Z3:MOUT1.PROC")
4865 }
4866 record(ai, "$(P):LS01:Z3:MOUT1") {
4867  field(SCAN, "Passive")
4868  field(INP, "$(P):LS01:Z3:MOUT1:ARRAY.VAL MS")
4869  field(PREC, "1")
4870  field(FLNK, "$(P):LS01:Z3:RANGE1:ARRAY.PROC")
4871 }
4872 
4873 ##
4874 ## Read the ZONE RANGE setting.
4875 ##
4876 record(subArray, "$(P):LS01:Z3:RANGE1:ARRAY") {
4877  field(SCAN, "Passive")
4878  field(FTVL, "DOUBLE")
4879  field(INP, "$(P):LS01:Z3:ALL1.VAL MS")
4880  field(MALM, "8")
4881  field(NELM, "1")
4882  field(INDX, "5")
4883  field(PREC, "1")
4884  field(FLNK, "$(P):LS01:Z3:RANGE1.PROC")
4885 }
4886 record(mbbi, "$(P):LS01:Z3:RANGE1") {
4887  field(INP, "$(P):LS01:Z3:RANGE1:ARRAY.VAL")
4888  field(SCAN, "Passive")
4889  field(ZRST, "Off")
4890  field(ZRVL, "0")
4891  field(ONST, "Range1/Low")
4892  field(ONVL, "1")
4893  field(TWST, "Range2/Medium")
4894  field(TWVL, "2")
4895  field(THST, "Range3/High")
4896  field(THVL, "3")
4897  field(FRST, "Range4")
4898  field(FRVL, "4")
4899  field(FVST, "Range5")
4900  field(FVVL, "5")
4901  field(FLNK, "$(P):LS01:Z3:INPUT1:ARRAY.PROC")
4902 }
4903 
4904 ##
4905 ## Read the ZONE INPUT setting.
4906 ##
4907 record(subArray, "$(P):LS01:Z3:INPUT1:ARRAY") {
4908  field(SCAN, "Passive")
4909  field(FTVL, "DOUBLE")
4910  field(INP, "$(P):LS01:Z3:ALL1.VAL MS")
4911  field(MALM, "8")
4912  field(NELM, "1")
4913  field(INDX, "6")
4914  field(PREC, "1")
4915  field(FLNK, "$(P):LS01:Z3:INPUT1.PROC")
4916 }
4917 record(mbbi, "$(P):LS01:Z3:INPUT1") {
4918  field(INP, "$(P):LS01:Z3:INPUT1:ARRAY.VAL")
4919  field(SCAN, "Passive")
4920  field(ZRST, "None")
4921  field(ZRVL, "0")
4922  field(ONST, "Input A")
4923  field(ONVL, "1")
4924  field(TWST, "Input B")
4925  field(TWVL, "2")
4926  field(THST, "Input C")
4927  field(THVL, "3")
4928  field(FRST, "Input D")
4929  field(FRVL, "4")
4930  field(FVST, "Input D2")
4931  field(FVVL, "5")
4932  field(SXST, "Input D3")
4933  field(SXVL, "6")
4934  field(SVST, "Input D4")
4935  field(SVVL, "7")
4936  field(EIST, "Input D5")
4937  field(EIVL, "8")
4938  field(FLNK, "$(P):LS01:Z3:RATE1:ARRAY.PROC")
4939 }
4940 
4941 ##
4942 ## Read the ZONE RATE setting.
4943 ##
4944 record(subArray, "$(P):LS01:Z3:RATE1:ARRAY") {
4945  field(SCAN, "Passive")
4946  field(FTVL, "DOUBLE")
4947  field(INP, "$(P):LS01:Z3:ALL1.VAL MS")
4948  field(MALM, "8")
4949  field(NELM, "1")
4950  field(INDX, "7")
4951  field(PREC, "1")
4952  field(FLNK, "$(P):LS01:Z3:RATE1.PROC")
4953 }
4954 record(ai, "$(P):LS01:Z3:RATE1") {
4955  field(SCAN, "Passive")
4956  field(INP, "$(P):LS01:Z3:RATE1:ARRAY.VAL MS")
4957  field(PREC, "1")
4958  field(FLNK, "$(P):LS01:Z3:INITCALC1.PROC")
4959 }
4960 
4961 ##############################################################
4962 ##
4963 ## Populate the write records below with the current values.
4964 ## Only do this once at startup.
4965 ##
4966 ###############################################################
4967 
4968 record(calcout, "$(P):LS01:Z3:INITCALC1") {
4969  field(INPA, "0")
4970  field(CALC, "A")
4971  field(VAL, "0")
4972  field(DOPT, "Use OCAL")
4973  field(OOPT, "When Zero")
4974  field(OCAL, "1")
4975  field(OUT, "$(P):LS01:Z3:INITUB1.PROC")
4976 }
4977 
4978 record(dfanout, "$(P):LS01:Z3:INITUB1") {
4979  field(OMSL, "closed_loop")
4980  field(DOL, "$(P):LS01:Z3:UB1.VAL")
4981  field(OUTA, "$(P):LS01:Z3:UB_S1.VAL PP")
4982  field(FLNK, "$(P):LS01:Z3:INITP1.PROC")
4983 }
4984 record(dfanout, "$(P):LS01:Z3:INITP1") {
4985  field(OMSL, "closed_loop")
4986  field(DOL, "$(P):LS01:Z3:P1.VAL")
4987  field(OUTA, "$(P):LS01:Z3:P_S1.VAL PP")
4988  field(FLNK, "$(P):LS01:Z3:INITI1.PROC")
4989 }
4990 record(dfanout, "$(P):LS01:Z3:INITI1") {
4991  field(OMSL, "closed_loop")
4992  field(DOL, "$(P):LS01:Z3:I1.VAL")
4993  field(OUTA, "$(P):LS01:Z3:I_S1.VAL PP")
4994  field(FLNK, "$(P):LS01:Z3:INITD1.PROC")
4995 }
4996 record(dfanout, "$(P):LS01:Z3:INITD1") {
4997  field(OMSL, "closed_loop")
4998  field(DOL, "$(P):LS01:Z3:D1.VAL")
4999  field(OUTA, "$(P):LS01:Z3:D_S1.VAL PP")
5000  field(FLNK, "$(P):LS01:Z3:INITMOUT1.PROC")
5001 }
5002 record(dfanout, "$(P):LS01:Z3:INITMOUT1") {
5003  field(OMSL, "closed_loop")
5004  field(DOL, "$(P):LS01:Z3:MOUT1.VAL")
5005  field(OUTA, "$(P):LS01:Z3:MOUT_S1.VAL PP")
5006  field(FLNK, "$(P):LS01:Z3:INITRANGE1.PROC")
5007 }
5008 record(dfanout, "$(P):LS01:Z3:INITRANGE1") {
5009  field(OMSL, "closed_loop")
5010  field(DOL, "$(P):LS01:Z3:RANGE1.VAL")
5011  field(OUTA, "$(P):LS01:Z3:RANGE_S1.VAL PP")
5012  field(FLNK, "$(P):LS01:Z3:INITINPUT1.PROC")
5013 }
5014 record(dfanout, "$(P):LS01:Z3:INITINPUT1") {
5015  field(OMSL, "closed_loop")
5016  field(DOL, "$(P):LS01:Z3:INPUT1.VAL")
5017  field(OUTA, "$(P):LS01:Z3:INPUT_S1.VAL PP")
5018  field(FLNK, "$(P):LS01:Z3:INITRATE1.PROC")
5019 }
5020 record(dfanout, "$(P):LS01:Z3:INITRATE1") {
5021  field(OMSL, "closed_loop")
5022  field(DOL, "$(P):LS01:Z3:RATE1.VAL")
5023  field(OUTA, "$(P):LS01:Z3:RATE_S1.VAL PP")
5024  field(FLNK, "$(P):LS01:Z3:INITCOUNT1.PROC")
5025 }
5026 
5027 record(dfanout, "$(P):LS01:Z3:INITCOUNT1") {
5028  field(DOL, "1")
5029  field(OUTA, "$(P):LS01:Z3:INITCALC1.A")
5030 }
5031 
5032 
5033 
5034 #############################################
5035 # Write records. There is a calcout record to
5036 # do the actual write.
5037 #############################################
5038 
5039 ##
5040 ## Set the ZONE upper boundary setting.
5041 ##
5042 record(ao, "$(P):LS01:Z3:UB_S1") {
5043  field(SCAN, "Passive")
5044  field(PREC, "1")
5045  field(SDIS, "$(P):LS01:DISABLE")
5046 }
5047 
5048 ##
5049 ## Set the ZONE P setting.
5050 ##
5051 record(ao, "$(P):LS01:Z3:P_S1") {
5052  field(SCAN, "Passive")
5053  field(PREC, "1")
5054  field(SDIS, "$(P):LS01:DISABLE")
5055 }
5056 
5057 ##
5058 ## Set the ZONE I setting.
5059 ##
5060 record(ao, "$(P):LS01:Z3:I_S1") {
5061  field(SCAN, "Passive")
5062  field(PREC, "1")
5063  field(SDIS, "$(P):LS01:DISABLE")
5064 }
5065 
5066 ##
5067 ## Set the ZONE D setting.
5068 ##
5069 record(ao, "$(P):LS01:Z3:D_S1") {
5070  field(SCAN, "Passive")
5071  field(PREC, "1")
5072  field(SDIS, "$(P):LS01:DISABLE")
5073 }
5074 
5075 ##
5076 ## Set the ZONE MOUT setting.
5077 ##
5078 record(ao, "$(P):LS01:Z3:MOUT_S1") {
5079  field(SCAN, "Passive")
5080  field(PREC, "1")
5081  field(SDIS, "$(P):LS01:DISABLE")
5082 }
5083 
5084 ##
5085 ## Set the ZONE RANGE setting.
5086 ##
5087 record(mbbo, "$(P):LS01:Z3:RANGE_S1") {
5088  field(SCAN, "Passive")
5089  field(ZRST, "Off")
5090  field(ZRVL, "0")
5091  field(ONST, "Range1/Low")
5092  field(ONVL, "1")
5093  field(TWST, "Range2/Medium")
5094  field(TWVL, "2")
5095  field(THST, "Range3/High")
5096  field(THVL, "3")
5097  field(FRST, "Range4")
5098  field(FRVL, "4")
5099  field(FVST, "Range5")
5100  field(FVVL, "5")
5101  field(SDIS, "$(P):LS01:DISABLE")
5102 }
5103 
5104 ##
5105 ## Set the ZONE INPUT setting.
5106 ##
5107 record(mbbo, "$(P):LS01:Z3:INPUT_S1") {
5108  field(ZRST, "None")
5109  field(ZRVL, "0")
5110  field(ONST, "Input A")
5111  field(ONVL, "1")
5112  field(TWST, "Input B")
5113  field(TWVL, "2")
5114  field(THST, "Input C")
5115  field(THVL, "3")
5116  field(FRST, "Input D")
5117  field(FRVL, "4")
5118  field(FVST, "Input D2")
5119  field(FVVL, "5")
5120  field(SXST, "Input D3")
5121  field(SXVL, "6")
5122  field(SVST, "Input D4")
5123  field(SVVL, "7")
5124  field(EIST, "Input D5")
5125  field(EIVL, "8")
5126  field(SDIS, "$(P):LS01:DISABLE")
5127 }
5128 
5129 ##
5130 ## Set the ZONE RATE setting.
5131 ##
5132 record(ao, "$(P):LS01:Z3:RATE_S1") {
5133  field(SCAN, "Passive")
5134  field(PREC, "1")
5135  field(SDIS, "$(P):LS01:DISABLE")
5136 }
5137 
5138 ##
5139 ## Record to write the ZONE parameters.
5140 ##
5141 record(calcout, "$(P):LS01:Z3:SET1") {
5142  field(INPA, "$(P):LS01:Z3:UB_S1")
5143  field(INPB, "$(P):LS01:Z3:P_S1")
5144  field(INPC, "$(P):LS01:Z3:I_S1")
5145  field(INPD, "$(P):LS01:Z3:D_S1")
5146  field(INPE, "$(P):LS01:Z3:MOUT_S1")
5147  field(INPF, "$(P):LS01:Z3:RANGE_S1")
5148  field(INPG, "$(P):LS01:Z3:INPUT_S1")
5149  field(INPH, "$(P):LS01:Z3:RATE_S1")
5150  field(CALC, "0")
5151  field(DTYP, "stream")
5152  field(OUT, "@ls336.proto setZONE(1,3) L0 0")
5153  field(SDIS, "$(P):LS01:DISABLE")
5154  field(FLNK, "$(P):LS01:Z3:ALL1.PROC")
5155 }
5156 
5157 
5158 
5159 
5160 
5161 
5162 
5163 
5164 
5165 
5166 #######################################
5167 #
5168 # Template to support reading and setting
5169 # controller ZONE parameters. It reads the ZONE
5170 # parameters into an array, then uses subArrays to
5171 # extract each parameter.
5172 #
5173 # This template is used by the output template
5174 # and it needs the following macros:
5175 #
5176 # ZONE: zone number
5177 # OUT: output number
5178 #
5179 #######################################
5180 
5181 ##
5182 ## Read the ZONE setting into an array (8 values)
5183 ##
5184 record(waveform, "$(P):LS01:Z4:ALL1") {
5185  field(DTYP, "stream")
5186  field(SDIS, "$(P):LS01:DISABLE_POLL")
5187  field(INP, "@ls336.proto getZONE(1,4) L0 0")
5188  field(SCAN, "Passive")
5189  field(NELM, "8")
5190  field(FTVL, "DOUBLE")
5191  field(PREC, "1")
5192  field(FLNK, "$(P):LS01:Z4:UB1:ARRAY.PROC")
5193 }
5194 
5195 ##
5196 ## Read the ZONE upper boundary setting.
5197 ##
5198 record(subArray, "$(P):LS01:Z4:UB1:ARRAY") {
5199  field(SCAN, "Passive")
5200  field(FTVL, "DOUBLE")
5201  field(INP, "$(P):LS01:Z4:ALL1.VAL MS")
5202  field(MALM, "8")
5203  field(NELM, "1")
5204  field(INDX, "0")
5205  field(PREC, "1")
5206  field(FLNK, "$(P):LS01:Z4:UB1.PROC")
5207 }
5208 record(ai, "$(P):LS01:Z4:UB1") {
5209  field(SCAN, "Passive")
5210  field(INP, "$(P):LS01:Z4:UB1:ARRAY.VAL MS")
5211  field(PREC, "1")
5212  field(FLNK, "$(P):LS01:Z4:P1:ARRAY.PROC")
5213 }
5214 
5215 ##
5216 ## Read the ZONE P setting.
5217 ##
5218 record(subArray, "$(P):LS01:Z4:P1:ARRAY") {
5219  field(SCAN, "Passive")
5220  field(FTVL, "DOUBLE")
5221  field(INP, "$(P):LS01:Z4:ALL1.VAL MS")
5222  field(MALM, "8")
5223  field(NELM, "1")
5224  field(INDX, "1")
5225  field(PREC, "1")
5226  field(FLNK, "$(P):LS01:Z4:P1.PROC")
5227 }
5228 record(ai, "$(P):LS01:Z4:P1") {
5229  field(SCAN, "Passive")
5230  field(INP, "$(P):LS01:Z4:P1:ARRAY.VAL MS")
5231  field(PREC, "1")
5232  field(FLNK, "$(P):LS01:Z4:I1:ARRAY.PROC")
5233 }
5234 
5235 ##
5236 ## Read the ZONE I setting.
5237 ##
5238 record(subArray, "$(P):LS01:Z4:I1:ARRAY") {
5239  field(SCAN, "Passive")
5240  field(FTVL, "DOUBLE")
5241  field(INP, "$(P):LS01:Z4:ALL1.VAL MS")
5242  field(MALM, "8")
5243  field(NELM, "1")
5244  field(INDX, "2")
5245  field(PREC, "1")
5246  field(FLNK, "$(P):LS01:Z4:I1.PROC")
5247 }
5248 record(ai, "$(P):LS01:Z4:I1") {
5249  field(SCAN, "Passive")
5250  field(INP, "$(P):LS01:Z4:I1:ARRAY.VAL MS")
5251  field(PREC, "1")
5252  field(FLNK, "$(P):LS01:Z4:D1:ARRAY.PROC")
5253 }
5254 
5255 ##
5256 ## Read the ZONE D setting.
5257 ##
5258 record(subArray, "$(P):LS01:Z4:D1:ARRAY") {
5259  field(SCAN, "Passive")
5260  field(FTVL, "DOUBLE")
5261  field(INP, "$(P):LS01:Z4:ALL1.VAL MS")
5262  field(MALM, "8")
5263  field(NELM, "1")
5264  field(INDX, "3")
5265  field(PREC, "1")
5266  field(FLNK, "$(P):LS01:Z4:D1.PROC")
5267 }
5268 record(ai, "$(P):LS01:Z4:D1") {
5269  field(SCAN, "Passive")
5270  field(INP, "$(P):LS01:Z4:D1:ARRAY.VAL MS")
5271  field(PREC, "1")
5272  field(FLNK, "$(P):LS01:Z4:MOUT1:ARRAY.PROC")
5273 }
5274 
5275 ##
5276 ## Read the ZONE MOUT setting.
5277 ##
5278 record(subArray, "$(P):LS01:Z4:MOUT1:ARRAY") {
5279  field(SCAN, "Passive")
5280  field(FTVL, "DOUBLE")
5281  field(INP, "$(P):LS01:Z4:ALL1.VAL MS")
5282  field(MALM, "8")
5283  field(NELM, "1")
5284  field(INDX, "4")
5285  field(PREC, "1")
5286  field(FLNK, "$(P):LS01:Z4:MOUT1.PROC")
5287 }
5288 record(ai, "$(P):LS01:Z4:MOUT1") {
5289  field(SCAN, "Passive")
5290  field(INP, "$(P):LS01:Z4:MOUT1:ARRAY.VAL MS")
5291  field(PREC, "1")
5292  field(FLNK, "$(P):LS01:Z4:RANGE1:ARRAY.PROC")
5293 }
5294 
5295 ##
5296 ## Read the ZONE RANGE setting.
5297 ##
5298 record(subArray, "$(P):LS01:Z4:RANGE1:ARRAY") {
5299  field(SCAN, "Passive")
5300  field(FTVL, "DOUBLE")
5301  field(INP, "$(P):LS01:Z4:ALL1.VAL MS")
5302  field(MALM, "8")
5303  field(NELM, "1")
5304  field(INDX, "5")
5305  field(PREC, "1")
5306  field(FLNK, "$(P):LS01:Z4:RANGE1.PROC")
5307 }
5308 record(mbbi, "$(P):LS01:Z4:RANGE1") {
5309  field(INP, "$(P):LS01:Z4:RANGE1:ARRAY.VAL")
5310  field(SCAN, "Passive")
5311  field(ZRST, "Off")
5312  field(ZRVL, "0")
5313  field(ONST, "Range1/Low")
5314  field(ONVL, "1")
5315  field(TWST, "Range2/Medium")
5316  field(TWVL, "2")
5317  field(THST, "Range3/High")
5318  field(THVL, "3")
5319  field(FRST, "Range4")
5320  field(FRVL, "4")
5321  field(FVST, "Range5")
5322  field(FVVL, "5")
5323  field(FLNK, "$(P):LS01:Z4:INPUT1:ARRAY.PROC")
5324 }
5325 
5326 ##
5327 ## Read the ZONE INPUT setting.
5328 ##
5329 record(subArray, "$(P):LS01:Z4:INPUT1:ARRAY") {
5330  field(SCAN, "Passive")
5331  field(FTVL, "DOUBLE")
5332  field(INP, "$(P):LS01:Z4:ALL1.VAL MS")
5333  field(MALM, "8")
5334  field(NELM, "1")
5335  field(INDX, "6")
5336  field(PREC, "1")
5337  field(FLNK, "$(P):LS01:Z4:INPUT1.PROC")
5338 }
5339 record(mbbi, "$(P):LS01:Z4:INPUT1") {
5340  field(INP, "$(P):LS01:Z4:INPUT1:ARRAY.VAL")
5341  field(SCAN, "Passive")
5342  field(ZRST, "None")
5343  field(ZRVL, "0")
5344  field(ONST, "Input A")
5345  field(ONVL, "1")
5346  field(TWST, "Input B")
5347  field(TWVL, "2")
5348  field(THST, "Input C")
5349  field(THVL, "3")
5350  field(FRST, "Input D")
5351  field(FRVL, "4")
5352  field(FVST, "Input D2")
5353  field(FVVL, "5")
5354  field(SXST, "Input D3")
5355  field(SXVL, "6")
5356  field(SVST, "Input D4")
5357  field(SVVL, "7")
5358  field(EIST, "Input D5")
5359  field(EIVL, "8")
5360  field(FLNK, "$(P):LS01:Z4:RATE1:ARRAY.PROC")
5361 }
5362 
5363 ##
5364 ## Read the ZONE RATE setting.
5365 ##
5366 record(subArray, "$(P):LS01:Z4:RATE1:ARRAY") {
5367  field(SCAN, "Passive")
5368  field(FTVL, "DOUBLE")
5369  field(INP, "$(P):LS01:Z4:ALL1.VAL MS")
5370  field(MALM, "8")
5371  field(NELM, "1")
5372  field(INDX, "7")
5373  field(PREC, "1")
5374  field(FLNK, "$(P):LS01:Z4:RATE1.PROC")
5375 }
5376 record(ai, "$(P):LS01:Z4:RATE1") {
5377  field(SCAN, "Passive")
5378  field(INP, "$(P):LS01:Z4:RATE1:ARRAY.VAL MS")
5379  field(PREC, "1")
5380  field(FLNK, "$(P):LS01:Z4:INITCALC1.PROC")
5381 }
5382 
5383 ##############################################################
5384 ##
5385 ## Populate the write records below with the current values.
5386 ## Only do this once at startup.
5387 ##
5388 ###############################################################
5389 
5390 record(calcout, "$(P):LS01:Z4:INITCALC1") {
5391  field(INPA, "0")
5392  field(CALC, "A")
5393  field(VAL, "0")
5394  field(DOPT, "Use OCAL")
5395  field(OOPT, "When Zero")
5396  field(OCAL, "1")
5397  field(OUT, "$(P):LS01:Z4:INITUB1.PROC")
5398 }
5399 
5400 record(dfanout, "$(P):LS01:Z4:INITUB1") {
5401  field(OMSL, "closed_loop")
5402  field(DOL, "$(P):LS01:Z4:UB1.VAL")
5403  field(OUTA, "$(P):LS01:Z4:UB_S1.VAL PP")
5404  field(FLNK, "$(P):LS01:Z4:INITP1.PROC")
5405 }
5406 record(dfanout, "$(P):LS01:Z4:INITP1") {
5407  field(OMSL, "closed_loop")
5408  field(DOL, "$(P):LS01:Z4:P1.VAL")
5409  field(OUTA, "$(P):LS01:Z4:P_S1.VAL PP")
5410  field(FLNK, "$(P):LS01:Z4:INITI1.PROC")
5411 }
5412 record(dfanout, "$(P):LS01:Z4:INITI1") {
5413  field(OMSL, "closed_loop")
5414  field(DOL, "$(P):LS01:Z4:I1.VAL")
5415  field(OUTA, "$(P):LS01:Z4:I_S1.VAL PP")
5416  field(FLNK, "$(P):LS01:Z4:INITD1.PROC")
5417 }
5418 record(dfanout, "$(P):LS01:Z4:INITD1") {
5419  field(OMSL, "closed_loop")
5420  field(DOL, "$(P):LS01:Z4:D1.VAL")
5421  field(OUTA, "$(P):LS01:Z4:D_S1.VAL PP")
5422  field(FLNK, "$(P):LS01:Z4:INITMOUT1.PROC")
5423 }
5424 record(dfanout, "$(P):LS01:Z4:INITMOUT1") {
5425  field(OMSL, "closed_loop")
5426  field(DOL, "$(P):LS01:Z4:MOUT1.VAL")
5427  field(OUTA, "$(P):LS01:Z4:MOUT_S1.VAL PP")
5428  field(FLNK, "$(P):LS01:Z4:INITRANGE1.PROC")
5429 }
5430 record(dfanout, "$(P):LS01:Z4:INITRANGE1") {
5431  field(OMSL, "closed_loop")
5432  field(DOL, "$(P):LS01:Z4:RANGE1.VAL")
5433  field(OUTA, "$(P):LS01:Z4:RANGE_S1.VAL PP")
5434  field(FLNK, "$(P):LS01:Z4:INITINPUT1.PROC")
5435 }
5436 record(dfanout, "$(P):LS01:Z4:INITINPUT1") {
5437  field(OMSL, "closed_loop")
5438  field(DOL, "$(P):LS01:Z4:INPUT1.VAL")
5439  field(OUTA, "$(P):LS01:Z4:INPUT_S1.VAL PP")
5440  field(FLNK, "$(P):LS01:Z4:INITRATE1.PROC")
5441 }
5442 record(dfanout, "$(P):LS01:Z4:INITRATE1") {
5443  field(OMSL, "closed_loop")
5444  field(DOL, "$(P):LS01:Z4:RATE1.VAL")
5445  field(OUTA, "$(P):LS01:Z4:RATE_S1.VAL PP")
5446  field(FLNK, "$(P):LS01:Z4:INITCOUNT1.PROC")
5447 }
5448 
5449 record(dfanout, "$(P):LS01:Z4:INITCOUNT1") {
5450  field(DOL, "1")
5451  field(OUTA, "$(P):LS01:Z4:INITCALC1.A")
5452 }
5453 
5454 
5455 
5456 #############################################
5457 # Write records. There is a calcout record to
5458 # do the actual write.
5459 #############################################
5460 
5461 ##
5462 ## Set the ZONE upper boundary setting.
5463 ##
5464 record(ao, "$(P):LS01:Z4:UB_S1") {
5465  field(SCAN, "Passive")
5466  field(PREC, "1")
5467  field(SDIS, "$(P):LS01:DISABLE")
5468 }
5469 
5470 ##
5471 ## Set the ZONE P setting.
5472 ##
5473 record(ao, "$(P):LS01:Z4:P_S1") {
5474  field(SCAN, "Passive")
5475  field(PREC, "1")
5476  field(SDIS, "$(P):LS01:DISABLE")
5477 }
5478 
5479 ##
5480 ## Set the ZONE I setting.
5481 ##
5482 record(ao, "$(P):LS01:Z4:I_S1") {
5483  field(SCAN, "Passive")
5484  field(PREC, "1")
5485  field(SDIS, "$(P):LS01:DISABLE")
5486 }
5487 
5488 ##
5489 ## Set the ZONE D setting.
5490 ##
5491 record(ao, "$(P):LS01:Z4:D_S1") {
5492  field(SCAN, "Passive")
5493  field(PREC, "1")
5494  field(SDIS, "$(P):LS01:DISABLE")
5495 }
5496 
5497 ##
5498 ## Set the ZONE MOUT setting.
5499 ##
5500 record(ao, "$(P):LS01:Z4:MOUT_S1") {
5501  field(SCAN, "Passive")
5502  field(PREC, "1")
5503  field(SDIS, "$(P):LS01:DISABLE")
5504 }
5505 
5506 ##
5507 ## Set the ZONE RANGE setting.
5508 ##
5509 record(mbbo, "$(P):LS01:Z4:RANGE_S1") {
5510  field(SCAN, "Passive")
5511  field(ZRST, "Off")
5512  field(ZRVL, "0")
5513  field(ONST, "Range1/Low")
5514  field(ONVL, "1")
5515  field(TWST, "Range2/Medium")
5516  field(TWVL, "2")
5517  field(THST, "Range3/High")
5518  field(THVL, "3")
5519  field(FRST, "Range4")
5520  field(FRVL, "4")
5521  field(FVST, "Range5")
5522  field(FVVL, "5")
5523  field(SDIS, "$(P):LS01:DISABLE")
5524 }
5525 
5526 ##
5527 ## Set the ZONE INPUT setting.
5528 ##
5529 record(mbbo, "$(P):LS01:Z4:INPUT_S1") {
5530  field(ZRST, "None")
5531  field(ZRVL, "0")
5532  field(ONST, "Input A")
5533  field(ONVL, "1")
5534  field(TWST, "Input B")
5535  field(TWVL, "2")
5536  field(THST, "Input C")
5537  field(THVL, "3")
5538  field(FRST, "Input D")
5539  field(FRVL, "4")
5540  field(FVST, "Input D2")
5541  field(FVVL, "5")
5542  field(SXST, "Input D3")
5543  field(SXVL, "6")
5544  field(SVST, "Input D4")
5545  field(SVVL, "7")
5546  field(EIST, "Input D5")
5547  field(EIVL, "8")
5548  field(SDIS, "$(P):LS01:DISABLE")
5549 }
5550 
5551 ##
5552 ## Set the ZONE RATE setting.
5553 ##
5554 record(ao, "$(P):LS01:Z4:RATE_S1") {
5555  field(SCAN, "Passive")
5556  field(PREC, "1")
5557  field(SDIS, "$(P):LS01:DISABLE")
5558 }
5559 
5560 ##
5561 ## Record to write the ZONE parameters.
5562 ##
5563 record(calcout, "$(P):LS01:Z4:SET1") {
5564  field(INPA, "$(P):LS01:Z4:UB_S1")
5565  field(INPB, "$(P):LS01:Z4:P_S1")
5566  field(INPC, "$(P):LS01:Z4:I_S1")
5567  field(INPD, "$(P):LS01:Z4:D_S1")
5568  field(INPE, "$(P):LS01:Z4:MOUT_S1")
5569  field(INPF, "$(P):LS01:Z4:RANGE_S1")
5570  field(INPG, "$(P):LS01:Z4:INPUT_S1")
5571  field(INPH, "$(P):LS01:Z4:RATE_S1")
5572  field(CALC, "0")
5573  field(DTYP, "stream")
5574  field(OUT, "@ls336.proto setZONE(1,4) L0 0")
5575  field(SDIS, "$(P):LS01:DISABLE")
5576  field(FLNK, "$(P):LS01:Z4:ALL1.PROC")
5577 }
5578 
5579 
5580 
5581 
5582 
5583 
5584 
5585 
5586 
5587 
5588 #######################################
5589 #
5590 # Template to support reading and setting
5591 # controller ZONE parameters. It reads the ZONE
5592 # parameters into an array, then uses subArrays to
5593 # extract each parameter.
5594 #
5595 # This template is used by the output template
5596 # and it needs the following macros:
5597 #
5598 # ZONE: zone number
5599 # OUT: output number
5600 #
5601 #######################################
5602 
5603 ##
5604 ## Read the ZONE setting into an array (8 values)
5605 ##
5606 record(waveform, "$(P):LS01:Z5:ALL1") {
5607  field(DTYP, "stream")
5608  field(SDIS, "$(P):LS01:DISABLE_POLL")
5609  field(INP, "@ls336.proto getZONE(1,5) L0 0")
5610  field(SCAN, "Passive")
5611  field(NELM, "8")
5612  field(FTVL, "DOUBLE")
5613  field(PREC, "1")
5614  field(FLNK, "$(P):LS01:Z5:UB1:ARRAY.PROC")
5615 }
5616 
5617 ##
5618 ## Read the ZONE upper boundary setting.
5619 ##
5620 record(subArray, "$(P):LS01:Z5:UB1:ARRAY") {
5621  field(SCAN, "Passive")
5622  field(FTVL, "DOUBLE")
5623  field(INP, "$(P):LS01:Z5:ALL1.VAL MS")
5624  field(MALM, "8")
5625  field(NELM, "1")
5626  field(INDX, "0")
5627  field(PREC, "1")
5628  field(FLNK, "$(P):LS01:Z5:UB1.PROC")
5629 }
5630 record(ai, "$(P):LS01:Z5:UB1") {
5631  field(SCAN, "Passive")
5632  field(INP, "$(P):LS01:Z5:UB1:ARRAY.VAL MS")
5633  field(PREC, "1")
5634  field(FLNK, "$(P):LS01:Z5:P1:ARRAY.PROC")
5635 }
5636 
5637 ##
5638 ## Read the ZONE P setting.
5639 ##
5640 record(subArray, "$(P):LS01:Z5:P1:ARRAY") {
5641  field(SCAN, "Passive")
5642  field(FTVL, "DOUBLE")
5643  field(INP, "$(P):LS01:Z5:ALL1.VAL MS")
5644  field(MALM, "8")
5645  field(NELM, "1")
5646  field(INDX, "1")
5647  field(PREC, "1")
5648  field(FLNK, "$(P):LS01:Z5:P1.PROC")
5649 }
5650 record(ai, "$(P):LS01:Z5:P1") {
5651  field(SCAN, "Passive")
5652  field(INP, "$(P):LS01:Z5:P1:ARRAY.VAL MS")
5653  field(PREC, "1")
5654  field(FLNK, "$(P):LS01:Z5:I1:ARRAY.PROC")
5655 }
5656 
5657 ##
5658 ## Read the ZONE I setting.
5659 ##
5660 record(subArray, "$(P):LS01:Z5:I1:ARRAY") {
5661  field(SCAN, "Passive")
5662  field(FTVL, "DOUBLE")
5663  field(INP, "$(P):LS01:Z5:ALL1.VAL MS")
5664  field(MALM, "8")
5665  field(NELM, "1")
5666  field(INDX, "2")
5667  field(PREC, "1")
5668  field(FLNK, "$(P):LS01:Z5:I1.PROC")
5669 }
5670 record(ai, "$(P):LS01:Z5:I1") {
5671  field(SCAN, "Passive")
5672  field(INP, "$(P):LS01:Z5:I1:ARRAY.VAL MS")
5673  field(PREC, "1")
5674  field(FLNK, "$(P):LS01:Z5:D1:ARRAY.PROC")
5675 }
5676 
5677 ##
5678 ## Read the ZONE D setting.
5679 ##
5680 record(subArray, "$(P):LS01:Z5:D1:ARRAY") {
5681  field(SCAN, "Passive")
5682  field(FTVL, "DOUBLE")
5683  field(INP, "$(P):LS01:Z5:ALL1.VAL MS")
5684  field(MALM, "8")
5685  field(NELM, "1")
5686  field(INDX, "3")
5687  field(PREC, "1")
5688  field(FLNK, "$(P):LS01:Z5:D1.PROC")
5689 }
5690 record(ai, "$(P):LS01:Z5:D1") {
5691  field(SCAN, "Passive")
5692  field(INP, "$(P):LS01:Z5:D1:ARRAY.VAL MS")
5693  field(PREC, "1")
5694  field(FLNK, "$(P):LS01:Z5:MOUT1:ARRAY.PROC")
5695 }
5696 
5697 ##
5698 ## Read the ZONE MOUT setting.
5699 ##
5700 record(subArray, "$(P):LS01:Z5:MOUT1:ARRAY") {
5701  field(SCAN, "Passive")
5702  field(FTVL, "DOUBLE")
5703  field(INP, "$(P):LS01:Z5:ALL1.VAL MS")
5704  field(MALM, "8")
5705  field(NELM, "1")
5706  field(INDX, "4")
5707  field(PREC, "1")
5708  field(FLNK, "$(P):LS01:Z5:MOUT1.PROC")
5709 }
5710 record(ai, "$(P):LS01:Z5:MOUT1") {
5711  field(SCAN, "Passive")
5712  field(INP, "$(P):LS01:Z5:MOUT1:ARRAY.VAL MS")
5713  field(PREC, "1")
5714  field(FLNK, "$(P):LS01:Z5:RANGE1:ARRAY.PROC")
5715 }
5716 
5717 ##
5718 ## Read the ZONE RANGE setting.
5719 ##
5720 record(subArray, "$(P):LS01:Z5:RANGE1:ARRAY") {
5721  field(SCAN, "Passive")
5722  field(FTVL, "DOUBLE")
5723  field(INP, "$(P):LS01:Z5:ALL1.VAL MS")
5724  field(MALM, "8")
5725  field(NELM, "1")
5726  field(INDX, "5")
5727  field(PREC, "1")
5728  field(FLNK, "$(P):LS01:Z5:RANGE1.PROC")
5729 }
5730 record(mbbi, "$(P):LS01:Z5:RANGE1") {
5731  field(INP, "$(P):LS01:Z5:RANGE1:ARRAY.VAL")
5732  field(SCAN, "Passive")
5733  field(ZRST, "Off")
5734  field(ZRVL, "0")
5735  field(ONST, "Range1/Low")
5736  field(ONVL, "1")
5737  field(TWST, "Range2/Medium")
5738  field(TWVL, "2")
5739  field(THST, "Range3/High")
5740  field(THVL, "3")
5741  field(FRST, "Range4")
5742  field(FRVL, "4")
5743  field(FVST, "Range5")
5744  field(FVVL, "5")
5745  field(FLNK, "$(P):LS01:Z5:INPUT1:ARRAY.PROC")
5746 }
5747 
5748 ##
5749 ## Read the ZONE INPUT setting.
5750 ##
5751 record(subArray, "$(P):LS01:Z5:INPUT1:ARRAY") {
5752  field(SCAN, "Passive")
5753  field(FTVL, "DOUBLE")
5754  field(INP, "$(P):LS01:Z5:ALL1.VAL MS")
5755  field(MALM, "8")
5756  field(NELM, "1")
5757  field(INDX, "6")
5758  field(PREC, "1")
5759  field(FLNK, "$(P):LS01:Z5:INPUT1.PROC")
5760 }
5761 record(mbbi, "$(P):LS01:Z5:INPUT1") {
5762  field(INP, "$(P):LS01:Z5:INPUT1:ARRAY.VAL")
5763  field(SCAN, "Passive")
5764  field(ZRST, "None")
5765  field(ZRVL, "0")
5766  field(ONST, "Input A")
5767  field(ONVL, "1")
5768  field(TWST, "Input B")
5769  field(TWVL, "2")
5770  field(THST, "Input C")
5771  field(THVL, "3")
5772  field(FRST, "Input D")
5773  field(FRVL, "4")
5774  field(FVST, "Input D2")
5775  field(FVVL, "5")
5776  field(SXST, "Input D3")
5777  field(SXVL, "6")
5778  field(SVST, "Input D4")
5779  field(SVVL, "7")
5780  field(EIST, "Input D5")
5781  field(EIVL, "8")
5782  field(FLNK, "$(P):LS01:Z5:RATE1:ARRAY.PROC")
5783 }
5784 
5785 ##
5786 ## Read the ZONE RATE setting.
5787 ##
5788 record(subArray, "$(P):LS01:Z5:RATE1:ARRAY") {
5789  field(SCAN, "Passive")
5790  field(FTVL, "DOUBLE")
5791  field(INP, "$(P):LS01:Z5:ALL1.VAL MS")
5792  field(MALM, "8")
5793  field(NELM, "1")
5794  field(INDX, "7")
5795  field(PREC, "1")
5796  field(FLNK, "$(P):LS01:Z5:RATE1.PROC")
5797 }
5798 record(ai, "$(P):LS01:Z5:RATE1") {
5799  field(SCAN, "Passive")
5800  field(INP, "$(P):LS01:Z5:RATE1:ARRAY.VAL MS")
5801  field(PREC, "1")
5802  field(FLNK, "$(P):LS01:Z5:INITCALC1.PROC")
5803 }
5804 
5805 ##############################################################
5806 ##
5807 ## Populate the write records below with the current values.
5808 ## Only do this once at startup.
5809 ##
5810 ###############################################################
5811 
5812 record(calcout, "$(P):LS01:Z5:INITCALC1") {
5813  field(INPA, "0")
5814  field(CALC, "A")
5815  field(VAL, "0")
5816  field(DOPT, "Use OCAL")
5817  field(OOPT, "When Zero")
5818  field(OCAL, "1")
5819  field(OUT, "$(P):LS01:Z5:INITUB1.PROC")
5820 }
5821 
5822 record(dfanout, "$(P):LS01:Z5:INITUB1") {
5823  field(OMSL, "closed_loop")
5824  field(DOL, "$(P):LS01:Z5:UB1.VAL")
5825  field(OUTA, "$(P):LS01:Z5:UB_S1.VAL PP")
5826  field(FLNK, "$(P):LS01:Z5:INITP1.PROC")
5827 }
5828 record(dfanout, "$(P):LS01:Z5:INITP1") {
5829  field(OMSL, "closed_loop")
5830  field(DOL, "$(P):LS01:Z5:P1.VAL")
5831  field(OUTA, "$(P):LS01:Z5:P_S1.VAL PP")
5832  field(FLNK, "$(P):LS01:Z5:INITI1.PROC")
5833 }
5834 record(dfanout, "$(P):LS01:Z5:INITI1") {
5835  field(OMSL, "closed_loop")
5836  field(DOL, "$(P):LS01:Z5:I1.VAL")
5837  field(OUTA, "$(P):LS01:Z5:I_S1.VAL PP")
5838  field(FLNK, "$(P):LS01:Z5:INITD1.PROC")
5839 }
5840 record(dfanout, "$(P):LS01:Z5:INITD1") {
5841  field(OMSL, "closed_loop")
5842  field(DOL, "$(P):LS01:Z5:D1.VAL")
5843  field(OUTA, "$(P):LS01:Z5:D_S1.VAL PP")
5844  field(FLNK, "$(P):LS01:Z5:INITMOUT1.PROC")
5845 }
5846 record(dfanout, "$(P):LS01:Z5:INITMOUT1") {
5847  field(OMSL, "closed_loop")
5848  field(DOL, "$(P):LS01:Z5:MOUT1.VAL")
5849  field(OUTA, "$(P):LS01:Z5:MOUT_S1.VAL PP")
5850  field(FLNK, "$(P):LS01:Z5:INITRANGE1.PROC")
5851 }
5852 record(dfanout, "$(P):LS01:Z5:INITRANGE1") {
5853  field(OMSL, "closed_loop")
5854  field(DOL, "$(P):LS01:Z5:RANGE1.VAL")
5855  field(OUTA, "$(P):LS01:Z5:RANGE_S1.VAL PP")
5856  field(FLNK, "$(P):LS01:Z5:INITINPUT1.PROC")
5857 }
5858 record(dfanout, "$(P):LS01:Z5:INITINPUT1") {
5859  field(OMSL, "closed_loop")
5860  field(DOL, "$(P):LS01:Z5:INPUT1.VAL")
5861  field(OUTA, "$(P):LS01:Z5:INPUT_S1.VAL PP")
5862  field(FLNK, "$(P):LS01:Z5:INITRATE1.PROC")
5863 }
5864 record(dfanout, "$(P):LS01:Z5:INITRATE1") {
5865  field(OMSL, "closed_loop")
5866  field(DOL, "$(P):LS01:Z5:RATE1.VAL")
5867  field(OUTA, "$(P):LS01:Z5:RATE_S1.VAL PP")
5868  field(FLNK, "$(P):LS01:Z5:INITCOUNT1.PROC")
5869 }
5870 
5871 record(dfanout, "$(P):LS01:Z5:INITCOUNT1") {
5872  field(DOL, "1")
5873  field(OUTA, "$(P):LS01:Z5:INITCALC1.A")
5874 }
5875 
5876 
5877 
5878 #############################################
5879 # Write records. There is a calcout record to
5880 # do the actual write.
5881 #############################################
5882 
5883 ##
5884 ## Set the ZONE upper boundary setting.
5885 ##
5886 record(ao, "$(P):LS01:Z5:UB_S1") {
5887  field(SCAN, "Passive")
5888  field(PREC, "1")
5889  field(SDIS, "$(P):LS01:DISABLE")
5890 }
5891 
5892 ##
5893 ## Set the ZONE P setting.
5894 ##
5895 record(ao, "$(P):LS01:Z5:P_S1") {
5896  field(SCAN, "Passive")
5897  field(PREC, "1")
5898  field(SDIS, "$(P):LS01:DISABLE")
5899 }
5900 
5901 ##
5902 ## Set the ZONE I setting.
5903 ##
5904 record(ao, "$(P):LS01:Z5:I_S1") {
5905  field(SCAN, "Passive")
5906  field(PREC, "1")
5907  field(SDIS, "$(P):LS01:DISABLE")
5908 }
5909 
5910 ##
5911 ## Set the ZONE D setting.
5912 ##
5913 record(ao, "$(P):LS01:Z5:D_S1") {
5914  field(SCAN, "Passive")
5915  field(PREC, "1")
5916  field(SDIS, "$(P):LS01:DISABLE")
5917 }
5918 
5919 ##
5920 ## Set the ZONE MOUT setting.
5921 ##
5922 record(ao, "$(P):LS01:Z5:MOUT_S1") {
5923  field(SCAN, "Passive")
5924  field(PREC, "1")
5925  field(SDIS, "$(P):LS01:DISABLE")
5926 }
5927 
5928 ##
5929 ## Set the ZONE RANGE setting.
5930 ##
5931 record(mbbo, "$(P):LS01:Z5:RANGE_S1") {
5932  field(SCAN, "Passive")
5933  field(ZRST, "Off")
5934  field(ZRVL, "0")
5935  field(ONST, "Range1/Low")
5936  field(ONVL, "1")
5937  field(TWST, "Range2/Medium")
5938  field(TWVL, "2")
5939  field(THST, "Range3/High")
5940  field(THVL, "3")
5941  field(FRST, "Range4")
5942  field(FRVL, "4")
5943  field(FVST, "Range5")
5944  field(FVVL, "5")
5945  field(SDIS, "$(P):LS01:DISABLE")
5946 }
5947 
5948 ##
5949 ## Set the ZONE INPUT setting.
5950 ##
5951 record(mbbo, "$(P):LS01:Z5:INPUT_S1") {
5952  field(ZRST, "None")
5953  field(ZRVL, "0")
5954  field(ONST, "Input A")
5955  field(ONVL, "1")
5956  field(TWST, "Input B")
5957  field(TWVL, "2")
5958  field(THST, "Input C")
5959  field(THVL, "3")
5960  field(FRST, "Input D")
5961  field(FRVL, "4")
5962  field(FVST, "Input D2")
5963  field(FVVL, "5")
5964  field(SXST, "Input D3")
5965  field(SXVL, "6")
5966  field(SVST, "Input D4")
5967  field(SVVL, "7")
5968  field(EIST, "Input D5")
5969  field(EIVL, "8")
5970  field(SDIS, "$(P):LS01:DISABLE")
5971 }
5972 
5973 ##
5974 ## Set the ZONE RATE setting.
5975 ##
5976 record(ao, "$(P):LS01:Z5:RATE_S1") {
5977  field(SCAN, "Passive")
5978  field(PREC, "1")
5979  field(SDIS, "$(P):LS01:DISABLE")
5980 }
5981 
5982 ##
5983 ## Record to write the ZONE parameters.
5984 ##
5985 record(calcout, "$(P):LS01:Z5:SET1") {
5986  field(INPA, "$(P):LS01:Z5:UB_S1")
5987  field(INPB, "$(P):LS01:Z5:P_S1")
5988  field(INPC, "$(P):LS01:Z5:I_S1")
5989  field(INPD, "$(P):LS01:Z5:D_S1")
5990  field(INPE, "$(P):LS01:Z5:MOUT_S1")
5991  field(INPF, "$(P):LS01:Z5:RANGE_S1")
5992  field(INPG, "$(P):LS01:Z5:INPUT_S1")
5993  field(INPH, "$(P):LS01:Z5:RATE_S1")
5994  field(CALC, "0")
5995  field(DTYP, "stream")
5996  field(OUT, "@ls336.proto setZONE(1,5) L0 0")
5997  field(SDIS, "$(P):LS01:DISABLE")
5998  field(FLNK, "$(P):LS01:Z5:ALL1.PROC")
5999 }
6000 
6001 
6002 
6003 
6004 
6005 
6006 
6007 
6008 
6009 
6010 #######################################
6011 #
6012 # Template to support reading and setting
6013 # controller ZONE parameters. It reads the ZONE
6014 # parameters into an array, then uses subArrays to
6015 # extract each parameter.
6016 #
6017 # This template is used by the output template
6018 # and it needs the following macros:
6019 #
6020 # ZONE: zone number
6021 # OUT: output number
6022 #
6023 #######################################
6024 
6025 ##
6026 ## Read the ZONE setting into an array (8 values)
6027 ##
6028 record(waveform, "$(P):LS01:Z6:ALL1") {
6029  field(DTYP, "stream")
6030  field(SDIS, "$(P):LS01:DISABLE_POLL")
6031  field(INP, "@ls336.proto getZONE(1,6) L0 0")
6032  field(SCAN, "Passive")
6033  field(NELM, "8")
6034  field(FTVL, "DOUBLE")
6035  field(PREC, "1")
6036  field(FLNK, "$(P):LS01:Z6:UB1:ARRAY.PROC")
6037 }
6038 
6039 ##
6040 ## Read the ZONE upper boundary setting.
6041 ##
6042 record(subArray, "$(P):LS01:Z6:UB1:ARRAY") {
6043  field(SCAN, "Passive")
6044  field(FTVL, "DOUBLE")
6045  field(INP, "$(P):LS01:Z6:ALL1.VAL MS")
6046  field(MALM, "8")
6047  field(NELM, "1")
6048  field(INDX, "0")
6049  field(PREC, "1")
6050  field(FLNK, "$(P):LS01:Z6:UB1.PROC")
6051 }
6052 record(ai, "$(P):LS01:Z6:UB1") {
6053  field(SCAN, "Passive")
6054  field(INP, "$(P):LS01:Z6:UB1:ARRAY.VAL MS")
6055  field(PREC, "1")
6056  field(FLNK, "$(P):LS01:Z6:P1:ARRAY.PROC")
6057 }
6058 
6059 ##
6060 ## Read the ZONE P setting.
6061 ##
6062 record(subArray, "$(P):LS01:Z6:P1:ARRAY") {
6063  field(SCAN, "Passive")
6064  field(FTVL, "DOUBLE")
6065  field(INP, "$(P):LS01:Z6:ALL1.VAL MS")
6066  field(MALM, "8")
6067  field(NELM, "1")
6068  field(INDX, "1")
6069  field(PREC, "1")
6070  field(FLNK, "$(P):LS01:Z6:P1.PROC")
6071 }
6072 record(ai, "$(P):LS01:Z6:P1") {
6073  field(SCAN, "Passive")
6074  field(INP, "$(P):LS01:Z6:P1:ARRAY.VAL MS")
6075  field(PREC, "1")
6076  field(FLNK, "$(P):LS01:Z6:I1:ARRAY.PROC")
6077 }
6078 
6079 ##
6080 ## Read the ZONE I setting.
6081 ##
6082 record(subArray, "$(P):LS01:Z6:I1:ARRAY") {
6083  field(SCAN, "Passive")
6084  field(FTVL, "DOUBLE")
6085  field(INP, "$(P):LS01:Z6:ALL1.VAL MS")
6086  field(MALM, "8")
6087  field(NELM, "1")
6088  field(INDX, "2")
6089  field(PREC, "1")
6090  field(FLNK, "$(P):LS01:Z6:I1.PROC")
6091 }
6092 record(ai, "$(P):LS01:Z6:I1") {
6093  field(SCAN, "Passive")
6094  field(INP, "$(P):LS01:Z6:I1:ARRAY.VAL MS")
6095  field(PREC, "1")
6096  field(FLNK, "$(P):LS01:Z6:D1:ARRAY.PROC")
6097 }
6098 
6099 ##
6100 ## Read the ZONE D setting.
6101 ##
6102 record(subArray, "$(P):LS01:Z6:D1:ARRAY") {
6103  field(SCAN, "Passive")
6104  field(FTVL, "DOUBLE")
6105  field(INP, "$(P):LS01:Z6:ALL1.VAL MS")
6106  field(MALM, "8")
6107  field(NELM, "1")
6108  field(INDX, "3")
6109  field(PREC, "1")
6110  field(FLNK, "$(P):LS01:Z6:D1.PROC")
6111 }
6112 record(ai, "$(P):LS01:Z6:D1") {
6113  field(SCAN, "Passive")
6114  field(INP, "$(P):LS01:Z6:D1:ARRAY.VAL MS")
6115  field(PREC, "1")
6116  field(FLNK, "$(P):LS01:Z6:MOUT1:ARRAY.PROC")
6117 }
6118 
6119 ##
6120 ## Read the ZONE MOUT setting.
6121 ##
6122 record(subArray, "$(P):LS01:Z6:MOUT1:ARRAY") {
6123  field(SCAN, "Passive")
6124  field(FTVL, "DOUBLE")
6125  field(INP, "$(P):LS01:Z6:ALL1.VAL MS")
6126  field(MALM, "8")
6127  field(NELM, "1")
6128  field(INDX, "4")
6129  field(PREC, "1")
6130  field(FLNK, "$(P):LS01:Z6:MOUT1.PROC")
6131 }
6132 record(ai, "$(P):LS01:Z6:MOUT1") {
6133  field(SCAN, "Passive")
6134  field(INP, "$(P):LS01:Z6:MOUT1:ARRAY.VAL MS")
6135  field(PREC, "1")
6136  field(FLNK, "$(P):LS01:Z6:RANGE1:ARRAY.PROC")
6137 }
6138 
6139 ##
6140 ## Read the ZONE RANGE setting.
6141 ##
6142 record(subArray, "$(P):LS01:Z6:RANGE1:ARRAY") {
6143  field(SCAN, "Passive")
6144  field(FTVL, "DOUBLE")
6145  field(INP, "$(P):LS01:Z6:ALL1.VAL MS")
6146  field(MALM, "8")
6147  field(NELM, "1")
6148  field(INDX, "5")
6149  field(PREC, "1")
6150  field(FLNK, "$(P):LS01:Z6:RANGE1.PROC")
6151 }
6152 record(mbbi, "$(P):LS01:Z6:RANGE1") {
6153  field(INP, "$(P):LS01:Z6:RANGE1:ARRAY.VAL")
6154  field(SCAN, "Passive")
6155  field(ZRST, "Off")
6156  field(ZRVL, "0")
6157  field(ONST, "Range1/Low")
6158  field(ONVL, "1")
6159  field(TWST, "Range2/Medium")
6160  field(TWVL, "2")
6161  field(THST, "Range3/High")
6162  field(THVL, "3")
6163  field(FRST, "Range4")
6164  field(FRVL, "4")
6165  field(FVST, "Range5")
6166  field(FVVL, "5")
6167  field(FLNK, "$(P):LS01:Z6:INPUT1:ARRAY.PROC")
6168 }
6169 
6170 ##
6171 ## Read the ZONE INPUT setting.
6172 ##
6173 record(subArray, "$(P):LS01:Z6:INPUT1:ARRAY") {
6174  field(SCAN, "Passive")
6175  field(FTVL, "DOUBLE")
6176  field(INP, "$(P):LS01:Z6:ALL1.VAL MS")
6177  field(MALM, "8")
6178  field(NELM, "1")
6179  field(INDX, "6")
6180  field(PREC, "1")
6181  field(FLNK, "$(P):LS01:Z6:INPUT1.PROC")
6182 }
6183 record(mbbi, "$(P):LS01:Z6:INPUT1") {
6184  field(INP, "$(P):LS01:Z6:INPUT1:ARRAY.VAL")
6185  field(SCAN, "Passive")
6186  field(ZRST, "None")
6187  field(ZRVL, "0")
6188  field(ONST, "Input A")
6189  field(ONVL, "1")
6190  field(TWST, "Input B")
6191  field(TWVL, "2")
6192  field(THST, "Input C")
6193  field(THVL, "3")
6194  field(FRST, "Input D")
6195  field(FRVL, "4")
6196  field(FVST, "Input D2")
6197  field(FVVL, "5")
6198  field(SXST, "Input D3")
6199  field(SXVL, "6")
6200  field(SVST, "Input D4")
6201  field(SVVL, "7")
6202  field(EIST, "Input D5")
6203  field(EIVL, "8")
6204  field(FLNK, "$(P):LS01:Z6:RATE1:ARRAY.PROC")
6205 }
6206 
6207 ##
6208 ## Read the ZONE RATE setting.
6209 ##
6210 record(subArray, "$(P):LS01:Z6:RATE1:ARRAY") {
6211  field(SCAN, "Passive")
6212  field(FTVL, "DOUBLE")
6213  field(INP, "$(P):LS01:Z6:ALL1.VAL MS")
6214  field(MALM, "8")
6215  field(NELM, "1")
6216  field(INDX, "7")
6217  field(PREC, "1")
6218  field(FLNK, "$(P):LS01:Z6:RATE1.PROC")
6219 }
6220 record(ai, "$(P):LS01:Z6:RATE1") {
6221  field(SCAN, "Passive")
6222  field(INP, "$(P):LS01:Z6:RATE1:ARRAY.VAL MS")
6223  field(PREC, "1")
6224  field(FLNK, "$(P):LS01:Z6:INITCALC1.PROC")
6225 }
6226 
6227 ##############################################################
6228 ##
6229 ## Populate the write records below with the current values.
6230 ## Only do this once at startup.
6231 ##
6232 ###############################################################
6233 
6234 record(calcout, "$(P):LS01:Z6:INITCALC1") {
6235  field(INPA, "0")
6236  field(CALC, "A")
6237  field(VAL, "0")
6238  field(DOPT, "Use OCAL")
6239  field(OOPT, "When Zero")
6240  field(OCAL, "1")
6241  field(OUT, "$(P):LS01:Z6:INITUB1.PROC")
6242 }
6243 
6244 record(dfanout, "$(P):LS01:Z6:INITUB1") {
6245  field(OMSL, "closed_loop")
6246  field(DOL, "$(P):LS01:Z6:UB1.VAL")
6247  field(OUTA, "$(P):LS01:Z6:UB_S1.VAL PP")
6248  field(FLNK, "$(P):LS01:Z6:INITP1.PROC")
6249 }
6250 record(dfanout, "$(P):LS01:Z6:INITP1") {
6251  field(OMSL, "closed_loop")
6252  field(DOL, "$(P):LS01:Z6:P1.VAL")
6253  field(OUTA, "$(P):LS01:Z6:P_S1.VAL PP")
6254  field(FLNK, "$(P):LS01:Z6:INITI1.PROC")
6255 }
6256 record(dfanout, "$(P):LS01:Z6:INITI1") {
6257  field(OMSL, "closed_loop")
6258  field(DOL, "$(P):LS01:Z6:I1.VAL")
6259  field(OUTA, "$(P):LS01:Z6:I_S1.VAL PP")
6260  field(FLNK, "$(P):LS01:Z6:INITD1.PROC")
6261 }
6262 record(dfanout, "$(P):LS01:Z6:INITD1") {
6263  field(OMSL, "closed_loop")
6264  field(DOL, "$(P):LS01:Z6:D1.VAL")
6265  field(OUTA, "$(P):LS01:Z6:D_S1.VAL PP")
6266  field(FLNK, "$(P):LS01:Z6:INITMOUT1.PROC")
6267 }
6268 record(dfanout, "$(P):LS01:Z6:INITMOUT1") {
6269  field(OMSL, "closed_loop")
6270  field(DOL, "$(P):LS01:Z6:MOUT1.VAL")
6271  field(OUTA, "$(P):LS01:Z6:MOUT_S1.VAL PP")
6272  field(FLNK, "$(P):LS01:Z6:INITRANGE1.PROC")
6273 }
6274 record(dfanout, "$(P):LS01:Z6:INITRANGE1") {
6275  field(OMSL, "closed_loop")
6276  field(DOL, "$(P):LS01:Z6:RANGE1.VAL")
6277  field(OUTA, "$(P):LS01:Z6:RANGE_S1.VAL PP")
6278  field(FLNK, "$(P):LS01:Z6:INITINPUT1.PROC")
6279 }
6280 record(dfanout, "$(P):LS01:Z6:INITINPUT1") {
6281  field(OMSL, "closed_loop")
6282  field(DOL, "$(P):LS01:Z6:INPUT1.VAL")
6283  field(OUTA, "$(P):LS01:Z6:INPUT_S1.VAL PP")
6284  field(FLNK, "$(P):LS01:Z6:INITRATE1.PROC")
6285 }
6286 record(dfanout, "$(P):LS01:Z6:INITRATE1") {
6287  field(OMSL, "closed_loop")
6288  field(DOL, "$(P):LS01:Z6:RATE1.VAL")
6289  field(OUTA, "$(P):LS01:Z6:RATE_S1.VAL PP")
6290  field(FLNK, "$(P):LS01:Z6:INITCOUNT1.PROC")
6291 }
6292 
6293 record(dfanout, "$(P):LS01:Z6:INITCOUNT1") {
6294  field(DOL, "1")
6295  field(OUTA, "$(P):LS01:Z6:INITCALC1.A")
6296 }
6297 
6298 
6299 
6300 #############################################
6301 # Write records. There is a calcout record to
6302 # do the actual write.
6303 #############################################
6304 
6305 ##
6306 ## Set the ZONE upper boundary setting.
6307 ##
6308 record(ao, "$(P):LS01:Z6:UB_S1") {
6309  field(SCAN, "Passive")
6310  field(PREC, "1")
6311  field(SDIS, "$(P):LS01:DISABLE")
6312 }
6313 
6314 ##
6315 ## Set the ZONE P setting.
6316 ##
6317 record(ao, "$(P):LS01:Z6:P_S1") {
6318  field(SCAN, "Passive")
6319  field(PREC, "1")
6320  field(SDIS, "$(P):LS01:DISABLE")
6321 }
6322 
6323 ##
6324 ## Set the ZONE I setting.
6325 ##
6326 record(ao, "$(P):LS01:Z6:I_S1") {
6327  field(SCAN, "Passive")
6328  field(PREC, "1")
6329  field(SDIS, "$(P):LS01:DISABLE")
6330 }
6331 
6332 ##
6333 ## Set the ZONE D setting.
6334 ##
6335 record(ao, "$(P):LS01:Z6:D_S1") {
6336  field(SCAN, "Passive")
6337  field(PREC, "1")
6338  field(SDIS, "$(P):LS01:DISABLE")
6339 }
6340 
6341 ##
6342 ## Set the ZONE MOUT setting.
6343 ##
6344 record(ao, "$(P):LS01:Z6:MOUT_S1") {
6345  field(SCAN, "Passive")
6346  field(PREC, "1")
6347  field(SDIS, "$(P):LS01:DISABLE")
6348 }
6349 
6350 ##
6351 ## Set the ZONE RANGE setting.
6352 ##
6353 record(mbbo, "$(P):LS01:Z6:RANGE_S1") {
6354  field(SCAN, "Passive")
6355  field(ZRST, "Off")
6356  field(ZRVL, "0")
6357  field(ONST, "Range1/Low")
6358  field(ONVL, "1")
6359  field(TWST, "Range2/Medium")
6360  field(TWVL, "2")
6361  field(THST, "Range3/High")
6362  field(THVL, "3")
6363  field(FRST, "Range4")
6364  field(FRVL, "4")
6365  field(FVST, "Range5")
6366  field(FVVL, "5")
6367  field(SDIS, "$(P):LS01:DISABLE")
6368 }
6369 
6370 ##
6371 ## Set the ZONE INPUT setting.
6372 ##
6373 record(mbbo, "$(P):LS01:Z6:INPUT_S1") {
6374  field(ZRST, "None")
6375  field(ZRVL, "0")
6376  field(ONST, "Input A")
6377  field(ONVL, "1")
6378  field(TWST, "Input B")
6379  field(TWVL, "2")
6380  field(THST, "Input C")
6381  field(THVL, "3")
6382  field(FRST, "Input D")
6383  field(FRVL, "4")
6384  field(FVST, "Input D2")
6385  field(FVVL, "5")
6386  field(SXST, "Input D3")
6387  field(SXVL, "6")
6388  field(SVST, "Input D4")
6389  field(SVVL, "7")
6390  field(EIST, "Input D5")
6391  field(EIVL, "8")
6392  field(SDIS, "$(P):LS01:DISABLE")
6393 }
6394 
6395 ##
6396 ## Set the ZONE RATE setting.
6397 ##
6398 record(ao, "$(P):LS01:Z6:RATE_S1") {
6399  field(SCAN, "Passive")
6400  field(PREC, "1")
6401  field(SDIS, "$(P):LS01:DISABLE")
6402 }
6403 
6404 ##
6405 ## Record to write the ZONE parameters.
6406 ##
6407 record(calcout, "$(P):LS01:Z6:SET1") {
6408  field(INPA, "$(P):LS01:Z6:UB_S1")
6409  field(INPB, "$(P):LS01:Z6:P_S1")
6410  field(INPC, "$(P):LS01:Z6:I_S1")
6411  field(INPD, "$(P):LS01:Z6:D_S1")
6412  field(INPE, "$(P):LS01:Z6:MOUT_S1")
6413  field(INPF, "$(P):LS01:Z6:RANGE_S1")
6414  field(INPG, "$(P):LS01:Z6:INPUT_S1")
6415  field(INPH, "$(P):LS01:Z6:RATE_S1")
6416  field(CALC, "0")
6417  field(DTYP, "stream")
6418  field(OUT, "@ls336.proto setZONE(1,6) L0 0")
6419  field(SDIS, "$(P):LS01:DISABLE")
6420  field(FLNK, "$(P):LS01:Z6:ALL1.PROC")
6421 }
6422 
6423 
6424 
6425 
6426 
6427 
6428 
6429 
6430 
6431 
6432 #######################################
6433 #
6434 # Template to support reading and setting
6435 # controller ZONE parameters. It reads the ZONE
6436 # parameters into an array, then uses subArrays to
6437 # extract each parameter.
6438 #
6439 # This template is used by the output template
6440 # and it needs the following macros:
6441 #
6442 # ZONE: zone number
6443 # OUT: output number
6444 #
6445 #######################################
6446 
6447 ##
6448 ## Read the ZONE setting into an array (8 values)
6449 ##
6450 record(waveform, "$(P):LS01:Z7:ALL1") {
6451  field(DTYP, "stream")
6452  field(SDIS, "$(P):LS01:DISABLE_POLL")
6453  field(INP, "@ls336.proto getZONE(1,7) L0 0")
6454  field(SCAN, "Passive")
6455  field(NELM, "8")
6456  field(FTVL, "DOUBLE")
6457  field(PREC, "1")
6458  field(FLNK, "$(P):LS01:Z7:UB1:ARRAY.PROC")
6459 }
6460 
6461 ##
6462 ## Read the ZONE upper boundary setting.
6463 ##
6464 record(subArray, "$(P):LS01:Z7:UB1:ARRAY") {
6465  field(SCAN, "Passive")
6466  field(FTVL, "DOUBLE")
6467  field(INP, "$(P):LS01:Z7:ALL1.VAL MS")
6468  field(MALM, "8")
6469  field(NELM, "1")
6470  field(INDX, "0")
6471  field(PREC, "1")
6472  field(FLNK, "$(P):LS01:Z7:UB1.PROC")
6473 }
6474 record(ai, "$(P):LS01:Z7:UB1") {
6475  field(SCAN, "Passive")
6476  field(INP, "$(P):LS01:Z7:UB1:ARRAY.VAL MS")
6477  field(PREC, "1")
6478  field(FLNK, "$(P):LS01:Z7:P1:ARRAY.PROC")
6479 }
6480 
6481 ##
6482 ## Read the ZONE P setting.
6483 ##
6484 record(subArray, "$(P):LS01:Z7:P1:ARRAY") {
6485  field(SCAN, "Passive")
6486  field(FTVL, "DOUBLE")
6487  field(INP, "$(P):LS01:Z7:ALL1.VAL MS")
6488  field(MALM, "8")
6489  field(NELM, "1")
6490  field(INDX, "1")
6491  field(PREC, "1")
6492  field(FLNK, "$(P):LS01:Z7:P1.PROC")
6493 }
6494 record(ai, "$(P):LS01:Z7:P1") {
6495  field(SCAN, "Passive")
6496  field(INP, "$(P):LS01:Z7:P1:ARRAY.VAL MS")
6497  field(PREC, "1")
6498  field(FLNK, "$(P):LS01:Z7:I1:ARRAY.PROC")
6499 }
6500 
6501 ##
6502 ## Read the ZONE I setting.
6503 ##
6504 record(subArray, "$(P):LS01:Z7:I1:ARRAY") {
6505  field(SCAN, "Passive")
6506  field(FTVL, "DOUBLE")
6507  field(INP, "$(P):LS01:Z7:ALL1.VAL MS")
6508  field(MALM, "8")
6509  field(NELM, "1")
6510  field(INDX, "2")
6511  field(PREC, "1")
6512  field(FLNK, "$(P):LS01:Z7:I1.PROC")
6513 }
6514 record(ai, "$(P):LS01:Z7:I1") {
6515  field(SCAN, "Passive")
6516  field(INP, "$(P):LS01:Z7:I1:ARRAY.VAL MS")
6517  field(PREC, "1")
6518  field(FLNK, "$(P):LS01:Z7:D1:ARRAY.PROC")
6519 }
6520 
6521 ##
6522 ## Read the ZONE D setting.
6523 ##
6524 record(subArray, "$(P):LS01:Z7:D1:ARRAY") {
6525  field(SCAN, "Passive")
6526  field(FTVL, "DOUBLE")
6527  field(INP, "$(P):LS01:Z7:ALL1.VAL MS")
6528  field(MALM, "8")
6529  field(NELM, "1")
6530  field(INDX, "3")
6531  field(PREC, "1")
6532  field(FLNK, "$(P):LS01:Z7:D1.PROC")
6533 }
6534 record(ai, "$(P):LS01:Z7:D1") {
6535  field(SCAN, "Passive")
6536  field(INP, "$(P):LS01:Z7:D1:ARRAY.VAL MS")
6537  field(PREC, "1")
6538  field(FLNK, "$(P):LS01:Z7:MOUT1:ARRAY.PROC")
6539 }
6540 
6541 ##
6542 ## Read the ZONE MOUT setting.
6543 ##
6544 record(subArray, "$(P):LS01:Z7:MOUT1:ARRAY") {
6545  field(SCAN, "Passive")
6546  field(FTVL, "DOUBLE")
6547  field(INP, "$(P):LS01:Z7:ALL1.VAL MS")
6548  field(MALM, "8")
6549  field(NELM, "1")
6550  field(INDX, "4")
6551  field(PREC, "1")
6552  field(FLNK, "$(P):LS01:Z7:MOUT1.PROC")
6553 }
6554 record(ai, "$(P):LS01:Z7:MOUT1") {
6555  field(SCAN, "Passive")
6556  field(INP, "$(P):LS01:Z7:MOUT1:ARRAY.VAL MS")
6557  field(PREC, "1")
6558  field(FLNK, "$(P):LS01:Z7:RANGE1:ARRAY.PROC")
6559 }
6560 
6561 ##
6562 ## Read the ZONE RANGE setting.
6563 ##
6564 record(subArray, "$(P):LS01:Z7:RANGE1:ARRAY") {
6565  field(SCAN, "Passive")
6566  field(FTVL, "DOUBLE")
6567  field(INP, "$(P):LS01:Z7:ALL1.VAL MS")
6568  field(MALM, "8")
6569  field(NELM, "1")
6570  field(INDX, "5")
6571  field(PREC, "1")
6572  field(FLNK, "$(P):LS01:Z7:RANGE1.PROC")
6573 }
6574 record(mbbi, "$(P):LS01:Z7:RANGE1") {
6575  field(INP, "$(P):LS01:Z7:RANGE1:ARRAY.VAL")
6576  field(SCAN, "Passive")
6577  field(ZRST, "Off")
6578  field(ZRVL, "0")
6579  field(ONST, "Range1/Low")
6580  field(ONVL, "1")
6581  field(TWST, "Range2/Medium")
6582  field(TWVL, "2")
6583  field(THST, "Range3/High")
6584  field(THVL, "3")
6585  field(FRST, "Range4")
6586  field(FRVL, "4")
6587  field(FVST, "Range5")
6588  field(FVVL, "5")
6589  field(FLNK, "$(P):LS01:Z7:INPUT1:ARRAY.PROC")
6590 }
6591 
6592 ##
6593 ## Read the ZONE INPUT setting.
6594 ##
6595 record(subArray, "$(P):LS01:Z7:INPUT1:ARRAY") {
6596  field(SCAN, "Passive")
6597  field(FTVL, "DOUBLE")
6598  field(INP, "$(P):LS01:Z7:ALL1.VAL MS")
6599  field(MALM, "8")
6600  field(NELM, "1")
6601  field(INDX, "6")
6602  field(PREC, "1")
6603  field(FLNK, "$(P):LS01:Z7:INPUT1.PROC")
6604 }
6605 record(mbbi, "$(P):LS01:Z7:INPUT1") {
6606  field(INP, "$(P):LS01:Z7:INPUT1:ARRAY.VAL")
6607  field(SCAN, "Passive")
6608  field(ZRST, "None")
6609  field(ZRVL, "0")
6610  field(ONST, "Input A")
6611  field(ONVL, "1")
6612  field(TWST, "Input B")
6613  field(TWVL, "2")
6614  field(THST, "Input C")
6615  field(THVL, "3")
6616  field(FRST, "Input D")
6617  field(FRVL, "4")
6618  field(FVST, "Input D2")
6619  field(FVVL, "5")
6620  field(SXST, "Input D3")
6621  field(SXVL, "6")
6622  field(SVST, "Input D4")
6623  field(SVVL, "7")
6624  field(EIST, "Input D5")
6625  field(EIVL, "8")
6626  field(FLNK, "$(P):LS01:Z7:RATE1:ARRAY.PROC")
6627 }
6628 
6629 ##
6630 ## Read the ZONE RATE setting.
6631 ##
6632 record(subArray, "$(P):LS01:Z7:RATE1:ARRAY") {
6633  field(SCAN, "Passive")
6634  field(FTVL, "DOUBLE")
6635  field(INP, "$(P):LS01:Z7:ALL1.VAL MS")
6636  field(MALM, "8")
6637  field(NELM, "1")
6638  field(INDX, "7")
6639  field(PREC, "1")
6640  field(FLNK, "$(P):LS01:Z7:RATE1.PROC")
6641 }
6642 record(ai, "$(P):LS01:Z7:RATE1") {
6643  field(SCAN, "Passive")
6644  field(INP, "$(P):LS01:Z7:RATE1:ARRAY.VAL MS")
6645  field(PREC, "1")
6646  field(FLNK, "$(P):LS01:Z7:INITCALC1.PROC")
6647 }
6648 
6649 ##############################################################
6650 ##
6651 ## Populate the write records below with the current values.
6652 ## Only do this once at startup.
6653 ##
6654 ###############################################################
6655 
6656 record(calcout, "$(P):LS01:Z7:INITCALC1") {
6657  field(INPA, "0")
6658  field(CALC, "A")
6659  field(VAL, "0")
6660  field(DOPT, "Use OCAL")
6661  field(OOPT, "When Zero")
6662  field(OCAL, "1")
6663  field(OUT, "$(P):LS01:Z7:INITUB1.PROC")
6664 }
6665 
6666 record(dfanout, "$(P):LS01:Z7:INITUB1") {
6667  field(OMSL, "closed_loop")
6668  field(DOL, "$(P):LS01:Z7:UB1.VAL")
6669  field(OUTA, "$(P):LS01:Z7:UB_S1.VAL PP")
6670  field(FLNK, "$(P):LS01:Z7:INITP1.PROC")
6671 }
6672 record(dfanout, "$(P):LS01:Z7:INITP1") {
6673  field(OMSL, "closed_loop")
6674  field(DOL, "$(P):LS01:Z7:P1.VAL")
6675  field(OUTA, "$(P):LS01:Z7:P_S1.VAL PP")
6676  field(FLNK, "$(P):LS01:Z7:INITI1.PROC")
6677 }
6678 record(dfanout, "$(P):LS01:Z7:INITI1") {
6679  field(OMSL, "closed_loop")
6680  field(DOL, "$(P):LS01:Z7:I1.VAL")
6681  field(OUTA, "$(P):LS01:Z7:I_S1.VAL PP")
6682  field(FLNK, "$(P):LS01:Z7:INITD1.PROC")
6683 }
6684 record(dfanout, "$(P):LS01:Z7:INITD1") {
6685  field(OMSL, "closed_loop")
6686  field(DOL, "$(P):LS01:Z7:D1.VAL")
6687  field(OUTA, "$(P):LS01:Z7:D_S1.VAL PP")
6688  field(FLNK, "$(P):LS01:Z7:INITMOUT1.PROC")
6689 }
6690 record(dfanout, "$(P):LS01:Z7:INITMOUT1") {
6691  field(OMSL, "closed_loop")
6692  field(DOL, "$(P):LS01:Z7:MOUT1.VAL")
6693  field(OUTA, "$(P):LS01:Z7:MOUT_S1.VAL PP")
6694  field(FLNK, "$(P):LS01:Z7:INITRANGE1.PROC")
6695 }
6696 record(dfanout, "$(P):LS01:Z7:INITRANGE1") {
6697  field(OMSL, "closed_loop")
6698  field(DOL, "$(P):LS01:Z7:RANGE1.VAL")
6699  field(OUTA, "$(P):LS01:Z7:RANGE_S1.VAL PP")
6700  field(FLNK, "$(P):LS01:Z7:INITINPUT1.PROC")
6701 }
6702 record(dfanout, "$(P):LS01:Z7:INITINPUT1") {
6703  field(OMSL, "closed_loop")
6704  field(DOL, "$(P):LS01:Z7:INPUT1.VAL")
6705  field(OUTA, "$(P):LS01:Z7:INPUT_S1.VAL PP")
6706  field(FLNK, "$(P):LS01:Z7:INITRATE1.PROC")
6707 }
6708 record(dfanout, "$(P):LS01:Z7:INITRATE1") {
6709  field(OMSL, "closed_loop")
6710  field(DOL, "$(P):LS01:Z7:RATE1.VAL")
6711  field(OUTA, "$(P):LS01:Z7:RATE_S1.VAL PP")
6712  field(FLNK, "$(P):LS01:Z7:INITCOUNT1.PROC")
6713 }
6714 
6715 record(dfanout, "$(P):LS01:Z7:INITCOUNT1") {
6716  field(DOL, "1")
6717  field(OUTA, "$(P):LS01:Z7:INITCALC1.A")
6718 }
6719 
6720 
6721 
6722 #############################################
6723 # Write records. There is a calcout record to
6724 # do the actual write.
6725 #############################################
6726 
6727 ##
6728 ## Set the ZONE upper boundary setting.
6729 ##
6730 record(ao, "$(P):LS01:Z7:UB_S1") {
6731  field(SCAN, "Passive")
6732  field(PREC, "1")
6733  field(SDIS, "$(P):LS01:DISABLE")
6734 }
6735 
6736 ##
6737 ## Set the ZONE P setting.
6738 ##
6739 record(ao, "$(P):LS01:Z7:P_S1") {
6740  field(SCAN, "Passive")
6741  field(PREC, "1")
6742  field(SDIS, "$(P):LS01:DISABLE")
6743 }
6744 
6745 ##
6746 ## Set the ZONE I setting.
6747 ##
6748 record(ao, "$(P):LS01:Z7:I_S1") {
6749  field(SCAN, "Passive")
6750  field(PREC, "1")
6751  field(SDIS, "$(P):LS01:DISABLE")
6752 }
6753 
6754 ##
6755 ## Set the ZONE D setting.
6756 ##
6757 record(ao, "$(P):LS01:Z7:D_S1") {
6758  field(SCAN, "Passive")
6759  field(PREC, "1")
6760  field(SDIS, "$(P):LS01:DISABLE")
6761 }
6762 
6763 ##
6764 ## Set the ZONE MOUT setting.
6765 ##
6766 record(ao, "$(P):LS01:Z7:MOUT_S1") {
6767  field(SCAN, "Passive")
6768  field(PREC, "1")
6769  field(SDIS, "$(P):LS01:DISABLE")
6770 }
6771 
6772 ##
6773 ## Set the ZONE RANGE setting.
6774 ##
6775 record(mbbo, "$(P):LS01:Z7:RANGE_S1") {
6776  field(SCAN, "Passive")
6777  field(ZRST, "Off")
6778  field(ZRVL, "0")
6779  field(ONST, "Range1/Low")
6780  field(ONVL, "1")
6781  field(TWST, "Range2/Medium")
6782  field(TWVL, "2")
6783  field(THST, "Range3/High")
6784  field(THVL, "3")
6785  field(FRST, "Range4")
6786  field(FRVL, "4")
6787  field(FVST, "Range5")
6788  field(FVVL, "5")
6789  field(SDIS, "$(P):LS01:DISABLE")
6790 }
6791 
6792 ##
6793 ## Set the ZONE INPUT setting.
6794 ##
6795 record(mbbo, "$(P):LS01:Z7:INPUT_S1") {
6796  field(ZRST, "None")
6797  field(ZRVL, "0")
6798  field(ONST, "Input A")
6799  field(ONVL, "1")
6800  field(TWST, "Input B")
6801  field(TWVL, "2")
6802  field(THST, "Input C")
6803  field(THVL, "3")
6804  field(FRST, "Input D")
6805  field(FRVL, "4")
6806  field(FVST, "Input D2")
6807  field(FVVL, "5")
6808  field(SXST, "Input D3")
6809  field(SXVL, "6")
6810  field(SVST, "Input D4")
6811  field(SVVL, "7")
6812  field(EIST, "Input D5")
6813  field(EIVL, "8")
6814  field(SDIS, "$(P):LS01:DISABLE")
6815 }
6816 
6817 ##
6818 ## Set the ZONE RATE setting.
6819 ##
6820 record(ao, "$(P):LS01:Z7:RATE_S1") {
6821  field(SCAN, "Passive")
6822  field(PREC, "1")
6823  field(SDIS, "$(P):LS01:DISABLE")
6824 }
6825 
6826 ##
6827 ## Record to write the ZONE parameters.
6828 ##
6829 record(calcout, "$(P):LS01:Z7:SET1") {
6830  field(INPA, "$(P):LS01:Z7:UB_S1")
6831  field(INPB, "$(P):LS01:Z7:P_S1")
6832  field(INPC, "$(P):LS01:Z7:I_S1")
6833  field(INPD, "$(P):LS01:Z7:D_S1")
6834  field(INPE, "$(P):LS01:Z7:MOUT_S1")
6835  field(INPF, "$(P):LS01:Z7:RANGE_S1")
6836  field(INPG, "$(P):LS01:Z7:INPUT_S1")
6837  field(INPH, "$(P):LS01:Z7:RATE_S1")
6838  field(CALC, "0")
6839  field(DTYP, "stream")
6840  field(OUT, "@ls336.proto setZONE(1,7) L0 0")
6841  field(SDIS, "$(P):LS01:DISABLE")
6842  field(FLNK, "$(P):LS01:Z7:ALL1.PROC")
6843 }
6844 
6845 
6846 
6847 
6848 
6849 
6850 
6851 
6852 
6853 
6854 #######################################
6855 #
6856 # Template to support reading and setting
6857 # controller ZONE parameters. It reads the ZONE
6858 # parameters into an array, then uses subArrays to
6859 # extract each parameter.
6860 #
6861 # This template is used by the output template
6862 # and it needs the following macros:
6863 #
6864 # ZONE: zone number
6865 # OUT: output number
6866 #
6867 #######################################
6868 
6869 ##
6870 ## Read the ZONE setting into an array (8 values)
6871 ##
6872 record(waveform, "$(P):LS01:Z8:ALL1") {
6873  field(DTYP, "stream")
6874  field(SDIS, "$(P):LS01:DISABLE_POLL")
6875  field(INP, "@ls336.proto getZONE(1,8) L0 0")
6876  field(SCAN, "Passive")
6877  field(NELM, "8")
6878  field(FTVL, "DOUBLE")
6879  field(PREC, "1")
6880  field(FLNK, "$(P):LS01:Z8:UB1:ARRAY.PROC")
6881 }
6882 
6883 ##
6884 ## Read the ZONE upper boundary setting.
6885 ##
6886 record(subArray, "$(P):LS01:Z8:UB1:ARRAY") {
6887  field(SCAN, "Passive")
6888  field(FTVL, "DOUBLE")
6889  field(INP, "$(P):LS01:Z8:ALL1.VAL MS")
6890  field(MALM, "8")
6891  field(NELM, "1")
6892  field(INDX, "0")
6893  field(PREC, "1")
6894  field(FLNK, "$(P):LS01:Z8:UB1.PROC")
6895 }
6896 record(ai, "$(P):LS01:Z8:UB1") {
6897  field(SCAN, "Passive")
6898  field(INP, "$(P):LS01:Z8:UB1:ARRAY.VAL MS")
6899  field(PREC, "1")
6900  field(FLNK, "$(P):LS01:Z8:P1:ARRAY.PROC")
6901 }
6902 
6903 ##
6904 ## Read the ZONE P setting.
6905 ##
6906 record(subArray, "$(P):LS01:Z8:P1:ARRAY") {
6907  field(SCAN, "Passive")
6908  field(FTVL, "DOUBLE")
6909  field(INP, "$(P):LS01:Z8:ALL1.VAL MS")
6910  field(MALM, "8")
6911  field(NELM, "1")
6912  field(INDX, "1")
6913  field(PREC, "1")
6914  field(FLNK, "$(P):LS01:Z8:P1.PROC")
6915 }
6916 record(ai, "$(P):LS01:Z8:P1") {
6917  field(SCAN, "Passive")
6918  field(INP, "$(P):LS01:Z8:P1:ARRAY.VAL MS")
6919  field(PREC, "1")
6920  field(FLNK, "$(P):LS01:Z8:I1:ARRAY.PROC")
6921 }
6922 
6923 ##
6924 ## Read the ZONE I setting.
6925 ##
6926 record(subArray, "$(P):LS01:Z8:I1:ARRAY") {
6927  field(SCAN, "Passive")
6928  field(FTVL, "DOUBLE")
6929  field(INP, "$(P):LS01:Z8:ALL1.VAL MS")
6930  field(MALM, "8")
6931  field(NELM, "1")
6932  field(INDX, "2")
6933  field(PREC, "1")
6934  field(FLNK, "$(P):LS01:Z8:I1.PROC")
6935 }
6936 record(ai, "$(P):LS01:Z8:I1") {
6937  field(SCAN, "Passive")
6938  field(INP, "$(P):LS01:Z8:I1:ARRAY.VAL MS")
6939  field(PREC, "1")
6940  field(FLNK, "$(P):LS01:Z8:D1:ARRAY.PROC")
6941 }
6942 
6943 ##
6944 ## Read the ZONE D setting.
6945 ##
6946 record(subArray, "$(P):LS01:Z8:D1:ARRAY") {
6947  field(SCAN, "Passive")
6948  field(FTVL, "DOUBLE")
6949  field(INP, "$(P):LS01:Z8:ALL1.VAL MS")
6950  field(MALM, "8")
6951  field(NELM, "1")
6952  field(INDX, "3")
6953  field(PREC, "1")
6954  field(FLNK, "$(P):LS01:Z8:D1.PROC")
6955 }
6956 record(ai, "$(P):LS01:Z8:D1") {
6957  field(SCAN, "Passive")
6958  field(INP, "$(P):LS01:Z8:D1:ARRAY.VAL MS")
6959  field(PREC, "1")
6960  field(FLNK, "$(P):LS01:Z8:MOUT1:ARRAY.PROC")
6961 }
6962 
6963 ##
6964 ## Read the ZONE MOUT setting.
6965 ##
6966 record(subArray, "$(P):LS01:Z8:MOUT1:ARRAY") {
6967  field(SCAN, "Passive")
6968  field(FTVL, "DOUBLE")
6969  field(INP, "$(P):LS01:Z8:ALL1.VAL MS")
6970  field(MALM, "8")
6971  field(NELM, "1")
6972  field(INDX, "4")
6973  field(PREC, "1")
6974  field(FLNK, "$(P):LS01:Z8:MOUT1.PROC")
6975 }
6976 record(ai, "$(P):LS01:Z8:MOUT1") {
6977  field(SCAN, "Passive")
6978  field(INP, "$(P):LS01:Z8:MOUT1:ARRAY.VAL MS")
6979  field(PREC, "1")
6980  field(FLNK, "$(P):LS01:Z8:RANGE1:ARRAY.PROC")
6981 }
6982 
6983 ##
6984 ## Read the ZONE RANGE setting.
6985 ##
6986 record(subArray, "$(P):LS01:Z8:RANGE1:ARRAY") {
6987  field(SCAN, "Passive")
6988  field(FTVL, "DOUBLE")
6989  field(INP, "$(P):LS01:Z8:ALL1.VAL MS")
6990  field(MALM, "8")
6991  field(NELM, "1")
6992  field(INDX, "5")
6993  field(PREC, "1")
6994  field(FLNK, "$(P):LS01:Z8:RANGE1.PROC")
6995 }
6996 record(mbbi, "$(P):LS01:Z8:RANGE1") {
6997  field(INP, "$(P):LS01:Z8:RANGE1:ARRAY.VAL")
6998  field(SCAN, "Passive")
6999  field(ZRST, "Off")
7000  field(ZRVL, "0")
7001  field(ONST, "Range1/Low")
7002  field(ONVL, "1")
7003  field(TWST, "Range2/Medium")
7004  field(TWVL, "2")
7005  field(THST, "Range3/High")
7006  field(THVL, "3")
7007  field(FRST, "Range4")
7008  field(FRVL, "4")
7009  field(FVST, "Range5")
7010  field(FVVL, "5")
7011  field(FLNK, "$(P):LS01:Z8:INPUT1:ARRAY.PROC")
7012 }
7013 
7014 ##
7015 ## Read the ZONE INPUT setting.
7016 ##
7017 record(subArray, "$(P):LS01:Z8:INPUT1:ARRAY") {
7018  field(SCAN, "Passive")
7019  field(FTVL, "DOUBLE")
7020  field(INP, "$(P):LS01:Z8:ALL1.VAL MS")
7021  field(MALM, "8")
7022  field(NELM, "1")
7023  field(INDX, "6")
7024  field(PREC, "1")
7025  field(FLNK, "$(P):LS01:Z8:INPUT1.PROC")
7026 }
7027 record(mbbi, "$(P):LS01:Z8:INPUT1") {
7028  field(INP, "$(P):LS01:Z8:INPUT1:ARRAY.VAL")
7029  field(SCAN, "Passive")
7030  field(ZRST, "None")
7031  field(ZRVL, "0")
7032  field(ONST, "Input A")
7033  field(ONVL, "1")
7034  field(TWST, "Input B")
7035  field(TWVL, "2")
7036  field(THST, "Input C")
7037  field(THVL, "3")
7038  field(FRST, "Input D")
7039  field(FRVL, "4")
7040  field(FVST, "Input D2")
7041  field(FVVL, "5")
7042  field(SXST, "Input D3")
7043  field(SXVL, "6")
7044  field(SVST, "Input D4")
7045  field(SVVL, "7")
7046  field(EIST, "Input D5")
7047  field(EIVL, "8")
7048  field(FLNK, "$(P):LS01:Z8:RATE1:ARRAY.PROC")
7049 }
7050 
7051 ##
7052 ## Read the ZONE RATE setting.
7053 ##
7054 record(subArray, "$(P):LS01:Z8:RATE1:ARRAY") {
7055  field(SCAN, "Passive")
7056  field(FTVL, "DOUBLE")
7057  field(INP, "$(P):LS01:Z8:ALL1.VAL MS")
7058  field(MALM, "8")
7059  field(NELM, "1")
7060  field(INDX, "7")
7061  field(PREC, "1")
7062  field(FLNK, "$(P):LS01:Z8:RATE1.PROC")
7063 }
7064 record(ai, "$(P):LS01:Z8:RATE1") {
7065  field(SCAN, "Passive")
7066  field(INP, "$(P):LS01:Z8:RATE1:ARRAY.VAL MS")
7067  field(PREC, "1")
7068  field(FLNK, "$(P):LS01:Z8:INITCALC1.PROC")
7069 }
7070 
7071 ##############################################################
7072 ##
7073 ## Populate the write records below with the current values.
7074 ## Only do this once at startup.
7075 ##
7076 ###############################################################
7077 
7078 record(calcout, "$(P):LS01:Z8:INITCALC1") {
7079  field(INPA, "0")
7080  field(CALC, "A")
7081  field(VAL, "0")
7082  field(DOPT, "Use OCAL")
7083  field(OOPT, "When Zero")
7084  field(OCAL, "1")
7085  field(OUT, "$(P):LS01:Z8:INITUB1.PROC")
7086 }
7087 
7088 record(dfanout, "$(P):LS01:Z8:INITUB1") {
7089  field(OMSL, "closed_loop")
7090  field(DOL, "$(P):LS01:Z8:UB1.VAL")
7091  field(OUTA, "$(P):LS01:Z8:UB_S1.VAL PP")
7092  field(FLNK, "$(P):LS01:Z8:INITP1.PROC")
7093 }
7094 record(dfanout, "$(P):LS01:Z8:INITP1") {
7095  field(OMSL, "closed_loop")
7096  field(DOL, "$(P):LS01:Z8:P1.VAL")
7097  field(OUTA, "$(P):LS01:Z8:P_S1.VAL PP")
7098  field(FLNK, "$(P):LS01:Z8:INITI1.PROC")
7099 }
7100 record(dfanout, "$(P):LS01:Z8:INITI1") {
7101  field(OMSL, "closed_loop")
7102  field(DOL, "$(P):LS01:Z8:I1.VAL")
7103  field(OUTA, "$(P):LS01:Z8:I_S1.VAL PP")
7104  field(FLNK, "$(P):LS01:Z8:INITD1.PROC")
7105 }
7106 record(dfanout, "$(P):LS01:Z8:INITD1") {
7107  field(OMSL, "closed_loop")
7108  field(DOL, "$(P):LS01:Z8:D1.VAL")
7109  field(OUTA, "$(P):LS01:Z8:D_S1.VAL PP")
7110  field(FLNK, "$(P):LS01:Z8:INITMOUT1.PROC")
7111 }
7112 record(dfanout, "$(P):LS01:Z8:INITMOUT1") {
7113  field(OMSL, "closed_loop")
7114  field(DOL, "$(P):LS01:Z8:MOUT1.VAL")
7115  field(OUTA, "$(P):LS01:Z8:MOUT_S1.VAL PP")
7116  field(FLNK, "$(P):LS01:Z8:INITRANGE1.PROC")
7117 }
7118 record(dfanout, "$(P):LS01:Z8:INITRANGE1") {
7119  field(OMSL, "closed_loop")
7120  field(DOL, "$(P):LS01:Z8:RANGE1.VAL")
7121  field(OUTA, "$(P):LS01:Z8:RANGE_S1.VAL PP")
7122  field(FLNK, "$(P):LS01:Z8:INITINPUT1.PROC")
7123 }
7124 record(dfanout, "$(P):LS01:Z8:INITINPUT1") {
7125  field(OMSL, "closed_loop")
7126  field(DOL, "$(P):LS01:Z8:INPUT1.VAL")
7127  field(OUTA, "$(P):LS01:Z8:INPUT_S1.VAL PP")
7128  field(FLNK, "$(P):LS01:Z8:INITRATE1.PROC")
7129 }
7130 record(dfanout, "$(P):LS01:Z8:INITRATE1") {
7131  field(OMSL, "closed_loop")
7132  field(DOL, "$(P):LS01:Z8:RATE1.VAL")
7133  field(OUTA, "$(P):LS01:Z8:RATE_S1.VAL PP")
7134  field(FLNK, "$(P):LS01:Z8:INITCOUNT1.PROC")
7135 }
7136 
7137 record(dfanout, "$(P):LS01:Z8:INITCOUNT1") {
7138  field(DOL, "1")
7139  field(OUTA, "$(P):LS01:Z8:INITCALC1.A")
7140 }
7141 
7142 
7143 
7144 #############################################
7145 # Write records. There is a calcout record to
7146 # do the actual write.
7147 #############################################
7148 
7149 ##
7150 ## Set the ZONE upper boundary setting.
7151 ##
7152 record(ao, "$(P):LS01:Z8:UB_S1") {
7153  field(SCAN, "Passive")
7154  field(PREC, "1")
7155  field(SDIS, "$(P):LS01:DISABLE")
7156 }
7157 
7158 ##
7159 ## Set the ZONE P setting.
7160 ##
7161 record(ao, "$(P):LS01:Z8:P_S1") {
7162  field(SCAN, "Passive")
7163  field(PREC, "1")
7164  field(SDIS, "$(P):LS01:DISABLE")
7165 }
7166 
7167 ##
7168 ## Set the ZONE I setting.
7169 ##
7170 record(ao, "$(P):LS01:Z8:I_S1") {
7171  field(SCAN, "Passive")
7172  field(PREC, "1")
7173  field(SDIS, "$(P):LS01:DISABLE")
7174 }
7175 
7176 ##
7177 ## Set the ZONE D setting.
7178 ##
7179 record(ao, "$(P):LS01:Z8:D_S1") {
7180  field(SCAN, "Passive")
7181  field(PREC, "1")
7182  field(SDIS, "$(P):LS01:DISABLE")
7183 }
7184 
7185 ##
7186 ## Set the ZONE MOUT setting.
7187 ##
7188 record(ao, "$(P):LS01:Z8:MOUT_S1") {
7189  field(SCAN, "Passive")
7190  field(PREC, "1")
7191  field(SDIS, "$(P):LS01:DISABLE")
7192 }
7193 
7194 ##
7195 ## Set the ZONE RANGE setting.
7196 ##
7197 record(mbbo, "$(P):LS01:Z8:RANGE_S1") {
7198  field(SCAN, "Passive")
7199  field(ZRST, "Off")
7200  field(ZRVL, "0")
7201  field(ONST, "Range1/Low")
7202  field(ONVL, "1")
7203  field(TWST, "Range2/Medium")
7204  field(TWVL, "2")
7205  field(THST, "Range3/High")
7206  field(THVL, "3")
7207  field(FRST, "Range4")
7208  field(FRVL, "4")
7209  field(FVST, "Range5")
7210  field(FVVL, "5")
7211  field(SDIS, "$(P):LS01:DISABLE")
7212 }
7213 
7214 ##
7215 ## Set the ZONE INPUT setting.
7216 ##
7217 record(mbbo, "$(P):LS01:Z8:INPUT_S1") {
7218  field(ZRST, "None")
7219  field(ZRVL, "0")
7220  field(ONST, "Input A")
7221  field(ONVL, "1")
7222  field(TWST, "Input B")
7223  field(TWVL, "2")
7224  field(THST, "Input C")
7225  field(THVL, "3")
7226  field(FRST, "Input D")
7227  field(FRVL, "4")
7228  field(FVST, "Input D2")
7229  field(FVVL, "5")
7230  field(SXST, "Input D3")
7231  field(SXVL, "6")
7232  field(SVST, "Input D4")
7233  field(SVVL, "7")
7234  field(EIST, "Input D5")
7235  field(EIVL, "8")
7236  field(SDIS, "$(P):LS01:DISABLE")
7237 }
7238 
7239 ##
7240 ## Set the ZONE RATE setting.
7241 ##
7242 record(ao, "$(P):LS01:Z8:RATE_S1") {
7243  field(SCAN, "Passive")
7244  field(PREC, "1")
7245  field(SDIS, "$(P):LS01:DISABLE")
7246 }
7247 
7248 ##
7249 ## Record to write the ZONE parameters.
7250 ##
7251 record(calcout, "$(P):LS01:Z8:SET1") {
7252  field(INPA, "$(P):LS01:Z8:UB_S1")
7253  field(INPB, "$(P):LS01:Z8:P_S1")
7254  field(INPC, "$(P):LS01:Z8:I_S1")
7255  field(INPD, "$(P):LS01:Z8:D_S1")
7256  field(INPE, "$(P):LS01:Z8:MOUT_S1")
7257  field(INPF, "$(P):LS01:Z8:RANGE_S1")
7258  field(INPG, "$(P):LS01:Z8:INPUT_S1")
7259  field(INPH, "$(P):LS01:Z8:RATE_S1")
7260  field(CALC, "0")
7261  field(DTYP, "stream")
7262  field(OUT, "@ls336.proto setZONE(1,8) L0 0")
7263  field(SDIS, "$(P):LS01:DISABLE")
7264  field(FLNK, "$(P):LS01:Z8:ALL1.PROC")
7265 }
7266 
7267 
7268 
7269 
7270 
7271 
7272 
7273 
7274 
7275 
7276 #######################################
7277 #
7278 # Template to support reading and setting
7279 # controller ZONE parameters. It reads the ZONE
7280 # parameters into an array, then uses subArrays to
7281 # extract each parameter.
7282 #
7283 # This template is used by the output template
7284 # and it needs the following macros:
7285 #
7286 # ZONE: zone number
7287 # OUT: output number
7288 #
7289 #######################################
7290 
7291 ##
7292 ## Read the ZONE setting into an array (8 values)
7293 ##
7294 record(waveform, "$(P):LS01:Z9:ALL1") {
7295  field(DTYP, "stream")
7296  field(SDIS, "$(P):LS01:DISABLE_POLL")
7297  field(INP, "@ls336.proto getZONE(1,9) L0 0")
7298  field(SCAN, "Passive")
7299  field(NELM, "8")
7300  field(FTVL, "DOUBLE")
7301  field(PREC, "1")
7302  field(FLNK, "$(P):LS01:Z9:UB1:ARRAY.PROC")
7303 }
7304 
7305 ##
7306 ## Read the ZONE upper boundary setting.
7307 ##
7308 record(subArray, "$(P):LS01:Z9:UB1:ARRAY") {
7309  field(SCAN, "Passive")
7310  field(FTVL, "DOUBLE")
7311  field(INP, "$(P):LS01:Z9:ALL1.VAL MS")
7312  field(MALM, "8")
7313  field(NELM, "1")
7314  field(INDX, "0")
7315  field(PREC, "1")
7316  field(FLNK, "$(P):LS01:Z9:UB1.PROC")
7317 }
7318 record(ai, "$(P):LS01:Z9:UB1") {
7319  field(SCAN, "Passive")
7320  field(INP, "$(P):LS01:Z9:UB1:ARRAY.VAL MS")
7321  field(PREC, "1")
7322  field(FLNK, "$(P):LS01:Z9:P1:ARRAY.PROC")
7323 }
7324 
7325 ##
7326 ## Read the ZONE P setting.
7327 ##
7328 record(subArray, "$(P):LS01:Z9:P1:ARRAY") {
7329  field(SCAN, "Passive")
7330  field(FTVL, "DOUBLE")
7331  field(INP, "$(P):LS01:Z9:ALL1.VAL MS")
7332  field(MALM, "8")
7333  field(NELM, "1")
7334  field(INDX, "1")
7335  field(PREC, "1")
7336  field(FLNK, "$(P):LS01:Z9:P1.PROC")
7337 }
7338 record(ai, "$(P):LS01:Z9:P1") {
7339  field(SCAN, "Passive")
7340  field(INP, "$(P):LS01:Z9:P1:ARRAY.VAL MS")
7341  field(PREC, "1")
7342  field(FLNK, "$(P):LS01:Z9:I1:ARRAY.PROC")
7343 }
7344 
7345 ##
7346 ## Read the ZONE I setting.
7347 ##
7348 record(subArray, "$(P):LS01:Z9:I1:ARRAY") {
7349  field(SCAN, "Passive")
7350  field(FTVL, "DOUBLE")
7351  field(INP, "$(P):LS01:Z9:ALL1.VAL MS")
7352  field(MALM, "8")
7353  field(NELM, "1")
7354  field(INDX, "2")
7355  field(PREC, "1")
7356  field(FLNK, "$(P):LS01:Z9:I1.PROC")
7357 }
7358 record(ai, "$(P):LS01:Z9:I1") {
7359  field(SCAN, "Passive")
7360  field(INP, "$(P):LS01:Z9:I1:ARRAY.VAL MS")
7361  field(PREC, "1")
7362  field(FLNK, "$(P):LS01:Z9:D1:ARRAY.PROC")
7363 }
7364 
7365 ##
7366 ## Read the ZONE D setting.
7367 ##
7368 record(subArray, "$(P):LS01:Z9:D1:ARRAY") {
7369  field(SCAN, "Passive")
7370  field(FTVL, "DOUBLE")
7371  field(INP, "$(P):LS01:Z9:ALL1.VAL MS")
7372  field(MALM, "8")
7373  field(NELM, "1")
7374  field(INDX, "3")
7375  field(PREC, "1")
7376  field(FLNK, "$(P):LS01:Z9:D1.PROC")
7377 }
7378 record(ai, "$(P):LS01:Z9:D1") {
7379  field(SCAN, "Passive")
7380  field(INP, "$(P):LS01:Z9:D1:ARRAY.VAL MS")
7381  field(PREC, "1")
7382  field(FLNK, "$(P):LS01:Z9:MOUT1:ARRAY.PROC")
7383 }
7384 
7385 ##
7386 ## Read the ZONE MOUT setting.
7387 ##
7388 record(subArray, "$(P):LS01:Z9:MOUT1:ARRAY") {
7389  field(SCAN, "Passive")
7390  field(FTVL, "DOUBLE")
7391  field(INP, "$(P):LS01:Z9:ALL1.VAL MS")
7392  field(MALM, "8")
7393  field(NELM, "1")
7394  field(INDX, "4")
7395  field(PREC, "1")
7396  field(FLNK, "$(P):LS01:Z9:MOUT1.PROC")
7397 }
7398 record(ai, "$(P):LS01:Z9:MOUT1") {
7399  field(SCAN, "Passive")
7400  field(INP, "$(P):LS01:Z9:MOUT1:ARRAY.VAL MS")
7401  field(PREC, "1")
7402  field(FLNK, "$(P):LS01:Z9:RANGE1:ARRAY.PROC")
7403 }
7404 
7405 ##
7406 ## Read the ZONE RANGE setting.
7407 ##
7408 record(subArray, "$(P):LS01:Z9:RANGE1:ARRAY") {
7409  field(SCAN, "Passive")
7410  field(FTVL, "DOUBLE")
7411  field(INP, "$(P):LS01:Z9:ALL1.VAL MS")
7412  field(MALM, "8")
7413  field(NELM, "1")
7414  field(INDX, "5")
7415  field(PREC, "1")
7416  field(FLNK, "$(P):LS01:Z9:RANGE1.PROC")
7417 }
7418 record(mbbi, "$(P):LS01:Z9:RANGE1") {
7419  field(INP, "$(P):LS01:Z9:RANGE1:ARRAY.VAL")
7420  field(SCAN, "Passive")
7421  field(ZRST, "Off")
7422  field(ZRVL, "0")
7423  field(ONST, "Range1/Low")
7424  field(ONVL, "1")
7425  field(TWST, "Range2/Medium")
7426  field(TWVL, "2")
7427  field(THST, "Range3/High")
7428  field(THVL, "3")
7429  field(FRST, "Range4")
7430  field(FRVL, "4")
7431  field(FVST, "Range5")
7432  field(FVVL, "5")
7433  field(FLNK, "$(P):LS01:Z9:INPUT1:ARRAY.PROC")
7434 }
7435 
7436 ##
7437 ## Read the ZONE INPUT setting.
7438 ##
7439 record(subArray, "$(P):LS01:Z9:INPUT1:ARRAY") {
7440  field(SCAN, "Passive")
7441  field(FTVL, "DOUBLE")
7442  field(INP, "$(P):LS01:Z9:ALL1.VAL MS")
7443  field(MALM, "8")
7444  field(NELM, "1")
7445  field(INDX, "6")
7446  field(PREC, "1")
7447  field(FLNK, "$(P):LS01:Z9:INPUT1.PROC")
7448 }
7449 record(mbbi, "$(P):LS01:Z9:INPUT1") {
7450  field(INP, "$(P):LS01:Z9:INPUT1:ARRAY.VAL")
7451  field(SCAN, "Passive")
7452  field(ZRST, "None")
7453  field(ZRVL, "0")
7454  field(ONST, "Input A")
7455  field(ONVL, "1")
7456  field(TWST, "Input B")
7457  field(TWVL, "2")
7458  field(THST, "Input C")
7459  field(THVL, "3")
7460  field(FRST, "Input D")
7461  field(FRVL, "4")
7462  field(FVST, "Input D2")
7463  field(FVVL, "5")
7464  field(SXST, "Input D3")
7465  field(SXVL, "6")
7466  field(SVST, "Input D4")
7467  field(SVVL, "7")
7468  field(EIST, "Input D5")
7469  field(EIVL, "8")
7470  field(FLNK, "$(P):LS01:Z9:RATE1:ARRAY.PROC")
7471 }
7472 
7473 ##
7474 ## Read the ZONE RATE setting.
7475 ##
7476 record(subArray, "$(P):LS01:Z9:RATE1:ARRAY") {
7477  field(SCAN, "Passive")
7478  field(FTVL, "DOUBLE")
7479  field(INP, "$(P):LS01:Z9:ALL1.VAL MS")
7480  field(MALM, "8")
7481  field(NELM, "1")
7482  field(INDX, "7")
7483  field(PREC, "1")
7484  field(FLNK, "$(P):LS01:Z9:RATE1.PROC")
7485 }
7486 record(ai, "$(P):LS01:Z9:RATE1") {
7487  field(SCAN, "Passive")
7488  field(INP, "$(P):LS01:Z9:RATE1:ARRAY.VAL MS")
7489  field(PREC, "1")
7490  field(FLNK, "$(P):LS01:Z9:INITCALC1.PROC")
7491 }
7492 
7493 ##############################################################
7494 ##
7495 ## Populate the write records below with the current values.
7496 ## Only do this once at startup.
7497 ##
7498 ###############################################################
7499 
7500 record(calcout, "$(P):LS01:Z9:INITCALC1") {
7501  field(INPA, "0")
7502  field(CALC, "A")
7503  field(VAL, "0")
7504  field(DOPT, "Use OCAL")
7505  field(OOPT, "When Zero")
7506  field(OCAL, "1")
7507  field(OUT, "$(P):LS01:Z9:INITUB1.PROC")
7508 }
7509 
7510 record(dfanout, "$(P):LS01:Z9:INITUB1") {
7511  field(OMSL, "closed_loop")
7512  field(DOL, "$(P):LS01:Z9:UB1.VAL")
7513  field(OUTA, "$(P):LS01:Z9:UB_S1.VAL PP")
7514  field(FLNK, "$(P):LS01:Z9:INITP1.PROC")
7515 }
7516 record(dfanout, "$(P):LS01:Z9:INITP1") {
7517  field(OMSL, "closed_loop")
7518  field(DOL, "$(P):LS01:Z9:P1.VAL")
7519  field(OUTA, "$(P):LS01:Z9:P_S1.VAL PP")
7520  field(FLNK, "$(P):LS01:Z9:INITI1.PROC")
7521 }
7522 record(dfanout, "$(P):LS01:Z9:INITI1") {
7523  field(OMSL, "closed_loop")
7524  field(DOL, "$(P):LS01:Z9:I1.VAL")
7525  field(OUTA, "$(P):LS01:Z9:I_S1.VAL PP")
7526  field(FLNK, "$(P):LS01:Z9:INITD1.PROC")
7527 }
7528 record(dfanout, "$(P):LS01:Z9:INITD1") {
7529  field(OMSL, "closed_loop")
7530  field(DOL, "$(P):LS01:Z9:D1.VAL")
7531  field(OUTA, "$(P):LS01:Z9:D_S1.VAL PP")
7532  field(FLNK, "$(P):LS01:Z9:INITMOUT1.PROC")
7533 }
7534 record(dfanout, "$(P):LS01:Z9:INITMOUT1") {
7535  field(OMSL, "closed_loop")
7536  field(DOL, "$(P):LS01:Z9:MOUT1.VAL")
7537  field(OUTA, "$(P):LS01:Z9:MOUT_S1.VAL PP")
7538  field(FLNK, "$(P):LS01:Z9:INITRANGE1.PROC")
7539 }
7540 record(dfanout, "$(P):LS01:Z9:INITRANGE1") {
7541  field(OMSL, "closed_loop")
7542  field(DOL, "$(P):LS01:Z9:RANGE1.VAL")
7543  field(OUTA, "$(P):LS01:Z9:RANGE_S1.VAL PP")
7544  field(FLNK, "$(P):LS01:Z9:INITINPUT1.PROC")
7545 }
7546 record(dfanout, "$(P):LS01:Z9:INITINPUT1") {
7547  field(OMSL, "closed_loop")
7548  field(DOL, "$(P):LS01:Z9:INPUT1.VAL")
7549  field(OUTA, "$(P):LS01:Z9:INPUT_S1.VAL PP")
7550  field(FLNK, "$(P):LS01:Z9:INITRATE1.PROC")
7551 }
7552 record(dfanout, "$(P):LS01:Z9:INITRATE1") {
7553  field(OMSL, "closed_loop")
7554  field(DOL, "$(P):LS01:Z9:RATE1.VAL")
7555  field(OUTA, "$(P):LS01:Z9:RATE_S1.VAL PP")
7556  field(FLNK, "$(P):LS01:Z9:INITCOUNT1.PROC")
7557 }
7558 
7559 record(dfanout, "$(P):LS01:Z9:INITCOUNT1") {
7560  field(DOL, "1")
7561  field(OUTA, "$(P):LS01:Z9:INITCALC1.A")
7562 }
7563 
7564 
7565 
7566 #############################################
7567 # Write records. There is a calcout record to
7568 # do the actual write.
7569 #############################################
7570 
7571 ##
7572 ## Set the ZONE upper boundary setting.
7573 ##
7574 record(ao, "$(P):LS01:Z9:UB_S1") {
7575  field(SCAN, "Passive")
7576  field(PREC, "1")
7577  field(SDIS, "$(P):LS01:DISABLE")
7578 }
7579 
7580 ##
7581 ## Set the ZONE P setting.
7582 ##
7583 record(ao, "$(P):LS01:Z9:P_S1") {
7584  field(SCAN, "Passive")
7585  field(PREC, "1")
7586  field(SDIS, "$(P):LS01:DISABLE")
7587 }
7588 
7589 ##
7590 ## Set the ZONE I setting.
7591 ##
7592 record(ao, "$(P):LS01:Z9:I_S1") {
7593  field(SCAN, "Passive")
7594  field(PREC, "1")
7595  field(SDIS, "$(P):LS01:DISABLE")
7596 }
7597 
7598 ##
7599 ## Set the ZONE D setting.
7600 ##
7601 record(ao, "$(P):LS01:Z9:D_S1") {
7602  field(SCAN, "Passive")
7603  field(PREC, "1")
7604  field(SDIS, "$(P):LS01:DISABLE")
7605 }
7606 
7607 ##
7608 ## Set the ZONE MOUT setting.
7609 ##
7610 record(ao, "$(P):LS01:Z9:MOUT_S1") {
7611  field(SCAN, "Passive")
7612  field(PREC, "1")
7613  field(SDIS, "$(P):LS01:DISABLE")
7614 }
7615 
7616 ##
7617 ## Set the ZONE RANGE setting.
7618 ##
7619 record(mbbo, "$(P):LS01:Z9:RANGE_S1") {
7620  field(SCAN, "Passive")
7621  field(ZRST, "Off")
7622  field(ZRVL, "0")
7623  field(ONST, "Range1/Low")
7624  field(ONVL, "1")
7625  field(TWST, "Range2/Medium")
7626  field(TWVL, "2")
7627  field(THST, "Range3/High")
7628  field(THVL, "3")
7629  field(FRST, "Range4")
7630  field(FRVL, "4")
7631  field(FVST, "Range5")
7632  field(FVVL, "5")
7633  field(SDIS, "$(P):LS01:DISABLE")
7634 }
7635 
7636 ##
7637 ## Set the ZONE INPUT setting.
7638 ##
7639 record(mbbo, "$(P):LS01:Z9:INPUT_S1") {
7640  field(ZRST, "None")
7641  field(ZRVL, "0")
7642  field(ONST, "Input A")
7643  field(ONVL, "1")
7644  field(TWST, "Input B")
7645  field(TWVL, "2")
7646  field(THST, "Input C")
7647  field(THVL, "3")
7648  field(FRST, "Input D")
7649  field(FRVL, "4")
7650  field(FVST, "Input D2")
7651  field(FVVL, "5")
7652  field(SXST, "Input D3")
7653  field(SXVL, "6")
7654  field(SVST, "Input D4")
7655  field(SVVL, "7")
7656  field(EIST, "Input D5")
7657  field(EIVL, "8")
7658  field(SDIS, "$(P):LS01:DISABLE")
7659 }
7660 
7661 ##
7662 ## Set the ZONE RATE setting.
7663 ##
7664 record(ao, "$(P):LS01:Z9:RATE_S1") {
7665  field(SCAN, "Passive")
7666  field(PREC, "1")
7667  field(SDIS, "$(P):LS01:DISABLE")
7668 }
7669 
7670 ##
7671 ## Record to write the ZONE parameters.
7672 ##
7673 record(calcout, "$(P):LS01:Z9:SET1") {
7674  field(INPA, "$(P):LS01:Z9:UB_S1")
7675  field(INPB, "$(P):LS01:Z9:P_S1")
7676  field(INPC, "$(P):LS01:Z9:I_S1")
7677  field(INPD, "$(P):LS01:Z9:D_S1")
7678  field(INPE, "$(P):LS01:Z9:MOUT_S1")
7679  field(INPF, "$(P):LS01:Z9:RANGE_S1")
7680  field(INPG, "$(P):LS01:Z9:INPUT_S1")
7681  field(INPH, "$(P):LS01:Z9:RATE_S1")
7682  field(CALC, "0")
7683  field(DTYP, "stream")
7684  field(OUT, "@ls336.proto setZONE(1,9) L0 0")
7685  field(SDIS, "$(P):LS01:DISABLE")
7686  field(FLNK, "$(P):LS01:Z9:ALL1.PROC")
7687 }
7688 
7689 
7690 
7691 
7692 
7693 
7694 
7695 
7696 
7697 
7698 #######################################
7699 #
7700 # Template to support reading and setting
7701 # controller ZONE parameters. It reads the ZONE
7702 # parameters into an array, then uses subArrays to
7703 # extract each parameter.
7704 #
7705 # This template is used by the output template
7706 # and it needs the following macros:
7707 #
7708 # ZONE: zone number
7709 # OUT: output number
7710 #
7711 #######################################
7712 
7713 ##
7714 ## Read the ZONE setting into an array (8 values)
7715 ##
7716 record(waveform, "$(P):LS01:Z10:ALL1") {
7717  field(DTYP, "stream")
7718  field(SDIS, "$(P):LS01:DISABLE_POLL")
7719  field(INP, "@ls336.proto getZONE(1,10) L0 0")
7720  field(SCAN, "Passive")
7721  field(NELM, "8")
7722  field(FTVL, "DOUBLE")
7723  field(PREC, "1")
7724  field(FLNK, "$(P):LS01:Z10:UB1:ARRAY.PROC")
7725 }
7726 
7727 ##
7728 ## Read the ZONE upper boundary setting.
7729 ##
7730 record(subArray, "$(P):LS01:Z10:UB1:ARRAY") {
7731  field(SCAN, "Passive")
7732  field(FTVL, "DOUBLE")
7733  field(INP, "$(P):LS01:Z10:ALL1.VAL MS")
7734  field(MALM, "8")
7735  field(NELM, "1")
7736  field(INDX, "0")
7737  field(PREC, "1")
7738  field(FLNK, "$(P):LS01:Z10:UB1.PROC")
7739 }
7740 record(ai, "$(P):LS01:Z10:UB1") {
7741  field(SCAN, "Passive")
7742  field(INP, "$(P):LS01:Z10:UB1:ARRAY.VAL MS")
7743  field(PREC, "1")
7744  field(FLNK, "$(P):LS01:Z10:P1:ARRAY.PROC")
7745 }
7746 
7747 ##
7748 ## Read the ZONE P setting.
7749 ##
7750 record(subArray, "$(P):LS01:Z10:P1:ARRAY") {
7751  field(SCAN, "Passive")
7752  field(FTVL, "DOUBLE")
7753  field(INP, "$(P):LS01:Z10:ALL1.VAL MS")
7754  field(MALM, "8")
7755  field(NELM, "1")
7756  field(INDX, "1")
7757  field(PREC, "1")
7758  field(FLNK, "$(P):LS01:Z10:P1.PROC")
7759 }
7760 record(ai, "$(P):LS01:Z10:P1") {
7761  field(SCAN, "Passive")
7762  field(INP, "$(P):LS01:Z10:P1:ARRAY.VAL MS")
7763  field(PREC, "1")
7764  field(FLNK, "$(P):LS01:Z10:I1:ARRAY.PROC")
7765 }
7766 
7767 ##
7768 ## Read the ZONE I setting.
7769 ##
7770 record(subArray, "$(P):LS01:Z10:I1:ARRAY") {
7771  field(SCAN, "Passive")
7772  field(FTVL, "DOUBLE")
7773  field(INP, "$(P):LS01:Z10:ALL1.VAL MS")
7774  field(MALM, "8")
7775  field(NELM, "1")
7776  field(INDX, "2")
7777  field(PREC, "1")
7778  field(FLNK, "$(P):LS01:Z10:I1.PROC")
7779 }
7780 record(ai, "$(P):LS01:Z10:I1") {
7781  field(SCAN, "Passive")
7782  field(INP, "$(P):LS01:Z10:I1:ARRAY.VAL MS")
7783  field(PREC, "1")
7784  field(FLNK, "$(P):LS01:Z10:D1:ARRAY.PROC")
7785 }
7786 
7787 ##
7788 ## Read the ZONE D setting.
7789 ##
7790 record(subArray, "$(P):LS01:Z10:D1:ARRAY") {
7791  field(SCAN, "Passive")
7792  field(FTVL, "DOUBLE")
7793  field(INP, "$(P):LS01:Z10:ALL1.VAL MS")
7794  field(MALM, "8")
7795  field(NELM, "1")
7796  field(INDX, "3")
7797  field(PREC, "1")
7798  field(FLNK, "$(P):LS01:Z10:D1.PROC")
7799 }
7800 record(ai, "$(P):LS01:Z10:D1") {
7801  field(SCAN, "Passive")
7802  field(INP, "$(P):LS01:Z10:D1:ARRAY.VAL MS")
7803  field(PREC, "1")
7804  field(FLNK, "$(P):LS01:Z10:MOUT1:ARRAY.PROC")
7805 }
7806 
7807 ##
7808 ## Read the ZONE MOUT setting.
7809 ##
7810 record(subArray, "$(P):LS01:Z10:MOUT1:ARRAY") {
7811  field(SCAN, "Passive")
7812  field(FTVL, "DOUBLE")
7813  field(INP, "$(P):LS01:Z10:ALL1.VAL MS")
7814  field(MALM, "8")
7815  field(NELM, "1")
7816  field(INDX, "4")
7817  field(PREC, "1")
7818  field(FLNK, "$(P):LS01:Z10:MOUT1.PROC")
7819 }
7820 record(ai, "$(P):LS01:Z10:MOUT1") {
7821  field(SCAN, "Passive")
7822  field(INP, "$(P):LS01:Z10:MOUT1:ARRAY.VAL MS")
7823  field(PREC, "1")
7824  field(FLNK, "$(P):LS01:Z10:RANGE1:ARRAY.PROC")
7825 }
7826 
7827 ##
7828 ## Read the ZONE RANGE setting.
7829 ##
7830 record(subArray, "$(P):LS01:Z10:RANGE1:ARRAY") {
7831  field(SCAN, "Passive")
7832  field(FTVL, "DOUBLE")
7833  field(INP, "$(P):LS01:Z10:ALL1.VAL MS")
7834  field(MALM, "8")
7835  field(NELM, "1")
7836  field(INDX, "5")
7837  field(PREC, "1")
7838  field(FLNK, "$(P):LS01:Z10:RANGE1.PROC")
7839 }
7840 record(mbbi, "$(P):LS01:Z10:RANGE1") {
7841  field(INP, "$(P):LS01:Z10:RANGE1:ARRAY.VAL")
7842  field(SCAN, "Passive")
7843  field(ZRST, "Off")
7844  field(ZRVL, "0")
7845  field(ONST, "Range1/Low")
7846  field(ONVL, "1")
7847  field(TWST, "Range2/Medium")
7848  field(TWVL, "2")
7849  field(THST, "Range3/High")
7850  field(THVL, "3")
7851  field(FRST, "Range4")
7852  field(FRVL, "4")
7853  field(FVST, "Range5")
7854  field(FVVL, "5")
7855  field(FLNK, "$(P):LS01:Z10:INPUT1:ARRAY.PROC")
7856 }
7857 
7858 ##
7859 ## Read the ZONE INPUT setting.
7860 ##
7861 record(subArray, "$(P):LS01:Z10:INPUT1:ARRAY") {
7862  field(SCAN, "Passive")
7863  field(FTVL, "DOUBLE")
7864  field(INP, "$(P):LS01:Z10:ALL1.VAL MS")
7865  field(MALM, "8")
7866  field(NELM, "1")
7867  field(INDX, "6")
7868  field(PREC, "1")
7869  field(FLNK, "$(P):LS01:Z10:INPUT1.PROC")
7870 }
7871 record(mbbi, "$(P):LS01:Z10:INPUT1") {
7872  field(INP, "$(P):LS01:Z10:INPUT1:ARRAY.VAL")
7873  field(SCAN, "Passive")
7874  field(ZRST, "None")
7875  field(ZRVL, "0")
7876  field(ONST, "Input A")
7877  field(ONVL, "1")
7878  field(TWST, "Input B")
7879  field(TWVL, "2")
7880  field(THST, "Input C")
7881  field(THVL, "3")
7882  field(FRST, "Input D")
7883  field(FRVL, "4")
7884  field(FVST, "Input D2")
7885  field(FVVL, "5")
7886  field(SXST, "Input D3")
7887  field(SXVL, "6")
7888  field(SVST, "Input D4")
7889  field(SVVL, "7")
7890  field(EIST, "Input D5")
7891  field(EIVL, "8")
7892  field(FLNK, "$(P):LS01:Z10:RATE1:ARRAY.PROC")
7893 }
7894 
7895 ##
7896 ## Read the ZONE RATE setting.
7897 ##
7898 record(subArray, "$(P):LS01:Z10:RATE1:ARRAY") {
7899  field(SCAN, "Passive")
7900  field(FTVL, "DOUBLE")
7901  field(INP, "$(P):LS01:Z10:ALL1.VAL MS")
7902  field(MALM, "8")
7903  field(NELM, "1")
7904  field(INDX, "7")
7905  field(PREC, "1")
7906  field(FLNK, "$(P):LS01:Z10:RATE1.PROC")
7907 }
7908 record(ai, "$(P):LS01:Z10:RATE1") {
7909  field(SCAN, "Passive")
7910  field(INP, "$(P):LS01:Z10:RATE1:ARRAY.VAL MS")
7911  field(PREC, "1")
7912  field(FLNK, "$(P):LS01:Z10:INITCALC1.PROC")
7913 }
7914 
7915 ##############################################################
7916 ##
7917 ## Populate the write records below with the current values.
7918 ## Only do this once at startup.
7919 ##
7920 ###############################################################
7921 
7922 record(calcout, "$(P):LS01:Z10:INITCALC1") {
7923  field(INPA, "0")
7924  field(CALC, "A")
7925  field(VAL, "0")
7926  field(DOPT, "Use OCAL")
7927  field(OOPT, "When Zero")
7928  field(OCAL, "1")
7929  field(OUT, "$(P):LS01:Z10:INITUB1.PROC")
7930 }
7931 
7932 record(dfanout, "$(P):LS01:Z10:INITUB1") {
7933  field(OMSL, "closed_loop")
7934  field(DOL, "$(P):LS01:Z10:UB1.VAL")
7935  field(OUTA, "$(P):LS01:Z10:UB_S1.VAL PP")
7936  field(FLNK, "$(P):LS01:Z10:INITP1.PROC")
7937 }
7938 record(dfanout, "$(P):LS01:Z10:INITP1") {
7939  field(OMSL, "closed_loop")
7940  field(DOL, "$(P):LS01:Z10:P1.VAL")
7941  field(OUTA, "$(P):LS01:Z10:P_S1.VAL PP")
7942  field(FLNK, "$(P):LS01:Z10:INITI1.PROC")
7943 }
7944 record(dfanout, "$(P):LS01:Z10:INITI1") {
7945  field(OMSL, "closed_loop")
7946  field(DOL, "$(P):LS01:Z10:I1.VAL")
7947  field(OUTA, "$(P):LS01:Z10:I_S1.VAL PP")
7948  field(FLNK, "$(P):LS01:Z10:INITD1.PROC")
7949 }
7950 record(dfanout, "$(P):LS01:Z10:INITD1") {
7951  field(OMSL, "closed_loop")
7952  field(DOL, "$(P):LS01:Z10:D1.VAL")
7953  field(OUTA, "$(P):LS01:Z10:D_S1.VAL PP")
7954  field(FLNK, "$(P):LS01:Z10:INITMOUT1.PROC")
7955 }
7956 record(dfanout, "$(P):LS01:Z10:INITMOUT1") {
7957  field(OMSL, "closed_loop")
7958  field(DOL, "$(P):LS01:Z10:MOUT1.VAL")
7959  field(OUTA, "$(P):LS01:Z10:MOUT_S1.VAL PP")
7960  field(FLNK, "$(P):LS01:Z10:INITRANGE1.PROC")
7961 }
7962 record(dfanout, "$(P):LS01:Z10:INITRANGE1") {
7963  field(OMSL, "closed_loop")
7964  field(DOL, "$(P):LS01:Z10:RANGE1.VAL")
7965  field(OUTA, "$(P):LS01:Z10:RANGE_S1.VAL PP")
7966  field(FLNK, "$(P):LS01:Z10:INITINPUT1.PROC")
7967 }
7968 record(dfanout, "$(P):LS01:Z10:INITINPUT1") {
7969  field(OMSL, "closed_loop")
7970  field(DOL, "$(P):LS01:Z10:INPUT1.VAL")
7971  field(OUTA, "$(P):LS01:Z10:INPUT_S1.VAL PP")
7972  field(FLNK, "$(P):LS01:Z10:INITRATE1.PROC")
7973 }
7974 record(dfanout, "$(P):LS01:Z10:INITRATE1") {
7975  field(OMSL, "closed_loop")
7976  field(DOL, "$(P):LS01:Z10:RATE1.VAL")
7977  field(OUTA, "$(P):LS01:Z10:RATE_S1.VAL PP")
7978  field(FLNK, "$(P):LS01:Z10:INITCOUNT1.PROC")
7979 }
7980 
7981 record(dfanout, "$(P):LS01:Z10:INITCOUNT1") {
7982  field(DOL, "1")
7983  field(OUTA, "$(P):LS01:Z10:INITCALC1.A")
7984 }
7985 
7986 
7987 
7988 #############################################
7989 # Write records. There is a calcout record to
7990 # do the actual write.
7991 #############################################
7992 
7993 ##
7994 ## Set the ZONE upper boundary setting.
7995 ##
7996 record(ao, "$(P):LS01:Z10:UB_S1") {
7997  field(SCAN, "Passive")
7998  field(PREC, "1")
7999  field(SDIS, "$(P):LS01:DISABLE")
8000 }
8001 
8002 ##
8003 ## Set the ZONE P setting.
8004 ##
8005 record(ao, "$(P):LS01:Z10:P_S1") {
8006  field(SCAN, "Passive")
8007  field(PREC, "1")
8008  field(SDIS, "$(P):LS01:DISABLE")
8009 }
8010 
8011 ##
8012 ## Set the ZONE I setting.
8013 ##
8014 record(ao, "$(P):LS01:Z10:I_S1") {
8015  field(SCAN, "Passive")
8016  field(PREC, "1")
8017  field(SDIS, "$(P):LS01:DISABLE")
8018 }
8019 
8020 ##
8021 ## Set the ZONE D setting.
8022 ##
8023 record(ao, "$(P):LS01:Z10:D_S1") {
8024  field(SCAN, "Passive")
8025  field(PREC, "1")
8026  field(SDIS, "$(P):LS01:DISABLE")
8027 }
8028 
8029 ##
8030 ## Set the ZONE MOUT setting.
8031 ##
8032 record(ao, "$(P):LS01:Z10:MOUT_S1") {
8033  field(SCAN, "Passive")
8034  field(PREC, "1")
8035  field(SDIS, "$(P):LS01:DISABLE")
8036 }
8037 
8038 ##
8039 ## Set the ZONE RANGE setting.
8040 ##
8041 record(mbbo, "$(P):LS01:Z10:RANGE_S1") {
8042  field(SCAN, "Passive")
8043  field(ZRST, "Off")
8044  field(ZRVL, "0")
8045  field(ONST, "Range1/Low")
8046  field(ONVL, "1")
8047  field(TWST, "Range2/Medium")
8048  field(TWVL, "2")
8049  field(THST, "Range3/High")
8050  field(THVL, "3")
8051  field(FRST, "Range4")
8052  field(FRVL, "4")
8053  field(FVST, "Range5")
8054  field(FVVL, "5")
8055  field(SDIS, "$(P):LS01:DISABLE")
8056 }
8057 
8058 ##
8059 ## Set the ZONE INPUT setting.
8060 ##
8061 record(mbbo, "$(P):LS01:Z10:INPUT_S1") {
8062  field(ZRST, "None")
8063  field(ZRVL, "0")
8064  field(ONST, "Input A")
8065  field(ONVL, "1")
8066  field(TWST, "Input B")
8067  field(TWVL, "2")
8068  field(THST, "Input C")
8069  field(THVL, "3")
8070  field(FRST, "Input D")
8071  field(FRVL, "4")
8072  field(FVST, "Input D2")
8073  field(FVVL, "5")
8074  field(SXST, "Input D3")
8075  field(SXVL, "6")
8076  field(SVST, "Input D4")
8077  field(SVVL, "7")
8078  field(EIST, "Input D5")
8079  field(EIVL, "8")
8080  field(SDIS, "$(P):LS01:DISABLE")
8081 }
8082 
8083 ##
8084 ## Set the ZONE RATE setting.
8085 ##
8086 record(ao, "$(P):LS01:Z10:RATE_S1") {
8087  field(SCAN, "Passive")
8088  field(PREC, "1")
8089  field(SDIS, "$(P):LS01:DISABLE")
8090 }
8091 
8092 ##
8093 ## Record to write the ZONE parameters.
8094 ##
8095 record(calcout, "$(P):LS01:Z10:SET1") {
8096  field(INPA, "$(P):LS01:Z10:UB_S1")
8097  field(INPB, "$(P):LS01:Z10:P_S1")
8098  field(INPC, "$(P):LS01:Z10:I_S1")
8099  field(INPD, "$(P):LS01:Z10:D_S1")
8100  field(INPE, "$(P):LS01:Z10:MOUT_S1")
8101  field(INPF, "$(P):LS01:Z10:RANGE_S1")
8102  field(INPG, "$(P):LS01:Z10:INPUT_S1")
8103  field(INPH, "$(P):LS01:Z10:RATE_S1")
8104  field(CALC, "0")
8105  field(DTYP, "stream")
8106  field(OUT, "@ls336.proto setZONE(1,10) L0 0")
8107  field(SDIS, "$(P):LS01:DISABLE")
8108  field(FLNK, "$(P):LS01:Z10:ALL1.PROC")
8109 }
8110 
8111 
8112 
8113 
8114 
8115 
8116 
8117 
8118 
8119 
8120 
8121 
8122 
8123 
8124 # This is included in lakeshore336.template
8125 # This template is for the common functionality shared by all 4 outputs.
8126 #
8127 # There is some logic in this database to provide put_callback functionality
8128 # for setting the temperature and waiting for it to be in range. The input
8129 # sensor PV name used for the in-window calculation changes depending on
8130 # the input sensor selected. In order for this to work it requires the following
8131 # macros:
8132 #
8133 # INPUTA - Sensor 1 PV name
8134 # INPUTB - Sensor 2 PV name
8135 # INPUTC - Sensor 3 PV name
8136 # INPUTD - Sensor 4 PV name
8137 # INPUTD2 - Sensor D2 PV name
8138 # INPUTD3 - Sensor D3 PV name
8139 # INPUTD4 - Sensor D4 PV name
8140 # INPUTD5 - Sensor D5 PV name
8141 # TOLERANCE (optional - defaults to 1)
8142 #
8143 # The input link names must fit into a stringout record for this to work.
8144 # The above link names default to a dummy record.
8145 
8146 ################################################################
8147 # Read records
8148 ################################################################
8149 
8150 ##
8151 ## Record holding the output number
8152 ##
8153 record(stringout, "$(P):LS01:OUTPUT2") {
8154  field(DTYP, "Soft Channel")
8155  field(VAL, "2")
8156  field(PINI, "YES")
8157 }
8158 
8159 ##
8160 ## Read the setpoint temperature.
8161 ##
8162 record(ai, "$(P):LS01:SETP2") {
8163  field(DTYP, "stream")
8164  field(SDIS, "$(P):LS01:DISABLE_POLL")
8165  field(INP, "@ls336.proto getSETP(2) L0 0")
8166  field(SCAN, "1 second")
8167  field(PREC, "3")
8168  field(EGU, "K")
8169  info(archive, "Monitor, 00:00:01, VAL")
8170 }
8171 
8172 ##
8173 ## Read the setpoint limit
8174 ##
8175 
8176 ##
8177 ## Read the ramp parameter. This also populates the ramp status $(P):LS01:RAMPST2,
8178 ##
8179 record(ai, "$(P):LS01:RAMP2") {
8180  field(DTYP, "stream")
8181  field(SDIS, "$(P):LS01:DISABLE_POLL")
8182  field(INP, "@ls336.proto getRAMP(2,$(P):LS01:RAMPST2) L0 0")
8183  field(SCAN, "5 second")
8184  field(PREC, "3")
8185  field(EGU, "K/minute")
8186 }
8187 
8188 ##
8189 ## Read the ramp status parameter.
8190 ##
8191 ## 0=off
8192 ## 1=on
8193 ##
8194 record(bi, "$(P):LS01:RAMPST2") {
8195  field(DTYP, "Soft Channel")
8196  field(ZNAM, "Off")
8197  field(ONAM, "On")
8198 }
8199 
8200 ##
8201 ## Read the range parameter (the heater output power range).
8202 ## This is output specific and is defined in another file.
8203 ##
8204 record(mbbi, "$(P):LS01:RANGE2") {
8205  field(DTYP, "stream")
8206  field(SDIS, "$(P):LS01:DISABLE_POLL")
8207  field(ZRVL, "0")
8208  field(ONVL, "1")
8209  field(TWVL, "2")
8210  field(THVL, "3")
8211  field(FRVL, "4")
8212  field(FVVL, "5")
8213  field(SCAN, "5 second")
8214  field(INP, "@ls336.proto getRANGE(2) L0 0")
8215 }
8216 
8217 ##
8218 ## Read the mode to use for outmode
8219 ## This is output specific and is defined in another file.
8220 ##
8221 record(mbbi, "$(P):LS01:OMMODE2") {
8222 }
8223 
8224 ##
8225 ## Read the manual output parameter.
8226 ##
8227 record(ai, "$(P):LS01:MOUT2") {
8228  field(DTYP, "stream")
8229  field(SDIS, "$(P):LS01:DISABLE_POLL")
8230  field(INP, "@ls336.proto getMOUT(2) L0 0")
8231  field(SCAN, "5 second")
8232 }
8233 
8234 ##
8235 ## Read the PID P parameter. Pass the I and D records into the protocol to read those as well.
8236 ##
8237 record(ai, "$(P):LS01:P2") {
8238  field(DTYP, "stream")
8239  field(SDIS, "$(P):LS01:DISABLE_POLL")
8240  field(INP, "@ls336.proto getPID(2,$(P):LS01:I2,$(P):LS01:D2) L0 0")
8241  field(SCAN, "5 second")
8242 }
8243 
8244 ##
8245 ## Read the PID I parameter.
8246 ##
8247 record(ai, "$(P):LS01:I2") {
8248  field(DTYP, "Soft Channel")
8249  field(SCAN, "Passive")
8250 }
8251 
8252 ##
8253 ## Read the PID D parameter.
8254 ##
8255 record(ai, "$(P):LS01:D2") {
8256  field(DTYP, "Soft Channel")
8257  field(SCAN, "Passive")
8258 }
8259 
8260 ##
8261 ## Read the mode to use for outmode.
8262 ## This also populates the OMI and OMP records.
8263 ## The mbbi strings and values are defined in the output specific templates.
8264 ##
8265 record(mbbi, "$(P):LS01:OMM2") {
8266  field(DTYP, "stream")
8267  field(SDIS, "$(P):LS01:DISABLE_POLL")
8268  field(ZRVL, "0")
8269  field(ONVL, "1")
8270  field(TWVL, "2")
8271  field(THVL, "3")
8272  field(FRVL, "4")
8273  field(FVVL, "5")
8274  field(SCAN, "5 second")
8275  field(INP, "@ls336.proto getOM(2,$(P):LS01:OMI2,$(P):LS01:OMP2) L0 0")
8276 }
8277 
8278 ##
8279 ## Read the input to use for outmode
8280 ##
8281 record(mbbi, "$(P):LS01:OMI2") {
8282  field(DTYP, "Soft Channel")
8283  field(ZRST, "None")
8284  field(ZRVL, "0")
8285  field(ONST, "Input A")
8286  field(ONVL, "1")
8287  field(TWST, "Input B")
8288  field(TWVL, "2")
8289  field(THST, "Input C")
8290  field(THVL, "3")
8291  field(FRST, "Input D")
8292  field(FRVL, "4")
8293  field(FVST, "Input D2")
8294  field(FVVL, "5")
8295  field(SXST, "Input D3")
8296  field(SXVL, "6")
8297  field(SVST, "Input D4")
8298  field(SVVL, "7")
8299  field(EIST, "Input D5")
8300  field(EIVL, "8")
8301 }
8302 
8303 ##
8304 ## Read the power up mode to use for outmode
8305 ##
8306 record(mbbi, "$(P):LS01:OMP2") {
8307  field(DTYP, "Soft Channel")
8308  field(ZRST, "Off")
8309  field(ZRVL, "0")
8310  field(ONST, "On")
8311  field(ONVL, "1")
8312 }
8313 
8314 ################################################################
8315 # Write records
8316 ################################################################
8317 
8318 ##
8319 ## Set the setpoint temperature.
8320 ##
8321 record(ao, "$(P):LS01:SETP_S2") {
8322  field(DTYP, "stream")
8323  field(SDIS, "$(P):LS01:DISABLE")
8324  field(DESC, "Setpoint temperature")
8325  field(OUT, "@ls336.proto setSETP(2) L0 0")
8326  field(PREC, "3")
8327  field(FLNK, "$(P):LS01:SETP_S2_BUSYSET.PROC")
8328  field(EGU, "K")
8329  info(archive, "Monitor, 00:00:01, VAL")
8330 }
8331 
8332 ###############################################################################
8333 
8334 ##
8335 ## A few records to support put_callback on the setpoint. We use the busy record.
8336 ## A temperature window is used. The temperature must be within
8337 ## the window, before the callback is done.
8338 ##
8339 
8340 record(dfanout, "$(P):LS01:SETP_S2_BUSYSET")
8341 {
8342  field(VAL, "0")
8343  field(OUTA, "$(P):LS01:IN_WINDOW2.VAL PP")
8344  field(FLNK, "$(P):LS01:SETP_S2_BUSYSET2")
8345 }
8346 record(dfanout, "$(P):LS01:SETP_S2_BUSYSET2")
8347 {
8348  field(VAL, "1")
8349  field(OUTA, "$(P):LS01:SETP2.PROC PP")
8350  field(OUTB, "$(P):LS01:SETP_S2_BUSY PP")
8351  field(FLNK, "$(P):LS01:CALC_IN_WINDOW2")
8352 }
8353 record(busy, "$(P):LS01:SETP_S2_BUSY")
8354 {
8355 }
8356 record(calcout, "$(P):LS01:CALC_IN_WINDOW2") {
8357  field(PINI, "YES")
8358  field(INPA, "1")
8359  field(INPB, "$(P):LS01:DUMMY2.VAL")
8360  field(INPC, "$(P):LS01:SETP_S2.VAL")
8361  field(CALC, "((B>=(C-A))&&(B<=(C+A)))?1:0")
8362  field(OOPT, "Every Time")
8363  field(OUT, "$(P):LS01:IN_WINDOW2.VAL PP")
8364  field(DOPT, "Use CALC")
8365  field(SCAN, "1 second")
8366  field(PREC, "1")
8367  info(autosaveFields, "A")
8368  info(archive, "Monitor, 00:00:01, A B C VAL")
8369 }
8370 record(bo, "$(P):LS01:IN_WINDOW2") {
8371  field(DESC, "Temperature In Window")
8372  field(VAL, "0")
8373  field(PINI, "YES")
8374  field(OMSL, "supervisory")
8375  field(ZNAM, "Not In Window")
8376  field(ONAM, "In Window")
8377  info(archive, "Monitor, 00:00:01, VAL")
8378 }
8379 
8380 ##
8381 ## Set busy record 'done' when TIME_WINDOW2=1
8382 ##
8383 record(calcout, "$(P):LS01:CALC_BUSY_DONE2") {
8384  field(INPA, "$(P):LS01:IN_WINDOW2.VAL CP")
8385  field(CALC, "(A=1)?0:1")
8386  field(OOPT, "Every Time")
8387  field(OUT, "$(P):LS01:SETP_S2_BUSY.VAL PP")
8388 }
8389 
8390 ###############################################################################
8391 
8392 ##
8393 ## Dummy record to use for input link name default
8394 ##
8395 record(ai, "$(P):LS01:DUMMY2") {
8396 }
8397 
8398 ##
8399 ## Monitor $(P):LS01:OMI2 to determin which input sensor to use
8400 ## to deal with the callback. The below set of records automatically
8401 ## switch the input when the 'control input' is changed. They make
8402 ## use of the input sensor PV names passed into this template.
8403 ##
8404 record(calcout, "$(P):LS01:SET_2_INPUTA") {
8405  field(CALC, "A=1")
8406  field(INPA, "$(P):LS01:OMI2.VAL CP")
8407  field(DOPT, "Use OCAL")
8408  field(OVAL, "1")
8409  field(OOPT, "When Non-zero")
8410  field(OUT, "$(P):LS01:SET_2_INPUTA_LINK.PROC")
8411 }
8412 record(stringout, "$(P):LS01:SET_2_INPUTA_LINK") {
8413  field(VAL, "$(P):LS01:KRDG0.VAL CP")
8414  field(OUT, "$(P):LS01:CALC_IN_WINDOW2.INPB CA")
8415 }
8416 
8417 record(calcout, "$(P):LS01:SET_2_INPUTB") {
8418  field(CALC, "A=2")
8419  field(INPA, "$(P):LS01:OMI2.VAL CP")
8420  field(DOPT, "Use OCAL")
8421  field(OVAL, "1")
8422  field(OOPT, "When Non-zero")
8423  field(OUT, "$(P):LS01:SET_2_INPUTB_LINK.PROC")
8424 }
8425 record(stringout, "$(P):LS01:SET_2_INPUTB_LINK") {
8426  field(VAL, "$(P):LS01:KRDG1.VAL CP")
8427  field(OUT, "$(P):LS01:CALC_IN_WINDOW2.INPB CA")
8428 }
8429 
8430 record(calcout, "$(P):LS01:SET_2_INPUTC") {
8431  field(CALC, "A=3")
8432  field(INPA, "$(P):LS01:OMI2.VAL CP")
8433  field(DOPT, "Use OCAL")
8434  field(OVAL, "1")
8435  field(OOPT, "When Non-zero")
8436  field(OUT, "$(P):LS01:SET_2_INPUTC_LINK.PROC")
8437 }
8438 record(stringout, "$(P):LS01:SET_2_INPUTC_LINK") {
8439  field(VAL, "$(P):LS01:KRDG2.VAL CP")
8440  field(OUT, "$(P):LS01:CALC_IN_WINDOW2.INPB CA")
8441 }
8442 
8443 record(calcout, "$(P):LS01:SET_2_INPUTD") {
8444  field(CALC, "A=4")
8445  field(INPA, "$(P):LS01:OMI2.VAL CP")
8446  field(DOPT, "Use OCAL")
8447  field(OVAL, "1")
8448  field(OOPT, "When Non-zero")
8449  field(OUT, "$(P):LS01:SET_2_INPUTD_LINK.PROC")
8450 }
8451 record(stringout, "$(P):LS01:SET_2_INPUTD_LINK") {
8452  field(VAL, "$(P):LS01:KRDG3.VAL CP")
8453  field(OUT, "$(P):LS01:CALC_IN_WINDOW2.INPB CA")
8454 }
8455 
8456 record(calcout, "$(P):LS01:SET_2_INPUTD2") {
8457  field(CALC, "A=5")
8458  field(INPA, "$(P):LS01:OMI2.VAL CP")
8459  field(DOPT, "Use OCAL")
8460  field(OVAL, "1")
8461  field(OOPT, "When Non-zero")
8462  field(OUT, "$(P):LS01:SET_2_INPUTD2_LINK.PROC")
8463 }
8464 record(stringout, "$(P):LS01:SET_2_INPUTD2_LINK") {
8465  field(VAL, "$(P):LS01:KRDGD2.VAL CP")
8466  field(OUT, "$(P):LS01:CALC_IN_WINDOW2.INPB CA")
8467 }
8468 
8469 record(calcout, "$(P):LS01:SET_2_INPUTD3") {
8470  field(CALC, "A=6")
8471  field(INPA, "$(P):LS01:OMI2.VAL CP")
8472  field(DOPT, "Use OCAL")
8473  field(OVAL, "1")
8474  field(OOPT, "When Non-zero")
8475  field(OUT, "$(P):LS01:SET_2_INPUTD3_LINK.PROC")
8476 }
8477 record(stringout, "$(P):LS01:SET_2_INPUTD3_LINK") {
8478  field(VAL, "$(P):LS01:KRDGD3.VAL CP")
8479  field(OUT, "$(P):LS01:CALC_IN_WINDOW2.INPB CA")
8480 }
8481 
8482 record(calcout, "$(P):LS01:SET_2_INPUTD4") {
8483  field(CALC, "A=7")
8484  field(INPA, "$(P):LS01:OMI2.VAL CP")
8485  field(DOPT, "Use OCAL")
8486  field(OVAL, "1")
8487  field(OOPT, "When Non-zero")
8488  field(OUT, "$(P):LS01:SET_2_INPUTD4_LINK.PROC")
8489 }
8490 record(stringout, "$(P):LS01:SET_2_INPUTD4_LINK") {
8491  field(VAL, "$(P):LS01:KRDGD4.VAL CP")
8492  field(OUT, "$(P):LS01:CALC_IN_WINDOW2.INPB CA")
8493 }
8494 
8495 record(calcout, "$(P):LS01:SET_2_INPUTD5") {
8496  field(CALC, "A=8")
8497  field(INPA, "$(P):LS01:OMI2.VAL CP")
8498  field(DOPT, "Use OCAL")
8499  field(OVAL, "1")
8500  field(OOPT, "When Non-zero")
8501  field(OUT, "$(P):LS01:SET_2_INPUTD5_LINK.PROC")
8502 }
8503 record(stringout, "$(P):LS01:SET_2_INPUTD5_LINK") {
8504  field(VAL, "$(P):LS01:KRDGD5.VAL CP")
8505  field(OUT, "$(P):LS01:CALC_IN_WINDOW2.INPB CA")
8506 }
8507 
8508 
8509 
8510 ##
8511 ## Set the range parameter.
8512 ## The strings are output specific and is defined in another file.
8513 ##
8514 record(mbbo, "$(P):LS01:RANGE_S2") {
8515  field(DTYP, "stream")
8516  field(SDIS, "$(P):LS01:DISABLE")
8517  field(OUT, "@ls336.proto setRANGE(2) L0 0")
8518  field(FLNK, "$(P):LS01:RANGE2.PROC CA")
8519 }
8520 
8521 ##
8522 ## Set the ramp rate parameter.
8523 ##
8524 ## This is the desired temperate increase/decrease rate
8525 ## per second when heating/cooling.
8526 ##
8527 ## The ramp and ramp status parameters are actually one command
8528 ## for the lakeshore. Therefore one must pass into this
8529 ## record the existing/desired ramp status, as well as the
8530 ## desired ramp. This is done automatically by reading the
8531 ## PV which holds the current ramp status.
8532 ##
8533 record(ao, "$(P):LS01:RAMP_S2") {
8534  field(DTYP, "stream")
8535  field(SDIS, "$(P):LS01:DISABLE")
8536  field(OUT, "@ls336.proto setRAMP($(P):LS01:RAMPST2,2) L0 0")
8537  field(PREC, "3")
8538  field(FLNK, "$(P):LS01:RAMP2.PROC CA")
8539  field(EGU, "K/minute")
8540 }
8541 
8542 ##
8543 ## Set the ramp status parameter.
8544 ##
8545 ## 0=off
8546 ## 1=on
8547 ##
8548 ## The ramp and ramp status parameters are actually one command
8549 ## for the lakeshore. Therefore one must pass into this
8550 ## record the existing/desired ramp, as well as the
8551 ## desired ramp status. This is done automatically by reading the
8552 ## PV which holds the current ramp value.
8553 ##
8554 record(bo, "$(P):LS01:RAMPST_S2") {
8555  field(DTYP, "stream")
8556  field(SDIS, "$(P):LS01:DISABLE")
8557  field(OUT, "@ls336.proto setRAMPSTATUS($(P):LS01:RAMP2,2) L0 0")
8558  field(FLNK, "$(P):LS01:RAMP2.PROC CA")
8559  field(ZNAM, "Off")
8560  field(ONAM, "On")
8561 }
8562 
8563 ##
8564 ## Set the manual output value.
8565 ##
8566 record(ao, "$(P):LS01:MOUT_S2") {
8567  field(DTYP, "stream")
8568  field(SDIS, "$(P):LS01:DISABLE")
8569  field(OUT, "@ls336.proto setMOUT(2) L0 0")
8570  field(FLNK, "$(P):LS01:MOUT2.PROC CA")
8571 }
8572 
8573 ##
8574 ## Set the PID P parameter.
8575 ##
8576 record(ao, "$(P):LS01:P_S2") {
8577  field(DTYP, "stream")
8578  field(SDIS, "$(P):LS01:DISABLE")
8579  field(OUT, "@ls336.proto setP(2,$(P):LS01:I2,$(P):LS01:D2) L0 0")
8580  field(FLNK, "$(P):LS01:P2.PROC CA")
8581 }
8582 
8583 ##
8584 ## Set the PID I parameter.
8585 ##
8586 record(ao, "$(P):LS01:I_S2") {
8587  field(DTYP, "stream")
8588  field(SDIS, "$(P):LS01:DISABLE")
8589  field(OUT, "@ls336.proto setI($(P):LS01:P2,2,$(P):LS01:D2) L0 0")
8590  field(FLNK, "$(P):LS01:P2.PROC CA")
8591 }
8592 
8593 ##
8594 ## Set the PID D parameter.
8595 ##
8596 record(ao, "$(P):LS01:D_S2") {
8597  field(DTYP, "stream")
8598  field(SDIS, "$(P):LS01:DISABLE")
8599  field(OUT, "@ls336.proto setD($(P):LS01:P2,$(P):LS01:I2,2) L0 0")
8600  field(FLNK, "$(P):LS01:P2.PROC CA")
8601 }
8602 
8603 ##
8604 ## Set the mode to use for outmode
8605 ## The strings are output specific. This is defined in another file.
8606 ##
8607 record(mbbo, "$(P):LS01:OMM_S2") {
8608  field(DTYP, "stream")
8609  field(SDIS, "$(P):LS01:DISABLE")
8610  field(ZRVL, "0")
8611  field(ONVL, "1")
8612  field(TWVL, "2")
8613  field(THVL, "3")
8614  field(FRVL, "4")
8615  field(FVVL, "5")
8616  field(OUT, "@ls336.proto setOM(2,$(P):LS01:OMI2,$(P):LS01:OMP2) L0 0")
8617  field(FLNK, "$(P):LS01:OMM2.PROC CA")
8618 }
8619 
8620 ##
8621 ## Set the input to use for outmode
8622 ##
8623 record(mbbo, "$(P):LS01:OMI_S2") {
8624  field(DTYP, "stream")
8625  field(SDIS, "$(P):LS01:DISABLE")
8626  field(ZRST, "None")
8627  field(ZRVL, "0")
8628  field(ONST, "Input A")
8629  field(ONVL, "1")
8630  field(TWST, "Input B")
8631  field(TWVL, "2")
8632  field(THST, "Input C")
8633  field(THVL, "3")
8634  field(FRST, "Input D")
8635  field(FRVL, "4")
8636  field(FVST, "Input D2")
8637  field(FVVL, "5")
8638  field(SXST, "Input D3")
8639  field(SXVL, "6")
8640  field(SVST, "Input D4")
8641  field(SVVL, "7")
8642  field(EIST, "Input D5")
8643  field(EIVL, "8")
8644  field(OUT, "@ls336.proto setOMI(2,$(P):LS01:OMM2,$(P):LS01:OMP2) L0 0")
8645  field(FLNK, "$(P):LS01:OMM2.PROC CA")
8646 }
8647 
8648 ##
8649 ## Set the power up mode to use for outmode
8650 ##
8651 record(mbbo, "$(P):LS01:OMP_S2") {
8652  field(DTYP, "stream")
8653  field(SDIS, "$(P):LS01:DISABLE")
8654  field(ZRST, "Off")
8655  field(ZRVL, "0")
8656  field(ONST, "On")
8657  field(ONVL, "1")
8658  field(OUT, "@ls336.proto setOMP(2,$(P):LS01:OMM2,$(P):LS01:OMI2) L0 0")
8659  field(FLNK, "$(P):LS01:OMM2.PROC CA")
8660 }
8661 
8662 ##
8663 ## Set the type of tuning mode
8664 ##
8665 record(mbbo, "$(P):LS01:TUNEMODE_S2") {
8666  field(SDIS, "$(P):LS01:DISABLE")
8667  field(ZRST, "P Only")
8668  field(ZRVL, "0")
8669  field(ONST, "P and I")
8670  field(ONVL, "1")
8671  field(TWST, "P, I and D")
8672  field(TWVL, "2")
8673 }
8674 
8675 
8676 ##
8677 ## Start the tuning process
8678 ##
8679 record(ao, "$(P):LS01:TUNESTART2") {
8680  field(DTYP, "stream")
8681  field(SDIS, "$(P):LS01:DISABLE")
8682  field(DESC, "Start the auto tuning")
8683  field(OUT, "@ls336.proto setATUNE(2,$(P):LS01:TUNEMODE_S2) L0 0")
8684 }
8685 
8686 
8687 ##
8688 ## Read all ZONE settings
8689 ##
8690 record(seq, "$(P):LS01:Z:READ2") {
8691  field(DESC, "Read Output 2 ZONE")
8692  field(DOL1, "1")
8693  field(DLY1, "0.1")
8694  field(LNK1, "$(P):LS01:Z1:ALL2.PROC")
8695  field(DOL2, "1")
8696  field(DLY2, "0.1")
8697  field(LNK2, "$(P):LS01:Z2:ALL2.PROC")
8698  field(DOL3, "1")
8699  field(DLY3, "0.1")
8700  field(LNK3, "$(P):LS01:Z3:ALL2.PROC")
8701  field(DOL4, "1")
8702  field(DLY4, "0.1")
8703  field(LNK4, "$(P):LS01:Z4:ALL2.PROC")
8704  field(DOL5, "1")
8705  field(DLY5, "0.1")
8706  field(LNK5, "$(P):LS01:Z5:ALL2.PROC")
8707  field(DOL6, "1")
8708  field(DLY6, "0.1")
8709  field(LNK6, "$(P):LS01:Z6:ALL2.PROC")
8710  field(DOL7, "1")
8711  field(DLY7, "0.1")
8712  field(LNK7, "$(P):LS01:Z7:ALL2.PROC")
8713  field(DOL8, "1")
8714  field(DLY8, "0.1")
8715  field(LNK8, "$(P):LS01:Z8:ALL2.PROC")
8716  field(DOL9, "1")
8717  field(DLY9, "0.1")
8718  field(LNK9, "$(P):LS01:Z9:ALL2.PROC")
8719  field(DOLA, "1")
8720  field(DLYA, "0.1")
8721  field(LNKA, "$(P):LS01:Z10:ALL2.PROC")
8722  field(PINI, "YES")
8723 }
8724 
8725 ###############################################
8726 # This is included in lakeshore336.template
8727 # This template is for outputs 1 and 2, which can provide heater power.
8728 
8729 ################################################################
8730 # Read records
8731 ################################################################
8732 
8733 ##
8734 ## Read the heater output value.
8735 ##
8736 record(ai, "$(P):LS01:HTR2") {
8737  field(DTYP, "stream")
8738  field(SDIS, "$(P):LS01:DISABLE_POLL")
8739  field(INP, "@ls336.proto getHTR(2) L0 0")
8740  field(SCAN, "5 second")
8741  field(PREC, "1")
8742  field(EGU, "%")
8743  info(archive, "Monitor, 00:00:01, VAL")
8744 }
8745 
8746 ##
8747 ## Define the strings and values for this record.
8748 ##
8749 record(mbbi, "$(P):LS01:RANGE2") {
8750  field(ZRST, "Off")
8751  field(ONST, "Range1/Low")
8752  field(TWST, "Range2/Medium")
8753  field(THST, "Range3/High")
8754  field(FRST, "Range4")
8755  field(FVST, "Range5")
8756 }
8757 
8758 ##
8759 ## Define the strings and values for this record.
8760 ##
8761 record(mbbi, "$(P):LS01:OMM2") {
8762  field(ZRST, "Off")
8763  field(ONST, "Closed Loop PID")
8764  field(TWST, "Zone")
8765  field(THST, "Open Loop")
8766 }
8767 
8768 ##
8769 ## Define the strings and values for this record.
8770 ##
8771 record(mbbo, "$(P):LS01:RANGE_S2") {
8772  field(ZRST, "Off")
8773  field(ONST, "Range1/Low")
8774  field(TWST, "Range2/Medium")
8775  field(THST, "Range3/High")
8776  field(FRST, "Range4")
8777  field(FVST, "Range5")
8778 }
8779 
8780 ##
8781 ## Define the strings and values for this record.
8782 ##
8783 record(mbbo, "$(P):LS01:OMM_S2") {
8784  field(ZRST, "Off")
8785  field(ONST, "Closed Loop PID")
8786  field(TWST, "Zone")
8787  field(THST, "Open Loop")
8788 }
8789 
8790 ##
8791 ## Read the heater status
8792 ##
8793 record(longin, "$(P):LS01:HTRST2") {
8794  field(DTYP, "stream")
8795  field(SDIS, "$(P):LS01:DISABLE_POLL")
8796  field(SCAN, "5 second")
8797  field(INP, "@ls336.proto getHTRST(D5) L0 0")
8798  field(FLNK, "$(P):LS01:HTRST2_CALC")
8799  info(archive, "Monitor, 00:00:01, VAL")
8800 }
8801 
8802 ##
8803 ## Cache the heater status because this is cleared on a read on the controller.
8804 ##
8805 record(calcout, "$(P):LS01:HTRST2_CALC") {
8806  field(INPA, "$(P):LS01:HTRST2.VAL")
8807  field(CALC, "A!=0?A:0")
8808  field(DOPT, "Use CALC")
8809  field(OOPT, "When Non-zero")
8810  field(OUT, "$(P):LS01:HTRST2_CACHE.RVAL PP")
8811 }
8812 record(mbbi, "$(P):LS01:HTRST2_CACHE") {
8813  field(DESC, "Cached HTRST")
8814  field(DTYP, "Raw Soft Channel")
8815  field(ZRST, "No Error")
8816  field(ZRVL, "0")
8817  field(ONST, "Open Load")
8818  field(ONVL, "1")
8819  field(TWST, "Short/Compliance")
8820  field(TWVL, "2")
8821  field(VAL, "0")
8822  field(PINI, "YES")
8823  field(ONSV, "MAJOR")
8824  field(TWSV, "MAJOR")
8825  info(archive, "Monitor, 00:00:01, VAL")
8826 }
8827 
8828 ##
8829 ## Provide record to reset the cached value
8830 ##
8831 record(bo, "$(P):LS01:HTRST2_RESET") {
8832  field(DESC, "Reset Cached HTRST")
8833  field(VAL, "0")
8834  field(OUT, "$(P):LS01:HTRST2_CACHE.RVAL PP")
8835 }
8836 
8837 ###############################################
8838 # Add in ZONE support
8839 ###############################################
8840 
8841 #######################################
8842 #
8843 # Template to support reading and setting
8844 # controller ZONE parameters. It reads the ZONE
8845 # parameters into an array, then uses subArrays to
8846 # extract each parameter.
8847 #
8848 # This template is used by the output template
8849 # and it needs the following macros:
8850 #
8851 # ZONE: zone number
8852 # OUT: output number
8853 #
8854 #######################################
8855 
8856 ##
8857 ## Read the ZONE setting into an array (8 values)
8858 ##
8859 record(waveform, "$(P):LS01:Z1:ALL2") {
8860  field(DTYP, "stream")
8861  field(SDIS, "$(P):LS01:DISABLE_POLL")
8862  field(INP, "@ls336.proto getZONE(2,1) L0 0")
8863  field(SCAN, "Passive")
8864  field(NELM, "8")
8865  field(FTVL, "DOUBLE")
8866  field(PREC, "1")
8867  field(FLNK, "$(P):LS01:Z1:UB2:ARRAY.PROC")
8868 }
8869 
8870 ##
8871 ## Read the ZONE upper boundary setting.
8872 ##
8873 record(subArray, "$(P):LS01:Z1:UB2:ARRAY") {
8874  field(SCAN, "Passive")
8875  field(FTVL, "DOUBLE")
8876  field(INP, "$(P):LS01:Z1:ALL2.VAL MS")
8877  field(MALM, "8")
8878  field(NELM, "1")
8879  field(INDX, "0")
8880  field(PREC, "1")
8881  field(FLNK, "$(P):LS01:Z1:UB2.PROC")
8882 }
8883 record(ai, "$(P):LS01:Z1:UB2") {
8884  field(SCAN, "Passive")
8885  field(INP, "$(P):LS01:Z1:UB2:ARRAY.VAL MS")
8886  field(PREC, "1")
8887  field(FLNK, "$(P):LS01:Z1:P2:ARRAY.PROC")
8888 }
8889 
8890 ##
8891 ## Read the ZONE P setting.
8892 ##
8893 record(subArray, "$(P):LS01:Z1:P2:ARRAY") {
8894  field(SCAN, "Passive")
8895  field(FTVL, "DOUBLE")
8896  field(INP, "$(P):LS01:Z1:ALL2.VAL MS")
8897  field(MALM, "8")
8898  field(NELM, "1")
8899  field(INDX, "1")
8900  field(PREC, "1")
8901  field(FLNK, "$(P):LS01:Z1:P2.PROC")
8902 }
8903 record(ai, "$(P):LS01:Z1:P2") {
8904  field(SCAN, "Passive")
8905  field(INP, "$(P):LS01:Z1:P2:ARRAY.VAL MS")
8906  field(PREC, "1")
8907  field(FLNK, "$(P):LS01:Z1:I2:ARRAY.PROC")
8908 }
8909 
8910 ##
8911 ## Read the ZONE I setting.
8912 ##
8913 record(subArray, "$(P):LS01:Z1:I2:ARRAY") {
8914  field(SCAN, "Passive")
8915  field(FTVL, "DOUBLE")
8916  field(INP, "$(P):LS01:Z1:ALL2.VAL MS")
8917  field(MALM, "8")
8918  field(NELM, "1")
8919  field(INDX, "2")
8920  field(PREC, "1")
8921  field(FLNK, "$(P):LS01:Z1:I2.PROC")
8922 }
8923 record(ai, "$(P):LS01:Z1:I2") {
8924  field(SCAN, "Passive")
8925  field(INP, "$(P):LS01:Z1:I2:ARRAY.VAL MS")
8926  field(PREC, "1")
8927  field(FLNK, "$(P):LS01:Z1:D2:ARRAY.PROC")
8928 }
8929 
8930 ##
8931 ## Read the ZONE D setting.
8932 ##
8933 record(subArray, "$(P):LS01:Z1:D2:ARRAY") {
8934  field(SCAN, "Passive")
8935  field(FTVL, "DOUBLE")
8936  field(INP, "$(P):LS01:Z1:ALL2.VAL MS")
8937  field(MALM, "8")
8938  field(NELM, "1")
8939  field(INDX, "3")
8940  field(PREC, "1")
8941  field(FLNK, "$(P):LS01:Z1:D2.PROC")
8942 }
8943 record(ai, "$(P):LS01:Z1:D2") {
8944  field(SCAN, "Passive")
8945  field(INP, "$(P):LS01:Z1:D2:ARRAY.VAL MS")
8946  field(PREC, "1")
8947  field(FLNK, "$(P):LS01:Z1:MOUT2:ARRAY.PROC")
8948 }
8949 
8950 ##
8951 ## Read the ZONE MOUT setting.
8952 ##
8953 record(subArray, "$(P):LS01:Z1:MOUT2:ARRAY") {
8954  field(SCAN, "Passive")
8955  field(FTVL, "DOUBLE")
8956  field(INP, "$(P):LS01:Z1:ALL2.VAL MS")
8957  field(MALM, "8")
8958  field(NELM, "1")
8959  field(INDX, "4")
8960  field(PREC, "1")
8961  field(FLNK, "$(P):LS01:Z1:MOUT2.PROC")
8962 }
8963 record(ai, "$(P):LS01:Z1:MOUT2") {
8964  field(SCAN, "Passive")
8965  field(INP, "$(P):LS01:Z1:MOUT2:ARRAY.VAL MS")
8966  field(PREC, "1")
8967  field(FLNK, "$(P):LS01:Z1:RANGE2:ARRAY.PROC")
8968 }
8969 
8970 ##
8971 ## Read the ZONE RANGE setting.
8972 ##
8973 record(subArray, "$(P):LS01:Z1:RANGE2:ARRAY") {
8974  field(SCAN, "Passive")
8975  field(FTVL, "DOUBLE")
8976  field(INP, "$(P):LS01:Z1:ALL2.VAL MS")
8977  field(MALM, "8")
8978  field(NELM, "1")
8979  field(INDX, "5")
8980  field(PREC, "1")
8981  field(FLNK, "$(P):LS01:Z1:RANGE2.PROC")
8982 }
8983 record(mbbi, "$(P):LS01:Z1:RANGE2") {
8984  field(INP, "$(P):LS01:Z1:RANGE2:ARRAY.VAL")
8985  field(SCAN, "Passive")
8986  field(ZRST, "Off")
8987  field(ZRVL, "0")
8988  field(ONST, "Range1/Low")
8989  field(ONVL, "1")
8990  field(TWST, "Range2/Medium")
8991  field(TWVL, "2")
8992  field(THST, "Range3/High")
8993  field(THVL, "3")
8994  field(FRST, "Range4")
8995  field(FRVL, "4")
8996  field(FVST, "Range5")
8997  field(FVVL, "5")
8998  field(FLNK, "$(P):LS01:Z1:INPUT2:ARRAY.PROC")
8999 }
9000 
9001 ##
9002 ## Read the ZONE INPUT setting.
9003 ##
9004 record(subArray, "$(P):LS01:Z1:INPUT2:ARRAY") {
9005  field(SCAN, "Passive")
9006  field(FTVL, "DOUBLE")
9007  field(INP, "$(P):LS01:Z1:ALL2.VAL MS")
9008  field(MALM, "8")
9009  field(NELM, "1")
9010  field(INDX, "6")
9011  field(PREC, "1")
9012  field(FLNK, "$(P):LS01:Z1:INPUT2.PROC")
9013 }
9014 record(mbbi, "$(P):LS01:Z1:INPUT2") {
9015  field(INP, "$(P):LS01:Z1:INPUT2:ARRAY.VAL")
9016  field(SCAN, "Passive")
9017  field(ZRST, "None")
9018  field(ZRVL, "0")
9019  field(ONST, "Input A")
9020  field(ONVL, "1")
9021  field(TWST, "Input B")
9022  field(TWVL, "2")
9023  field(THST, "Input C")
9024  field(THVL, "3")
9025  field(FRST, "Input D")
9026  field(FRVL, "4")
9027  field(FVST, "Input D2")
9028  field(FVVL, "5")
9029  field(SXST, "Input D3")
9030  field(SXVL, "6")
9031  field(SVST, "Input D4")
9032  field(SVVL, "7")
9033  field(EIST, "Input D5")
9034  field(EIVL, "8")
9035  field(FLNK, "$(P):LS01:Z1:RATE2:ARRAY.PROC")
9036 }
9037 
9038 ##
9039 ## Read the ZONE RATE setting.
9040 ##
9041 record(subArray, "$(P):LS01:Z1:RATE2:ARRAY") {
9042  field(SCAN, "Passive")
9043  field(FTVL, "DOUBLE")
9044  field(INP, "$(P):LS01:Z1:ALL2.VAL MS")
9045  field(MALM, "8")
9046  field(NELM, "1")
9047  field(INDX, "7")
9048  field(PREC, "1")
9049  field(FLNK, "$(P):LS01:Z1:RATE2.PROC")
9050 }
9051 record(ai, "$(P):LS01:Z1:RATE2") {
9052  field(SCAN, "Passive")
9053  field(INP, "$(P):LS01:Z1:RATE2:ARRAY.VAL MS")
9054  field(PREC, "1")
9055  field(FLNK, "$(P):LS01:Z1:INITCALC2.PROC")
9056 }
9057 
9058 ##############################################################
9059 ##
9060 ## Populate the write records below with the current values.
9061 ## Only do this once at startup.
9062 ##
9063 ###############################################################
9064 
9065 record(calcout, "$(P):LS01:Z1:INITCALC2") {
9066  field(INPA, "0")
9067  field(CALC, "A")
9068  field(VAL, "0")
9069  field(DOPT, "Use OCAL")
9070  field(OOPT, "When Zero")
9071  field(OCAL, "1")
9072  field(OUT, "$(P):LS01:Z1:INITUB2.PROC")
9073 }
9074 
9075 record(dfanout, "$(P):LS01:Z1:INITUB2") {
9076  field(OMSL, "closed_loop")
9077  field(DOL, "$(P):LS01:Z1:UB2.VAL")
9078  field(OUTA, "$(P):LS01:Z1:UB_S2.VAL PP")
9079  field(FLNK, "$(P):LS01:Z1:INITP2.PROC")
9080 }
9081 record(dfanout, "$(P):LS01:Z1:INITP2") {
9082  field(OMSL, "closed_loop")
9083  field(DOL, "$(P):LS01:Z1:P2.VAL")
9084  field(OUTA, "$(P):LS01:Z1:P_S2.VAL PP")
9085  field(FLNK, "$(P):LS01:Z1:INITI2.PROC")
9086 }
9087 record(dfanout, "$(P):LS01:Z1:INITI2") {
9088  field(OMSL, "closed_loop")
9089  field(DOL, "$(P):LS01:Z1:I2.VAL")
9090  field(OUTA, "$(P):LS01:Z1:I_S2.VAL PP")
9091  field(FLNK, "$(P):LS01:Z1:INITD2.PROC")
9092 }
9093 record(dfanout, "$(P):LS01:Z1:INITD2") {
9094  field(OMSL, "closed_loop")
9095  field(DOL, "$(P):LS01:Z1:D2.VAL")
9096  field(OUTA, "$(P):LS01:Z1:D_S2.VAL PP")
9097  field(FLNK, "$(P):LS01:Z1:INITMOUT2.PROC")
9098 }
9099 record(dfanout, "$(P):LS01:Z1:INITMOUT2") {
9100  field(OMSL, "closed_loop")
9101  field(DOL, "$(P):LS01:Z1:MOUT2.VAL")
9102  field(OUTA, "$(P):LS01:Z1:MOUT_S2.VAL PP")
9103  field(FLNK, "$(P):LS01:Z1:INITRANGE2.PROC")
9104 }
9105 record(dfanout, "$(P):LS01:Z1:INITRANGE2") {
9106  field(OMSL, "closed_loop")
9107  field(DOL, "$(P):LS01:Z1:RANGE2.VAL")
9108  field(OUTA, "$(P):LS01:Z1:RANGE_S2.VAL PP")
9109  field(FLNK, "$(P):LS01:Z1:INITINPUT2.PROC")
9110 }
9111 record(dfanout, "$(P):LS01:Z1:INITINPUT2") {
9112  field(OMSL, "closed_loop")
9113  field(DOL, "$(P):LS01:Z1:INPUT2.VAL")
9114  field(OUTA, "$(P):LS01:Z1:INPUT_S2.VAL PP")
9115  field(FLNK, "$(P):LS01:Z1:INITRATE2.PROC")
9116 }
9117 record(dfanout, "$(P):LS01:Z1:INITRATE2") {
9118  field(OMSL, "closed_loop")
9119  field(DOL, "$(P):LS01:Z1:RATE2.VAL")
9120  field(OUTA, "$(P):LS01:Z1:RATE_S2.VAL PP")
9121  field(FLNK, "$(P):LS01:Z1:INITCOUNT2.PROC")
9122 }
9123 
9124 record(dfanout, "$(P):LS01:Z1:INITCOUNT2") {
9125  field(DOL, "1")
9126  field(OUTA, "$(P):LS01:Z1:INITCALC2.A")
9127 }
9128 
9129 
9130 
9131 #############################################
9132 # Write records. There is a calcout record to
9133 # do the actual write.
9134 #############################################
9135 
9136 ##
9137 ## Set the ZONE upper boundary setting.
9138 ##
9139 record(ao, "$(P):LS01:Z1:UB_S2") {
9140  field(SCAN, "Passive")
9141  field(PREC, "1")
9142  field(SDIS, "$(P):LS01:DISABLE")
9143 }
9144 
9145 ##
9146 ## Set the ZONE P setting.
9147 ##
9148 record(ao, "$(P):LS01:Z1:P_S2") {
9149  field(SCAN, "Passive")
9150  field(PREC, "1")
9151  field(SDIS, "$(P):LS01:DISABLE")
9152 }
9153 
9154 ##
9155 ## Set the ZONE I setting.
9156 ##
9157 record(ao, "$(P):LS01:Z1:I_S2") {
9158  field(SCAN, "Passive")
9159  field(PREC, "1")
9160  field(SDIS, "$(P):LS01:DISABLE")
9161 }
9162 
9163 ##
9164 ## Set the ZONE D setting.
9165 ##
9166 record(ao, "$(P):LS01:Z1:D_S2") {
9167  field(SCAN, "Passive")
9168  field(PREC, "1")
9169  field(SDIS, "$(P):LS01:DISABLE")
9170 }
9171 
9172 ##
9173 ## Set the ZONE MOUT setting.
9174 ##
9175 record(ao, "$(P):LS01:Z1:MOUT_S2") {
9176  field(SCAN, "Passive")
9177  field(PREC, "1")
9178  field(SDIS, "$(P):LS01:DISABLE")
9179 }
9180 
9181 ##
9182 ## Set the ZONE RANGE setting.
9183 ##
9184 record(mbbo, "$(P):LS01:Z1:RANGE_S2") {
9185  field(SCAN, "Passive")
9186  field(ZRST, "Off")
9187  field(ZRVL, "0")
9188  field(ONST, "Range1/Low")
9189  field(ONVL, "1")
9190  field(TWST, "Range2/Medium")
9191  field(TWVL, "2")
9192  field(THST, "Range3/High")
9193  field(THVL, "3")
9194  field(FRST, "Range4")
9195  field(FRVL, "4")
9196  field(FVST, "Range5")
9197  field(FVVL, "5")
9198  field(SDIS, "$(P):LS01:DISABLE")
9199 }
9200 
9201 ##
9202 ## Set the ZONE INPUT setting.
9203 ##
9204 record(mbbo, "$(P):LS01:Z1:INPUT_S2") {
9205  field(ZRST, "None")
9206  field(ZRVL, "0")
9207  field(ONST, "Input A")
9208  field(ONVL, "1")
9209  field(TWST, "Input B")
9210  field(TWVL, "2")
9211  field(THST, "Input C")
9212  field(THVL, "3")
9213  field(FRST, "Input D")
9214  field(FRVL, "4")
9215  field(FVST, "Input D2")
9216  field(FVVL, "5")
9217  field(SXST, "Input D3")
9218  field(SXVL, "6")
9219  field(SVST, "Input D4")
9220  field(SVVL, "7")
9221  field(EIST, "Input D5")
9222  field(EIVL, "8")
9223  field(SDIS, "$(P):LS01:DISABLE")
9224 }
9225 
9226 ##
9227 ## Set the ZONE RATE setting.
9228 ##
9229 record(ao, "$(P):LS01:Z1:RATE_S2") {
9230  field(SCAN, "Passive")
9231  field(PREC, "1")
9232  field(SDIS, "$(P):LS01:DISABLE")
9233 }
9234 
9235 ##
9236 ## Record to write the ZONE parameters.
9237 ##
9238 record(calcout, "$(P):LS01:Z1:SET2") {
9239  field(INPA, "$(P):LS01:Z1:UB_S2")
9240  field(INPB, "$(P):LS01:Z1:P_S2")
9241  field(INPC, "$(P):LS01:Z1:I_S2")
9242  field(INPD, "$(P):LS01:Z1:D_S2")
9243  field(INPE, "$(P):LS01:Z1:MOUT_S2")
9244  field(INPF, "$(P):LS01:Z1:RANGE_S2")
9245  field(INPG, "$(P):LS01:Z1:INPUT_S2")
9246  field(INPH, "$(P):LS01:Z1:RATE_S2")
9247  field(CALC, "0")
9248  field(DTYP, "stream")
9249  field(OUT, "@ls336.proto setZONE(2,1) L0 0")
9250  field(SDIS, "$(P):LS01:DISABLE")
9251  field(FLNK, "$(P):LS01:Z1:ALL2.PROC")
9252 }
9253 
9254 
9255 
9256 
9257 
9258 
9259 
9260 
9261 
9262 
9263 #######################################
9264 #
9265 # Template to support reading and setting
9266 # controller ZONE parameters. It reads the ZONE
9267 # parameters into an array, then uses subArrays to
9268 # extract each parameter.
9269 #
9270 # This template is used by the output template
9271 # and it needs the following macros:
9272 #
9273 # ZONE: zone number
9274 # OUT: output number
9275 #
9276 #######################################
9277 
9278 ##
9279 ## Read the ZONE setting into an array (8 values)
9280 ##
9281 record(waveform, "$(P):LS01:Z2:ALL2") {
9282  field(DTYP, "stream")
9283  field(SDIS, "$(P):LS01:DISABLE_POLL")
9284  field(INP, "@ls336.proto getZONE(2,2) L0 0")
9285  field(SCAN, "Passive")
9286  field(NELM, "8")
9287  field(FTVL, "DOUBLE")
9288  field(PREC, "1")
9289  field(FLNK, "$(P):LS01:Z2:UB2:ARRAY.PROC")
9290 }
9291 
9292 ##
9293 ## Read the ZONE upper boundary setting.
9294 ##
9295 record(subArray, "$(P):LS01:Z2:UB2:ARRAY") {
9296  field(SCAN, "Passive")
9297  field(FTVL, "DOUBLE")
9298  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9299  field(MALM, "8")
9300  field(NELM, "1")
9301  field(INDX, "0")
9302  field(PREC, "1")
9303  field(FLNK, "$(P):LS01:Z2:UB2.PROC")
9304 }
9305 record(ai, "$(P):LS01:Z2:UB2") {
9306  field(SCAN, "Passive")
9307  field(INP, "$(P):LS01:Z2:UB2:ARRAY.VAL MS")
9308  field(PREC, "1")
9309  field(FLNK, "$(P):LS01:Z2:P2:ARRAY.PROC")
9310 }
9311 
9312 ##
9313 ## Read the ZONE P setting.
9314 ##
9315 record(subArray, "$(P):LS01:Z2:P2:ARRAY") {
9316  field(SCAN, "Passive")
9317  field(FTVL, "DOUBLE")
9318  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9319  field(MALM, "8")
9320  field(NELM, "1")
9321  field(INDX, "1")
9322  field(PREC, "1")
9323  field(FLNK, "$(P):LS01:Z2:P2.PROC")
9324 }
9325 record(ai, "$(P):LS01:Z2:P2") {
9326  field(SCAN, "Passive")
9327  field(INP, "$(P):LS01:Z2:P2:ARRAY.VAL MS")
9328  field(PREC, "1")
9329  field(FLNK, "$(P):LS01:Z2:I2:ARRAY.PROC")
9330 }
9331 
9332 ##
9333 ## Read the ZONE I setting.
9334 ##
9335 record(subArray, "$(P):LS01:Z2:I2:ARRAY") {
9336  field(SCAN, "Passive")
9337  field(FTVL, "DOUBLE")
9338  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9339  field(MALM, "8")
9340  field(NELM, "1")
9341  field(INDX, "2")
9342  field(PREC, "1")
9343  field(FLNK, "$(P):LS01:Z2:I2.PROC")
9344 }
9345 record(ai, "$(P):LS01:Z2:I2") {
9346  field(SCAN, "Passive")
9347  field(INP, "$(P):LS01:Z2:I2:ARRAY.VAL MS")
9348  field(PREC, "1")
9349  field(FLNK, "$(P):LS01:Z2:D2:ARRAY.PROC")
9350 }
9351 
9352 ##
9353 ## Read the ZONE D setting.
9354 ##
9355 record(subArray, "$(P):LS01:Z2:D2:ARRAY") {
9356  field(SCAN, "Passive")
9357  field(FTVL, "DOUBLE")
9358  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9359  field(MALM, "8")
9360  field(NELM, "1")
9361  field(INDX, "3")
9362  field(PREC, "1")
9363  field(FLNK, "$(P):LS01:Z2:D2.PROC")
9364 }
9365 record(ai, "$(P):LS01:Z2:D2") {
9366  field(SCAN, "Passive")
9367  field(INP, "$(P):LS01:Z2:D2:ARRAY.VAL MS")
9368  field(PREC, "1")
9369  field(FLNK, "$(P):LS01:Z2:MOUT2:ARRAY.PROC")
9370 }
9371 
9372 ##
9373 ## Read the ZONE MOUT setting.
9374 ##
9375 record(subArray, "$(P):LS01:Z2:MOUT2:ARRAY") {
9376  field(SCAN, "Passive")
9377  field(FTVL, "DOUBLE")
9378  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9379  field(MALM, "8")
9380  field(NELM, "1")
9381  field(INDX, "4")
9382  field(PREC, "1")
9383  field(FLNK, "$(P):LS01:Z2:MOUT2.PROC")
9384 }
9385 record(ai, "$(P):LS01:Z2:MOUT2") {
9386  field(SCAN, "Passive")
9387  field(INP, "$(P):LS01:Z2:MOUT2:ARRAY.VAL MS")
9388  field(PREC, "1")
9389  field(FLNK, "$(P):LS01:Z2:RANGE2:ARRAY.PROC")
9390 }
9391 
9392 ##
9393 ## Read the ZONE RANGE setting.
9394 ##
9395 record(subArray, "$(P):LS01:Z2:RANGE2:ARRAY") {
9396  field(SCAN, "Passive")
9397  field(FTVL, "DOUBLE")
9398  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9399  field(MALM, "8")
9400  field(NELM, "1")
9401  field(INDX, "5")
9402  field(PREC, "1")
9403  field(FLNK, "$(P):LS01:Z2:RANGE2.PROC")
9404 }
9405 record(mbbi, "$(P):LS01:Z2:RANGE2") {
9406  field(INP, "$(P):LS01:Z2:RANGE2:ARRAY.VAL")
9407  field(SCAN, "Passive")
9408  field(ZRST, "Off")
9409  field(ZRVL, "0")
9410  field(ONST, "Range1/Low")
9411  field(ONVL, "1")
9412  field(TWST, "Range2/Medium")
9413  field(TWVL, "2")
9414  field(THST, "Range3/High")
9415  field(THVL, "3")
9416  field(FRST, "Range4")
9417  field(FRVL, "4")
9418  field(FVST, "Range5")
9419  field(FVVL, "5")
9420  field(FLNK, "$(P):LS01:Z2:INPUT2:ARRAY.PROC")
9421 }
9422 
9423 ##
9424 ## Read the ZONE INPUT setting.
9425 ##
9426 record(subArray, "$(P):LS01:Z2:INPUT2:ARRAY") {
9427  field(SCAN, "Passive")
9428  field(FTVL, "DOUBLE")
9429  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9430  field(MALM, "8")
9431  field(NELM, "1")
9432  field(INDX, "6")
9433  field(PREC, "1")
9434  field(FLNK, "$(P):LS01:Z2:INPUT2.PROC")
9435 }
9436 record(mbbi, "$(P):LS01:Z2:INPUT2") {
9437  field(INP, "$(P):LS01:Z2:INPUT2:ARRAY.VAL")
9438  field(SCAN, "Passive")
9439  field(ZRST, "None")
9440  field(ZRVL, "0")
9441  field(ONST, "Input A")
9442  field(ONVL, "1")
9443  field(TWST, "Input B")
9444  field(TWVL, "2")
9445  field(THST, "Input C")
9446  field(THVL, "3")
9447  field(FRST, "Input D")
9448  field(FRVL, "4")
9449  field(FVST, "Input D2")
9450  field(FVVL, "5")
9451  field(SXST, "Input D3")
9452  field(SXVL, "6")
9453  field(SVST, "Input D4")
9454  field(SVVL, "7")
9455  field(EIST, "Input D5")
9456  field(EIVL, "8")
9457  field(FLNK, "$(P):LS01:Z2:RATE2:ARRAY.PROC")
9458 }
9459 
9460 ##
9461 ## Read the ZONE RATE setting.
9462 ##
9463 record(subArray, "$(P):LS01:Z2:RATE2:ARRAY") {
9464  field(SCAN, "Passive")
9465  field(FTVL, "DOUBLE")
9466  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9467  field(MALM, "8")
9468  field(NELM, "1")
9469  field(INDX, "7")
9470  field(PREC, "1")
9471  field(FLNK, "$(P):LS01:Z2:RATE2.PROC")
9472 }
9473 record(ai, "$(P):LS01:Z2:RATE2") {
9474  field(SCAN, "Passive")
9475  field(INP, "$(P):LS01:Z2:RATE2:ARRAY.VAL MS")
9476  field(PREC, "1")
9477  field(FLNK, "$(P):LS01:Z2:INITCALC2.PROC")
9478 }
9479 
9480 ##############################################################
9481 ##
9482 ## Populate the write records below with the current values.
9483 ## Only do this once at startup.
9484 ##
9485 ###############################################################
9486 
9487 record(calcout, "$(P):LS01:Z2:INITCALC2") {
9488  field(INPA, "0")
9489  field(CALC, "A")
9490  field(VAL, "0")
9491  field(DOPT, "Use OCAL")
9492  field(OOPT, "When Zero")
9493  field(OCAL, "1")
9494  field(OUT, "$(P):LS01:Z2:INITUB2.PROC")
9495 }
9496 
9497 record(dfanout, "$(P):LS01:Z2:INITUB2") {
9498  field(OMSL, "closed_loop")
9499  field(DOL, "$(P):LS01:Z2:UB2.VAL")
9500  field(OUTA, "$(P):LS01:Z2:UB_S2.VAL PP")
9501  field(FLNK, "$(P):LS01:Z2:INITP2.PROC")
9502 }
9503 record(dfanout, "$(P):LS01:Z2:INITP2") {
9504  field(OMSL, "closed_loop")
9505  field(DOL, "$(P):LS01:Z2:P2.VAL")
9506  field(OUTA, "$(P):LS01:Z2:P_S2.VAL PP")
9507  field(FLNK, "$(P):LS01:Z2:INITI2.PROC")
9508 }
9509 record(dfanout, "$(P):LS01:Z2:INITI2") {
9510  field(OMSL, "closed_loop")
9511  field(DOL, "$(P):LS01:Z2:I2.VAL")
9512  field(OUTA, "$(P):LS01:Z2:I_S2.VAL PP")
9513  field(FLNK, "$(P):LS01:Z2:INITD2.PROC")
9514 }
9515 record(dfanout, "$(P):LS01:Z2:INITD2") {
9516  field(OMSL, "closed_loop")
9517  field(DOL, "$(P):LS01:Z2:D2.VAL")
9518  field(OUTA, "$(P):LS01:Z2:D_S2.VAL PP")
9519  field(FLNK, "$(P):LS01:Z2:INITMOUT2.PROC")
9520 }
9521 record(dfanout, "$(P):LS01:Z2:INITMOUT2") {
9522  field(OMSL, "closed_loop")
9523  field(DOL, "$(P):LS01:Z2:MOUT2.VAL")
9524  field(OUTA, "$(P):LS01:Z2:MOUT_S2.VAL PP")
9525  field(FLNK, "$(P):LS01:Z2:INITRANGE2.PROC")
9526 }
9527 record(dfanout, "$(P):LS01:Z2:INITRANGE2") {
9528  field(OMSL, "closed_loop")
9529  field(DOL, "$(P):LS01:Z2:RANGE2.VAL")
9530  field(OUTA, "$(P):LS01:Z2:RANGE_S2.VAL PP")
9531  field(FLNK, "$(P):LS01:Z2:INITINPUT2.PROC")
9532 }
9533 record(dfanout, "$(P):LS01:Z2:INITINPUT2") {
9534  field(OMSL, "closed_loop")
9535  field(DOL, "$(P):LS01:Z2:INPUT2.VAL")
9536  field(OUTA, "$(P):LS01:Z2:INPUT_S2.VAL PP")
9537  field(FLNK, "$(P):LS01:Z2:INITRATE2.PROC")
9538 }
9539 record(dfanout, "$(P):LS01:Z2:INITRATE2") {
9540  field(OMSL, "closed_loop")
9541  field(DOL, "$(P):LS01:Z2:RATE2.VAL")
9542  field(OUTA, "$(P):LS01:Z2:RATE_S2.VAL PP")
9543  field(FLNK, "$(P):LS01:Z2:INITCOUNT2.PROC")
9544 }
9545 
9546 record(dfanout, "$(P):LS01:Z2:INITCOUNT2") {
9547  field(DOL, "1")
9548  field(OUTA, "$(P):LS01:Z2:INITCALC2.A")
9549 }
9550 
9551 
9552 
9553 #############################################
9554 # Write records. There is a calcout record to
9555 # do the actual write.
9556 #############################################
9557 
9558 ##
9559 ## Set the ZONE upper boundary setting.
9560 ##
9561 record(ao, "$(P):LS01:Z2:UB_S2") {
9562  field(SCAN, "Passive")
9563  field(PREC, "1")
9564  field(SDIS, "$(P):LS01:DISABLE")
9565 }
9566 
9567 ##
9568 ## Set the ZONE P setting.
9569 ##
9570 record(ao, "$(P):LS01:Z2:P_S2") {
9571  field(SCAN, "Passive")
9572  field(PREC, "1")
9573  field(SDIS, "$(P):LS01:DISABLE")
9574 }
9575 
9576 ##
9577 ## Set the ZONE I setting.
9578 ##
9579 record(ao, "$(P):LS01:Z2:I_S2") {
9580  field(SCAN, "Passive")
9581  field(PREC, "1")
9582  field(SDIS, "$(P):LS01:DISABLE")
9583 }
9584 
9585 ##
9586 ## Set the ZONE D setting.
9587 ##
9588 record(ao, "$(P):LS01:Z2:D_S2") {
9589  field(SCAN, "Passive")
9590  field(PREC, "1")
9591  field(SDIS, "$(P):LS01:DISABLE")
9592 }
9593 
9594 ##
9595 ## Set the ZONE MOUT setting.
9596 ##
9597 record(ao, "$(P):LS01:Z2:MOUT_S2") {
9598  field(SCAN, "Passive")
9599  field(PREC, "1")
9600  field(SDIS, "$(P):LS01:DISABLE")
9601 }
9602 
9603 ##
9604 ## Set the ZONE RANGE setting.
9605 ##
9606 record(mbbo, "$(P):LS01:Z2:RANGE_S2") {
9607  field(SCAN, "Passive")
9608  field(ZRST, "Off")
9609  field(ZRVL, "0")
9610  field(ONST, "Range1/Low")
9611  field(ONVL, "1")
9612  field(TWST, "Range2/Medium")
9613  field(TWVL, "2")
9614  field(THST, "Range3/High")
9615  field(THVL, "3")
9616  field(FRST, "Range4")
9617  field(FRVL, "4")
9618  field(FVST, "Range5")
9619  field(FVVL, "5")
9620  field(SDIS, "$(P):LS01:DISABLE")
9621 }
9622 
9623 ##
9624 ## Set the ZONE INPUT setting.
9625 ##
9626 record(mbbo, "$(P):LS01:Z2:INPUT_S2") {
9627  field(ZRST, "None")
9628  field(ZRVL, "0")
9629  field(ONST, "Input A")
9630  field(ONVL, "1")
9631  field(TWST, "Input B")
9632  field(TWVL, "2")
9633  field(THST, "Input C")
9634  field(THVL, "3")
9635  field(FRST, "Input D")
9636  field(FRVL, "4")
9637  field(FVST, "Input D2")
9638  field(FVVL, "5")
9639  field(SXST, "Input D3")
9640  field(SXVL, "6")
9641  field(SVST, "Input D4")
9642  field(SVVL, "7")
9643  field(EIST, "Input D5")
9644  field(EIVL, "8")
9645  field(SDIS, "$(P):LS01:DISABLE")
9646 }
9647 
9648 ##
9649 ## Set the ZONE RATE setting.
9650 ##
9651 record(ao, "$(P):LS01:Z2:RATE_S2") {
9652  field(SCAN, "Passive")
9653  field(PREC, "1")
9654  field(SDIS, "$(P):LS01:DISABLE")
9655 }
9656 
9657 ##
9658 ## Record to write the ZONE parameters.
9659 ##
9660 record(calcout, "$(P):LS01:Z2:SET2") {
9661  field(INPA, "$(P):LS01:Z2:UB_S2")
9662  field(INPB, "$(P):LS01:Z2:P_S2")
9663  field(INPC, "$(P):LS01:Z2:I_S2")
9664  field(INPD, "$(P):LS01:Z2:D_S2")
9665  field(INPE, "$(P):LS01:Z2:MOUT_S2")
9666  field(INPF, "$(P):LS01:Z2:RANGE_S2")
9667  field(INPG, "$(P):LS01:Z2:INPUT_S2")
9668  field(INPH, "$(P):LS01:Z2:RATE_S2")
9669  field(CALC, "0")
9670  field(DTYP, "stream")
9671  field(OUT, "@ls336.proto setZONE(2,2) L0 0")
9672  field(SDIS, "$(P):LS01:DISABLE")
9673  field(FLNK, "$(P):LS01:Z2:ALL2.PROC")
9674 }
9675 
9676 
9677 
9678 
9679 
9680 
9681 
9682 
9683 
9684 
9685 #######################################
9686 #
9687 # Template to support reading and setting
9688 # controller ZONE parameters. It reads the ZONE
9689 # parameters into an array, then uses subArrays to
9690 # extract each parameter.
9691 #
9692 # This template is used by the output template
9693 # and it needs the following macros:
9694 #
9695 # ZONE: zone number
9696 # OUT: output number
9697 #
9698 #######################################
9699 
9700 ##
9701 ## Read the ZONE setting into an array (8 values)
9702 ##
9703 record(waveform, "$(P):LS01:Z2:ALL2") {
9704  field(DTYP, "stream")
9705  field(SDIS, "$(P):LS01:DISABLE_POLL")
9706  field(INP, "@ls336.proto getZONE(2,2) L0 0")
9707  field(SCAN, "Passive")
9708  field(NELM, "8")
9709  field(FTVL, "DOUBLE")
9710  field(PREC, "1")
9711  field(FLNK, "$(P):LS01:Z2:UB2:ARRAY.PROC")
9712 }
9713 
9714 ##
9715 ## Read the ZONE upper boundary setting.
9716 ##
9717 record(subArray, "$(P):LS01:Z2:UB2:ARRAY") {
9718  field(SCAN, "Passive")
9719  field(FTVL, "DOUBLE")
9720  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9721  field(MALM, "8")
9722  field(NELM, "1")
9723  field(INDX, "0")
9724  field(PREC, "1")
9725  field(FLNK, "$(P):LS01:Z2:UB2.PROC")
9726 }
9727 record(ai, "$(P):LS01:Z2:UB2") {
9728  field(SCAN, "Passive")
9729  field(INP, "$(P):LS01:Z2:UB2:ARRAY.VAL MS")
9730  field(PREC, "1")
9731  field(FLNK, "$(P):LS01:Z2:P2:ARRAY.PROC")
9732 }
9733 
9734 ##
9735 ## Read the ZONE P setting.
9736 ##
9737 record(subArray, "$(P):LS01:Z2:P2:ARRAY") {
9738  field(SCAN, "Passive")
9739  field(FTVL, "DOUBLE")
9740  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9741  field(MALM, "8")
9742  field(NELM, "1")
9743  field(INDX, "1")
9744  field(PREC, "1")
9745  field(FLNK, "$(P):LS01:Z2:P2.PROC")
9746 }
9747 record(ai, "$(P):LS01:Z2:P2") {
9748  field(SCAN, "Passive")
9749  field(INP, "$(P):LS01:Z2:P2:ARRAY.VAL MS")
9750  field(PREC, "1")
9751  field(FLNK, "$(P):LS01:Z2:I2:ARRAY.PROC")
9752 }
9753 
9754 ##
9755 ## Read the ZONE I setting.
9756 ##
9757 record(subArray, "$(P):LS01:Z2:I2:ARRAY") {
9758  field(SCAN, "Passive")
9759  field(FTVL, "DOUBLE")
9760  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9761  field(MALM, "8")
9762  field(NELM, "1")
9763  field(INDX, "2")
9764  field(PREC, "1")
9765  field(FLNK, "$(P):LS01:Z2:I2.PROC")
9766 }
9767 record(ai, "$(P):LS01:Z2:I2") {
9768  field(SCAN, "Passive")
9769  field(INP, "$(P):LS01:Z2:I2:ARRAY.VAL MS")
9770  field(PREC, "1")
9771  field(FLNK, "$(P):LS01:Z2:D2:ARRAY.PROC")
9772 }
9773 
9774 ##
9775 ## Read the ZONE D setting.
9776 ##
9777 record(subArray, "$(P):LS01:Z2:D2:ARRAY") {
9778  field(SCAN, "Passive")
9779  field(FTVL, "DOUBLE")
9780  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9781  field(MALM, "8")
9782  field(NELM, "1")
9783  field(INDX, "3")
9784  field(PREC, "1")
9785  field(FLNK, "$(P):LS01:Z2:D2.PROC")
9786 }
9787 record(ai, "$(P):LS01:Z2:D2") {
9788  field(SCAN, "Passive")
9789  field(INP, "$(P):LS01:Z2:D2:ARRAY.VAL MS")
9790  field(PREC, "1")
9791  field(FLNK, "$(P):LS01:Z2:MOUT2:ARRAY.PROC")
9792 }
9793 
9794 ##
9795 ## Read the ZONE MOUT setting.
9796 ##
9797 record(subArray, "$(P):LS01:Z2:MOUT2:ARRAY") {
9798  field(SCAN, "Passive")
9799  field(FTVL, "DOUBLE")
9800  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9801  field(MALM, "8")
9802  field(NELM, "1")
9803  field(INDX, "4")
9804  field(PREC, "1")
9805  field(FLNK, "$(P):LS01:Z2:MOUT2.PROC")
9806 }
9807 record(ai, "$(P):LS01:Z2:MOUT2") {
9808  field(SCAN, "Passive")
9809  field(INP, "$(P):LS01:Z2:MOUT2:ARRAY.VAL MS")
9810  field(PREC, "1")
9811  field(FLNK, "$(P):LS01:Z2:RANGE2:ARRAY.PROC")
9812 }
9813 
9814 ##
9815 ## Read the ZONE RANGE setting.
9816 ##
9817 record(subArray, "$(P):LS01:Z2:RANGE2:ARRAY") {
9818  field(SCAN, "Passive")
9819  field(FTVL, "DOUBLE")
9820  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9821  field(MALM, "8")
9822  field(NELM, "1")
9823  field(INDX, "5")
9824  field(PREC, "1")
9825  field(FLNK, "$(P):LS01:Z2:RANGE2.PROC")
9826 }
9827 record(mbbi, "$(P):LS01:Z2:RANGE2") {
9828  field(INP, "$(P):LS01:Z2:RANGE2:ARRAY.VAL")
9829  field(SCAN, "Passive")
9830  field(ZRST, "Off")
9831  field(ZRVL, "0")
9832  field(ONST, "Range1/Low")
9833  field(ONVL, "1")
9834  field(TWST, "Range2/Medium")
9835  field(TWVL, "2")
9836  field(THST, "Range3/High")
9837  field(THVL, "3")
9838  field(FRST, "Range4")
9839  field(FRVL, "4")
9840  field(FVST, "Range5")
9841  field(FVVL, "5")
9842  field(FLNK, "$(P):LS01:Z2:INPUT2:ARRAY.PROC")
9843 }
9844 
9845 ##
9846 ## Read the ZONE INPUT setting.
9847 ##
9848 record(subArray, "$(P):LS01:Z2:INPUT2:ARRAY") {
9849  field(SCAN, "Passive")
9850  field(FTVL, "DOUBLE")
9851  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9852  field(MALM, "8")
9853  field(NELM, "1")
9854  field(INDX, "6")
9855  field(PREC, "1")
9856  field(FLNK, "$(P):LS01:Z2:INPUT2.PROC")
9857 }
9858 record(mbbi, "$(P):LS01:Z2:INPUT2") {
9859  field(INP, "$(P):LS01:Z2:INPUT2:ARRAY.VAL")
9860  field(SCAN, "Passive")
9861  field(ZRST, "None")
9862  field(ZRVL, "0")
9863  field(ONST, "Input A")
9864  field(ONVL, "1")
9865  field(TWST, "Input B")
9866  field(TWVL, "2")
9867  field(THST, "Input C")
9868  field(THVL, "3")
9869  field(FRST, "Input D")
9870  field(FRVL, "4")
9871  field(FVST, "Input D2")
9872  field(FVVL, "5")
9873  field(SXST, "Input D3")
9874  field(SXVL, "6")
9875  field(SVST, "Input D4")
9876  field(SVVL, "7")
9877  field(EIST, "Input D5")
9878  field(EIVL, "8")
9879  field(FLNK, "$(P):LS01:Z2:RATE2:ARRAY.PROC")
9880 }
9881 
9882 ##
9883 ## Read the ZONE RATE setting.
9884 ##
9885 record(subArray, "$(P):LS01:Z2:RATE2:ARRAY") {
9886  field(SCAN, "Passive")
9887  field(FTVL, "DOUBLE")
9888  field(INP, "$(P):LS01:Z2:ALL2.VAL MS")
9889  field(MALM, "8")
9890  field(NELM, "1")
9891  field(INDX, "7")
9892  field(PREC, "1")
9893  field(FLNK, "$(P):LS01:Z2:RATE2.PROC")
9894 }
9895 record(ai, "$(P):LS01:Z2:RATE2") {
9896  field(SCAN, "Passive")
9897  field(INP, "$(P):LS01:Z2:RATE2:ARRAY.VAL MS")
9898  field(PREC, "1")
9899  field(FLNK, "$(P):LS01:Z2:INITCALC2.PROC")
9900 }
9901 
9902 ##############################################################
9903 ##
9904 ## Populate the write records below with the current values.
9905 ## Only do this once at startup.
9906 ##
9907 ###############################################################
9908 
9909 record(calcout, "$(P):LS01:Z2:INITCALC2") {
9910  field(INPA, "0")
9911  field(CALC, "A")
9912  field(VAL, "0")
9913  field(DOPT, "Use OCAL")
9914  field(OOPT, "When Zero")
9915  field(OCAL, "1")
9916  field(OUT, "$(P):LS01:Z2:INITUB2.PROC")
9917 }
9918 
9919 record(dfanout, "$(P):LS01:Z2:INITUB2") {
9920  field(OMSL, "closed_loop")
9921  field(DOL, "$(P):LS01:Z2:UB2.VAL")
9922  field(OUTA, "$(P):LS01:Z2:UB_S2.VAL PP")
9923  field(FLNK, "$(P):LS01:Z2:INITP2.PROC")
9924 }
9925 record(dfanout, "$(P):LS01:Z2:INITP2") {
9926  field(OMSL, "closed_loop")
9927  field(DOL, "$(P):LS01:Z2:P2.VAL")
9928  field(OUTA, "$(P):LS01:Z2:P_S2.VAL PP")
9929  field(FLNK, "$(P):LS01:Z2:INITI2.PROC")
9930 }
9931 record(dfanout, "$(P):LS01:Z2:INITI2") {
9932  field(OMSL, "closed_loop")
9933  field(DOL, "$(P):LS01:Z2:I2.VAL")
9934  field(OUTA, "$(P):LS01:Z2:I_S2.VAL PP")
9935  field(FLNK, "$(P):LS01:Z2:INITD2.PROC")
9936 }
9937 record(dfanout, "$(P):LS01:Z2:INITD2") {
9938  field(OMSL, "closed_loop")
9939  field(DOL, "$(P):LS01:Z2:D2.VAL")
9940  field(OUTA, "$(P):LS01:Z2:D_S2.VAL PP")
9941  field(FLNK, "$(P):LS01:Z2:INITMOUT2.PROC")
9942 }
9943 record(dfanout, "$(P):LS01:Z2:INITMOUT2") {
9944  field(OMSL, "closed_loop")
9945  field(DOL, "$(P):LS01:Z2:MOUT2.VAL")
9946  field(OUTA, "$(P):LS01:Z2:MOUT_S2.VAL PP")
9947  field(FLNK, "$(P):LS01:Z2:INITRANGE2.PROC")
9948 }
9949 record(dfanout, "$(P):LS01:Z2:INITRANGE2") {
9950  field(OMSL, "closed_loop")
9951  field(DOL, "$(P):LS01:Z2:RANGE2.VAL")
9952  field(OUTA, "$(P):LS01:Z2:RANGE_S2.VAL PP")
9953  field(FLNK, "$(P):LS01:Z2:INITINPUT2.PROC")
9954 }
9955 record(dfanout, "$(P):LS01:Z2:INITINPUT2") {
9956  field(OMSL, "closed_loop")
9957  field(DOL, "$(P):LS01:Z2:INPUT2.VAL")
9958  field(OUTA, "$(P):LS01:Z2:INPUT_S2.VAL PP")
9959  field(FLNK, "$(P):LS01:Z2:INITRATE2.PROC")
9960 }
9961 record(dfanout, "$(P):LS01:Z2:INITRATE2") {
9962  field(OMSL, "closed_loop")
9963  field(DOL, "$(P):LS01:Z2:RATE2.VAL")
9964  field(OUTA, "$(P):LS01:Z2:RATE_S2.VAL PP")
9965  field(FLNK, "$(P):LS01:Z2:INITCOUNT2.PROC")
9966 }
9967 
9968 record(dfanout, "$(P):LS01:Z2:INITCOUNT2") {
9969  field(DOL, "1")
9970  field(OUTA, "$(P):LS01:Z2:INITCALC2.A")
9971 }
9972 
9973 
9974 
9975 #############################################
9976 # Write records. There is a calcout record to
9977 # do the actual write.
9978 #############################################
9979 
9980 ##
9981 ## Set the ZONE upper boundary setting.
9982 ##
9983 record(ao, "$(P):LS01:Z2:UB_S2") {
9984  field(SCAN, "Passive")
9985  field(PREC, "1")
9986  field(SDIS, "$(P):LS01:DISABLE")
9987 }
9988 
9989 ##
9990 ## Set the ZONE P setting.
9991 ##
9992 record(ao, "$(P):LS01:Z2:P_S2") {
9993  field(SCAN, "Passive")
9994  field(PREC, "1")
9995  field(SDIS, "$(P):LS01:DISABLE")
9996 }
9997 
9998 ##
9999 ## Set the ZONE I setting.
10000 ##
10001 record(ao, "$(P):LS01:Z2:I_S2") {
10002  field(SCAN, "Passive")
10003  field(PREC, "1")
10004  field(SDIS, "$(P):LS01:DISABLE")
10005 }
10006 
10007 ##
10008 ## Set the ZONE D setting.
10009 ##
10010 record(ao, "$(P):LS01:Z2:D_S2") {
10011  field(SCAN, "Passive")
10012  field(PREC, "1")
10013  field(SDIS, "$(P):LS01:DISABLE")
10014 }
10015 
10016 ##
10017 ## Set the ZONE MOUT setting.
10018 ##
10019 record(ao, "$(P):LS01:Z2:MOUT_S2") {
10020  field(SCAN, "Passive")
10021  field(PREC, "1")
10022  field(SDIS, "$(P):LS01:DISABLE")
10023 }
10024 
10025 ##
10026 ## Set the ZONE RANGE setting.
10027 ##
10028 record(mbbo, "$(P):LS01:Z2:RANGE_S2") {
10029  field(SCAN, "Passive")
10030  field(ZRST, "Off")
10031  field(ZRVL, "0")
10032  field(ONST, "Range1/Low")
10033  field(ONVL, "1")
10034  field(TWST, "Range2/Medium")
10035  field(TWVL, "2")
10036  field(THST, "Range3/High")
10037  field(THVL, "3")
10038  field(FRST, "Range4")
10039  field(FRVL, "4")
10040  field(FVST, "Range5")
10041  field(FVVL, "5")
10042  field(SDIS, "$(P):LS01:DISABLE")
10043 }
10044 
10045 ##
10046 ## Set the ZONE INPUT setting.
10047 ##
10048 record(mbbo, "$(P):LS01:Z2:INPUT_S2") {
10049  field(ZRST, "None")
10050  field(ZRVL, "0")
10051  field(ONST, "Input A")
10052  field(ONVL, "1")
10053  field(TWST, "Input B")
10054  field(TWVL, "2")
10055  field(THST, "Input C")
10056  field(THVL, "3")
10057  field(FRST, "Input D")
10058  field(FRVL, "4")
10059  field(FVST, "Input D2")
10060  field(FVVL, "5")
10061  field(SXST, "Input D3")
10062  field(SXVL, "6")
10063  field(SVST, "Input D4")
10064  field(SVVL, "7")
10065  field(EIST, "Input D5")
10066  field(EIVL, "8")
10067  field(SDIS, "$(P):LS01:DISABLE")
10068 }
10069 
10070 ##
10071 ## Set the ZONE RATE setting.
10072 ##
10073 record(ao, "$(P):LS01:Z2:RATE_S2") {
10074  field(SCAN, "Passive")
10075  field(PREC, "1")
10076  field(SDIS, "$(P):LS01:DISABLE")
10077 }
10078 
10079 ##
10080 ## Record to write the ZONE parameters.
10081 ##
10082 record(calcout, "$(P):LS01:Z2:SET2") {
10083  field(INPA, "$(P):LS01:Z2:UB_S2")
10084  field(INPB, "$(P):LS01:Z2:P_S2")
10085  field(INPC, "$(P):LS01:Z2:I_S2")
10086  field(INPD, "$(P):LS01:Z2:D_S2")
10087  field(INPE, "$(P):LS01:Z2:MOUT_S2")
10088  field(INPF, "$(P):LS01:Z2:RANGE_S2")
10089  field(INPG, "$(P):LS01:Z2:INPUT_S2")
10090  field(INPH, "$(P):LS01:Z2:RATE_S2")
10091  field(CALC, "0")
10092  field(DTYP, "stream")
10093  field(OUT, "@ls336.proto setZONE(2,2) L0 0")
10094  field(SDIS, "$(P):LS01:DISABLE")
10095  field(FLNK, "$(P):LS01:Z2:ALL2.PROC")
10096 }
10097 
10098 
10099 
10100 
10101 
10102 
10103 
10104 
10105 
10106 
10107 #######################################
10108 #
10109 # Template to support reading and setting
10110 # controller ZONE parameters. It reads the ZONE
10111 # parameters into an array, then uses subArrays to
10112 # extract each parameter.
10113 #
10114 # This template is used by the output template
10115 # and it needs the following macros:
10116 #
10117 # ZONE: zone number
10118 # OUT: output number
10119 #
10120 #######################################
10121 
10122 ##
10123 ## Read the ZONE setting into an array (8 values)
10124 ##
10125 record(waveform, "$(P):LS01:Z3:ALL2") {
10126  field(DTYP, "stream")
10127  field(SDIS, "$(P):LS01:DISABLE_POLL")
10128  field(INP, "@ls336.proto getZONE(2,3) L0 0")
10129  field(SCAN, "Passive")
10130  field(NELM, "8")
10131  field(FTVL, "DOUBLE")
10132  field(PREC, "1")
10133  field(FLNK, "$(P):LS01:Z3:UB2:ARRAY.PROC")
10134 }
10135 
10136 ##
10137 ## Read the ZONE upper boundary setting.
10138 ##
10139 record(subArray, "$(P):LS01:Z3:UB2:ARRAY") {
10140  field(SCAN, "Passive")
10141  field(FTVL, "DOUBLE")
10142  field(INP, "$(P):LS01:Z3:ALL2.VAL MS")
10143  field(MALM, "8")
10144  field(NELM, "1")
10145  field(INDX, "0")
10146  field(PREC, "1")
10147  field(FLNK, "$(P):LS01:Z3:UB2.PROC")
10148 }
10149 record(ai, "$(P):LS01:Z3:UB2") {
10150  field(SCAN, "Passive")
10151  field(INP, "$(P):LS01:Z3:UB2:ARRAY.VAL MS")
10152  field(PREC, "1")
10153  field(FLNK, "$(P):LS01:Z3:P2:ARRAY.PROC")
10154 }
10155 
10156 ##
10157 ## Read the ZONE P setting.
10158 ##
10159 record(subArray, "$(P):LS01:Z3:P2:ARRAY") {
10160  field(SCAN, "Passive")
10161  field(FTVL, "DOUBLE")
10162  field(INP, "$(P):LS01:Z3:ALL2.VAL MS")
10163  field(MALM, "8")
10164  field(NELM, "1")
10165  field(INDX, "1")
10166  field(PREC, "1")
10167  field(FLNK, "$(P):LS01:Z3:P2.PROC")
10168 }
10169 record(ai, "$(P):LS01:Z3:P2") {
10170  field(SCAN, "Passive")
10171  field(INP, "$(P):LS01:Z3:P2:ARRAY.VAL MS")
10172  field(PREC, "1")
10173  field(FLNK, "$(P):LS01:Z3:I2:ARRAY.PROC")
10174 }
10175 
10176 ##
10177 ## Read the ZONE I setting.
10178 ##
10179 record(subArray, "$(P):LS01:Z3:I2:ARRAY") {
10180  field(SCAN, "Passive")
10181  field(FTVL, "DOUBLE")
10182  field(INP, "$(P):LS01:Z3:ALL2.VAL MS")
10183  field(MALM, "8")
10184  field(NELM, "1")
10185  field(INDX, "2")
10186  field(PREC, "1")
10187  field(FLNK, "$(P):LS01:Z3:I2.PROC")
10188 }
10189 record(ai, "$(P):LS01:Z3:I2") {
10190  field(SCAN, "Passive")
10191  field(INP, "$(P):LS01:Z3:I2:ARRAY.VAL MS")
10192  field(PREC, "1")
10193  field(FLNK, "$(P):LS01:Z3:D2:ARRAY.PROC")
10194 }
10195 
10196 ##
10197 ## Read the ZONE D setting.
10198 ##
10199 record(subArray, "$(P):LS01:Z3:D2:ARRAY") {
10200  field(SCAN, "Passive")
10201  field(FTVL, "DOUBLE")
10202  field(INP, "$(P):LS01:Z3:ALL2.VAL MS")
10203  field(MALM, "8")
10204  field(NELM, "1")
10205  field(INDX, "3")
10206  field(PREC, "1")
10207  field(FLNK, "$(P):LS01:Z3:D2.PROC")
10208 }
10209 record(ai, "$(P):LS01:Z3:D2") {
10210  field(SCAN, "Passive")
10211  field(INP, "$(P):LS01:Z3:D2:ARRAY.VAL MS")
10212  field(PREC, "1")
10213  field(FLNK, "$(P):LS01:Z3:MOUT2:ARRAY.PROC")
10214 }
10215 
10216 ##
10217 ## Read the ZONE MOUT setting.
10218 ##
10219 record(subArray, "$(P):LS01:Z3:MOUT2:ARRAY") {
10220  field(SCAN, "Passive")
10221  field(FTVL, "DOUBLE")
10222  field(INP, "$(P):LS01:Z3:ALL2.VAL MS")
10223  field(MALM, "8")
10224  field(NELM, "1")
10225  field(INDX, "4")
10226  field(PREC, "1")
10227  field(FLNK, "$(P):LS01:Z3:MOUT2.PROC")
10228 }
10229 record(ai, "$(P):LS01:Z3:MOUT2") {
10230  field(SCAN, "Passive")
10231  field(INP, "$(P):LS01:Z3:MOUT2:ARRAY.VAL MS")
10232  field(PREC, "1")
10233  field(FLNK, "$(P):LS01:Z3:RANGE2:ARRAY.PROC")
10234 }
10235 
10236 ##
10237 ## Read the ZONE RANGE setting.
10238 ##
10239 record(subArray, "$(P):LS01:Z3:RANGE2:ARRAY") {
10240  field(SCAN, "Passive")
10241  field(FTVL, "DOUBLE")
10242  field(INP, "$(P):LS01:Z3:ALL2.VAL MS")
10243  field(MALM, "8")
10244  field(NELM, "1")
10245  field(INDX, "5")
10246  field(PREC, "1")
10247  field(FLNK, "$(P):LS01:Z3:RANGE2.PROC")
10248 }
10249 record(mbbi, "$(P):LS01:Z3:RANGE2") {
10250  field(INP, "$(P):LS01:Z3:RANGE2:ARRAY.VAL")
10251  field(SCAN, "Passive")
10252  field(ZRST, "Off")
10253  field(ZRVL, "0")
10254  field(ONST, "Range1/Low")
10255  field(ONVL, "1")
10256  field(TWST, "Range2/Medium")
10257  field(TWVL, "2")
10258  field(THST, "Range3/High")
10259  field(THVL, "3")
10260  field(FRST, "Range4")
10261  field(FRVL, "4")
10262  field(FVST, "Range5")
10263  field(FVVL, "5")
10264  field(FLNK, "$(P):LS01:Z3:INPUT2:ARRAY.PROC")
10265 }
10266 
10267 ##
10268 ## Read the ZONE INPUT setting.
10269 ##
10270 record(subArray, "$(P):LS01:Z3:INPUT2:ARRAY") {
10271  field(SCAN, "Passive")
10272  field(FTVL, "DOUBLE")
10273  field(INP, "$(P):LS01:Z3:ALL2.VAL MS")
10274  field(MALM, "8")
10275  field(NELM, "1")
10276  field(INDX, "6")
10277  field(PREC, "1")
10278  field(FLNK, "$(P):LS01:Z3:INPUT2.PROC")
10279 }
10280 record(mbbi, "$(P):LS01:Z3:INPUT2") {
10281  field(INP, "$(P):LS01:Z3:INPUT2:ARRAY.VAL")
10282  field(SCAN, "Passive")
10283  field(ZRST, "None")
10284  field(ZRVL, "0")
10285  field(ONST, "Input A")
10286  field(ONVL, "1")
10287  field(TWST, "Input B")
10288  field(TWVL, "2")
10289  field(THST, "Input C")
10290  field(THVL, "3")
10291  field(FRST, "Input D")
10292  field(FRVL, "4")
10293  field(FVST, "Input D2")
10294  field(FVVL, "5")
10295  field(SXST, "Input D3")
10296  field(SXVL, "6")
10297  field(SVST, "Input D4")
10298  field(SVVL, "7")
10299  field(EIST, "Input D5")
10300  field(EIVL, "8")
10301  field(FLNK, "$(P):LS01:Z3:RATE2:ARRAY.PROC")
10302 }
10303 
10304 ##
10305 ## Read the ZONE RATE setting.
10306 ##
10307 record(subArray, "$(P):LS01:Z3:RATE2:ARRAY") {
10308  field(SCAN, "Passive")
10309  field(FTVL, "DOUBLE")
10310  field(INP, "$(P):LS01:Z3:ALL2.VAL MS")
10311  field(MALM, "8")
10312  field(NELM, "1")
10313  field(INDX, "7")
10314  field(PREC, "1")
10315  field(FLNK, "$(P):LS01:Z3:RATE2.PROC")
10316 }
10317 record(ai, "$(P):LS01:Z3:RATE2") {
10318  field(SCAN, "Passive")
10319  field(INP, "$(P):LS01:Z3:RATE2:ARRAY.VAL MS")
10320  field(PREC, "1")
10321  field(FLNK, "$(P):LS01:Z3:INITCALC2.PROC")
10322 }
10323 
10324 ##############################################################
10325 ##
10326 ## Populate the write records below with the current values.
10327 ## Only do this once at startup.
10328 ##
10329 ###############################################################
10330 
10331 record(calcout, "$(P):LS01:Z3:INITCALC2") {
10332  field(INPA, "0")
10333  field(CALC, "A")
10334  field(VAL, "0")
10335  field(DOPT, "Use OCAL")
10336  field(OOPT, "When Zero")
10337  field(OCAL, "1")
10338  field(OUT, "$(P):LS01:Z3:INITUB2.PROC")
10339 }
10340 
10341 record(dfanout, "$(P):LS01:Z3:INITUB2") {
10342  field(OMSL, "closed_loop")
10343  field(DOL, "$(P):LS01:Z3:UB2.VAL")
10344  field(OUTA, "$(P):LS01:Z3:UB_S2.VAL PP")
10345  field(FLNK, "$(P):LS01:Z3:INITP2.PROC")
10346 }
10347 record(dfanout, "$(P):LS01:Z3:INITP2") {
10348  field(OMSL, "closed_loop")
10349  field(DOL, "$(P):LS01:Z3:P2.VAL")
10350  field(OUTA, "$(P):LS01:Z3:P_S2.VAL PP")
10351  field(FLNK, "$(P):LS01:Z3:INITI2.PROC")
10352 }
10353 record(dfanout, "$(P):LS01:Z3:INITI2") {
10354  field(OMSL, "closed_loop")
10355  field(DOL, "$(P):LS01:Z3:I2.VAL")
10356  field(OUTA, "$(P):LS01:Z3:I_S2.VAL PP")
10357  field(FLNK, "$(P):LS01:Z3:INITD2.PROC")
10358 }
10359 record(dfanout, "$(P):LS01:Z3:INITD2") {
10360  field(OMSL, "closed_loop")
10361  field(DOL, "$(P):LS01:Z3:D2.VAL")
10362  field(OUTA, "$(P):LS01:Z3:D_S2.VAL PP")
10363  field(FLNK, "$(P):LS01:Z3:INITMOUT2.PROC")
10364 }
10365 record(dfanout, "$(P):LS01:Z3:INITMOUT2") {
10366  field(OMSL, "closed_loop")
10367  field(DOL, "$(P):LS01:Z3:MOUT2.VAL")
10368  field(OUTA, "$(P):LS01:Z3:MOUT_S2.VAL PP")
10369  field(FLNK, "$(P):LS01:Z3:INITRANGE2.PROC")
10370 }
10371 record(dfanout, "$(P):LS01:Z3:INITRANGE2") {
10372  field(OMSL, "closed_loop")
10373  field(DOL, "$(P):LS01:Z3:RANGE2.VAL")
10374  field(OUTA, "$(P):LS01:Z3:RANGE_S2.VAL PP")
10375  field(FLNK, "$(P):LS01:Z3:INITINPUT2.PROC")
10376 }
10377 record(dfanout, "$(P):LS01:Z3:INITINPUT2") {
10378  field(OMSL, "closed_loop")
10379  field(DOL, "$(P):LS01:Z3:INPUT2.VAL")
10380  field(OUTA, "$(P):LS01:Z3:INPUT_S2.VAL PP")
10381  field(FLNK, "$(P):LS01:Z3:INITRATE2.PROC")
10382 }
10383 record(dfanout, "$(P):LS01:Z3:INITRATE2") {
10384  field(OMSL, "closed_loop")
10385  field(DOL, "$(P):LS01:Z3:RATE2.VAL")
10386  field(OUTA, "$(P):LS01:Z3:RATE_S2.VAL PP")
10387  field(FLNK, "$(P):LS01:Z3:INITCOUNT2.PROC")
10388 }
10389 
10390 record(dfanout, "$(P):LS01:Z3:INITCOUNT2") {
10391  field(DOL, "1")
10392  field(OUTA, "$(P):LS01:Z3:INITCALC2.A")
10393 }
10394 
10395 
10396 
10397 #############################################
10398 # Write records. There is a calcout record to
10399 # do the actual write.
10400 #############################################
10401 
10402 ##
10403 ## Set the ZONE upper boundary setting.
10404 ##
10405 record(ao, "$(P):LS01:Z3:UB_S2") {
10406  field(SCAN, "Passive")
10407  field(PREC, "1")
10408  field(SDIS, "$(P):LS01:DISABLE")
10409 }
10410 
10411 ##
10412 ## Set the ZONE P setting.
10413 ##
10414 record(ao, "$(P):LS01:Z3:P_S2") {
10415  field(SCAN, "Passive")
10416  field(PREC, "1")
10417  field(SDIS, "$(P):LS01:DISABLE")
10418 }
10419 
10420 ##
10421 ## Set the ZONE I setting.
10422 ##
10423 record(ao, "$(P):LS01:Z3:I_S2") {
10424  field(SCAN, "Passive")
10425  field(PREC, "1")
10426  field(SDIS, "$(P):LS01:DISABLE")
10427 }
10428 
10429 ##
10430 ## Set the ZONE D setting.
10431 ##
10432 record(ao, "$(P):LS01:Z3:D_S2") {
10433  field(SCAN, "Passive")
10434  field(PREC, "1")
10435  field(SDIS, "$(P):LS01:DISABLE")
10436 }
10437 
10438 ##
10439 ## Set the ZONE MOUT setting.
10440 ##
10441 record(ao, "$(P):LS01:Z3:MOUT_S2") {
10442  field(SCAN, "Passive")
10443  field(PREC, "1")
10444  field(SDIS, "$(P):LS01:DISABLE")
10445 }
10446 
10447 ##
10448 ## Set the ZONE RANGE setting.
10449 ##
10450 record(mbbo, "$(P):LS01:Z3:RANGE_S2") {
10451  field(SCAN, "Passive")
10452  field(ZRST, "Off")
10453  field(ZRVL, "0")
10454  field(ONST, "Range1/Low")
10455  field(ONVL, "1")
10456  field(TWST, "Range2/Medium")
10457  field(TWVL, "2")
10458  field(THST, "Range3/High")
10459  field(THVL, "3")
10460  field(FRST, "Range4")
10461  field(FRVL, "4")
10462  field(FVST, "Range5")
10463  field(FVVL, "5")
10464  field(SDIS, "$(P):LS01:DISABLE")
10465 }
10466 
10467 ##
10468 ## Set the ZONE INPUT setting.
10469 ##
10470 record(mbbo, "$(P):LS01:Z3:INPUT_S2") {
10471  field(ZRST, "None")
10472  field(ZRVL, "0")
10473  field(ONST, "Input A")
10474  field(ONVL, "1")
10475  field(TWST, "Input B")
10476  field(TWVL, "2")
10477  field(THST, "Input C")
10478  field(THVL, "3")
10479  field(FRST, "Input D")
10480  field(FRVL, "4")
10481  field(FVST, "Input D2")
10482  field(FVVL, "5")
10483  field(SXST, "Input D3")
10484  field(SXVL, "6")
10485  field(SVST, "Input D4")
10486  field(SVVL, "7")
10487  field(EIST, "Input D5")
10488  field(EIVL, "8")
10489  field(SDIS, "$(P):LS01:DISABLE")
10490 }
10491 
10492 ##
10493 ## Set the ZONE RATE setting.
10494 ##
10495 record(ao, "$(P):LS01:Z3:RATE_S2") {
10496  field(SCAN, "Passive")
10497  field(PREC, "1")
10498  field(SDIS, "$(P):LS01:DISABLE")
10499 }
10500 
10501 ##
10502 ## Record to write the ZONE parameters.
10503 ##
10504 record(calcout, "$(P):LS01:Z3:SET2") {
10505  field(INPA, "$(P):LS01:Z3:UB_S2")
10506  field(INPB, "$(P):LS01:Z3:P_S2")
10507  field(INPC, "$(P):LS01:Z3:I_S2")
10508  field(INPD, "$(P):LS01:Z3:D_S2")
10509  field(INPE, "$(P):LS01:Z3:MOUT_S2")
10510  field(INPF, "$(P):LS01:Z3:RANGE_S2")
10511  field(INPG, "$(P):LS01:Z3:INPUT_S2")
10512  field(INPH, "$(P):LS01:Z3:RATE_S2")
10513  field(CALC, "0")
10514  field(DTYP, "stream")
10515  field(OUT, "@ls336.proto setZONE(2,3) L0 0")
10516  field(SDIS, "$(P):LS01:DISABLE")
10517  field(FLNK, "$(P):LS01:Z3:ALL2.PROC")
10518 }
10519 
10520 
10521 
10522 
10523 
10524 
10525 
10526 
10527 
10528 
10529 #######################################
10530 #
10531 # Template to support reading and setting
10532 # controller ZONE parameters. It reads the ZONE
10533 # parameters into an array, then uses subArrays to
10534 # extract each parameter.
10535 #
10536 # This template is used by the output template
10537 # and it needs the following macros:
10538 #
10539 # ZONE: zone number
10540 # OUT: output number
10541 #
10542 #######################################
10543 
10544 ##
10545 ## Read the ZONE setting into an array (8 values)
10546 ##
10547 record(waveform, "$(P):LS01:Z4:ALL2") {
10548  field(DTYP, "stream")
10549  field(SDIS, "$(P):LS01:DISABLE_POLL")
10550  field(INP, "@ls336.proto getZONE(2,4) L0 0")
10551  field(SCAN, "Passive")
10552  field(NELM, "8")
10553  field(FTVL, "DOUBLE")
10554  field(PREC, "1")
10555  field(FLNK, "$(P):LS01:Z4:UB2:ARRAY.PROC")
10556 }
10557 
10558 ##
10559 ## Read the ZONE upper boundary setting.
10560 ##
10561 record(subArray, "$(P):LS01:Z4:UB2:ARRAY") {
10562  field(SCAN, "Passive")
10563  field(FTVL, "DOUBLE")
10564  field(INP, "$(P):LS01:Z4:ALL2.VAL MS")
10565  field(MALM, "8")
10566  field(NELM, "1")
10567  field(INDX, "0")
10568  field(PREC, "1")
10569  field(FLNK, "$(P):LS01:Z4:UB2.PROC")
10570 }
10571 record(ai, "$(P):LS01:Z4:UB2") {
10572  field(SCAN, "Passive")
10573  field(INP, "$(P):LS01:Z4:UB2:ARRAY.VAL MS")
10574  field(PREC, "1")
10575  field(FLNK, "$(P):LS01:Z4:P2:ARRAY.PROC")
10576 }
10577 
10578 ##
10579 ## Read the ZONE P setting.
10580 ##
10581 record(subArray, "$(P):LS01:Z4:P2:ARRAY") {
10582  field(SCAN, "Passive")
10583  field(FTVL, "DOUBLE")
10584  field(INP, "$(P):LS01:Z4:ALL2.VAL MS")
10585  field(MALM, "8")
10586  field(NELM, "1")
10587  field(INDX, "1")
10588  field(PREC, "1")
10589  field(FLNK, "$(P):LS01:Z4:P2.PROC")
10590 }
10591 record(ai, "$(P):LS01:Z4:P2") {
10592  field(SCAN, "Passive")
10593  field(INP, "$(P):LS01:Z4:P2:ARRAY.VAL MS")
10594  field(PREC, "1")
10595  field(FLNK, "$(P):LS01:Z4:I2:ARRAY.PROC")
10596 }
10597 
10598 ##
10599 ## Read the ZONE I setting.
10600 ##
10601 record(subArray, "$(P):LS01:Z4:I2:ARRAY") {
10602  field(SCAN, "Passive")
10603  field(FTVL, "DOUBLE")
10604  field(INP, "$(P):LS01:Z4:ALL2.VAL MS")
10605  field(MALM, "8")
10606  field(NELM, "1")
10607  field(INDX, "2")
10608  field(PREC, "1")
10609  field(FLNK, "$(P):LS01:Z4:I2.PROC")
10610 }
10611 record(ai, "$(P):LS01:Z4:I2") {
10612  field(SCAN, "Passive")
10613  field(INP, "$(P):LS01:Z4:I2:ARRAY.VAL MS")
10614  field(PREC, "1")
10615  field(FLNK, "$(P):LS01:Z4:D2:ARRAY.PROC")
10616 }
10617 
10618 ##
10619 ## Read the ZONE D setting.
10620 ##
10621 record(subArray, "$(P):LS01:Z4:D2:ARRAY") {
10622  field(SCAN, "Passive")
10623  field(FTVL, "DOUBLE")
10624  field(INP, "$(P):LS01:Z4:ALL2.VAL MS")
10625  field(MALM, "8")
10626  field(NELM, "1")
10627  field(INDX, "3")
10628  field(PREC, "1")
10629  field(FLNK, "$(P):LS01:Z4:D2.PROC")
10630 }
10631 record(ai, "$(P):LS01:Z4:D2") {
10632  field(SCAN, "Passive")
10633  field(INP, "$(P):LS01:Z4:D2:ARRAY.VAL MS")
10634  field(PREC, "1")
10635  field(FLNK, "$(P):LS01:Z4:MOUT2:ARRAY.PROC")
10636 }
10637 
10638 ##
10639 ## Read the ZONE MOUT setting.
10640 ##
10641 record(subArray, "$(P):LS01:Z4:MOUT2:ARRAY") {
10642  field(SCAN, "Passive")
10643  field(FTVL, "DOUBLE")
10644  field(INP, "$(P):LS01:Z4:ALL2.VAL MS")
10645  field(MALM, "8")
10646  field(NELM, "1")
10647  field(INDX, "4")
10648  field(PREC, "1")
10649  field(FLNK, "$(P):LS01:Z4:MOUT2.PROC")
10650 }
10651 record(ai, "$(P):LS01:Z4:MOUT2") {
10652  field(SCAN, "Passive")
10653  field(INP, "$(P):LS01:Z4:MOUT2:ARRAY.VAL MS")
10654  field(PREC, "1")
10655  field(FLNK, "$(P):LS01:Z4:RANGE2:ARRAY.PROC")
10656 }
10657 
10658 ##
10659 ## Read the ZONE RANGE setting.
10660 ##
10661 record(subArray, "$(P):LS01:Z4:RANGE2:ARRAY") {
10662  field(SCAN, "Passive")
10663  field(FTVL, "DOUBLE")
10664  field(INP, "$(P):LS01:Z4:ALL2.VAL MS")
10665  field(MALM, "8")
10666  field(NELM, "1")
10667  field(INDX, "5")
10668  field(PREC, "1")
10669  field(FLNK, "$(P):LS01:Z4:RANGE2.PROC")
10670 }
10671 record(mbbi, "$(P):LS01:Z4:RANGE2") {
10672  field(INP, "$(P):LS01:Z4:RANGE2:ARRAY.VAL")
10673  field(SCAN, "Passive")
10674  field(ZRST, "Off")
10675  field(ZRVL, "0")
10676  field(ONST, "Range1/Low")
10677  field(ONVL, "1")
10678  field(TWST, "Range2/Medium")
10679  field(TWVL, "2")
10680  field(THST, "Range3/High")
10681  field(THVL, "3")
10682  field(FRST, "Range4")
10683  field(FRVL, "4")
10684  field(FVST, "Range5")
10685  field(FVVL, "5")
10686  field(FLNK, "$(P):LS01:Z4:INPUT2:ARRAY.PROC")
10687 }
10688 
10689 ##
10690 ## Read the ZONE INPUT setting.
10691 ##
10692 record(subArray, "$(P):LS01:Z4:INPUT2:ARRAY") {
10693  field(SCAN, "Passive")
10694  field(FTVL, "DOUBLE")
10695  field(INP, "$(P):LS01:Z4:ALL2.VAL MS")
10696  field(MALM, "8")
10697  field(NELM, "1")
10698  field(INDX, "6")
10699  field(PREC, "1")
10700  field(FLNK, "$(P):LS01:Z4:INPUT2.PROC")
10701 }
10702 record(mbbi, "$(P):LS01:Z4:INPUT2") {
10703  field(INP, "$(P):LS01:Z4:INPUT2:ARRAY.VAL")
10704  field(SCAN, "Passive")
10705  field(ZRST, "None")
10706  field(ZRVL, "0")
10707  field(ONST, "Input A")
10708  field(ONVL, "1")
10709  field(TWST, "Input B")
10710  field(TWVL, "2")
10711  field(THST, "Input C")
10712  field(THVL, "3")
10713  field(FRST, "Input D")
10714  field(FRVL, "4")
10715  field(FVST, "Input D2")
10716  field(FVVL, "5")
10717  field(SXST, "Input D3")
10718  field(SXVL, "6")
10719  field(SVST, "Input D4")
10720  field(SVVL, "7")
10721  field(EIST, "Input D5")
10722  field(EIVL, "8")
10723  field(FLNK, "$(P):LS01:Z4:RATE2:ARRAY.PROC")
10724 }
10725 
10726 ##
10727 ## Read the ZONE RATE setting.
10728 ##
10729 record(subArray, "$(P):LS01:Z4:RATE2:ARRAY") {
10730  field(SCAN, "Passive")
10731  field(FTVL, "DOUBLE")
10732  field(INP, "$(P):LS01:Z4:ALL2.VAL MS")
10733  field(MALM, "8")
10734  field(NELM, "1")
10735  field(INDX, "7")
10736  field(PREC, "1")
10737  field(FLNK, "$(P):LS01:Z4:RATE2.PROC")
10738 }
10739 record(ai, "$(P):LS01:Z4:RATE2") {
10740  field(SCAN, "Passive")
10741  field(INP, "$(P):LS01:Z4:RATE2:ARRAY.VAL MS")
10742  field(PREC, "1")
10743  field(FLNK, "$(P):LS01:Z4:INITCALC2.PROC")
10744 }
10745 
10746 ##############################################################
10747 ##
10748 ## Populate the write records below with the current values.
10749 ## Only do this once at startup.
10750 ##
10751 ###############################################################
10752 
10753 record(calcout, "$(P):LS01:Z4:INITCALC2") {
10754  field(INPA, "0")
10755  field(CALC, "A")
10756  field(VAL, "0")
10757  field(DOPT, "Use OCAL")
10758  field(OOPT, "When Zero")
10759  field(OCAL, "1")
10760  field(OUT, "$(P):LS01:Z4:INITUB2.PROC")
10761 }
10762 
10763 record(dfanout, "$(P):LS01:Z4:INITUB2") {
10764  field(OMSL, "closed_loop")
10765  field(DOL, "$(P):LS01:Z4:UB2.VAL")
10766  field(OUTA, "$(P):LS01:Z4:UB_S2.VAL PP")
10767  field(FLNK, "$(P):LS01:Z4:INITP2.PROC")
10768 }
10769 record(dfanout, "$(P):LS01:Z4:INITP2") {
10770  field(OMSL, "closed_loop")
10771  field(DOL, "$(P):LS01:Z4:P2.VAL")
10772  field(OUTA, "$(P):LS01:Z4:P_S2.VAL PP")
10773  field(FLNK, "$(P):LS01:Z4:INITI2.PROC")
10774 }
10775 record(dfanout, "$(P):LS01:Z4:INITI2") {
10776  field(OMSL, "closed_loop")
10777  field(DOL, "$(P):LS01:Z4:I2.VAL")
10778  field(OUTA, "$(P):LS01:Z4:I_S2.VAL PP")
10779  field(FLNK, "$(P):LS01:Z4:INITD2.PROC")
10780 }
10781 record(dfanout, "$(P):LS01:Z4:INITD2") {
10782  field(OMSL, "closed_loop")
10783  field(DOL, "$(P):LS01:Z4:D2.VAL")
10784  field(OUTA, "$(P):LS01:Z4:D_S2.VAL PP")
10785  field(FLNK, "$(P):LS01:Z4:INITMOUT2.PROC")
10786 }
10787 record(dfanout, "$(P):LS01:Z4:INITMOUT2") {
10788  field(OMSL, "closed_loop")
10789  field(DOL, "$(P):LS01:Z4:MOUT2.VAL")
10790  field(OUTA, "$(P):LS01:Z4:MOUT_S2.VAL PP")
10791  field(FLNK, "$(P):LS01:Z4:INITRANGE2.PROC")
10792 }
10793 record(dfanout, "$(P):LS01:Z4:INITRANGE2") {
10794  field(OMSL, "closed_loop")
10795  field(DOL, "$(P):LS01:Z4:RANGE2.VAL")
10796  field(OUTA, "$(P):LS01:Z4:RANGE_S2.VAL PP")
10797  field(FLNK, "$(P):LS01:Z4:INITINPUT2.PROC")
10798 }
10799 record(dfanout, "$(P):LS01:Z4:INITINPUT2") {
10800  field(OMSL, "closed_loop")
10801  field(DOL, "$(P):LS01:Z4:INPUT2.VAL")
10802  field(OUTA, "$(P):LS01:Z4:INPUT_S2.VAL PP")
10803  field(FLNK, "$(P):LS01:Z4:INITRATE2.PROC")
10804 }
10805 record(dfanout, "$(P):LS01:Z4:INITRATE2") {
10806  field(OMSL, "closed_loop")
10807  field(DOL, "$(P):LS01:Z4:RATE2.VAL")
10808  field(OUTA, "$(P):LS01:Z4:RATE_S2.VAL PP")
10809  field(FLNK, "$(P):LS01:Z4:INITCOUNT2.PROC")
10810 }
10811 
10812 record(dfanout, "$(P):LS01:Z4:INITCOUNT2") {
10813  field(DOL, "1")
10814  field(OUTA, "$(P):LS01:Z4:INITCALC2.A")
10815 }
10816 
10817 
10818 
10819 #############################################
10820 # Write records. There is a calcout record to
10821 # do the actual write.
10822 #############################################
10823 
10824 ##
10825 ## Set the ZONE upper boundary setting.
10826 ##
10827 record(ao, "$(P):LS01:Z4:UB_S2") {
10828  field(SCAN, "Passive")
10829  field(PREC, "1")
10830  field(SDIS, "$(P):LS01:DISABLE")
10831 }
10832 
10833 ##
10834 ## Set the ZONE P setting.
10835 ##
10836 record(ao, "$(P):LS01:Z4:P_S2") {
10837  field(SCAN, "Passive")
10838  field(PREC, "1")
10839  field(SDIS, "$(P):LS01:DISABLE")
10840 }
10841 
10842 ##
10843 ## Set the ZONE I setting.
10844 ##
10845 record(ao, "$(P):LS01:Z4:I_S2") {
10846  field(SCAN, "Passive")
10847  field(PREC, "1")
10848  field(SDIS, "$(P):LS01:DISABLE")
10849 }
10850 
10851 ##
10852 ## Set the ZONE D setting.
10853 ##
10854 record(ao, "$(P):LS01:Z4:D_S2") {
10855  field(SCAN, "Passive")
10856  field(PREC, "1")
10857  field(SDIS, "$(P):LS01:DISABLE")
10858 }
10859 
10860 ##
10861 ## Set the ZONE MOUT setting.
10862 ##
10863 record(ao, "$(P):LS01:Z4:MOUT_S2") {
10864  field(SCAN, "Passive")
10865  field(PREC, "1")
10866  field(SDIS, "$(P):LS01:DISABLE")
10867 }
10868 
10869 ##
10870 ## Set the ZONE RANGE setting.
10871 ##
10872 record(mbbo, "$(P):LS01:Z4:RANGE_S2") {
10873  field(SCAN, "Passive")
10874  field(ZRST, "Off")
10875  field(ZRVL, "0")
10876  field(ONST, "Range1/Low")
10877  field(ONVL, "1")
10878  field(TWST, "Range2/Medium")
10879  field(TWVL, "2")
10880  field(THST, "Range3/High")
10881  field(THVL, "3")
10882  field(FRST, "Range4")
10883  field(FRVL, "4")
10884  field(FVST, "Range5")
10885  field(FVVL, "5")
10886  field(SDIS, "$(P):LS01:DISABLE")
10887 }
10888 
10889 ##
10890 ## Set the ZONE INPUT setting.
10891 ##
10892 record(mbbo, "$(P):LS01:Z4:INPUT_S2") {
10893  field(ZRST, "None")
10894  field(ZRVL, "0")
10895  field(ONST, "Input A")
10896  field(ONVL, "1")
10897  field(TWST, "Input B")
10898  field(TWVL, "2")
10899  field(THST, "Input C")
10900  field(THVL, "3")
10901  field(FRST, "Input D")
10902  field(FRVL, "4")
10903  field(FVST, "Input D2")
10904  field(FVVL, "5")
10905  field(SXST, "Input D3")
10906  field(SXVL, "6")
10907  field(SVST, "Input D4")
10908  field(SVVL, "7")
10909  field(EIST, "Input D5")
10910  field(EIVL, "8")
10911  field(SDIS, "$(P):LS01:DISABLE")
10912 }
10913 
10914 ##
10915 ## Set the ZONE RATE setting.
10916 ##
10917 record(ao, "$(P):LS01:Z4:RATE_S2") {
10918  field(SCAN, "Passive")
10919  field(PREC, "1")
10920  field(SDIS, "$(P):LS01:DISABLE")
10921 }
10922 
10923 ##
10924 ## Record to write the ZONE parameters.
10925 ##
10926 record(calcout, "$(P):LS01:Z4:SET2") {
10927  field(INPA, "$(P):LS01:Z4:UB_S2")
10928  field(INPB, "$(P):LS01:Z4:P_S2")
10929  field(INPC, "$(P):LS01:Z4:I_S2")
10930  field(INPD, "$(P):LS01:Z4:D_S2")
10931  field(INPE, "$(P):LS01:Z4:MOUT_S2")
10932  field(INPF, "$(P):LS01:Z4:RANGE_S2")
10933  field(INPG, "$(P):LS01:Z4:INPUT_S2")
10934  field(INPH, "$(P):LS01:Z4:RATE_S2")
10935  field(CALC, "0")
10936  field(DTYP, "stream")
10937  field(OUT, "@ls336.proto setZONE(2,4) L0 0")
10938  field(SDIS, "$(P):LS01:DISABLE")
10939  field(FLNK, "$(P):LS01:Z4:ALL2.PROC")
10940 }
10941 
10942 
10943 
10944 
10945 
10946 
10947 
10948 
10949 
10950 
10951 #######################################
10952 #
10953 # Template to support reading and setting
10954 # controller ZONE parameters. It reads the ZONE
10955 # parameters into an array, then uses subArrays to
10956 # extract each parameter.
10957 #
10958 # This template is used by the output template
10959 # and it needs the following macros:
10960 #
10961 # ZONE: zone number
10962 # OUT: output number
10963 #
10964 #######################################
10965 
10966 ##
10967 ## Read the ZONE setting into an array (8 values)
10968 ##
10969 record(waveform, "$(P):LS01:Z5:ALL2") {
10970  field(DTYP, "stream")
10971  field(SDIS, "$(P):LS01:DISABLE_POLL")
10972  field(INP, "@ls336.proto getZONE(2,5) L0 0")
10973  field(SCAN, "Passive")
10974  field(NELM, "8")
10975  field(FTVL, "DOUBLE")
10976  field(PREC, "1")
10977  field(FLNK, "$(P):LS01:Z5:UB2:ARRAY.PROC")
10978 }
10979 
10980 ##
10981 ## Read the ZONE upper boundary setting.
10982 ##
10983 record(subArray, "$(P):LS01:Z5:UB2:ARRAY") {
10984  field(SCAN, "Passive")
10985  field(FTVL, "DOUBLE")
10986  field(INP, "$(P):LS01:Z5:ALL2.VAL MS")
10987  field(MALM, "8")
10988  field(NELM, "1")
10989  field(INDX, "0")
10990  field(PREC, "1")
10991  field(FLNK, "$(P):LS01:Z5:UB2.PROC")
10992 }
10993 record(ai, "$(P):LS01:Z5:UB2") {
10994  field(SCAN, "Passive")
10995  field(INP, "$(P):LS01:Z5:UB2:ARRAY.VAL MS")
10996  field(PREC, "1")
10997  field(FLNK, "$(P):LS01:Z5:P2:ARRAY.PROC")
10998 }
10999 
11000 ##
11001 ## Read the ZONE P setting.
11002 ##
11003 record(subArray, "$(P):LS01:Z5:P2:ARRAY") {
11004  field(SCAN, "Passive")
11005  field(FTVL, "DOUBLE")
11006  field(INP, "$(P):LS01:Z5:ALL2.VAL MS")
11007  field(MALM, "8")
11008  field(NELM, "1")
11009  field(INDX, "1")
11010  field(PREC, "1")
11011  field(FLNK, "$(P):LS01:Z5:P2.PROC")
11012 }
11013 record(ai, "$(P):LS01:Z5:P2") {
11014  field(SCAN, "Passive")
11015  field(INP, "$(P):LS01:Z5:P2:ARRAY.VAL MS")
11016  field(PREC, "1")
11017  field(FLNK, "$(P):LS01:Z5:I2:ARRAY.PROC")
11018 }
11019 
11020 ##
11021 ## Read the ZONE I setting.
11022 ##
11023 record(subArray, "$(P):LS01:Z5:I2:ARRAY") {
11024  field(SCAN, "Passive")
11025  field(FTVL, "DOUBLE")
11026  field(INP, "$(P):LS01:Z5:ALL2.VAL MS")
11027  field(MALM, "8")
11028  field(NELM, "1")
11029  field(INDX, "2")
11030  field(PREC, "1")
11031  field(FLNK, "$(P):LS01:Z5:I2.PROC")
11032 }
11033 record(ai, "$(P):LS01:Z5:I2") {
11034  field(SCAN, "Passive")
11035  field(INP, "$(P):LS01:Z5:I2:ARRAY.VAL MS")
11036  field(PREC, "1")
11037  field(FLNK, "$(P):LS01:Z5:D2:ARRAY.PROC")
11038 }
11039 
11040 ##
11041 ## Read the ZONE D setting.
11042 ##
11043 record(subArray, "$(P):LS01:Z5:D2:ARRAY") {
11044  field(SCAN, "Passive")
11045  field(FTVL, "DOUBLE")
11046  field(INP, "$(P):LS01:Z5:ALL2.VAL MS")
11047  field(MALM, "8")
11048  field(NELM, "1")
11049  field(INDX, "3")
11050  field(PREC, "1")
11051  field(FLNK, "$(P):LS01:Z5:D2.PROC")
11052 }
11053 record(ai, "$(P):LS01:Z5:D2") {
11054  field(SCAN, "Passive")
11055  field(INP, "$(P):LS01:Z5:D2:ARRAY.VAL MS")
11056  field(PREC, "1")
11057  field(FLNK, "$(P):LS01:Z5:MOUT2:ARRAY.PROC")
11058 }
11059 
11060 ##
11061 ## Read the ZONE MOUT setting.
11062 ##
11063 record(subArray, "$(P):LS01:Z5:MOUT2:ARRAY") {
11064  field(SCAN, "Passive")
11065  field(FTVL, "DOUBLE")
11066  field(INP, "$(P):LS01:Z5:ALL2.VAL MS")
11067  field(MALM, "8")
11068  field(NELM, "1")
11069  field(INDX, "4")
11070  field(PREC, "1")
11071  field(FLNK, "$(P):LS01:Z5:MOUT2.PROC")
11072 }
11073 record(ai, "$(P):LS01:Z5:MOUT2") {
11074  field(SCAN, "Passive")
11075  field(INP, "$(P):LS01:Z5:MOUT2:ARRAY.VAL MS")
11076  field(PREC, "1")
11077  field(FLNK, "$(P):LS01:Z5:RANGE2:ARRAY.PROC")
11078 }
11079 
11080 ##
11081 ## Read the ZONE RANGE setting.
11082 ##
11083 record(subArray, "$(P):LS01:Z5:RANGE2:ARRAY") {
11084  field(SCAN, "Passive")
11085  field(FTVL, "DOUBLE")
11086  field(INP, "$(P):LS01:Z5:ALL2.VAL MS")
11087  field(MALM, "8")
11088  field(NELM, "1")
11089  field(INDX, "5")
11090  field(PREC, "1")
11091  field(FLNK, "$(P):LS01:Z5:RANGE2.PROC")
11092 }
11093 record(mbbi, "$(P):LS01:Z5:RANGE2") {
11094  field(INP, "$(P):LS01:Z5:RANGE2:ARRAY.VAL")
11095  field(SCAN, "Passive")
11096  field(ZRST, "Off")
11097  field(ZRVL, "0")
11098  field(ONST, "Range1/Low")
11099  field(ONVL, "1")
11100  field(TWST, "Range2/Medium")
11101  field(TWVL, "2")
11102  field(THST, "Range3/High")
11103  field(THVL, "3")
11104  field(FRST, "Range4")
11105  field(FRVL, "4")
11106  field(FVST, "Range5")
11107  field(FVVL, "5")
11108  field(FLNK, "$(P):LS01:Z5:INPUT2:ARRAY.PROC")
11109 }
11110 
11111 ##
11112 ## Read the ZONE INPUT setting.
11113 ##
11114 record(subArray, "$(P):LS01:Z5:INPUT2:ARRAY") {
11115  field(SCAN, "Passive")
11116  field(FTVL, "DOUBLE")
11117  field(INP, "$(P):LS01:Z5:ALL2.VAL MS")
11118  field(MALM, "8")
11119  field(NELM, "1")
11120  field(INDX, "6")
11121  field(PREC, "1")
11122  field(FLNK, "$(P):LS01:Z5:INPUT2.PROC")
11123 }
11124 record(mbbi, "$(P):LS01:Z5:INPUT2") {
11125  field(INP, "$(P):LS01:Z5:INPUT2:ARRAY.VAL")
11126  field(SCAN, "Passive")
11127  field(ZRST, "None")
11128  field(ZRVL, "0")
11129  field(ONST, "Input A")
11130  field(ONVL, "1")
11131  field(TWST, "Input B")
11132  field(TWVL, "2")
11133  field(THST, "Input C")
11134  field(THVL, "3")
11135  field(FRST, "Input D")
11136  field(FRVL, "4")
11137  field(FVST, "Input D2")
11138  field(FVVL, "5")
11139  field(SXST, "Input D3")
11140  field(SXVL, "6")
11141  field(SVST, "Input D4")
11142  field(SVVL, "7")
11143  field(EIST, "Input D5")
11144  field(EIVL, "8")
11145  field(FLNK, "$(P):LS01:Z5:RATE2:ARRAY.PROC")
11146 }
11147 
11148 ##
11149 ## Read the ZONE RATE setting.
11150 ##
11151 record(subArray, "$(P):LS01:Z5:RATE2:ARRAY") {
11152  field(SCAN, "Passive")
11153  field(FTVL, "DOUBLE")
11154  field(INP, "$(P):LS01:Z5:ALL2.VAL MS")
11155  field(MALM, "8")
11156  field(NELM, "1")
11157  field(INDX, "7")
11158  field(PREC, "1")
11159  field(FLNK, "$(P):LS01:Z5:RATE2.PROC")
11160 }
11161 record(ai, "$(P):LS01:Z5:RATE2") {
11162  field(SCAN, "Passive")
11163  field(INP, "$(P):LS01:Z5:RATE2:ARRAY.VAL MS")
11164  field(PREC, "1")
11165  field(FLNK, "$(P):LS01:Z5:INITCALC2.PROC")
11166 }
11167 
11168 ##############################################################
11169 ##
11170 ## Populate the write records below with the current values.
11171 ## Only do this once at startup.
11172 ##
11173 ###############################################################
11174 
11175 record(calcout, "$(P):LS01:Z5:INITCALC2") {
11176  field(INPA, "0")
11177  field(CALC, "A")
11178  field(VAL, "0")
11179  field(DOPT, "Use OCAL")
11180  field(OOPT, "When Zero")
11181  field(OCAL, "1")
11182  field(OUT, "$(P):LS01:Z5:INITUB2.PROC")
11183 }
11184 
11185 record(dfanout, "$(P):LS01:Z5:INITUB2") {
11186  field(OMSL, "closed_loop")
11187  field(DOL, "$(P):LS01:Z5:UB2.VAL")
11188  field(OUTA, "$(P):LS01:Z5:UB_S2.VAL PP")
11189  field(FLNK, "$(P):LS01:Z5:INITP2.PROC")
11190 }
11191 record(dfanout, "$(P):LS01:Z5:INITP2") {
11192  field(OMSL, "closed_loop")
11193  field(DOL, "$(P):LS01:Z5:P2.VAL")
11194  field(OUTA, "$(P):LS01:Z5:P_S2.VAL PP")
11195  field(FLNK, "$(P):LS01:Z5:INITI2.PROC")
11196 }
11197 record(dfanout, "$(P):LS01:Z5:INITI2") {
11198  field(OMSL, "closed_loop")
11199  field(DOL, "$(P):LS01:Z5:I2.VAL")
11200  field(OUTA, "$(P):LS01:Z5:I_S2.VAL PP")
11201  field(FLNK, "$(P):LS01:Z5:INITD2.PROC")
11202 }
11203 record(dfanout, "$(P):LS01:Z5:INITD2") {
11204  field(OMSL, "closed_loop")
11205  field(DOL, "$(P):LS01:Z5:D2.VAL")
11206  field(OUTA, "$(P):LS01:Z5:D_S2.VAL PP")
11207  field(FLNK, "$(P):LS01:Z5:INITMOUT2.PROC")
11208 }
11209 record(dfanout, "$(P):LS01:Z5:INITMOUT2") {
11210  field(OMSL, "closed_loop")
11211  field(DOL, "$(P):LS01:Z5:MOUT2.VAL")
11212  field(OUTA, "$(P):LS01:Z5:MOUT_S2.VAL PP")
11213  field(FLNK, "$(P):LS01:Z5:INITRANGE2.PROC")
11214 }
11215 record(dfanout, "$(P):LS01:Z5:INITRANGE2") {
11216  field(OMSL, "closed_loop")
11217  field(DOL, "$(P):LS01:Z5:RANGE2.VAL")
11218  field(OUTA, "$(P):LS01:Z5:RANGE_S2.VAL PP")
11219  field(FLNK, "$(P):LS01:Z5:INITINPUT2.PROC")
11220 }
11221 record(dfanout, "$(P):LS01:Z5:INITINPUT2") {
11222  field(OMSL, "closed_loop")
11223  field(DOL, "$(P):LS01:Z5:INPUT2.VAL")
11224  field(OUTA, "$(P):LS01:Z5:INPUT_S2.VAL PP")
11225  field(FLNK, "$(P):LS01:Z5:INITRATE2.PROC")
11226 }
11227 record(dfanout, "$(P):LS01:Z5:INITRATE2") {
11228  field(OMSL, "closed_loop")
11229  field(DOL, "$(P):LS01:Z5:RATE2.VAL")
11230  field(OUTA, "$(P):LS01:Z5:RATE_S2.VAL PP")
11231  field(FLNK, "$(P):LS01:Z5:INITCOUNT2.PROC")
11232 }
11233 
11234 record(dfanout, "$(P):LS01:Z5:INITCOUNT2") {
11235  field(DOL, "1")
11236  field(OUTA, "$(P):LS01:Z5:INITCALC2.A")
11237 }
11238 
11239 
11240 
11241 #############################################
11242 # Write records. There is a calcout record to
11243 # do the actual write.
11244 #############################################
11245 
11246 ##
11247 ## Set the ZONE upper boundary setting.
11248 ##
11249 record(ao, "$(P):LS01:Z5:UB_S2") {
11250  field(SCAN, "Passive")
11251  field(PREC, "1")
11252  field(SDIS, "$(P):LS01:DISABLE")
11253 }
11254 
11255 ##
11256 ## Set the ZONE P setting.
11257 ##
11258 record(ao, "$(P):LS01:Z5:P_S2") {
11259  field(SCAN, "Passive")
11260  field(PREC, "1")
11261  field(SDIS, "$(P):LS01:DISABLE")
11262 }
11263 
11264 ##
11265 ## Set the ZONE I setting.
11266 ##
11267 record(ao, "$(P):LS01:Z5:I_S2") {
11268  field(SCAN, "Passive")
11269  field(PREC, "1")
11270  field(SDIS, "$(P):LS01:DISABLE")
11271 }
11272 
11273 ##
11274 ## Set the ZONE D setting.
11275 ##
11276 record(ao, "$(P):LS01:Z5:D_S2") {
11277  field(SCAN, "Passive")
11278  field(PREC, "1")
11279  field(SDIS, "$(P):LS01:DISABLE")
11280 }
11281 
11282 ##
11283 ## Set the ZONE MOUT setting.
11284 ##
11285 record(ao, "$(P):LS01:Z5:MOUT_S2") {
11286  field(SCAN, "Passive")
11287  field(PREC, "1")
11288  field(SDIS, "$(P):LS01:DISABLE")
11289 }
11290 
11291 ##
11292 ## Set the ZONE RANGE setting.
11293 ##
11294 record(mbbo, "$(P):LS01:Z5:RANGE_S2") {
11295  field(SCAN, "Passive")
11296  field(ZRST, "Off")
11297  field(ZRVL, "0")
11298  field(ONST, "Range1/Low")
11299  field(ONVL, "1")
11300  field(TWST, "Range2/Medium")
11301  field(TWVL, "2")
11302  field(THST, "Range3/High")
11303  field(THVL, "3")
11304  field(FRST, "Range4")
11305  field(FRVL, "4")
11306  field(FVST, "Range5")
11307  field(FVVL, "5")
11308  field(SDIS, "$(P):LS01:DISABLE")
11309 }
11310 
11311 ##
11312 ## Set the ZONE INPUT setting.
11313 ##
11314 record(mbbo, "$(P):LS01:Z5:INPUT_S2") {
11315  field(ZRST, "None")
11316  field(ZRVL, "0")
11317  field(ONST, "Input A")
11318  field(ONVL, "1")
11319  field(TWST, "Input B")
11320  field(TWVL, "2")
11321  field(THST, "Input C")
11322  field(THVL, "3")
11323  field(FRST, "Input D")
11324  field(FRVL, "4")
11325  field(FVST, "Input D2")
11326  field(FVVL, "5")
11327  field(SXST, "Input D3")
11328  field(SXVL, "6")
11329  field(SVST, "Input D4")
11330  field(SVVL, "7")
11331  field(EIST, "Input D5")
11332  field(EIVL, "8")
11333  field(SDIS, "$(P):LS01:DISABLE")
11334 }
11335 
11336 ##
11337 ## Set the ZONE RATE setting.
11338 ##
11339 record(ao, "$(P):LS01:Z5:RATE_S2") {
11340  field(SCAN, "Passive")
11341  field(PREC, "1")
11342  field(SDIS, "$(P):LS01:DISABLE")
11343 }
11344 
11345 ##
11346 ## Record to write the ZONE parameters.
11347 ##
11348 record(calcout, "$(P):LS01:Z5:SET2") {
11349  field(INPA, "$(P):LS01:Z5:UB_S2")
11350  field(INPB, "$(P):LS01:Z5:P_S2")
11351  field(INPC, "$(P):LS01:Z5:I_S2")
11352  field(INPD, "$(P):LS01:Z5:D_S2")
11353  field(INPE, "$(P):LS01:Z5:MOUT_S2")
11354  field(INPF, "$(P):LS01:Z5:RANGE_S2")
11355  field(INPG, "$(P):LS01:Z5:INPUT_S2")
11356  field(INPH, "$(P):LS01:Z5:RATE_S2")
11357  field(CALC, "0")
11358  field(DTYP, "stream")
11359  field(OUT, "@ls336.proto setZONE(2,5) L0 0")
11360  field(SDIS, "$(P):LS01:DISABLE")
11361  field(FLNK, "$(P):LS01:Z5:ALL2.PROC")
11362 }
11363 
11364 
11365 
11366 
11367 
11368 
11369 
11370 
11371 
11372 
11373 #######################################
11374 #
11375 # Template to support reading and setting
11376 # controller ZONE parameters. It reads the ZONE
11377 # parameters into an array, then uses subArrays to
11378 # extract each parameter.
11379 #
11380 # This template is used by the output template
11381 # and it needs the following macros:
11382 #
11383 # ZONE: zone number
11384 # OUT: output number
11385 #
11386 #######################################
11387 
11388 ##
11389 ## Read the ZONE setting into an array (8 values)
11390 ##
11391 record(waveform, "$(P):LS01:Z6:ALL2") {
11392  field(DTYP, "stream")
11393  field(SDIS, "$(P):LS01:DISABLE_POLL")
11394  field(INP, "@ls336.proto getZONE(2,6) L0 0")
11395  field(SCAN, "Passive")
11396  field(NELM, "8")
11397  field(FTVL, "DOUBLE")
11398  field(PREC, "1")
11399  field(FLNK, "$(P):LS01:Z6:UB2:ARRAY.PROC")
11400 }
11401 
11402 ##
11403 ## Read the ZONE upper boundary setting.
11404 ##
11405 record(subArray, "$(P):LS01:Z6:UB2:ARRAY") {
11406  field(SCAN, "Passive")
11407  field(FTVL, "DOUBLE")
11408  field(INP, "$(P):LS01:Z6:ALL2.VAL MS")
11409  field(MALM, "8")
11410  field(NELM, "1")
11411  field(INDX, "0")
11412  field(PREC, "1")
11413  field(FLNK, "$(P):LS01:Z6:UB2.PROC")
11414 }
11415 record(ai, "$(P):LS01:Z6:UB2") {
11416  field(SCAN, "Passive")
11417  field(INP, "$(P):LS01:Z6:UB2:ARRAY.VAL MS")
11418  field(PREC, "1")
11419  field(FLNK, "$(P):LS01:Z6:P2:ARRAY.PROC")
11420 }
11421 
11422 ##
11423 ## Read the ZONE P setting.
11424 ##
11425 record(subArray, "$(P):LS01:Z6:P2:ARRAY") {
11426  field(SCAN, "Passive")
11427  field(FTVL, "DOUBLE")
11428  field(INP, "$(P):LS01:Z6:ALL2.VAL MS")
11429  field(MALM, "8")
11430  field(NELM, "1")
11431  field(INDX, "1")
11432  field(PREC, "1")
11433  field(FLNK, "$(P):LS01:Z6:P2.PROC")
11434 }
11435 record(ai, "$(P):LS01:Z6:P2") {
11436  field(SCAN, "Passive")
11437  field(INP, "$(P):LS01:Z6:P2:ARRAY.VAL MS")
11438  field(PREC, "1")
11439  field(FLNK, "$(P):LS01:Z6:I2:ARRAY.PROC")
11440 }
11441 
11442 ##
11443 ## Read the ZONE I setting.
11444 ##
11445 record(subArray, "$(P):LS01:Z6:I2:ARRAY") {
11446  field(SCAN, "Passive")
11447  field(FTVL, "DOUBLE")
11448  field(INP, "$(P):LS01:Z6:ALL2.VAL MS")
11449  field(MALM, "8")
11450  field(NELM, "1")
11451  field(INDX, "2")
11452  field(PREC, "1")
11453  field(FLNK, "$(P):LS01:Z6:I2.PROC")
11454 }
11455 record(ai, "$(P):LS01:Z6:I2") {
11456  field(SCAN, "Passive")
11457  field(INP, "$(P):LS01:Z6:I2:ARRAY.VAL MS")
11458  field(PREC, "1")
11459  field(FLNK, "$(P):LS01:Z6:D2:ARRAY.PROC")
11460 }
11461 
11462 ##
11463 ## Read the ZONE D setting.
11464 ##
11465 record(subArray, "$(P):LS01:Z6:D2:ARRAY") {
11466  field(SCAN, "Passive")
11467  field(FTVL, "DOUBLE")
11468  field(INP, "$(P):LS01:Z6:ALL2.VAL MS")
11469  field(MALM, "8")
11470  field(NELM, "1")
11471  field(INDX, "3")
11472  field(PREC, "1")
11473  field(FLNK, "$(P):LS01:Z6:D2.PROC")
11474 }
11475 record(ai, "$(P):LS01:Z6:D2") {
11476  field(SCAN, "Passive")
11477  field(INP, "$(P):LS01:Z6:D2:ARRAY.VAL MS")
11478  field(PREC, "1")
11479  field(FLNK, "$(P):LS01:Z6:MOUT2:ARRAY.PROC")
11480 }
11481 
11482 ##
11483 ## Read the ZONE MOUT setting.
11484 ##
11485 record(subArray, "$(P):LS01:Z6:MOUT2:ARRAY") {
11486  field(SCAN, "Passive")
11487  field(FTVL, "DOUBLE")
11488  field(INP, "$(P):LS01:Z6:ALL2.VAL MS")
11489  field(MALM, "8")
11490  field(NELM, "1")
11491  field(INDX, "4")
11492  field(PREC, "1")
11493  field(FLNK, "$(P):LS01:Z6:MOUT2.PROC")
11494 }
11495 record(ai, "$(P):LS01:Z6:MOUT2") {
11496  field(SCAN, "Passive")
11497  field(INP, "$(P):LS01:Z6:MOUT2:ARRAY.VAL MS")
11498  field(PREC, "1")
11499  field(FLNK, "$(P):LS01:Z6:RANGE2:ARRAY.PROC")
11500 }
11501 
11502 ##
11503 ## Read the ZONE RANGE setting.
11504 ##
11505 record(subArray, "$(P):LS01:Z6:RANGE2:ARRAY") {
11506  field(SCAN, "Passive")
11507  field(FTVL, "DOUBLE")
11508  field(INP, "$(P):LS01:Z6:ALL2.VAL MS")
11509  field(MALM, "8")
11510  field(NELM, "1")
11511  field(INDX, "5")
11512  field(PREC, "1")
11513  field(FLNK, "$(P):LS01:Z6:RANGE2.PROC")
11514 }
11515 record(mbbi, "$(P):LS01:Z6:RANGE2") {
11516  field(INP, "$(P):LS01:Z6:RANGE2:ARRAY.VAL")
11517  field(SCAN, "Passive")
11518  field(ZRST, "Off")
11519  field(ZRVL, "0")
11520  field(ONST, "Range1/Low")
11521  field(ONVL, "1")
11522  field(TWST, "Range2/Medium")
11523  field(TWVL, "2")
11524  field(THST, "Range3/High")
11525  field(THVL, "3")
11526  field(FRST, "Range4")
11527  field(FRVL, "4")
11528  field(FVST, "Range5")
11529  field(FVVL, "5")
11530  field(FLNK, "$(P):LS01:Z6:INPUT2:ARRAY.PROC")
11531 }
11532 
11533 ##
11534 ## Read the ZONE INPUT setting.
11535 ##
11536 record(subArray, "$(P):LS01:Z6:INPUT2:ARRAY") {
11537  field(SCAN, "Passive")
11538  field(FTVL, "DOUBLE")
11539  field(INP, "$(P):LS01:Z6:ALL2.VAL MS")
11540  field(MALM, "8")
11541  field(NELM, "1")
11542  field(INDX, "6")
11543  field(PREC, "1")
11544  field(FLNK, "$(P):LS01:Z6:INPUT2.PROC")
11545 }
11546 record(mbbi, "$(P):LS01:Z6:INPUT2") {
11547  field(INP, "$(P):LS01:Z6:INPUT2:ARRAY.VAL")
11548  field(SCAN, "Passive")
11549  field(ZRST, "None")
11550  field(ZRVL, "0")
11551  field(ONST, "Input A")
11552  field(ONVL, "1")
11553  field(TWST, "Input B")
11554  field(TWVL, "2")
11555  field(THST, "Input C")
11556  field(THVL, "3")
11557  field(FRST, "Input D")
11558  field(FRVL, "4")
11559  field(FVST, "Input D2")
11560  field(FVVL, "5")
11561  field(SXST, "Input D3")
11562  field(SXVL, "6")
11563  field(SVST, "Input D4")
11564  field(SVVL, "7")
11565  field(EIST, "Input D5")
11566  field(EIVL, "8")
11567  field(FLNK, "$(P):LS01:Z6:RATE2:ARRAY.PROC")
11568 }
11569 
11570 ##
11571 ## Read the ZONE RATE setting.
11572 ##
11573 record(subArray, "$(P):LS01:Z6:RATE2:ARRAY") {
11574  field(SCAN, "Passive")
11575  field(FTVL, "DOUBLE")
11576  field(INP, "$(P):LS01:Z6:ALL2.VAL MS")
11577  field(MALM, "8")
11578  field(NELM, "1")
11579  field(INDX, "7")
11580  field(PREC, "1")
11581  field(FLNK, "$(P):LS01:Z6:RATE2.PROC")
11582 }
11583 record(ai, "$(P):LS01:Z6:RATE2") {
11584  field(SCAN, "Passive")
11585  field(INP, "$(P):LS01:Z6:RATE2:ARRAY.VAL MS")
11586  field(PREC, "1")
11587  field(FLNK, "$(P):LS01:Z6:INITCALC2.PROC")
11588 }
11589 
11590 ##############################################################
11591 ##
11592 ## Populate the write records below with the current values.
11593 ## Only do this once at startup.
11594 ##
11595 ###############################################################
11596 
11597 record(calcout, "$(P):LS01:Z6:INITCALC2") {
11598  field(INPA, "0")
11599  field(CALC, "A")
11600  field(VAL, "0")
11601  field(DOPT, "Use OCAL")
11602  field(OOPT, "When Zero")
11603  field(OCAL, "1")
11604  field(OUT, "$(P):LS01:Z6:INITUB2.PROC")
11605 }
11606 
11607 record(dfanout, "$(P):LS01:Z6:INITUB2") {
11608  field(OMSL, "closed_loop")
11609  field(DOL, "$(P):LS01:Z6:UB2.VAL")
11610  field(OUTA, "$(P):LS01:Z6:UB_S2.VAL PP")
11611  field(FLNK, "$(P):LS01:Z6:INITP2.PROC")
11612 }
11613 record(dfanout, "$(P):LS01:Z6:INITP2") {
11614  field(OMSL, "closed_loop")
11615  field(DOL, "$(P):LS01:Z6:P2.VAL")
11616  field(OUTA, "$(P):LS01:Z6:P_S2.VAL PP")
11617  field(FLNK, "$(P):LS01:Z6:INITI2.PROC")
11618 }
11619 record(dfanout, "$(P):LS01:Z6:INITI2") {
11620  field(OMSL, "closed_loop")
11621  field(DOL, "$(P):LS01:Z6:I2.VAL")
11622  field(OUTA, "$(P):LS01:Z6:I_S2.VAL PP")
11623  field(FLNK, "$(P):LS01:Z6:INITD2.PROC")
11624 }
11625 record(dfanout, "$(P):LS01:Z6:INITD2") {
11626  field(OMSL, "closed_loop")
11627  field(DOL, "$(P):LS01:Z6:D2.VAL")
11628  field(OUTA, "$(P):LS01:Z6:D_S2.VAL PP")
11629  field(FLNK, "$(P):LS01:Z6:INITMOUT2.PROC")
11630 }
11631 record(dfanout, "$(P):LS01:Z6:INITMOUT2") {
11632  field(OMSL, "closed_loop")
11633  field(DOL, "$(P):LS01:Z6:MOUT2.VAL")
11634  field(OUTA, "$(P):LS01:Z6:MOUT_S2.VAL PP")
11635  field(FLNK, "$(P):LS01:Z6:INITRANGE2.PROC")
11636 }
11637 record(dfanout, "$(P):LS01:Z6:INITRANGE2") {
11638  field(OMSL, "closed_loop")
11639  field(DOL, "$(P):LS01:Z6:RANGE2.VAL")
11640  field(OUTA, "$(P):LS01:Z6:RANGE_S2.VAL PP")
11641  field(FLNK, "$(P):LS01:Z6:INITINPUT2.PROC")
11642 }
11643 record(dfanout, "$(P):LS01:Z6:INITINPUT2") {
11644  field(OMSL, "closed_loop")
11645  field(DOL, "$(P):LS01:Z6:INPUT2.VAL")
11646  field(OUTA, "$(P):LS01:Z6:INPUT_S2.VAL PP")
11647  field(FLNK, "$(P):LS01:Z6:INITRATE2.PROC")
11648 }
11649 record(dfanout, "$(P):LS01:Z6:INITRATE2") {
11650  field(OMSL, "closed_loop")
11651  field(DOL, "$(P):LS01:Z6:RATE2.VAL")
11652  field(OUTA, "$(P):LS01:Z6:RATE_S2.VAL PP")
11653  field(FLNK, "$(P):LS01:Z6:INITCOUNT2.PROC")
11654 }
11655 
11656 record(dfanout, "$(P):LS01:Z6:INITCOUNT2") {
11657  field(DOL, "1")
11658  field(OUTA, "$(P):LS01:Z6:INITCALC2.A")
11659 }
11660 
11661 
11662 
11663 #############################################
11664 # Write records. There is a calcout record to
11665 # do the actual write.
11666 #############################################
11667 
11668 ##
11669 ## Set the ZONE upper boundary setting.
11670 ##
11671 record(ao, "$(P):LS01:Z6:UB_S2") {
11672  field(SCAN, "Passive")
11673  field(PREC, "1")
11674  field(SDIS, "$(P):LS01:DISABLE")
11675 }
11676 
11677 ##
11678 ## Set the ZONE P setting.
11679 ##
11680 record(ao, "$(P):LS01:Z6:P_S2") {
11681  field(SCAN, "Passive")
11682  field(PREC, "1")
11683  field(SDIS, "$(P):LS01:DISABLE")
11684 }
11685 
11686 ##
11687 ## Set the ZONE I setting.
11688 ##
11689 record(ao, "$(P):LS01:Z6:I_S2") {
11690  field(SCAN, "Passive")
11691  field(PREC, "1")
11692  field(SDIS, "$(P):LS01:DISABLE")
11693 }
11694 
11695 ##
11696 ## Set the ZONE D setting.
11697 ##
11698 record(ao, "$(P):LS01:Z6:D_S2") {
11699  field(SCAN, "Passive")
11700  field(PREC, "1")
11701  field(SDIS, "$(P):LS01:DISABLE")
11702 }
11703 
11704 ##
11705 ## Set the ZONE MOUT setting.
11706 ##
11707 record(ao, "$(P):LS01:Z6:MOUT_S2") {
11708  field(SCAN, "Passive")
11709  field(PREC, "1")
11710  field(SDIS, "$(P):LS01:DISABLE")
11711 }
11712 
11713 ##
11714 ## Set the ZONE RANGE setting.
11715 ##
11716 record(mbbo, "$(P):LS01:Z6:RANGE_S2") {
11717  field(SCAN, "Passive")
11718  field(ZRST, "Off")
11719  field(ZRVL, "0")
11720  field(ONST, "Range1/Low")
11721  field(ONVL, "1")
11722  field(TWST, "Range2/Medium")
11723  field(TWVL, "2")
11724  field(THST, "Range3/High")
11725  field(THVL, "3")
11726  field(FRST, "Range4")
11727  field(FRVL, "4")
11728  field(FVST, "Range5")
11729  field(FVVL, "5")
11730  field(SDIS, "$(P):LS01:DISABLE")
11731 }
11732 
11733 ##
11734 ## Set the ZONE INPUT setting.
11735 ##
11736 record(mbbo, "$(P):LS01:Z6:INPUT_S2") {
11737  field(ZRST, "None")
11738  field(ZRVL, "0")
11739  field(ONST, "Input A")
11740  field(ONVL, "1")
11741  field(TWST, "Input B")
11742  field(TWVL, "2")
11743  field(THST, "Input C")
11744  field(THVL, "3")
11745  field(FRST, "Input D")
11746  field(FRVL, "4")
11747  field(FVST, "Input D2")
11748  field(FVVL, "5")
11749  field(SXST, "Input D3")
11750  field(SXVL, "6")
11751  field(SVST, "Input D4")
11752  field(SVVL, "7")
11753  field(EIST, "Input D5")
11754  field(EIVL, "8")
11755  field(SDIS, "$(P):LS01:DISABLE")
11756 }
11757 
11758 ##
11759 ## Set the ZONE RATE setting.
11760 ##
11761 record(ao, "$(P):LS01:Z6:RATE_S2") {
11762  field(SCAN, "Passive")
11763  field(PREC, "1")
11764  field(SDIS, "$(P):LS01:DISABLE")
11765 }
11766 
11767 ##
11768 ## Record to write the ZONE parameters.
11769 ##
11770 record(calcout, "$(P):LS01:Z6:SET2") {
11771  field(INPA, "$(P):LS01:Z6:UB_S2")
11772  field(INPB, "$(P):LS01:Z6:P_S2")
11773  field(INPC, "$(P):LS01:Z6:I_S2")
11774  field(INPD, "$(P):LS01:Z6:D_S2")
11775  field(INPE, "$(P):LS01:Z6:MOUT_S2")
11776  field(INPF, "$(P):LS01:Z6:RANGE_S2")
11777  field(INPG, "$(P):LS01:Z6:INPUT_S2")
11778  field(INPH, "$(P):LS01:Z6:RATE_S2")
11779  field(CALC, "0")
11780  field(DTYP, "stream")
11781  field(OUT, "@ls336.proto setZONE(2,6) L0 0")
11782  field(SDIS, "$(P):LS01:DISABLE")
11783  field(FLNK, "$(P):LS01:Z6:ALL2.PROC")
11784 }
11785 
11786 
11787 
11788 
11789 
11790 
11791 
11792 
11793 
11794 
11795 #######################################
11796 #
11797 # Template to support reading and setting
11798 # controller ZONE parameters. It reads the ZONE
11799 # parameters into an array, then uses subArrays to
11800 # extract each parameter.
11801 #
11802 # This template is used by the output template
11803 # and it needs the following macros:
11804 #
11805 # ZONE: zone number
11806 # OUT: output number
11807 #
11808 #######################################
11809 
11810 ##
11811 ## Read the ZONE setting into an array (8 values)
11812 ##
11813 record(waveform, "$(P):LS01:Z7:ALL2") {
11814  field(DTYP, "stream")
11815  field(SDIS, "$(P):LS01:DISABLE_POLL")
11816  field(INP, "@ls336.proto getZONE(2,7) L0 0")
11817  field(SCAN, "Passive")
11818  field(NELM, "8")
11819  field(FTVL, "DOUBLE")
11820  field(PREC, "1")
11821  field(FLNK, "$(P):LS01:Z7:UB2:ARRAY.PROC")
11822 }
11823 
11824 ##
11825 ## Read the ZONE upper boundary setting.
11826 ##
11827 record(subArray, "$(P):LS01:Z7:UB2:ARRAY") {
11828  field(SCAN, "Passive")
11829  field(FTVL, "DOUBLE")
11830  field(INP, "$(P):LS01:Z7:ALL2.VAL MS")
11831  field(MALM, "8")
11832  field(NELM, "1")
11833  field(INDX, "0")
11834  field(PREC, "1")
11835  field(FLNK, "$(P):LS01:Z7:UB2.PROC")
11836 }
11837 record(ai, "$(P):LS01:Z7:UB2") {
11838  field(SCAN, "Passive")
11839  field(INP, "$(P):LS01:Z7:UB2:ARRAY.VAL MS")
11840  field(PREC, "1")
11841  field(FLNK, "$(P):LS01:Z7:P2:ARRAY.PROC")
11842 }
11843 
11844 ##
11845 ## Read the ZONE P setting.
11846 ##
11847 record(subArray, "$(P):LS01:Z7:P2:ARRAY") {
11848  field(SCAN, "Passive")
11849  field(FTVL, "DOUBLE")
11850  field(INP, "$(P):LS01:Z7:ALL2.VAL MS")
11851  field(MALM, "8")
11852  field(NELM, "1")
11853  field(INDX, "1")
11854  field(PREC, "1")
11855  field(FLNK, "$(P):LS01:Z7:P2.PROC")
11856 }
11857 record(ai, "$(P):LS01:Z7:P2") {
11858  field(SCAN, "Passive")
11859  field(INP, "$(P):LS01:Z7:P2:ARRAY.VAL MS")
11860  field(PREC, "1")
11861  field(FLNK, "$(P):LS01:Z7:I2:ARRAY.PROC")
11862 }
11863 
11864 ##
11865 ## Read the ZONE I setting.
11866 ##
11867 record(subArray, "$(P):LS01:Z7:I2:ARRAY") {
11868  field(SCAN, "Passive")
11869  field(FTVL, "DOUBLE")
11870  field(INP, "$(P):LS01:Z7:ALL2.VAL MS")
11871  field(MALM, "8")
11872  field(NELM, "1")
11873  field(INDX, "2")
11874  field(PREC, "1")
11875  field(FLNK, "$(P):LS01:Z7:I2.PROC")
11876 }
11877 record(ai, "$(P):LS01:Z7:I2") {
11878  field(SCAN, "Passive")
11879  field(INP, "$(P):LS01:Z7:I2:ARRAY.VAL MS")
11880  field(PREC, "1")
11881  field(FLNK, "$(P):LS01:Z7:D2:ARRAY.PROC")
11882 }
11883 
11884 ##
11885 ## Read the ZONE D setting.
11886 ##
11887 record(subArray, "$(P):LS01:Z7:D2:ARRAY") {
11888  field(SCAN, "Passive")
11889  field(FTVL, "DOUBLE")
11890  field(INP, "$(P):LS01:Z7:ALL2.VAL MS")
11891  field(MALM, "8")
11892  field(NELM, "1")
11893  field(INDX, "3")
11894  field(PREC, "1")
11895  field(FLNK, "$(P):LS01:Z7:D2.PROC")
11896 }
11897 record(ai, "$(P):LS01:Z7:D2") {
11898  field(SCAN, "Passive")
11899  field(INP, "$(P):LS01:Z7:D2:ARRAY.VAL MS")
11900  field(PREC, "1")
11901  field(FLNK, "$(P):LS01:Z7:MOUT2:ARRAY.PROC")
11902 }
11903 
11904 ##
11905 ## Read the ZONE MOUT setting.
11906 ##
11907 record(subArray, "$(P):LS01:Z7:MOUT2:ARRAY") {
11908  field(SCAN, "Passive")
11909  field(FTVL, "DOUBLE")
11910  field(INP, "$(P):LS01:Z7:ALL2.VAL MS")
11911  field(MALM, "8")
11912  field(NELM, "1")
11913  field(INDX, "4")
11914  field(PREC, "1")
11915  field(FLNK, "$(P):LS01:Z7:MOUT2.PROC")
11916 }
11917 record(ai, "$(P):LS01:Z7:MOUT2") {
11918  field(SCAN, "Passive")
11919  field(INP, "$(P):LS01:Z7:MOUT2:ARRAY.VAL MS")
11920  field(PREC, "1")
11921  field(FLNK, "$(P):LS01:Z7:RANGE2:ARRAY.PROC")
11922 }
11923 
11924 ##
11925 ## Read the ZONE RANGE setting.
11926 ##
11927 record(subArray, "$(P):LS01:Z7:RANGE2:ARRAY") {
11928  field(SCAN, "Passive")
11929  field(FTVL, "DOUBLE")
11930  field(INP, "$(P):LS01:Z7:ALL2.VAL MS")
11931  field(MALM, "8")
11932  field(NELM, "1")
11933  field(INDX, "5")
11934  field(PREC, "1")
11935  field(FLNK, "$(P):LS01:Z7:RANGE2.PROC")
11936 }
11937 record(mbbi, "$(P):LS01:Z7:RANGE2") {
11938  field(INP, "$(P):LS01:Z7:RANGE2:ARRAY.VAL")
11939  field(SCAN, "Passive")
11940  field(ZRST, "Off")
11941  field(ZRVL, "0")
11942  field(ONST, "Range1/Low")
11943  field(ONVL, "1")
11944  field(TWST, "Range2/Medium")
11945  field(TWVL, "2")
11946  field(THST, "Range3/High")
11947  field(THVL, "3")
11948  field(FRST, "Range4")
11949  field(FRVL, "4")
11950  field(FVST, "Range5")
11951  field(FVVL, "5")
11952  field(FLNK, "$(P):LS01:Z7:INPUT2:ARRAY.PROC")
11953 }
11954 
11955 ##
11956 ## Read the ZONE INPUT setting.
11957 ##
11958 record(subArray, "$(P):LS01:Z7:INPUT2:ARRAY") {
11959  field(SCAN, "Passive")
11960  field(FTVL, "DOUBLE")
11961  field(INP, "$(P):LS01:Z7:ALL2.VAL MS")
11962  field(MALM, "8")
11963  field(NELM, "1")
11964  field(INDX, "6")
11965  field(PREC, "1")
11966  field(FLNK, "$(P):LS01:Z7:INPUT2.PROC")
11967 }
11968 record(mbbi, "$(P):LS01:Z7:INPUT2") {
11969  field(INP, "$(P):LS01:Z7:INPUT2:ARRAY.VAL")
11970  field(SCAN, "Passive")
11971  field(ZRST, "None")
11972  field(ZRVL, "0")
11973  field(ONST, "Input A")
11974  field(ONVL, "1")
11975  field(TWST, "Input B")
11976  field(TWVL, "2")
11977  field(THST, "Input C")
11978  field(THVL, "3")
11979  field(FRST, "Input D")
11980  field(FRVL, "4")
11981  field(FVST, "Input D2")
11982  field(FVVL, "5")
11983  field(SXST, "Input D3")
11984  field(SXVL, "6")
11985  field(SVST, "Input D4")
11986  field(SVVL, "7")
11987  field(EIST, "Input D5")
11988  field(EIVL, "8")
11989  field(FLNK, "$(P):LS01:Z7:RATE2:ARRAY.PROC")
11990 }
11991 
11992 ##
11993 ## Read the ZONE RATE setting.
11994 ##
11995 record(subArray, "$(P):LS01:Z7:RATE2:ARRAY") {
11996  field(SCAN, "Passive")
11997  field(FTVL, "DOUBLE")
11998  field(INP, "$(P):LS01:Z7:ALL2.VAL MS")
11999  field(MALM, "8")
12000  field(NELM, "1")
12001  field(INDX, "7")
12002  field(PREC, "1")
12003  field(FLNK, "$(P):LS01:Z7:RATE2.PROC")
12004 }
12005 record(ai, "$(P):LS01:Z7:RATE2") {
12006  field(SCAN, "Passive")
12007  field(INP, "$(P):LS01:Z7:RATE2:ARRAY.VAL MS")
12008  field(PREC, "1")
12009  field(FLNK, "$(P):LS01:Z7:INITCALC2.PROC")
12010 }
12011 
12012 ##############################################################
12013 ##
12014 ## Populate the write records below with the current values.
12015 ## Only do this once at startup.
12016 ##
12017 ###############################################################
12018 
12019 record(calcout, "$(P):LS01:Z7:INITCALC2") {
12020  field(INPA, "0")
12021  field(CALC, "A")
12022  field(VAL, "0")
12023  field(DOPT, "Use OCAL")
12024  field(OOPT, "When Zero")
12025  field(OCAL, "1")
12026  field(OUT, "$(P):LS01:Z7:INITUB2.PROC")
12027 }
12028 
12029 record(dfanout, "$(P):LS01:Z7:INITUB2") {
12030  field(OMSL, "closed_loop")
12031  field(DOL, "$(P):LS01:Z7:UB2.VAL")
12032  field(OUTA, "$(P):LS01:Z7:UB_S2.VAL PP")
12033  field(FLNK, "$(P):LS01:Z7:INITP2.PROC")
12034 }
12035 record(dfanout, "$(P):LS01:Z7:INITP2") {
12036  field(OMSL, "closed_loop")
12037  field(DOL, "$(P):LS01:Z7:P2.VAL")
12038  field(OUTA, "$(P):LS01:Z7:P_S2.VAL PP")
12039  field(FLNK, "$(P):LS01:Z7:INITI2.PROC")
12040 }
12041 record(dfanout, "$(P):LS01:Z7:INITI2") {
12042  field(OMSL, "closed_loop")
12043  field(DOL, "$(P):LS01:Z7:I2.VAL")
12044  field(OUTA, "$(P):LS01:Z7:I_S2.VAL PP")
12045  field(FLNK, "$(P):LS01:Z7:INITD2.PROC")
12046 }
12047 record(dfanout, "$(P):LS01:Z7:INITD2") {
12048  field(OMSL, "closed_loop")
12049  field(DOL, "$(P):LS01:Z7:D2.VAL")
12050  field(OUTA, "$(P):LS01:Z7:D_S2.VAL PP")
12051  field(FLNK, "$(P):LS01:Z7:INITMOUT2.PROC")
12052 }
12053 record(dfanout, "$(P):LS01:Z7:INITMOUT2") {
12054  field(OMSL, "closed_loop")
12055  field(DOL, "$(P):LS01:Z7:MOUT2.VAL")
12056  field(OUTA, "$(P):LS01:Z7:MOUT_S2.VAL PP")
12057  field(FLNK, "$(P):LS01:Z7:INITRANGE2.PROC")
12058 }
12059 record(dfanout, "$(P):LS01:Z7:INITRANGE2") {
12060  field(OMSL, "closed_loop")
12061  field(DOL, "$(P):LS01:Z7:RANGE2.VAL")
12062  field(OUTA, "$(P):LS01:Z7:RANGE_S2.VAL PP")
12063  field(FLNK, "$(P):LS01:Z7:INITINPUT2.PROC")
12064 }
12065 record(dfanout, "$(P):LS01:Z7:INITINPUT2") {
12066  field(OMSL, "closed_loop")
12067  field(DOL, "$(P):LS01:Z7:INPUT2.VAL")
12068  field(OUTA, "$(P):LS01:Z7:INPUT_S2.VAL PP")
12069  field(FLNK, "$(P):LS01:Z7:INITRATE2.PROC")
12070 }
12071 record(dfanout, "$(P):LS01:Z7:INITRATE2") {
12072  field(OMSL, "closed_loop")
12073  field(DOL, "$(P):LS01:Z7:RATE2.VAL")
12074  field(OUTA, "$(P):LS01:Z7:RATE_S2.VAL PP")
12075  field(FLNK, "$(P):LS01:Z7:INITCOUNT2.PROC")
12076 }
12077 
12078 record(dfanout, "$(P):LS01:Z7:INITCOUNT2") {
12079  field(DOL, "1")
12080  field(OUTA, "$(P):LS01:Z7:INITCALC2.A")
12081 }
12082 
12083 
12084 
12085 #############################################
12086 # Write records. There is a calcout record to
12087 # do the actual write.
12088 #############################################
12089 
12090 ##
12091 ## Set the ZONE upper boundary setting.
12092 ##
12093 record(ao, "$(P):LS01:Z7:UB_S2") {
12094  field(SCAN, "Passive")
12095  field(PREC, "1")
12096  field(SDIS, "$(P):LS01:DISABLE")
12097 }
12098 
12099 ##
12100 ## Set the ZONE P setting.
12101 ##
12102 record(ao, "$(P):LS01:Z7:P_S2") {
12103  field(SCAN, "Passive")
12104  field(PREC, "1")
12105  field(SDIS, "$(P):LS01:DISABLE")
12106 }
12107 
12108 ##
12109 ## Set the ZONE I setting.
12110 ##
12111 record(ao, "$(P):LS01:Z7:I_S2") {
12112  field(SCAN, "Passive")
12113  field(PREC, "1")
12114  field(SDIS, "$(P):LS01:DISABLE")
12115 }
12116 
12117 ##
12118 ## Set the ZONE D setting.
12119 ##
12120 record(ao, "$(P):LS01:Z7:D_S2") {
12121  field(SCAN, "Passive")
12122  field(PREC, "1")
12123  field(SDIS, "$(P):LS01:DISABLE")
12124 }
12125 
12126 ##
12127 ## Set the ZONE MOUT setting.
12128 ##
12129 record(ao, "$(P):LS01:Z7:MOUT_S2") {
12130  field(SCAN, "Passive")
12131  field(PREC, "1")
12132  field(SDIS, "$(P):LS01:DISABLE")
12133 }
12134 
12135 ##
12136 ## Set the ZONE RANGE setting.
12137 ##
12138 record(mbbo, "$(P):LS01:Z7:RANGE_S2") {
12139  field(SCAN, "Passive")
12140  field(ZRST, "Off")
12141  field(ZRVL, "0")
12142  field(ONST, "Range1/Low")
12143  field(ONVL, "1")
12144  field(TWST, "Range2/Medium")
12145  field(TWVL, "2")
12146  field(THST, "Range3/High")
12147  field(THVL, "3")
12148  field(FRST, "Range4")
12149  field(FRVL, "4")
12150  field(FVST, "Range5")
12151  field(FVVL, "5")
12152  field(SDIS, "$(P):LS01:DISABLE")
12153 }
12154 
12155 ##
12156 ## Set the ZONE INPUT setting.
12157 ##
12158 record(mbbo, "$(P):LS01:Z7:INPUT_S2") {
12159  field(ZRST, "None")
12160  field(ZRVL, "0")
12161  field(ONST, "Input A")
12162  field(ONVL, "1")
12163  field(TWST, "Input B")
12164  field(TWVL, "2")
12165  field(THST, "Input C")
12166  field(THVL, "3")
12167  field(FRST, "Input D")
12168  field(FRVL, "4")
12169  field(FVST, "Input D2")
12170  field(FVVL, "5")
12171  field(SXST, "Input D3")
12172  field(SXVL, "6")
12173  field(SVST, "Input D4")
12174  field(SVVL, "7")
12175  field(EIST, "Input D5")
12176  field(EIVL, "8")
12177  field(SDIS, "$(P):LS01:DISABLE")
12178 }
12179 
12180 ##
12181 ## Set the ZONE RATE setting.
12182 ##
12183 record(ao, "$(P):LS01:Z7:RATE_S2") {
12184  field(SCAN, "Passive")
12185  field(PREC, "1")
12186  field(SDIS, "$(P):LS01:DISABLE")
12187 }
12188 
12189 ##
12190 ## Record to write the ZONE parameters.
12191 ##
12192 record(calcout, "$(P):LS01:Z7:SET2") {
12193  field(INPA, "$(P):LS01:Z7:UB_S2")
12194  field(INPB, "$(P):LS01:Z7:P_S2")
12195  field(INPC, "$(P):LS01:Z7:I_S2")
12196  field(INPD, "$(P):LS01:Z7:D_S2")
12197  field(INPE, "$(P):LS01:Z7:MOUT_S2")
12198  field(INPF, "$(P):LS01:Z7:RANGE_S2")
12199  field(INPG, "$(P):LS01:Z7:INPUT_S2")
12200  field(INPH, "$(P):LS01:Z7:RATE_S2")
12201  field(CALC, "0")
12202  field(DTYP, "stream")
12203  field(OUT, "@ls336.proto setZONE(2,7) L0 0")
12204  field(SDIS, "$(P):LS01:DISABLE")
12205  field(FLNK, "$(P):LS01:Z7:ALL2.PROC")
12206 }
12207 
12208 
12209 
12210 
12211 
12212 
12213 
12214 
12215 
12216 
12217 #######################################
12218 #
12219 # Template to support reading and setting
12220 # controller ZONE parameters. It reads the ZONE
12221 # parameters into an array, then uses subArrays to
12222 # extract each parameter.
12223 #
12224 # This template is used by the output template
12225 # and it needs the following macros:
12226 #
12227 # ZONE: zone number
12228 # OUT: output number
12229 #
12230 #######################################
12231 
12232 ##
12233 ## Read the ZONE setting into an array (8 values)
12234 ##
12235 record(waveform, "$(P):LS01:Z8:ALL2") {
12236  field(DTYP, "stream")
12237  field(SDIS, "$(P):LS01:DISABLE_POLL")
12238  field(INP, "@ls336.proto getZONE(2,8) L0 0")
12239  field(SCAN, "Passive")
12240  field(NELM, "8")
12241  field(FTVL, "DOUBLE")
12242  field(PREC, "1")
12243  field(FLNK, "$(P):LS01:Z8:UB2:ARRAY.PROC")
12244 }
12245 
12246 ##
12247 ## Read the ZONE upper boundary setting.
12248 ##
12249 record(subArray, "$(P):LS01:Z8:UB2:ARRAY") {
12250  field(SCAN, "Passive")
12251  field(FTVL, "DOUBLE")
12252  field(INP, "$(P):LS01:Z8:ALL2.VAL MS")
12253  field(MALM, "8")
12254  field(NELM, "1")
12255  field(INDX, "0")
12256  field(PREC, "1")
12257  field(FLNK, "$(P):LS01:Z8:UB2.PROC")
12258 }
12259 record(ai, "$(P):LS01:Z8:UB2") {
12260  field(SCAN, "Passive")
12261  field(INP, "$(P):LS01:Z8:UB2:ARRAY.VAL MS")
12262  field(PREC, "1")
12263  field(FLNK, "$(P):LS01:Z8:P2:ARRAY.PROC")
12264 }
12265 
12266 ##
12267 ## Read the ZONE P setting.
12268 ##
12269 record(subArray, "$(P):LS01:Z8:P2:ARRAY") {
12270  field(SCAN, "Passive")
12271  field(FTVL, "DOUBLE")
12272  field(INP, "$(P):LS01:Z8:ALL2.VAL MS")
12273  field(MALM, "8")
12274  field(NELM, "1")
12275  field(INDX, "1")
12276  field(PREC, "1")
12277  field(FLNK, "$(P):LS01:Z8:P2.PROC")
12278 }
12279 record(ai, "$(P):LS01:Z8:P2") {
12280  field(SCAN, "Passive")
12281  field(INP, "$(P):LS01:Z8:P2:ARRAY.VAL MS")
12282  field(PREC, "1")
12283  field(FLNK, "$(P):LS01:Z8:I2:ARRAY.PROC")
12284 }
12285 
12286 ##
12287 ## Read the ZONE I setting.
12288 ##
12289 record(subArray, "$(P):LS01:Z8:I2:ARRAY") {
12290  field(SCAN, "Passive")
12291  field(FTVL, "DOUBLE")
12292  field(INP, "$(P):LS01:Z8:ALL2.VAL MS")
12293  field(MALM, "8")
12294  field(NELM, "1")
12295  field(INDX, "2")
12296  field(PREC, "1")
12297  field(FLNK, "$(P):LS01:Z8:I2.PROC")
12298 }
12299 record(ai, "$(P):LS01:Z8:I2") {
12300  field(SCAN, "Passive")
12301  field(INP, "$(P):LS01:Z8:I2:ARRAY.VAL MS")
12302  field(PREC, "1")
12303  field(FLNK, "$(P):LS01:Z8:D2:ARRAY.PROC")
12304 }
12305 
12306 ##
12307 ## Read the ZONE D setting.
12308 ##
12309 record(subArray, "$(P):LS01:Z8:D2:ARRAY") {
12310  field(SCAN, "Passive")
12311  field(FTVL, "DOUBLE")
12312  field(INP, "$(P):LS01:Z8:ALL2.VAL MS")
12313  field(MALM, "8")
12314  field(NELM, "1")
12315  field(INDX, "3")
12316  field(PREC, "1")
12317  field(FLNK, "$(P):LS01:Z8:D2.PROC")
12318 }
12319 record(ai, "$(P):LS01:Z8:D2") {
12320  field(SCAN, "Passive")
12321  field(INP, "$(P):LS01:Z8:D2:ARRAY.VAL MS")
12322  field(PREC, "1")
12323  field(FLNK, "$(P):LS01:Z8:MOUT2:ARRAY.PROC")
12324 }
12325 
12326 ##
12327 ## Read the ZONE MOUT setting.
12328 ##
12329 record(subArray, "$(P):LS01:Z8:MOUT2:ARRAY") {
12330  field(SCAN, "Passive")
12331  field(FTVL, "DOUBLE")
12332  field(INP, "$(P):LS01:Z8:ALL2.VAL MS")
12333  field(MALM, "8")
12334  field(NELM, "1")
12335  field(INDX, "4")
12336  field(PREC, "1")
12337  field(FLNK, "$(P):LS01:Z8:MOUT2.PROC")
12338 }
12339 record(ai, "$(P):LS01:Z8:MOUT2") {
12340  field(SCAN, "Passive")
12341  field(INP, "$(P):LS01:Z8:MOUT2:ARRAY.VAL MS")
12342  field(PREC, "1")
12343  field(FLNK, "$(P):LS01:Z8:RANGE2:ARRAY.PROC")
12344 }
12345 
12346 ##
12347 ## Read the ZONE RANGE setting.
12348 ##
12349 record(subArray, "$(P):LS01:Z8:RANGE2:ARRAY") {
12350  field(SCAN, "Passive")
12351  field(FTVL, "DOUBLE")
12352  field(INP, "$(P):LS01:Z8:ALL2.VAL MS")
12353  field(MALM, "8")
12354  field(NELM, "1")
12355  field(INDX, "5")
12356  field(PREC, "1")
12357  field(FLNK, "$(P):LS01:Z8:RANGE2.PROC")
12358 }
12359 record(mbbi, "$(P):LS01:Z8:RANGE2") {
12360  field(INP, "$(P):LS01:Z8:RANGE2:ARRAY.VAL")
12361  field(SCAN, "Passive")
12362  field(ZRST, "Off")
12363  field(ZRVL, "0")
12364  field(ONST, "Range1/Low")
12365  field(ONVL, "1")
12366  field(TWST, "Range2/Medium")
12367  field(TWVL, "2")
12368  field(THST, "Range3/High")
12369  field(THVL, "3")
12370  field(FRST, "Range4")
12371  field(FRVL, "4")
12372  field(FVST, "Range5")
12373  field(FVVL, "5")
12374  field(FLNK, "$(P):LS01:Z8:INPUT2:ARRAY.PROC")
12375 }
12376 
12377 ##
12378 ## Read the ZONE INPUT setting.
12379 ##
12380 record(subArray, "$(P):LS01:Z8:INPUT2:ARRAY") {
12381  field(SCAN, "Passive")
12382  field(FTVL, "DOUBLE")
12383  field(INP, "$(P):LS01:Z8:ALL2.VAL MS")
12384  field(MALM, "8")
12385  field(NELM, "1")
12386  field(INDX, "6")
12387  field(PREC, "1")
12388  field(FLNK, "$(P):LS01:Z8:INPUT2.PROC")
12389 }
12390 record(mbbi, "$(P):LS01:Z8:INPUT2") {
12391  field(INP, "$(P):LS01:Z8:INPUT2:ARRAY.VAL")
12392  field(SCAN, "Passive")
12393  field(ZRST, "None")
12394  field(ZRVL, "0")
12395  field(ONST, "Input A")
12396  field(ONVL, "1")
12397  field(TWST, "Input B")
12398  field(TWVL, "2")
12399  field(THST, "Input C")
12400  field(THVL, "3")
12401  field(FRST, "Input D")
12402  field(FRVL, "4")
12403  field(FVST, "Input D2")
12404  field(FVVL, "5")
12405  field(SXST, "Input D3")
12406  field(SXVL, "6")
12407  field(SVST, "Input D4")
12408  field(SVVL, "7")
12409  field(EIST, "Input D5")
12410  field(EIVL, "8")
12411  field(FLNK, "$(P):LS01:Z8:RATE2:ARRAY.PROC")
12412 }
12413 
12414 ##
12415 ## Read the ZONE RATE setting.
12416 ##
12417 record(subArray, "$(P):LS01:Z8:RATE2:ARRAY") {
12418  field(SCAN, "Passive")
12419  field(FTVL, "DOUBLE")
12420  field(INP, "$(P):LS01:Z8:ALL2.VAL MS")
12421  field(MALM, "8")
12422  field(NELM, "1")
12423  field(INDX, "7")
12424  field(PREC, "1")
12425  field(FLNK, "$(P):LS01:Z8:RATE2.PROC")
12426 }
12427 record(ai, "$(P):LS01:Z8:RATE2") {
12428  field(SCAN, "Passive")
12429  field(INP, "$(P):LS01:Z8:RATE2:ARRAY.VAL MS")
12430  field(PREC, "1")
12431  field(FLNK, "$(P):LS01:Z8:INITCALC2.PROC")
12432 }
12433 
12434 ##############################################################
12435 ##
12436 ## Populate the write records below with the current values.
12437 ## Only do this once at startup.
12438 ##
12439 ###############################################################
12440 
12441 record(calcout, "$(P):LS01:Z8:INITCALC2") {
12442  field(INPA, "0")
12443  field(CALC, "A")
12444  field(VAL, "0")
12445  field(DOPT, "Use OCAL")
12446  field(OOPT, "When Zero")
12447  field(OCAL, "1")
12448  field(OUT, "$(P):LS01:Z8:INITUB2.PROC")
12449 }
12450 
12451 record(dfanout, "$(P):LS01:Z8:INITUB2") {
12452  field(OMSL, "closed_loop")
12453  field(DOL, "$(P):LS01:Z8:UB2.VAL")
12454  field(OUTA, "$(P):LS01:Z8:UB_S2.VAL PP")
12455  field(FLNK, "$(P):LS01:Z8:INITP2.PROC")
12456 }
12457 record(dfanout, "$(P):LS01:Z8:INITP2") {
12458  field(OMSL, "closed_loop")
12459  field(DOL, "$(P):LS01:Z8:P2.VAL")
12460  field(OUTA, "$(P):LS01:Z8:P_S2.VAL PP")
12461  field(FLNK, "$(P):LS01:Z8:INITI2.PROC")
12462 }
12463 record(dfanout, "$(P):LS01:Z8:INITI2") {
12464  field(OMSL, "closed_loop")
12465  field(DOL, "$(P):LS01:Z8:I2.VAL")
12466  field(OUTA, "$(P):LS01:Z8:I_S2.VAL PP")
12467  field(FLNK, "$(P):LS01:Z8:INITD2.PROC")
12468 }
12469 record(dfanout, "$(P):LS01:Z8:INITD2") {
12470  field(OMSL, "closed_loop")
12471  field(DOL, "$(P):LS01:Z8:D2.VAL")
12472  field(OUTA, "$(P):LS01:Z8:D_S2.VAL PP")
12473  field(FLNK, "$(P):LS01:Z8:INITMOUT2.PROC")
12474 }
12475 record(dfanout, "$(P):LS01:Z8:INITMOUT2") {
12476  field(OMSL, "closed_loop")
12477  field(DOL, "$(P):LS01:Z8:MOUT2.VAL")
12478  field(OUTA, "$(P):LS01:Z8:MOUT_S2.VAL PP")
12479  field(FLNK, "$(P):LS01:Z8:INITRANGE2.PROC")
12480 }
12481 record(dfanout, "$(P):LS01:Z8:INITRANGE2") {
12482  field(OMSL, "closed_loop")
12483  field(DOL, "$(P):LS01:Z8:RANGE2.VAL")
12484  field(OUTA, "$(P):LS01:Z8:RANGE_S2.VAL PP")
12485  field(FLNK, "$(P):LS01:Z8:INITINPUT2.PROC")
12486 }
12487 record(dfanout, "$(P):LS01:Z8:INITINPUT2") {
12488  field(OMSL, "closed_loop")
12489  field(DOL, "$(P):LS01:Z8:INPUT2.VAL")
12490  field(OUTA, "$(P):LS01:Z8:INPUT_S2.VAL PP")
12491  field(FLNK, "$(P):LS01:Z8:INITRATE2.PROC")
12492 }
12493 record(dfanout, "$(P):LS01:Z8:INITRATE2") {
12494  field(OMSL, "closed_loop")
12495  field(DOL, "$(P):LS01:Z8:RATE2.VAL")
12496  field(OUTA, "$(P):LS01:Z8:RATE_S2.VAL PP")
12497  field(FLNK, "$(P):LS01:Z8:INITCOUNT2.PROC")
12498 }
12499 
12500 record(dfanout, "$(P):LS01:Z8:INITCOUNT2") {
12501  field(DOL, "1")
12502  field(OUTA, "$(P):LS01:Z8:INITCALC2.A")
12503 }
12504 
12505 
12506 
12507 #############################################
12508 # Write records. There is a calcout record to
12509 # do the actual write.
12510 #############################################
12511 
12512 ##
12513 ## Set the ZONE upper boundary setting.
12514 ##
12515 record(ao, "$(P):LS01:Z8:UB_S2") {
12516  field(SCAN, "Passive")
12517  field(PREC, "1")
12518  field(SDIS, "$(P):LS01:DISABLE")
12519 }
12520 
12521 ##
12522 ## Set the ZONE P setting.
12523 ##
12524 record(ao, "$(P):LS01:Z8:P_S2") {
12525  field(SCAN, "Passive")
12526  field(PREC, "1")
12527  field(SDIS, "$(P):LS01:DISABLE")
12528 }
12529 
12530 ##
12531 ## Set the ZONE I setting.
12532 ##
12533 record(ao, "$(P):LS01:Z8:I_S2") {
12534  field(SCAN, "Passive")
12535  field(PREC, "1")
12536  field(SDIS, "$(P):LS01:DISABLE")
12537 }
12538 
12539 ##
12540 ## Set the ZONE D setting.
12541 ##
12542 record(ao, "$(P):LS01:Z8:D_S2") {
12543  field(SCAN, "Passive")
12544  field(PREC, "1")
12545  field(SDIS, "$(P):LS01:DISABLE")
12546 }
12547 
12548 ##
12549 ## Set the ZONE MOUT setting.
12550 ##
12551 record(ao, "$(P):LS01:Z8:MOUT_S2") {
12552  field(SCAN, "Passive")
12553  field(PREC, "1")
12554  field(SDIS, "$(P):LS01:DISABLE")
12555 }
12556 
12557 ##
12558 ## Set the ZONE RANGE setting.
12559 ##
12560 record(mbbo, "$(P):LS01:Z8:RANGE_S2") {
12561  field(SCAN, "Passive")
12562  field(ZRST, "Off")
12563  field(ZRVL, "0")
12564  field(ONST, "Range1/Low")
12565  field(ONVL, "1")
12566  field(TWST, "Range2/Medium")
12567  field(TWVL, "2")
12568  field(THST, "Range3/High")
12569  field(THVL, "3")
12570  field(FRST, "Range4")
12571  field(FRVL, "4")
12572  field(FVST, "Range5")
12573  field(FVVL, "5")
12574  field(SDIS, "$(P):LS01:DISABLE")
12575 }
12576 
12577 ##
12578 ## Set the ZONE INPUT setting.
12579 ##
12580 record(mbbo, "$(P):LS01:Z8:INPUT_S2") {
12581  field(ZRST, "None")
12582  field(ZRVL, "0")
12583  field(ONST, "Input A")
12584  field(ONVL, "1")
12585  field(TWST, "Input B")
12586  field(TWVL, "2")
12587  field(THST, "Input C")
12588  field(THVL, "3")
12589  field(FRST, "Input D")
12590  field(FRVL, "4")
12591  field(FVST, "Input D2")
12592  field(FVVL, "5")
12593  field(SXST, "Input D3")
12594  field(SXVL, "6")
12595  field(SVST, "Input D4")
12596  field(SVVL, "7")
12597  field(EIST, "Input D5")
12598  field(EIVL, "8")
12599  field(SDIS, "$(P):LS01:DISABLE")
12600 }
12601 
12602 ##
12603 ## Set the ZONE RATE setting.
12604 ##
12605 record(ao, "$(P):LS01:Z8:RATE_S2") {
12606  field(SCAN, "Passive")
12607  field(PREC, "1")
12608  field(SDIS, "$(P):LS01:DISABLE")
12609 }
12610 
12611 ##
12612 ## Record to write the ZONE parameters.
12613 ##
12614 record(calcout, "$(P):LS01:Z8:SET2") {
12615  field(INPA, "$(P):LS01:Z8:UB_S2")
12616  field(INPB, "$(P):LS01:Z8:P_S2")
12617  field(INPC, "$(P):LS01:Z8:I_S2")
12618  field(INPD, "$(P):LS01:Z8:D_S2")
12619  field(INPE, "$(P):LS01:Z8:MOUT_S2")
12620  field(INPF, "$(P):LS01:Z8:RANGE_S2")
12621  field(INPG, "$(P):LS01:Z8:INPUT_S2")
12622  field(INPH, "$(P):LS01:Z8:RATE_S2")
12623  field(CALC, "0")
12624  field(DTYP, "stream")
12625  field(OUT, "@ls336.proto setZONE(2,8) L0 0")
12626  field(SDIS, "$(P):LS01:DISABLE")
12627  field(FLNK, "$(P):LS01:Z8:ALL2.PROC")
12628 }
12629 
12630 
12631 
12632 
12633 
12634 
12635 
12636 
12637 
12638 
12639 #######################################
12640 #
12641 # Template to support reading and setting
12642 # controller ZONE parameters. It reads the ZONE
12643 # parameters into an array, then uses subArrays to
12644 # extract each parameter.
12645 #
12646 # This template is used by the output template
12647 # and it needs the following macros:
12648 #
12649 # ZONE: zone number
12650 # OUT: output number
12651 #
12652 #######################################
12653 
12654 ##
12655 ## Read the ZONE setting into an array (8 values)
12656 ##
12657 record(waveform, "$(P):LS01:Z9:ALL2") {
12658  field(DTYP, "stream")
12659  field(SDIS, "$(P):LS01:DISABLE_POLL")
12660  field(INP, "@ls336.proto getZONE(2,9) L0 0")
12661  field(SCAN, "Passive")
12662  field(NELM, "8")
12663  field(FTVL, "DOUBLE")
12664  field(PREC, "1")
12665  field(FLNK, "$(P):LS01:Z9:UB2:ARRAY.PROC")
12666 }
12667 
12668 ##
12669 ## Read the ZONE upper boundary setting.
12670 ##
12671 record(subArray, "$(P):LS01:Z9:UB2:ARRAY") {
12672  field(SCAN, "Passive")
12673  field(FTVL, "DOUBLE")
12674  field(INP, "$(P):LS01:Z9:ALL2.VAL MS")
12675  field(MALM, "8")
12676  field(NELM, "1")
12677  field(INDX, "0")
12678  field(PREC, "1")
12679  field(FLNK, "$(P):LS01:Z9:UB2.PROC")
12680 }
12681 record(ai, "$(P):LS01:Z9:UB2") {
12682  field(SCAN, "Passive")
12683  field(INP, "$(P):LS01:Z9:UB2:ARRAY.VAL MS")
12684  field(PREC, "1")
12685  field(FLNK, "$(P):LS01:Z9:P2:ARRAY.PROC")
12686 }
12687 
12688 ##
12689 ## Read the ZONE P setting.
12690 ##
12691 record(subArray, "$(P):LS01:Z9:P2:ARRAY") {
12692  field(SCAN, "Passive")
12693  field(FTVL, "DOUBLE")
12694  field(INP, "$(P):LS01:Z9:ALL2.VAL MS")
12695  field(MALM, "8")
12696  field(NELM, "1")
12697  field(INDX, "1")
12698  field(PREC, "1")
12699  field(FLNK, "$(P):LS01:Z9:P2.PROC")
12700 }
12701 record(ai, "$(P):LS01:Z9:P2") {
12702  field(SCAN, "Passive")
12703  field(INP, "$(P):LS01:Z9:P2:ARRAY.VAL MS")
12704  field(PREC, "1")
12705  field(FLNK, "$(P):LS01:Z9:I2:ARRAY.PROC")
12706 }
12707 
12708 ##
12709 ## Read the ZONE I setting.
12710 ##
12711 record(subArray, "$(P):LS01:Z9:I2:ARRAY") {
12712  field(SCAN, "Passive")
12713  field(FTVL, "DOUBLE")
12714  field(INP, "$(P):LS01:Z9:ALL2.VAL MS")
12715  field(MALM, "8")
12716  field(NELM, "1")
12717  field(INDX, "2")
12718  field(PREC, "1")
12719  field(FLNK, "$(P):LS01:Z9:I2.PROC")
12720 }
12721 record(ai, "$(P):LS01:Z9:I2") {
12722  field(SCAN, "Passive")
12723  field(INP, "$(P):LS01:Z9:I2:ARRAY.VAL MS")
12724  field(PREC, "1")
12725  field(FLNK, "$(P):LS01:Z9:D2:ARRAY.PROC")
12726 }
12727 
12728 ##
12729 ## Read the ZONE D setting.
12730 ##
12731 record(subArray, "$(P):LS01:Z9:D2:ARRAY") {
12732  field(SCAN, "Passive")
12733  field(FTVL, "DOUBLE")
12734  field(INP, "$(P):LS01:Z9:ALL2.VAL MS")
12735  field(MALM, "8")
12736  field(NELM, "1")
12737  field(INDX, "3")
12738  field(PREC, "1")
12739  field(FLNK, "$(P):LS01:Z9:D2.PROC")
12740 }
12741 record(ai, "$(P):LS01:Z9:D2") {
12742  field(SCAN, "Passive")
12743  field(INP, "$(P):LS01:Z9:D2:ARRAY.VAL MS")
12744  field(PREC, "1")
12745  field(FLNK, "$(P):LS01:Z9:MOUT2:ARRAY.PROC")
12746 }
12747 
12748 ##
12749 ## Read the ZONE MOUT setting.
12750 ##
12751 record(subArray, "$(P):LS01:Z9:MOUT2:ARRAY") {
12752  field(SCAN, "Passive")
12753  field(FTVL, "DOUBLE")
12754  field(INP, "$(P):LS01:Z9:ALL2.VAL MS")
12755  field(MALM, "8")
12756  field(NELM, "1")
12757  field(INDX, "4")
12758  field(PREC, "1")
12759  field(FLNK, "$(P):LS01:Z9:MOUT2.PROC")
12760 }
12761 record(ai, "$(P):LS01:Z9:MOUT2") {
12762  field(SCAN, "Passive")
12763  field(INP, "$(P):LS01:Z9:MOUT2:ARRAY.VAL MS")
12764  field(PREC, "1")
12765  field(FLNK, "$(P):LS01:Z9:RANGE2:ARRAY.PROC")
12766 }
12767 
12768 ##
12769 ## Read the ZONE RANGE setting.
12770 ##
12771 record(subArray, "$(P):LS01:Z9:RANGE2:ARRAY") {
12772  field(SCAN, "Passive")
12773  field(FTVL, "DOUBLE")
12774  field(INP, "$(P):LS01:Z9:ALL2.VAL MS")
12775  field(MALM, "8")
12776  field(NELM, "1")
12777  field(INDX, "5")
12778  field(PREC, "1")
12779  field(FLNK, "$(P):LS01:Z9:RANGE2.PROC")
12780 }
12781 record(mbbi, "$(P):LS01:Z9:RANGE2") {
12782  field(INP, "$(P):LS01:Z9:RANGE2:ARRAY.VAL")
12783  field(SCAN, "Passive")
12784  field(ZRST, "Off")
12785  field(ZRVL, "0")
12786  field(ONST, "Range1/Low")
12787  field(ONVL, "1")
12788  field(TWST, "Range2/Medium")
12789  field(TWVL, "2")
12790  field(THST, "Range3/High")
12791  field(THVL, "3")
12792  field(FRST, "Range4")
12793  field(FRVL, "4")
12794  field(FVST, "Range5")
12795  field(FVVL, "5")
12796  field(FLNK, "$(P):LS01:Z9:INPUT2:ARRAY.PROC")
12797 }
12798 
12799 ##
12800 ## Read the ZONE INPUT setting.
12801 ##
12802 record(subArray, "$(P):LS01:Z9:INPUT2:ARRAY") {
12803  field(SCAN, "Passive")
12804  field(FTVL, "DOUBLE")
12805  field(INP, "$(P):LS01:Z9:ALL2.VAL MS")
12806  field(MALM, "8")
12807  field(NELM, "1")
12808  field(INDX, "6")
12809  field(PREC, "1")
12810  field(FLNK, "$(P):LS01:Z9:INPUT2.PROC")
12811 }
12812 record(mbbi, "$(P):LS01:Z9:INPUT2") {
12813  field(INP, "$(P):LS01:Z9:INPUT2:ARRAY.VAL")
12814  field(SCAN, "Passive")
12815  field(ZRST, "None")
12816  field(ZRVL, "0")
12817  field(ONST, "Input A")
12818  field(ONVL, "1")
12819  field(TWST, "Input B")
12820  field(TWVL, "2")
12821  field(THST, "Input C")
12822  field(THVL, "3")
12823  field(FRST, "Input D")
12824  field(FRVL, "4")
12825  field(FVST, "Input D2")
12826  field(FVVL, "5")
12827  field(SXST, "Input D3")
12828  field(SXVL, "6")
12829  field(SVST, "Input D4")
12830  field(SVVL, "7")
12831  field(EIST, "Input D5")
12832  field(EIVL, "8")
12833  field(FLNK, "$(P):LS01:Z9:RATE2:ARRAY.PROC")
12834 }
12835 
12836 ##
12837 ## Read the ZONE RATE setting.
12838 ##
12839 record(subArray, "$(P):LS01:Z9:RATE2:ARRAY") {
12840  field(SCAN, "Passive")
12841  field(FTVL, "DOUBLE")
12842  field(INP, "$(P):LS01:Z9:ALL2.VAL MS")
12843  field(MALM, "8")
12844  field(NELM, "1")
12845  field(INDX, "7")
12846  field(PREC, "1")
12847  field(FLNK, "$(P):LS01:Z9:RATE2.PROC")
12848 }
12849 record(ai, "$(P):LS01:Z9:RATE2") {
12850  field(SCAN, "Passive")
12851  field(INP, "$(P):LS01:Z9:RATE2:ARRAY.VAL MS")
12852  field(PREC, "1")
12853  field(FLNK, "$(P):LS01:Z9:INITCALC2.PROC")
12854 }
12855 
12856 ##############################################################
12857 ##
12858 ## Populate the write records below with the current values.
12859 ## Only do this once at startup.
12860 ##
12861 ###############################################################
12862 
12863 record(calcout, "$(P):LS01:Z9:INITCALC2") {
12864  field(INPA, "0")
12865  field(CALC, "A")
12866  field(VAL, "0")
12867  field(DOPT, "Use OCAL")
12868  field(OOPT, "When Zero")
12869  field(OCAL, "1")
12870  field(OUT, "$(P):LS01:Z9:INITUB2.PROC")
12871 }
12872 
12873 record(dfanout, "$(P):LS01:Z9:INITUB2") {
12874  field(OMSL, "closed_loop")
12875  field(DOL, "$(P):LS01:Z9:UB2.VAL")
12876  field(OUTA, "$(P):LS01:Z9:UB_S2.VAL PP")
12877  field(FLNK, "$(P):LS01:Z9:INITP2.PROC")
12878 }
12879 record(dfanout, "$(P):LS01:Z9:INITP2") {
12880  field(OMSL, "closed_loop")
12881  field(DOL, "$(P):LS01:Z9:P2.VAL")
12882  field(OUTA, "$(P):LS01:Z9:P_S2.VAL PP")
12883  field(FLNK, "$(P):LS01:Z9:INITI2.PROC")
12884 }
12885 record(dfanout, "$(P):LS01:Z9:INITI2") {
12886  field(OMSL, "closed_loop")
12887  field(DOL, "$(P):LS01:Z9:I2.VAL")
12888  field(OUTA, "$(P):LS01:Z9:I_S2.VAL PP")
12889  field(FLNK, "$(P):LS01:Z9:INITD2.PROC")
12890 }
12891 record(dfanout, "$(P):LS01:Z9:INITD2") {
12892  field(OMSL, "closed_loop")
12893  field(DOL, "$(P):LS01:Z9:D2.VAL")
12894  field(OUTA, "$(P):LS01:Z9:D_S2.VAL PP")
12895  field(FLNK, "$(P):LS01:Z9:INITMOUT2.PROC")
12896 }
12897 record(dfanout, "$(P):LS01:Z9:INITMOUT2") {
12898  field(OMSL, "closed_loop")
12899  field(DOL, "$(P):LS01:Z9:MOUT2.VAL")
12900  field(OUTA, "$(P):LS01:Z9:MOUT_S2.VAL PP")
12901  field(FLNK, "$(P):LS01:Z9:INITRANGE2.PROC")
12902 }
12903 record(dfanout, "$(P):LS01:Z9:INITRANGE2") {
12904  field(OMSL, "closed_loop")
12905  field(DOL, "$(P):LS01:Z9:RANGE2.VAL")
12906  field(OUTA, "$(P):LS01:Z9:RANGE_S2.VAL PP")
12907  field(FLNK, "$(P):LS01:Z9:INITINPUT2.PROC")
12908 }
12909 record(dfanout, "$(P):LS01:Z9:INITINPUT2") {
12910  field(OMSL, "closed_loop")
12911  field(DOL, "$(P):LS01:Z9:INPUT2.VAL")
12912  field(OUTA, "$(P):LS01:Z9:INPUT_S2.VAL PP")
12913  field(FLNK, "$(P):LS01:Z9:INITRATE2.PROC")
12914 }
12915 record(dfanout, "$(P):LS01:Z9:INITRATE2") {
12916  field(OMSL, "closed_loop")
12917  field(DOL, "$(P):LS01:Z9:RATE2.VAL")
12918  field(OUTA, "$(P):LS01:Z9:RATE_S2.VAL PP")
12919  field(FLNK, "$(P):LS01:Z9:INITCOUNT2.PROC")
12920 }
12921 
12922 record(dfanout, "$(P):LS01:Z9:INITCOUNT2") {
12923  field(DOL, "1")
12924  field(OUTA, "$(P):LS01:Z9:INITCALC2.A")
12925 }
12926 
12927 
12928 
12929 #############################################
12930 # Write records. There is a calcout record to
12931 # do the actual write.
12932 #############################################
12933 
12934 ##
12935 ## Set the ZONE upper boundary setting.
12936 ##
12937 record(ao, "$(P):LS01:Z9:UB_S2") {
12938  field(SCAN, "Passive")
12939  field(PREC, "1")
12940  field(SDIS, "$(P):LS01:DISABLE")
12941 }
12942 
12943 ##
12944 ## Set the ZONE P setting.
12945 ##
12946 record(ao, "$(P):LS01:Z9:P_S2") {
12947  field(SCAN, "Passive")
12948  field(PREC, "1")
12949  field(SDIS, "$(P):LS01:DISABLE")
12950 }
12951 
12952 ##
12953 ## Set the ZONE I setting.
12954 ##
12955 record(ao, "$(P):LS01:Z9:I_S2") {
12956  field(SCAN, "Passive")
12957  field(PREC, "1")
12958  field(SDIS, "$(P):LS01:DISABLE")
12959 }
12960 
12961 ##
12962 ## Set the ZONE D setting.
12963 ##
12964 record(ao, "$(P):LS01:Z9:D_S2") {
12965  field(SCAN, "Passive")
12966  field(PREC, "1")
12967  field(SDIS, "$(P):LS01:DISABLE")
12968 }
12969 
12970 ##
12971 ## Set the ZONE MOUT setting.
12972 ##
12973 record(ao, "$(P):LS01:Z9:MOUT_S2") {
12974  field(SCAN, "Passive")
12975  field(PREC, "1")
12976  field(SDIS, "$(P):LS01:DISABLE")
12977 }
12978 
12979 ##
12980 ## Set the ZONE RANGE setting.
12981 ##
12982 record(mbbo, "$(P):LS01:Z9:RANGE_S2") {
12983  field(SCAN, "Passive")
12984  field(ZRST, "Off")
12985  field(ZRVL, "0")
12986  field(ONST, "Range1/Low")
12987  field(ONVL, "1")
12988  field(TWST, "Range2/Medium")
12989  field(TWVL, "2")
12990  field(THST, "Range3/High")
12991  field(THVL, "3")
12992  field(FRST, "Range4")
12993  field(FRVL, "4")
12994  field(FVST, "Range5")
12995  field(FVVL, "5")
12996  field(SDIS, "$(P):LS01:DISABLE")
12997 }
12998 
12999 ##
13000 ## Set the ZONE INPUT setting.
13001 ##
13002 record(mbbo, "$(P):LS01:Z9:INPUT_S2") {
13003  field(ZRST, "None")
13004  field(ZRVL, "0")
13005  field(ONST, "Input A")
13006  field(ONVL, "1")
13007  field(TWST, "Input B")
13008  field(TWVL, "2")
13009  field(THST, "Input C")
13010  field(THVL, "3")
13011  field(FRST, "Input D")
13012  field(FRVL, "4")
13013  field(FVST, "Input D2")
13014  field(FVVL, "5")
13015  field(SXST, "Input D3")
13016  field(SXVL, "6")
13017  field(SVST, "Input D4")
13018  field(SVVL, "7")
13019  field(EIST, "Input D5")
13020  field(EIVL, "8")
13021  field(SDIS, "$(P):LS01:DISABLE")
13022 }
13023 
13024 ##
13025 ## Set the ZONE RATE setting.
13026 ##
13027 record(ao, "$(P):LS01:Z9:RATE_S2") {
13028  field(SCAN, "Passive")
13029  field(PREC, "1")
13030  field(SDIS, "$(P):LS01:DISABLE")
13031 }
13032 
13033 ##
13034 ## Record to write the ZONE parameters.
13035 ##
13036 record(calcout, "$(P):LS01:Z9:SET2") {
13037  field(INPA, "$(P):LS01:Z9:UB_S2")
13038  field(INPB, "$(P):LS01:Z9:P_S2")
13039  field(INPC, "$(P):LS01:Z9:I_S2")
13040  field(INPD, "$(P):LS01:Z9:D_S2")
13041  field(INPE, "$(P):LS01:Z9:MOUT_S2")
13042  field(INPF, "$(P):LS01:Z9:RANGE_S2")
13043  field(INPG, "$(P):LS01:Z9:INPUT_S2")
13044  field(INPH, "$(P):LS01:Z9:RATE_S2")
13045  field(CALC, "0")
13046  field(DTYP, "stream")
13047  field(OUT, "@ls336.proto setZONE(2,9) L0 0")
13048  field(SDIS, "$(P):LS01:DISABLE")
13049  field(FLNK, "$(P):LS01:Z9:ALL2.PROC")
13050 }
13051 
13052 
13053 
13054 
13055 
13056 
13057 
13058 
13059 
13060 
13061 #######################################
13062 #
13063 # Template to support reading and setting
13064 # controller ZONE parameters. It reads the ZONE
13065 # parameters into an array, then uses subArrays to
13066 # extract each parameter.
13067 #
13068 # This template is used by the output template
13069 # and it needs the following macros:
13070 #
13071 # ZONE: zone number
13072 # OUT: output number
13073 #
13074 #######################################
13075 
13076 ##
13077 ## Read the ZONE setting into an array (8 values)
13078 ##
13079 record(waveform, "$(P):LS01:Z10:ALL2") {
13080  field(DTYP, "stream")
13081  field(SDIS, "$(P):LS01:DISABLE_POLL")
13082  field(INP, "@ls336.proto getZONE(2,10) L0 0")
13083  field(SCAN, "Passive")
13084  field(NELM, "8")
13085  field(FTVL, "DOUBLE")
13086  field(PREC, "1")
13087  field(FLNK, "$(P):LS01:Z10:UB2:ARRAY.PROC")
13088 }
13089 
13090 ##
13091 ## Read the ZONE upper boundary setting.
13092 ##
13093 record(subArray, "$(P):LS01:Z10:UB2:ARRAY") {
13094  field(SCAN, "Passive")
13095  field(FTVL, "DOUBLE")
13096  field(INP, "$(P):LS01:Z10:ALL2.VAL MS")
13097  field(MALM, "8")
13098  field(NELM, "1")
13099  field(INDX, "0")
13100  field(PREC, "1")
13101  field(FLNK, "$(P):LS01:Z10:UB2.PROC")
13102 }
13103 record(ai, "$(P):LS01:Z10:UB2") {
13104  field(SCAN, "Passive")
13105  field(INP, "$(P):LS01:Z10:UB2:ARRAY.VAL MS")
13106  field(PREC, "1")
13107  field(FLNK, "$(P):LS01:Z10:P2:ARRAY.PROC")
13108 }
13109 
13110 ##
13111 ## Read the ZONE P setting.
13112 ##
13113 record(subArray, "$(P):LS01:Z10:P2:ARRAY") {
13114  field(SCAN, "Passive")
13115  field(FTVL, "DOUBLE")
13116  field(INP, "$(P):LS01:Z10:ALL2.VAL MS")
13117  field(MALM, "8")
13118  field(NELM, "1")
13119  field(INDX, "1")
13120  field(PREC, "1")
13121  field(FLNK, "$(P):LS01:Z10:P2.PROC")
13122 }
13123 record(ai, "$(P):LS01:Z10:P2") {
13124  field(SCAN, "Passive")
13125  field(INP, "$(P):LS01:Z10:P2:ARRAY.VAL MS")
13126  field(PREC, "1")
13127  field(FLNK, "$(P):LS01:Z10:I2:ARRAY.PROC")
13128 }
13129 
13130 ##
13131 ## Read the ZONE I setting.
13132 ##
13133 record(subArray, "$(P):LS01:Z10:I2:ARRAY") {
13134  field(SCAN, "Passive")
13135  field(FTVL, "DOUBLE")
13136  field(INP, "$(P):LS01:Z10:ALL2.VAL MS")
13137  field(MALM, "8")
13138  field(NELM, "1")
13139  field(INDX, "2")
13140  field(PREC, "1")
13141  field(FLNK, "$(P):LS01:Z10:I2.PROC")
13142 }
13143 record(ai, "$(P):LS01:Z10:I2") {
13144  field(SCAN, "Passive")
13145  field(INP, "$(P):LS01:Z10:I2:ARRAY.VAL MS")
13146  field(PREC, "1")
13147  field(FLNK, "$(P):LS01:Z10:D2:ARRAY.PROC")
13148 }
13149 
13150 ##
13151 ## Read the ZONE D setting.
13152 ##
13153 record(subArray, "$(P):LS01:Z10:D2:ARRAY") {
13154  field(SCAN, "Passive")
13155  field(FTVL, "DOUBLE")
13156  field(INP, "$(P):LS01:Z10:ALL2.VAL MS")
13157  field(MALM, "8")
13158  field(NELM, "1")
13159  field(INDX, "3")
13160  field(PREC, "1")
13161  field(FLNK, "$(P):LS01:Z10:D2.PROC")
13162 }
13163 record(ai, "$(P):LS01:Z10:D2") {
13164  field(SCAN, "Passive")
13165  field(INP, "$(P):LS01:Z10:D2:ARRAY.VAL MS")
13166  field(PREC, "1")
13167  field(FLNK, "$(P):LS01:Z10:MOUT2:ARRAY.PROC")
13168 }
13169 
13170 ##
13171 ## Read the ZONE MOUT setting.
13172 ##
13173 record(subArray, "$(P):LS01:Z10:MOUT2:ARRAY") {
13174  field(SCAN, "Passive")
13175  field(FTVL, "DOUBLE")
13176  field(INP, "$(P):LS01:Z10:ALL2.VAL MS")
13177  field(MALM, "8")
13178  field(NELM, "1")
13179  field(INDX, "4")
13180  field(PREC, "1")
13181  field(FLNK, "$(P):LS01:Z10:MOUT2.PROC")
13182 }
13183 record(ai, "$(P):LS01:Z10:MOUT2") {
13184  field(SCAN, "Passive")
13185  field(INP, "$(P):LS01:Z10:MOUT2:ARRAY.VAL MS")
13186  field(PREC, "1")
13187  field(FLNK, "$(P):LS01:Z10:RANGE2:ARRAY.PROC")
13188 }
13189 
13190 ##
13191 ## Read the ZONE RANGE setting.
13192 ##
13193 record(subArray, "$(P):LS01:Z10:RANGE2:ARRAY") {
13194  field(SCAN, "Passive")
13195  field(FTVL, "DOUBLE")
13196  field(INP, "$(P):LS01:Z10:ALL2.VAL MS")
13197  field(MALM, "8")
13198  field(NELM, "1")
13199  field(INDX, "5")
13200  field(PREC, "1")
13201  field(FLNK, "$(P):LS01:Z10:RANGE2.PROC")
13202 }
13203 record(mbbi, "$(P):LS01:Z10:RANGE2") {
13204  field(INP, "$(P):LS01:Z10:RANGE2:ARRAY.VAL")
13205  field(SCAN, "Passive")
13206  field(ZRST, "Off")
13207  field(ZRVL, "0")
13208  field(ONST, "Range1/Low")
13209  field(ONVL, "1")
13210  field(TWST, "Range2/Medium")
13211  field(TWVL, "2")
13212  field(THST, "Range3/High")
13213  field(THVL, "3")
13214  field(FRST, "Range4")
13215  field(FRVL, "4")
13216  field(FVST, "Range5")
13217  field(FVVL, "5")
13218  field(FLNK, "$(P):LS01:Z10:INPUT2:ARRAY.PROC")
13219 }
13220 
13221 ##
13222 ## Read the ZONE INPUT setting.
13223 ##
13224 record(subArray, "$(P):LS01:Z10:INPUT2:ARRAY") {
13225  field(SCAN, "Passive")
13226  field(FTVL, "DOUBLE")
13227  field(INP, "$(P):LS01:Z10:ALL2.VAL MS")
13228  field(MALM, "8")
13229  field(NELM, "1")
13230  field(INDX, "6")
13231  field(PREC, "1")
13232  field(FLNK, "$(P):LS01:Z10:INPUT2.PROC")
13233 }
13234 record(mbbi, "$(P):LS01:Z10:INPUT2") {
13235  field(INP, "$(P):LS01:Z10:INPUT2:ARRAY.VAL")
13236  field(SCAN, "Passive")
13237  field(ZRST, "None")
13238  field(ZRVL, "0")
13239  field(ONST, "Input A")
13240  field(ONVL, "1")
13241  field(TWST, "Input B")
13242  field(TWVL, "2")
13243  field(THST, "Input C")
13244  field(THVL, "3")
13245  field(FRST, "Input D")
13246  field(FRVL, "4")
13247  field(FVST, "Input D2")
13248  field(FVVL, "5")
13249  field(SXST, "Input D3")
13250  field(SXVL, "6")
13251  field(SVST, "Input D4")
13252  field(SVVL, "7")
13253  field(EIST, "Input D5")
13254  field(EIVL, "8")
13255  field(FLNK, "$(P):LS01:Z10:RATE2:ARRAY.PROC")
13256 }
13257 
13258 ##
13259 ## Read the ZONE RATE setting.
13260 ##
13261 record(subArray, "$(P):LS01:Z10:RATE2:ARRAY") {
13262  field(SCAN, "Passive")
13263  field(FTVL, "DOUBLE")
13264  field(INP, "$(P):LS01:Z10:ALL2.VAL MS")
13265  field(MALM, "8")
13266  field(NELM, "1")
13267  field(INDX, "7")
13268  field(PREC, "1")
13269  field(FLNK, "$(P):LS01:Z10:RATE2.PROC")
13270 }
13271 record(ai, "$(P):LS01:Z10:RATE2") {
13272  field(SCAN, "Passive")
13273  field(INP, "$(P):LS01:Z10:RATE2:ARRAY.VAL MS")
13274  field(PREC, "1")
13275  field(FLNK, "$(P):LS01:Z10:INITCALC2.PROC")
13276 }
13277 
13278 ##############################################################
13279 ##
13280 ## Populate the write records below with the current values.
13281 ## Only do this once at startup.
13282 ##
13283 ###############################################################
13284 
13285 record(calcout, "$(P):LS01:Z10:INITCALC2") {
13286  field(INPA, "0")
13287  field(CALC, "A")
13288  field(VAL, "0")
13289  field(DOPT, "Use OCAL")
13290  field(OOPT, "When Zero")
13291  field(OCAL, "1")
13292  field(OUT, "$(P):LS01:Z10:INITUB2.PROC")
13293 }
13294 
13295 record(dfanout, "$(P):LS01:Z10:INITUB2") {
13296  field(OMSL, "closed_loop")
13297  field(DOL, "$(P):LS01:Z10:UB2.VAL")
13298  field(OUTA, "$(P):LS01:Z10:UB_S2.VAL PP")
13299  field(FLNK, "$(P):LS01:Z10:INITP2.PROC")
13300 }
13301 record(dfanout, "$(P):LS01:Z10:INITP2") {
13302  field(OMSL, "closed_loop")
13303  field(DOL, "$(P):LS01:Z10:P2.VAL")
13304  field(OUTA, "$(P):LS01:Z10:P_S2.VAL PP")
13305  field(FLNK, "$(P):LS01:Z10:INITI2.PROC")
13306 }
13307 record(dfanout, "$(P):LS01:Z10:INITI2") {
13308  field(OMSL, "closed_loop")
13309  field(DOL, "$(P):LS01:Z10:I2.VAL")
13310  field(OUTA, "$(P):LS01:Z10:I_S2.VAL PP")
13311  field(FLNK, "$(P):LS01:Z10:INITD2.PROC")
13312 }
13313 record(dfanout, "$(P):LS01:Z10:INITD2") {
13314  field(OMSL, "closed_loop")
13315  field(DOL, "$(P):LS01:Z10:D2.VAL")
13316  field(OUTA, "$(P):LS01:Z10:D_S2.VAL PP")
13317  field(FLNK, "$(P):LS01:Z10:INITMOUT2.PROC")
13318 }
13319 record(dfanout, "$(P):LS01:Z10:INITMOUT2") {
13320  field(OMSL, "closed_loop")
13321  field(DOL, "$(P):LS01:Z10:MOUT2.VAL")
13322  field(OUTA, "$(P):LS01:Z10:MOUT_S2.VAL PP")
13323  field(FLNK, "$(P):LS01:Z10:INITRANGE2.PROC")
13324 }
13325 record(dfanout, "$(P):LS01:Z10:INITRANGE2") {
13326  field(OMSL, "closed_loop")
13327  field(DOL, "$(P):LS01:Z10:RANGE2.VAL")
13328  field(OUTA, "$(P):LS01:Z10:RANGE_S2.VAL PP")
13329  field(FLNK, "$(P):LS01:Z10:INITINPUT2.PROC")
13330 }
13331 record(dfanout, "$(P):LS01:Z10:INITINPUT2") {
13332  field(OMSL, "closed_loop")
13333  field(DOL, "$(P):LS01:Z10:INPUT2.VAL")
13334  field(OUTA, "$(P):LS01:Z10:INPUT_S2.VAL PP")
13335  field(FLNK, "$(P):LS01:Z10:INITRATE2.PROC")
13336 }
13337 record(dfanout, "$(P):LS01:Z10:INITRATE2") {
13338  field(OMSL, "closed_loop")
13339  field(DOL, "$(P):LS01:Z10:RATE2.VAL")
13340  field(OUTA, "$(P):LS01:Z10:RATE_S2.VAL PP")
13341  field(FLNK, "$(P):LS01:Z10:INITCOUNT2.PROC")
13342 }
13343 
13344 record(dfanout, "$(P):LS01:Z10:INITCOUNT2") {
13345  field(DOL, "1")
13346  field(OUTA, "$(P):LS01:Z10:INITCALC2.A")
13347 }
13348 
13349 
13350 
13351 #############################################
13352 # Write records. There is a calcout record to
13353 # do the actual write.
13354 #############################################
13355 
13356 ##
13357 ## Set the ZONE upper boundary setting.
13358 ##
13359 record(ao, "$(P):LS01:Z10:UB_S2") {
13360  field(SCAN, "Passive")
13361  field(PREC, "1")
13362  field(SDIS, "$(P):LS01:DISABLE")
13363 }
13364 
13365 ##
13366 ## Set the ZONE P setting.
13367 ##
13368 record(ao, "$(P):LS01:Z10:P_S2") {
13369  field(SCAN, "Passive")
13370  field(PREC, "1")
13371  field(SDIS, "$(P):LS01:DISABLE")
13372 }
13373 
13374 ##
13375 ## Set the ZONE I setting.
13376 ##
13377 record(ao, "$(P):LS01:Z10:I_S2") {
13378  field(SCAN, "Passive")
13379  field(PREC, "1")
13380  field(SDIS, "$(P):LS01:DISABLE")
13381 }
13382 
13383 ##
13384 ## Set the ZONE D setting.
13385 ##
13386 record(ao, "$(P):LS01:Z10:D_S2") {
13387  field(SCAN, "Passive")
13388  field(PREC, "1")
13389  field(SDIS, "$(P):LS01:DISABLE")
13390 }
13391 
13392 ##
13393 ## Set the ZONE MOUT setting.
13394 ##
13395 record(ao, "$(P):LS01:Z10:MOUT_S2") {
13396  field(SCAN, "Passive")
13397  field(PREC, "1")
13398  field(SDIS, "$(P):LS01:DISABLE")
13399 }
13400 
13401 ##
13402 ## Set the ZONE RANGE setting.
13403 ##
13404 record(mbbo, "$(P):LS01:Z10:RANGE_S2") {
13405  field(SCAN, "Passive")
13406  field(ZRST, "Off")
13407  field(ZRVL, "0")
13408  field(ONST, "Range1/Low")
13409  field(ONVL, "1")
13410  field(TWST, "Range2/Medium")
13411  field(TWVL, "2")
13412  field(THST, "Range3/High")
13413  field(THVL, "3")
13414  field(FRST, "Range4")
13415  field(FRVL, "4")
13416  field(FVST, "Range5")
13417  field(FVVL, "5")
13418  field(SDIS, "$(P):LS01:DISABLE")
13419 }
13420 
13421 ##
13422 ## Set the ZONE INPUT setting.
13423 ##
13424 record(mbbo, "$(P):LS01:Z10:INPUT_S2") {
13425  field(ZRST, "None")
13426  field(ZRVL, "0")
13427  field(ONST, "Input A")
13428  field(ONVL, "1")
13429  field(TWST, "Input B")
13430  field(TWVL, "2")
13431  field(THST, "Input C")
13432  field(THVL, "3")
13433  field(FRST, "Input D")
13434  field(FRVL, "4")
13435  field(FVST, "Input D2")
13436  field(FVVL, "5")
13437  field(SXST, "Input D3")
13438  field(SXVL, "6")
13439  field(SVST, "Input D4")
13440  field(SVVL, "7")
13441  field(EIST, "Input D5")
13442  field(EIVL, "8")
13443  field(SDIS, "$(P):LS01:DISABLE")
13444 }
13445 
13446 ##
13447 ## Set the ZONE RATE setting.
13448 ##
13449 record(ao, "$(P):LS01:Z10:RATE_S2") {
13450  field(SCAN, "Passive")
13451  field(PREC, "1")
13452  field(SDIS, "$(P):LS01:DISABLE")
13453 }
13454 
13455 ##
13456 ## Record to write the ZONE parameters.
13457 ##
13458 record(calcout, "$(P):LS01:Z10:SET2") {
13459  field(INPA, "$(P):LS01:Z10:UB_S2")
13460  field(INPB, "$(P):LS01:Z10:P_S2")
13461  field(INPC, "$(P):LS01:Z10:I_S2")
13462  field(INPD, "$(P):LS01:Z10:D_S2")
13463  field(INPE, "$(P):LS01:Z10:MOUT_S2")
13464  field(INPF, "$(P):LS01:Z10:RANGE_S2")
13465  field(INPG, "$(P):LS01:Z10:INPUT_S2")
13466  field(INPH, "$(P):LS01:Z10:RATE_S2")
13467  field(CALC, "0")
13468  field(DTYP, "stream")
13469  field(OUT, "@ls336.proto setZONE(2,10) L0 0")
13470  field(SDIS, "$(P):LS01:DISABLE")
13471  field(FLNK, "$(P):LS01:Z10:ALL2.PROC")
13472 }
13473 
13474 
13475 
13476 
13477 
13478 
13479 
13480 
13481 
13482 
13483 
13484 
13485 
13486 
13487 # This is included in lakeshore336.template
13488 # This template is for the common functionality shared by all 4 outputs.
13489 #
13490 # There is some logic in this database to provide put_callback functionality
13491 # for setting the temperature and waiting for it to be in range. The input
13492 # sensor PV name used for the in-window calculation changes depending on
13493 # the input sensor selected. In order for this to work it requires the following
13494 # macros:
13495 #
13496 # INPUTA - Sensor 1 PV name
13497 # INPUTB - Sensor 2 PV name
13498 # INPUTC - Sensor 3 PV name
13499 # INPUTD - Sensor 4 PV name
13500 # INPUTD2 - Sensor D2 PV name
13501 # INPUTD3 - Sensor D3 PV name
13502 # INPUTD4 - Sensor D4 PV name
13503 # INPUTD5 - Sensor D5 PV name
13504 # TOLERANCE (optional - defaults to 1)
13505 #
13506 # The input link names must fit into a stringout record for this to work.
13507 # The above link names default to a dummy record.
13508 
13509 ################################################################
13510 # Read records
13511 ################################################################
13512 
13513 ##
13514 ## Record holding the output number
13515 ##
13516 record(stringout, "$(P):LS01:OUTPUT3") {
13517  field(DTYP, "Soft Channel")
13518  field(VAL, "3")
13519  field(PINI, "YES")
13520 }
13521 
13522 ##
13523 ## Read the setpoint temperature.
13524 ##
13525 record(ai, "$(P):LS01:SETP3") {
13526  field(DTYP, "stream")
13527  field(SDIS, "$(P):LS01:DISABLE_POLL")
13528  field(INP, "@ls336.proto getSETP(3) L0 0")
13529  field(SCAN, "1 second")
13530  field(PREC, "3")
13531  field(EGU, "K")
13532  info(archive, "Monitor, 00:00:01, VAL")
13533 }
13534 
13535 ##
13536 ## Read the setpoint limit
13537 ##
13538 
13539 ##
13540 ## Read the ramp parameter. This also populates the ramp status $(P):LS01:RAMPST3,
13541 ##
13542 record(ai, "$(P):LS01:RAMP3") {
13543  field(DTYP, "stream")
13544  field(SDIS, "$(P):LS01:DISABLE_POLL")
13545  field(INP, "@ls336.proto getRAMP(3,$(P):LS01:RAMPST3) L0 0")
13546  field(SCAN, "5 second")
13547  field(PREC, "3")
13548  field(EGU, "K/minute")
13549 }
13550 
13551 ##
13552 ## Read the ramp status parameter.
13553 ##
13554 ## 0=off
13555 ## 1=on
13556 ##
13557 record(bi, "$(P):LS01:RAMPST3") {
13558  field(DTYP, "Soft Channel")
13559  field(ZNAM, "Off")
13560  field(ONAM, "On")
13561 }
13562 
13563 ##
13564 ## Read the range parameter (the heater output power range).
13565 ## This is output specific and is defined in another file.
13566 ##
13567 record(mbbi, "$(P):LS01:RANGE3") {
13568  field(DTYP, "stream")
13569  field(SDIS, "$(P):LS01:DISABLE_POLL")
13570  field(ZRVL, "0")
13571  field(ONVL, "1")
13572  field(TWVL, "2")
13573  field(THVL, "3")
13574  field(FRVL, "4")
13575  field(FVVL, "5")
13576  field(SCAN, "5 second")
13577  field(INP, "@ls336.proto getRANGE(3) L0 0")
13578 }
13579 
13580 ##
13581 ## Read the mode to use for outmode
13582 ## This is output specific and is defined in another file.
13583 ##
13584 record(mbbi, "$(P):LS01:OMMODE3") {
13585 }
13586 
13587 ##
13588 ## Read the manual output parameter.
13589 ##
13590 record(ai, "$(P):LS01:MOUT3") {
13591  field(DTYP, "stream")
13592  field(SDIS, "$(P):LS01:DISABLE_POLL")
13593  field(INP, "@ls336.proto getMOUT(3) L0 0")
13594  field(SCAN, "5 second")
13595 }
13596 
13597 ##
13598 ## Read the PID P parameter. Pass the I and D records into the protocol to read those as well.
13599 ##
13600 record(ai, "$(P):LS01:P3") {
13601  field(DTYP, "stream")
13602  field(SDIS, "$(P):LS01:DISABLE_POLL")
13603  field(INP, "@ls336.proto getPID(3,$(P):LS01:I3,$(P):LS01:D3) L0 0")
13604  field(SCAN, "5 second")
13605 }
13606 
13607 ##
13608 ## Read the PID I parameter.
13609 ##
13610 record(ai, "$(P):LS01:I3") {
13611  field(DTYP, "Soft Channel")
13612  field(SCAN, "Passive")
13613 }
13614 
13615 ##
13616 ## Read the PID D parameter.
13617 ##
13618 record(ai, "$(P):LS01:D3") {
13619  field(DTYP, "Soft Channel")
13620  field(SCAN, "Passive")
13621 }
13622 
13623 ##
13624 ## Read the mode to use for outmode.
13625 ## This also populates the OMI and OMP records.
13626 ## The mbbi strings and values are defined in the output specific templates.
13627 ##
13628 record(mbbi, "$(P):LS01:OMM3") {
13629  field(DTYP, "stream")
13630  field(SDIS, "$(P):LS01:DISABLE_POLL")
13631  field(ZRVL, "0")
13632  field(ONVL, "1")
13633  field(TWVL, "2")
13634  field(THVL, "3")
13635  field(FRVL, "4")
13636  field(FVVL, "5")
13637  field(SCAN, "5 second")
13638  field(INP, "@ls336.proto getOM(3,$(P):LS01:OMI3,$(P):LS01:OMP3) L0 0")
13639 }
13640 
13641 ##
13642 ## Read the input to use for outmode
13643 ##
13644 record(mbbi, "$(P):LS01:OMI3") {
13645  field(DTYP, "Soft Channel")
13646  field(ZRST, "None")
13647  field(ZRVL, "0")
13648  field(ONST, "Input A")
13649  field(ONVL, "1")
13650  field(TWST, "Input B")
13651  field(TWVL, "2")
13652  field(THST, "Input C")
13653  field(THVL, "3")
13654  field(FRST, "Input D")
13655  field(FRVL, "4")
13656  field(FVST, "Input D2")
13657  field(FVVL, "5")
13658  field(SXST, "Input D3")
13659  field(SXVL, "6")
13660  field(SVST, "Input D4")
13661  field(SVVL, "7")
13662  field(EIST, "Input D5")
13663  field(EIVL, "8")
13664 }
13665 
13666 ##
13667 ## Read the power up mode to use for outmode
13668 ##
13669 record(mbbi, "$(P):LS01:OMP3") {
13670  field(DTYP, "Soft Channel")
13671  field(ZRST, "Off")
13672  field(ZRVL, "0")
13673  field(ONST, "On")
13674  field(ONVL, "1")
13675 }
13676 
13677 ################################################################
13678 # Write records
13679 ################################################################
13680 
13681 ##
13682 ## Set the setpoint temperature.
13683 ##
13684 record(ao, "$(P):LS01:SETP_S3") {
13685  field(DTYP, "stream")
13686  field(SDIS, "$(P):LS01:DISABLE")
13687  field(DESC, "Setpoint temperature")
13688  field(OUT, "@ls336.proto setSETP(3) L0 0")
13689  field(PREC, "3")
13690  field(FLNK, "$(P):LS01:SETP_S3_BUSYSET.PROC")
13691  field(EGU, "K")
13692  info(archive, "Monitor, 00:00:01, VAL")
13693 }
13694 
13695 ###############################################################################
13696 
13697 ##
13698 ## A few records to support put_callback on the setpoint. We use the busy record.
13699 ## A temperature window is used. The temperature must be within
13700 ## the window, before the callback is done.
13701 ##
13702 
13703 record(dfanout, "$(P):LS01:SETP_S3_BUSYSET")
13704 {
13705  field(VAL, "0")
13706  field(OUTA, "$(P):LS01:IN_WINDOW3.VAL PP")
13707  field(FLNK, "$(P):LS01:SETP_S3_BUSYSET2")
13708 }
13709 record(dfanout, "$(P):LS01:SETP_S3_BUSYSET2")
13710 {
13711  field(VAL, "1")
13712  field(OUTA, "$(P):LS01:SETP3.PROC PP")
13713  field(OUTB, "$(P):LS01:SETP_S3_BUSY PP")
13714  field(FLNK, "$(P):LS01:CALC_IN_WINDOW3")
13715 }
13716 record(busy, "$(P):LS01:SETP_S3_BUSY")
13717 {
13718 }
13719 record(calcout, "$(P):LS01:CALC_IN_WINDOW3") {
13720  field(PINI, "YES")
13721  field(INPA, "1")
13722  field(INPB, "$(P):LS01:DUMMY3.VAL")
13723  field(INPC, "$(P):LS01:SETP_S3.VAL")
13724  field(CALC, "((B>=(C-A))&&(B<=(C+A)))?1:0")
13725  field(OOPT, "Every Time")
13726  field(OUT, "$(P):LS01:IN_WINDOW3.VAL PP")
13727  field(DOPT, "Use CALC")
13728  field(SCAN, "1 second")
13729  field(PREC, "1")
13730  info(autosaveFields, "A")
13731  info(archive, "Monitor, 00:00:01, A B C VAL")
13732 }
13733 record(bo, "$(P):LS01:IN_WINDOW3") {
13734  field(DESC, "Temperature In Window")
13735  field(VAL, "0")
13736  field(PINI, "YES")
13737  field(OMSL, "supervisory")
13738  field(ZNAM, "Not In Window")
13739  field(ONAM, "In Window")
13740  info(archive, "Monitor, 00:00:01, VAL")
13741 }
13742 
13743 ##
13744 ## Set busy record 'done' when TIME_WINDOW3=1
13745 ##
13746 record(calcout, "$(P):LS01:CALC_BUSY_DONE3") {
13747  field(INPA, "$(P):LS01:IN_WINDOW3.VAL CP")
13748  field(CALC, "(A=1)?0:1")
13749  field(OOPT, "Every Time")
13750  field(OUT, "$(P):LS01:SETP_S3_BUSY.VAL PP")
13751 }
13752 
13753 ###############################################################################
13754 
13755 ##
13756 ## Dummy record to use for input link name default
13757 ##
13758 record(ai, "$(P):LS01:DUMMY3") {
13759 }
13760 
13761 ##
13762 ## Monitor $(P):LS01:OMI3 to determin which input sensor to use
13763 ## to deal with the callback. The below set of records automatically
13764 ## switch the input when the 'control input' is changed. They make
13765 ## use of the input sensor PV names passed into this template.
13766 ##
13767 record(calcout, "$(P):LS01:SET_3_INPUTA") {
13768  field(CALC, "A=1")
13769  field(INPA, "$(P):LS01:OMI3.VAL CP")
13770  field(DOPT, "Use OCAL")
13771  field(OVAL, "1")
13772  field(OOPT, "When Non-zero")
13773  field(OUT, "$(P):LS01:SET_3_INPUTA_LINK.PROC")
13774 }
13775 record(stringout, "$(P):LS01:SET_3_INPUTA_LINK") {
13776  field(VAL, "$(P):LS01:KRDG0.VAL CP")
13777  field(OUT, "$(P):LS01:CALC_IN_WINDOW3.INPB CA")
13778 }
13779 
13780 record(calcout, "$(P):LS01:SET_3_INPUTB") {
13781  field(CALC, "A=2")
13782  field(INPA, "$(P):LS01:OMI3.VAL CP")
13783  field(DOPT, "Use OCAL")
13784  field(OVAL, "1")
13785  field(OOPT, "When Non-zero")
13786  field(OUT, "$(P):LS01:SET_3_INPUTB_LINK.PROC")
13787 }
13788 record(stringout, "$(P):LS01:SET_3_INPUTB_LINK") {
13789  field(VAL, "$(P):LS01:KRDG1.VAL CP")
13790  field(OUT, "$(P):LS01:CALC_IN_WINDOW3.INPB CA")
13791 }
13792 
13793 record(calcout, "$(P):LS01:SET_3_INPUTC") {
13794  field(CALC, "A=3")
13795  field(INPA, "$(P):LS01:OMI3.VAL CP")
13796  field(DOPT, "Use OCAL")
13797  field(OVAL, "1")
13798  field(OOPT, "When Non-zero")
13799  field(OUT, "$(P):LS01:SET_3_INPUTC_LINK.PROC")
13800 }
13801 record(stringout, "$(P):LS01:SET_3_INPUTC_LINK") {
13802  field(VAL, "$(P):LS01:KRDG2.VAL CP")
13803  field(OUT, "$(P):LS01:CALC_IN_WINDOW3.INPB CA")
13804 }
13805 
13806 record(calcout, "$(P):LS01:SET_3_INPUTD") {
13807  field(CALC, "A=4")
13808  field(INPA, "$(P):LS01:OMI3.VAL CP")
13809  field(DOPT, "Use OCAL")
13810  field(OVAL, "1")
13811  field(OOPT, "When Non-zero")
13812  field(OUT, "$(P):LS01:SET_3_INPUTD_LINK.PROC")
13813 }
13814 record(stringout, "$(P):LS01:SET_3_INPUTD_LINK") {
13815  field(VAL, "$(P):LS01:KRDG3.VAL CP")
13816  field(OUT, "$(P):LS01:CALC_IN_WINDOW3.INPB CA")
13817 }
13818 
13819 record(calcout, "$(P):LS01:SET_3_INPUTD2") {
13820  field(CALC, "A=5")
13821  field(INPA, "$(P):LS01:OMI3.VAL CP")
13822  field(DOPT, "Use OCAL")
13823  field(OVAL, "1")
13824  field(OOPT, "When Non-zero")
13825  field(OUT, "$(P):LS01:SET_3_INPUTD2_LINK.PROC")
13826 }
13827 record(stringout, "$(P):LS01:SET_3_INPUTD2_LINK") {
13828  field(VAL, "$(P):LS01:KRDGD2.VAL CP")
13829  field(OUT, "$(P):LS01:CALC_IN_WINDOW3.INPB CA")
13830 }
13831 
13832 record(calcout, "$(P):LS01:SET_3_INPUTD3") {
13833  field(CALC, "A=6")
13834  field(INPA, "$(P):LS01:OMI3.VAL CP")
13835  field(DOPT, "Use OCAL")
13836  field(OVAL, "1")
13837  field(OOPT, "When Non-zero")
13838  field(OUT, "$(P):LS01:SET_3_INPUTD3_LINK.PROC")
13839 }
13840 record(stringout, "$(P):LS01:SET_3_INPUTD3_LINK") {
13841  field(VAL, "$(P):LS01:KRDGD3.VAL CP")
13842  field(OUT, "$(P):LS01:CALC_IN_WINDOW3.INPB CA")
13843 }
13844 
13845 record(calcout, "$(P):LS01:SET_3_INPUTD4") {
13846  field(CALC, "A=7")
13847  field(INPA, "$(P):LS01:OMI3.VAL CP")
13848  field(DOPT, "Use OCAL")
13849  field(OVAL, "1")
13850  field(OOPT, "When Non-zero")
13851  field(OUT, "$(P):LS01:SET_3_INPUTD4_LINK.PROC")
13852 }
13853 record(stringout, "$(P):LS01:SET_3_INPUTD4_LINK") {
13854  field(VAL, "$(P):LS01:KRDGD4.VAL CP")
13855  field(OUT, "$(P):LS01:CALC_IN_WINDOW3.INPB CA")
13856 }
13857 
13858 record(calcout, "$(P):LS01:SET_3_INPUTD5") {
13859  field(CALC, "A=8")
13860  field(INPA, "$(P):LS01:OMI3.VAL CP")
13861  field(DOPT, "Use OCAL")
13862  field(OVAL, "1")
13863  field(OOPT, "When Non-zero")
13864  field(OUT, "$(P):LS01:SET_3_INPUTD5_LINK.PROC")
13865 }
13866 record(stringout, "$(P):LS01:SET_3_INPUTD5_LINK") {
13867  field(VAL, "$(P):LS01:KRDGD5.VAL CP")
13868  field(OUT, "$(P):LS01:CALC_IN_WINDOW3.INPB CA")
13869 }
13870 
13871 
13872 
13873 ##
13874 ## Set the range parameter.
13875 ## The strings are output specific and is defined in another file.
13876 ##
13877 record(mbbo, "$(P):LS01:RANGE_S3") {
13878  field(DTYP, "stream")
13879  field(SDIS, "$(P):LS01:DISABLE")
13880  field(OUT, "@ls336.proto setRANGE(3) L0 0")
13881  field(FLNK, "$(P):LS01:RANGE3.PROC CA")
13882 }
13883 
13884 ##
13885 ## Set the ramp rate parameter.
13886 ##
13887 ## This is the desired temperate increase/decrease rate
13888 ## per second when heating/cooling.
13889 ##
13890 ## The ramp and ramp status parameters are actually one command
13891 ## for the lakeshore. Therefore one must pass into this
13892 ## record the existing/desired ramp status, as well as the
13893 ## desired ramp. This is done automatically by reading the
13894 ## PV which holds the current ramp status.
13895 ##
13896 record(ao, "$(P):LS01:RAMP_S3") {
13897  field(DTYP, "stream")
13898  field(SDIS, "$(P):LS01:DISABLE")
13899  field(OUT, "@ls336.proto setRAMP($(P):LS01:RAMPST3,3) L0 0")
13900  field(PREC, "3")
13901  field(FLNK, "$(P):LS01:RAMP3.PROC CA")
13902  field(EGU, "K/minute")
13903 }
13904 
13905 ##
13906 ## Set the ramp status parameter.
13907 ##
13908 ## 0=off
13909 ## 1=on
13910 ##
13911 ## The ramp and ramp status parameters are actually one command
13912 ## for the lakeshore. Therefore one must pass into this
13913 ## record the existing/desired ramp, as well as the
13914 ## desired ramp status. This is done automatically by reading the
13915 ## PV which holds the current ramp value.
13916 ##
13917 record(bo, "$(P):LS01:RAMPST_S3") {
13918  field(DTYP, "stream")
13919  field(SDIS, "$(P):LS01:DISABLE")
13920  field(OUT, "@ls336.proto setRAMPSTATUS($(P):LS01:RAMP3,3) L0 0")
13921  field(FLNK, "$(P):LS01:RAMP3.PROC CA")
13922  field(ZNAM, "Off")
13923  field(ONAM, "On")
13924 }
13925 
13926 ##
13927 ## Set the manual output value.
13928 ##
13929 record(ao, "$(P):LS01:MOUT_S3") {
13930  field(DTYP, "stream")
13931  field(SDIS, "$(P):LS01:DISABLE")
13932  field(OUT, "@ls336.proto setMOUT(3) L0 0")
13933  field(FLNK, "$(P):LS01:MOUT3.PROC CA")
13934 }
13935 
13936 ##
13937 ## Set the PID P parameter.
13938 ##
13939 record(ao, "$(P):LS01:P_S3") {
13940  field(DTYP, "stream")
13941  field(SDIS, "$(P):LS01:DISABLE")
13942  field(OUT, "@ls336.proto setP(3,$(P):LS01:I3,$(P):LS01:D3) L0 0")
13943  field(FLNK, "$(P):LS01:P3.PROC CA")
13944 }
13945 
13946 ##
13947 ## Set the PID I parameter.
13948 ##
13949 record(ao, "$(P):LS01:I_S3") {
13950  field(DTYP, "stream")
13951  field(SDIS, "$(P):LS01:DISABLE")
13952  field(OUT, "@ls336.proto setI($(P):LS01:P3,3,$(P):LS01:D3) L0 0")
13953  field(FLNK, "$(P):LS01:P3.PROC CA")
13954 }
13955 
13956 ##
13957 ## Set the PID D parameter.
13958 ##
13959 record(ao, "$(P):LS01:D_S3") {
13960  field(DTYP, "stream")
13961  field(SDIS, "$(P):LS01:DISABLE")
13962  field(OUT, "@ls336.proto setD($(P):LS01:P3,$(P):LS01:I3,3) L0 0")
13963  field(FLNK, "$(P):LS01:P3.PROC CA")
13964 }
13965 
13966 ##
13967 ## Set the mode to use for outmode
13968 ## The strings are output specific. This is defined in another file.
13969 ##
13970 record(mbbo, "$(P):LS01:OMM_S3") {
13971  field(DTYP, "stream")
13972  field(SDIS, "$(P):LS01:DISABLE")
13973  field(ZRVL, "0")
13974  field(ONVL, "1")
13975  field(TWVL, "2")
13976  field(THVL, "3")
13977  field(FRVL, "4")
13978  field(FVVL, "5")
13979  field(OUT, "@ls336.proto setOM(3,$(P):LS01:OMI3,$(P):LS01:OMP3) L0 0")
13980  field(FLNK, "$(P):LS01:OMM3.PROC CA")
13981 }
13982 
13983 ##
13984 ## Set the input to use for outmode
13985 ##
13986 record(mbbo, "$(P):LS01:OMI_S3") {
13987  field(DTYP, "stream")
13988  field(SDIS, "$(P):LS01:DISABLE")
13989  field(ZRST, "None")
13990  field(ZRVL, "0")
13991  field(ONST, "Input A")
13992  field(ONVL, "1")
13993  field(TWST, "Input B")
13994  field(TWVL, "2")
13995  field(THST, "Input C")
13996  field(THVL, "3")
13997  field(FRST, "Input D")
13998  field(FRVL, "4")
13999  field(FVST, "Input D2")
14000  field(FVVL, "5")
14001  field(SXST, "Input D3")
14002  field(SXVL, "6")
14003  field(SVST, "Input D4")
14004  field(SVVL, "7")
14005  field(EIST, "Input D5")
14006  field(EIVL, "8")
14007  field(OUT, "@ls336.proto setOMI(3,$(P):LS01:OMM3,$(P):LS01:OMP3) L0 0")
14008  field(FLNK, "$(P):LS01:OMM3.PROC CA")
14009 }
14010 
14011 ##
14012 ## Set the power up mode to use for outmode
14013 ##
14014 record(mbbo, "$(P):LS01:OMP_S3") {
14015  field(DTYP, "stream")
14016  field(SDIS, "$(P):LS01:DISABLE")
14017  field(ZRST, "Off")
14018  field(ZRVL, "0")
14019  field(ONST, "On")
14020  field(ONVL, "1")
14021  field(OUT, "@ls336.proto setOMP(3,$(P):LS01:OMM3,$(P):LS01:OMI3) L0 0")
14022  field(FLNK, "$(P):LS01:OMM3.PROC CA")
14023 }
14024 
14025 ##
14026 ## Set the type of tuning mode
14027 ##
14028 record(mbbo, "$(P):LS01:TUNEMODE_S3") {
14029  field(SDIS, "$(P):LS01:DISABLE")
14030  field(ZRST, "P Only")
14031  field(ZRVL, "0")
14032  field(ONST, "P and I")
14033  field(ONVL, "1")
14034  field(TWST, "P, I and D")
14035  field(TWVL, "2")
14036 }
14037 
14038 
14039 ##
14040 ## Start the tuning process
14041 ##
14042 record(ao, "$(P):LS01:TUNESTART3") {
14043  field(DTYP, "stream")
14044  field(SDIS, "$(P):LS01:DISABLE")
14045  field(DESC, "Start the auto tuning")
14046  field(OUT, "@ls336.proto setATUNE(3,$(P):LS01:TUNEMODE_S3) L0 0")
14047 }
14048 
14049 
14050 ##
14051 ## Read all ZONE settings
14052 ##
14053 record(seq, "$(P):LS01:Z:READ3") {
14054  field(DESC, "Read Output 3 ZONE")
14055  field(DOL1, "1")
14056  field(DLY1, "0.1")
14057  field(LNK1, "$(P):LS01:Z1:ALL3.PROC")
14058  field(DOL2, "1")
14059  field(DLY2, "0.1")
14060  field(LNK2, "$(P):LS01:Z2:ALL3.PROC")
14061  field(DOL3, "1")
14062  field(DLY3, "0.1")
14063  field(LNK3, "$(P):LS01:Z3:ALL3.PROC")
14064  field(DOL4, "1")
14065  field(DLY4, "0.1")
14066  field(LNK4, "$(P):LS01:Z4:ALL3.PROC")
14067  field(DOL5, "1")
14068  field(DLY5, "0.1")
14069  field(LNK5, "$(P):LS01:Z5:ALL3.PROC")
14070  field(DOL6, "1")
14071  field(DLY6, "0.1")
14072  field(LNK6, "$(P):LS01:Z6:ALL3.PROC")
14073  field(DOL7, "1")
14074  field(DLY7, "0.1")
14075  field(LNK7, "$(P):LS01:Z7:ALL3.PROC")
14076  field(DOL8, "1")
14077  field(DLY8, "0.1")
14078  field(LNK8, "$(P):LS01:Z8:ALL3.PROC")
14079  field(DOL9, "1")
14080  field(DLY9, "0.1")
14081  field(LNK9, "$(P):LS01:Z9:ALL3.PROC")
14082  field(DOLA, "1")
14083  field(DLYA, "0.1")
14084  field(LNKA, "$(P):LS01:Z10:ALL3.PROC")
14085  field(PINI, "YES")
14086 }
14087 
14088 ###############################################
14089 # This is included in lakeshore336.template
14090 # This is for the analog outputs (3 and 4)
14091 
14092 ##
14093 ## Read the analog output value.
14094 ##
14095 record(ai, "$(P):LS01:AOUT3") {
14096  field(DTYP, "stream")
14097  field(SDIS, "$(P):LS01:DISABLE_POLL")
14098  field(INP, "@ls336.proto getAOUT(3) L0 0")
14099  field(SCAN, "5 second")
14100  field(PREC, "1")
14101  field(EGU, "%")
14102  info(archive, "Monitor, 00:00:01, VAL")
14103 }
14104 
14105 ##
14106 ## Define the string/values for this record.
14107 ##
14108 record(mbbi, "$(P):LS01:RANGE3") {
14109  field(ZRST, "Off")
14110  field(ONST, "On")
14111 }
14112 
14113 ##
14114 ## Define the strings and values for this record.
14115 ##
14116 record(mbbi, "$(P):LS01:OMM3") {
14117  field(ZRST, "Off")
14118  field(ONST, "Closed Loop PID")
14119  field(TWST, "Zone")
14120  field(THST, "Open Loop")
14121  field(FRST, "Monitor Out")
14122  field(FVST, "Warmup Supply")
14123 }
14124 
14125 ##
14126 ## Define the strings and values for this record.
14127 ##
14128 record(mbbo, "$(P):LS01:RANGE_S3") {
14129  field(ZRST, "Off")
14130  field(ONST, "On")
14131 }
14132 
14133 ##
14134 ## Define the strings and values for this record.
14135 ##
14136 record(mbbo, "$(P):LS01:OMM_S3") {
14137  field(ZRST, "Off")
14138  field(ONST, "Closed Loop PID")
14139  field(TWST, "Zone")
14140  field(THST, "Open Loop")
14141  field(FRST, "Monitor Out")
14142  field(FVST, "Warmup Supply")
14143 }
14144 
14145 ###############################################
14146 # Add in ZONE support
14147 ###############################################
14148 
14149 
14150 # This just includes the zone file and overrides the RANGE options
14151 # for the analog control channels.
14152 
14153 #######################################
14154 #
14155 # Template to support reading and setting
14156 # controller ZONE parameters. It reads the ZONE
14157 # parameters into an array, then uses subArrays to
14158 # extract each parameter.
14159 #
14160 # This template is used by the output template
14161 # and it needs the following macros:
14162 #
14163 # ZONE: zone number
14164 # OUT: output number
14165 #
14166 #######################################
14167 
14168 ##
14169 ## Read the ZONE setting into an array (8 values)
14170 ##
14171 record(waveform, "$(P):LS01:Z1:ALL3") {
14172  field(DTYP, "stream")
14173  field(SDIS, "$(P):LS01:DISABLE_POLL")
14174  field(INP, "@ls336.proto getZONE(3,1) L0 0")
14175  field(SCAN, "Passive")
14176  field(NELM, "8")
14177  field(FTVL, "DOUBLE")
14178  field(PREC, "1")
14179  field(FLNK, "$(P):LS01:Z1:UB3:ARRAY.PROC")
14180 }
14181 
14182 ##
14183 ## Read the ZONE upper boundary setting.
14184 ##
14185 record(subArray, "$(P):LS01:Z1:UB3:ARRAY") {
14186  field(SCAN, "Passive")
14187  field(FTVL, "DOUBLE")
14188  field(INP, "$(P):LS01:Z1:ALL3.VAL MS")
14189  field(MALM, "8")
14190  field(NELM, "1")
14191  field(INDX, "0")
14192  field(PREC, "1")
14193  field(FLNK, "$(P):LS01:Z1:UB3.PROC")
14194 }
14195 record(ai, "$(P):LS01:Z1:UB3") {
14196  field(SCAN, "Passive")
14197  field(INP, "$(P):LS01:Z1:UB3:ARRAY.VAL MS")
14198  field(PREC, "1")
14199  field(FLNK, "$(P):LS01:Z1:P3:ARRAY.PROC")
14200 }
14201 
14202 ##
14203 ## Read the ZONE P setting.
14204 ##
14205 record(subArray, "$(P):LS01:Z1:P3:ARRAY") {
14206  field(SCAN, "Passive")
14207  field(FTVL, "DOUBLE")
14208  field(INP, "$(P):LS01:Z1:ALL3.VAL MS")
14209  field(MALM, "8")
14210  field(NELM, "1")
14211  field(INDX, "1")
14212  field(PREC, "1")
14213  field(FLNK, "$(P):LS01:Z1:P3.PROC")
14214 }
14215 record(ai, "$(P):LS01:Z1:P3") {
14216  field(SCAN, "Passive")
14217  field(INP, "$(P):LS01:Z1:P3:ARRAY.VAL MS")
14218  field(PREC, "1")
14219  field(FLNK, "$(P):LS01:Z1:I3:ARRAY.PROC")
14220 }
14221 
14222 ##
14223 ## Read the ZONE I setting.
14224 ##
14225 record(subArray, "$(P):LS01:Z1:I3:ARRAY") {
14226  field(SCAN, "Passive")
14227  field(FTVL, "DOUBLE")
14228  field(INP, "$(P):LS01:Z1:ALL3.VAL MS")
14229  field(MALM, "8")
14230  field(NELM, "1")
14231  field(INDX, "2")
14232  field(PREC, "1")
14233  field(FLNK, "$(P):LS01:Z1:I3.PROC")
14234 }
14235 record(ai, "$(P):LS01:Z1:I3") {
14236  field(SCAN, "Passive")
14237  field(INP, "$(P):LS01:Z1:I3:ARRAY.VAL MS")
14238  field(PREC, "1")
14239  field(FLNK, "$(P):LS01:Z1:D3:ARRAY.PROC")
14240 }
14241 
14242 ##
14243 ## Read the ZONE D setting.
14244 ##
14245 record(subArray, "$(P):LS01:Z1:D3:ARRAY") {
14246  field(SCAN, "Passive")
14247  field(FTVL, "DOUBLE")
14248  field(INP, "$(P):LS01:Z1:ALL3.VAL MS")
14249  field(MALM, "8")
14250  field(NELM, "1")
14251  field(INDX, "3")
14252  field(PREC, "1")
14253  field(FLNK, "$(P):LS01:Z1:D3.PROC")
14254 }
14255 record(ai, "$(P):LS01:Z1:D3") {
14256  field(SCAN, "Passive")
14257  field(INP, "$(P):LS01:Z1:D3:ARRAY.VAL MS")
14258  field(PREC, "1")
14259  field(FLNK, "$(P):LS01:Z1:MOUT3:ARRAY.PROC")
14260 }
14261 
14262 ##
14263 ## Read the ZONE MOUT setting.
14264 ##
14265 record(subArray, "$(P):LS01:Z1:MOUT3:ARRAY") {
14266  field(SCAN, "Passive")
14267  field(FTVL, "DOUBLE")
14268  field(INP, "$(P):LS01:Z1:ALL3.VAL MS")
14269  field(MALM, "8")
14270  field(NELM, "1")
14271  field(INDX, "4")
14272  field(PREC, "1")
14273  field(FLNK, "$(P):LS01:Z1:MOUT3.PROC")
14274 }
14275 record(ai, "$(P):LS01:Z1:MOUT3") {
14276  field(SCAN, "Passive")
14277  field(INP, "$(P):LS01:Z1:MOUT3:ARRAY.VAL MS")
14278  field(PREC, "1")
14279  field(FLNK, "$(P):LS01:Z1:RANGE3:ARRAY.PROC")
14280 }
14281 
14282 ##
14283 ## Read the ZONE RANGE setting.
14284 ##
14285 record(subArray, "$(P):LS01:Z1:RANGE3:ARRAY") {
14286  field(SCAN, "Passive")
14287  field(FTVL, "DOUBLE")
14288  field(INP, "$(P):LS01:Z1:ALL3.VAL MS")
14289  field(MALM, "8")
14290  field(NELM, "1")
14291  field(INDX, "5")
14292  field(PREC, "1")
14293  field(FLNK, "$(P):LS01:Z1:RANGE3.PROC")
14294 }
14295 record(mbbi, "$(P):LS01:Z1:RANGE3") {
14296  field(INP, "$(P):LS01:Z1:RANGE3:ARRAY.VAL")
14297  field(SCAN, "Passive")
14298  field(ZRST, "Off")
14299  field(ZRVL, "0")
14300  field(ONST, "Range1/Low")
14301  field(ONVL, "1")
14302  field(TWST, "Range2/Medium")
14303  field(TWVL, "2")
14304  field(THST, "Range3/High")
14305  field(THVL, "3")
14306  field(FRST, "Range4")
14307  field(FRVL, "4")
14308  field(FVST, "Range5")
14309  field(FVVL, "5")
14310  field(FLNK, "$(P):LS01:Z1:INPUT3:ARRAY.PROC")
14311 }
14312 
14313 ##
14314 ## Read the ZONE INPUT setting.
14315 ##
14316 record(subArray, "$(P):LS01:Z1:INPUT3:ARRAY") {
14317  field(SCAN, "Passive")
14318  field(FTVL, "DOUBLE")
14319  field(INP, "$(P):LS01:Z1:ALL3.VAL MS")
14320  field(MALM, "8")
14321  field(NELM, "1")
14322  field(INDX, "6")
14323  field(PREC, "1")
14324  field(FLNK, "$(P):LS01:Z1:INPUT3.PROC")
14325 }
14326 record(mbbi, "$(P):LS01:Z1:INPUT3") {
14327  field(INP, "$(P):LS01:Z1:INPUT3:ARRAY.VAL")
14328  field(SCAN, "Passive")
14329  field(ZRST, "None")
14330  field(ZRVL, "0")
14331  field(ONST, "Input A")
14332  field(ONVL, "1")
14333  field(TWST, "Input B")
14334  field(TWVL, "2")
14335  field(THST, "Input C")
14336  field(THVL, "3")
14337  field(FRST, "Input D")
14338  field(FRVL, "4")
14339  field(FVST, "Input D2")
14340  field(FVVL, "5")
14341  field(SXST, "Input D3")
14342  field(SXVL, "6")
14343  field(SVST, "Input D4")
14344  field(SVVL, "7")
14345  field(EIST, "Input D5")
14346  field(EIVL, "8")
14347  field(FLNK, "$(P):LS01:Z1:RATE3:ARRAY.PROC")
14348 }
14349 
14350 ##
14351 ## Read the ZONE RATE setting.
14352 ##
14353 record(subArray, "$(P):LS01:Z1:RATE3:ARRAY") {
14354  field(SCAN, "Passive")
14355  field(FTVL, "DOUBLE")
14356  field(INP, "$(P):LS01:Z1:ALL3.VAL MS")
14357  field(MALM, "8")
14358  field(NELM, "1")
14359  field(INDX, "7")
14360  field(PREC, "1")
14361  field(FLNK, "$(P):LS01:Z1:RATE3.PROC")
14362 }
14363 record(ai, "$(P):LS01:Z1:RATE3") {
14364  field(SCAN, "Passive")
14365  field(INP, "$(P):LS01:Z1:RATE3:ARRAY.VAL MS")
14366  field(PREC, "1")
14367  field(FLNK, "$(P):LS01:Z1:INITCALC3.PROC")
14368 }
14369 
14370 ##############################################################
14371 ##
14372 ## Populate the write records below with the current values.
14373 ## Only do this once at startup.
14374 ##
14375 ###############################################################
14376 
14377 record(calcout, "$(P):LS01:Z1:INITCALC3") {
14378  field(INPA, "0")
14379  field(CALC, "A")
14380  field(VAL, "0")
14381  field(DOPT, "Use OCAL")
14382  field(OOPT, "When Zero")
14383  field(OCAL, "1")
14384  field(OUT, "$(P):LS01:Z1:INITUB3.PROC")
14385 }
14386 
14387 record(dfanout, "$(P):LS01:Z1:INITUB3") {
14388  field(OMSL, "closed_loop")
14389  field(DOL, "$(P):LS01:Z1:UB3.VAL")
14390  field(OUTA, "$(P):LS01:Z1:UB_S3.VAL PP")
14391  field(FLNK, "$(P):LS01:Z1:INITP3.PROC")
14392 }
14393 record(dfanout, "$(P):LS01:Z1:INITP3") {
14394  field(OMSL, "closed_loop")
14395  field(DOL, "$(P):LS01:Z1:P3.VAL")
14396  field(OUTA, "$(P):LS01:Z1:P_S3.VAL PP")
14397  field(FLNK, "$(P):LS01:Z1:INITI3.PROC")
14398 }
14399 record(dfanout, "$(P):LS01:Z1:INITI3") {
14400  field(OMSL, "closed_loop")
14401  field(DOL, "$(P):LS01:Z1:I3.VAL")
14402  field(OUTA, "$(P):LS01:Z1:I_S3.VAL PP")
14403  field(FLNK, "$(P):LS01:Z1:INITD3.PROC")
14404 }
14405 record(dfanout, "$(P):LS01:Z1:INITD3") {
14406  field(OMSL, "closed_loop")
14407  field(DOL, "$(P):LS01:Z1:D3.VAL")
14408  field(OUTA, "$(P):LS01:Z1:D_S3.VAL PP")
14409  field(FLNK, "$(P):LS01:Z1:INITMOUT3.PROC")
14410 }
14411 record(dfanout, "$(P):LS01:Z1:INITMOUT3") {
14412  field(OMSL, "closed_loop")
14413  field(DOL, "$(P):LS01:Z1:MOUT3.VAL")
14414  field(OUTA, "$(P):LS01:Z1:MOUT_S3.VAL PP")
14415  field(FLNK, "$(P):LS01:Z1:INITRANGE3.PROC")
14416 }
14417 record(dfanout, "$(P):LS01:Z1:INITRANGE3") {
14418  field(OMSL, "closed_loop")
14419  field(DOL, "$(P):LS01:Z1:RANGE3.VAL")
14420  field(OUTA, "$(P):LS01:Z1:RANGE_S3.VAL PP")
14421  field(FLNK, "$(P):LS01:Z1:INITINPUT3.PROC")
14422 }
14423 record(dfanout, "$(P):LS01:Z1:INITINPUT3") {
14424  field(OMSL, "closed_loop")
14425  field(DOL, "$(P):LS01:Z1:INPUT3.VAL")
14426  field(OUTA, "$(P):LS01:Z1:INPUT_S3.VAL PP")
14427  field(FLNK, "$(P):LS01:Z1:INITRATE3.PROC")
14428 }
14429 record(dfanout, "$(P):LS01:Z1:INITRATE3") {
14430  field(OMSL, "closed_loop")
14431  field(DOL, "$(P):LS01:Z1:RATE3.VAL")
14432  field(OUTA, "$(P):LS01:Z1:RATE_S3.VAL PP")
14433  field(FLNK, "$(P):LS01:Z1:INITCOUNT3.PROC")
14434 }
14435 
14436 record(dfanout, "$(P):LS01:Z1:INITCOUNT3") {
14437  field(DOL, "1")
14438  field(OUTA, "$(P):LS01:Z1:INITCALC3.A")
14439 }
14440 
14441 
14442 
14443 #############################################
14444 # Write records. There is a calcout record to
14445 # do the actual write.
14446 #############################################
14447 
14448 ##
14449 ## Set the ZONE upper boundary setting.
14450 ##
14451 record(ao, "$(P):LS01:Z1:UB_S3") {
14452  field(SCAN, "Passive")
14453  field(PREC, "1")
14454  field(SDIS, "$(P):LS01:DISABLE")
14455 }
14456 
14457 ##
14458 ## Set the ZONE P setting.
14459 ##
14460 record(ao, "$(P):LS01:Z1:P_S3") {
14461  field(SCAN, "Passive")
14462  field(PREC, "1")
14463  field(SDIS, "$(P):LS01:DISABLE")
14464 }
14465 
14466 ##
14467 ## Set the ZONE I setting.
14468 ##
14469 record(ao, "$(P):LS01:Z1:I_S3") {
14470  field(SCAN, "Passive")
14471  field(PREC, "1")
14472  field(SDIS, "$(P):LS01:DISABLE")
14473 }
14474 
14475 ##
14476 ## Set the ZONE D setting.
14477 ##
14478 record(ao, "$(P):LS01:Z1:D_S3") {
14479  field(SCAN, "Passive")
14480  field(PREC, "1")
14481  field(SDIS, "$(P):LS01:DISABLE")
14482 }
14483 
14484 ##
14485 ## Set the ZONE MOUT setting.
14486 ##
14487 record(ao, "$(P):LS01:Z1:MOUT_S3") {
14488  field(SCAN, "Passive")
14489  field(PREC, "1")
14490  field(SDIS, "$(P):LS01:DISABLE")
14491 }
14492 
14493 ##
14494 ## Set the ZONE RANGE setting.
14495 ##
14496 record(mbbo, "$(P):LS01:Z1:RANGE_S3") {
14497  field(SCAN, "Passive")
14498  field(ZRST, "Off")
14499  field(ZRVL, "0")
14500  field(ONST, "Range1/Low")
14501  field(ONVL, "1")
14502  field(TWST, "Range2/Medium")
14503  field(TWVL, "2")
14504  field(THST, "Range3/High")
14505  field(THVL, "3")
14506  field(FRST, "Range4")
14507  field(FRVL, "4")
14508  field(FVST, "Range5")
14509  field(FVVL, "5")
14510  field(SDIS, "$(P):LS01:DISABLE")
14511 }
14512 
14513 ##
14514 ## Set the ZONE INPUT setting.
14515 ##
14516 record(mbbo, "$(P):LS01:Z1:INPUT_S3") {
14517  field(ZRST, "None")
14518  field(ZRVL, "0")
14519  field(ONST, "Input A")
14520  field(ONVL, "1")
14521  field(TWST, "Input B")
14522  field(TWVL, "2")
14523  field(THST, "Input C")
14524  field(THVL, "3")
14525  field(FRST, "Input D")
14526  field(FRVL, "4")
14527  field(FVST, "Input D2")
14528  field(FVVL, "5")
14529  field(SXST, "Input D3")
14530  field(SXVL, "6")
14531  field(SVST, "Input D4")
14532  field(SVVL, "7")
14533  field(EIST, "Input D5")
14534  field(EIVL, "8")
14535  field(SDIS, "$(P):LS01:DISABLE")
14536 }
14537 
14538 ##
14539 ## Set the ZONE RATE setting.
14540 ##
14541 record(ao, "$(P):LS01:Z1:RATE_S3") {
14542  field(SCAN, "Passive")
14543  field(PREC, "1")
14544  field(SDIS, "$(P):LS01:DISABLE")
14545 }
14546 
14547 ##
14548 ## Record to write the ZONE parameters.
14549 ##
14550 record(calcout, "$(P):LS01:Z1:SET3") {
14551  field(INPA, "$(P):LS01:Z1:UB_S3")
14552  field(INPB, "$(P):LS01:Z1:P_S3")
14553  field(INPC, "$(P):LS01:Z1:I_S3")
14554  field(INPD, "$(P):LS01:Z1:D_S3")
14555  field(INPE, "$(P):LS01:Z1:MOUT_S3")
14556  field(INPF, "$(P):LS01:Z1:RANGE_S3")
14557  field(INPG, "$(P):LS01:Z1:INPUT_S3")
14558  field(INPH, "$(P):LS01:Z1:RATE_S3")
14559  field(CALC, "0")
14560  field(DTYP, "stream")
14561  field(OUT, "@ls336.proto setZONE(3,1) L0 0")
14562  field(SDIS, "$(P):LS01:DISABLE")
14563  field(FLNK, "$(P):LS01:Z1:ALL3.PROC")
14564 }
14565 
14566 
14567 
14568 
14569 
14570 
14571 
14572 
14573 
14574 
14575 record(mbbi, "$(P):LS01:Z1:RANGE3") {
14576  field(ZRST, "Off")
14577  field(ONST, "On")
14578  field(TWST, "")
14579  field(THST, "")
14580  field(FRST, "")
14581  field(FVST, "")
14582 }
14583 
14584 record(mbbo, "$(P):LS01:Z1:RANGE_S3") {
14585  field(ZRST, "Off")
14586  field(ONST, "On")
14587  field(TWST, "")
14588  field(THST, "")
14589  field(FRST, "")
14590  field(FVST, "")
14591 }
14592 
14593 
14594 
14595 
14596 
14597 
14598 # This just includes the zone file and overrides the RANGE options
14599 # for the analog control channels.
14600 
14601 #######################################
14602 #
14603 # Template to support reading and setting
14604 # controller ZONE parameters. It reads the ZONE
14605 # parameters into an array, then uses subArrays to
14606 # extract each parameter.
14607 #
14608 # This template is used by the output template
14609 # and it needs the following macros:
14610 #
14611 # ZONE: zone number
14612 # OUT: output number
14613 #
14614 #######################################
14615 
14616 ##
14617 ## Read the ZONE setting into an array (8 values)
14618 ##
14619 record(waveform, "$(P):LS01:Z2:ALL3") {
14620  field(DTYP, "stream")
14621  field(SDIS, "$(P):LS01:DISABLE_POLL")
14622  field(INP, "@ls336.proto getZONE(3,2) L0 0")
14623  field(SCAN, "Passive")
14624  field(NELM, "8")
14625  field(FTVL, "DOUBLE")
14626  field(PREC, "1")
14627  field(FLNK, "$(P):LS01:Z2:UB3:ARRAY.PROC")
14628 }
14629 
14630 ##
14631 ## Read the ZONE upper boundary setting.
14632 ##
14633 record(subArray, "$(P):LS01:Z2:UB3:ARRAY") {
14634  field(SCAN, "Passive")
14635  field(FTVL, "DOUBLE")
14636  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
14637  field(MALM, "8")
14638  field(NELM, "1")
14639  field(INDX, "0")
14640  field(PREC, "1")
14641  field(FLNK, "$(P):LS01:Z2:UB3.PROC")
14642 }
14643 record(ai, "$(P):LS01:Z2:UB3") {
14644  field(SCAN, "Passive")
14645  field(INP, "$(P):LS01:Z2:UB3:ARRAY.VAL MS")
14646  field(PREC, "1")
14647  field(FLNK, "$(P):LS01:Z2:P3:ARRAY.PROC")
14648 }
14649 
14650 ##
14651 ## Read the ZONE P setting.
14652 ##
14653 record(subArray, "$(P):LS01:Z2:P3:ARRAY") {
14654  field(SCAN, "Passive")
14655  field(FTVL, "DOUBLE")
14656  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
14657  field(MALM, "8")
14658  field(NELM, "1")
14659  field(INDX, "1")
14660  field(PREC, "1")
14661  field(FLNK, "$(P):LS01:Z2:P3.PROC")
14662 }
14663 record(ai, "$(P):LS01:Z2:P3") {
14664  field(SCAN, "Passive")
14665  field(INP, "$(P):LS01:Z2:P3:ARRAY.VAL MS")
14666  field(PREC, "1")
14667  field(FLNK, "$(P):LS01:Z2:I3:ARRAY.PROC")
14668 }
14669 
14670 ##
14671 ## Read the ZONE I setting.
14672 ##
14673 record(subArray, "$(P):LS01:Z2:I3:ARRAY") {
14674  field(SCAN, "Passive")
14675  field(FTVL, "DOUBLE")
14676  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
14677  field(MALM, "8")
14678  field(NELM, "1")
14679  field(INDX, "2")
14680  field(PREC, "1")
14681  field(FLNK, "$(P):LS01:Z2:I3.PROC")
14682 }
14683 record(ai, "$(P):LS01:Z2:I3") {
14684  field(SCAN, "Passive")
14685  field(INP, "$(P):LS01:Z2:I3:ARRAY.VAL MS")
14686  field(PREC, "1")
14687  field(FLNK, "$(P):LS01:Z2:D3:ARRAY.PROC")
14688 }
14689 
14690 ##
14691 ## Read the ZONE D setting.
14692 ##
14693 record(subArray, "$(P):LS01:Z2:D3:ARRAY") {
14694  field(SCAN, "Passive")
14695  field(FTVL, "DOUBLE")
14696  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
14697  field(MALM, "8")
14698  field(NELM, "1")
14699  field(INDX, "3")
14700  field(PREC, "1")
14701  field(FLNK, "$(P):LS01:Z2:D3.PROC")
14702 }
14703 record(ai, "$(P):LS01:Z2:D3") {
14704  field(SCAN, "Passive")
14705  field(INP, "$(P):LS01:Z2:D3:ARRAY.VAL MS")
14706  field(PREC, "1")
14707  field(FLNK, "$(P):LS01:Z2:MOUT3:ARRAY.PROC")
14708 }
14709 
14710 ##
14711 ## Read the ZONE MOUT setting.
14712 ##
14713 record(subArray, "$(P):LS01:Z2:MOUT3:ARRAY") {
14714  field(SCAN, "Passive")
14715  field(FTVL, "DOUBLE")
14716  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
14717  field(MALM, "8")
14718  field(NELM, "1")
14719  field(INDX, "4")
14720  field(PREC, "1")
14721  field(FLNK, "$(P):LS01:Z2:MOUT3.PROC")
14722 }
14723 record(ai, "$(P):LS01:Z2:MOUT3") {
14724  field(SCAN, "Passive")
14725  field(INP, "$(P):LS01:Z2:MOUT3:ARRAY.VAL MS")
14726  field(PREC, "1")
14727  field(FLNK, "$(P):LS01:Z2:RANGE3:ARRAY.PROC")
14728 }
14729 
14730 ##
14731 ## Read the ZONE RANGE setting.
14732 ##
14733 record(subArray, "$(P):LS01:Z2:RANGE3:ARRAY") {
14734  field(SCAN, "Passive")
14735  field(FTVL, "DOUBLE")
14736  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
14737  field(MALM, "8")
14738  field(NELM, "1")
14739  field(INDX, "5")
14740  field(PREC, "1")
14741  field(FLNK, "$(P):LS01:Z2:RANGE3.PROC")
14742 }
14743 record(mbbi, "$(P):LS01:Z2:RANGE3") {
14744  field(INP, "$(P):LS01:Z2:RANGE3:ARRAY.VAL")
14745  field(SCAN, "Passive")
14746  field(ZRST, "Off")
14747  field(ZRVL, "0")
14748  field(ONST, "Range1/Low")
14749  field(ONVL, "1")
14750  field(TWST, "Range2/Medium")
14751  field(TWVL, "2")
14752  field(THST, "Range3/High")
14753  field(THVL, "3")
14754  field(FRST, "Range4")
14755  field(FRVL, "4")
14756  field(FVST, "Range5")
14757  field(FVVL, "5")
14758  field(FLNK, "$(P):LS01:Z2:INPUT3:ARRAY.PROC")
14759 }
14760 
14761 ##
14762 ## Read the ZONE INPUT setting.
14763 ##
14764 record(subArray, "$(P):LS01:Z2:INPUT3:ARRAY") {
14765  field(SCAN, "Passive")
14766  field(FTVL, "DOUBLE")
14767  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
14768  field(MALM, "8")
14769  field(NELM, "1")
14770  field(INDX, "6")
14771  field(PREC, "1")
14772  field(FLNK, "$(P):LS01:Z2:INPUT3.PROC")
14773 }
14774 record(mbbi, "$(P):LS01:Z2:INPUT3") {
14775  field(INP, "$(P):LS01:Z2:INPUT3:ARRAY.VAL")
14776  field(SCAN, "Passive")
14777  field(ZRST, "None")
14778  field(ZRVL, "0")
14779  field(ONST, "Input A")
14780  field(ONVL, "1")
14781  field(TWST, "Input B")
14782  field(TWVL, "2")
14783  field(THST, "Input C")
14784  field(THVL, "3")
14785  field(FRST, "Input D")
14786  field(FRVL, "4")
14787  field(FVST, "Input D2")
14788  field(FVVL, "5")
14789  field(SXST, "Input D3")
14790  field(SXVL, "6")
14791  field(SVST, "Input D4")
14792  field(SVVL, "7")
14793  field(EIST, "Input D5")
14794  field(EIVL, "8")
14795  field(FLNK, "$(P):LS01:Z2:RATE3:ARRAY.PROC")
14796 }
14797 
14798 ##
14799 ## Read the ZONE RATE setting.
14800 ##
14801 record(subArray, "$(P):LS01:Z2:RATE3:ARRAY") {
14802  field(SCAN, "Passive")
14803  field(FTVL, "DOUBLE")
14804  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
14805  field(MALM, "8")
14806  field(NELM, "1")
14807  field(INDX, "7")
14808  field(PREC, "1")
14809  field(FLNK, "$(P):LS01:Z2:RATE3.PROC")
14810 }
14811 record(ai, "$(P):LS01:Z2:RATE3") {
14812  field(SCAN, "Passive")
14813  field(INP, "$(P):LS01:Z2:RATE3:ARRAY.VAL MS")
14814  field(PREC, "1")
14815  field(FLNK, "$(P):LS01:Z2:INITCALC3.PROC")
14816 }
14817 
14818 ##############################################################
14819 ##
14820 ## Populate the write records below with the current values.
14821 ## Only do this once at startup.
14822 ##
14823 ###############################################################
14824 
14825 record(calcout, "$(P):LS01:Z2:INITCALC3") {
14826  field(INPA, "0")
14827  field(CALC, "A")
14828  field(VAL, "0")
14829  field(DOPT, "Use OCAL")
14830  field(OOPT, "When Zero")
14831  field(OCAL, "1")
14832  field(OUT, "$(P):LS01:Z2:INITUB3.PROC")
14833 }
14834 
14835 record(dfanout, "$(P):LS01:Z2:INITUB3") {
14836  field(OMSL, "closed_loop")
14837  field(DOL, "$(P):LS01:Z2:UB3.VAL")
14838  field(OUTA, "$(P):LS01:Z2:UB_S3.VAL PP")
14839  field(FLNK, "$(P):LS01:Z2:INITP3.PROC")
14840 }
14841 record(dfanout, "$(P):LS01:Z2:INITP3") {
14842  field(OMSL, "closed_loop")
14843  field(DOL, "$(P):LS01:Z2:P3.VAL")
14844  field(OUTA, "$(P):LS01:Z2:P_S3.VAL PP")
14845  field(FLNK, "$(P):LS01:Z2:INITI3.PROC")
14846 }
14847 record(dfanout, "$(P):LS01:Z2:INITI3") {
14848  field(OMSL, "closed_loop")
14849  field(DOL, "$(P):LS01:Z2:I3.VAL")
14850  field(OUTA, "$(P):LS01:Z2:I_S3.VAL PP")
14851  field(FLNK, "$(P):LS01:Z2:INITD3.PROC")
14852 }
14853 record(dfanout, "$(P):LS01:Z2:INITD3") {
14854  field(OMSL, "closed_loop")
14855  field(DOL, "$(P):LS01:Z2:D3.VAL")
14856  field(OUTA, "$(P):LS01:Z2:D_S3.VAL PP")
14857  field(FLNK, "$(P):LS01:Z2:INITMOUT3.PROC")
14858 }
14859 record(dfanout, "$(P):LS01:Z2:INITMOUT3") {
14860  field(OMSL, "closed_loop")
14861  field(DOL, "$(P):LS01:Z2:MOUT3.VAL")
14862  field(OUTA, "$(P):LS01:Z2:MOUT_S3.VAL PP")
14863  field(FLNK, "$(P):LS01:Z2:INITRANGE3.PROC")
14864 }
14865 record(dfanout, "$(P):LS01:Z2:INITRANGE3") {
14866  field(OMSL, "closed_loop")
14867  field(DOL, "$(P):LS01:Z2:RANGE3.VAL")
14868  field(OUTA, "$(P):LS01:Z2:RANGE_S3.VAL PP")
14869  field(FLNK, "$(P):LS01:Z2:INITINPUT3.PROC")
14870 }
14871 record(dfanout, "$(P):LS01:Z2:INITINPUT3") {
14872  field(OMSL, "closed_loop")
14873  field(DOL, "$(P):LS01:Z2:INPUT3.VAL")
14874  field(OUTA, "$(P):LS01:Z2:INPUT_S3.VAL PP")
14875  field(FLNK, "$(P):LS01:Z2:INITRATE3.PROC")
14876 }
14877 record(dfanout, "$(P):LS01:Z2:INITRATE3") {
14878  field(OMSL, "closed_loop")
14879  field(DOL, "$(P):LS01:Z2:RATE3.VAL")
14880  field(OUTA, "$(P):LS01:Z2:RATE_S3.VAL PP")
14881  field(FLNK, "$(P):LS01:Z2:INITCOUNT3.PROC")
14882 }
14883 
14884 record(dfanout, "$(P):LS01:Z2:INITCOUNT3") {
14885  field(DOL, "1")
14886  field(OUTA, "$(P):LS01:Z2:INITCALC3.A")
14887 }
14888 
14889 
14890 
14891 #############################################
14892 # Write records. There is a calcout record to
14893 # do the actual write.
14894 #############################################
14895 
14896 ##
14897 ## Set the ZONE upper boundary setting.
14898 ##
14899 record(ao, "$(P):LS01:Z2:UB_S3") {
14900  field(SCAN, "Passive")
14901  field(PREC, "1")
14902  field(SDIS, "$(P):LS01:DISABLE")
14903 }
14904 
14905 ##
14906 ## Set the ZONE P setting.
14907 ##
14908 record(ao, "$(P):LS01:Z2:P_S3") {
14909  field(SCAN, "Passive")
14910  field(PREC, "1")
14911  field(SDIS, "$(P):LS01:DISABLE")
14912 }
14913 
14914 ##
14915 ## Set the ZONE I setting.
14916 ##
14917 record(ao, "$(P):LS01:Z2:I_S3") {
14918  field(SCAN, "Passive")
14919  field(PREC, "1")
14920  field(SDIS, "$(P):LS01:DISABLE")
14921 }
14922 
14923 ##
14924 ## Set the ZONE D setting.
14925 ##
14926 record(ao, "$(P):LS01:Z2:D_S3") {
14927  field(SCAN, "Passive")
14928  field(PREC, "1")
14929  field(SDIS, "$(P):LS01:DISABLE")
14930 }
14931 
14932 ##
14933 ## Set the ZONE MOUT setting.
14934 ##
14935 record(ao, "$(P):LS01:Z2:MOUT_S3") {
14936  field(SCAN, "Passive")
14937  field(PREC, "1")
14938  field(SDIS, "$(P):LS01:DISABLE")
14939 }
14940 
14941 ##
14942 ## Set the ZONE RANGE setting.
14943 ##
14944 record(mbbo, "$(P):LS01:Z2:RANGE_S3") {
14945  field(SCAN, "Passive")
14946  field(ZRST, "Off")
14947  field(ZRVL, "0")
14948  field(ONST, "Range1/Low")
14949  field(ONVL, "1")
14950  field(TWST, "Range2/Medium")
14951  field(TWVL, "2")
14952  field(THST, "Range3/High")
14953  field(THVL, "3")
14954  field(FRST, "Range4")
14955  field(FRVL, "4")
14956  field(FVST, "Range5")
14957  field(FVVL, "5")
14958  field(SDIS, "$(P):LS01:DISABLE")
14959 }
14960 
14961 ##
14962 ## Set the ZONE INPUT setting.
14963 ##
14964 record(mbbo, "$(P):LS01:Z2:INPUT_S3") {
14965  field(ZRST, "None")
14966  field(ZRVL, "0")
14967  field(ONST, "Input A")
14968  field(ONVL, "1")
14969  field(TWST, "Input B")
14970  field(TWVL, "2")
14971  field(THST, "Input C")
14972  field(THVL, "3")
14973  field(FRST, "Input D")
14974  field(FRVL, "4")
14975  field(FVST, "Input D2")
14976  field(FVVL, "5")
14977  field(SXST, "Input D3")
14978  field(SXVL, "6")
14979  field(SVST, "Input D4")
14980  field(SVVL, "7")
14981  field(EIST, "Input D5")
14982  field(EIVL, "8")
14983  field(SDIS, "$(P):LS01:DISABLE")
14984 }
14985 
14986 ##
14987 ## Set the ZONE RATE setting.
14988 ##
14989 record(ao, "$(P):LS01:Z2:RATE_S3") {
14990  field(SCAN, "Passive")
14991  field(PREC, "1")
14992  field(SDIS, "$(P):LS01:DISABLE")
14993 }
14994 
14995 ##
14996 ## Record to write the ZONE parameters.
14997 ##
14998 record(calcout, "$(P):LS01:Z2:SET3") {
14999  field(INPA, "$(P):LS01:Z2:UB_S3")
15000  field(INPB, "$(P):LS01:Z2:P_S3")
15001  field(INPC, "$(P):LS01:Z2:I_S3")
15002  field(INPD, "$(P):LS01:Z2:D_S3")
15003  field(INPE, "$(P):LS01:Z2:MOUT_S3")
15004  field(INPF, "$(P):LS01:Z2:RANGE_S3")
15005  field(INPG, "$(P):LS01:Z2:INPUT_S3")
15006  field(INPH, "$(P):LS01:Z2:RATE_S3")
15007  field(CALC, "0")
15008  field(DTYP, "stream")
15009  field(OUT, "@ls336.proto setZONE(3,2) L0 0")
15010  field(SDIS, "$(P):LS01:DISABLE")
15011  field(FLNK, "$(P):LS01:Z2:ALL3.PROC")
15012 }
15013 
15014 
15015 
15016 
15017 
15018 
15019 
15020 
15021 
15022 
15023 record(mbbi, "$(P):LS01:Z2:RANGE3") {
15024  field(ZRST, "Off")
15025  field(ONST, "On")
15026  field(TWST, "")
15027  field(THST, "")
15028  field(FRST, "")
15029  field(FVST, "")
15030 }
15031 
15032 record(mbbo, "$(P):LS01:Z2:RANGE_S3") {
15033  field(ZRST, "Off")
15034  field(ONST, "On")
15035  field(TWST, "")
15036  field(THST, "")
15037  field(FRST, "")
15038  field(FVST, "")
15039 }
15040 
15041 
15042 
15043 
15044 
15045 
15046 # This just includes the zone file and overrides the RANGE options
15047 # for the analog control channels.
15048 
15049 #######################################
15050 #
15051 # Template to support reading and setting
15052 # controller ZONE parameters. It reads the ZONE
15053 # parameters into an array, then uses subArrays to
15054 # extract each parameter.
15055 #
15056 # This template is used by the output template
15057 # and it needs the following macros:
15058 #
15059 # ZONE: zone number
15060 # OUT: output number
15061 #
15062 #######################################
15063 
15064 ##
15065 ## Read the ZONE setting into an array (8 values)
15066 ##
15067 record(waveform, "$(P):LS01:Z2:ALL3") {
15068  field(DTYP, "stream")
15069  field(SDIS, "$(P):LS01:DISABLE_POLL")
15070  field(INP, "@ls336.proto getZONE(3,2) L0 0")
15071  field(SCAN, "Passive")
15072  field(NELM, "8")
15073  field(FTVL, "DOUBLE")
15074  field(PREC, "1")
15075  field(FLNK, "$(P):LS01:Z2:UB3:ARRAY.PROC")
15076 }
15077 
15078 ##
15079 ## Read the ZONE upper boundary setting.
15080 ##
15081 record(subArray, "$(P):LS01:Z2:UB3:ARRAY") {
15082  field(SCAN, "Passive")
15083  field(FTVL, "DOUBLE")
15084  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
15085  field(MALM, "8")
15086  field(NELM, "1")
15087  field(INDX, "0")
15088  field(PREC, "1")
15089  field(FLNK, "$(P):LS01:Z2:UB3.PROC")
15090 }
15091 record(ai, "$(P):LS01:Z2:UB3") {
15092  field(SCAN, "Passive")
15093  field(INP, "$(P):LS01:Z2:UB3:ARRAY.VAL MS")
15094  field(PREC, "1")
15095  field(FLNK, "$(P):LS01:Z2:P3:ARRAY.PROC")
15096 }
15097 
15098 ##
15099 ## Read the ZONE P setting.
15100 ##
15101 record(subArray, "$(P):LS01:Z2:P3:ARRAY") {
15102  field(SCAN, "Passive")
15103  field(FTVL, "DOUBLE")
15104  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
15105  field(MALM, "8")
15106  field(NELM, "1")
15107  field(INDX, "1")
15108  field(PREC, "1")
15109  field(FLNK, "$(P):LS01:Z2:P3.PROC")
15110 }
15111 record(ai, "$(P):LS01:Z2:P3") {
15112  field(SCAN, "Passive")
15113  field(INP, "$(P):LS01:Z2:P3:ARRAY.VAL MS")
15114  field(PREC, "1")
15115  field(FLNK, "$(P):LS01:Z2:I3:ARRAY.PROC")
15116 }
15117 
15118 ##
15119 ## Read the ZONE I setting.
15120 ##
15121 record(subArray, "$(P):LS01:Z2:I3:ARRAY") {
15122  field(SCAN, "Passive")
15123  field(FTVL, "DOUBLE")
15124  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
15125  field(MALM, "8")
15126  field(NELM, "1")
15127  field(INDX, "2")
15128  field(PREC, "1")
15129  field(FLNK, "$(P):LS01:Z2:I3.PROC")
15130 }
15131 record(ai, "$(P):LS01:Z2:I3") {
15132  field(SCAN, "Passive")
15133  field(INP, "$(P):LS01:Z2:I3:ARRAY.VAL MS")
15134  field(PREC, "1")
15135  field(FLNK, "$(P):LS01:Z2:D3:ARRAY.PROC")
15136 }
15137 
15138 ##
15139 ## Read the ZONE D setting.
15140 ##
15141 record(subArray, "$(P):LS01:Z2:D3:ARRAY") {
15142  field(SCAN, "Passive")
15143  field(FTVL, "DOUBLE")
15144  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
15145  field(MALM, "8")
15146  field(NELM, "1")
15147  field(INDX, "3")
15148  field(PREC, "1")
15149  field(FLNK, "$(P):LS01:Z2:D3.PROC")
15150 }
15151 record(ai, "$(P):LS01:Z2:D3") {
15152  field(SCAN, "Passive")
15153  field(INP, "$(P):LS01:Z2:D3:ARRAY.VAL MS")
15154  field(PREC, "1")
15155  field(FLNK, "$(P):LS01:Z2:MOUT3:ARRAY.PROC")
15156 }
15157 
15158 ##
15159 ## Read the ZONE MOUT setting.
15160 ##
15161 record(subArray, "$(P):LS01:Z2:MOUT3:ARRAY") {
15162  field(SCAN, "Passive")
15163  field(FTVL, "DOUBLE")
15164  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
15165  field(MALM, "8")
15166  field(NELM, "1")
15167  field(INDX, "4")
15168  field(PREC, "1")
15169  field(FLNK, "$(P):LS01:Z2:MOUT3.PROC")
15170 }
15171 record(ai, "$(P):LS01:Z2:MOUT3") {
15172  field(SCAN, "Passive")
15173  field(INP, "$(P):LS01:Z2:MOUT3:ARRAY.VAL MS")
15174  field(PREC, "1")
15175  field(FLNK, "$(P):LS01:Z2:RANGE3:ARRAY.PROC")
15176 }
15177 
15178 ##
15179 ## Read the ZONE RANGE setting.
15180 ##
15181 record(subArray, "$(P):LS01:Z2:RANGE3:ARRAY") {
15182  field(SCAN, "Passive")
15183  field(FTVL, "DOUBLE")
15184  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
15185  field(MALM, "8")
15186  field(NELM, "1")
15187  field(INDX, "5")
15188  field(PREC, "1")
15189  field(FLNK, "$(P):LS01:Z2:RANGE3.PROC")
15190 }
15191 record(mbbi, "$(P):LS01:Z2:RANGE3") {
15192  field(INP, "$(P):LS01:Z2:RANGE3:ARRAY.VAL")
15193  field(SCAN, "Passive")
15194  field(ZRST, "Off")
15195  field(ZRVL, "0")
15196  field(ONST, "Range1/Low")
15197  field(ONVL, "1")
15198  field(TWST, "Range2/Medium")
15199  field(TWVL, "2")
15200  field(THST, "Range3/High")
15201  field(THVL, "3")
15202  field(FRST, "Range4")
15203  field(FRVL, "4")
15204  field(FVST, "Range5")
15205  field(FVVL, "5")
15206  field(FLNK, "$(P):LS01:Z2:INPUT3:ARRAY.PROC")
15207 }
15208 
15209 ##
15210 ## Read the ZONE INPUT setting.
15211 ##
15212 record(subArray, "$(P):LS01:Z2:INPUT3:ARRAY") {
15213  field(SCAN, "Passive")
15214  field(FTVL, "DOUBLE")
15215  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
15216  field(MALM, "8")
15217  field(NELM, "1")
15218  field(INDX, "6")
15219  field(PREC, "1")
15220  field(FLNK, "$(P):LS01:Z2:INPUT3.PROC")
15221 }
15222 record(mbbi, "$(P):LS01:Z2:INPUT3") {
15223  field(INP, "$(P):LS01:Z2:INPUT3:ARRAY.VAL")
15224  field(SCAN, "Passive")
15225  field(ZRST, "None")
15226  field(ZRVL, "0")
15227  field(ONST, "Input A")
15228  field(ONVL, "1")
15229  field(TWST, "Input B")
15230  field(TWVL, "2")
15231  field(THST, "Input C")
15232  field(THVL, "3")
15233  field(FRST, "Input D")
15234  field(FRVL, "4")
15235  field(FVST, "Input D2")
15236  field(FVVL, "5")
15237  field(SXST, "Input D3")
15238  field(SXVL, "6")
15239  field(SVST, "Input D4")
15240  field(SVVL, "7")
15241  field(EIST, "Input D5")
15242  field(EIVL, "8")
15243  field(FLNK, "$(P):LS01:Z2:RATE3:ARRAY.PROC")
15244 }
15245 
15246 ##
15247 ## Read the ZONE RATE setting.
15248 ##
15249 record(subArray, "$(P):LS01:Z2:RATE3:ARRAY") {
15250  field(SCAN, "Passive")
15251  field(FTVL, "DOUBLE")
15252  field(INP, "$(P):LS01:Z2:ALL3.VAL MS")
15253  field(MALM, "8")
15254  field(NELM, "1")
15255  field(INDX, "7")
15256  field(PREC, "1")
15257  field(FLNK, "$(P):LS01:Z2:RATE3.PROC")
15258 }
15259 record(ai, "$(P):LS01:Z2:RATE3") {
15260  field(SCAN, "Passive")
15261  field(INP, "$(P):LS01:Z2:RATE3:ARRAY.VAL MS")
15262  field(PREC, "1")
15263  field(FLNK, "$(P):LS01:Z2:INITCALC3.PROC")
15264 }
15265 
15266 ##############################################################
15267 ##
15268 ## Populate the write records below with the current values.
15269 ## Only do this once at startup.
15270 ##
15271 ###############################################################
15272 
15273 record(calcout, "$(P):LS01:Z2:INITCALC3") {
15274  field(INPA, "0")
15275  field(CALC, "A")
15276  field(VAL, "0")
15277  field(DOPT, "Use OCAL")
15278  field(OOPT, "When Zero")
15279  field(OCAL, "1")
15280  field(OUT, "$(P):LS01:Z2:INITUB3.PROC")
15281 }
15282 
15283 record(dfanout, "$(P):LS01:Z2:INITUB3") {
15284  field(OMSL, "closed_loop")
15285  field(DOL, "$(P):LS01:Z2:UB3.VAL")
15286  field(OUTA, "$(P):LS01:Z2:UB_S3.VAL PP")
15287  field(FLNK, "$(P):LS01:Z2:INITP3.PROC")
15288 }
15289 record(dfanout, "$(P):LS01:Z2:INITP3") {
15290  field(OMSL, "closed_loop")
15291  field(DOL, "$(P):LS01:Z2:P3.VAL")
15292  field(OUTA, "$(P):LS01:Z2:P_S3.VAL PP")
15293  field(FLNK, "$(P):LS01:Z2:INITI3.PROC")
15294 }
15295 record(dfanout, "$(P):LS01:Z2:INITI3") {
15296  field(OMSL, "closed_loop")
15297  field(DOL, "$(P):LS01:Z2:I3.VAL")
15298  field(OUTA, "$(P):LS01:Z2:I_S3.VAL PP")
15299  field(FLNK, "$(P):LS01:Z2:INITD3.PROC")
15300 }
15301 record(dfanout, "$(P):LS01:Z2:INITD3") {
15302  field(OMSL, "closed_loop")
15303  field(DOL, "$(P):LS01:Z2:D3.VAL")
15304  field(OUTA, "$(P):LS01:Z2:D_S3.VAL PP")
15305  field(FLNK, "$(P):LS01:Z2:INITMOUT3.PROC")
15306 }
15307 record(dfanout, "$(P):LS01:Z2:INITMOUT3") {
15308  field(OMSL, "closed_loop")
15309  field(DOL, "$(P):LS01:Z2:MOUT3.VAL")
15310  field(OUTA, "$(P):LS01:Z2:MOUT_S3.VAL PP")
15311  field(FLNK, "$(P):LS01:Z2:INITRANGE3.PROC")
15312 }
15313 record(dfanout, "$(P):LS01:Z2:INITRANGE3") {
15314  field(OMSL, "closed_loop")
15315  field(DOL, "$(P):LS01:Z2:RANGE3.VAL")
15316  field(OUTA, "$(P):LS01:Z2:RANGE_S3.VAL PP")
15317  field(FLNK, "$(P):LS01:Z2:INITINPUT3.PROC")
15318 }
15319 record(dfanout, "$(P):LS01:Z2:INITINPUT3") {
15320  field(OMSL, "closed_loop")
15321  field(DOL, "$(P):LS01:Z2:INPUT3.VAL")
15322  field(OUTA, "$(P):LS01:Z2:INPUT_S3.VAL PP")
15323  field(FLNK, "$(P):LS01:Z2:INITRATE3.PROC")
15324 }
15325 record(dfanout, "$(P):LS01:Z2:INITRATE3") {
15326  field(OMSL, "closed_loop")
15327  field(DOL, "$(P):LS01:Z2:RATE3.VAL")
15328  field(OUTA, "$(P):LS01:Z2:RATE_S3.VAL PP")
15329  field(FLNK, "$(P):LS01:Z2:INITCOUNT3.PROC")
15330 }
15331 
15332 record(dfanout, "$(P):LS01:Z2:INITCOUNT3") {
15333  field(DOL, "1")
15334  field(OUTA, "$(P):LS01:Z2:INITCALC3.A")
15335 }
15336 
15337 
15338 
15339 #############################################
15340 # Write records. There is a calcout record to
15341 # do the actual write.
15342 #############################################
15343 
15344 ##
15345 ## Set the ZONE upper boundary setting.
15346 ##
15347 record(ao, "$(P):LS01:Z2:UB_S3") {
15348  field(SCAN, "Passive")
15349  field(PREC, "1")
15350  field(SDIS, "$(P):LS01:DISABLE")
15351 }
15352 
15353 ##
15354 ## Set the ZONE P setting.
15355 ##
15356 record(ao, "$(P):LS01:Z2:P_S3") {
15357  field(SCAN, "Passive")
15358  field(PREC, "1")
15359  field(SDIS, "$(P):LS01:DISABLE")
15360 }
15361 
15362 ##
15363 ## Set the ZONE I setting.
15364 ##
15365 record(ao, "$(P):LS01:Z2:I_S3") {
15366  field(SCAN, "Passive")
15367  field(PREC, "1")
15368  field(SDIS, "$(P):LS01:DISABLE")
15369 }
15370 
15371 ##
15372 ## Set the ZONE D setting.
15373 ##
15374 record(ao, "$(P):LS01:Z2:D_S3") {
15375  field(SCAN, "Passive")
15376  field(PREC, "1")
15377  field(SDIS, "$(P):LS01:DISABLE")
15378 }
15379 
15380 ##
15381 ## Set the ZONE MOUT setting.
15382 ##
15383 record(ao, "$(P):LS01:Z2:MOUT_S3") {
15384  field(SCAN, "Passive")
15385  field(PREC, "1")
15386  field(SDIS, "$(P):LS01:DISABLE")
15387 }
15388 
15389 ##
15390 ## Set the ZONE RANGE setting.
15391 ##
15392 record(mbbo, "$(P):LS01:Z2:RANGE_S3") {
15393  field(SCAN, "Passive")
15394  field(ZRST, "Off")
15395  field(ZRVL, "0")
15396  field(ONST, "Range1/Low")
15397  field(ONVL, "1")
15398  field(TWST, "Range2/Medium")
15399  field(TWVL, "2")
15400  field(THST, "Range3/High")
15401  field(THVL, "3")
15402  field(FRST, "Range4")
15403  field(FRVL, "4")
15404  field(FVST, "Range5")
15405  field(FVVL, "5")
15406  field(SDIS, "$(P):LS01:DISABLE")
15407 }
15408 
15409 ##
15410 ## Set the ZONE INPUT setting.
15411 ##
15412 record(mbbo, "$(P):LS01:Z2:INPUT_S3") {
15413  field(ZRST, "None")
15414  field(ZRVL, "0")
15415  field(ONST, "Input A")
15416  field(ONVL, "1")
15417  field(TWST, "Input B")
15418  field(TWVL, "2")
15419  field(THST, "Input C")
15420  field(THVL, "3")
15421  field(FRST, "Input D")
15422  field(FRVL, "4")
15423  field(FVST, "Input D2")
15424  field(FVVL, "5")
15425  field(SXST, "Input D3")
15426  field(SXVL, "6")
15427  field(SVST, "Input D4")
15428  field(SVVL, "7")
15429  field(EIST, "Input D5")
15430  field(EIVL, "8")
15431  field(SDIS, "$(P):LS01:DISABLE")
15432 }
15433 
15434 ##
15435 ## Set the ZONE RATE setting.
15436 ##
15437 record(ao, "$(P):LS01:Z2:RATE_S3") {
15438  field(SCAN, "Passive")
15439  field(PREC, "1")
15440  field(SDIS, "$(P):LS01:DISABLE")
15441 }
15442 
15443 ##
15444 ## Record to write the ZONE parameters.
15445 ##
15446 record(calcout, "$(P):LS01:Z2:SET3") {
15447  field(INPA, "$(P):LS01:Z2:UB_S3")
15448  field(INPB, "$(P):LS01:Z2:P_S3")
15449  field(INPC, "$(P):LS01:Z2:I_S3")
15450  field(INPD, "$(P):LS01:Z2:D_S3")
15451  field(INPE, "$(P):LS01:Z2:MOUT_S3")
15452  field(INPF, "$(P):LS01:Z2:RANGE_S3")
15453  field(INPG, "$(P):LS01:Z2:INPUT_S3")
15454  field(INPH, "$(P):LS01:Z2:RATE_S3")
15455  field(CALC, "0")
15456  field(DTYP, "stream")
15457  field(OUT, "@ls336.proto setZONE(3,2) L0 0")
15458  field(SDIS, "$(P):LS01:DISABLE")
15459  field(FLNK, "$(P):LS01:Z2:ALL3.PROC")
15460 }
15461 
15462 
15463 
15464 
15465 
15466 
15467 
15468 
15469 
15470 
15471 record(mbbi, "$(P):LS01:Z2:RANGE3") {
15472  field(ZRST, "Off")
15473  field(ONST, "On")
15474  field(TWST, "")
15475  field(THST, "")
15476  field(FRST, "")
15477  field(FVST, "")
15478 }
15479 
15480 record(mbbo, "$(P):LS01:Z2:RANGE_S3") {
15481  field(ZRST, "Off")
15482  field(ONST, "On")
15483  field(TWST, "")
15484  field(THST, "")
15485  field(FRST, "")
15486  field(FVST, "")
15487 }
15488 
15489 
15490 
15491 
15492 
15493 
15494 # This just includes the zone file and overrides the RANGE options
15495 # for the analog control channels.
15496 
15497 #######################################
15498 #
15499 # Template to support reading and setting
15500 # controller ZONE parameters. It reads the ZONE
15501 # parameters into an array, then uses subArrays to
15502 # extract each parameter.
15503 #
15504 # This template is used by the output template
15505 # and it needs the following macros:
15506 #
15507 # ZONE: zone number
15508 # OUT: output number
15509 #
15510 #######################################
15511 
15512 ##
15513 ## Read the ZONE setting into an array (8 values)
15514 ##
15515 record(waveform, "$(P):LS01:Z3:ALL3") {
15516  field(DTYP, "stream")
15517  field(SDIS, "$(P):LS01:DISABLE_POLL")
15518  field(INP, "@ls336.proto getZONE(3,3) L0 0")
15519  field(SCAN, "Passive")
15520  field(NELM, "8")
15521  field(FTVL, "DOUBLE")
15522  field(PREC, "1")
15523  field(FLNK, "$(P):LS01:Z3:UB3:ARRAY.PROC")
15524 }
15525 
15526 ##
15527 ## Read the ZONE upper boundary setting.
15528 ##
15529 record(subArray, "$(P):LS01:Z3:UB3:ARRAY") {
15530  field(SCAN, "Passive")
15531  field(FTVL, "DOUBLE")
15532  field(INP, "$(P):LS01:Z3:ALL3.VAL MS")
15533  field(MALM, "8")
15534  field(NELM, "1")
15535  field(INDX, "0")
15536  field(PREC, "1")
15537  field(FLNK, "$(P):LS01:Z3:UB3.PROC")
15538 }
15539 record(ai, "$(P):LS01:Z3:UB3") {
15540  field(SCAN, "Passive")
15541  field(INP, "$(P):LS01:Z3:UB3:ARRAY.VAL MS")
15542  field(PREC, "1")
15543  field(FLNK, "$(P):LS01:Z3:P3:ARRAY.PROC")
15544 }
15545 
15546 ##
15547 ## Read the ZONE P setting.
15548 ##
15549 record(subArray, "$(P):LS01:Z3:P3:ARRAY") {
15550  field(SCAN, "Passive")
15551  field(FTVL, "DOUBLE")
15552  field(INP, "$(P):LS01:Z3:ALL3.VAL MS")
15553  field(MALM, "8")
15554  field(NELM, "1")
15555  field(INDX, "1")
15556  field(PREC, "1")
15557  field(FLNK, "$(P):LS01:Z3:P3.PROC")
15558 }
15559 record(ai, "$(P):LS01:Z3:P3") {
15560  field(SCAN, "Passive")
15561  field(INP, "$(P):LS01:Z3:P3:ARRAY.VAL MS")
15562  field(PREC, "1")
15563  field(FLNK, "$(P):LS01:Z3:I3:ARRAY.PROC")
15564 }
15565 
15566 ##
15567 ## Read the ZONE I setting.
15568 ##
15569 record(subArray, "$(P):LS01:Z3:I3:ARRAY") {
15570  field(SCAN, "Passive")
15571  field(FTVL, "DOUBLE")
15572  field(INP, "$(P):LS01:Z3:ALL3.VAL MS")
15573  field(MALM, "8")
15574  field(NELM, "1")
15575  field(INDX, "2")
15576  field(PREC, "1")
15577  field(FLNK, "$(P):LS01:Z3:I3.PROC")
15578 }
15579 record(ai, "$(P):LS01:Z3:I3") {
15580  field(SCAN, "Passive")
15581  field(INP, "$(P):LS01:Z3:I3:ARRAY.VAL MS")
15582  field(PREC, "1")
15583  field(FLNK, "$(P):LS01:Z3:D3:ARRAY.PROC")
15584 }
15585 
15586 ##
15587 ## Read the ZONE D setting.
15588 ##
15589 record(subArray, "$(P):LS01:Z3:D3:ARRAY") {
15590  field(SCAN, "Passive")
15591  field(FTVL, "DOUBLE")
15592  field(INP, "$(P):LS01:Z3:ALL3.VAL MS")
15593  field(MALM, "8")
15594  field(NELM, "1")
15595  field(INDX, "3")
15596  field(PREC, "1")
15597  field(FLNK, "$(P):LS01:Z3:D3.PROC")
15598 }
15599 record(ai, "$(P):LS01:Z3:D3") {
15600  field(SCAN, "Passive")
15601  field(INP, "$(P):LS01:Z3:D3:ARRAY.VAL MS")
15602  field(PREC, "1")
15603  field(FLNK, "$(P):LS01:Z3:MOUT3:ARRAY.PROC")
15604 }
15605 
15606 ##
15607 ## Read the ZONE MOUT setting.
15608 ##
15609 record(subArray, "$(P):LS01:Z3:MOUT3:ARRAY") {
15610  field(SCAN, "Passive")
15611  field(FTVL, "DOUBLE")
15612  field(INP, "$(P):LS01:Z3:ALL3.VAL MS")
15613  field(MALM, "8")
15614  field(NELM, "1")
15615  field(INDX, "4")
15616  field(PREC, "1")
15617  field(FLNK, "$(P):LS01:Z3:MOUT3.PROC")
15618 }
15619 record(ai, "$(P):LS01:Z3:MOUT3") {
15620  field(SCAN, "Passive")
15621  field(INP, "$(P):LS01:Z3:MOUT3:ARRAY.VAL MS")
15622  field(PREC, "1")
15623  field(FLNK, "$(P):LS01:Z3:RANGE3:ARRAY.PROC")
15624 }
15625 
15626 ##
15627 ## Read the ZONE RANGE setting.
15628 ##
15629 record(subArray, "$(P):LS01:Z3:RANGE3:ARRAY") {
15630  field(SCAN, "Passive")
15631  field(FTVL, "DOUBLE")
15632  field(INP, "$(P):LS01:Z3:ALL3.VAL MS")
15633  field(MALM, "8")
15634  field(NELM, "1")
15635  field(INDX, "5")
15636  field(PREC, "1")
15637  field(FLNK, "$(P):LS01:Z3:RANGE3.PROC")
15638 }
15639 record(mbbi, "$(P):LS01:Z3:RANGE3") {
15640  field(INP, "$(P):LS01:Z3:RANGE3:ARRAY.VAL")
15641  field(SCAN, "Passive")
15642  field(ZRST, "Off")
15643  field(ZRVL, "0")
15644  field(ONST, "Range1/Low")
15645  field(ONVL, "1")
15646  field(TWST, "Range2/Medium")
15647  field(TWVL, "2")
15648  field(THST, "Range3/High")
15649  field(THVL, "3")
15650  field(FRST, "Range4")
15651  field(FRVL, "4")
15652  field(FVST, "Range5")
15653  field(FVVL, "5")
15654  field(FLNK, "$(P):LS01:Z3:INPUT3:ARRAY.PROC")
15655 }
15656 
15657 ##
15658 ## Read the ZONE INPUT setting.
15659 ##
15660 record(subArray, "$(P):LS01:Z3:INPUT3:ARRAY") {
15661  field(SCAN, "Passive")
15662  field(FTVL, "DOUBLE")
15663  field(INP, "$(P):LS01:Z3:ALL3.VAL MS")
15664  field(MALM, "8")
15665  field(NELM, "1")
15666  field(INDX, "6")
15667  field(PREC, "1")
15668  field(FLNK, "$(P):LS01:Z3:INPUT3.PROC")
15669 }
15670 record(mbbi, "$(P):LS01:Z3:INPUT3") {
15671  field(INP, "$(P):LS01:Z3:INPUT3:ARRAY.VAL")
15672  field(SCAN, "Passive")
15673  field(ZRST, "None")
15674  field(ZRVL, "0")
15675  field(ONST, "Input A")
15676  field(ONVL, "1")
15677  field(TWST, "Input B")
15678  field(TWVL, "2")
15679  field(THST, "Input C")
15680  field(THVL, "3")
15681  field(FRST, "Input D")
15682  field(FRVL, "4")
15683  field(FVST, "Input D2")
15684  field(FVVL, "5")
15685  field(SXST, "Input D3")
15686  field(SXVL, "6")
15687  field(SVST, "Input D4")
15688  field(SVVL, "7")
15689  field(EIST, "Input D5")
15690  field(EIVL, "8")
15691  field(FLNK, "$(P):LS01:Z3:RATE3:ARRAY.PROC")
15692 }
15693 
15694 ##
15695 ## Read the ZONE RATE setting.
15696 ##
15697 record(subArray, "$(P):LS01:Z3:RATE3:ARRAY") {
15698  field(SCAN, "Passive")
15699  field(FTVL, "DOUBLE")
15700  field(INP, "$(P):LS01:Z3:ALL3.VAL MS")
15701  field(MALM, "8")
15702  field(NELM, "1")
15703  field(INDX, "7")
15704  field(PREC, "1")
15705  field(FLNK, "$(P):LS01:Z3:RATE3.PROC")
15706 }
15707 record(ai, "$(P):LS01:Z3:RATE3") {
15708  field(SCAN, "Passive")
15709  field(INP, "$(P):LS01:Z3:RATE3:ARRAY.VAL MS")
15710  field(PREC, "1")
15711  field(FLNK, "$(P):LS01:Z3:INITCALC3.PROC")
15712 }
15713 
15714 ##############################################################
15715 ##
15716 ## Populate the write records below with the current values.
15717 ## Only do this once at startup.
15718 ##
15719 ###############################################################
15720 
15721 record(calcout, "$(P):LS01:Z3:INITCALC3") {
15722  field(INPA, "0")
15723  field(CALC, "A")
15724  field(VAL, "0")
15725  field(DOPT, "Use OCAL")
15726  field(OOPT, "When Zero")
15727  field(OCAL, "1")
15728  field(OUT, "$(P):LS01:Z3:INITUB3.PROC")
15729 }
15730 
15731 record(dfanout, "$(P):LS01:Z3:INITUB3") {
15732  field(OMSL, "closed_loop")
15733  field(DOL, "$(P):LS01:Z3:UB3.VAL")
15734  field(OUTA, "$(P):LS01:Z3:UB_S3.VAL PP")
15735  field(FLNK, "$(P):LS01:Z3:INITP3.PROC")
15736 }
15737 record(dfanout, "$(P):LS01:Z3:INITP3") {
15738  field(OMSL, "closed_loop")
15739  field(DOL, "$(P):LS01:Z3:P3.VAL")
15740  field(OUTA, "$(P):LS01:Z3:P_S3.VAL PP")
15741  field(FLNK, "$(P):LS01:Z3:INITI3.PROC")
15742 }
15743 record(dfanout, "$(P):LS01:Z3:INITI3") {
15744  field(OMSL, "closed_loop")
15745  field(DOL, "$(P):LS01:Z3:I3.VAL")
15746  field(OUTA, "$(P):LS01:Z3:I_S3.VAL PP")
15747  field(FLNK, "$(P):LS01:Z3:INITD3.PROC")
15748 }
15749 record(dfanout, "$(P):LS01:Z3:INITD3") {
15750  field(OMSL, "closed_loop")
15751  field(DOL, "$(P):LS01:Z3:D3.VAL")
15752  field(OUTA, "$(P):LS01:Z3:D_S3.VAL PP")
15753  field(FLNK, "$(P):LS01:Z3:INITMOUT3.PROC")
15754 }
15755 record(dfanout, "$(P):LS01:Z3:INITMOUT3") {
15756  field(OMSL, "closed_loop")
15757  field(DOL, "$(P):LS01:Z3:MOUT3.VAL")
15758  field(OUTA, "$(P):LS01:Z3:MOUT_S3.VAL PP")
15759  field(FLNK, "$(P):LS01:Z3:INITRANGE3.PROC")
15760 }
15761 record(dfanout, "$(P):LS01:Z3:INITRANGE3") {
15762  field(OMSL, "closed_loop")
15763  field(DOL, "$(P):LS01:Z3:RANGE3.VAL")
15764  field(OUTA, "$(P):LS01:Z3:RANGE_S3.VAL PP")
15765  field(FLNK, "$(P):LS01:Z3:INITINPUT3.PROC")
15766 }
15767 record(dfanout, "$(P):LS01:Z3:INITINPUT3") {
15768  field(OMSL, "closed_loop")
15769  field(DOL, "$(P):LS01:Z3:INPUT3.VAL")
15770  field(OUTA, "$(P):LS01:Z3:INPUT_S3.VAL PP")
15771  field(FLNK, "$(P):LS01:Z3:INITRATE3.PROC")
15772 }
15773 record(dfanout, "$(P):LS01:Z3:INITRATE3") {
15774  field(OMSL, "closed_loop")
15775  field(DOL, "$(P):LS01:Z3:RATE3.VAL")
15776  field(OUTA, "$(P):LS01:Z3:RATE_S3.VAL PP")
15777  field(FLNK, "$(P):LS01:Z3:INITCOUNT3.PROC")
15778 }
15779 
15780 record(dfanout, "$(P):LS01:Z3:INITCOUNT3") {
15781  field(DOL, "1")
15782  field(OUTA, "$(P):LS01:Z3:INITCALC3.A")
15783 }
15784 
15785 
15786 
15787 #############################################
15788 # Write records. There is a calcout record to
15789 # do the actual write.
15790 #############################################
15791 
15792 ##
15793 ## Set the ZONE upper boundary setting.
15794 ##
15795 record(ao, "$(P):LS01:Z3:UB_S3") {
15796  field(SCAN, "Passive")
15797  field(PREC, "1")
15798  field(SDIS, "$(P):LS01:DISABLE")
15799 }
15800 
15801 ##
15802 ## Set the ZONE P setting.
15803 ##
15804 record(ao, "$(P):LS01:Z3:P_S3") {
15805  field(SCAN, "Passive")
15806  field(PREC, "1")
15807  field(SDIS, "$(P):LS01:DISABLE")
15808 }
15809 
15810 ##
15811 ## Set the ZONE I setting.
15812 ##
15813 record(ao, "$(P):LS01:Z3:I_S3") {
15814  field(SCAN, "Passive")
15815  field(PREC, "1")
15816  field(SDIS, "$(P):LS01:DISABLE")
15817 }
15818 
15819 ##
15820 ## Set the ZONE D setting.
15821 ##
15822 record(ao, "$(P):LS01:Z3:D_S3") {
15823  field(SCAN, "Passive")
15824  field(PREC, "1")
15825  field(SDIS, "$(P):LS01:DISABLE")
15826 }
15827 
15828 ##
15829 ## Set the ZONE MOUT setting.
15830 ##
15831 record(ao, "$(P):LS01:Z3:MOUT_S3") {
15832  field(SCAN, "Passive")
15833  field(PREC, "1")
15834  field(SDIS, "$(P):LS01:DISABLE")
15835 }
15836 
15837 ##
15838 ## Set the ZONE RANGE setting.
15839 ##
15840 record(mbbo, "$(P):LS01:Z3:RANGE_S3") {
15841  field(SCAN, "Passive")
15842  field(ZRST, "Off")
15843  field(ZRVL, "0")
15844  field(ONST, "Range1/Low")
15845  field(ONVL, "1")
15846  field(TWST, "Range2/Medium")
15847  field(TWVL, "2")
15848  field(THST, "Range3/High")
15849  field(THVL, "3")
15850  field(FRST, "Range4")
15851  field(FRVL, "4")
15852  field(FVST, "Range5")
15853  field(FVVL, "5")
15854  field(SDIS, "$(P):LS01:DISABLE")
15855 }
15856 
15857 ##
15858 ## Set the ZONE INPUT setting.
15859 ##
15860 record(mbbo, "$(P):LS01:Z3:INPUT_S3") {
15861  field(ZRST, "None")
15862  field(ZRVL, "0")
15863  field(ONST, "Input A")
15864  field(ONVL, "1")
15865  field(TWST, "Input B")
15866  field(TWVL, "2")
15867  field(THST, "Input C")
15868  field(THVL, "3")
15869  field(FRST, "Input D")
15870  field(FRVL, "4")
15871  field(FVST, "Input D2")
15872  field(FVVL, "5")
15873  field(SXST, "Input D3")
15874  field(SXVL, "6")
15875  field(SVST, "Input D4")
15876  field(SVVL, "7")
15877  field(EIST, "Input D5")
15878  field(EIVL, "8")
15879  field(SDIS, "$(P):LS01:DISABLE")
15880 }
15881 
15882 ##
15883 ## Set the ZONE RATE setting.
15884 ##
15885 record(ao, "$(P):LS01:Z3:RATE_S3") {
15886  field(SCAN, "Passive")
15887  field(PREC, "1")
15888  field(SDIS, "$(P):LS01:DISABLE")
15889 }
15890 
15891 ##
15892 ## Record to write the ZONE parameters.
15893 ##
15894 record(calcout, "$(P):LS01:Z3:SET3") {
15895  field(INPA, "$(P):LS01:Z3:UB_S3")
15896  field(INPB, "$(P):LS01:Z3:P_S3")
15897  field(INPC, "$(P):LS01:Z3:I_S3")
15898  field(INPD, "$(P):LS01:Z3:D_S3")
15899  field(INPE, "$(P):LS01:Z3:MOUT_S3")
15900  field(INPF, "$(P):LS01:Z3:RANGE_S3")
15901  field(INPG, "$(P):LS01:Z3:INPUT_S3")
15902  field(INPH, "$(P):LS01:Z3:RATE_S3")
15903  field(CALC, "0")
15904  field(DTYP, "stream")
15905  field(OUT, "@ls336.proto setZONE(3,3) L0 0")
15906  field(SDIS, "$(P):LS01:DISABLE")
15907  field(FLNK, "$(P):LS01:Z3:ALL3.PROC")
15908 }
15909 
15910 
15911 
15912 
15913 
15914 
15915 
15916 
15917 
15918 
15919 record(mbbi, "$(P):LS01:Z3:RANGE3") {
15920  field(ZRST, "Off")
15921  field(ONST, "On")
15922  field(TWST, "")
15923  field(THST, "")
15924  field(FRST, "")
15925  field(FVST, "")
15926 }
15927 
15928 record(mbbo, "$(P):LS01:Z3:RANGE_S3") {
15929  field(ZRST, "Off")
15930  field(ONST, "On")
15931  field(TWST, "")
15932  field(THST, "")
15933  field(FRST, "")
15934  field(FVST, "")
15935 }
15936 
15937 
15938 
15939 
15940 
15941 
15942 # This just includes the zone file and overrides the RANGE options
15943 # for the analog control channels.
15944 
15945 #######################################
15946 #
15947 # Template to support reading and setting
15948 # controller ZONE parameters. It reads the ZONE
15949 # parameters into an array, then uses subArrays to
15950 # extract each parameter.
15951 #
15952 # This template is used by the output template
15953 # and it needs the following macros:
15954 #
15955 # ZONE: zone number
15956 # OUT: output number
15957 #
15958 #######################################
15959 
15960 ##
15961 ## Read the ZONE setting into an array (8 values)
15962 ##
15963 record(waveform, "$(P):LS01:Z4:ALL3") {
15964  field(DTYP, "stream")
15965  field(SDIS, "$(P):LS01:DISABLE_POLL")
15966  field(INP, "@ls336.proto getZONE(3,4) L0 0")
15967  field(SCAN, "Passive")
15968  field(NELM, "8")
15969  field(FTVL, "DOUBLE")
15970  field(PREC, "1")
15971  field(FLNK, "$(P):LS01:Z4:UB3:ARRAY.PROC")
15972 }
15973 
15974 ##
15975 ## Read the ZONE upper boundary setting.
15976 ##
15977 record(subArray, "$(P):LS01:Z4:UB3:ARRAY") {
15978  field(SCAN, "Passive")
15979  field(FTVL, "DOUBLE")
15980  field(INP, "$(P):LS01:Z4:ALL3.VAL MS")
15981  field(MALM, "8")
15982  field(NELM, "1")
15983  field(INDX, "0")
15984  field(PREC, "1")
15985  field(FLNK, "$(P):LS01:Z4:UB3.PROC")
15986 }
15987 record(ai, "$(P):LS01:Z4:UB3") {
15988  field(SCAN, "Passive")
15989  field(INP, "$(P):LS01:Z4:UB3:ARRAY.VAL MS")
15990  field(PREC, "1")
15991  field(FLNK, "$(P):LS01:Z4:P3:ARRAY.PROC")
15992 }
15993 
15994 ##
15995 ## Read the ZONE P setting.
15996 ##
15997 record(subArray, "$(P):LS01:Z4:P3:ARRAY") {
15998  field(SCAN, "Passive")
15999  field(FTVL, "DOUBLE")
16000  field(INP, "$(P):LS01:Z4:ALL3.VAL MS")
16001  field(MALM, "8")
16002  field(NELM, "1")
16003  field(INDX, "1")
16004  field(PREC, "1")
16005  field(FLNK, "$(P):LS01:Z4:P3.PROC")
16006 }
16007 record(ai, "$(P):LS01:Z4:P3") {
16008  field(SCAN, "Passive")
16009  field(INP, "$(P):LS01:Z4:P3:ARRAY.VAL MS")
16010  field(PREC, "1")
16011  field(FLNK, "$(P):LS01:Z4:I3:ARRAY.PROC")
16012 }
16013 
16014 ##
16015 ## Read the ZONE I setting.
16016 ##
16017 record(subArray, "$(P):LS01:Z4:I3:ARRAY") {
16018  field(SCAN, "Passive")
16019  field(FTVL, "DOUBLE")
16020  field(INP, "$(P):LS01:Z4:ALL3.VAL MS")
16021  field(MALM, "8")
16022  field(NELM, "1")
16023  field(INDX, "2")
16024  field(PREC, "1")
16025  field(FLNK, "$(P):LS01:Z4:I3.PROC")
16026 }
16027 record(ai, "$(P):LS01:Z4:I3") {
16028  field(SCAN, "Passive")
16029  field(INP, "$(P):LS01:Z4:I3:ARRAY.VAL MS")
16030  field(PREC, "1")
16031  field(FLNK, "$(P):LS01:Z4:D3:ARRAY.PROC")
16032 }
16033 
16034 ##
16035 ## Read the ZONE D setting.
16036 ##
16037 record(subArray, "$(P):LS01:Z4:D3:ARRAY") {
16038  field(SCAN, "Passive")
16039  field(FTVL, "DOUBLE")
16040  field(INP, "$(P):LS01:Z4:ALL3.VAL MS")
16041  field(MALM, "8")
16042  field(NELM, "1")
16043  field(INDX, "3")
16044  field(PREC, "1")
16045  field(FLNK, "$(P):LS01:Z4:D3.PROC")
16046 }
16047 record(ai, "$(P):LS01:Z4:D3") {
16048  field(SCAN, "Passive")
16049  field(INP, "$(P):LS01:Z4:D3:ARRAY.VAL MS")
16050  field(PREC, "1")
16051  field(FLNK, "$(P):LS01:Z4:MOUT3:ARRAY.PROC")
16052 }
16053 
16054 ##
16055 ## Read the ZONE MOUT setting.
16056 ##
16057 record(subArray, "$(P):LS01:Z4:MOUT3:ARRAY") {
16058  field(SCAN, "Passive")
16059  field(FTVL, "DOUBLE")
16060  field(INP, "$(P):LS01:Z4:ALL3.VAL MS")
16061  field(MALM, "8")
16062  field(NELM, "1")
16063  field(INDX, "4")
16064  field(PREC, "1")
16065  field(FLNK, "$(P):LS01:Z4:MOUT3.PROC")
16066 }
16067 record(ai, "$(P):LS01:Z4:MOUT3") {
16068  field(SCAN, "Passive")
16069  field(INP, "$(P):LS01:Z4:MOUT3:ARRAY.VAL MS")
16070  field(PREC, "1")
16071  field(FLNK, "$(P):LS01:Z4:RANGE3:ARRAY.PROC")
16072 }
16073 
16074 ##
16075 ## Read the ZONE RANGE setting.
16076 ##
16077 record(subArray, "$(P):LS01:Z4:RANGE3:ARRAY") {
16078  field(SCAN, "Passive")
16079  field(FTVL, "DOUBLE")
16080  field(INP, "$(P):LS01:Z4:ALL3.VAL MS")
16081  field(MALM, "8")
16082  field(NELM, "1")
16083  field(INDX, "5")
16084  field(PREC, "1")
16085  field(FLNK, "$(P):LS01:Z4:RANGE3.PROC")
16086 }
16087 record(mbbi, "$(P):LS01:Z4:RANGE3") {
16088  field(INP, "$(P):LS01:Z4:RANGE3:ARRAY.VAL")
16089  field(SCAN, "Passive")
16090  field(ZRST, "Off")
16091  field(ZRVL, "0")
16092  field(ONST, "Range1/Low")
16093  field(ONVL, "1")
16094  field(TWST, "Range2/Medium")
16095  field(TWVL, "2")
16096  field(THST, "Range3/High")
16097  field(THVL, "3")
16098  field(FRST, "Range4")
16099  field(FRVL, "4")
16100  field(FVST, "Range5")
16101  field(FVVL, "5")
16102  field(FLNK, "$(P):LS01:Z4:INPUT3:ARRAY.PROC")
16103 }
16104 
16105 ##
16106 ## Read the ZONE INPUT setting.
16107 ##
16108 record(subArray, "$(P):LS01:Z4:INPUT3:ARRAY") {
16109  field(SCAN, "Passive")
16110  field(FTVL, "DOUBLE")
16111  field(INP, "$(P):LS01:Z4:ALL3.VAL MS")
16112  field(MALM, "8")
16113  field(NELM, "1")
16114  field(INDX, "6")
16115  field(PREC, "1")
16116  field(FLNK, "$(P):LS01:Z4:INPUT3.PROC")
16117 }
16118 record(mbbi, "$(P):LS01:Z4:INPUT3") {
16119  field(INP, "$(P):LS01:Z4:INPUT3:ARRAY.VAL")
16120  field(SCAN, "Passive")
16121  field(ZRST, "None")
16122  field(ZRVL, "0")
16123  field(ONST, "Input A")
16124  field(ONVL, "1")
16125  field(TWST, "Input B")
16126  field(TWVL, "2")
16127  field(THST, "Input C")
16128  field(THVL, "3")
16129  field(FRST, "Input D")
16130  field(FRVL, "4")
16131  field(FVST, "Input D2")
16132  field(FVVL, "5")
16133  field(SXST, "Input D3")
16134  field(SXVL, "6")
16135  field(SVST, "Input D4")
16136  field(SVVL, "7")
16137  field(EIST, "Input D5")
16138  field(EIVL, "8")
16139  field(FLNK, "$(P):LS01:Z4:RATE3:ARRAY.PROC")
16140 }
16141 
16142 ##
16143 ## Read the ZONE RATE setting.
16144 ##
16145 record(subArray, "$(P):LS01:Z4:RATE3:ARRAY") {
16146  field(SCAN, "Passive")
16147  field(FTVL, "DOUBLE")
16148  field(INP, "$(P):LS01:Z4:ALL3.VAL MS")
16149  field(MALM, "8")
16150  field(NELM, "1")
16151  field(INDX, "7")
16152  field(PREC, "1")
16153  field(FLNK, "$(P):LS01:Z4:RATE3.PROC")
16154 }
16155 record(ai, "$(P):LS01:Z4:RATE3") {
16156  field(SCAN, "Passive")
16157  field(INP, "$(P):LS01:Z4:RATE3:ARRAY.VAL MS")
16158  field(PREC, "1")
16159  field(FLNK, "$(P):LS01:Z4:INITCALC3.PROC")
16160 }
16161 
16162 ##############################################################
16163 ##
16164 ## Populate the write records below with the current values.
16165 ## Only do this once at startup.
16166 ##
16167 ###############################################################
16168 
16169 record(calcout, "$(P):LS01:Z4:INITCALC3") {
16170  field(INPA, "0")
16171  field(CALC, "A")
16172  field(VAL, "0")
16173  field(DOPT, "Use OCAL")
16174  field(OOPT, "When Zero")
16175  field(OCAL, "1")
16176  field(OUT, "$(P):LS01:Z4:INITUB3.PROC")
16177 }
16178 
16179 record(dfanout, "$(P):LS01:Z4:INITUB3") {
16180  field(OMSL, "closed_loop")
16181  field(DOL, "$(P):LS01:Z4:UB3.VAL")
16182  field(OUTA, "$(P):LS01:Z4:UB_S3.VAL PP")
16183  field(FLNK, "$(P):LS01:Z4:INITP3.PROC")
16184 }
16185 record(dfanout, "$(P):LS01:Z4:INITP3") {
16186  field(OMSL, "closed_loop")
16187  field(DOL, "$(P):LS01:Z4:P3.VAL")
16188  field(OUTA, "$(P):LS01:Z4:P_S3.VAL PP")
16189  field(FLNK, "$(P):LS01:Z4:INITI3.PROC")
16190 }
16191 record(dfanout, "$(P):LS01:Z4:INITI3") {
16192  field(OMSL, "closed_loop")
16193  field(DOL, "$(P):LS01:Z4:I3.VAL")
16194  field(OUTA, "$(P):LS01:Z4:I_S3.VAL PP")
16195  field(FLNK, "$(P):LS01:Z4:INITD3.PROC")
16196 }
16197 record(dfanout, "$(P):LS01:Z4:INITD3") {
16198  field(OMSL, "closed_loop")
16199  field(DOL, "$(P):LS01:Z4:D3.VAL")
16200  field(OUTA, "$(P):LS01:Z4:D_S3.VAL PP")
16201  field(FLNK, "$(P):LS01:Z4:INITMOUT3.PROC")
16202 }
16203 record(dfanout, "$(P):LS01:Z4:INITMOUT3") {
16204  field(OMSL, "closed_loop")
16205  field(DOL, "$(P):LS01:Z4:MOUT3.VAL")
16206  field(OUTA, "$(P):LS01:Z4:MOUT_S3.VAL PP")
16207  field(FLNK, "$(P):LS01:Z4:INITRANGE3.PROC")
16208 }
16209 record(dfanout, "$(P):LS01:Z4:INITRANGE3") {
16210  field(OMSL, "closed_loop")
16211  field(DOL, "$(P):LS01:Z4:RANGE3.VAL")
16212  field(OUTA, "$(P):LS01:Z4:RANGE_S3.VAL PP")
16213  field(FLNK, "$(P):LS01:Z4:INITINPUT3.PROC")
16214 }
16215 record(dfanout, "$(P):LS01:Z4:INITINPUT3") {
16216  field(OMSL, "closed_loop")
16217  field(DOL, "$(P):LS01:Z4:INPUT3.VAL")
16218  field(OUTA, "$(P):LS01:Z4:INPUT_S3.VAL PP")
16219  field(FLNK, "$(P):LS01:Z4:INITRATE3.PROC")
16220 }
16221 record(dfanout, "$(P):LS01:Z4:INITRATE3") {
16222  field(OMSL, "closed_loop")
16223  field(DOL, "$(P):LS01:Z4:RATE3.VAL")
16224  field(OUTA, "$(P):LS01:Z4:RATE_S3.VAL PP")
16225  field(FLNK, "$(P):LS01:Z4:INITCOUNT3.PROC")
16226 }
16227 
16228 record(dfanout, "$(P):LS01:Z4:INITCOUNT3") {
16229  field(DOL, "1")
16230  field(OUTA, "$(P):LS01:Z4:INITCALC3.A")
16231 }
16232 
16233 
16234 
16235 #############################################
16236 # Write records. There is a calcout record to
16237 # do the actual write.
16238 #############################################
16239 
16240 ##
16241 ## Set the ZONE upper boundary setting.
16242 ##
16243 record(ao, "$(P):LS01:Z4:UB_S3") {
16244  field(SCAN, "Passive")
16245  field(PREC, "1")
16246  field(SDIS, "$(P):LS01:DISABLE")
16247 }
16248 
16249 ##
16250 ## Set the ZONE P setting.
16251 ##
16252 record(ao, "$(P):LS01:Z4:P_S3") {
16253  field(SCAN, "Passive")
16254  field(PREC, "1")
16255  field(SDIS, "$(P):LS01:DISABLE")
16256 }
16257 
16258 ##
16259 ## Set the ZONE I setting.
16260 ##
16261 record(ao, "$(P):LS01:Z4:I_S3") {
16262  field(SCAN, "Passive")
16263  field(PREC, "1")
16264  field(SDIS, "$(P):LS01:DISABLE")
16265 }
16266 
16267 ##
16268 ## Set the ZONE D setting.
16269 ##
16270 record(ao, "$(P):LS01:Z4:D_S3") {
16271  field(SCAN, "Passive")
16272  field(PREC, "1")
16273  field(SDIS, "$(P):LS01:DISABLE")
16274 }
16275 
16276 ##
16277 ## Set the ZONE MOUT setting.
16278 ##
16279 record(ao, "$(P):LS01:Z4:MOUT_S3") {
16280  field(SCAN, "Passive")
16281  field(PREC, "1")
16282  field(SDIS, "$(P):LS01:DISABLE")
16283 }
16284 
16285 ##
16286 ## Set the ZONE RANGE setting.
16287 ##
16288 record(mbbo, "$(P):LS01:Z4:RANGE_S3") {
16289  field(SCAN, "Passive")
16290  field(ZRST, "Off")
16291  field(ZRVL, "0")
16292  field(ONST, "Range1/Low")
16293  field(ONVL, "1")
16294  field(TWST, "Range2/Medium")
16295  field(TWVL, "2")
16296  field(THST, "Range3/High")
16297  field(THVL, "3")
16298  field(FRST, "Range4")
16299  field(FRVL, "4")
16300  field(FVST, "Range5")
16301  field(FVVL, "5")
16302  field(SDIS, "$(P):LS01:DISABLE")
16303 }
16304 
16305 ##
16306 ## Set the ZONE INPUT setting.
16307 ##
16308 record(mbbo, "$(P):LS01:Z4:INPUT_S3") {
16309  field(ZRST, "None")
16310  field(ZRVL, "0")
16311  field(ONST, "Input A")
16312  field(ONVL, "1")
16313  field(TWST, "Input B")
16314  field(TWVL, "2")
16315  field(THST, "Input C")
16316  field(THVL, "3")
16317  field(FRST, "Input D")
16318  field(FRVL, "4")
16319  field(FVST, "Input D2")
16320  field(FVVL, "5")
16321  field(SXST, "Input D3")
16322  field(SXVL, "6")
16323  field(SVST, "Input D4")
16324  field(SVVL, "7")
16325  field(EIST, "Input D5")
16326  field(EIVL, "8")
16327  field(SDIS, "$(P):LS01:DISABLE")
16328 }
16329 
16330 ##
16331 ## Set the ZONE RATE setting.
16332 ##
16333 record(ao, "$(P):LS01:Z4:RATE_S3") {
16334  field(SCAN, "Passive")
16335  field(PREC, "1")
16336  field(SDIS, "$(P):LS01:DISABLE")
16337 }
16338 
16339 ##
16340 ## Record to write the ZONE parameters.
16341 ##
16342 record(calcout, "$(P):LS01:Z4:SET3") {
16343  field(INPA, "$(P):LS01:Z4:UB_S3")
16344  field(INPB, "$(P):LS01:Z4:P_S3")
16345  field(INPC, "$(P):LS01:Z4:I_S3")
16346  field(INPD, "$(P):LS01:Z4:D_S3")
16347  field(INPE, "$(P):LS01:Z4:MOUT_S3")
16348  field(INPF, "$(P):LS01:Z4:RANGE_S3")
16349  field(INPG, "$(P):LS01:Z4:INPUT_S3")
16350  field(INPH, "$(P):LS01:Z4:RATE_S3")
16351  field(CALC, "0")
16352  field(DTYP, "stream")
16353  field(OUT, "@ls336.proto setZONE(3,4) L0 0")
16354  field(SDIS, "$(P):LS01:DISABLE")
16355  field(FLNK, "$(P):LS01:Z4:ALL3.PROC")
16356 }
16357 
16358 
16359 
16360 
16361 
16362 
16363 
16364 
16365 
16366 
16367 record(mbbi, "$(P):LS01:Z4:RANGE3") {
16368  field(ZRST, "Off")
16369  field(ONST, "On")
16370  field(TWST, "")
16371  field(THST, "")
16372  field(FRST, "")
16373  field(FVST, "")
16374 }
16375 
16376 record(mbbo, "$(P):LS01:Z4:RANGE_S3") {
16377  field(ZRST, "Off")
16378  field(ONST, "On")
16379  field(TWST, "")
16380  field(THST, "")
16381  field(FRST, "")
16382  field(FVST, "")
16383 }
16384 
16385 
16386 
16387 
16388 
16389 
16390 # This just includes the zone file and overrides the RANGE options
16391 # for the analog control channels.
16392 
16393 #######################################
16394 #
16395 # Template to support reading and setting
16396 # controller ZONE parameters. It reads the ZONE
16397 # parameters into an array, then uses subArrays to
16398 # extract each parameter.
16399 #
16400 # This template is used by the output template
16401 # and it needs the following macros:
16402 #
16403 # ZONE: zone number
16404 # OUT: output number
16405 #
16406 #######################################
16407 
16408 ##
16409 ## Read the ZONE setting into an array (8 values)
16410 ##
16411 record(waveform, "$(P):LS01:Z5:ALL3") {
16412  field(DTYP, "stream")
16413  field(SDIS, "$(P):LS01:DISABLE_POLL")
16414  field(INP, "@ls336.proto getZONE(3,5) L0 0")
16415  field(SCAN, "Passive")
16416  field(NELM, "8")
16417  field(FTVL, "DOUBLE")
16418  field(PREC, "1")
16419  field(FLNK, "$(P):LS01:Z5:UB3:ARRAY.PROC")
16420 }
16421 
16422 ##
16423 ## Read the ZONE upper boundary setting.
16424 ##
16425 record(subArray, "$(P):LS01:Z5:UB3:ARRAY") {
16426  field(SCAN, "Passive")
16427  field(FTVL, "DOUBLE")
16428  field(INP, "$(P):LS01:Z5:ALL3.VAL MS")
16429  field(MALM, "8")
16430  field(NELM, "1")
16431  field(INDX, "0")
16432  field(PREC, "1")
16433  field(FLNK, "$(P):LS01:Z5:UB3.PROC")
16434 }
16435 record(ai, "$(P):LS01:Z5:UB3") {
16436  field(SCAN, "Passive")
16437  field(INP, "$(P):LS01:Z5:UB3:ARRAY.VAL MS")
16438  field(PREC, "1")
16439  field(FLNK, "$(P):LS01:Z5:P3:ARRAY.PROC")
16440 }
16441 
16442 ##
16443 ## Read the ZONE P setting.
16444 ##
16445 record(subArray, "$(P):LS01:Z5:P3:ARRAY") {
16446  field(SCAN, "Passive")
16447  field(FTVL, "DOUBLE")
16448  field(INP, "$(P):LS01:Z5:ALL3.VAL MS")
16449  field(MALM, "8")
16450  field(NELM, "1")
16451  field(INDX, "1")
16452  field(PREC, "1")
16453  field(FLNK, "$(P):LS01:Z5:P3.PROC")
16454 }
16455 record(ai, "$(P):LS01:Z5:P3") {
16456  field(SCAN, "Passive")
16457  field(INP, "$(P):LS01:Z5:P3:ARRAY.VAL MS")
16458  field(PREC, "1")
16459  field(FLNK, "$(P):LS01:Z5:I3:ARRAY.PROC")
16460 }
16461 
16462 ##
16463 ## Read the ZONE I setting.
16464 ##
16465 record(subArray, "$(P):LS01:Z5:I3:ARRAY") {
16466  field(SCAN, "Passive")
16467  field(FTVL, "DOUBLE")
16468  field(INP, "$(P):LS01:Z5:ALL3.VAL MS")
16469  field(MALM, "8")
16470  field(NELM, "1")
16471  field(INDX, "2")
16472  field(PREC, "1")
16473  field(FLNK, "$(P):LS01:Z5:I3.PROC")
16474 }
16475 record(ai, "$(P):LS01:Z5:I3") {
16476  field(SCAN, "Passive")
16477  field(INP, "$(P):LS01:Z5:I3:ARRAY.VAL MS")
16478  field(PREC, "1")
16479  field(FLNK, "$(P):LS01:Z5:D3:ARRAY.PROC")
16480 }
16481 
16482 ##
16483 ## Read the ZONE D setting.
16484 ##
16485 record(subArray, "$(P):LS01:Z5:D3:ARRAY") {
16486  field(SCAN, "Passive")
16487  field(FTVL, "DOUBLE")
16488  field(INP, "$(P):LS01:Z5:ALL3.VAL MS")
16489  field(MALM, "8")
16490  field(NELM, "1")
16491  field(INDX, "3")
16492  field(PREC, "1")
16493  field(FLNK, "$(P):LS01:Z5:D3.PROC")
16494 }
16495 record(ai, "$(P):LS01:Z5:D3") {
16496  field(SCAN, "Passive")
16497  field(INP, "$(P):LS01:Z5:D3:ARRAY.VAL MS")
16498  field(PREC, "1")
16499  field(FLNK, "$(P):LS01:Z5:MOUT3:ARRAY.PROC")
16500 }
16501 
16502 ##
16503 ## Read the ZONE MOUT setting.
16504 ##
16505 record(subArray, "$(P):LS01:Z5:MOUT3:ARRAY") {
16506  field(SCAN, "Passive")
16507  field(FTVL, "DOUBLE")
16508  field(INP, "$(P):LS01:Z5:ALL3.VAL MS")
16509  field(MALM, "8")
16510  field(NELM, "1")
16511  field(INDX, "4")
16512  field(PREC, "1")
16513  field(FLNK, "$(P):LS01:Z5:MOUT3.PROC")
16514 }
16515 record(ai, "$(P):LS01:Z5:MOUT3") {
16516  field(SCAN, "Passive")
16517  field(INP, "$(P):LS01:Z5:MOUT3:ARRAY.VAL MS")
16518  field(PREC, "1")
16519  field(FLNK, "$(P):LS01:Z5:RANGE3:ARRAY.PROC")
16520 }
16521 
16522 ##
16523 ## Read the ZONE RANGE setting.
16524 ##
16525 record(subArray, "$(P):LS01:Z5:RANGE3:ARRAY") {
16526  field(SCAN, "Passive")
16527  field(FTVL, "DOUBLE")
16528  field(INP, "$(P):LS01:Z5:ALL3.VAL MS")
16529  field(MALM, "8")
16530  field(NELM, "1")
16531  field(INDX, "5")
16532  field(PREC, "1")
16533  field(FLNK, "$(P):LS01:Z5:RANGE3.PROC")
16534 }
16535 record(mbbi, "$(P):LS01:Z5:RANGE3") {
16536  field(INP, "$(P):LS01:Z5:RANGE3:ARRAY.VAL")
16537  field(SCAN, "Passive")
16538  field(ZRST, "Off")
16539  field(ZRVL, "0")
16540  field(ONST, "Range1/Low")
16541  field(ONVL, "1")
16542  field(TWST, "Range2/Medium")
16543  field(TWVL, "2")
16544  field(THST, "Range3/High")
16545  field(THVL, "3")
16546  field(FRST, "Range4")
16547  field(FRVL, "4")
16548  field(FVST, "Range5")
16549  field(FVVL, "5")
16550  field(FLNK, "$(P):LS01:Z5:INPUT3:ARRAY.PROC")
16551 }
16552 
16553 ##
16554 ## Read the ZONE INPUT setting.
16555 ##
16556 record(subArray, "$(P):LS01:Z5:INPUT3:ARRAY") {
16557  field(SCAN, "Passive")
16558  field(FTVL, "DOUBLE")
16559  field(INP, "$(P):LS01:Z5:ALL3.VAL MS")
16560  field(MALM, "8")
16561  field(NELM, "1")
16562  field(INDX, "6")
16563  field(PREC, "1")
16564  field(FLNK, "$(P):LS01:Z5:INPUT3.PROC")
16565 }
16566 record(mbbi, "$(P):LS01:Z5:INPUT3") {
16567  field(INP, "$(P):LS01:Z5:INPUT3:ARRAY.VAL")
16568  field(SCAN, "Passive")
16569  field(ZRST, "None")
16570  field(ZRVL, "0")
16571  field(ONST, "Input A")
16572  field(ONVL, "1")
16573  field(TWST, "Input B")
16574  field(TWVL, "2")
16575  field(THST, "Input C")
16576  field(THVL, "3")
16577  field(FRST, "Input D")
16578  field(FRVL, "4")
16579  field(FVST, "Input D2")
16580  field(FVVL, "5")
16581  field(SXST, "Input D3")
16582  field(SXVL, "6")
16583  field(SVST, "Input D4")
16584  field(SVVL, "7")
16585  field(EIST, "Input D5")
16586  field(EIVL, "8")
16587  field(FLNK, "$(P):LS01:Z5:RATE3:ARRAY.PROC")
16588 }
16589 
16590 ##
16591 ## Read the ZONE RATE setting.
16592 ##
16593 record(subArray, "$(P):LS01:Z5:RATE3:ARRAY") {
16594  field(SCAN, "Passive")
16595  field(FTVL, "DOUBLE")
16596  field(INP, "$(P):LS01:Z5:ALL3.VAL MS")
16597  field(MALM, "8")
16598  field(NELM, "1")
16599  field(INDX, "7")
16600  field(PREC, "1")
16601  field(FLNK, "$(P):LS01:Z5:RATE3.PROC")
16602 }
16603 record(ai, "$(P):LS01:Z5:RATE3") {
16604  field(SCAN, "Passive")
16605  field(INP, "$(P):LS01:Z5:RATE3:ARRAY.VAL MS")
16606  field(PREC, "1")
16607  field(FLNK, "$(P):LS01:Z5:INITCALC3.PROC")
16608 }
16609 
16610 ##############################################################
16611 ##
16612 ## Populate the write records below with the current values.
16613 ## Only do this once at startup.
16614 ##
16615 ###############################################################
16616 
16617 record(calcout, "$(P):LS01:Z5:INITCALC3") {
16618  field(INPA, "0")
16619  field(CALC, "A")
16620  field(VAL, "0")
16621  field(DOPT, "Use OCAL")
16622  field(OOPT, "When Zero")
16623  field(OCAL, "1")
16624  field(OUT, "$(P):LS01:Z5:INITUB3.PROC")
16625 }
16626 
16627 record(dfanout, "$(P):LS01:Z5:INITUB3") {
16628  field(OMSL, "closed_loop")
16629  field(DOL, "$(P):LS01:Z5:UB3.VAL")
16630  field(OUTA, "$(P):LS01:Z5:UB_S3.VAL PP")
16631  field(FLNK, "$(P):LS01:Z5:INITP3.PROC")
16632 }
16633 record(dfanout, "$(P):LS01:Z5:INITP3") {
16634  field(OMSL, "closed_loop")
16635  field(DOL, "$(P):LS01:Z5:P3.VAL")
16636  field(OUTA, "$(P):LS01:Z5:P_S3.VAL PP")
16637  field(FLNK, "$(P):LS01:Z5:INITI3.PROC")
16638 }
16639 record(dfanout, "$(P):LS01:Z5:INITI3") {
16640  field(OMSL, "closed_loop")
16641  field(DOL, "$(P):LS01:Z5:I3.VAL")
16642  field(OUTA, "$(P):LS01:Z5:I_S3.VAL PP")
16643  field(FLNK, "$(P):LS01:Z5:INITD3.PROC")
16644 }
16645 record(dfanout, "$(P):LS01:Z5:INITD3") {
16646  field(OMSL, "closed_loop")
16647  field(DOL, "$(P):LS01:Z5:D3.VAL")
16648  field(OUTA, "$(P):LS01:Z5:D_S3.VAL PP")
16649  field(FLNK, "$(P):LS01:Z5:INITMOUT3.PROC")
16650 }
16651 record(dfanout, "$(P):LS01:Z5:INITMOUT3") {
16652  field(OMSL, "closed_loop")
16653  field(DOL, "$(P):LS01:Z5:MOUT3.VAL")
16654  field(OUTA, "$(P):LS01:Z5:MOUT_S3.VAL PP")
16655  field(FLNK, "$(P):LS01:Z5:INITRANGE3.PROC")
16656 }
16657 record(dfanout, "$(P):LS01:Z5:INITRANGE3") {
16658  field(OMSL, "closed_loop")
16659  field(DOL, "$(P):LS01:Z5:RANGE3.VAL")
16660  field(OUTA, "$(P):LS01:Z5:RANGE_S3.VAL PP")
16661  field(FLNK, "$(P):LS01:Z5:INITINPUT3.PROC")
16662 }
16663 record(dfanout, "$(P):LS01:Z5:INITINPUT3") {
16664  field(OMSL, "closed_loop")
16665  field(DOL, "$(P):LS01:Z5:INPUT3.VAL")
16666  field(OUTA, "$(P):LS01:Z5:INPUT_S3.VAL PP")
16667  field(FLNK, "$(P):LS01:Z5:INITRATE3.PROC")
16668 }
16669 record(dfanout, "$(P):LS01:Z5:INITRATE3") {
16670  field(OMSL, "closed_loop")
16671  field(DOL, "$(P):LS01:Z5:RATE3.VAL")
16672  field(OUTA, "$(P):LS01:Z5:RATE_S3.VAL PP")
16673  field(FLNK, "$(P):LS01:Z5:INITCOUNT3.PROC")
16674 }
16675 
16676 record(dfanout, "$(P):LS01:Z5:INITCOUNT3") {
16677  field(DOL, "1")
16678  field(OUTA, "$(P):LS01:Z5:INITCALC3.A")
16679 }
16680 
16681 
16682 
16683 #############################################
16684 # Write records. There is a calcout record to
16685 # do the actual write.
16686 #############################################
16687 
16688 ##
16689 ## Set the ZONE upper boundary setting.
16690 ##
16691 record(ao, "$(P):LS01:Z5:UB_S3") {
16692  field(SCAN, "Passive")
16693  field(PREC, "1")
16694  field(SDIS, "$(P):LS01:DISABLE")
16695 }
16696 
16697 ##
16698 ## Set the ZONE P setting.
16699 ##
16700 record(ao, "$(P):LS01:Z5:P_S3") {
16701  field(SCAN, "Passive")
16702  field(PREC, "1")
16703  field(SDIS, "$(P):LS01:DISABLE")
16704 }
16705 
16706 ##
16707 ## Set the ZONE I setting.
16708 ##
16709 record(ao, "$(P):LS01:Z5:I_S3") {
16710  field(SCAN, "Passive")
16711  field(PREC, "1")
16712  field(SDIS, "$(P):LS01:DISABLE")
16713 }
16714 
16715 ##
16716 ## Set the ZONE D setting.
16717 ##
16718 record(ao, "$(P):LS01:Z5:D_S3") {
16719  field(SCAN, "Passive")
16720  field(PREC, "1")
16721  field(SDIS, "$(P):LS01:DISABLE")
16722 }
16723 
16724 ##
16725 ## Set the ZONE MOUT setting.
16726 ##
16727 record(ao, "$(P):LS01:Z5:MOUT_S3") {
16728  field(SCAN, "Passive")
16729  field(PREC, "1")
16730  field(SDIS, "$(P):LS01:DISABLE")
16731 }
16732 
16733 ##
16734 ## Set the ZONE RANGE setting.
16735 ##
16736 record(mbbo, "$(P):LS01:Z5:RANGE_S3") {
16737  field(SCAN, "Passive")
16738  field(ZRST, "Off")
16739  field(ZRVL, "0")
16740  field(ONST, "Range1/Low")
16741  field(ONVL, "1")
16742  field(TWST, "Range2/Medium")
16743  field(TWVL, "2")
16744  field(THST, "Range3/High")
16745  field(THVL, "3")
16746  field(FRST, "Range4")
16747  field(FRVL, "4")
16748  field(FVST, "Range5")
16749  field(FVVL, "5")
16750  field(SDIS, "$(P):LS01:DISABLE")
16751 }
16752 
16753 ##
16754 ## Set the ZONE INPUT setting.
16755 ##
16756 record(mbbo, "$(P):LS01:Z5:INPUT_S3") {
16757  field(ZRST, "None")
16758  field(ZRVL, "0")
16759  field(ONST, "Input A")
16760  field(ONVL, "1")
16761  field(TWST, "Input B")
16762  field(TWVL, "2")
16763  field(THST, "Input C")
16764  field(THVL, "3")
16765  field(FRST, "Input D")
16766  field(FRVL, "4")
16767  field(FVST, "Input D2")
16768  field(FVVL, "5")
16769  field(SXST, "Input D3")
16770  field(SXVL, "6")
16771  field(SVST, "Input D4")
16772  field(SVVL, "7")
16773  field(EIST, "Input D5")
16774  field(EIVL, "8")
16775  field(SDIS, "$(P):LS01:DISABLE")
16776 }
16777 
16778 ##
16779 ## Set the ZONE RATE setting.
16780 ##
16781 record(ao, "$(P):LS01:Z5:RATE_S3") {
16782  field(SCAN, "Passive")
16783  field(PREC, "1")
16784  field(SDIS, "$(P):LS01:DISABLE")
16785 }
16786 
16787 ##
16788 ## Record to write the ZONE parameters.
16789 ##
16790 record(calcout, "$(P):LS01:Z5:SET3") {
16791  field(INPA, "$(P):LS01:Z5:UB_S3")
16792  field(INPB, "$(P):LS01:Z5:P_S3")
16793  field(INPC, "$(P):LS01:Z5:I_S3")
16794  field(INPD, "$(P):LS01:Z5:D_S3")
16795  field(INPE, "$(P):LS01:Z5:MOUT_S3")
16796  field(INPF, "$(P):LS01:Z5:RANGE_S3")
16797  field(INPG, "$(P):LS01:Z5:INPUT_S3")
16798  field(INPH, "$(P):LS01:Z5:RATE_S3")
16799  field(CALC, "0")
16800  field(DTYP, "stream")
16801  field(OUT, "@ls336.proto setZONE(3,5) L0 0")
16802  field(SDIS, "$(P):LS01:DISABLE")
16803  field(FLNK, "$(P):LS01:Z5:ALL3.PROC")
16804 }
16805 
16806 
16807 
16808 
16809 
16810 
16811 
16812 
16813 
16814 
16815 record(mbbi, "$(P):LS01:Z5:RANGE3") {
16816  field(ZRST, "Off")
16817  field(ONST, "On")
16818  field(TWST, "")
16819  field(THST, "")
16820  field(FRST, "")
16821  field(FVST, "")
16822 }
16823 
16824 record(mbbo, "$(P):LS01:Z5:RANGE_S3") {
16825  field(ZRST, "Off")
16826  field(ONST, "On")
16827  field(TWST, "")
16828  field(THST, "")
16829  field(FRST, "")
16830  field(FVST, "")
16831 }
16832 
16833 
16834 
16835 
16836 
16837 
16838 # This just includes the zone file and overrides the RANGE options
16839 # for the analog control channels.
16840 
16841 #######################################
16842 #
16843 # Template to support reading and setting
16844 # controller ZONE parameters. It reads the ZONE
16845 # parameters into an array, then uses subArrays to
16846 # extract each parameter.
16847 #
16848 # This template is used by the output template
16849 # and it needs the following macros:
16850 #
16851 # ZONE: zone number
16852 # OUT: output number
16853 #
16854 #######################################
16855 
16856 ##
16857 ## Read the ZONE setting into an array (8 values)
16858 ##
16859 record(waveform, "$(P):LS01:Z6:ALL3") {
16860  field(DTYP, "stream")
16861  field(SDIS, "$(P):LS01:DISABLE_POLL")
16862  field(INP, "@ls336.proto getZONE(3,6) L0 0")
16863  field(SCAN, "Passive")
16864  field(NELM, "8")
16865  field(FTVL, "DOUBLE")
16866  field(PREC, "1")
16867  field(FLNK, "$(P):LS01:Z6:UB3:ARRAY.PROC")
16868 }
16869 
16870 ##
16871 ## Read the ZONE upper boundary setting.
16872 ##
16873 record(subArray, "$(P):LS01:Z6:UB3:ARRAY") {
16874  field(SCAN, "Passive")
16875  field(FTVL, "DOUBLE")
16876  field(INP, "$(P):LS01:Z6:ALL3.VAL MS")
16877  field(MALM, "8")
16878  field(NELM, "1")
16879  field(INDX, "0")
16880  field(PREC, "1")
16881  field(FLNK, "$(P):LS01:Z6:UB3.PROC")
16882 }
16883 record(ai, "$(P):LS01:Z6:UB3") {
16884  field(SCAN, "Passive")
16885  field(INP, "$(P):LS01:Z6:UB3:ARRAY.VAL MS")
16886  field(PREC, "1")
16887  field(FLNK, "$(P):LS01:Z6:P3:ARRAY.PROC")
16888 }
16889 
16890 ##
16891 ## Read the ZONE P setting.
16892 ##
16893 record(subArray, "$(P):LS01:Z6:P3:ARRAY") {
16894  field(SCAN, "Passive")
16895  field(FTVL, "DOUBLE")
16896  field(INP, "$(P):LS01:Z6:ALL3.VAL MS")
16897  field(MALM, "8")
16898  field(NELM, "1")
16899  field(INDX, "1")
16900  field(PREC, "1")
16901  field(FLNK, "$(P):LS01:Z6:P3.PROC")
16902 }
16903 record(ai, "$(P):LS01:Z6:P3") {
16904  field(SCAN, "Passive")
16905  field(INP, "$(P):LS01:Z6:P3:ARRAY.VAL MS")
16906  field(PREC, "1")
16907  field(FLNK, "$(P):LS01:Z6:I3:ARRAY.PROC")
16908 }
16909 
16910 ##
16911 ## Read the ZONE I setting.
16912 ##
16913 record(subArray, "$(P):LS01:Z6:I3:ARRAY") {
16914  field(SCAN, "Passive")
16915  field(FTVL, "DOUBLE")
16916  field(INP, "$(P):LS01:Z6:ALL3.VAL MS")
16917  field(MALM, "8")
16918  field(NELM, "1")
16919  field(INDX, "2")
16920  field(PREC, "1")
16921  field(FLNK, "$(P):LS01:Z6:I3.PROC")
16922 }
16923 record(ai, "$(P):LS01:Z6:I3") {
16924  field(SCAN, "Passive")
16925  field(INP, "$(P):LS01:Z6:I3:ARRAY.VAL MS")
16926  field(PREC, "1")
16927  field(FLNK, "$(P):LS01:Z6:D3:ARRAY.PROC")
16928 }
16929 
16930 ##
16931 ## Read the ZONE D setting.
16932 ##
16933 record(subArray, "$(P):LS01:Z6:D3:ARRAY") {
16934  field(SCAN, "Passive")
16935  field(FTVL, "DOUBLE")
16936  field(INP, "$(P):LS01:Z6:ALL3.VAL MS")
16937  field(MALM, "8")
16938  field(NELM, "1")
16939  field(INDX, "3")
16940  field(PREC, "1")
16941  field(FLNK, "$(P):LS01:Z6:D3.PROC")
16942 }
16943 record(ai, "$(P):LS01:Z6:D3") {
16944  field(SCAN, "Passive")
16945  field(INP, "$(P):LS01:Z6:D3:ARRAY.VAL MS")
16946  field(PREC, "1")
16947  field(FLNK, "$(P):LS01:Z6:MOUT3:ARRAY.PROC")
16948 }
16949 
16950 ##
16951 ## Read the ZONE MOUT setting.
16952 ##
16953 record(subArray, "$(P):LS01:Z6:MOUT3:ARRAY") {
16954  field(SCAN, "Passive")
16955  field(FTVL, "DOUBLE")
16956  field(INP, "$(P):LS01:Z6:ALL3.VAL MS")
16957  field(MALM, "8")
16958  field(NELM, "1")
16959  field(INDX, "4")
16960  field(PREC, "1")
16961  field(FLNK, "$(P):LS01:Z6:MOUT3.PROC")
16962 }
16963 record(ai, "$(P):LS01:Z6:MOUT3") {
16964  field(SCAN, "Passive")
16965  field(INP, "$(P):LS01:Z6:MOUT3:ARRAY.VAL MS")
16966  field(PREC, "1")
16967  field(FLNK, "$(P):LS01:Z6:RANGE3:ARRAY.PROC")
16968 }
16969 
16970 ##
16971 ## Read the ZONE RANGE setting.
16972 ##
16973 record(subArray, "$(P):LS01:Z6:RANGE3:ARRAY") {
16974  field(SCAN, "Passive")
16975  field(FTVL, "DOUBLE")
16976  field(INP, "$(P):LS01:Z6:ALL3.VAL MS")
16977  field(MALM, "8")
16978  field(NELM, "1")
16979  field(INDX, "5")
16980  field(PREC, "1")
16981  field(FLNK, "$(P):LS01:Z6:RANGE3.PROC")
16982 }
16983 record(mbbi, "$(P):LS01:Z6:RANGE3") {
16984  field(INP, "$(P):LS01:Z6:RANGE3:ARRAY.VAL")
16985  field(SCAN, "Passive")
16986  field(ZRST, "Off")
16987  field(ZRVL, "0")
16988  field(ONST, "Range1/Low")
16989  field(ONVL, "1")
16990  field(TWST, "Range2/Medium")
16991  field(TWVL, "2")
16992  field(THST, "Range3/High")
16993  field(THVL, "3")
16994  field(FRST, "Range4")
16995  field(FRVL, "4")
16996  field(FVST, "Range5")
16997  field(FVVL, "5")
16998  field(FLNK, "$(P):LS01:Z6:INPUT3:ARRAY.PROC")
16999 }
17000 
17001 ##
17002 ## Read the ZONE INPUT setting.
17003 ##
17004 record(subArray, "$(P):LS01:Z6:INPUT3:ARRAY") {
17005  field(SCAN, "Passive")
17006  field(FTVL, "DOUBLE")
17007  field(INP, "$(P):LS01:Z6:ALL3.VAL MS")
17008  field(MALM, "8")
17009  field(NELM, "1")
17010  field(INDX, "6")
17011  field(PREC, "1")
17012  field(FLNK, "$(P):LS01:Z6:INPUT3.PROC")
17013 }
17014 record(mbbi, "$(P):LS01:Z6:INPUT3") {
17015  field(INP, "$(P):LS01:Z6:INPUT3:ARRAY.VAL")
17016  field(SCAN, "Passive")
17017  field(ZRST, "None")
17018  field(ZRVL, "0")
17019  field(ONST, "Input A")
17020  field(ONVL, "1")
17021  field(TWST, "Input B")
17022  field(TWVL, "2")
17023  field(THST, "Input C")
17024  field(THVL, "3")
17025  field(FRST, "Input D")
17026  field(FRVL, "4")
17027  field(FVST, "Input D2")
17028  field(FVVL, "5")
17029  field(SXST, "Input D3")
17030  field(SXVL, "6")
17031  field(SVST, "Input D4")
17032  field(SVVL, "7")
17033  field(EIST, "Input D5")
17034  field(EIVL, "8")
17035  field(FLNK, "$(P):LS01:Z6:RATE3:ARRAY.PROC")
17036 }
17037 
17038 ##
17039 ## Read the ZONE RATE setting.
17040 ##
17041 record(subArray, "$(P):LS01:Z6:RATE3:ARRAY") {
17042  field(SCAN, "Passive")
17043  field(FTVL, "DOUBLE")
17044  field(INP, "$(P):LS01:Z6:ALL3.VAL MS")
17045  field(MALM, "8")
17046  field(NELM, "1")
17047  field(INDX, "7")
17048  field(PREC, "1")
17049  field(FLNK, "$(P):LS01:Z6:RATE3.PROC")
17050 }
17051 record(ai, "$(P):LS01:Z6:RATE3") {
17052  field(SCAN, "Passive")
17053  field(INP, "$(P):LS01:Z6:RATE3:ARRAY.VAL MS")
17054  field(PREC, "1")
17055  field(FLNK, "$(P):LS01:Z6:INITCALC3.PROC")
17056 }
17057 
17058 ##############################################################
17059 ##
17060 ## Populate the write records below with the current values.
17061 ## Only do this once at startup.
17062 ##
17063 ###############################################################
17064 
17065 record(calcout, "$(P):LS01:Z6:INITCALC3") {
17066  field(INPA, "0")
17067  field(CALC, "A")
17068  field(VAL, "0")
17069  field(DOPT, "Use OCAL")
17070  field(OOPT, "When Zero")
17071  field(OCAL, "1")
17072  field(OUT, "$(P):LS01:Z6:INITUB3.PROC")
17073 }
17074 
17075 record(dfanout, "$(P):LS01:Z6:INITUB3") {
17076  field(OMSL, "closed_loop")
17077  field(DOL, "$(P):LS01:Z6:UB3.VAL")
17078  field(OUTA, "$(P):LS01:Z6:UB_S3.VAL PP")
17079  field(FLNK, "$(P):LS01:Z6:INITP3.PROC")
17080 }
17081 record(dfanout, "$(P):LS01:Z6:INITP3") {
17082  field(OMSL, "closed_loop")
17083  field(DOL, "$(P):LS01:Z6:P3.VAL")
17084  field(OUTA, "$(P):LS01:Z6:P_S3.VAL PP")
17085  field(FLNK, "$(P):LS01:Z6:INITI3.PROC")
17086 }
17087 record(dfanout, "$(P):LS01:Z6:INITI3") {
17088  field(OMSL, "closed_loop")
17089  field(DOL, "$(P):LS01:Z6:I3.VAL")
17090  field(OUTA, "$(P):LS01:Z6:I_S3.VAL PP")
17091  field(FLNK, "$(P):LS01:Z6:INITD3.PROC")
17092 }
17093 record(dfanout, "$(P):LS01:Z6:INITD3") {
17094  field(OMSL, "closed_loop")
17095  field(DOL, "$(P):LS01:Z6:D3.VAL")
17096  field(OUTA, "$(P):LS01:Z6:D_S3.VAL PP")
17097  field(FLNK, "$(P):LS01:Z6:INITMOUT3.PROC")
17098 }
17099 record(dfanout, "$(P):LS01:Z6:INITMOUT3") {
17100  field(OMSL, "closed_loop")
17101  field(DOL, "$(P):LS01:Z6:MOUT3.VAL")
17102  field(OUTA, "$(P):LS01:Z6:MOUT_S3.VAL PP")
17103  field(FLNK, "$(P):LS01:Z6:INITRANGE3.PROC")
17104 }
17105 record(dfanout, "$(P):LS01:Z6:INITRANGE3") {
17106  field(OMSL, "closed_loop")
17107  field(DOL, "$(P):LS01:Z6:RANGE3.VAL")
17108  field(OUTA, "$(P):LS01:Z6:RANGE_S3.VAL PP")
17109  field(FLNK, "$(P):LS01:Z6:INITINPUT3.PROC")
17110 }
17111 record(dfanout, "$(P):LS01:Z6:INITINPUT3") {
17112  field(OMSL, "closed_loop")
17113  field(DOL, "$(P):LS01:Z6:INPUT3.VAL")
17114  field(OUTA, "$(P):LS01:Z6:INPUT_S3.VAL PP")
17115  field(FLNK, "$(P):LS01:Z6:INITRATE3.PROC")
17116 }
17117 record(dfanout, "$(P):LS01:Z6:INITRATE3") {
17118  field(OMSL, "closed_loop")
17119  field(DOL, "$(P):LS01:Z6:RATE3.VAL")
17120  field(OUTA, "$(P):LS01:Z6:RATE_S3.VAL PP")
17121  field(FLNK, "$(P):LS01:Z6:INITCOUNT3.PROC")
17122 }
17123 
17124 record(dfanout, "$(P):LS01:Z6:INITCOUNT3") {
17125  field(DOL, "1")
17126  field(OUTA, "$(P):LS01:Z6:INITCALC3.A")
17127 }
17128 
17129 
17130 
17131 #############################################
17132 # Write records. There is a calcout record to
17133 # do the actual write.
17134 #############################################
17135 
17136 ##
17137 ## Set the ZONE upper boundary setting.
17138 ##
17139 record(ao, "$(P):LS01:Z6:UB_S3") {
17140  field(SCAN, "Passive")
17141  field(PREC, "1")
17142  field(SDIS, "$(P):LS01:DISABLE")
17143 }
17144 
17145 ##
17146 ## Set the ZONE P setting.
17147 ##
17148 record(ao, "$(P):LS01:Z6:P_S3") {
17149  field(SCAN, "Passive")
17150  field(PREC, "1")
17151  field(SDIS, "$(P):LS01:DISABLE")
17152 }
17153 
17154 ##
17155 ## Set the ZONE I setting.
17156 ##
17157 record(ao, "$(P):LS01:Z6:I_S3") {
17158  field(SCAN, "Passive")
17159  field(PREC, "1")
17160  field(SDIS, "$(P):LS01:DISABLE")
17161 }
17162 
17163 ##
17164 ## Set the ZONE D setting.
17165 ##
17166 record(ao, "$(P):LS01:Z6:D_S3") {
17167  field(SCAN, "Passive")
17168  field(PREC, "1")
17169  field(SDIS, "$(P):LS01:DISABLE")
17170 }
17171 
17172 ##
17173 ## Set the ZONE MOUT setting.
17174 ##
17175 record(ao, "$(P):LS01:Z6:MOUT_S3") {
17176  field(SCAN, "Passive")
17177  field(PREC, "1")
17178  field(SDIS, "$(P):LS01:DISABLE")
17179 }
17180 
17181 ##
17182 ## Set the ZONE RANGE setting.
17183 ##
17184 record(mbbo, "$(P):LS01:Z6:RANGE_S3") {
17185  field(SCAN, "Passive")
17186  field(ZRST, "Off")
17187  field(ZRVL, "0")
17188  field(ONST, "Range1/Low")
17189  field(ONVL, "1")
17190  field(TWST, "Range2/Medium")
17191  field(TWVL, "2")
17192  field(THST, "Range3/High")
17193  field(THVL, "3")
17194  field(FRST, "Range4")
17195  field(FRVL, "4")
17196  field(FVST, "Range5")
17197  field(FVVL, "5")
17198  field(SDIS, "$(P):LS01:DISABLE")
17199 }
17200 
17201 ##
17202 ## Set the ZONE INPUT setting.
17203 ##
17204 record(mbbo, "$(P):LS01:Z6:INPUT_S3") {
17205  field(ZRST, "None")
17206  field(ZRVL, "0")
17207  field(ONST, "Input A")
17208  field(ONVL, "1")
17209  field(TWST, "Input B")
17210  field(TWVL, "2")
17211  field(THST, "Input C")
17212  field(THVL, "3")
17213  field(FRST, "Input D")
17214  field(FRVL, "4")
17215  field(FVST, "Input D2")
17216  field(FVVL, "5")
17217  field(SXST, "Input D3")
17218  field(SXVL, "6")
17219  field(SVST, "Input D4")
17220  field(SVVL, "7")
17221  field(EIST, "Input D5")
17222  field(EIVL, "8")
17223  field(SDIS, "$(P):LS01:DISABLE")
17224 }
17225 
17226 ##
17227 ## Set the ZONE RATE setting.
17228 ##
17229 record(ao, "$(P):LS01:Z6:RATE_S3") {
17230  field(SCAN, "Passive")
17231  field(PREC, "1")
17232  field(SDIS, "$(P):LS01:DISABLE")
17233 }
17234 
17235 ##
17236 ## Record to write the ZONE parameters.
17237 ##
17238 record(calcout, "$(P):LS01:Z6:SET3") {
17239  field(INPA, "$(P):LS01:Z6:UB_S3")
17240  field(INPB, "$(P):LS01:Z6:P_S3")
17241  field(INPC, "$(P):LS01:Z6:I_S3")
17242  field(INPD, "$(P):LS01:Z6:D_S3")
17243  field(INPE, "$(P):LS01:Z6:MOUT_S3")
17244  field(INPF, "$(P):LS01:Z6:RANGE_S3")
17245  field(INPG, "$(P):LS01:Z6:INPUT_S3")
17246  field(INPH, "$(P):LS01:Z6:RATE_S3")
17247  field(CALC, "0")
17248  field(DTYP, "stream")
17249  field(OUT, "@ls336.proto setZONE(3,6) L0 0")
17250  field(SDIS, "$(P):LS01:DISABLE")
17251  field(FLNK, "$(P):LS01:Z6:ALL3.PROC")
17252 }
17253 
17254 
17255 
17256 
17257 
17258 
17259 
17260 
17261 
17262 
17263 record(mbbi, "$(P):LS01:Z6:RANGE3") {
17264  field(ZRST, "Off")
17265  field(ONST, "On")
17266  field(TWST, "")
17267  field(THST, "")
17268  field(FRST, "")
17269  field(FVST, "")
17270 }
17271 
17272 record(mbbo, "$(P):LS01:Z6:RANGE_S3") {
17273  field(ZRST, "Off")
17274  field(ONST, "On")
17275  field(TWST, "")
17276  field(THST, "")
17277  field(FRST, "")
17278  field(FVST, "")
17279 }
17280 
17281 
17282 
17283 
17284 
17285 
17286 # This just includes the zone file and overrides the RANGE options
17287 # for the analog control channels.
17288 
17289 #######################################
17290 #
17291 # Template to support reading and setting
17292 # controller ZONE parameters. It reads the ZONE
17293 # parameters into an array, then uses subArrays to
17294 # extract each parameter.
17295 #
17296 # This template is used by the output template
17297 # and it needs the following macros:
17298 #
17299 # ZONE: zone number
17300 # OUT: output number
17301 #
17302 #######################################
17303 
17304 ##
17305 ## Read the ZONE setting into an array (8 values)
17306 ##
17307 record(waveform, "$(P):LS01:Z7:ALL3") {
17308  field(DTYP, "stream")
17309  field(SDIS, "$(P):LS01:DISABLE_POLL")
17310  field(INP, "@ls336.proto getZONE(3,7) L0 0")
17311  field(SCAN, "Passive")
17312  field(NELM, "8")
17313  field(FTVL, "DOUBLE")
17314  field(PREC, "1")
17315  field(FLNK, "$(P):LS01:Z7:UB3:ARRAY.PROC")
17316 }
17317 
17318 ##
17319 ## Read the ZONE upper boundary setting.
17320 ##
17321 record(subArray, "$(P):LS01:Z7:UB3:ARRAY") {
17322  field(SCAN, "Passive")
17323  field(FTVL, "DOUBLE")
17324  field(INP, "$(P):LS01:Z7:ALL3.VAL MS")
17325  field(MALM, "8")
17326  field(NELM, "1")
17327  field(INDX, "0")
17328  field(PREC, "1")
17329  field(FLNK, "$(P):LS01:Z7:UB3.PROC")
17330 }
17331 record(ai, "$(P):LS01:Z7:UB3") {
17332  field(SCAN, "Passive")
17333  field(INP, "$(P):LS01:Z7:UB3:ARRAY.VAL MS")
17334  field(PREC, "1")
17335  field(FLNK, "$(P):LS01:Z7:P3:ARRAY.PROC")
17336 }
17337 
17338 ##
17339 ## Read the ZONE P setting.
17340 ##
17341 record(subArray, "$(P):LS01:Z7:P3:ARRAY") {
17342  field(SCAN, "Passive")
17343  field(FTVL, "DOUBLE")
17344  field(INP, "$(P):LS01:Z7:ALL3.VAL MS")
17345  field(MALM, "8")
17346  field(NELM, "1")
17347  field(INDX, "1")
17348  field(PREC, "1")
17349  field(FLNK, "$(P):LS01:Z7:P3.PROC")
17350 }
17351 record(ai, "$(P):LS01:Z7:P3") {
17352  field(SCAN, "Passive")
17353  field(INP, "$(P):LS01:Z7:P3:ARRAY.VAL MS")
17354  field(PREC, "1")
17355  field(FLNK, "$(P):LS01:Z7:I3:ARRAY.PROC")
17356 }
17357 
17358 ##
17359 ## Read the ZONE I setting.
17360 ##
17361 record(subArray, "$(P):LS01:Z7:I3:ARRAY") {
17362  field(SCAN, "Passive")
17363  field(FTVL, "DOUBLE")
17364  field(INP, "$(P):LS01:Z7:ALL3.VAL MS")
17365  field(MALM, "8")
17366  field(NELM, "1")
17367  field(INDX, "2")
17368  field(PREC, "1")
17369  field(FLNK, "$(P):LS01:Z7:I3.PROC")
17370 }
17371 record(ai, "$(P):LS01:Z7:I3") {
17372  field(SCAN, "Passive")
17373  field(INP, "$(P):LS01:Z7:I3:ARRAY.VAL MS")
17374  field(PREC, "1")
17375  field(FLNK, "$(P):LS01:Z7:D3:ARRAY.PROC")
17376 }
17377 
17378 ##
17379 ## Read the ZONE D setting.
17380 ##
17381 record(subArray, "$(P):LS01:Z7:D3:ARRAY") {
17382  field(SCAN, "Passive")
17383  field(FTVL, "DOUBLE")
17384  field(INP, "$(P):LS01:Z7:ALL3.VAL MS")
17385  field(MALM, "8")
17386  field(NELM, "1")
17387  field(INDX, "3")
17388  field(PREC, "1")
17389  field(FLNK, "$(P):LS01:Z7:D3.PROC")
17390 }
17391 record(ai, "$(P):LS01:Z7:D3") {
17392  field(SCAN, "Passive")
17393  field(INP, "$(P):LS01:Z7:D3:ARRAY.VAL MS")
17394  field(PREC, "1")
17395  field(FLNK, "$(P):LS01:Z7:MOUT3:ARRAY.PROC")
17396 }
17397 
17398 ##
17399 ## Read the ZONE MOUT setting.
17400 ##
17401 record(subArray, "$(P):LS01:Z7:MOUT3:ARRAY") {
17402  field(SCAN, "Passive")
17403  field(FTVL, "DOUBLE")
17404  field(INP, "$(P):LS01:Z7:ALL3.VAL MS")
17405  field(MALM, "8")
17406  field(NELM, "1")
17407  field(INDX, "4")
17408  field(PREC, "1")
17409  field(FLNK, "$(P):LS01:Z7:MOUT3.PROC")
17410 }
17411 record(ai, "$(P):LS01:Z7:MOUT3") {
17412  field(SCAN, "Passive")
17413  field(INP, "$(P):LS01:Z7:MOUT3:ARRAY.VAL MS")
17414  field(PREC, "1")
17415  field(FLNK, "$(P):LS01:Z7:RANGE3:ARRAY.PROC")
17416 }
17417 
17418 ##
17419 ## Read the ZONE RANGE setting.
17420 ##
17421 record(subArray, "$(P):LS01:Z7:RANGE3:ARRAY") {
17422  field(SCAN, "Passive")
17423  field(FTVL, "DOUBLE")
17424  field(INP, "$(P):LS01:Z7:ALL3.VAL MS")
17425  field(MALM, "8")
17426  field(NELM, "1")
17427  field(INDX, "5")
17428  field(PREC, "1")
17429  field(FLNK, "$(P):LS01:Z7:RANGE3.PROC")
17430 }
17431 record(mbbi, "$(P):LS01:Z7:RANGE3") {
17432  field(INP, "$(P):LS01:Z7:RANGE3:ARRAY.VAL")
17433  field(SCAN, "Passive")
17434  field(ZRST, "Off")
17435  field(ZRVL, "0")
17436  field(ONST, "Range1/Low")
17437  field(ONVL, "1")
17438  field(TWST, "Range2/Medium")
17439  field(TWVL, "2")
17440  field(THST, "Range3/High")
17441  field(THVL, "3")
17442  field(FRST, "Range4")
17443  field(FRVL, "4")
17444  field(FVST, "Range5")
17445  field(FVVL, "5")
17446  field(FLNK, "$(P):LS01:Z7:INPUT3:ARRAY.PROC")
17447 }
17448 
17449 ##
17450 ## Read the ZONE INPUT setting.
17451 ##
17452 record(subArray, "$(P):LS01:Z7:INPUT3:ARRAY") {
17453  field(SCAN, "Passive")
17454  field(FTVL, "DOUBLE")
17455  field(INP, "$(P):LS01:Z7:ALL3.VAL MS")
17456  field(MALM, "8")
17457  field(NELM, "1")
17458  field(INDX, "6")
17459  field(PREC, "1")
17460  field(FLNK, "$(P):LS01:Z7:INPUT3.PROC")
17461 }
17462 record(mbbi, "$(P):LS01:Z7:INPUT3") {
17463  field(INP, "$(P):LS01:Z7:INPUT3:ARRAY.VAL")
17464  field(SCAN, "Passive")
17465  field(ZRST, "None")
17466  field(ZRVL, "0")
17467  field(ONST, "Input A")
17468  field(ONVL, "1")
17469  field(TWST, "Input B")
17470  field(TWVL, "2")
17471  field(THST, "Input C")
17472  field(THVL, "3")
17473  field(FRST, "Input D")
17474  field(FRVL, "4")
17475  field(FVST, "Input D2")
17476  field(FVVL, "5")
17477  field(SXST, "Input D3")
17478  field(SXVL, "6")
17479  field(SVST, "Input D4")
17480  field(SVVL, "7")
17481  field(EIST, "Input D5")
17482  field(EIVL, "8")
17483  field(FLNK, "$(P):LS01:Z7:RATE3:ARRAY.PROC")
17484 }
17485 
17486 ##
17487 ## Read the ZONE RATE setting.
17488 ##
17489 record(subArray, "$(P):LS01:Z7:RATE3:ARRAY") {
17490  field(SCAN, "Passive")
17491  field(FTVL, "DOUBLE")
17492  field(INP, "$(P):LS01:Z7:ALL3.VAL MS")
17493  field(MALM, "8")
17494  field(NELM, "1")
17495  field(INDX, "7")
17496  field(PREC, "1")
17497  field(FLNK, "$(P):LS01:Z7:RATE3.PROC")
17498 }
17499 record(ai, "$(P):LS01:Z7:RATE3") {
17500  field(SCAN, "Passive")
17501  field(INP, "$(P):LS01:Z7:RATE3:ARRAY.VAL MS")
17502  field(PREC, "1")
17503  field(FLNK, "$(P):LS01:Z7:INITCALC3.PROC")
17504 }
17505 
17506 ##############################################################
17507 ##
17508 ## Populate the write records below with the current values.
17509 ## Only do this once at startup.
17510 ##
17511 ###############################################################
17512 
17513 record(calcout, "$(P):LS01:Z7:INITCALC3") {
17514  field(INPA, "0")
17515  field(CALC, "A")
17516  field(VAL, "0")
17517  field(DOPT, "Use OCAL")
17518  field(OOPT, "When Zero")
17519  field(OCAL, "1")
17520  field(OUT, "$(P):LS01:Z7:INITUB3.PROC")
17521 }
17522 
17523 record(dfanout, "$(P):LS01:Z7:INITUB3") {
17524  field(OMSL, "closed_loop")
17525  field(DOL, "$(P):LS01:Z7:UB3.VAL")
17526  field(OUTA, "$(P):LS01:Z7:UB_S3.VAL PP")
17527  field(FLNK, "$(P):LS01:Z7:INITP3.PROC")
17528 }
17529 record(dfanout, "$(P):LS01:Z7:INITP3") {
17530  field(OMSL, "closed_loop")
17531  field(DOL, "$(P):LS01:Z7:P3.VAL")
17532  field(OUTA, "$(P):LS01:Z7:P_S3.VAL PP")
17533  field(FLNK, "$(P):LS01:Z7:INITI3.PROC")
17534 }
17535 record(dfanout, "$(P):LS01:Z7:INITI3") {
17536  field(OMSL, "closed_loop")
17537  field(DOL, "$(P):LS01:Z7:I3.VAL")
17538  field(OUTA, "$(P):LS01:Z7:I_S3.VAL PP")
17539  field(FLNK, "$(P):LS01:Z7:INITD3.PROC")
17540 }
17541 record(dfanout, "$(P):LS01:Z7:INITD3") {
17542  field(OMSL, "closed_loop")
17543  field(DOL, "$(P):LS01:Z7:D3.VAL")
17544  field(OUTA, "$(P):LS01:Z7:D_S3.VAL PP")
17545  field(FLNK, "$(P):LS01:Z7:INITMOUT3.PROC")
17546 }
17547 record(dfanout, "$(P):LS01:Z7:INITMOUT3") {
17548  field(OMSL, "closed_loop")
17549  field(DOL, "$(P):LS01:Z7:MOUT3.VAL")
17550  field(OUTA, "$(P):LS01:Z7:MOUT_S3.VAL PP")
17551  field(FLNK, "$(P):LS01:Z7:INITRANGE3.PROC")
17552 }
17553 record(dfanout, "$(P):LS01:Z7:INITRANGE3") {
17554  field(OMSL, "closed_loop")
17555  field(DOL, "$(P):LS01:Z7:RANGE3.VAL")
17556  field(OUTA, "$(P):LS01:Z7:RANGE_S3.VAL PP")
17557  field(FLNK, "$(P):LS01:Z7:INITINPUT3.PROC")
17558 }
17559 record(dfanout, "$(P):LS01:Z7:INITINPUT3") {
17560  field(OMSL, "closed_loop")
17561  field(DOL, "$(P):LS01:Z7:INPUT3.VAL")
17562  field(OUTA, "$(P):LS01:Z7:INPUT_S3.VAL PP")
17563  field(FLNK, "$(P):LS01:Z7:INITRATE3.PROC")
17564 }
17565 record(dfanout, "$(P):LS01:Z7:INITRATE3") {
17566  field(OMSL, "closed_loop")
17567  field(DOL, "$(P):LS01:Z7:RATE3.VAL")
17568  field(OUTA, "$(P):LS01:Z7:RATE_S3.VAL PP")
17569  field(FLNK, "$(P):LS01:Z7:INITCOUNT3.PROC")
17570 }
17571 
17572 record(dfanout, "$(P):LS01:Z7:INITCOUNT3") {
17573  field(DOL, "1")
17574  field(OUTA, "$(P):LS01:Z7:INITCALC3.A")
17575 }
17576 
17577 
17578 
17579 #############################################
17580 # Write records. There is a calcout record to
17581 # do the actual write.
17582 #############################################
17583 
17584 ##
17585 ## Set the ZONE upper boundary setting.
17586 ##
17587 record(ao, "$(P):LS01:Z7:UB_S3") {
17588  field(SCAN, "Passive")
17589  field(PREC, "1")
17590  field(SDIS, "$(P):LS01:DISABLE")
17591 }
17592 
17593 ##
17594 ## Set the ZONE P setting.
17595 ##
17596 record(ao, "$(P):LS01:Z7:P_S3") {
17597  field(SCAN, "Passive")
17598  field(PREC, "1")
17599  field(SDIS, "$(P):LS01:DISABLE")
17600 }
17601 
17602 ##
17603 ## Set the ZONE I setting.
17604 ##
17605 record(ao, "$(P):LS01:Z7:I_S3") {
17606  field(SCAN, "Passive")
17607  field(PREC, "1")
17608  field(SDIS, "$(P):LS01:DISABLE")
17609 }
17610 
17611 ##
17612 ## Set the ZONE D setting.
17613 ##
17614 record(ao, "$(P):LS01:Z7:D_S3") {
17615  field(SCAN, "Passive")
17616  field(PREC, "1")
17617  field(SDIS, "$(P):LS01:DISABLE")
17618 }
17619 
17620 ##
17621 ## Set the ZONE MOUT setting.
17622 ##
17623 record(ao, "$(P):LS01:Z7:MOUT_S3") {
17624  field(SCAN, "Passive")
17625  field(PREC, "1")
17626  field(SDIS, "$(P):LS01:DISABLE")
17627 }
17628 
17629 ##
17630 ## Set the ZONE RANGE setting.
17631 ##
17632 record(mbbo, "$(P):LS01:Z7:RANGE_S3") {
17633  field(SCAN, "Passive")
17634  field(ZRST, "Off")
17635  field(ZRVL, "0")
17636  field(ONST, "Range1/Low")
17637  field(ONVL, "1")
17638  field(TWST, "Range2/Medium")
17639  field(TWVL, "2")
17640  field(THST, "Range3/High")
17641  field(THVL, "3")
17642  field(FRST, "Range4")
17643  field(FRVL, "4")
17644  field(FVST, "Range5")
17645  field(FVVL, "5")
17646  field(SDIS, "$(P):LS01:DISABLE")
17647 }
17648 
17649 ##
17650 ## Set the ZONE INPUT setting.
17651 ##
17652 record(mbbo, "$(P):LS01:Z7:INPUT_S3") {
17653  field(ZRST, "None")
17654  field(ZRVL, "0")
17655  field(ONST, "Input A")
17656  field(ONVL, "1")
17657  field(TWST, "Input B")
17658  field(TWVL, "2")
17659  field(THST, "Input C")
17660  field(THVL, "3")
17661  field(FRST, "Input D")
17662  field(FRVL, "4")
17663  field(FVST, "Input D2")
17664  field(FVVL, "5")
17665  field(SXST, "Input D3")
17666  field(SXVL, "6")
17667  field(SVST, "Input D4")
17668  field(SVVL, "7")
17669  field(EIST, "Input D5")
17670  field(EIVL, "8")
17671  field(SDIS, "$(P):LS01:DISABLE")
17672 }
17673 
17674 ##
17675 ## Set the ZONE RATE setting.
17676 ##
17677 record(ao, "$(P):LS01:Z7:RATE_S3") {
17678  field(SCAN, "Passive")
17679  field(PREC, "1")
17680  field(SDIS, "$(P):LS01:DISABLE")
17681 }
17682 
17683 ##
17684 ## Record to write the ZONE parameters.
17685 ##
17686 record(calcout, "$(P):LS01:Z7:SET3") {
17687  field(INPA, "$(P):LS01:Z7:UB_S3")
17688  field(INPB, "$(P):LS01:Z7:P_S3")
17689  field(INPC, "$(P):LS01:Z7:I_S3")
17690  field(INPD, "$(P):LS01:Z7:D_S3")
17691  field(INPE, "$(P):LS01:Z7:MOUT_S3")
17692  field(INPF, "$(P):LS01:Z7:RANGE_S3")
17693  field(INPG, "$(P):LS01:Z7:INPUT_S3")
17694  field(INPH, "$(P):LS01:Z7:RATE_S3")
17695  field(CALC, "0")
17696  field(DTYP, "stream")
17697  field(OUT, "@ls336.proto setZONE(3,7) L0 0")
17698  field(SDIS, "$(P):LS01:DISABLE")
17699  field(FLNK, "$(P):LS01:Z7:ALL3.PROC")
17700 }
17701 
17702 
17703 
17704 
17705 
17706 
17707 
17708 
17709 
17710 
17711 record(mbbi, "$(P):LS01:Z7:RANGE3") {
17712  field(ZRST, "Off")
17713  field(ONST, "On")
17714  field(TWST, "")
17715  field(THST, "")
17716  field(FRST, "")
17717  field(FVST, "")
17718 }
17719 
17720 record(mbbo, "$(P):LS01:Z7:RANGE_S3") {
17721  field(ZRST, "Off")
17722  field(ONST, "On")
17723  field(TWST, "")
17724  field(THST, "")
17725  field(FRST, "")
17726  field(FVST, "")
17727 }
17728 
17729 
17730 
17731 
17732 
17733 
17734 # This just includes the zone file and overrides the RANGE options
17735 # for the analog control channels.
17736 
17737 #######################################
17738 #
17739 # Template to support reading and setting
17740 # controller ZONE parameters. It reads the ZONE
17741 # parameters into an array, then uses subArrays to
17742 # extract each parameter.
17743 #
17744 # This template is used by the output template
17745 # and it needs the following macros:
17746 #
17747 # ZONE: zone number
17748 # OUT: output number
17749 #
17750 #######################################
17751 
17752 ##
17753 ## Read the ZONE setting into an array (8 values)
17754 ##
17755 record(waveform, "$(P):LS01:Z8:ALL3") {
17756  field(DTYP, "stream")
17757  field(SDIS, "$(P):LS01:DISABLE_POLL")
17758  field(INP, "@ls336.proto getZONE(3,8) L0 0")
17759  field(SCAN, "Passive")
17760  field(NELM, "8")
17761  field(FTVL, "DOUBLE")
17762  field(PREC, "1")
17763  field(FLNK, "$(P):LS01:Z8:UB3:ARRAY.PROC")
17764 }
17765 
17766 ##
17767 ## Read the ZONE upper boundary setting.
17768 ##
17769 record(subArray, "$(P):LS01:Z8:UB3:ARRAY") {
17770  field(SCAN, "Passive")
17771  field(FTVL, "DOUBLE")
17772  field(INP, "$(P):LS01:Z8:ALL3.VAL MS")
17773  field(MALM, "8")
17774  field(NELM, "1")
17775  field(INDX, "0")
17776  field(PREC, "1")
17777  field(FLNK, "$(P):LS01:Z8:UB3.PROC")
17778 }
17779 record(ai, "$(P):LS01:Z8:UB3") {
17780  field(SCAN, "Passive")
17781  field(INP, "$(P):LS01:Z8:UB3:ARRAY.VAL MS")
17782  field(PREC, "1")
17783  field(FLNK, "$(P):LS01:Z8:P3:ARRAY.PROC")
17784 }
17785 
17786 ##
17787 ## Read the ZONE P setting.
17788 ##
17789 record(subArray, "$(P):LS01:Z8:P3:ARRAY") {
17790  field(SCAN, "Passive")
17791  field(FTVL, "DOUBLE")
17792  field(INP, "$(P):LS01:Z8:ALL3.VAL MS")
17793  field(MALM, "8")
17794  field(NELM, "1")
17795  field(INDX, "1")
17796  field(PREC, "1")
17797  field(FLNK, "$(P):LS01:Z8:P3.PROC")
17798 }
17799 record(ai, "$(P):LS01:Z8:P3") {
17800  field(SCAN, "Passive")
17801  field(INP, "$(P):LS01:Z8:P3:ARRAY.VAL MS")
17802  field(PREC, "1")
17803  field(FLNK, "$(P):LS01:Z8:I3:ARRAY.PROC")
17804 }
17805 
17806 ##
17807 ## Read the ZONE I setting.
17808 ##
17809 record(subArray, "$(P):LS01:Z8:I3:ARRAY") {
17810  field(SCAN, "Passive")
17811  field(FTVL, "DOUBLE")
17812  field(INP, "$(P):LS01:Z8:ALL3.VAL MS")
17813  field(MALM, "8")
17814  field(NELM, "1")
17815  field(INDX, "2")
17816  field(PREC, "1")
17817  field(FLNK, "$(P):LS01:Z8:I3.PROC")
17818 }
17819 record(ai, "$(P):LS01:Z8:I3") {
17820  field(SCAN, "Passive")
17821  field(INP, "$(P):LS01:Z8:I3:ARRAY.VAL MS")
17822  field(PREC, "1")
17823  field(FLNK, "$(P):LS01:Z8:D3:ARRAY.PROC")
17824 }
17825 
17826 ##
17827 ## Read the ZONE D setting.
17828 ##
17829 record(subArray, "$(P):LS01:Z8:D3:ARRAY") {
17830  field(SCAN, "Passive")
17831  field(FTVL, "DOUBLE")
17832  field(INP, "$(P):LS01:Z8:ALL3.VAL MS")
17833  field(MALM, "8")
17834  field(NELM, "1")
17835  field(INDX, "3")
17836  field(PREC, "1")
17837  field(FLNK, "$(P):LS01:Z8:D3.PROC")
17838 }
17839 record(ai, "$(P):LS01:Z8:D3") {
17840  field(SCAN, "Passive")
17841  field(INP, "$(P):LS01:Z8:D3:ARRAY.VAL MS")
17842  field(PREC, "1")
17843  field(FLNK, "$(P):LS01:Z8:MOUT3:ARRAY.PROC")
17844 }
17845 
17846 ##
17847 ## Read the ZONE MOUT setting.
17848 ##
17849 record(subArray, "$(P):LS01:Z8:MOUT3:ARRAY") {
17850  field(SCAN, "Passive")
17851  field(FTVL, "DOUBLE")
17852  field(INP, "$(P):LS01:Z8:ALL3.VAL MS")
17853  field(MALM, "8")
17854  field(NELM, "1")
17855  field(INDX, "4")
17856  field(PREC, "1")
17857  field(FLNK, "$(P):LS01:Z8:MOUT3.PROC")
17858 }
17859 record(ai, "$(P):LS01:Z8:MOUT3") {
17860  field(SCAN, "Passive")
17861  field(INP, "$(P):LS01:Z8:MOUT3:ARRAY.VAL MS")
17862  field(PREC, "1")
17863  field(FLNK, "$(P):LS01:Z8:RANGE3:ARRAY.PROC")
17864 }
17865 
17866 ##
17867 ## Read the ZONE RANGE setting.
17868 ##
17869 record(subArray, "$(P):LS01:Z8:RANGE3:ARRAY") {
17870  field(SCAN, "Passive")
17871  field(FTVL, "DOUBLE")
17872  field(INP, "$(P):LS01:Z8:ALL3.VAL MS")
17873  field(MALM, "8")
17874  field(NELM, "1")
17875  field(INDX, "5")
17876  field(PREC, "1")
17877  field(FLNK, "$(P):LS01:Z8:RANGE3.PROC")
17878 }
17879 record(mbbi, "$(P):LS01:Z8:RANGE3") {
17880  field(INP, "$(P):LS01:Z8:RANGE3:ARRAY.VAL")
17881  field(SCAN, "Passive")
17882  field(ZRST, "Off")
17883  field(ZRVL, "0")
17884  field(ONST, "Range1/Low")
17885  field(ONVL, "1")
17886  field(TWST, "Range2/Medium")
17887  field(TWVL, "2")
17888  field(THST, "Range3/High")
17889  field(THVL, "3")
17890  field(FRST, "Range4")
17891  field(FRVL, "4")
17892  field(FVST, "Range5")
17893  field(FVVL, "5")
17894  field(FLNK, "$(P):LS01:Z8:INPUT3:ARRAY.PROC")
17895 }
17896 
17897 ##
17898 ## Read the ZONE INPUT setting.
17899 ##
17900 record(subArray, "$(P):LS01:Z8:INPUT3:ARRAY") {
17901  field(SCAN, "Passive")
17902  field(FTVL, "DOUBLE")
17903  field(INP, "$(P):LS01:Z8:ALL3.VAL MS")
17904  field(MALM, "8")
17905  field(NELM, "1")
17906  field(INDX, "6")
17907  field(PREC, "1")
17908  field(FLNK, "$(P):LS01:Z8:INPUT3.PROC")
17909 }
17910 record(mbbi, "$(P):LS01:Z8:INPUT3") {
17911  field(INP, "$(P):LS01:Z8:INPUT3:ARRAY.VAL")
17912  field(SCAN, "Passive")
17913  field(ZRST, "None")
17914  field(ZRVL, "0")
17915  field(ONST, "Input A")
17916  field(ONVL, "1")
17917  field(TWST, "Input B")
17918  field(TWVL, "2")
17919  field(THST, "Input C")
17920  field(THVL, "3")
17921  field(FRST, "Input D")
17922  field(FRVL, "4")
17923  field(FVST, "Input D2")
17924  field(FVVL, "5")
17925  field(SXST, "Input D3")
17926  field(SXVL, "6")
17927  field(SVST, "Input D4")
17928  field(SVVL, "7")
17929  field(EIST, "Input D5")
17930  field(EIVL, "8")
17931  field(FLNK, "$(P):LS01:Z8:RATE3:ARRAY.PROC")
17932 }
17933 
17934 ##
17935 ## Read the ZONE RATE setting.
17936 ##
17937 record(subArray, "$(P):LS01:Z8:RATE3:ARRAY") {
17938  field(SCAN, "Passive")
17939  field(FTVL, "DOUBLE")
17940  field(INP, "$(P):LS01:Z8:ALL3.VAL MS")
17941  field(MALM, "8")
17942  field(NELM, "1")
17943  field(INDX, "7")
17944  field(PREC, "1")
17945  field(FLNK, "$(P):LS01:Z8:RATE3.PROC")
17946 }
17947 record(ai, "$(P):LS01:Z8:RATE3") {
17948  field(SCAN, "Passive")
17949  field(INP, "$(P):LS01:Z8:RATE3:ARRAY.VAL MS")
17950  field(PREC, "1")
17951  field(FLNK, "$(P):LS01:Z8:INITCALC3.PROC")
17952 }
17953 
17954 ##############################################################
17955 ##
17956 ## Populate the write records below with the current values.
17957 ## Only do this once at startup.
17958 ##
17959 ###############################################################
17960 
17961 record(calcout, "$(P):LS01:Z8:INITCALC3") {
17962  field(INPA, "0")
17963  field(CALC, "A")
17964  field(VAL, "0")
17965  field(DOPT, "Use OCAL")
17966  field(OOPT, "When Zero")
17967  field(OCAL, "1")
17968  field(OUT, "$(P):LS01:Z8:INITUB3.PROC")
17969 }
17970 
17971 record(dfanout, "$(P):LS01:Z8:INITUB3") {
17972  field(OMSL, "closed_loop")
17973  field(DOL, "$(P):LS01:Z8:UB3.VAL")
17974  field(OUTA, "$(P):LS01:Z8:UB_S3.VAL PP")
17975  field(FLNK, "$(P):LS01:Z8:INITP3.PROC")
17976 }
17977 record(dfanout, "$(P):LS01:Z8:INITP3") {
17978  field(OMSL, "closed_loop")
17979  field(DOL, "$(P):LS01:Z8:P3.VAL")
17980  field(OUTA, "$(P):LS01:Z8:P_S3.VAL PP")
17981  field(FLNK, "$(P):LS01:Z8:INITI3.PROC")
17982 }
17983 record(dfanout, "$(P):LS01:Z8:INITI3") {
17984  field(OMSL, "closed_loop")
17985  field(DOL, "$(P):LS01:Z8:I3.VAL")
17986  field(OUTA, "$(P):LS01:Z8:I_S3.VAL PP")
17987  field(FLNK, "$(P):LS01:Z8:INITD3.PROC")
17988 }
17989 record(dfanout, "$(P):LS01:Z8:INITD3") {
17990  field(OMSL, "closed_loop")
17991  field(DOL, "$(P):LS01:Z8:D3.VAL")
17992  field(OUTA, "$(P):LS01:Z8:D_S3.VAL PP")
17993  field(FLNK, "$(P):LS01:Z8:INITMOUT3.PROC")
17994 }
17995 record(dfanout, "$(P):LS01:Z8:INITMOUT3") {
17996  field(OMSL, "closed_loop")
17997  field(DOL, "$(P):LS01:Z8:MOUT3.VAL")
17998  field(OUTA, "$(P):LS01:Z8:MOUT_S3.VAL PP")
17999  field(FLNK, "$(P):LS01:Z8:INITRANGE3.PROC")
18000 }
18001 record(dfanout, "$(P):LS01:Z8:INITRANGE3") {
18002  field(OMSL, "closed_loop")
18003  field(DOL, "$(P):LS01:Z8:RANGE3.VAL")
18004  field(OUTA, "$(P):LS01:Z8:RANGE_S3.VAL PP")
18005  field(FLNK, "$(P):LS01:Z8:INITINPUT3.PROC")
18006 }
18007 record(dfanout, "$(P):LS01:Z8:INITINPUT3") {
18008  field(OMSL, "closed_loop")
18009  field(DOL, "$(P):LS01:Z8:INPUT3.VAL")
18010  field(OUTA, "$(P):LS01:Z8:INPUT_S3.VAL PP")
18011  field(FLNK, "$(P):LS01:Z8:INITRATE3.PROC")
18012 }
18013 record(dfanout, "$(P):LS01:Z8:INITRATE3") {
18014  field(OMSL, "closed_loop")
18015  field(DOL, "$(P):LS01:Z8:RATE3.VAL")
18016  field(OUTA, "$(P):LS01:Z8:RATE_S3.VAL PP")
18017  field(FLNK, "$(P):LS01:Z8:INITCOUNT3.PROC")
18018 }
18019 
18020 record(dfanout, "$(P):LS01:Z8:INITCOUNT3") {
18021  field(DOL, "1")
18022  field(OUTA, "$(P):LS01:Z8:INITCALC3.A")
18023 }
18024 
18025 
18026 
18027 #############################################
18028 # Write records. There is a calcout record to
18029 # do the actual write.
18030 #############################################
18031 
18032 ##
18033 ## Set the ZONE upper boundary setting.
18034 ##
18035 record(ao, "$(P):LS01:Z8:UB_S3") {
18036  field(SCAN, "Passive")
18037  field(PREC, "1")
18038  field(SDIS, "$(P):LS01:DISABLE")
18039 }
18040 
18041 ##
18042 ## Set the ZONE P setting.
18043 ##
18044 record(ao, "$(P):LS01:Z8:P_S3") {
18045  field(SCAN, "Passive")
18046  field(PREC, "1")
18047  field(SDIS, "$(P):LS01:DISABLE")
18048 }
18049 
18050 ##
18051 ## Set the ZONE I setting.
18052 ##
18053 record(ao, "$(P):LS01:Z8:I_S3") {
18054  field(SCAN, "Passive")
18055  field(PREC, "1")
18056  field(SDIS, "$(P):LS01:DISABLE")
18057 }
18058 
18059 ##
18060 ## Set the ZONE D setting.
18061 ##
18062 record(ao, "$(P):LS01:Z8:D_S3") {
18063  field(SCAN, "Passive")
18064  field(PREC, "1")
18065  field(SDIS, "$(P):LS01:DISABLE")
18066 }
18067 
18068 ##
18069 ## Set the ZONE MOUT setting.
18070 ##
18071 record(ao, "$(P):LS01:Z8:MOUT_S3") {
18072  field(SCAN, "Passive")
18073  field(PREC, "1")
18074  field(SDIS, "$(P):LS01:DISABLE")
18075 }
18076 
18077 ##
18078 ## Set the ZONE RANGE setting.
18079 ##
18080 record(mbbo, "$(P):LS01:Z8:RANGE_S3") {
18081  field(SCAN, "Passive")
18082  field(ZRST, "Off")
18083  field(ZRVL, "0")
18084  field(ONST, "Range1/Low")
18085  field(ONVL, "1")
18086  field(TWST, "Range2/Medium")
18087  field(TWVL, "2")
18088  field(THST, "Range3/High")
18089  field(THVL, "3")
18090  field(FRST, "Range4")
18091  field(FRVL, "4")
18092  field(FVST, "Range5")
18093  field(FVVL, "5")
18094  field(SDIS, "$(P):LS01:DISABLE")
18095 }
18096 
18097 ##
18098 ## Set the ZONE INPUT setting.
18099 ##
18100 record(mbbo, "$(P):LS01:Z8:INPUT_S3") {
18101  field(ZRST, "None")
18102  field(ZRVL, "0")
18103  field(ONST, "Input A")
18104  field(ONVL, "1")
18105  field(TWST, "Input B")
18106  field(TWVL, "2")
18107  field(THST, "Input C")
18108  field(THVL, "3")
18109  field(FRST, "Input D")
18110  field(FRVL, "4")
18111  field(FVST, "Input D2")
18112  field(FVVL, "5")
18113  field(SXST, "Input D3")
18114  field(SXVL, "6")
18115  field(SVST, "Input D4")
18116  field(SVVL, "7")
18117  field(EIST, "Input D5")
18118  field(EIVL, "8")
18119  field(SDIS, "$(P):LS01:DISABLE")
18120 }
18121 
18122 ##
18123 ## Set the ZONE RATE setting.
18124 ##
18125 record(ao, "$(P):LS01:Z8:RATE_S3") {
18126  field(SCAN, "Passive")
18127  field(PREC, "1")
18128  field(SDIS, "$(P):LS01:DISABLE")
18129 }
18130 
18131 ##
18132 ## Record to write the ZONE parameters.
18133 ##
18134 record(calcout, "$(P):LS01:Z8:SET3") {
18135  field(INPA, "$(P):LS01:Z8:UB_S3")
18136  field(INPB, "$(P):LS01:Z8:P_S3")
18137  field(INPC, "$(P):LS01:Z8:I_S3")
18138  field(INPD, "$(P):LS01:Z8:D_S3")
18139  field(INPE, "$(P):LS01:Z8:MOUT_S3")
18140  field(INPF, "$(P):LS01:Z8:RANGE_S3")
18141  field(INPG, "$(P):LS01:Z8:INPUT_S3")
18142  field(INPH, "$(P):LS01:Z8:RATE_S3")
18143  field(CALC, "0")
18144  field(DTYP, "stream")
18145  field(OUT, "@ls336.proto setZONE(3,8) L0 0")
18146  field(SDIS, "$(P):LS01:DISABLE")
18147  field(FLNK, "$(P):LS01:Z8:ALL3.PROC")
18148 }
18149 
18150 
18151 
18152 
18153 
18154 
18155 
18156 
18157 
18158 
18159 record(mbbi, "$(P):LS01:Z8:RANGE3") {
18160  field(ZRST, "Off")
18161  field(ONST, "On")
18162  field(TWST, "")
18163  field(THST, "")
18164  field(FRST, "")
18165  field(FVST, "")
18166 }
18167 
18168 record(mbbo, "$(P):LS01:Z8:RANGE_S3") {
18169  field(ZRST, "Off")
18170  field(ONST, "On")
18171  field(TWST, "")
18172  field(THST, "")
18173  field(FRST, "")
18174  field(FVST, "")
18175 }
18176 
18177 
18178 
18179 
18180 
18181 
18182 # This just includes the zone file and overrides the RANGE options
18183 # for the analog control channels.
18184 
18185 #######################################
18186 #
18187 # Template to support reading and setting
18188 # controller ZONE parameters. It reads the ZONE
18189 # parameters into an array, then uses subArrays to
18190 # extract each parameter.
18191 #
18192 # This template is used by the output template
18193 # and it needs the following macros:
18194 #
18195 # ZONE: zone number
18196 # OUT: output number
18197 #
18198 #######################################
18199 
18200 ##
18201 ## Read the ZONE setting into an array (8 values)
18202 ##
18203 record(waveform, "$(P):LS01:Z9:ALL3") {
18204  field(DTYP, "stream")
18205  field(SDIS, "$(P):LS01:DISABLE_POLL")
18206  field(INP, "@ls336.proto getZONE(3,9) L0 0")
18207  field(SCAN, "Passive")
18208  field(NELM, "8")
18209  field(FTVL, "DOUBLE")
18210  field(PREC, "1")
18211  field(FLNK, "$(P):LS01:Z9:UB3:ARRAY.PROC")
18212 }
18213 
18214 ##
18215 ## Read the ZONE upper boundary setting.
18216 ##
18217 record(subArray, "$(P):LS01:Z9:UB3:ARRAY") {
18218  field(SCAN, "Passive")
18219  field(FTVL, "DOUBLE")
18220  field(INP, "$(P):LS01:Z9:ALL3.VAL MS")
18221  field(MALM, "8")
18222  field(NELM, "1")
18223  field(INDX, "0")
18224  field(PREC, "1")
18225  field(FLNK, "$(P):LS01:Z9:UB3.PROC")
18226 }
18227 record(ai, "$(P):LS01:Z9:UB3") {
18228  field(SCAN, "Passive")
18229  field(INP, "$(P):LS01:Z9:UB3:ARRAY.VAL MS")
18230  field(PREC, "1")
18231  field(FLNK, "$(P):LS01:Z9:P3:ARRAY.PROC")
18232 }
18233 
18234 ##
18235 ## Read the ZONE P setting.
18236 ##
18237 record(subArray, "$(P):LS01:Z9:P3:ARRAY") {
18238  field(SCAN, "Passive")
18239  field(FTVL, "DOUBLE")
18240  field(INP, "$(P):LS01:Z9:ALL3.VAL MS")
18241  field(MALM, "8")
18242  field(NELM, "1")
18243  field(INDX, "1")
18244  field(PREC, "1")
18245  field(FLNK, "$(P):LS01:Z9:P3.PROC")
18246 }
18247 record(ai, "$(P):LS01:Z9:P3") {
18248  field(SCAN, "Passive")
18249  field(INP, "$(P):LS01:Z9:P3:ARRAY.VAL MS")
18250  field(PREC, "1")
18251  field(FLNK, "$(P):LS01:Z9:I3:ARRAY.PROC")
18252 }
18253 
18254 ##
18255 ## Read the ZONE I setting.
18256 ##
18257 record(subArray, "$(P):LS01:Z9:I3:ARRAY") {
18258  field(SCAN, "Passive")
18259  field(FTVL, "DOUBLE")
18260  field(INP, "$(P):LS01:Z9:ALL3.VAL MS")
18261  field(MALM, "8")
18262  field(NELM, "1")
18263  field(INDX, "2")
18264  field(PREC, "1")
18265  field(FLNK, "$(P):LS01:Z9:I3.PROC")
18266 }
18267 record(ai, "$(P):LS01:Z9:I3") {
18268  field(SCAN, "Passive")
18269  field(INP, "$(P):LS01:Z9:I3:ARRAY.VAL MS")
18270  field(PREC, "1")
18271  field(FLNK, "$(P):LS01:Z9:D3:ARRAY.PROC")
18272 }
18273 
18274 ##
18275 ## Read the ZONE D setting.
18276 ##
18277 record(subArray, "$(P):LS01:Z9:D3:ARRAY") {
18278  field(SCAN, "Passive")
18279  field(FTVL, "DOUBLE")
18280  field(INP, "$(P):LS01:Z9:ALL3.VAL MS")
18281  field(MALM, "8")
18282  field(NELM, "1")
18283  field(INDX, "3")
18284  field(PREC, "1")
18285  field(FLNK, "$(P):LS01:Z9:D3.PROC")
18286 }
18287 record(ai, "$(P):LS01:Z9:D3") {
18288  field(SCAN, "Passive")
18289  field(INP, "$(P):LS01:Z9:D3:ARRAY.VAL MS")
18290  field(PREC, "1")
18291  field(FLNK, "$(P):LS01:Z9:MOUT3:ARRAY.PROC")
18292 }
18293 
18294 ##
18295 ## Read the ZONE MOUT setting.
18296 ##
18297 record(subArray, "$(P):LS01:Z9:MOUT3:ARRAY") {
18298  field(SCAN, "Passive")
18299  field(FTVL, "DOUBLE")
18300  field(INP, "$(P):LS01:Z9:ALL3.VAL MS")
18301  field(MALM, "8")
18302  field(NELM, "1")
18303  field(INDX, "4")
18304  field(PREC, "1")
18305  field(FLNK, "$(P):LS01:Z9:MOUT3.PROC")
18306 }
18307 record(ai, "$(P):LS01:Z9:MOUT3") {
18308  field(SCAN, "Passive")
18309  field(INP, "$(P):LS01:Z9:MOUT3:ARRAY.VAL MS")
18310  field(PREC, "1")
18311  field(FLNK, "$(P):LS01:Z9:RANGE3:ARRAY.PROC")
18312 }
18313 
18314 ##
18315 ## Read the ZONE RANGE setting.
18316 ##
18317 record(subArray, "$(P):LS01:Z9:RANGE3:ARRAY") {
18318  field(SCAN, "Passive")
18319  field(FTVL, "DOUBLE")
18320  field(INP, "$(P):LS01:Z9:ALL3.VAL MS")
18321  field(MALM, "8")
18322  field(NELM, "1")
18323  field(INDX, "5")
18324  field(PREC, "1")
18325  field(FLNK, "$(P):LS01:Z9:RANGE3.PROC")
18326 }
18327 record(mbbi, "$(P):LS01:Z9:RANGE3") {
18328  field(INP, "$(P):LS01:Z9:RANGE3:ARRAY.VAL")
18329  field(SCAN, "Passive")
18330  field(ZRST, "Off")
18331  field(ZRVL, "0")
18332  field(ONST, "Range1/Low")
18333  field(ONVL, "1")
18334  field(TWST, "Range2/Medium")
18335  field(TWVL, "2")
18336  field(THST, "Range3/High")
18337  field(THVL, "3")
18338  field(FRST, "Range4")
18339  field(FRVL, "4")
18340  field(FVST, "Range5")
18341  field(FVVL, "5")
18342  field(FLNK, "$(P):LS01:Z9:INPUT3:ARRAY.PROC")
18343 }
18344 
18345 ##
18346 ## Read the ZONE INPUT setting.
18347 ##
18348 record(subArray, "$(P):LS01:Z9:INPUT3:ARRAY") {
18349  field(SCAN, "Passive")
18350  field(FTVL, "DOUBLE")
18351  field(INP, "$(P):LS01:Z9:ALL3.VAL MS")
18352  field(MALM, "8")
18353  field(NELM, "1")
18354  field(INDX, "6")
18355  field(PREC, "1")
18356  field(FLNK, "$(P):LS01:Z9:INPUT3.PROC")
18357 }
18358 record(mbbi, "$(P):LS01:Z9:INPUT3") {
18359  field(INP, "$(P):LS01:Z9:INPUT3:ARRAY.VAL")
18360  field(SCAN, "Passive")
18361  field(ZRST, "None")
18362  field(ZRVL, "0")
18363  field(ONST, "Input A")
18364  field(ONVL, "1")
18365  field(TWST, "Input B")
18366  field(TWVL, "2")
18367  field(THST, "Input C")
18368  field(THVL, "3")
18369  field(FRST, "Input D")
18370  field(FRVL, "4")
18371  field(FVST, "Input D2")
18372  field(FVVL, "5")
18373  field(SXST, "Input D3")
18374  field(SXVL, "6")
18375  field(SVST, "Input D4")
18376  field(SVVL, "7")
18377  field(EIST, "Input D5")
18378  field(EIVL, "8")
18379  field(FLNK, "$(P):LS01:Z9:RATE3:ARRAY.PROC")
18380 }
18381 
18382 ##
18383 ## Read the ZONE RATE setting.
18384 ##
18385 record(subArray, "$(P):LS01:Z9:RATE3:ARRAY") {
18386  field(SCAN, "Passive")
18387  field(FTVL, "DOUBLE")
18388  field(INP, "$(P):LS01:Z9:ALL3.VAL MS")
18389  field(MALM, "8")
18390  field(NELM, "1")
18391  field(INDX, "7")
18392  field(PREC, "1")
18393  field(FLNK, "$(P):LS01:Z9:RATE3.PROC")
18394 }
18395 record(ai, "$(P):LS01:Z9:RATE3") {
18396  field(SCAN, "Passive")
18397  field(INP, "$(P):LS01:Z9:RATE3:ARRAY.VAL MS")
18398  field(PREC, "1")
18399  field(FLNK, "$(P):LS01:Z9:INITCALC3.PROC")
18400 }
18401 
18402 ##############################################################
18403 ##
18404 ## Populate the write records below with the current values.
18405 ## Only do this once at startup.
18406 ##
18407 ###############################################################
18408 
18409 record(calcout, "$(P):LS01:Z9:INITCALC3") {
18410  field(INPA, "0")
18411  field(CALC, "A")
18412  field(VAL, "0")
18413  field(DOPT, "Use OCAL")
18414  field(OOPT, "When Zero")
18415  field(OCAL, "1")
18416  field(OUT, "$(P):LS01:Z9:INITUB3.PROC")
18417 }
18418 
18419 record(dfanout, "$(P):LS01:Z9:INITUB3") {
18420  field(OMSL, "closed_loop")
18421  field(DOL, "$(P):LS01:Z9:UB3.VAL")
18422  field(OUTA, "$(P):LS01:Z9:UB_S3.VAL PP")
18423  field(FLNK, "$(P):LS01:Z9:INITP3.PROC")
18424 }
18425 record(dfanout, "$(P):LS01:Z9:INITP3") {
18426  field(OMSL, "closed_loop")
18427  field(DOL, "$(P):LS01:Z9:P3.VAL")
18428  field(OUTA, "$(P):LS01:Z9:P_S3.VAL PP")
18429  field(FLNK, "$(P):LS01:Z9:INITI3.PROC")
18430 }
18431 record(dfanout, "$(P):LS01:Z9:INITI3") {
18432  field(OMSL, "closed_loop")
18433  field(DOL, "$(P):LS01:Z9:I3.VAL")
18434  field(OUTA, "$(P):LS01:Z9:I_S3.VAL PP")
18435  field(FLNK, "$(P):LS01:Z9:INITD3.PROC")
18436 }
18437 record(dfanout, "$(P):LS01:Z9:INITD3") {
18438  field(OMSL, "closed_loop")
18439  field(DOL, "$(P):LS01:Z9:D3.VAL")
18440  field(OUTA, "$(P):LS01:Z9:D_S3.VAL PP")
18441  field(FLNK, "$(P):LS01:Z9:INITMOUT3.PROC")
18442 }
18443 record(dfanout, "$(P):LS01:Z9:INITMOUT3") {
18444  field(OMSL, "closed_loop")
18445  field(DOL, "$(P):LS01:Z9:MOUT3.VAL")
18446  field(OUTA, "$(P):LS01:Z9:MOUT_S3.VAL PP")
18447  field(FLNK, "$(P):LS01:Z9:INITRANGE3.PROC")
18448 }
18449 record(dfanout, "$(P):LS01:Z9:INITRANGE3") {
18450  field(OMSL, "closed_loop")
18451  field(DOL, "$(P):LS01:Z9:RANGE3.VAL")
18452  field(OUTA, "$(P):LS01:Z9:RANGE_S3.VAL PP")
18453  field(FLNK, "$(P):LS01:Z9:INITINPUT3.PROC")
18454 }
18455 record(dfanout, "$(P):LS01:Z9:INITINPUT3") {
18456  field(OMSL, "closed_loop")
18457  field(DOL, "$(P):LS01:Z9:INPUT3.VAL")
18458  field(OUTA, "$(P):LS01:Z9:INPUT_S3.VAL PP")
18459  field(FLNK, "$(P):LS01:Z9:INITRATE3.PROC")
18460 }
18461 record(dfanout, "$(P):LS01:Z9:INITRATE3") {
18462  field(OMSL, "closed_loop")
18463  field(DOL, "$(P):LS01:Z9:RATE3.VAL")
18464  field(OUTA, "$(P):LS01:Z9:RATE_S3.VAL PP")
18465  field(FLNK, "$(P):LS01:Z9:INITCOUNT3.PROC")
18466 }
18467 
18468 record(dfanout, "$(P):LS01:Z9:INITCOUNT3") {
18469  field(DOL, "1")
18470  field(OUTA, "$(P):LS01:Z9:INITCALC3.A")
18471 }
18472 
18473 
18474 
18475 #############################################
18476 # Write records. There is a calcout record to
18477 # do the actual write.
18478 #############################################
18479 
18480 ##
18481 ## Set the ZONE upper boundary setting.
18482 ##
18483 record(ao, "$(P):LS01:Z9:UB_S3") {
18484  field(SCAN, "Passive")
18485  field(PREC, "1")
18486  field(SDIS, "$(P):LS01:DISABLE")
18487 }
18488 
18489 ##
18490 ## Set the ZONE P setting.
18491 ##
18492 record(ao, "$(P):LS01:Z9:P_S3") {
18493  field(SCAN, "Passive")
18494  field(PREC, "1")
18495  field(SDIS, "$(P):LS01:DISABLE")
18496 }
18497 
18498 ##
18499 ## Set the ZONE I setting.
18500 ##
18501 record(ao, "$(P):LS01:Z9:I_S3") {
18502  field(SCAN, "Passive")
18503  field(PREC, "1")
18504  field(SDIS, "$(P):LS01:DISABLE")
18505 }
18506 
18507 ##
18508 ## Set the ZONE D setting.
18509 ##
18510 record(ao, "$(P):LS01:Z9:D_S3") {
18511  field(SCAN, "Passive")
18512  field(PREC, "1")
18513  field(SDIS, "$(P):LS01:DISABLE")
18514 }
18515 
18516 ##
18517 ## Set the ZONE MOUT setting.
18518 ##
18519 record(ao, "$(P):LS01:Z9:MOUT_S3") {
18520  field(SCAN, "Passive")
18521  field(PREC, "1")
18522  field(SDIS, "$(P):LS01:DISABLE")
18523 }
18524 
18525 ##
18526 ## Set the ZONE RANGE setting.
18527 ##
18528 record(mbbo, "$(P):LS01:Z9:RANGE_S3") {
18529  field(SCAN, "Passive")
18530  field(ZRST, "Off")
18531  field(ZRVL, "0")
18532  field(ONST, "Range1/Low")
18533  field(ONVL, "1")
18534  field(TWST, "Range2/Medium")
18535  field(TWVL, "2")
18536  field(THST, "Range3/High")
18537  field(THVL, "3")
18538  field(FRST, "Range4")
18539  field(FRVL, "4")
18540  field(FVST, "Range5")
18541  field(FVVL, "5")
18542  field(SDIS, "$(P):LS01:DISABLE")
18543 }
18544 
18545 ##
18546 ## Set the ZONE INPUT setting.
18547 ##
18548 record(mbbo, "$(P):LS01:Z9:INPUT_S3") {
18549  field(ZRST, "None")
18550  field(ZRVL, "0")
18551  field(ONST, "Input A")
18552  field(ONVL, "1")
18553  field(TWST, "Input B")
18554  field(TWVL, "2")
18555  field(THST, "Input C")
18556  field(THVL, "3")
18557  field(FRST, "Input D")
18558  field(FRVL, "4")
18559  field(FVST, "Input D2")
18560  field(FVVL, "5")
18561  field(SXST, "Input D3")
18562  field(SXVL, "6")
18563  field(SVST, "Input D4")
18564  field(SVVL, "7")
18565  field(EIST, "Input D5")
18566  field(EIVL, "8")
18567  field(SDIS, "$(P):LS01:DISABLE")
18568 }
18569 
18570 ##
18571 ## Set the ZONE RATE setting.
18572 ##
18573 record(ao, "$(P):LS01:Z9:RATE_S3") {
18574  field(SCAN, "Passive")
18575  field(PREC, "1")
18576  field(SDIS, "$(P):LS01:DISABLE")
18577 }
18578 
18579 ##
18580 ## Record to write the ZONE parameters.
18581 ##
18582 record(calcout, "$(P):LS01:Z9:SET3") {
18583  field(INPA, "$(P):LS01:Z9:UB_S3")
18584  field(INPB, "$(P):LS01:Z9:P_S3")
18585  field(INPC, "$(P):LS01:Z9:I_S3")
18586  field(INPD, "$(P):LS01:Z9:D_S3")
18587  field(INPE, "$(P):LS01:Z9:MOUT_S3")
18588  field(INPF, "$(P):LS01:Z9:RANGE_S3")
18589  field(INPG, "$(P):LS01:Z9:INPUT_S3")
18590  field(INPH, "$(P):LS01:Z9:RATE_S3")
18591  field(CALC, "0")
18592  field(DTYP, "stream")
18593  field(OUT, "@ls336.proto setZONE(3,9) L0 0")
18594  field(SDIS, "$(P):LS01:DISABLE")
18595  field(FLNK, "$(P):LS01:Z9:ALL3.PROC")
18596 }
18597 
18598 
18599 
18600 
18601 
18602 
18603 
18604 
18605 
18606 
18607 record(mbbi, "$(P):LS01:Z9:RANGE3") {
18608  field(ZRST, "Off")
18609  field(ONST, "On")
18610  field(TWST, "")
18611  field(THST, "")
18612  field(FRST, "")
18613  field(FVST, "")
18614 }
18615 
18616 record(mbbo, "$(P):LS01:Z9:RANGE_S3") {
18617  field(ZRST, "Off")
18618  field(ONST, "On")
18619  field(TWST, "")
18620  field(THST, "")
18621  field(FRST, "")
18622  field(FVST, "")
18623 }
18624 
18625 
18626 
18627 
18628 
18629 
18630 # This just includes the zone file and overrides the RANGE options
18631 # for the analog control channels.
18632 
18633 #######################################
18634 #
18635 # Template to support reading and setting
18636 # controller ZONE parameters. It reads the ZONE
18637 # parameters into an array, then uses subArrays to
18638 # extract each parameter.
18639 #
18640 # This template is used by the output template
18641 # and it needs the following macros:
18642 #
18643 # ZONE: zone number
18644 # OUT: output number
18645 #
18646 #######################################
18647 
18648 ##
18649 ## Read the ZONE setting into an array (8 values)
18650 ##
18651 record(waveform, "$(P):LS01:Z10:ALL3") {
18652  field(DTYP, "stream")
18653  field(SDIS, "$(P):LS01:DISABLE_POLL")
18654  field(INP, "@ls336.proto getZONE(3,10) L0 0")
18655  field(SCAN, "Passive")
18656  field(NELM, "8")
18657  field(FTVL, "DOUBLE")
18658  field(PREC, "1")
18659  field(FLNK, "$(P):LS01:Z10:UB3:ARRAY.PROC")
18660 }
18661 
18662 ##
18663 ## Read the ZONE upper boundary setting.
18664 ##
18665 record(subArray, "$(P):LS01:Z10:UB3:ARRAY") {
18666  field(SCAN, "Passive")
18667  field(FTVL, "DOUBLE")
18668  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
18669  field(MALM, "8")
18670  field(NELM, "1")
18671  field(INDX, "0")
18672  field(PREC, "1")
18673  field(FLNK, "$(P):LS01:Z10:UB3.PROC")
18674 }
18675 record(ai, "$(P):LS01:Z10:UB3") {
18676  field(SCAN, "Passive")
18677  field(INP, "$(P):LS01:Z10:UB3:ARRAY.VAL MS")
18678  field(PREC, "1")
18679  field(FLNK, "$(P):LS01:Z10:P3:ARRAY.PROC")
18680 }
18681 
18682 ##
18683 ## Read the ZONE P setting.
18684 ##
18685 record(subArray, "$(P):LS01:Z10:P3:ARRAY") {
18686  field(SCAN, "Passive")
18687  field(FTVL, "DOUBLE")
18688  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
18689  field(MALM, "8")
18690  field(NELM, "1")
18691  field(INDX, "1")
18692  field(PREC, "1")
18693  field(FLNK, "$(P):LS01:Z10:P3.PROC")
18694 }
18695 record(ai, "$(P):LS01:Z10:P3") {
18696  field(SCAN, "Passive")
18697  field(INP, "$(P):LS01:Z10:P3:ARRAY.VAL MS")
18698  field(PREC, "1")
18699  field(FLNK, "$(P):LS01:Z10:I3:ARRAY.PROC")
18700 }
18701 
18702 ##
18703 ## Read the ZONE I setting.
18704 ##
18705 record(subArray, "$(P):LS01:Z10:I3:ARRAY") {
18706  field(SCAN, "Passive")
18707  field(FTVL, "DOUBLE")
18708  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
18709  field(MALM, "8")
18710  field(NELM, "1")
18711  field(INDX, "2")
18712  field(PREC, "1")
18713  field(FLNK, "$(P):LS01:Z10:I3.PROC")
18714 }
18715 record(ai, "$(P):LS01:Z10:I3") {
18716  field(SCAN, "Passive")
18717  field(INP, "$(P):LS01:Z10:I3:ARRAY.VAL MS")
18718  field(PREC, "1")
18719  field(FLNK, "$(P):LS01:Z10:D3:ARRAY.PROC")
18720 }
18721 
18722 ##
18723 ## Read the ZONE D setting.
18724 ##
18725 record(subArray, "$(P):LS01:Z10:D3:ARRAY") {
18726  field(SCAN, "Passive")
18727  field(FTVL, "DOUBLE")
18728  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
18729  field(MALM, "8")
18730  field(NELM, "1")
18731  field(INDX, "3")
18732  field(PREC, "1")
18733  field(FLNK, "$(P):LS01:Z10:D3.PROC")
18734 }
18735 record(ai, "$(P):LS01:Z10:D3") {
18736  field(SCAN, "Passive")
18737  field(INP, "$(P):LS01:Z10:D3:ARRAY.VAL MS")
18738  field(PREC, "1")
18739  field(FLNK, "$(P):LS01:Z10:MOUT3:ARRAY.PROC")
18740 }
18741 
18742 ##
18743 ## Read the ZONE MOUT setting.
18744 ##
18745 record(subArray, "$(P):LS01:Z10:MOUT3:ARRAY") {
18746  field(SCAN, "Passive")
18747  field(FTVL, "DOUBLE")
18748  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
18749  field(MALM, "8")
18750  field(NELM, "1")
18751  field(INDX, "4")
18752  field(PREC, "1")
18753  field(FLNK, "$(P):LS01:Z10:MOUT3.PROC")
18754 }
18755 record(ai, "$(P):LS01:Z10:MOUT3") {
18756  field(SCAN, "Passive")
18757  field(INP, "$(P):LS01:Z10:MOUT3:ARRAY.VAL MS")
18758  field(PREC, "1")
18759  field(FLNK, "$(P):LS01:Z10:RANGE3:ARRAY.PROC")
18760 }
18761 
18762 ##
18763 ## Read the ZONE RANGE setting.
18764 ##
18765 record(subArray, "$(P):LS01:Z10:RANGE3:ARRAY") {
18766  field(SCAN, "Passive")
18767  field(FTVL, "DOUBLE")
18768  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
18769  field(MALM, "8")
18770  field(NELM, "1")
18771  field(INDX, "5")
18772  field(PREC, "1")
18773  field(FLNK, "$(P):LS01:Z10:RANGE3.PROC")
18774 }
18775 record(mbbi, "$(P):LS01:Z10:RANGE3") {
18776  field(INP, "$(P):LS01:Z10:RANGE3:ARRAY.VAL")
18777  field(SCAN, "Passive")
18778  field(ZRST, "Off")
18779  field(ZRVL, "0")
18780  field(ONST, "Range1/Low")
18781  field(ONVL, "1")
18782  field(TWST, "Range2/Medium")
18783  field(TWVL, "2")
18784  field(THST, "Range3/High")
18785  field(THVL, "3")
18786  field(FRST, "Range4")
18787  field(FRVL, "4")
18788  field(FVST, "Range5")
18789  field(FVVL, "5")
18790  field(FLNK, "$(P):LS01:Z10:INPUT3:ARRAY.PROC")
18791 }
18792 
18793 ##
18794 ## Read the ZONE INPUT setting.
18795 ##
18796 record(subArray, "$(P):LS01:Z10:INPUT3:ARRAY") {
18797  field(SCAN, "Passive")
18798  field(FTVL, "DOUBLE")
18799  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
18800  field(MALM, "8")
18801  field(NELM, "1")
18802  field(INDX, "6")
18803  field(PREC, "1")
18804  field(FLNK, "$(P):LS01:Z10:INPUT3.PROC")
18805 }
18806 record(mbbi, "$(P):LS01:Z10:INPUT3") {
18807  field(INP, "$(P):LS01:Z10:INPUT3:ARRAY.VAL")
18808  field(SCAN, "Passive")
18809  field(ZRST, "None")
18810  field(ZRVL, "0")
18811  field(ONST, "Input A")
18812  field(ONVL, "1")
18813  field(TWST, "Input B")
18814  field(TWVL, "2")
18815  field(THST, "Input C")
18816  field(THVL, "3")
18817  field(FRST, "Input D")
18818  field(FRVL, "4")
18819  field(FVST, "Input D2")
18820  field(FVVL, "5")
18821  field(SXST, "Input D3")
18822  field(SXVL, "6")
18823  field(SVST, "Input D4")
18824  field(SVVL, "7")
18825  field(EIST, "Input D5")
18826  field(EIVL, "8")
18827  field(FLNK, "$(P):LS01:Z10:RATE3:ARRAY.PROC")
18828 }
18829 
18830 ##
18831 ## Read the ZONE RATE setting.
18832 ##
18833 record(subArray, "$(P):LS01:Z10:RATE3:ARRAY") {
18834  field(SCAN, "Passive")
18835  field(FTVL, "DOUBLE")
18836  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
18837  field(MALM, "8")
18838  field(NELM, "1")
18839  field(INDX, "7")
18840  field(PREC, "1")
18841  field(FLNK, "$(P):LS01:Z10:RATE3.PROC")
18842 }
18843 record(ai, "$(P):LS01:Z10:RATE3") {
18844  field(SCAN, "Passive")
18845  field(INP, "$(P):LS01:Z10:RATE3:ARRAY.VAL MS")
18846  field(PREC, "1")
18847  field(FLNK, "$(P):LS01:Z10:INITCALC3.PROC")
18848 }
18849 
18850 ##############################################################
18851 ##
18852 ## Populate the write records below with the current values.
18853 ## Only do this once at startup.
18854 ##
18855 ###############################################################
18856 
18857 record(calcout, "$(P):LS01:Z10:INITCALC3") {
18858  field(INPA, "0")
18859  field(CALC, "A")
18860  field(VAL, "0")
18861  field(DOPT, "Use OCAL")
18862  field(OOPT, "When Zero")
18863  field(OCAL, "1")
18864  field(OUT, "$(P):LS01:Z10:INITUB3.PROC")
18865 }
18866 
18867 record(dfanout, "$(P):LS01:Z10:INITUB3") {
18868  field(OMSL, "closed_loop")
18869  field(DOL, "$(P):LS01:Z10:UB3.VAL")
18870  field(OUTA, "$(P):LS01:Z10:UB_S3.VAL PP")
18871  field(FLNK, "$(P):LS01:Z10:INITP3.PROC")
18872 }
18873 record(dfanout, "$(P):LS01:Z10:INITP3") {
18874  field(OMSL, "closed_loop")
18875  field(DOL, "$(P):LS01:Z10:P3.VAL")
18876  field(OUTA, "$(P):LS01:Z10:P_S3.VAL PP")
18877  field(FLNK, "$(P):LS01:Z10:INITI3.PROC")
18878 }
18879 record(dfanout, "$(P):LS01:Z10:INITI3") {
18880  field(OMSL, "closed_loop")
18881  field(DOL, "$(P):LS01:Z10:I3.VAL")
18882  field(OUTA, "$(P):LS01:Z10:I_S3.VAL PP")
18883  field(FLNK, "$(P):LS01:Z10:INITD3.PROC")
18884 }
18885 record(dfanout, "$(P):LS01:Z10:INITD3") {
18886  field(OMSL, "closed_loop")
18887  field(DOL, "$(P):LS01:Z10:D3.VAL")
18888  field(OUTA, "$(P):LS01:Z10:D_S3.VAL PP")
18889  field(FLNK, "$(P):LS01:Z10:INITMOUT3.PROC")
18890 }
18891 record(dfanout, "$(P):LS01:Z10:INITMOUT3") {
18892  field(OMSL, "closed_loop")
18893  field(DOL, "$(P):LS01:Z10:MOUT3.VAL")
18894  field(OUTA, "$(P):LS01:Z10:MOUT_S3.VAL PP")
18895  field(FLNK, "$(P):LS01:Z10:INITRANGE3.PROC")
18896 }
18897 record(dfanout, "$(P):LS01:Z10:INITRANGE3") {
18898  field(OMSL, "closed_loop")
18899  field(DOL, "$(P):LS01:Z10:RANGE3.VAL")
18900  field(OUTA, "$(P):LS01:Z10:RANGE_S3.VAL PP")
18901  field(FLNK, "$(P):LS01:Z10:INITINPUT3.PROC")
18902 }
18903 record(dfanout, "$(P):LS01:Z10:INITINPUT3") {
18904  field(OMSL, "closed_loop")
18905  field(DOL, "$(P):LS01:Z10:INPUT3.VAL")
18906  field(OUTA, "$(P):LS01:Z10:INPUT_S3.VAL PP")
18907  field(FLNK, "$(P):LS01:Z10:INITRATE3.PROC")
18908 }
18909 record(dfanout, "$(P):LS01:Z10:INITRATE3") {
18910  field(OMSL, "closed_loop")
18911  field(DOL, "$(P):LS01:Z10:RATE3.VAL")
18912  field(OUTA, "$(P):LS01:Z10:RATE_S3.VAL PP")
18913  field(FLNK, "$(P):LS01:Z10:INITCOUNT3.PROC")
18914 }
18915 
18916 record(dfanout, "$(P):LS01:Z10:INITCOUNT3") {
18917  field(DOL, "1")
18918  field(OUTA, "$(P):LS01:Z10:INITCALC3.A")
18919 }
18920 
18921 
18922 
18923 #############################################
18924 # Write records. There is a calcout record to
18925 # do the actual write.
18926 #############################################
18927 
18928 ##
18929 ## Set the ZONE upper boundary setting.
18930 ##
18931 record(ao, "$(P):LS01:Z10:UB_S3") {
18932  field(SCAN, "Passive")
18933  field(PREC, "1")
18934  field(SDIS, "$(P):LS01:DISABLE")
18935 }
18936 
18937 ##
18938 ## Set the ZONE P setting.
18939 ##
18940 record(ao, "$(P):LS01:Z10:P_S3") {
18941  field(SCAN, "Passive")
18942  field(PREC, "1")
18943  field(SDIS, "$(P):LS01:DISABLE")
18944 }
18945 
18946 ##
18947 ## Set the ZONE I setting.
18948 ##
18949 record(ao, "$(P):LS01:Z10:I_S3") {
18950  field(SCAN, "Passive")
18951  field(PREC, "1")
18952  field(SDIS, "$(P):LS01:DISABLE")
18953 }
18954 
18955 ##
18956 ## Set the ZONE D setting.
18957 ##
18958 record(ao, "$(P):LS01:Z10:D_S3") {
18959  field(SCAN, "Passive")
18960  field(PREC, "1")
18961  field(SDIS, "$(P):LS01:DISABLE")
18962 }
18963 
18964 ##
18965 ## Set the ZONE MOUT setting.
18966 ##
18967 record(ao, "$(P):LS01:Z10:MOUT_S3") {
18968  field(SCAN, "Passive")
18969  field(PREC, "1")
18970  field(SDIS, "$(P):LS01:DISABLE")
18971 }
18972 
18973 ##
18974 ## Set the ZONE RANGE setting.
18975 ##
18976 record(mbbo, "$(P):LS01:Z10:RANGE_S3") {
18977  field(SCAN, "Passive")
18978  field(ZRST, "Off")
18979  field(ZRVL, "0")
18980  field(ONST, "Range1/Low")
18981  field(ONVL, "1")
18982  field(TWST, "Range2/Medium")
18983  field(TWVL, "2")
18984  field(THST, "Range3/High")
18985  field(THVL, "3")
18986  field(FRST, "Range4")
18987  field(FRVL, "4")
18988  field(FVST, "Range5")
18989  field(FVVL, "5")
18990  field(SDIS, "$(P):LS01:DISABLE")
18991 }
18992 
18993 ##
18994 ## Set the ZONE INPUT setting.
18995 ##
18996 record(mbbo, "$(P):LS01:Z10:INPUT_S3") {
18997  field(ZRST, "None")
18998  field(ZRVL, "0")
18999  field(ONST, "Input A")
19000  field(ONVL, "1")
19001  field(TWST, "Input B")
19002  field(TWVL, "2")
19003  field(THST, "Input C")
19004  field(THVL, "3")
19005  field(FRST, "Input D")
19006  field(FRVL, "4")
19007  field(FVST, "Input D2")
19008  field(FVVL, "5")
19009  field(SXST, "Input D3")
19010  field(SXVL, "6")
19011  field(SVST, "Input D4")
19012  field(SVVL, "7")
19013  field(EIST, "Input D5")
19014  field(EIVL, "8")
19015  field(SDIS, "$(P):LS01:DISABLE")
19016 }
19017 
19018 ##
19019 ## Set the ZONE RATE setting.
19020 ##
19021 record(ao, "$(P):LS01:Z10:RATE_S3") {
19022  field(SCAN, "Passive")
19023  field(PREC, "1")
19024  field(SDIS, "$(P):LS01:DISABLE")
19025 }
19026 
19027 ##
19028 ## Record to write the ZONE parameters.
19029 ##
19030 record(calcout, "$(P):LS01:Z10:SET3") {
19031  field(INPA, "$(P):LS01:Z10:UB_S3")
19032  field(INPB, "$(P):LS01:Z10:P_S3")
19033  field(INPC, "$(P):LS01:Z10:I_S3")
19034  field(INPD, "$(P):LS01:Z10:D_S3")
19035  field(INPE, "$(P):LS01:Z10:MOUT_S3")
19036  field(INPF, "$(P):LS01:Z10:RANGE_S3")
19037  field(INPG, "$(P):LS01:Z10:INPUT_S3")
19038  field(INPH, "$(P):LS01:Z10:RATE_S3")
19039  field(CALC, "0")
19040  field(DTYP, "stream")
19041  field(OUT, "@ls336.proto setZONE(3,10) L0 0")
19042  field(SDIS, "$(P):LS01:DISABLE")
19043  field(FLNK, "$(P):LS01:Z10:ALL3.PROC")
19044 }
19045 
19046 
19047 
19048 
19049 
19050 
19051 
19052 
19053 
19054 
19055 record(mbbi, "$(P):LS01:Z10:RANGE3") {
19056  field(ZRST, "Off")
19057  field(ONST, "On")
19058  field(TWST, "")
19059  field(THST, "")
19060  field(FRST, "")
19061  field(FVST, "")
19062 }
19063 
19064 record(mbbo, "$(P):LS01:Z10:RANGE_S3") {
19065  field(ZRST, "Off")
19066  field(ONST, "On")
19067  field(TWST, "")
19068  field(THST, "")
19069  field(FRST, "")
19070  field(FVST, "")
19071 }
19072 
19073 
19074 
19075 
19076 
19077 
19078 # This is included in lakeshore336.template
19079 # This template is for the common functionality shared by all 4 outputs.
19080 #
19081 # There is some logic in this database to provide put_callback functionality
19082 # for setting the temperature and waiting for it to be in range. The input
19083 # sensor PV name used for the in-window calculation changes depending on
19084 # the input sensor selected. In order for this to work it requires the following
19085 # macros:
19086 #
19087 # INPUTA - Sensor 1 PV name
19088 # INPUTB - Sensor 2 PV name
19089 # INPUTC - Sensor 3 PV name
19090 # INPUTD - Sensor 4 PV name
19091 # INPUTD2 - Sensor D2 PV name
19092 # INPUTD3 - Sensor D3 PV name
19093 # INPUTD4 - Sensor D4 PV name
19094 # INPUTD5 - Sensor D5 PV name
19095 # TOLERANCE (optional - defaults to 1)
19096 #
19097 # The input link names must fit into a stringout record for this to work.
19098 # The above link names default to a dummy record.
19099 
19100 ################################################################
19101 # Read records
19102 ################################################################
19103 
19104 ##
19105 ## Record holding the output number
19106 ##
19107 record(stringout, "$(P):LS01:OUTPUT4") {
19108  field(DTYP, "Soft Channel")
19109  field(VAL, "4")
19110  field(PINI, "YES")
19111 }
19112 
19113 ##
19114 ## Read the setpoint temperature.
19115 ##
19116 record(ai, "$(P):LS01:SETP4") {
19117  field(DTYP, "stream")
19118  field(SDIS, "$(P):LS01:DISABLE_POLL")
19119  field(INP, "@ls336.proto getSETP(4) L0 0")
19120  field(SCAN, "1 second")
19121  field(PREC, "3")
19122  field(EGU, "K")
19123  info(archive, "Monitor, 00:00:01, VAL")
19124 }
19125 
19126 ##
19127 ## Read the setpoint limit
19128 ##
19129 
19130 ##
19131 ## Read the ramp parameter. This also populates the ramp status $(P):LS01:RAMPST4,
19132 ##
19133 record(ai, "$(P):LS01:RAMP4") {
19134  field(DTYP, "stream")
19135  field(SDIS, "$(P):LS01:DISABLE_POLL")
19136  field(INP, "@ls336.proto getRAMP(4,$(P):LS01:RAMPST4) L0 0")
19137  field(SCAN, "5 second")
19138  field(PREC, "3")
19139  field(EGU, "K/minute")
19140 }
19141 
19142 ##
19143 ## Read the ramp status parameter.
19144 ##
19145 ## 0=off
19146 ## 1=on
19147 ##
19148 record(bi, "$(P):LS01:RAMPST4") {
19149  field(DTYP, "Soft Channel")
19150  field(ZNAM, "Off")
19151  field(ONAM, "On")
19152 }
19153 
19154 ##
19155 ## Read the range parameter (the heater output power range).
19156 ## This is output specific and is defined in another file.
19157 ##
19158 record(mbbi, "$(P):LS01:RANGE4") {
19159  field(DTYP, "stream")
19160  field(SDIS, "$(P):LS01:DISABLE_POLL")
19161  field(ZRVL, "0")
19162  field(ONVL, "1")
19163  field(TWVL, "2")
19164  field(THVL, "3")
19165  field(FRVL, "4")
19166  field(FVVL, "5")
19167  field(SCAN, "5 second")
19168  field(INP, "@ls336.proto getRANGE(4) L0 0")
19169 }
19170 
19171 ##
19172 ## Read the mode to use for outmode
19173 ## This is output specific and is defined in another file.
19174 ##
19175 record(mbbi, "$(P):LS01:OMMODE4") {
19176 }
19177 
19178 ##
19179 ## Read the manual output parameter.
19180 ##
19181 record(ai, "$(P):LS01:MOUT4") {
19182  field(DTYP, "stream")
19183  field(SDIS, "$(P):LS01:DISABLE_POLL")
19184  field(INP, "@ls336.proto getMOUT(4) L0 0")
19185  field(SCAN, "5 second")
19186 }
19187 
19188 ##
19189 ## Read the PID P parameter. Pass the I and D records into the protocol to read those as well.
19190 ##
19191 record(ai, "$(P):LS01:P4") {
19192  field(DTYP, "stream")
19193  field(SDIS, "$(P):LS01:DISABLE_POLL")
19194  field(INP, "@ls336.proto getPID(4,$(P):LS01:I4,$(P):LS01:D4) L0 0")
19195  field(SCAN, "5 second")
19196 }
19197 
19198 ##
19199 ## Read the PID I parameter.
19200 ##
19201 record(ai, "$(P):LS01:I4") {
19202  field(DTYP, "Soft Channel")
19203  field(SCAN, "Passive")
19204 }
19205 
19206 ##
19207 ## Read the PID D parameter.
19208 ##
19209 record(ai, "$(P):LS01:D4") {
19210  field(DTYP, "Soft Channel")
19211  field(SCAN, "Passive")
19212 }
19213 
19214 ##
19215 ## Read the mode to use for outmode.
19216 ## This also populates the OMI and OMP records.
19217 ## The mbbi strings and values are defined in the output specific templates.
19218 ##
19219 record(mbbi, "$(P):LS01:OMM4") {
19220  field(DTYP, "stream")
19221  field(SDIS, "$(P):LS01:DISABLE_POLL")
19222  field(ZRVL, "0")
19223  field(ONVL, "1")
19224  field(TWVL, "2")
19225  field(THVL, "3")
19226  field(FRVL, "4")
19227  field(FVVL, "5")
19228  field(SCAN, "5 second")
19229  field(INP, "@ls336.proto getOM(4,$(P):LS01:OMI4,$(P):LS01:OMP4) L0 0")
19230 }
19231 
19232 ##
19233 ## Read the input to use for outmode
19234 ##
19235 record(mbbi, "$(P):LS01:OMI4") {
19236  field(DTYP, "Soft Channel")
19237  field(ZRST, "None")
19238  field(ZRVL, "0")
19239  field(ONST, "Input A")
19240  field(ONVL, "1")
19241  field(TWST, "Input B")
19242  field(TWVL, "2")
19243  field(THST, "Input C")
19244  field(THVL, "3")
19245  field(FRST, "Input D")
19246  field(FRVL, "4")
19247  field(FVST, "Input D2")
19248  field(FVVL, "5")
19249  field(SXST, "Input D3")
19250  field(SXVL, "6")
19251  field(SVST, "Input D4")
19252  field(SVVL, "7")
19253  field(EIST, "Input D5")
19254  field(EIVL, "8")
19255 }
19256 
19257 ##
19258 ## Read the power up mode to use for outmode
19259 ##
19260 record(mbbi, "$(P):LS01:OMP4") {
19261  field(DTYP, "Soft Channel")
19262  field(ZRST, "Off")
19263  field(ZRVL, "0")
19264  field(ONST, "On")
19265  field(ONVL, "1")
19266 }
19267 
19268 ################################################################
19269 # Write records
19270 ################################################################
19271 
19272 ##
19273 ## Set the setpoint temperature.
19274 ##
19275 record(ao, "$(P):LS01:SETP_S4") {
19276  field(DTYP, "stream")
19277  field(SDIS, "$(P):LS01:DISABLE")
19278  field(DESC, "Setpoint temperature")
19279  field(OUT, "@ls336.proto setSETP(4) L0 0")
19280  field(PREC, "3")
19281  field(FLNK, "$(P):LS01:SETP_S4_BUSYSET.PROC")
19282  field(EGU, "K")
19283  info(archive, "Monitor, 00:00:01, VAL")
19284 }
19285 
19286 ###############################################################################
19287 
19288 ##
19289 ## A few records to support put_callback on the setpoint. We use the busy record.
19290 ## A temperature window is used. The temperature must be within
19291 ## the window, before the callback is done.
19292 ##
19293 
19294 record(dfanout, "$(P):LS01:SETP_S4_BUSYSET")
19295 {
19296  field(VAL, "0")
19297  field(OUTA, "$(P):LS01:IN_WINDOW4.VAL PP")
19298  field(FLNK, "$(P):LS01:SETP_S4_BUSYSET2")
19299 }
19300 record(dfanout, "$(P):LS01:SETP_S4_BUSYSET2")
19301 {
19302  field(VAL, "1")
19303  field(OUTA, "$(P):LS01:SETP4.PROC PP")
19304  field(OUTB, "$(P):LS01:SETP_S4_BUSY PP")
19305  field(FLNK, "$(P):LS01:CALC_IN_WINDOW4")
19306 }
19307 record(busy, "$(P):LS01:SETP_S4_BUSY")
19308 {
19309 }
19310 record(calcout, "$(P):LS01:CALC_IN_WINDOW4") {
19311  field(PINI, "YES")
19312  field(INPA, "1")
19313  field(INPB, "$(P):LS01:DUMMY4.VAL")
19314  field(INPC, "$(P):LS01:SETP_S4.VAL")
19315  field(CALC, "((B>=(C-A))&&(B<=(C+A)))?1:0")
19316  field(OOPT, "Every Time")
19317  field(OUT, "$(P):LS01:IN_WINDOW4.VAL PP")
19318  field(DOPT, "Use CALC")
19319  field(SCAN, "1 second")
19320  field(PREC, "1")
19321  info(autosaveFields, "A")
19322  info(archive, "Monitor, 00:00:01, A B C VAL")
19323 }
19324 record(bo, "$(P):LS01:IN_WINDOW4") {
19325  field(DESC, "Temperature In Window")
19326  field(VAL, "0")
19327  field(PINI, "YES")
19328  field(OMSL, "supervisory")
19329  field(ZNAM, "Not In Window")
19330  field(ONAM, "In Window")
19331  info(archive, "Monitor, 00:00:01, VAL")
19332 }
19333 
19334 ##
19335 ## Set busy record 'done' when TIME_WINDOW4=1
19336 ##
19337 record(calcout, "$(P):LS01:CALC_BUSY_DONE4") {
19338  field(INPA, "$(P):LS01:IN_WINDOW4.VAL CP")
19339  field(CALC, "(A=1)?0:1")
19340  field(OOPT, "Every Time")
19341  field(OUT, "$(P):LS01:SETP_S4_BUSY.VAL PP")
19342 }
19343 
19344 ###############################################################################
19345 
19346 ##
19347 ## Dummy record to use for input link name default
19348 ##
19349 record(ai, "$(P):LS01:DUMMY4") {
19350 }
19351 
19352 ##
19353 ## Monitor $(P):LS01:OMI4 to determin which input sensor to use
19354 ## to deal with the callback. The below set of records automatically
19355 ## switch the input when the 'control input' is changed. They make
19356 ## use of the input sensor PV names passed into this template.
19357 ##
19358 record(calcout, "$(P):LS01:SET_4_INPUTA") {
19359  field(CALC, "A=1")
19360  field(INPA, "$(P):LS01:OMI4.VAL CP")
19361  field(DOPT, "Use OCAL")
19362  field(OVAL, "1")
19363  field(OOPT, "When Non-zero")
19364  field(OUT, "$(P):LS01:SET_4_INPUTA_LINK.PROC")
19365 }
19366 record(stringout, "$(P):LS01:SET_4_INPUTA_LINK") {
19367  field(VAL, "$(P):LS01:KRDG0.VAL CP")
19368  field(OUT, "$(P):LS01:CALC_IN_WINDOW4.INPB CA")
19369 }
19370 
19371 record(calcout, "$(P):LS01:SET_4_INPUTB") {
19372  field(CALC, "A=2")
19373  field(INPA, "$(P):LS01:OMI4.VAL CP")
19374  field(DOPT, "Use OCAL")
19375  field(OVAL, "1")
19376  field(OOPT, "When Non-zero")
19377  field(OUT, "$(P):LS01:SET_4_INPUTB_LINK.PROC")
19378 }
19379 record(stringout, "$(P):LS01:SET_4_INPUTB_LINK") {
19380  field(VAL, "$(P):LS01:KRDG1.VAL CP")
19381  field(OUT, "$(P):LS01:CALC_IN_WINDOW4.INPB CA")
19382 }
19383 
19384 record(calcout, "$(P):LS01:SET_4_INPUTC") {
19385  field(CALC, "A=3")
19386  field(INPA, "$(P):LS01:OMI4.VAL CP")
19387  field(DOPT, "Use OCAL")
19388  field(OVAL, "1")
19389  field(OOPT, "When Non-zero")
19390  field(OUT, "$(P):LS01:SET_4_INPUTC_LINK.PROC")
19391 }
19392 record(stringout, "$(P):LS01:SET_4_INPUTC_LINK") {
19393  field(VAL, "$(P):LS01:KRDG2.VAL CP")
19394  field(OUT, "$(P):LS01:CALC_IN_WINDOW4.INPB CA")
19395 }
19396 
19397 record(calcout, "$(P):LS01:SET_4_INPUTD") {
19398  field(CALC, "A=4")
19399  field(INPA, "$(P):LS01:OMI4.VAL CP")
19400  field(DOPT, "Use OCAL")
19401  field(OVAL, "1")
19402  field(OOPT, "When Non-zero")
19403  field(OUT, "$(P):LS01:SET_4_INPUTD_LINK.PROC")
19404 }
19405 record(stringout, "$(P):LS01:SET_4_INPUTD_LINK") {
19406  field(VAL, "$(P):LS01:KRDG3.VAL CP")
19407  field(OUT, "$(P):LS01:CALC_IN_WINDOW4.INPB CA")
19408 }
19409 
19410 record(calcout, "$(P):LS01:SET_4_INPUTD2") {
19411  field(CALC, "A=5")
19412  field(INPA, "$(P):LS01:OMI4.VAL CP")
19413  field(DOPT, "Use OCAL")
19414  field(OVAL, "1")
19415  field(OOPT, "When Non-zero")
19416  field(OUT, "$(P):LS01:SET_4_INPUTD2_LINK.PROC")
19417 }
19418 record(stringout, "$(P):LS01:SET_4_INPUTD2_LINK") {
19419  field(VAL, "$(P):LS01:KRDGD2.VAL CP")
19420  field(OUT, "$(P):LS01:CALC_IN_WINDOW4.INPB CA")
19421 }
19422 
19423 record(calcout, "$(P):LS01:SET_4_INPUTD3") {
19424  field(CALC, "A=6")
19425  field(INPA, "$(P):LS01:OMI4.VAL CP")
19426  field(DOPT, "Use OCAL")
19427  field(OVAL, "1")
19428  field(OOPT, "When Non-zero")
19429  field(OUT, "$(P):LS01:SET_4_INPUTD3_LINK.PROC")
19430 }
19431 record(stringout, "$(P):LS01:SET_4_INPUTD3_LINK") {
19432  field(VAL, "$(P):LS01:KRDGD3.VAL CP")
19433  field(OUT, "$(P):LS01:CALC_IN_WINDOW4.INPB CA")
19434 }
19435 
19436 record(calcout, "$(P):LS01:SET_4_INPUTD4") {
19437  field(CALC, "A=7")
19438  field(INPA, "$(P):LS01:OMI4.VAL CP")
19439  field(DOPT, "Use OCAL")
19440  field(OVAL, "1")
19441  field(OOPT, "When Non-zero")
19442  field(OUT, "$(P):LS01:SET_4_INPUTD4_LINK.PROC")
19443 }
19444 record(stringout, "$(P):LS01:SET_4_INPUTD4_LINK") {
19445  field(VAL, "$(P):LS01:KRDGD4.VAL CP")
19446  field(OUT, "$(P):LS01:CALC_IN_WINDOW4.INPB CA")
19447 }
19448 
19449 record(calcout, "$(P):LS01:SET_4_INPUTD5") {
19450  field(CALC, "A=8")
19451  field(INPA, "$(P):LS01:OMI4.VAL CP")
19452  field(DOPT, "Use OCAL")
19453  field(OVAL, "1")
19454  field(OOPT, "When Non-zero")
19455  field(OUT, "$(P):LS01:SET_4_INPUTD5_LINK.PROC")
19456 }
19457 record(stringout, "$(P):LS01:SET_4_INPUTD5_LINK") {
19458  field(VAL, "$(P):LS01:KRDGD5.VAL CP")
19459  field(OUT, "$(P):LS01:CALC_IN_WINDOW4.INPB CA")
19460 }
19461 
19462 
19463 
19464 ##
19465 ## Set the range parameter.
19466 ## The strings are output specific and is defined in another file.
19467 ##
19468 record(mbbo, "$(P):LS01:RANGE_S4") {
19469  field(DTYP, "stream")
19470  field(SDIS, "$(P):LS01:DISABLE")
19471  field(OUT, "@ls336.proto setRANGE(4) L0 0")
19472  field(FLNK, "$(P):LS01:RANGE4.PROC CA")
19473 }
19474 
19475 ##
19476 ## Set the ramp rate parameter.
19477 ##
19478 ## This is the desired temperate increase/decrease rate
19479 ## per second when heating/cooling.
19480 ##
19481 ## The ramp and ramp status parameters are actually one command
19482 ## for the lakeshore. Therefore one must pass into this
19483 ## record the existing/desired ramp status, as well as the
19484 ## desired ramp. This is done automatically by reading the
19485 ## PV which holds the current ramp status.
19486 ##
19487 record(ao, "$(P):LS01:RAMP_S4") {
19488  field(DTYP, "stream")
19489  field(SDIS, "$(P):LS01:DISABLE")
19490  field(OUT, "@ls336.proto setRAMP($(P):LS01:RAMPST4,4) L0 0")
19491  field(PREC, "3")
19492  field(FLNK, "$(P):LS01:RAMP4.PROC CA")
19493  field(EGU, "K/minute")
19494 }
19495 
19496 ##
19497 ## Set the ramp status parameter.
19498 ##
19499 ## 0=off
19500 ## 1=on
19501 ##
19502 ## The ramp and ramp status parameters are actually one command
19503 ## for the lakeshore. Therefore one must pass into this
19504 ## record the existing/desired ramp, as well as the
19505 ## desired ramp status. This is done automatically by reading the
19506 ## PV which holds the current ramp value.
19507 ##
19508 record(bo, "$(P):LS01:RAMPST_S4") {
19509  field(DTYP, "stream")
19510  field(SDIS, "$(P):LS01:DISABLE")
19511  field(OUT, "@ls336.proto setRAMPSTATUS($(P):LS01:RAMP4,4) L0 0")
19512  field(FLNK, "$(P):LS01:RAMP4.PROC CA")
19513  field(ZNAM, "Off")
19514  field(ONAM, "On")
19515 }
19516 
19517 ##
19518 ## Set the manual output value.
19519 ##
19520 record(ao, "$(P):LS01:MOUT_S4") {
19521  field(DTYP, "stream")
19522  field(SDIS, "$(P):LS01:DISABLE")
19523  field(OUT, "@ls336.proto setMOUT(4) L0 0")
19524  field(FLNK, "$(P):LS01:MOUT4.PROC CA")
19525 }
19526 
19527 ##
19528 ## Set the PID P parameter.
19529 ##
19530 record(ao, "$(P):LS01:P_S4") {
19531  field(DTYP, "stream")
19532  field(SDIS, "$(P):LS01:DISABLE")
19533  field(OUT, "@ls336.proto setP(4,$(P):LS01:I4,$(P):LS01:D4) L0 0")
19534  field(FLNK, "$(P):LS01:P4.PROC CA")
19535 }
19536 
19537 ##
19538 ## Set the PID I parameter.
19539 ##
19540 record(ao, "$(P):LS01:I_S4") {
19541  field(DTYP, "stream")
19542  field(SDIS, "$(P):LS01:DISABLE")
19543  field(OUT, "@ls336.proto setI($(P):LS01:P4,4,$(P):LS01:D4) L0 0")
19544  field(FLNK, "$(P):LS01:P4.PROC CA")
19545 }
19546 
19547 ##
19548 ## Set the PID D parameter.
19549 ##
19550 record(ao, "$(P):LS01:D_S4") {
19551  field(DTYP, "stream")
19552  field(SDIS, "$(P):LS01:DISABLE")
19553  field(OUT, "@ls336.proto setD($(P):LS01:P4,$(P):LS01:I4,4) L0 0")
19554  field(FLNK, "$(P):LS01:P4.PROC CA")
19555 }
19556 
19557 ##
19558 ## Set the mode to use for outmode
19559 ## The strings are output specific. This is defined in another file.
19560 ##
19561 record(mbbo, "$(P):LS01:OMM_S4") {
19562  field(DTYP, "stream")
19563  field(SDIS, "$(P):LS01:DISABLE")
19564  field(ZRVL, "0")
19565  field(ONVL, "1")
19566  field(TWVL, "2")
19567  field(THVL, "3")
19568  field(FRVL, "4")
19569  field(FVVL, "5")
19570  field(OUT, "@ls336.proto setOM(4,$(P):LS01:OMI4,$(P):LS01:OMP4) L0 0")
19571  field(FLNK, "$(P):LS01:OMM4.PROC CA")
19572 }
19573 
19574 ##
19575 ## Set the input to use for outmode
19576 ##
19577 record(mbbo, "$(P):LS01:OMI_S4") {
19578  field(DTYP, "stream")
19579  field(SDIS, "$(P):LS01:DISABLE")
19580  field(ZRST, "None")
19581  field(ZRVL, "0")
19582  field(ONST, "Input A")
19583  field(ONVL, "1")
19584  field(TWST, "Input B")
19585  field(TWVL, "2")
19586  field(THST, "Input C")
19587  field(THVL, "3")
19588  field(FRST, "Input D")
19589  field(FRVL, "4")
19590  field(FVST, "Input D2")
19591  field(FVVL, "5")
19592  field(SXST, "Input D3")
19593  field(SXVL, "6")
19594  field(SVST, "Input D4")
19595  field(SVVL, "7")
19596  field(EIST, "Input D5")
19597  field(EIVL, "8")
19598  field(OUT, "@ls336.proto setOMI(4,$(P):LS01:OMM4,$(P):LS01:OMP4) L0 0")
19599  field(FLNK, "$(P):LS01:OMM4.PROC CA")
19600 }
19601 
19602 ##
19603 ## Set the power up mode to use for outmode
19604 ##
19605 record(mbbo, "$(P):LS01:OMP_S4") {
19606  field(DTYP, "stream")
19607  field(SDIS, "$(P):LS01:DISABLE")
19608  field(ZRST, "Off")
19609  field(ZRVL, "0")
19610  field(ONST, "On")
19611  field(ONVL, "1")
19612  field(OUT, "@ls336.proto setOMP(4,$(P):LS01:OMM4,$(P):LS01:OMI4) L0 0")
19613  field(FLNK, "$(P):LS01:OMM4.PROC CA")
19614 }
19615 
19616 ##
19617 ## Set the type of tuning mode
19618 ##
19619 record(mbbo, "$(P):LS01:TUNEMODE_S4") {
19620  field(SDIS, "$(P):LS01:DISABLE")
19621  field(ZRST, "P Only")
19622  field(ZRVL, "0")
19623  field(ONST, "P and I")
19624  field(ONVL, "1")
19625  field(TWST, "P, I and D")
19626  field(TWVL, "2")
19627 }
19628 
19629 
19630 ##
19631 ## Start the tuning process
19632 ##
19633 record(ao, "$(P):LS01:TUNESTART4") {
19634  field(DTYP, "stream")
19635  field(SDIS, "$(P):LS01:DISABLE")
19636  field(DESC, "Start the auto tuning")
19637  field(OUT, "@ls336.proto setATUNE(4,$(P):LS01:TUNEMODE_S4) L0 0")
19638 }
19639 
19640 
19641 ##
19642 ## Read all ZONE settings
19643 ##
19644 record(seq, "$(P):LS01:Z:READ4") {
19645  field(DESC, "Read Output 4 ZONE")
19646  field(DOL1, "1")
19647  field(DLY1, "0.1")
19648  field(LNK1, "$(P):LS01:Z1:ALL4.PROC")
19649  field(DOL2, "1")
19650  field(DLY2, "0.1")
19651  field(LNK2, "$(P):LS01:Z2:ALL4.PROC")
19652  field(DOL3, "1")
19653  field(DLY3, "0.1")
19654  field(LNK3, "$(P):LS01:Z3:ALL4.PROC")
19655  field(DOL4, "1")
19656  field(DLY4, "0.1")
19657  field(LNK4, "$(P):LS01:Z4:ALL4.PROC")
19658  field(DOL5, "1")
19659  field(DLY5, "0.1")
19660  field(LNK5, "$(P):LS01:Z5:ALL4.PROC")
19661  field(DOL6, "1")
19662  field(DLY6, "0.1")
19663  field(LNK6, "$(P):LS01:Z6:ALL4.PROC")
19664  field(DOL7, "1")
19665  field(DLY7, "0.1")
19666  field(LNK7, "$(P):LS01:Z7:ALL4.PROC")
19667  field(DOL8, "1")
19668  field(DLY8, "0.1")
19669  field(LNK8, "$(P):LS01:Z8:ALL4.PROC")
19670  field(DOL9, "1")
19671  field(DLY9, "0.1")
19672  field(LNK9, "$(P):LS01:Z9:ALL4.PROC")
19673  field(DOLA, "1")
19674  field(DLYA, "0.1")
19675  field(LNKA, "$(P):LS01:Z10:ALL4.PROC")
19676  field(PINI, "YES")
19677 }
19678 
19679 ###############################################
19680 # This is included in lakeshore336.template
19681 # This is for the analog outputs (3 and 4)
19682 
19683 ##
19684 ## Read the analog output value.
19685 ##
19686 record(ai, "$(P):LS01:AOUT4") {
19687  field(DTYP, "stream")
19688  field(SDIS, "$(P):LS01:DISABLE_POLL")
19689  field(INP, "@ls336.proto getAOUT(4) L0 0")
19690  field(SCAN, "5 second")
19691  field(PREC, "1")
19692  field(EGU, "%")
19693  info(archive, "Monitor, 00:00:01, VAL")
19694 }
19695 
19696 ##
19697 ## Define the string/values for this record.
19698 ##
19699 record(mbbi, "$(P):LS01:RANGE4") {
19700  field(ZRST, "Off")
19701  field(ONST, "On")
19702 }
19703 
19704 ##
19705 ## Define the strings and values for this record.
19706 ##
19707 record(mbbi, "$(P):LS01:OMM4") {
19708  field(ZRST, "Off")
19709  field(ONST, "Closed Loop PID")
19710  field(TWST, "Zone")
19711  field(THST, "Open Loop")
19712  field(FRST, "Monitor Out")
19713  field(FVST, "Warmup Supply")
19714 }
19715 
19716 ##
19717 ## Define the strings and values for this record.
19718 ##
19719 record(mbbo, "$(P):LS01:RANGE_S4") {
19720  field(ZRST, "Off")
19721  field(ONST, "On")
19722 }
19723 
19724 ##
19725 ## Define the strings and values for this record.
19726 ##
19727 record(mbbo, "$(P):LS01:OMM_S4") {
19728  field(ZRST, "Off")
19729  field(ONST, "Closed Loop PID")
19730  field(TWST, "Zone")
19731  field(THST, "Open Loop")
19732  field(FRST, "Monitor Out")
19733  field(FVST, "Warmup Supply")
19734 }
19735 
19736 ###############################################
19737 # Add in ZONE support
19738 ###############################################
19739 
19740 
19741 # This just includes the zone file and overrides the RANGE options
19742 # for the analog control channels.
19743 
19744 #######################################
19745 #
19746 # Template to support reading and setting
19747 # controller ZONE parameters. It reads the ZONE
19748 # parameters into an array, then uses subArrays to
19749 # extract each parameter.
19750 #
19751 # This template is used by the output template
19752 # and it needs the following macros:
19753 #
19754 # ZONE: zone number
19755 # OUT: output number
19756 #
19757 #######################################
19758 
19759 ##
19760 ## Read the ZONE setting into an array (8 values)
19761 ##
19762 record(waveform, "$(P):LS01:Z1:ALL4") {
19763  field(DTYP, "stream")
19764  field(SDIS, "$(P):LS01:DISABLE_POLL")
19765  field(INP, "@ls336.proto getZONE(4,1) L0 0")
19766  field(SCAN, "Passive")
19767  field(NELM, "8")
19768  field(FTVL, "DOUBLE")
19769  field(PREC, "1")
19770  field(FLNK, "$(P):LS01:Z1:UB4:ARRAY.PROC")
19771 }
19772 
19773 ##
19774 ## Read the ZONE upper boundary setting.
19775 ##
19776 record(subArray, "$(P):LS01:Z1:UB4:ARRAY") {
19777  field(SCAN, "Passive")
19778  field(FTVL, "DOUBLE")
19779  field(INP, "$(P):LS01:Z1:ALL4.VAL MS")
19780  field(MALM, "8")
19781  field(NELM, "1")
19782  field(INDX, "0")
19783  field(PREC, "1")
19784  field(FLNK, "$(P):LS01:Z1:UB4.PROC")
19785 }
19786 record(ai, "$(P):LS01:Z1:UB4") {
19787  field(SCAN, "Passive")
19788  field(INP, "$(P):LS01:Z1:UB4:ARRAY.VAL MS")
19789  field(PREC, "1")
19790  field(FLNK, "$(P):LS01:Z1:P4:ARRAY.PROC")
19791 }
19792 
19793 ##
19794 ## Read the ZONE P setting.
19795 ##
19796 record(subArray, "$(P):LS01:Z1:P4:ARRAY") {
19797  field(SCAN, "Passive")
19798  field(FTVL, "DOUBLE")
19799  field(INP, "$(P):LS01:Z1:ALL4.VAL MS")
19800  field(MALM, "8")
19801  field(NELM, "1")
19802  field(INDX, "1")
19803  field(PREC, "1")
19804  field(FLNK, "$(P):LS01:Z1:P4.PROC")
19805 }
19806 record(ai, "$(P):LS01:Z1:P4") {
19807  field(SCAN, "Passive")
19808  field(INP, "$(P):LS01:Z1:P4:ARRAY.VAL MS")
19809  field(PREC, "1")
19810  field(FLNK, "$(P):LS01:Z1:I4:ARRAY.PROC")
19811 }
19812 
19813 ##
19814 ## Read the ZONE I setting.
19815 ##
19816 record(subArray, "$(P):LS01:Z1:I4:ARRAY") {
19817  field(SCAN, "Passive")
19818  field(FTVL, "DOUBLE")
19819  field(INP, "$(P):LS01:Z1:ALL4.VAL MS")
19820  field(MALM, "8")
19821  field(NELM, "1")
19822  field(INDX, "2")
19823  field(PREC, "1")
19824  field(FLNK, "$(P):LS01:Z1:I4.PROC")
19825 }
19826 record(ai, "$(P):LS01:Z1:I4") {
19827  field(SCAN, "Passive")
19828  field(INP, "$(P):LS01:Z1:I4:ARRAY.VAL MS")
19829  field(PREC, "1")
19830  field(FLNK, "$(P):LS01:Z1:D4:ARRAY.PROC")
19831 }
19832 
19833 ##
19834 ## Read the ZONE D setting.
19835 ##
19836 record(subArray, "$(P):LS01:Z1:D4:ARRAY") {
19837  field(SCAN, "Passive")
19838  field(FTVL, "DOUBLE")
19839  field(INP, "$(P):LS01:Z1:ALL4.VAL MS")
19840  field(MALM, "8")
19841  field(NELM, "1")
19842  field(INDX, "3")
19843  field(PREC, "1")
19844  field(FLNK, "$(P):LS01:Z1:D4.PROC")
19845 }
19846 record(ai, "$(P):LS01:Z1:D4") {
19847  field(SCAN, "Passive")
19848  field(INP, "$(P):LS01:Z1:D4:ARRAY.VAL MS")
19849  field(PREC, "1")
19850  field(FLNK, "$(P):LS01:Z1:MOUT4:ARRAY.PROC")
19851 }
19852 
19853 ##
19854 ## Read the ZONE MOUT setting.
19855 ##
19856 record(subArray, "$(P):LS01:Z1:MOUT4:ARRAY") {
19857  field(SCAN, "Passive")
19858  field(FTVL, "DOUBLE")
19859  field(INP, "$(P):LS01:Z1:ALL4.VAL MS")
19860  field(MALM, "8")
19861  field(NELM, "1")
19862  field(INDX, "4")
19863  field(PREC, "1")
19864  field(FLNK, "$(P):LS01:Z1:MOUT4.PROC")
19865 }
19866 record(ai, "$(P):LS01:Z1:MOUT4") {
19867  field(SCAN, "Passive")
19868  field(INP, "$(P):LS01:Z1:MOUT4:ARRAY.VAL MS")
19869  field(PREC, "1")
19870  field(FLNK, "$(P):LS01:Z1:RANGE4:ARRAY.PROC")
19871 }
19872 
19873 ##
19874 ## Read the ZONE RANGE setting.
19875 ##
19876 record(subArray, "$(P):LS01:Z1:RANGE4:ARRAY") {
19877  field(SCAN, "Passive")
19878  field(FTVL, "DOUBLE")
19879  field(INP, "$(P):LS01:Z1:ALL4.VAL MS")
19880  field(MALM, "8")
19881  field(NELM, "1")
19882  field(INDX, "5")
19883  field(PREC, "1")
19884  field(FLNK, "$(P):LS01:Z1:RANGE4.PROC")
19885 }
19886 record(mbbi, "$(P):LS01:Z1:RANGE4") {
19887  field(INP, "$(P):LS01:Z1:RANGE4:ARRAY.VAL")
19888  field(SCAN, "Passive")
19889  field(ZRST, "Off")
19890  field(ZRVL, "0")
19891  field(ONST, "Range1/Low")
19892  field(ONVL, "1")
19893  field(TWST, "Range2/Medium")
19894  field(TWVL, "2")
19895  field(THST, "Range3/High")
19896  field(THVL, "3")
19897  field(FRST, "Range4")
19898  field(FRVL, "4")
19899  field(FVST, "Range5")
19900  field(FVVL, "5")
19901  field(FLNK, "$(P):LS01:Z1:INPUT4:ARRAY.PROC")
19902 }
19903 
19904 ##
19905 ## Read the ZONE INPUT setting.
19906 ##
19907 record(subArray, "$(P):LS01:Z1:INPUT4:ARRAY") {
19908  field(SCAN, "Passive")
19909  field(FTVL, "DOUBLE")
19910  field(INP, "$(P):LS01:Z1:ALL4.VAL MS")
19911  field(MALM, "8")
19912  field(NELM, "1")
19913  field(INDX, "6")
19914  field(PREC, "1")
19915  field(FLNK, "$(P):LS01:Z1:INPUT4.PROC")
19916 }
19917 record(mbbi, "$(P):LS01:Z1:INPUT4") {
19918  field(INP, "$(P):LS01:Z1:INPUT4:ARRAY.VAL")
19919  field(SCAN, "Passive")
19920  field(ZRST, "None")
19921  field(ZRVL, "0")
19922  field(ONST, "Input A")
19923  field(ONVL, "1")
19924  field(TWST, "Input B")
19925  field(TWVL, "2")
19926  field(THST, "Input C")
19927  field(THVL, "3")
19928  field(FRST, "Input D")
19929  field(FRVL, "4")
19930  field(FVST, "Input D2")
19931  field(FVVL, "5")
19932  field(SXST, "Input D3")
19933  field(SXVL, "6")
19934  field(SVST, "Input D4")
19935  field(SVVL, "7")
19936  field(EIST, "Input D5")
19937  field(EIVL, "8")
19938  field(FLNK, "$(P):LS01:Z1:RATE4:ARRAY.PROC")
19939 }
19940 
19941 ##
19942 ## Read the ZONE RATE setting.
19943 ##
19944 record(subArray, "$(P):LS01:Z1:RATE4:ARRAY") {
19945  field(SCAN, "Passive")
19946  field(FTVL, "DOUBLE")
19947  field(INP, "$(P):LS01:Z1:ALL4.VAL MS")
19948  field(MALM, "8")
19949  field(NELM, "1")
19950  field(INDX, "7")
19951  field(PREC, "1")
19952  field(FLNK, "$(P):LS01:Z1:RATE4.PROC")
19953 }
19954 record(ai, "$(P):LS01:Z1:RATE4") {
19955  field(SCAN, "Passive")
19956  field(INP, "$(P):LS01:Z1:RATE4:ARRAY.VAL MS")
19957  field(PREC, "1")
19958  field(FLNK, "$(P):LS01:Z1:INITCALC4.PROC")
19959 }
19960 
19961 ##############################################################
19962 ##
19963 ## Populate the write records below with the current values.
19964 ## Only do this once at startup.
19965 ##
19966 ###############################################################
19967 
19968 record(calcout, "$(P):LS01:Z1:INITCALC4") {
19969  field(INPA, "0")
19970  field(CALC, "A")
19971  field(VAL, "0")
19972  field(DOPT, "Use OCAL")
19973  field(OOPT, "When Zero")
19974  field(OCAL, "1")
19975  field(OUT, "$(P):LS01:Z1:INITUB4.PROC")
19976 }
19977 
19978 record(dfanout, "$(P):LS01:Z1:INITUB4") {
19979  field(OMSL, "closed_loop")
19980  field(DOL, "$(P):LS01:Z1:UB4.VAL")
19981  field(OUTA, "$(P):LS01:Z1:UB_S4.VAL PP")
19982  field(FLNK, "$(P):LS01:Z1:INITP4.PROC")
19983 }
19984 record(dfanout, "$(P):LS01:Z1:INITP4") {
19985  field(OMSL, "closed_loop")
19986  field(DOL, "$(P):LS01:Z1:P4.VAL")
19987  field(OUTA, "$(P):LS01:Z1:P_S4.VAL PP")
19988  field(FLNK, "$(P):LS01:Z1:INITI4.PROC")
19989 }
19990 record(dfanout, "$(P):LS01:Z1:INITI4") {
19991  field(OMSL, "closed_loop")
19992  field(DOL, "$(P):LS01:Z1:I4.VAL")
19993  field(OUTA, "$(P):LS01:Z1:I_S4.VAL PP")
19994  field(FLNK, "$(P):LS01:Z1:INITD4.PROC")
19995 }
19996 record(dfanout, "$(P):LS01:Z1:INITD4") {
19997  field(OMSL, "closed_loop")
19998  field(DOL, "$(P):LS01:Z1:D4.VAL")
19999  field(OUTA, "$(P):LS01:Z1:D_S4.VAL PP")
20000  field(FLNK, "$(P):LS01:Z1:INITMOUT4.PROC")
20001 }
20002 record(dfanout, "$(P):LS01:Z1:INITMOUT4") {
20003  field(OMSL, "closed_loop")
20004  field(DOL, "$(P):LS01:Z1:MOUT4.VAL")
20005  field(OUTA, "$(P):LS01:Z1:MOUT_S4.VAL PP")
20006  field(FLNK, "$(P):LS01:Z1:INITRANGE4.PROC")
20007 }
20008 record(dfanout, "$(P):LS01:Z1:INITRANGE4") {
20009  field(OMSL, "closed_loop")
20010  field(DOL, "$(P):LS01:Z1:RANGE4.VAL")
20011  field(OUTA, "$(P):LS01:Z1:RANGE_S4.VAL PP")
20012  field(FLNK, "$(P):LS01:Z1:INITINPUT4.PROC")
20013 }
20014 record(dfanout, "$(P):LS01:Z1:INITINPUT4") {
20015  field(OMSL, "closed_loop")
20016  field(DOL, "$(P):LS01:Z1:INPUT4.VAL")
20017  field(OUTA, "$(P):LS01:Z1:INPUT_S4.VAL PP")
20018  field(FLNK, "$(P):LS01:Z1:INITRATE4.PROC")
20019 }
20020 record(dfanout, "$(P):LS01:Z1:INITRATE4") {
20021  field(OMSL, "closed_loop")
20022  field(DOL, "$(P):LS01:Z1:RATE4.VAL")
20023  field(OUTA, "$(P):LS01:Z1:RATE_S4.VAL PP")
20024  field(FLNK, "$(P):LS01:Z1:INITCOUNT4.PROC")
20025 }
20026 
20027 record(dfanout, "$(P):LS01:Z1:INITCOUNT4") {
20028  field(DOL, "1")
20029  field(OUTA, "$(P):LS01:Z1:INITCALC4.A")
20030 }
20031 
20032 
20033 
20034 #############################################
20035 # Write records. There is a calcout record to
20036 # do the actual write.
20037 #############################################
20038 
20039 ##
20040 ## Set the ZONE upper boundary setting.
20041 ##
20042 record(ao, "$(P):LS01:Z1:UB_S4") {
20043  field(SCAN, "Passive")
20044  field(PREC, "1")
20045  field(SDIS, "$(P):LS01:DISABLE")
20046 }
20047 
20048 ##
20049 ## Set the ZONE P setting.
20050 ##
20051 record(ao, "$(P):LS01:Z1:P_S4") {
20052  field(SCAN, "Passive")
20053  field(PREC, "1")
20054  field(SDIS, "$(P):LS01:DISABLE")
20055 }
20056 
20057 ##
20058 ## Set the ZONE I setting.
20059 ##
20060 record(ao, "$(P):LS01:Z1:I_S4") {
20061  field(SCAN, "Passive")
20062  field(PREC, "1")
20063  field(SDIS, "$(P):LS01:DISABLE")
20064 }
20065 
20066 ##
20067 ## Set the ZONE D setting.
20068 ##
20069 record(ao, "$(P):LS01:Z1:D_S4") {
20070  field(SCAN, "Passive")
20071  field(PREC, "1")
20072  field(SDIS, "$(P):LS01:DISABLE")
20073 }
20074 
20075 ##
20076 ## Set the ZONE MOUT setting.
20077 ##
20078 record(ao, "$(P):LS01:Z1:MOUT_S4") {
20079  field(SCAN, "Passive")
20080  field(PREC, "1")
20081  field(SDIS, "$(P):LS01:DISABLE")
20082 }
20083 
20084 ##
20085 ## Set the ZONE RANGE setting.
20086 ##
20087 record(mbbo, "$(P):LS01:Z1:RANGE_S4") {
20088  field(SCAN, "Passive")
20089  field(ZRST, "Off")
20090  field(ZRVL, "0")
20091  field(ONST, "Range1/Low")
20092  field(ONVL, "1")
20093  field(TWST, "Range2/Medium")
20094  field(TWVL, "2")
20095  field(THST, "Range3/High")
20096  field(THVL, "3")
20097  field(FRST, "Range4")
20098  field(FRVL, "4")
20099  field(FVST, "Range5")
20100  field(FVVL, "5")
20101  field(SDIS, "$(P):LS01:DISABLE")
20102 }
20103 
20104 ##
20105 ## Set the ZONE INPUT setting.
20106 ##
20107 record(mbbo, "$(P):LS01:Z1:INPUT_S4") {
20108  field(ZRST, "None")
20109  field(ZRVL, "0")
20110  field(ONST, "Input A")
20111  field(ONVL, "1")
20112  field(TWST, "Input B")
20113  field(TWVL, "2")
20114  field(THST, "Input C")
20115  field(THVL, "3")
20116  field(FRST, "Input D")
20117  field(FRVL, "4")
20118  field(FVST, "Input D2")
20119  field(FVVL, "5")
20120  field(SXST, "Input D3")
20121  field(SXVL, "6")
20122  field(SVST, "Input D4")
20123  field(SVVL, "7")
20124  field(EIST, "Input D5")
20125  field(EIVL, "8")
20126  field(SDIS, "$(P):LS01:DISABLE")
20127 }
20128 
20129 ##
20130 ## Set the ZONE RATE setting.
20131 ##
20132 record(ao, "$(P):LS01:Z1:RATE_S4") {
20133  field(SCAN, "Passive")
20134  field(PREC, "1")
20135  field(SDIS, "$(P):LS01:DISABLE")
20136 }
20137 
20138 ##
20139 ## Record to write the ZONE parameters.
20140 ##
20141 record(calcout, "$(P):LS01:Z1:SET4") {
20142  field(INPA, "$(P):LS01:Z1:UB_S4")
20143  field(INPB, "$(P):LS01:Z1:P_S4")
20144  field(INPC, "$(P):LS01:Z1:I_S4")
20145  field(INPD, "$(P):LS01:Z1:D_S4")
20146  field(INPE, "$(P):LS01:Z1:MOUT_S4")
20147  field(INPF, "$(P):LS01:Z1:RANGE_S4")
20148  field(INPG, "$(P):LS01:Z1:INPUT_S4")
20149  field(INPH, "$(P):LS01:Z1:RATE_S4")
20150  field(CALC, "0")
20151  field(DTYP, "stream")
20152  field(OUT, "@ls336.proto setZONE(4,1) L0 0")
20153  field(SDIS, "$(P):LS01:DISABLE")
20154  field(FLNK, "$(P):LS01:Z1:ALL4.PROC")
20155 }
20156 
20157 
20158 
20159 
20160 
20161 
20162 
20163 
20164 
20165 
20166 record(mbbi, "$(P):LS01:Z1:RANGE4") {
20167  field(ZRST, "Off")
20168  field(ONST, "On")
20169  field(TWST, "")
20170  field(THST, "")
20171  field(FRST, "")
20172  field(FVST, "")
20173 }
20174 
20175 record(mbbo, "$(P):LS01:Z1:RANGE_S4") {
20176  field(ZRST, "Off")
20177  field(ONST, "On")
20178  field(TWST, "")
20179  field(THST, "")
20180  field(FRST, "")
20181  field(FVST, "")
20182 }
20183 
20184 
20185 
20186 
20187 
20188 
20189 # This just includes the zone file and overrides the RANGE options
20190 # for the analog control channels.
20191 
20192 #######################################
20193 #
20194 # Template to support reading and setting
20195 # controller ZONE parameters. It reads the ZONE
20196 # parameters into an array, then uses subArrays to
20197 # extract each parameter.
20198 #
20199 # This template is used by the output template
20200 # and it needs the following macros:
20201 #
20202 # ZONE: zone number
20203 # OUT: output number
20204 #
20205 #######################################
20206 
20207 ##
20208 ## Read the ZONE setting into an array (8 values)
20209 ##
20210 record(waveform, "$(P):LS01:Z2:ALL4") {
20211  field(DTYP, "stream")
20212  field(SDIS, "$(P):LS01:DISABLE_POLL")
20213  field(INP, "@ls336.proto getZONE(4,2) L0 0")
20214  field(SCAN, "Passive")
20215  field(NELM, "8")
20216  field(FTVL, "DOUBLE")
20217  field(PREC, "1")
20218  field(FLNK, "$(P):LS01:Z2:UB4:ARRAY.PROC")
20219 }
20220 
20221 ##
20222 ## Read the ZONE upper boundary setting.
20223 ##
20224 record(subArray, "$(P):LS01:Z2:UB4:ARRAY") {
20225  field(SCAN, "Passive")
20226  field(FTVL, "DOUBLE")
20227  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20228  field(MALM, "8")
20229  field(NELM, "1")
20230  field(INDX, "0")
20231  field(PREC, "1")
20232  field(FLNK, "$(P):LS01:Z2:UB4.PROC")
20233 }
20234 record(ai, "$(P):LS01:Z2:UB4") {
20235  field(SCAN, "Passive")
20236  field(INP, "$(P):LS01:Z2:UB4:ARRAY.VAL MS")
20237  field(PREC, "1")
20238  field(FLNK, "$(P):LS01:Z2:P4:ARRAY.PROC")
20239 }
20240 
20241 ##
20242 ## Read the ZONE P setting.
20243 ##
20244 record(subArray, "$(P):LS01:Z2:P4:ARRAY") {
20245  field(SCAN, "Passive")
20246  field(FTVL, "DOUBLE")
20247  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20248  field(MALM, "8")
20249  field(NELM, "1")
20250  field(INDX, "1")
20251  field(PREC, "1")
20252  field(FLNK, "$(P):LS01:Z2:P4.PROC")
20253 }
20254 record(ai, "$(P):LS01:Z2:P4") {
20255  field(SCAN, "Passive")
20256  field(INP, "$(P):LS01:Z2:P4:ARRAY.VAL MS")
20257  field(PREC, "1")
20258  field(FLNK, "$(P):LS01:Z2:I4:ARRAY.PROC")
20259 }
20260 
20261 ##
20262 ## Read the ZONE I setting.
20263 ##
20264 record(subArray, "$(P):LS01:Z2:I4:ARRAY") {
20265  field(SCAN, "Passive")
20266  field(FTVL, "DOUBLE")
20267  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20268  field(MALM, "8")
20269  field(NELM, "1")
20270  field(INDX, "2")
20271  field(PREC, "1")
20272  field(FLNK, "$(P):LS01:Z2:I4.PROC")
20273 }
20274 record(ai, "$(P):LS01:Z2:I4") {
20275  field(SCAN, "Passive")
20276  field(INP, "$(P):LS01:Z2:I4:ARRAY.VAL MS")
20277  field(PREC, "1")
20278  field(FLNK, "$(P):LS01:Z2:D4:ARRAY.PROC")
20279 }
20280 
20281 ##
20282 ## Read the ZONE D setting.
20283 ##
20284 record(subArray, "$(P):LS01:Z2:D4:ARRAY") {
20285  field(SCAN, "Passive")
20286  field(FTVL, "DOUBLE")
20287  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20288  field(MALM, "8")
20289  field(NELM, "1")
20290  field(INDX, "3")
20291  field(PREC, "1")
20292  field(FLNK, "$(P):LS01:Z2:D4.PROC")
20293 }
20294 record(ai, "$(P):LS01:Z2:D4") {
20295  field(SCAN, "Passive")
20296  field(INP, "$(P):LS01:Z2:D4:ARRAY.VAL MS")
20297  field(PREC, "1")
20298  field(FLNK, "$(P):LS01:Z2:MOUT4:ARRAY.PROC")
20299 }
20300 
20301 ##
20302 ## Read the ZONE MOUT setting.
20303 ##
20304 record(subArray, "$(P):LS01:Z2:MOUT4:ARRAY") {
20305  field(SCAN, "Passive")
20306  field(FTVL, "DOUBLE")
20307  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20308  field(MALM, "8")
20309  field(NELM, "1")
20310  field(INDX, "4")
20311  field(PREC, "1")
20312  field(FLNK, "$(P):LS01:Z2:MOUT4.PROC")
20313 }
20314 record(ai, "$(P):LS01:Z2:MOUT4") {
20315  field(SCAN, "Passive")
20316  field(INP, "$(P):LS01:Z2:MOUT4:ARRAY.VAL MS")
20317  field(PREC, "1")
20318  field(FLNK, "$(P):LS01:Z2:RANGE4:ARRAY.PROC")
20319 }
20320 
20321 ##
20322 ## Read the ZONE RANGE setting.
20323 ##
20324 record(subArray, "$(P):LS01:Z2:RANGE4:ARRAY") {
20325  field(SCAN, "Passive")
20326  field(FTVL, "DOUBLE")
20327  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20328  field(MALM, "8")
20329  field(NELM, "1")
20330  field(INDX, "5")
20331  field(PREC, "1")
20332  field(FLNK, "$(P):LS01:Z2:RANGE4.PROC")
20333 }
20334 record(mbbi, "$(P):LS01:Z2:RANGE4") {
20335  field(INP, "$(P):LS01:Z2:RANGE4:ARRAY.VAL")
20336  field(SCAN, "Passive")
20337  field(ZRST, "Off")
20338  field(ZRVL, "0")
20339  field(ONST, "Range1/Low")
20340  field(ONVL, "1")
20341  field(TWST, "Range2/Medium")
20342  field(TWVL, "2")
20343  field(THST, "Range3/High")
20344  field(THVL, "3")
20345  field(FRST, "Range4")
20346  field(FRVL, "4")
20347  field(FVST, "Range5")
20348  field(FVVL, "5")
20349  field(FLNK, "$(P):LS01:Z2:INPUT4:ARRAY.PROC")
20350 }
20351 
20352 ##
20353 ## Read the ZONE INPUT setting.
20354 ##
20355 record(subArray, "$(P):LS01:Z2:INPUT4:ARRAY") {
20356  field(SCAN, "Passive")
20357  field(FTVL, "DOUBLE")
20358  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20359  field(MALM, "8")
20360  field(NELM, "1")
20361  field(INDX, "6")
20362  field(PREC, "1")
20363  field(FLNK, "$(P):LS01:Z2:INPUT4.PROC")
20364 }
20365 record(mbbi, "$(P):LS01:Z2:INPUT4") {
20366  field(INP, "$(P):LS01:Z2:INPUT4:ARRAY.VAL")
20367  field(SCAN, "Passive")
20368  field(ZRST, "None")
20369  field(ZRVL, "0")
20370  field(ONST, "Input A")
20371  field(ONVL, "1")
20372  field(TWST, "Input B")
20373  field(TWVL, "2")
20374  field(THST, "Input C")
20375  field(THVL, "3")
20376  field(FRST, "Input D")
20377  field(FRVL, "4")
20378  field(FVST, "Input D2")
20379  field(FVVL, "5")
20380  field(SXST, "Input D3")
20381  field(SXVL, "6")
20382  field(SVST, "Input D4")
20383  field(SVVL, "7")
20384  field(EIST, "Input D5")
20385  field(EIVL, "8")
20386  field(FLNK, "$(P):LS01:Z2:RATE4:ARRAY.PROC")
20387 }
20388 
20389 ##
20390 ## Read the ZONE RATE setting.
20391 ##
20392 record(subArray, "$(P):LS01:Z2:RATE4:ARRAY") {
20393  field(SCAN, "Passive")
20394  field(FTVL, "DOUBLE")
20395  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20396  field(MALM, "8")
20397  field(NELM, "1")
20398  field(INDX, "7")
20399  field(PREC, "1")
20400  field(FLNK, "$(P):LS01:Z2:RATE4.PROC")
20401 }
20402 record(ai, "$(P):LS01:Z2:RATE4") {
20403  field(SCAN, "Passive")
20404  field(INP, "$(P):LS01:Z2:RATE4:ARRAY.VAL MS")
20405  field(PREC, "1")
20406  field(FLNK, "$(P):LS01:Z2:INITCALC4.PROC")
20407 }
20408 
20409 ##############################################################
20410 ##
20411 ## Populate the write records below with the current values.
20412 ## Only do this once at startup.
20413 ##
20414 ###############################################################
20415 
20416 record(calcout, "$(P):LS01:Z2:INITCALC4") {
20417  field(INPA, "0")
20418  field(CALC, "A")
20419  field(VAL, "0")
20420  field(DOPT, "Use OCAL")
20421  field(OOPT, "When Zero")
20422  field(OCAL, "1")
20423  field(OUT, "$(P):LS01:Z2:INITUB4.PROC")
20424 }
20425 
20426 record(dfanout, "$(P):LS01:Z2:INITUB4") {
20427  field(OMSL, "closed_loop")
20428  field(DOL, "$(P):LS01:Z2:UB4.VAL")
20429  field(OUTA, "$(P):LS01:Z2:UB_S4.VAL PP")
20430  field(FLNK, "$(P):LS01:Z2:INITP4.PROC")
20431 }
20432 record(dfanout, "$(P):LS01:Z2:INITP4") {
20433  field(OMSL, "closed_loop")
20434  field(DOL, "$(P):LS01:Z2:P4.VAL")
20435  field(OUTA, "$(P):LS01:Z2:P_S4.VAL PP")
20436  field(FLNK, "$(P):LS01:Z2:INITI4.PROC")
20437 }
20438 record(dfanout, "$(P):LS01:Z2:INITI4") {
20439  field(OMSL, "closed_loop")
20440  field(DOL, "$(P):LS01:Z2:I4.VAL")
20441  field(OUTA, "$(P):LS01:Z2:I_S4.VAL PP")
20442  field(FLNK, "$(P):LS01:Z2:INITD4.PROC")
20443 }
20444 record(dfanout, "$(P):LS01:Z2:INITD4") {
20445  field(OMSL, "closed_loop")
20446  field(DOL, "$(P):LS01:Z2:D4.VAL")
20447  field(OUTA, "$(P):LS01:Z2:D_S4.VAL PP")
20448  field(FLNK, "$(P):LS01:Z2:INITMOUT4.PROC")
20449 }
20450 record(dfanout, "$(P):LS01:Z2:INITMOUT4") {
20451  field(OMSL, "closed_loop")
20452  field(DOL, "$(P):LS01:Z2:MOUT4.VAL")
20453  field(OUTA, "$(P):LS01:Z2:MOUT_S4.VAL PP")
20454  field(FLNK, "$(P):LS01:Z2:INITRANGE4.PROC")
20455 }
20456 record(dfanout, "$(P):LS01:Z2:INITRANGE4") {
20457  field(OMSL, "closed_loop")
20458  field(DOL, "$(P):LS01:Z2:RANGE4.VAL")
20459  field(OUTA, "$(P):LS01:Z2:RANGE_S4.VAL PP")
20460  field(FLNK, "$(P):LS01:Z2:INITINPUT4.PROC")
20461 }
20462 record(dfanout, "$(P):LS01:Z2:INITINPUT4") {
20463  field(OMSL, "closed_loop")
20464  field(DOL, "$(P):LS01:Z2:INPUT4.VAL")
20465  field(OUTA, "$(P):LS01:Z2:INPUT_S4.VAL PP")
20466  field(FLNK, "$(P):LS01:Z2:INITRATE4.PROC")
20467 }
20468 record(dfanout, "$(P):LS01:Z2:INITRATE4") {
20469  field(OMSL, "closed_loop")
20470  field(DOL, "$(P):LS01:Z2:RATE4.VAL")
20471  field(OUTA, "$(P):LS01:Z2:RATE_S4.VAL PP")
20472  field(FLNK, "$(P):LS01:Z2:INITCOUNT4.PROC")
20473 }
20474 
20475 record(dfanout, "$(P):LS01:Z2:INITCOUNT4") {
20476  field(DOL, "1")
20477  field(OUTA, "$(P):LS01:Z2:INITCALC4.A")
20478 }
20479 
20480 
20481 
20482 #############################################
20483 # Write records. There is a calcout record to
20484 # do the actual write.
20485 #############################################
20486 
20487 ##
20488 ## Set the ZONE upper boundary setting.
20489 ##
20490 record(ao, "$(P):LS01:Z2:UB_S4") {
20491  field(SCAN, "Passive")
20492  field(PREC, "1")
20493  field(SDIS, "$(P):LS01:DISABLE")
20494 }
20495 
20496 ##
20497 ## Set the ZONE P setting.
20498 ##
20499 record(ao, "$(P):LS01:Z2:P_S4") {
20500  field(SCAN, "Passive")
20501  field(PREC, "1")
20502  field(SDIS, "$(P):LS01:DISABLE")
20503 }
20504 
20505 ##
20506 ## Set the ZONE I setting.
20507 ##
20508 record(ao, "$(P):LS01:Z2:I_S4") {
20509  field(SCAN, "Passive")
20510  field(PREC, "1")
20511  field(SDIS, "$(P):LS01:DISABLE")
20512 }
20513 
20514 ##
20515 ## Set the ZONE D setting.
20516 ##
20517 record(ao, "$(P):LS01:Z2:D_S4") {
20518  field(SCAN, "Passive")
20519  field(PREC, "1")
20520  field(SDIS, "$(P):LS01:DISABLE")
20521 }
20522 
20523 ##
20524 ## Set the ZONE MOUT setting.
20525 ##
20526 record(ao, "$(P):LS01:Z2:MOUT_S4") {
20527  field(SCAN, "Passive")
20528  field(PREC, "1")
20529  field(SDIS, "$(P):LS01:DISABLE")
20530 }
20531 
20532 ##
20533 ## Set the ZONE RANGE setting.
20534 ##
20535 record(mbbo, "$(P):LS01:Z2:RANGE_S4") {
20536  field(SCAN, "Passive")
20537  field(ZRST, "Off")
20538  field(ZRVL, "0")
20539  field(ONST, "Range1/Low")
20540  field(ONVL, "1")
20541  field(TWST, "Range2/Medium")
20542  field(TWVL, "2")
20543  field(THST, "Range3/High")
20544  field(THVL, "3")
20545  field(FRST, "Range4")
20546  field(FRVL, "4")
20547  field(FVST, "Range5")
20548  field(FVVL, "5")
20549  field(SDIS, "$(P):LS01:DISABLE")
20550 }
20551 
20552 ##
20553 ## Set the ZONE INPUT setting.
20554 ##
20555 record(mbbo, "$(P):LS01:Z2:INPUT_S4") {
20556  field(ZRST, "None")
20557  field(ZRVL, "0")
20558  field(ONST, "Input A")
20559  field(ONVL, "1")
20560  field(TWST, "Input B")
20561  field(TWVL, "2")
20562  field(THST, "Input C")
20563  field(THVL, "3")
20564  field(FRST, "Input D")
20565  field(FRVL, "4")
20566  field(FVST, "Input D2")
20567  field(FVVL, "5")
20568  field(SXST, "Input D3")
20569  field(SXVL, "6")
20570  field(SVST, "Input D4")
20571  field(SVVL, "7")
20572  field(EIST, "Input D5")
20573  field(EIVL, "8")
20574  field(SDIS, "$(P):LS01:DISABLE")
20575 }
20576 
20577 ##
20578 ## Set the ZONE RATE setting.
20579 ##
20580 record(ao, "$(P):LS01:Z2:RATE_S4") {
20581  field(SCAN, "Passive")
20582  field(PREC, "1")
20583  field(SDIS, "$(P):LS01:DISABLE")
20584 }
20585 
20586 ##
20587 ## Record to write the ZONE parameters.
20588 ##
20589 record(calcout, "$(P):LS01:Z2:SET4") {
20590  field(INPA, "$(P):LS01:Z2:UB_S4")
20591  field(INPB, "$(P):LS01:Z2:P_S4")
20592  field(INPC, "$(P):LS01:Z2:I_S4")
20593  field(INPD, "$(P):LS01:Z2:D_S4")
20594  field(INPE, "$(P):LS01:Z2:MOUT_S4")
20595  field(INPF, "$(P):LS01:Z2:RANGE_S4")
20596  field(INPG, "$(P):LS01:Z2:INPUT_S4")
20597  field(INPH, "$(P):LS01:Z2:RATE_S4")
20598  field(CALC, "0")
20599  field(DTYP, "stream")
20600  field(OUT, "@ls336.proto setZONE(4,2) L0 0")
20601  field(SDIS, "$(P):LS01:DISABLE")
20602  field(FLNK, "$(P):LS01:Z2:ALL4.PROC")
20603 }
20604 
20605 
20606 
20607 
20608 
20609 
20610 
20611 
20612 
20613 
20614 record(mbbi, "$(P):LS01:Z2:RANGE4") {
20615  field(ZRST, "Off")
20616  field(ONST, "On")
20617  field(TWST, "")
20618  field(THST, "")
20619  field(FRST, "")
20620  field(FVST, "")
20621 }
20622 
20623 record(mbbo, "$(P):LS01:Z2:RANGE_S4") {
20624  field(ZRST, "Off")
20625  field(ONST, "On")
20626  field(TWST, "")
20627  field(THST, "")
20628  field(FRST, "")
20629  field(FVST, "")
20630 }
20631 
20632 
20633 
20634 
20635 
20636 
20637 # This just includes the zone file and overrides the RANGE options
20638 # for the analog control channels.
20639 
20640 #######################################
20641 #
20642 # Template to support reading and setting
20643 # controller ZONE parameters. It reads the ZONE
20644 # parameters into an array, then uses subArrays to
20645 # extract each parameter.
20646 #
20647 # This template is used by the output template
20648 # and it needs the following macros:
20649 #
20650 # ZONE: zone number
20651 # OUT: output number
20652 #
20653 #######################################
20654 
20655 ##
20656 ## Read the ZONE setting into an array (8 values)
20657 ##
20658 record(waveform, "$(P):LS01:Z2:ALL4") {
20659  field(DTYP, "stream")
20660  field(SDIS, "$(P):LS01:DISABLE_POLL")
20661  field(INP, "@ls336.proto getZONE(4,2) L0 0")
20662  field(SCAN, "Passive")
20663  field(NELM, "8")
20664  field(FTVL, "DOUBLE")
20665  field(PREC, "1")
20666  field(FLNK, "$(P):LS01:Z2:UB4:ARRAY.PROC")
20667 }
20668 
20669 ##
20670 ## Read the ZONE upper boundary setting.
20671 ##
20672 record(subArray, "$(P):LS01:Z2:UB4:ARRAY") {
20673  field(SCAN, "Passive")
20674  field(FTVL, "DOUBLE")
20675  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20676  field(MALM, "8")
20677  field(NELM, "1")
20678  field(INDX, "0")
20679  field(PREC, "1")
20680  field(FLNK, "$(P):LS01:Z2:UB4.PROC")
20681 }
20682 record(ai, "$(P):LS01:Z2:UB4") {
20683  field(SCAN, "Passive")
20684  field(INP, "$(P):LS01:Z2:UB4:ARRAY.VAL MS")
20685  field(PREC, "1")
20686  field(FLNK, "$(P):LS01:Z2:P4:ARRAY.PROC")
20687 }
20688 
20689 ##
20690 ## Read the ZONE P setting.
20691 ##
20692 record(subArray, "$(P):LS01:Z2:P4:ARRAY") {
20693  field(SCAN, "Passive")
20694  field(FTVL, "DOUBLE")
20695  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20696  field(MALM, "8")
20697  field(NELM, "1")
20698  field(INDX, "1")
20699  field(PREC, "1")
20700  field(FLNK, "$(P):LS01:Z2:P4.PROC")
20701 }
20702 record(ai, "$(P):LS01:Z2:P4") {
20703  field(SCAN, "Passive")
20704  field(INP, "$(P):LS01:Z2:P4:ARRAY.VAL MS")
20705  field(PREC, "1")
20706  field(FLNK, "$(P):LS01:Z2:I4:ARRAY.PROC")
20707 }
20708 
20709 ##
20710 ## Read the ZONE I setting.
20711 ##
20712 record(subArray, "$(P):LS01:Z2:I4:ARRAY") {
20713  field(SCAN, "Passive")
20714  field(FTVL, "DOUBLE")
20715  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20716  field(MALM, "8")
20717  field(NELM, "1")
20718  field(INDX, "2")
20719  field(PREC, "1")
20720  field(FLNK, "$(P):LS01:Z2:I4.PROC")
20721 }
20722 record(ai, "$(P):LS01:Z2:I4") {
20723  field(SCAN, "Passive")
20724  field(INP, "$(P):LS01:Z2:I4:ARRAY.VAL MS")
20725  field(PREC, "1")
20726  field(FLNK, "$(P):LS01:Z2:D4:ARRAY.PROC")
20727 }
20728 
20729 ##
20730 ## Read the ZONE D setting.
20731 ##
20732 record(subArray, "$(P):LS01:Z2:D4:ARRAY") {
20733  field(SCAN, "Passive")
20734  field(FTVL, "DOUBLE")
20735  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20736  field(MALM, "8")
20737  field(NELM, "1")
20738  field(INDX, "3")
20739  field(PREC, "1")
20740  field(FLNK, "$(P):LS01:Z2:D4.PROC")
20741 }
20742 record(ai, "$(P):LS01:Z2:D4") {
20743  field(SCAN, "Passive")
20744  field(INP, "$(P):LS01:Z2:D4:ARRAY.VAL MS")
20745  field(PREC, "1")
20746  field(FLNK, "$(P):LS01:Z2:MOUT4:ARRAY.PROC")
20747 }
20748 
20749 ##
20750 ## Read the ZONE MOUT setting.
20751 ##
20752 record(subArray, "$(P):LS01:Z2:MOUT4:ARRAY") {
20753  field(SCAN, "Passive")
20754  field(FTVL, "DOUBLE")
20755  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20756  field(MALM, "8")
20757  field(NELM, "1")
20758  field(INDX, "4")
20759  field(PREC, "1")
20760  field(FLNK, "$(P):LS01:Z2:MOUT4.PROC")
20761 }
20762 record(ai, "$(P):LS01:Z2:MOUT4") {
20763  field(SCAN, "Passive")
20764  field(INP, "$(P):LS01:Z2:MOUT4:ARRAY.VAL MS")
20765  field(PREC, "1")
20766  field(FLNK, "$(P):LS01:Z2:RANGE4:ARRAY.PROC")
20767 }
20768 
20769 ##
20770 ## Read the ZONE RANGE setting.
20771 ##
20772 record(subArray, "$(P):LS01:Z2:RANGE4:ARRAY") {
20773  field(SCAN, "Passive")
20774  field(FTVL, "DOUBLE")
20775  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20776  field(MALM, "8")
20777  field(NELM, "1")
20778  field(INDX, "5")
20779  field(PREC, "1")
20780  field(FLNK, "$(P):LS01:Z2:RANGE4.PROC")
20781 }
20782 record(mbbi, "$(P):LS01:Z2:RANGE4") {
20783  field(INP, "$(P):LS01:Z2:RANGE4:ARRAY.VAL")
20784  field(SCAN, "Passive")
20785  field(ZRST, "Off")
20786  field(ZRVL, "0")
20787  field(ONST, "Range1/Low")
20788  field(ONVL, "1")
20789  field(TWST, "Range2/Medium")
20790  field(TWVL, "2")
20791  field(THST, "Range3/High")
20792  field(THVL, "3")
20793  field(FRST, "Range4")
20794  field(FRVL, "4")
20795  field(FVST, "Range5")
20796  field(FVVL, "5")
20797  field(FLNK, "$(P):LS01:Z2:INPUT4:ARRAY.PROC")
20798 }
20799 
20800 ##
20801 ## Read the ZONE INPUT setting.
20802 ##
20803 record(subArray, "$(P):LS01:Z2:INPUT4:ARRAY") {
20804  field(SCAN, "Passive")
20805  field(FTVL, "DOUBLE")
20806  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20807  field(MALM, "8")
20808  field(NELM, "1")
20809  field(INDX, "6")
20810  field(PREC, "1")
20811  field(FLNK, "$(P):LS01:Z2:INPUT4.PROC")
20812 }
20813 record(mbbi, "$(P):LS01:Z2:INPUT4") {
20814  field(INP, "$(P):LS01:Z2:INPUT4:ARRAY.VAL")
20815  field(SCAN, "Passive")
20816  field(ZRST, "None")
20817  field(ZRVL, "0")
20818  field(ONST, "Input A")
20819  field(ONVL, "1")
20820  field(TWST, "Input B")
20821  field(TWVL, "2")
20822  field(THST, "Input C")
20823  field(THVL, "3")
20824  field(FRST, "Input D")
20825  field(FRVL, "4")
20826  field(FVST, "Input D2")
20827  field(FVVL, "5")
20828  field(SXST, "Input D3")
20829  field(SXVL, "6")
20830  field(SVST, "Input D4")
20831  field(SVVL, "7")
20832  field(EIST, "Input D5")
20833  field(EIVL, "8")
20834  field(FLNK, "$(P):LS01:Z2:RATE4:ARRAY.PROC")
20835 }
20836 
20837 ##
20838 ## Read the ZONE RATE setting.
20839 ##
20840 record(subArray, "$(P):LS01:Z2:RATE4:ARRAY") {
20841  field(SCAN, "Passive")
20842  field(FTVL, "DOUBLE")
20843  field(INP, "$(P):LS01:Z2:ALL4.VAL MS")
20844  field(MALM, "8")
20845  field(NELM, "1")
20846  field(INDX, "7")
20847  field(PREC, "1")
20848  field(FLNK, "$(P):LS01:Z2:RATE4.PROC")
20849 }
20850 record(ai, "$(P):LS01:Z2:RATE4") {
20851  field(SCAN, "Passive")
20852  field(INP, "$(P):LS01:Z2:RATE4:ARRAY.VAL MS")
20853  field(PREC, "1")
20854  field(FLNK, "$(P):LS01:Z2:INITCALC4.PROC")
20855 }
20856 
20857 ##############################################################
20858 ##
20859 ## Populate the write records below with the current values.
20860 ## Only do this once at startup.
20861 ##
20862 ###############################################################
20863 
20864 record(calcout, "$(P):LS01:Z2:INITCALC4") {
20865  field(INPA, "0")
20866  field(CALC, "A")
20867  field(VAL, "0")
20868  field(DOPT, "Use OCAL")
20869  field(OOPT, "When Zero")
20870  field(OCAL, "1")
20871  field(OUT, "$(P):LS01:Z2:INITUB4.PROC")
20872 }
20873 
20874 record(dfanout, "$(P):LS01:Z2:INITUB4") {
20875  field(OMSL, "closed_loop")
20876  field(DOL, "$(P):LS01:Z2:UB4.VAL")
20877  field(OUTA, "$(P):LS01:Z2:UB_S4.VAL PP")
20878  field(FLNK, "$(P):LS01:Z2:INITP4.PROC")
20879 }
20880 record(dfanout, "$(P):LS01:Z2:INITP4") {
20881  field(OMSL, "closed_loop")
20882  field(DOL, "$(P):LS01:Z2:P4.VAL")
20883  field(OUTA, "$(P):LS01:Z2:P_S4.VAL PP")
20884  field(FLNK, "$(P):LS01:Z2:INITI4.PROC")
20885 }
20886 record(dfanout, "$(P):LS01:Z2:INITI4") {
20887  field(OMSL, "closed_loop")
20888  field(DOL, "$(P):LS01:Z2:I4.VAL")
20889  field(OUTA, "$(P):LS01:Z2:I_S4.VAL PP")
20890  field(FLNK, "$(P):LS01:Z2:INITD4.PROC")
20891 }
20892 record(dfanout, "$(P):LS01:Z2:INITD4") {
20893  field(OMSL, "closed_loop")
20894  field(DOL, "$(P):LS01:Z2:D4.VAL")
20895  field(OUTA, "$(P):LS01:Z2:D_S4.VAL PP")
20896  field(FLNK, "$(P):LS01:Z2:INITMOUT4.PROC")
20897 }
20898 record(dfanout, "$(P):LS01:Z2:INITMOUT4") {
20899  field(OMSL, "closed_loop")
20900  field(DOL, "$(P):LS01:Z2:MOUT4.VAL")
20901  field(OUTA, "$(P):LS01:Z2:MOUT_S4.VAL PP")
20902  field(FLNK, "$(P):LS01:Z2:INITRANGE4.PROC")
20903 }
20904 record(dfanout, "$(P):LS01:Z2:INITRANGE4") {
20905  field(OMSL, "closed_loop")
20906  field(DOL, "$(P):LS01:Z2:RANGE4.VAL")
20907  field(OUTA, "$(P):LS01:Z2:RANGE_S4.VAL PP")
20908  field(FLNK, "$(P):LS01:Z2:INITINPUT4.PROC")
20909 }
20910 record(dfanout, "$(P):LS01:Z2:INITINPUT4") {
20911  field(OMSL, "closed_loop")
20912  field(DOL, "$(P):LS01:Z2:INPUT4.VAL")
20913  field(OUTA, "$(P):LS01:Z2:INPUT_S4.VAL PP")
20914  field(FLNK, "$(P):LS01:Z2:INITRATE4.PROC")
20915 }
20916 record(dfanout, "$(P):LS01:Z2:INITRATE4") {
20917  field(OMSL, "closed_loop")
20918  field(DOL, "$(P):LS01:Z2:RATE4.VAL")
20919  field(OUTA, "$(P):LS01:Z2:RATE_S4.VAL PP")
20920  field(FLNK, "$(P):LS01:Z2:INITCOUNT4.PROC")
20921 }
20922 
20923 record(dfanout, "$(P):LS01:Z2:INITCOUNT4") {
20924  field(DOL, "1")
20925  field(OUTA, "$(P):LS01:Z2:INITCALC4.A")
20926 }
20927 
20928 
20929 
20930 #############################################
20931 # Write records. There is a calcout record to
20932 # do the actual write.
20933 #############################################
20934 
20935 ##
20936 ## Set the ZONE upper boundary setting.
20937 ##
20938 record(ao, "$(P):LS01:Z2:UB_S4") {
20939  field(SCAN, "Passive")
20940  field(PREC, "1")
20941  field(SDIS, "$(P):LS01:DISABLE")
20942 }
20943 
20944 ##
20945 ## Set the ZONE P setting.
20946 ##
20947 record(ao, "$(P):LS01:Z2:P_S4") {
20948  field(SCAN, "Passive")
20949  field(PREC, "1")
20950  field(SDIS, "$(P):LS01:DISABLE")
20951 }
20952 
20953 ##
20954 ## Set the ZONE I setting.
20955 ##
20956 record(ao, "$(P):LS01:Z2:I_S4") {
20957  field(SCAN, "Passive")
20958  field(PREC, "1")
20959  field(SDIS, "$(P):LS01:DISABLE")
20960 }
20961 
20962 ##
20963 ## Set the ZONE D setting.
20964 ##
20965 record(ao, "$(P):LS01:Z2:D_S4") {
20966  field(SCAN, "Passive")
20967  field(PREC, "1")
20968  field(SDIS, "$(P):LS01:DISABLE")
20969 }
20970 
20971 ##
20972 ## Set the ZONE MOUT setting.
20973 ##
20974 record(ao, "$(P):LS01:Z2:MOUT_S4") {
20975  field(SCAN, "Passive")
20976  field(PREC, "1")
20977  field(SDIS, "$(P):LS01:DISABLE")
20978 }
20979 
20980 ##
20981 ## Set the ZONE RANGE setting.
20982 ##
20983 record(mbbo, "$(P):LS01:Z2:RANGE_S4") {
20984  field(SCAN, "Passive")
20985  field(ZRST, "Off")
20986  field(ZRVL, "0")
20987  field(ONST, "Range1/Low")
20988  field(ONVL, "1")
20989  field(TWST, "Range2/Medium")
20990  field(TWVL, "2")
20991  field(THST, "Range3/High")
20992  field(THVL, "3")
20993  field(FRST, "Range4")
20994  field(FRVL, "4")
20995  field(FVST, "Range5")
20996  field(FVVL, "5")
20997  field(SDIS, "$(P):LS01:DISABLE")
20998 }
20999 
21000 ##
21001 ## Set the ZONE INPUT setting.
21002 ##
21003 record(mbbo, "$(P):LS01:Z2:INPUT_S4") {
21004  field(ZRST, "None")
21005  field(ZRVL, "0")
21006  field(ONST, "Input A")
21007  field(ONVL, "1")
21008  field(TWST, "Input B")
21009  field(TWVL, "2")
21010  field(THST, "Input C")
21011  field(THVL, "3")
21012  field(FRST, "Input D")
21013  field(FRVL, "4")
21014  field(FVST, "Input D2")
21015  field(FVVL, "5")
21016  field(SXST, "Input D3")
21017  field(SXVL, "6")
21018  field(SVST, "Input D4")
21019  field(SVVL, "7")
21020  field(EIST, "Input D5")
21021  field(EIVL, "8")
21022  field(SDIS, "$(P):LS01:DISABLE")
21023 }
21024 
21025 ##
21026 ## Set the ZONE RATE setting.
21027 ##
21028 record(ao, "$(P):LS01:Z2:RATE_S4") {
21029  field(SCAN, "Passive")
21030  field(PREC, "1")
21031  field(SDIS, "$(P):LS01:DISABLE")
21032 }
21033 
21034 ##
21035 ## Record to write the ZONE parameters.
21036 ##
21037 record(calcout, "$(P):LS01:Z2:SET4") {
21038  field(INPA, "$(P):LS01:Z2:UB_S4")
21039  field(INPB, "$(P):LS01:Z2:P_S4")
21040  field(INPC, "$(P):LS01:Z2:I_S4")
21041  field(INPD, "$(P):LS01:Z2:D_S4")
21042  field(INPE, "$(P):LS01:Z2:MOUT_S4")
21043  field(INPF, "$(P):LS01:Z2:RANGE_S4")
21044  field(INPG, "$(P):LS01:Z2:INPUT_S4")
21045  field(INPH, "$(P):LS01:Z2:RATE_S4")
21046  field(CALC, "0")
21047  field(DTYP, "stream")
21048  field(OUT, "@ls336.proto setZONE(4,2) L0 0")
21049  field(SDIS, "$(P):LS01:DISABLE")
21050  field(FLNK, "$(P):LS01:Z2:ALL4.PROC")
21051 }
21052 
21053 
21054 
21055 
21056 
21057 
21058 
21059 
21060 
21061 
21062 record(mbbi, "$(P):LS01:Z2:RANGE4") {
21063  field(ZRST, "Off")
21064  field(ONST, "On")
21065  field(TWST, "")
21066  field(THST, "")
21067  field(FRST, "")
21068  field(FVST, "")
21069 }
21070 
21071 record(mbbo, "$(P):LS01:Z2:RANGE_S4") {
21072  field(ZRST, "Off")
21073  field(ONST, "On")
21074  field(TWST, "")
21075  field(THST, "")
21076  field(FRST, "")
21077  field(FVST, "")
21078 }
21079 
21080 
21081 
21082 
21083 
21084 
21085 # This just includes the zone file and overrides the RANGE options
21086 # for the analog control channels.
21087 
21088 #######################################
21089 #
21090 # Template to support reading and setting
21091 # controller ZONE parameters. It reads the ZONE
21092 # parameters into an array, then uses subArrays to
21093 # extract each parameter.
21094 #
21095 # This template is used by the output template
21096 # and it needs the following macros:
21097 #
21098 # ZONE: zone number
21099 # OUT: output number
21100 #
21101 #######################################
21102 
21103 ##
21104 ## Read the ZONE setting into an array (8 values)
21105 ##
21106 record(waveform, "$(P):LS01:Z3:ALL4") {
21107  field(DTYP, "stream")
21108  field(SDIS, "$(P):LS01:DISABLE_POLL")
21109  field(INP, "@ls336.proto getZONE(4,3) L0 0")
21110  field(SCAN, "Passive")
21111  field(NELM, "8")
21112  field(FTVL, "DOUBLE")
21113  field(PREC, "1")
21114  field(FLNK, "$(P):LS01:Z3:UB4:ARRAY.PROC")
21115 }
21116 
21117 ##
21118 ## Read the ZONE upper boundary setting.
21119 ##
21120 record(subArray, "$(P):LS01:Z3:UB4:ARRAY") {
21121  field(SCAN, "Passive")
21122  field(FTVL, "DOUBLE")
21123  field(INP, "$(P):LS01:Z3:ALL4.VAL MS")
21124  field(MALM, "8")
21125  field(NELM, "1")
21126  field(INDX, "0")
21127  field(PREC, "1")
21128  field(FLNK, "$(P):LS01:Z3:UB4.PROC")
21129 }
21130 record(ai, "$(P):LS01:Z3:UB4") {
21131  field(SCAN, "Passive")
21132  field(INP, "$(P):LS01:Z3:UB4:ARRAY.VAL MS")
21133  field(PREC, "1")
21134  field(FLNK, "$(P):LS01:Z3:P4:ARRAY.PROC")
21135 }
21136 
21137 ##
21138 ## Read the ZONE P setting.
21139 ##
21140 record(subArray, "$(P):LS01:Z3:P4:ARRAY") {
21141  field(SCAN, "Passive")
21142  field(FTVL, "DOUBLE")
21143  field(INP, "$(P):LS01:Z3:ALL4.VAL MS")
21144  field(MALM, "8")
21145  field(NELM, "1")
21146  field(INDX, "1")
21147  field(PREC, "1")
21148  field(FLNK, "$(P):LS01:Z3:P4.PROC")
21149 }
21150 record(ai, "$(P):LS01:Z3:P4") {
21151  field(SCAN, "Passive")
21152  field(INP, "$(P):LS01:Z3:P4:ARRAY.VAL MS")
21153  field(PREC, "1")
21154  field(FLNK, "$(P):LS01:Z3:I4:ARRAY.PROC")
21155 }
21156 
21157 ##
21158 ## Read the ZONE I setting.
21159 ##
21160 record(subArray, "$(P):LS01:Z3:I4:ARRAY") {
21161  field(SCAN, "Passive")
21162  field(FTVL, "DOUBLE")
21163  field(INP, "$(P):LS01:Z3:ALL4.VAL MS")
21164  field(MALM, "8")
21165  field(NELM, "1")
21166  field(INDX, "2")
21167  field(PREC, "1")
21168  field(FLNK, "$(P):LS01:Z3:I4.PROC")
21169 }
21170 record(ai, "$(P):LS01:Z3:I4") {
21171  field(SCAN, "Passive")
21172  field(INP, "$(P):LS01:Z3:I4:ARRAY.VAL MS")
21173  field(PREC, "1")
21174  field(FLNK, "$(P):LS01:Z3:D4:ARRAY.PROC")
21175 }
21176 
21177 ##
21178 ## Read the ZONE D setting.
21179 ##
21180 record(subArray, "$(P):LS01:Z3:D4:ARRAY") {
21181  field(SCAN, "Passive")
21182  field(FTVL, "DOUBLE")
21183  field(INP, "$(P):LS01:Z3:ALL4.VAL MS")
21184  field(MALM, "8")
21185  field(NELM, "1")
21186  field(INDX, "3")
21187  field(PREC, "1")
21188  field(FLNK, "$(P):LS01:Z3:D4.PROC")
21189 }
21190 record(ai, "$(P):LS01:Z3:D4") {
21191  field(SCAN, "Passive")
21192  field(INP, "$(P):LS01:Z3:D4:ARRAY.VAL MS")
21193  field(PREC, "1")
21194  field(FLNK, "$(P):LS01:Z3:MOUT4:ARRAY.PROC")
21195 }
21196 
21197 ##
21198 ## Read the ZONE MOUT setting.
21199 ##
21200 record(subArray, "$(P):LS01:Z3:MOUT4:ARRAY") {
21201  field(SCAN, "Passive")
21202  field(FTVL, "DOUBLE")
21203  field(INP, "$(P):LS01:Z3:ALL4.VAL MS")
21204  field(MALM, "8")
21205  field(NELM, "1")
21206  field(INDX, "4")
21207  field(PREC, "1")
21208  field(FLNK, "$(P):LS01:Z3:MOUT4.PROC")
21209 }
21210 record(ai, "$(P):LS01:Z3:MOUT4") {
21211  field(SCAN, "Passive")
21212  field(INP, "$(P):LS01:Z3:MOUT4:ARRAY.VAL MS")
21213  field(PREC, "1")
21214  field(FLNK, "$(P):LS01:Z3:RANGE4:ARRAY.PROC")
21215 }
21216 
21217 ##
21218 ## Read the ZONE RANGE setting.
21219 ##
21220 record(subArray, "$(P):LS01:Z3:RANGE4:ARRAY") {
21221  field(SCAN, "Passive")
21222  field(FTVL, "DOUBLE")
21223  field(INP, "$(P):LS01:Z3:ALL4.VAL MS")
21224  field(MALM, "8")
21225  field(NELM, "1")
21226  field(INDX, "5")
21227  field(PREC, "1")
21228  field(FLNK, "$(P):LS01:Z3:RANGE4.PROC")
21229 }
21230 record(mbbi, "$(P):LS01:Z3:RANGE4") {
21231  field(INP, "$(P):LS01:Z3:RANGE4:ARRAY.VAL")
21232  field(SCAN, "Passive")
21233  field(ZRST, "Off")
21234  field(ZRVL, "0")
21235  field(ONST, "Range1/Low")
21236  field(ONVL, "1")
21237  field(TWST, "Range2/Medium")
21238  field(TWVL, "2")
21239  field(THST, "Range3/High")
21240  field(THVL, "3")
21241  field(FRST, "Range4")
21242  field(FRVL, "4")
21243  field(FVST, "Range5")
21244  field(FVVL, "5")
21245  field(FLNK, "$(P):LS01:Z3:INPUT4:ARRAY.PROC")
21246 }
21247 
21248 ##
21249 ## Read the ZONE INPUT setting.
21250 ##
21251 record(subArray, "$(P):LS01:Z3:INPUT4:ARRAY") {
21252  field(SCAN, "Passive")
21253  field(FTVL, "DOUBLE")
21254  field(INP, "$(P):LS01:Z3:ALL4.VAL MS")
21255  field(MALM, "8")
21256  field(NELM, "1")
21257  field(INDX, "6")
21258  field(PREC, "1")
21259  field(FLNK, "$(P):LS01:Z3:INPUT4.PROC")
21260 }
21261 record(mbbi, "$(P):LS01:Z3:INPUT4") {
21262  field(INP, "$(P):LS01:Z3:INPUT4:ARRAY.VAL")
21263  field(SCAN, "Passive")
21264  field(ZRST, "None")
21265  field(ZRVL, "0")
21266  field(ONST, "Input A")
21267  field(ONVL, "1")
21268  field(TWST, "Input B")
21269  field(TWVL, "2")
21270  field(THST, "Input C")
21271  field(THVL, "3")
21272  field(FRST, "Input D")
21273  field(FRVL, "4")
21274  field(FVST, "Input D2")
21275  field(FVVL, "5")
21276  field(SXST, "Input D3")
21277  field(SXVL, "6")
21278  field(SVST, "Input D4")
21279  field(SVVL, "7")
21280  field(EIST, "Input D5")
21281  field(EIVL, "8")
21282  field(FLNK, "$(P):LS01:Z3:RATE4:ARRAY.PROC")
21283 }
21284 
21285 ##
21286 ## Read the ZONE RATE setting.
21287 ##
21288 record(subArray, "$(P):LS01:Z3:RATE4:ARRAY") {
21289  field(SCAN, "Passive")
21290  field(FTVL, "DOUBLE")
21291  field(INP, "$(P):LS01:Z3:ALL4.VAL MS")
21292  field(MALM, "8")
21293  field(NELM, "1")
21294  field(INDX, "7")
21295  field(PREC, "1")
21296  field(FLNK, "$(P):LS01:Z3:RATE4.PROC")
21297 }
21298 record(ai, "$(P):LS01:Z3:RATE4") {
21299  field(SCAN, "Passive")
21300  field(INP, "$(P):LS01:Z3:RATE4:ARRAY.VAL MS")
21301  field(PREC, "1")
21302  field(FLNK, "$(P):LS01:Z3:INITCALC4.PROC")
21303 }
21304 
21305 ##############################################################
21306 ##
21307 ## Populate the write records below with the current values.
21308 ## Only do this once at startup.
21309 ##
21310 ###############################################################
21311 
21312 record(calcout, "$(P):LS01:Z3:INITCALC4") {
21313  field(INPA, "0")
21314  field(CALC, "A")
21315  field(VAL, "0")
21316  field(DOPT, "Use OCAL")
21317  field(OOPT, "When Zero")
21318  field(OCAL, "1")
21319  field(OUT, "$(P):LS01:Z3:INITUB4.PROC")
21320 }
21321 
21322 record(dfanout, "$(P):LS01:Z3:INITUB4") {
21323  field(OMSL, "closed_loop")
21324  field(DOL, "$(P):LS01:Z3:UB4.VAL")
21325  field(OUTA, "$(P):LS01:Z3:UB_S4.VAL PP")
21326  field(FLNK, "$(P):LS01:Z3:INITP4.PROC")
21327 }
21328 record(dfanout, "$(P):LS01:Z3:INITP4") {
21329  field(OMSL, "closed_loop")
21330  field(DOL, "$(P):LS01:Z3:P4.VAL")
21331  field(OUTA, "$(P):LS01:Z3:P_S4.VAL PP")
21332  field(FLNK, "$(P):LS01:Z3:INITI4.PROC")
21333 }
21334 record(dfanout, "$(P):LS01:Z3:INITI4") {
21335  field(OMSL, "closed_loop")
21336  field(DOL, "$(P):LS01:Z3:I4.VAL")
21337  field(OUTA, "$(P):LS01:Z3:I_S4.VAL PP")
21338  field(FLNK, "$(P):LS01:Z3:INITD4.PROC")
21339 }
21340 record(dfanout, "$(P):LS01:Z3:INITD4") {
21341  field(OMSL, "closed_loop")
21342  field(DOL, "$(P):LS01:Z3:D4.VAL")
21343  field(OUTA, "$(P):LS01:Z3:D_S4.VAL PP")
21344  field(FLNK, "$(P):LS01:Z3:INITMOUT4.PROC")
21345 }
21346 record(dfanout, "$(P):LS01:Z3:INITMOUT4") {
21347  field(OMSL, "closed_loop")
21348  field(DOL, "$(P):LS01:Z3:MOUT4.VAL")
21349  field(OUTA, "$(P):LS01:Z3:MOUT_S4.VAL PP")
21350  field(FLNK, "$(P):LS01:Z3:INITRANGE4.PROC")
21351 }
21352 record(dfanout, "$(P):LS01:Z3:INITRANGE4") {
21353  field(OMSL, "closed_loop")
21354  field(DOL, "$(P):LS01:Z3:RANGE4.VAL")
21355  field(OUTA, "$(P):LS01:Z3:RANGE_S4.VAL PP")
21356  field(FLNK, "$(P):LS01:Z3:INITINPUT4.PROC")
21357 }
21358 record(dfanout, "$(P):LS01:Z3:INITINPUT4") {
21359  field(OMSL, "closed_loop")
21360  field(DOL, "$(P):LS01:Z3:INPUT4.VAL")
21361  field(OUTA, "$(P):LS01:Z3:INPUT_S4.VAL PP")
21362  field(FLNK, "$(P):LS01:Z3:INITRATE4.PROC")
21363 }
21364 record(dfanout, "$(P):LS01:Z3:INITRATE4") {
21365  field(OMSL, "closed_loop")
21366  field(DOL, "$(P):LS01:Z3:RATE4.VAL")
21367  field(OUTA, "$(P):LS01:Z3:RATE_S4.VAL PP")
21368  field(FLNK, "$(P):LS01:Z3:INITCOUNT4.PROC")
21369 }
21370 
21371 record(dfanout, "$(P):LS01:Z3:INITCOUNT4") {
21372  field(DOL, "1")
21373  field(OUTA, "$(P):LS01:Z3:INITCALC4.A")
21374 }
21375 
21376 
21377 
21378 #############################################
21379 # Write records. There is a calcout record to
21380 # do the actual write.
21381 #############################################
21382 
21383 ##
21384 ## Set the ZONE upper boundary setting.
21385 ##
21386 record(ao, "$(P):LS01:Z3:UB_S4") {
21387  field(SCAN, "Passive")
21388  field(PREC, "1")
21389  field(SDIS, "$(P):LS01:DISABLE")
21390 }
21391 
21392 ##
21393 ## Set the ZONE P setting.
21394 ##
21395 record(ao, "$(P):LS01:Z3:P_S4") {
21396  field(SCAN, "Passive")
21397  field(PREC, "1")
21398  field(SDIS, "$(P):LS01:DISABLE")
21399 }
21400 
21401 ##
21402 ## Set the ZONE I setting.
21403 ##
21404 record(ao, "$(P):LS01:Z3:I_S4") {
21405  field(SCAN, "Passive")
21406  field(PREC, "1")
21407  field(SDIS, "$(P):LS01:DISABLE")
21408 }
21409 
21410 ##
21411 ## Set the ZONE D setting.
21412 ##
21413 record(ao, "$(P):LS01:Z3:D_S4") {
21414  field(SCAN, "Passive")
21415  field(PREC, "1")
21416  field(SDIS, "$(P):LS01:DISABLE")
21417 }
21418 
21419 ##
21420 ## Set the ZONE MOUT setting.
21421 ##
21422 record(ao, "$(P):LS01:Z3:MOUT_S4") {
21423  field(SCAN, "Passive")
21424  field(PREC, "1")
21425  field(SDIS, "$(P):LS01:DISABLE")
21426 }
21427 
21428 ##
21429 ## Set the ZONE RANGE setting.
21430 ##
21431 record(mbbo, "$(P):LS01:Z3:RANGE_S4") {
21432  field(SCAN, "Passive")
21433  field(ZRST, "Off")
21434  field(ZRVL, "0")
21435  field(ONST, "Range1/Low")
21436  field(ONVL, "1")
21437  field(TWST, "Range2/Medium")
21438  field(TWVL, "2")
21439  field(THST, "Range3/High")
21440  field(THVL, "3")
21441  field(FRST, "Range4")
21442  field(FRVL, "4")
21443  field(FVST, "Range5")
21444  field(FVVL, "5")
21445  field(SDIS, "$(P):LS01:DISABLE")
21446 }
21447 
21448 ##
21449 ## Set the ZONE INPUT setting.
21450 ##
21451 record(mbbo, "$(P):LS01:Z3:INPUT_S4") {
21452  field(ZRST, "None")
21453  field(ZRVL, "0")
21454  field(ONST, "Input A")
21455  field(ONVL, "1")
21456  field(TWST, "Input B")
21457  field(TWVL, "2")
21458  field(THST, "Input C")
21459  field(THVL, "3")
21460  field(FRST, "Input D")
21461  field(FRVL, "4")
21462  field(FVST, "Input D2")
21463  field(FVVL, "5")
21464  field(SXST, "Input D3")
21465  field(SXVL, "6")
21466  field(SVST, "Input D4")
21467  field(SVVL, "7")
21468  field(EIST, "Input D5")
21469  field(EIVL, "8")
21470  field(SDIS, "$(P):LS01:DISABLE")
21471 }
21472 
21473 ##
21474 ## Set the ZONE RATE setting.
21475 ##
21476 record(ao, "$(P):LS01:Z3:RATE_S4") {
21477  field(SCAN, "Passive")
21478  field(PREC, "1")
21479  field(SDIS, "$(P):LS01:DISABLE")
21480 }
21481 
21482 ##
21483 ## Record to write the ZONE parameters.
21484 ##
21485 record(calcout, "$(P):LS01:Z3:SET4") {
21486  field(INPA, "$(P):LS01:Z3:UB_S4")
21487  field(INPB, "$(P):LS01:Z3:P_S4")
21488  field(INPC, "$(P):LS01:Z3:I_S4")
21489  field(INPD, "$(P):LS01:Z3:D_S4")
21490  field(INPE, "$(P):LS01:Z3:MOUT_S4")
21491  field(INPF, "$(P):LS01:Z3:RANGE_S4")
21492  field(INPG, "$(P):LS01:Z3:INPUT_S4")
21493  field(INPH, "$(P):LS01:Z3:RATE_S4")
21494  field(CALC, "0")
21495  field(DTYP, "stream")
21496  field(OUT, "@ls336.proto setZONE(4,3) L0 0")
21497  field(SDIS, "$(P):LS01:DISABLE")
21498  field(FLNK, "$(P):LS01:Z3:ALL4.PROC")
21499 }
21500 
21501 
21502 
21503 
21504 
21505 
21506 
21507 
21508 
21509 
21510 record(mbbi, "$(P):LS01:Z3:RANGE4") {
21511  field(ZRST, "Off")
21512  field(ONST, "On")
21513  field(TWST, "")
21514  field(THST, "")
21515  field(FRST, "")
21516  field(FVST, "")
21517 }
21518 
21519 record(mbbo, "$(P):LS01:Z3:RANGE_S4") {
21520  field(ZRST, "Off")
21521  field(ONST, "On")
21522  field(TWST, "")
21523  field(THST, "")
21524  field(FRST, "")
21525  field(FVST, "")
21526 }
21527 
21528 
21529 
21530 
21531 
21532 
21533 # This just includes the zone file and overrides the RANGE options
21534 # for the analog control channels.
21535 
21536 #######################################
21537 #
21538 # Template to support reading and setting
21539 # controller ZONE parameters. It reads the ZONE
21540 # parameters into an array, then uses subArrays to
21541 # extract each parameter.
21542 #
21543 # This template is used by the output template
21544 # and it needs the following macros:
21545 #
21546 # ZONE: zone number
21547 # OUT: output number
21548 #
21549 #######################################
21550 
21551 ##
21552 ## Read the ZONE setting into an array (8 values)
21553 ##
21554 record(waveform, "$(P):LS01:Z4:ALL4") {
21555  field(DTYP, "stream")
21556  field(SDIS, "$(P):LS01:DISABLE_POLL")
21557  field(INP, "@ls336.proto getZONE(4,4) L0 0")
21558  field(SCAN, "Passive")
21559  field(NELM, "8")
21560  field(FTVL, "DOUBLE")
21561  field(PREC, "1")
21562  field(FLNK, "$(P):LS01:Z4:UB4:ARRAY.PROC")
21563 }
21564 
21565 ##
21566 ## Read the ZONE upper boundary setting.
21567 ##
21568 record(subArray, "$(P):LS01:Z4:UB4:ARRAY") {
21569  field(SCAN, "Passive")
21570  field(FTVL, "DOUBLE")
21571  field(INP, "$(P):LS01:Z4:ALL4.VAL MS")
21572  field(MALM, "8")
21573  field(NELM, "1")
21574  field(INDX, "0")
21575  field(PREC, "1")
21576  field(FLNK, "$(P):LS01:Z4:UB4.PROC")
21577 }
21578 record(ai, "$(P):LS01:Z4:UB4") {
21579  field(SCAN, "Passive")
21580  field(INP, "$(P):LS01:Z4:UB4:ARRAY.VAL MS")
21581  field(PREC, "1")
21582  field(FLNK, "$(P):LS01:Z4:P4:ARRAY.PROC")
21583 }
21584 
21585 ##
21586 ## Read the ZONE P setting.
21587 ##
21588 record(subArray, "$(P):LS01:Z4:P4:ARRAY") {
21589  field(SCAN, "Passive")
21590  field(FTVL, "DOUBLE")
21591  field(INP, "$(P):LS01:Z4:ALL4.VAL MS")
21592  field(MALM, "8")
21593  field(NELM, "1")
21594  field(INDX, "1")
21595  field(PREC, "1")
21596  field(FLNK, "$(P):LS01:Z4:P4.PROC")
21597 }
21598 record(ai, "$(P):LS01:Z4:P4") {
21599  field(SCAN, "Passive")
21600  field(INP, "$(P):LS01:Z4:P4:ARRAY.VAL MS")
21601  field(PREC, "1")
21602  field(FLNK, "$(P):LS01:Z4:I4:ARRAY.PROC")
21603 }
21604 
21605 ##
21606 ## Read the ZONE I setting.
21607 ##
21608 record(subArray, "$(P):LS01:Z4:I4:ARRAY") {
21609  field(SCAN, "Passive")
21610  field(FTVL, "DOUBLE")
21611  field(INP, "$(P):LS01:Z4:ALL4.VAL MS")
21612  field(MALM, "8")
21613  field(NELM, "1")
21614  field(INDX, "2")
21615  field(PREC, "1")
21616  field(FLNK, "$(P):LS01:Z4:I4.PROC")
21617 }
21618 record(ai, "$(P):LS01:Z4:I4") {
21619  field(SCAN, "Passive")
21620  field(INP, "$(P):LS01:Z4:I4:ARRAY.VAL MS")
21621  field(PREC, "1")
21622  field(FLNK, "$(P):LS01:Z4:D4:ARRAY.PROC")
21623 }
21624 
21625 ##
21626 ## Read the ZONE D setting.
21627 ##
21628 record(subArray, "$(P):LS01:Z4:D4:ARRAY") {
21629  field(SCAN, "Passive")
21630  field(FTVL, "DOUBLE")
21631  field(INP, "$(P):LS01:Z4:ALL4.VAL MS")
21632  field(MALM, "8")
21633  field(NELM, "1")
21634  field(INDX, "3")
21635  field(PREC, "1")
21636  field(FLNK, "$(P):LS01:Z4:D4.PROC")
21637 }
21638 record(ai, "$(P):LS01:Z4:D4") {
21639  field(SCAN, "Passive")
21640  field(INP, "$(P):LS01:Z4:D4:ARRAY.VAL MS")
21641  field(PREC, "1")
21642  field(FLNK, "$(P):LS01:Z4:MOUT4:ARRAY.PROC")
21643 }
21644 
21645 ##
21646 ## Read the ZONE MOUT setting.
21647 ##
21648 record(subArray, "$(P):LS01:Z4:MOUT4:ARRAY") {
21649  field(SCAN, "Passive")
21650  field(FTVL, "DOUBLE")
21651  field(INP, "$(P):LS01:Z4:ALL4.VAL MS")
21652  field(MALM, "8")
21653  field(NELM, "1")
21654  field(INDX, "4")
21655  field(PREC, "1")
21656  field(FLNK, "$(P):LS01:Z4:MOUT4.PROC")
21657 }
21658 record(ai, "$(P):LS01:Z4:MOUT4") {
21659  field(SCAN, "Passive")
21660  field(INP, "$(P):LS01:Z4:MOUT4:ARRAY.VAL MS")
21661  field(PREC, "1")
21662  field(FLNK, "$(P):LS01:Z4:RANGE4:ARRAY.PROC")
21663 }
21664 
21665 ##
21666 ## Read the ZONE RANGE setting.
21667 ##
21668 record(subArray, "$(P):LS01:Z4:RANGE4:ARRAY") {
21669  field(SCAN, "Passive")
21670  field(FTVL, "DOUBLE")
21671  field(INP, "$(P):LS01:Z4:ALL4.VAL MS")
21672  field(MALM, "8")
21673  field(NELM, "1")
21674  field(INDX, "5")
21675  field(PREC, "1")
21676  field(FLNK, "$(P):LS01:Z4:RANGE4.PROC")
21677 }
21678 record(mbbi, "$(P):LS01:Z4:RANGE4") {
21679  field(INP, "$(P):LS01:Z4:RANGE4:ARRAY.VAL")
21680  field(SCAN, "Passive")
21681  field(ZRST, "Off")
21682  field(ZRVL, "0")
21683  field(ONST, "Range1/Low")
21684  field(ONVL, "1")
21685  field(TWST, "Range2/Medium")
21686  field(TWVL, "2")
21687  field(THST, "Range3/High")
21688  field(THVL, "3")
21689  field(FRST, "Range4")
21690  field(FRVL, "4")
21691  field(FVST, "Range5")
21692  field(FVVL, "5")
21693  field(FLNK, "$(P):LS01:Z4:INPUT4:ARRAY.PROC")
21694 }
21695 
21696 ##
21697 ## Read the ZONE INPUT setting.
21698 ##
21699 record(subArray, "$(P):LS01:Z4:INPUT4:ARRAY") {
21700  field(SCAN, "Passive")
21701  field(FTVL, "DOUBLE")
21702  field(INP, "$(P):LS01:Z4:ALL4.VAL MS")
21703  field(MALM, "8")
21704  field(NELM, "1")
21705  field(INDX, "6")
21706  field(PREC, "1")
21707  field(FLNK, "$(P):LS01:Z4:INPUT4.PROC")
21708 }
21709 record(mbbi, "$(P):LS01:Z4:INPUT4") {
21710  field(INP, "$(P):LS01:Z4:INPUT4:ARRAY.VAL")
21711  field(SCAN, "Passive")
21712  field(ZRST, "None")
21713  field(ZRVL, "0")
21714  field(ONST, "Input A")
21715  field(ONVL, "1")
21716  field(TWST, "Input B")
21717  field(TWVL, "2")
21718  field(THST, "Input C")
21719  field(THVL, "3")
21720  field(FRST, "Input D")
21721  field(FRVL, "4")
21722  field(FVST, "Input D2")
21723  field(FVVL, "5")
21724  field(SXST, "Input D3")
21725  field(SXVL, "6")
21726  field(SVST, "Input D4")
21727  field(SVVL, "7")
21728  field(EIST, "Input D5")
21729  field(EIVL, "8")
21730  field(FLNK, "$(P):LS01:Z4:RATE4:ARRAY.PROC")
21731 }
21732 
21733 ##
21734 ## Read the ZONE RATE setting.
21735 ##
21736 record(subArray, "$(P):LS01:Z4:RATE4:ARRAY") {
21737  field(SCAN, "Passive")
21738  field(FTVL, "DOUBLE")
21739  field(INP, "$(P):LS01:Z4:ALL4.VAL MS")
21740  field(MALM, "8")
21741  field(NELM, "1")
21742  field(INDX, "7")
21743  field(PREC, "1")
21744  field(FLNK, "$(P):LS01:Z4:RATE4.PROC")
21745 }
21746 record(ai, "$(P):LS01:Z4:RATE4") {
21747  field(SCAN, "Passive")
21748  field(INP, "$(P):LS01:Z4:RATE4:ARRAY.VAL MS")
21749  field(PREC, "1")
21750  field(FLNK, "$(P):LS01:Z4:INITCALC4.PROC")
21751 }
21752 
21753 ##############################################################
21754 ##
21755 ## Populate the write records below with the current values.
21756 ## Only do this once at startup.
21757 ##
21758 ###############################################################
21759 
21760 record(calcout, "$(P):LS01:Z4:INITCALC4") {
21761  field(INPA, "0")
21762  field(CALC, "A")
21763  field(VAL, "0")
21764  field(DOPT, "Use OCAL")
21765  field(OOPT, "When Zero")
21766  field(OCAL, "1")
21767  field(OUT, "$(P):LS01:Z4:INITUB4.PROC")
21768 }
21769 
21770 record(dfanout, "$(P):LS01:Z4:INITUB4") {
21771  field(OMSL, "closed_loop")
21772  field(DOL, "$(P):LS01:Z4:UB4.VAL")
21773  field(OUTA, "$(P):LS01:Z4:UB_S4.VAL PP")
21774  field(FLNK, "$(P):LS01:Z4:INITP4.PROC")
21775 }
21776 record(dfanout, "$(P):LS01:Z4:INITP4") {
21777  field(OMSL, "closed_loop")
21778  field(DOL, "$(P):LS01:Z4:P4.VAL")
21779  field(OUTA, "$(P):LS01:Z4:P_S4.VAL PP")
21780  field(FLNK, "$(P):LS01:Z4:INITI4.PROC")
21781 }
21782 record(dfanout, "$(P):LS01:Z4:INITI4") {
21783  field(OMSL, "closed_loop")
21784  field(DOL, "$(P):LS01:Z4:I4.VAL")
21785  field(OUTA, "$(P):LS01:Z4:I_S4.VAL PP")
21786  field(FLNK, "$(P):LS01:Z4:INITD4.PROC")
21787 }
21788 record(dfanout, "$(P):LS01:Z4:INITD4") {
21789  field(OMSL, "closed_loop")
21790  field(DOL, "$(P):LS01:Z4:D4.VAL")
21791  field(OUTA, "$(P):LS01:Z4:D_S4.VAL PP")
21792  field(FLNK, "$(P):LS01:Z4:INITMOUT4.PROC")
21793 }
21794 record(dfanout, "$(P):LS01:Z4:INITMOUT4") {
21795  field(OMSL, "closed_loop")
21796  field(DOL, "$(P):LS01:Z4:MOUT4.VAL")
21797  field(OUTA, "$(P):LS01:Z4:MOUT_S4.VAL PP")
21798  field(FLNK, "$(P):LS01:Z4:INITRANGE4.PROC")
21799 }
21800 record(dfanout, "$(P):LS01:Z4:INITRANGE4") {
21801  field(OMSL, "closed_loop")
21802  field(DOL, "$(P):LS01:Z4:RANGE4.VAL")
21803  field(OUTA, "$(P):LS01:Z4:RANGE_S4.VAL PP")
21804  field(FLNK, "$(P):LS01:Z4:INITINPUT4.PROC")
21805 }
21806 record(dfanout, "$(P):LS01:Z4:INITINPUT4") {
21807  field(OMSL, "closed_loop")
21808  field(DOL, "$(P):LS01:Z4:INPUT4.VAL")
21809  field(OUTA, "$(P):LS01:Z4:INPUT_S4.VAL PP")
21810  field(FLNK, "$(P):LS01:Z4:INITRATE4.PROC")
21811 }
21812 record(dfanout, "$(P):LS01:Z4:INITRATE4") {
21813  field(OMSL, "closed_loop")
21814  field(DOL, "$(P):LS01:Z4:RATE4.VAL")
21815  field(OUTA, "$(P):LS01:Z4:RATE_S4.VAL PP")
21816  field(FLNK, "$(P):LS01:Z4:INITCOUNT4.PROC")
21817 }
21818 
21819 record(dfanout, "$(P):LS01:Z4:INITCOUNT4") {
21820  field(DOL, "1")
21821  field(OUTA, "$(P):LS01:Z4:INITCALC4.A")
21822 }
21823 
21824 
21825 
21826 #############################################
21827 # Write records. There is a calcout record to
21828 # do the actual write.
21829 #############################################
21830 
21831 ##
21832 ## Set the ZONE upper boundary setting.
21833 ##
21834 record(ao, "$(P):LS01:Z4:UB_S4") {
21835  field(SCAN, "Passive")
21836  field(PREC, "1")
21837  field(SDIS, "$(P):LS01:DISABLE")
21838 }
21839 
21840 ##
21841 ## Set the ZONE P setting.
21842 ##
21843 record(ao, "$(P):LS01:Z4:P_S4") {
21844  field(SCAN, "Passive")
21845  field(PREC, "1")
21846  field(SDIS, "$(P):LS01:DISABLE")
21847 }
21848 
21849 ##
21850 ## Set the ZONE I setting.
21851 ##
21852 record(ao, "$(P):LS01:Z4:I_S4") {
21853  field(SCAN, "Passive")
21854  field(PREC, "1")
21855  field(SDIS, "$(P):LS01:DISABLE")
21856 }
21857 
21858 ##
21859 ## Set the ZONE D setting.
21860 ##
21861 record(ao, "$(P):LS01:Z4:D_S4") {
21862  field(SCAN, "Passive")
21863  field(PREC, "1")
21864  field(SDIS, "$(P):LS01:DISABLE")
21865 }
21866 
21867 ##
21868 ## Set the ZONE MOUT setting.
21869 ##
21870 record(ao, "$(P):LS01:Z4:MOUT_S4") {
21871  field(SCAN, "Passive")
21872  field(PREC, "1")
21873  field(SDIS, "$(P):LS01:DISABLE")
21874 }
21875 
21876 ##
21877 ## Set the ZONE RANGE setting.
21878 ##
21879 record(mbbo, "$(P):LS01:Z4:RANGE_S4") {
21880  field(SCAN, "Passive")
21881  field(ZRST, "Off")
21882  field(ZRVL, "0")
21883  field(ONST, "Range1/Low")
21884  field(ONVL, "1")
21885  field(TWST, "Range2/Medium")
21886  field(TWVL, "2")
21887  field(THST, "Range3/High")
21888  field(THVL, "3")
21889  field(FRST, "Range4")
21890  field(FRVL, "4")
21891  field(FVST, "Range5")
21892  field(FVVL, "5")
21893  field(SDIS, "$(P):LS01:DISABLE")
21894 }
21895 
21896 ##
21897 ## Set the ZONE INPUT setting.
21898 ##
21899 record(mbbo, "$(P):LS01:Z4:INPUT_S4") {
21900  field(ZRST, "None")
21901  field(ZRVL, "0")
21902  field(ONST, "Input A")
21903  field(ONVL, "1")
21904  field(TWST, "Input B")
21905  field(TWVL, "2")
21906  field(THST, "Input C")
21907  field(THVL, "3")
21908  field(FRST, "Input D")
21909  field(FRVL, "4")
21910  field(FVST, "Input D2")
21911  field(FVVL, "5")
21912  field(SXST, "Input D3")
21913  field(SXVL, "6")
21914  field(SVST, "Input D4")
21915  field(SVVL, "7")
21916  field(EIST, "Input D5")
21917  field(EIVL, "8")
21918  field(SDIS, "$(P):LS01:DISABLE")
21919 }
21920 
21921 ##
21922 ## Set the ZONE RATE setting.
21923 ##
21924 record(ao, "$(P):LS01:Z4:RATE_S4") {
21925  field(SCAN, "Passive")
21926  field(PREC, "1")
21927  field(SDIS, "$(P):LS01:DISABLE")
21928 }
21929 
21930 ##
21931 ## Record to write the ZONE parameters.
21932 ##
21933 record(calcout, "$(P):LS01:Z4:SET4") {
21934  field(INPA, "$(P):LS01:Z4:UB_S4")
21935  field(INPB, "$(P):LS01:Z4:P_S4")
21936  field(INPC, "$(P):LS01:Z4:I_S4")
21937  field(INPD, "$(P):LS01:Z4:D_S4")
21938  field(INPE, "$(P):LS01:Z4:MOUT_S4")
21939  field(INPF, "$(P):LS01:Z4:RANGE_S4")
21940  field(INPG, "$(P):LS01:Z4:INPUT_S4")
21941  field(INPH, "$(P):LS01:Z4:RATE_S4")
21942  field(CALC, "0")
21943  field(DTYP, "stream")
21944  field(OUT, "@ls336.proto setZONE(4,4) L0 0")
21945  field(SDIS, "$(P):LS01:DISABLE")
21946  field(FLNK, "$(P):LS01:Z4:ALL4.PROC")
21947 }
21948 
21949 
21950 
21951 
21952 
21953 
21954 
21955 
21956 
21957 
21958 record(mbbi, "$(P):LS01:Z4:RANGE4") {
21959  field(ZRST, "Off")
21960  field(ONST, "On")
21961  field(TWST, "")
21962  field(THST, "")
21963  field(FRST, "")
21964  field(FVST, "")
21965 }
21966 
21967 record(mbbo, "$(P):LS01:Z4:RANGE_S4") {
21968  field(ZRST, "Off")
21969  field(ONST, "On")
21970  field(TWST, "")
21971  field(THST, "")
21972  field(FRST, "")
21973  field(FVST, "")
21974 }
21975 
21976 
21977 
21978 
21979 
21980 
21981 # This just includes the zone file and overrides the RANGE options
21982 # for the analog control channels.
21983 
21984 #######################################
21985 #
21986 # Template to support reading and setting
21987 # controller ZONE parameters. It reads the ZONE
21988 # parameters into an array, then uses subArrays to
21989 # extract each parameter.
21990 #
21991 # This template is used by the output template
21992 # and it needs the following macros:
21993 #
21994 # ZONE: zone number
21995 # OUT: output number
21996 #
21997 #######################################
21998 
21999 ##
22000 ## Read the ZONE setting into an array (8 values)
22001 ##
22002 record(waveform, "$(P):LS01:Z5:ALL4") {
22003  field(DTYP, "stream")
22004  field(SDIS, "$(P):LS01:DISABLE_POLL")
22005  field(INP, "@ls336.proto getZONE(4,5) L0 0")
22006  field(SCAN, "Passive")
22007  field(NELM, "8")
22008  field(FTVL, "DOUBLE")
22009  field(PREC, "1")
22010  field(FLNK, "$(P):LS01:Z5:UB4:ARRAY.PROC")
22011 }
22012 
22013 ##
22014 ## Read the ZONE upper boundary setting.
22015 ##
22016 record(subArray, "$(P):LS01:Z5:UB4:ARRAY") {
22017  field(SCAN, "Passive")
22018  field(FTVL, "DOUBLE")
22019  field(INP, "$(P):LS01:Z5:ALL4.VAL MS")
22020  field(MALM, "8")
22021  field(NELM, "1")
22022  field(INDX, "0")
22023  field(PREC, "1")
22024  field(FLNK, "$(P):LS01:Z5:UB4.PROC")
22025 }
22026 record(ai, "$(P):LS01:Z5:UB4") {
22027  field(SCAN, "Passive")
22028  field(INP, "$(P):LS01:Z5:UB4:ARRAY.VAL MS")
22029  field(PREC, "1")
22030  field(FLNK, "$(P):LS01:Z5:P4:ARRAY.PROC")
22031 }
22032 
22033 ##
22034 ## Read the ZONE P setting.
22035 ##
22036 record(subArray, "$(P):LS01:Z5:P4:ARRAY") {
22037  field(SCAN, "Passive")
22038  field(FTVL, "DOUBLE")
22039  field(INP, "$(P):LS01:Z5:ALL4.VAL MS")
22040  field(MALM, "8")
22041  field(NELM, "1")
22042  field(INDX, "1")
22043  field(PREC, "1")
22044  field(FLNK, "$(P):LS01:Z5:P4.PROC")
22045 }
22046 record(ai, "$(P):LS01:Z5:P4") {
22047  field(SCAN, "Passive")
22048  field(INP, "$(P):LS01:Z5:P4:ARRAY.VAL MS")
22049  field(PREC, "1")
22050  field(FLNK, "$(P):LS01:Z5:I4:ARRAY.PROC")
22051 }
22052 
22053 ##
22054 ## Read the ZONE I setting.
22055 ##
22056 record(subArray, "$(P):LS01:Z5:I4:ARRAY") {
22057  field(SCAN, "Passive")
22058  field(FTVL, "DOUBLE")
22059  field(INP, "$(P):LS01:Z5:ALL4.VAL MS")
22060  field(MALM, "8")
22061  field(NELM, "1")
22062  field(INDX, "2")
22063  field(PREC, "1")
22064  field(FLNK, "$(P):LS01:Z5:I4.PROC")
22065 }
22066 record(ai, "$(P):LS01:Z5:I4") {
22067  field(SCAN, "Passive")
22068  field(INP, "$(P):LS01:Z5:I4:ARRAY.VAL MS")
22069  field(PREC, "1")
22070  field(FLNK, "$(P):LS01:Z5:D4:ARRAY.PROC")
22071 }
22072 
22073 ##
22074 ## Read the ZONE D setting.
22075 ##
22076 record(subArray, "$(P):LS01:Z5:D4:ARRAY") {
22077  field(SCAN, "Passive")
22078  field(FTVL, "DOUBLE")
22079  field(INP, "$(P):LS01:Z5:ALL4.VAL MS")
22080  field(MALM, "8")
22081  field(NELM, "1")
22082  field(INDX, "3")
22083  field(PREC, "1")
22084  field(FLNK, "$(P):LS01:Z5:D4.PROC")
22085 }
22086 record(ai, "$(P):LS01:Z5:D4") {
22087  field(SCAN, "Passive")
22088  field(INP, "$(P):LS01:Z5:D4:ARRAY.VAL MS")
22089  field(PREC, "1")
22090  field(FLNK, "$(P):LS01:Z5:MOUT4:ARRAY.PROC")
22091 }
22092 
22093 ##
22094 ## Read the ZONE MOUT setting.
22095 ##
22096 record(subArray, "$(P):LS01:Z5:MOUT4:ARRAY") {
22097  field(SCAN, "Passive")
22098  field(FTVL, "DOUBLE")
22099  field(INP, "$(P):LS01:Z5:ALL4.VAL MS")
22100  field(MALM, "8")
22101  field(NELM, "1")
22102  field(INDX, "4")
22103  field(PREC, "1")
22104  field(FLNK, "$(P):LS01:Z5:MOUT4.PROC")
22105 }
22106 record(ai, "$(P):LS01:Z5:MOUT4") {
22107  field(SCAN, "Passive")
22108  field(INP, "$(P):LS01:Z5:MOUT4:ARRAY.VAL MS")
22109  field(PREC, "1")
22110  field(FLNK, "$(P):LS01:Z5:RANGE4:ARRAY.PROC")
22111 }
22112 
22113 ##
22114 ## Read the ZONE RANGE setting.
22115 ##
22116 record(subArray, "$(P):LS01:Z5:RANGE4:ARRAY") {
22117  field(SCAN, "Passive")
22118  field(FTVL, "DOUBLE")
22119  field(INP, "$(P):LS01:Z5:ALL4.VAL MS")
22120  field(MALM, "8")
22121  field(NELM, "1")
22122  field(INDX, "5")
22123  field(PREC, "1")
22124  field(FLNK, "$(P):LS01:Z5:RANGE4.PROC")
22125 }
22126 record(mbbi, "$(P):LS01:Z5:RANGE4") {
22127  field(INP, "$(P):LS01:Z5:RANGE4:ARRAY.VAL")
22128  field(SCAN, "Passive")
22129  field(ZRST, "Off")
22130  field(ZRVL, "0")
22131  field(ONST, "Range1/Low")
22132  field(ONVL, "1")
22133  field(TWST, "Range2/Medium")
22134  field(TWVL, "2")
22135  field(THST, "Range3/High")
22136  field(THVL, "3")
22137  field(FRST, "Range4")
22138  field(FRVL, "4")
22139  field(FVST, "Range5")
22140  field(FVVL, "5")
22141  field(FLNK, "$(P):LS01:Z5:INPUT4:ARRAY.PROC")
22142 }
22143 
22144 ##
22145 ## Read the ZONE INPUT setting.
22146 ##
22147 record(subArray, "$(P):LS01:Z5:INPUT4:ARRAY") {
22148  field(SCAN, "Passive")
22149  field(FTVL, "DOUBLE")
22150  field(INP, "$(P):LS01:Z5:ALL4.VAL MS")
22151  field(MALM, "8")
22152  field(NELM, "1")
22153  field(INDX, "6")
22154  field(PREC, "1")
22155  field(FLNK, "$(P):LS01:Z5:INPUT4.PROC")
22156 }
22157 record(mbbi, "$(P):LS01:Z5:INPUT4") {
22158  field(INP, "$(P):LS01:Z5:INPUT4:ARRAY.VAL")
22159  field(SCAN, "Passive")
22160  field(ZRST, "None")
22161  field(ZRVL, "0")
22162  field(ONST, "Input A")
22163  field(ONVL, "1")
22164  field(TWST, "Input B")
22165  field(TWVL, "2")
22166  field(THST, "Input C")
22167  field(THVL, "3")
22168  field(FRST, "Input D")
22169  field(FRVL, "4")
22170  field(FVST, "Input D2")
22171  field(FVVL, "5")
22172  field(SXST, "Input D3")
22173  field(SXVL, "6")
22174  field(SVST, "Input D4")
22175  field(SVVL, "7")
22176  field(EIST, "Input D5")
22177  field(EIVL, "8")
22178  field(FLNK, "$(P):LS01:Z5:RATE4:ARRAY.PROC")
22179 }
22180 
22181 ##
22182 ## Read the ZONE RATE setting.
22183 ##
22184 record(subArray, "$(P):LS01:Z5:RATE4:ARRAY") {
22185  field(SCAN, "Passive")
22186  field(FTVL, "DOUBLE")
22187  field(INP, "$(P):LS01:Z5:ALL4.VAL MS")
22188  field(MALM, "8")
22189  field(NELM, "1")
22190  field(INDX, "7")
22191  field(PREC, "1")
22192  field(FLNK, "$(P):LS01:Z5:RATE4.PROC")
22193 }
22194 record(ai, "$(P):LS01:Z5:RATE4") {
22195  field(SCAN, "Passive")
22196  field(INP, "$(P):LS01:Z5:RATE4:ARRAY.VAL MS")
22197  field(PREC, "1")
22198  field(FLNK, "$(P):LS01:Z5:INITCALC4.PROC")
22199 }
22200 
22201 ##############################################################
22202 ##
22203 ## Populate the write records below with the current values.
22204 ## Only do this once at startup.
22205 ##
22206 ###############################################################
22207 
22208 record(calcout, "$(P):LS01:Z5:INITCALC4") {
22209  field(INPA, "0")
22210  field(CALC, "A")
22211  field(VAL, "0")
22212  field(DOPT, "Use OCAL")
22213  field(OOPT, "When Zero")
22214  field(OCAL, "1")
22215  field(OUT, "$(P):LS01:Z5:INITUB4.PROC")
22216 }
22217 
22218 record(dfanout, "$(P):LS01:Z5:INITUB4") {
22219  field(OMSL, "closed_loop")
22220  field(DOL, "$(P):LS01:Z5:UB4.VAL")
22221  field(OUTA, "$(P):LS01:Z5:UB_S4.VAL PP")
22222  field(FLNK, "$(P):LS01:Z5:INITP4.PROC")
22223 }
22224 record(dfanout, "$(P):LS01:Z5:INITP4") {
22225  field(OMSL, "closed_loop")
22226  field(DOL, "$(P):LS01:Z5:P4.VAL")
22227  field(OUTA, "$(P):LS01:Z5:P_S4.VAL PP")
22228  field(FLNK, "$(P):LS01:Z5:INITI4.PROC")
22229 }
22230 record(dfanout, "$(P):LS01:Z5:INITI4") {
22231  field(OMSL, "closed_loop")
22232  field(DOL, "$(P):LS01:Z5:I4.VAL")
22233  field(OUTA, "$(P):LS01:Z5:I_S4.VAL PP")
22234  field(FLNK, "$(P):LS01:Z5:INITD4.PROC")
22235 }
22236 record(dfanout, "$(P):LS01:Z5:INITD4") {
22237  field(OMSL, "closed_loop")
22238  field(DOL, "$(P):LS01:Z5:D4.VAL")
22239  field(OUTA, "$(P):LS01:Z5:D_S4.VAL PP")
22240  field(FLNK, "$(P):LS01:Z5:INITMOUT4.PROC")
22241 }
22242 record(dfanout, "$(P):LS01:Z5:INITMOUT4") {
22243  field(OMSL, "closed_loop")
22244  field(DOL, "$(P):LS01:Z5:MOUT4.VAL")
22245  field(OUTA, "$(P):LS01:Z5:MOUT_S4.VAL PP")
22246  field(FLNK, "$(P):LS01:Z5:INITRANGE4.PROC")
22247 }
22248 record(dfanout, "$(P):LS01:Z5:INITRANGE4") {
22249  field(OMSL, "closed_loop")
22250  field(DOL, "$(P):LS01:Z5:RANGE4.VAL")
22251  field(OUTA, "$(P):LS01:Z5:RANGE_S4.VAL PP")
22252  field(FLNK, "$(P):LS01:Z5:INITINPUT4.PROC")
22253 }
22254 record(dfanout, "$(P):LS01:Z5:INITINPUT4") {
22255  field(OMSL, "closed_loop")
22256  field(DOL, "$(P):LS01:Z5:INPUT4.VAL")
22257  field(OUTA, "$(P):LS01:Z5:INPUT_S4.VAL PP")
22258  field(FLNK, "$(P):LS01:Z5:INITRATE4.PROC")
22259 }
22260 record(dfanout, "$(P):LS01:Z5:INITRATE4") {
22261  field(OMSL, "closed_loop")
22262  field(DOL, "$(P):LS01:Z5:RATE4.VAL")
22263  field(OUTA, "$(P):LS01:Z5:RATE_S4.VAL PP")
22264  field(FLNK, "$(P):LS01:Z5:INITCOUNT4.PROC")
22265 }
22266 
22267 record(dfanout, "$(P):LS01:Z5:INITCOUNT4") {
22268  field(DOL, "1")
22269  field(OUTA, "$(P):LS01:Z5:INITCALC4.A")
22270 }
22271 
22272 
22273 
22274 #############################################
22275 # Write records. There is a calcout record to
22276 # do the actual write.
22277 #############################################
22278 
22279 ##
22280 ## Set the ZONE upper boundary setting.
22281 ##
22282 record(ao, "$(P):LS01:Z5:UB_S4") {
22283  field(SCAN, "Passive")
22284  field(PREC, "1")
22285  field(SDIS, "$(P):LS01:DISABLE")
22286 }
22287 
22288 ##
22289 ## Set the ZONE P setting.
22290 ##
22291 record(ao, "$(P):LS01:Z5:P_S4") {
22292  field(SCAN, "Passive")
22293  field(PREC, "1")
22294  field(SDIS, "$(P):LS01:DISABLE")
22295 }
22296 
22297 ##
22298 ## Set the ZONE I setting.
22299 ##
22300 record(ao, "$(P):LS01:Z5:I_S4") {
22301  field(SCAN, "Passive")
22302  field(PREC, "1")
22303  field(SDIS, "$(P):LS01:DISABLE")
22304 }
22305 
22306 ##
22307 ## Set the ZONE D setting.
22308 ##
22309 record(ao, "$(P):LS01:Z5:D_S4") {
22310  field(SCAN, "Passive")
22311  field(PREC, "1")
22312  field(SDIS, "$(P):LS01:DISABLE")
22313 }
22314 
22315 ##
22316 ## Set the ZONE MOUT setting.
22317 ##
22318 record(ao, "$(P):LS01:Z5:MOUT_S4") {
22319  field(SCAN, "Passive")
22320  field(PREC, "1")
22321  field(SDIS, "$(P):LS01:DISABLE")
22322 }
22323 
22324 ##
22325 ## Set the ZONE RANGE setting.
22326 ##
22327 record(mbbo, "$(P):LS01:Z5:RANGE_S4") {
22328  field(SCAN, "Passive")
22329  field(ZRST, "Off")
22330  field(ZRVL, "0")
22331  field(ONST, "Range1/Low")
22332  field(ONVL, "1")
22333  field(TWST, "Range2/Medium")
22334  field(TWVL, "2")
22335  field(THST, "Range3/High")
22336  field(THVL, "3")
22337  field(FRST, "Range4")
22338  field(FRVL, "4")
22339  field(FVST, "Range5")
22340  field(FVVL, "5")
22341  field(SDIS, "$(P):LS01:DISABLE")
22342 }
22343 
22344 ##
22345 ## Set the ZONE INPUT setting.
22346 ##
22347 record(mbbo, "$(P):LS01:Z5:INPUT_S4") {
22348  field(ZRST, "None")
22349  field(ZRVL, "0")
22350  field(ONST, "Input A")
22351  field(ONVL, "1")
22352  field(TWST, "Input B")
22353  field(TWVL, "2")
22354  field(THST, "Input C")
22355  field(THVL, "3")
22356  field(FRST, "Input D")
22357  field(FRVL, "4")
22358  field(FVST, "Input D2")
22359  field(FVVL, "5")
22360  field(SXST, "Input D3")
22361  field(SXVL, "6")
22362  field(SVST, "Input D4")
22363  field(SVVL, "7")
22364  field(EIST, "Input D5")
22365  field(EIVL, "8")
22366  field(SDIS, "$(P):LS01:DISABLE")
22367 }
22368 
22369 ##
22370 ## Set the ZONE RATE setting.
22371 ##
22372 record(ao, "$(P):LS01:Z5:RATE_S4") {
22373  field(SCAN, "Passive")
22374  field(PREC, "1")
22375  field(SDIS, "$(P):LS01:DISABLE")
22376 }
22377 
22378 ##
22379 ## Record to write the ZONE parameters.
22380 ##
22381 record(calcout, "$(P):LS01:Z5:SET4") {
22382  field(INPA, "$(P):LS01:Z5:UB_S4")
22383  field(INPB, "$(P):LS01:Z5:P_S4")
22384  field(INPC, "$(P):LS01:Z5:I_S4")
22385  field(INPD, "$(P):LS01:Z5:D_S4")
22386  field(INPE, "$(P):LS01:Z5:MOUT_S4")
22387  field(INPF, "$(P):LS01:Z5:RANGE_S4")
22388  field(INPG, "$(P):LS01:Z5:INPUT_S4")
22389  field(INPH, "$(P):LS01:Z5:RATE_S4")
22390  field(CALC, "0")
22391  field(DTYP, "stream")
22392  field(OUT, "@ls336.proto setZONE(4,5) L0 0")
22393  field(SDIS, "$(P):LS01:DISABLE")
22394  field(FLNK, "$(P):LS01:Z5:ALL4.PROC")
22395 }
22396 
22397 
22398 
22399 
22400 
22401 
22402 
22403 
22404 
22405 
22406 record(mbbi, "$(P):LS01:Z5:RANGE4") {
22407  field(ZRST, "Off")
22408  field(ONST, "On")
22409  field(TWST, "")
22410  field(THST, "")
22411  field(FRST, "")
22412  field(FVST, "")
22413 }
22414 
22415 record(mbbo, "$(P):LS01:Z5:RANGE_S4") {
22416  field(ZRST, "Off")
22417  field(ONST, "On")
22418  field(TWST, "")
22419  field(THST, "")
22420  field(FRST, "")
22421  field(FVST, "")
22422 }
22423 
22424 
22425 
22426 
22427 
22428 
22429 # This just includes the zone file and overrides the RANGE options
22430 # for the analog control channels.
22431 
22432 #######################################
22433 #
22434 # Template to support reading and setting
22435 # controller ZONE parameters. It reads the ZONE
22436 # parameters into an array, then uses subArrays to
22437 # extract each parameter.
22438 #
22439 # This template is used by the output template
22440 # and it needs the following macros:
22441 #
22442 # ZONE: zone number
22443 # OUT: output number
22444 #
22445 #######################################
22446 
22447 ##
22448 ## Read the ZONE setting into an array (8 values)
22449 ##
22450 record(waveform, "$(P):LS01:Z6:ALL4") {
22451  field(DTYP, "stream")
22452  field(SDIS, "$(P):LS01:DISABLE_POLL")
22453  field(INP, "@ls336.proto getZONE(4,6) L0 0")
22454  field(SCAN, "Passive")
22455  field(NELM, "8")
22456  field(FTVL, "DOUBLE")
22457  field(PREC, "1")
22458  field(FLNK, "$(P):LS01:Z6:UB4:ARRAY.PROC")
22459 }
22460 
22461 ##
22462 ## Read the ZONE upper boundary setting.
22463 ##
22464 record(subArray, "$(P):LS01:Z6:UB4:ARRAY") {
22465  field(SCAN, "Passive")
22466  field(FTVL, "DOUBLE")
22467  field(INP, "$(P):LS01:Z6:ALL4.VAL MS")
22468  field(MALM, "8")
22469  field(NELM, "1")
22470  field(INDX, "0")
22471  field(PREC, "1")
22472  field(FLNK, "$(P):LS01:Z6:UB4.PROC")
22473 }
22474 record(ai, "$(P):LS01:Z6:UB4") {
22475  field(SCAN, "Passive")
22476  field(INP, "$(P):LS01:Z6:UB4:ARRAY.VAL MS")
22477  field(PREC, "1")
22478  field(FLNK, "$(P):LS01:Z6:P4:ARRAY.PROC")
22479 }
22480 
22481 ##
22482 ## Read the ZONE P setting.
22483 ##
22484 record(subArray, "$(P):LS01:Z6:P4:ARRAY") {
22485  field(SCAN, "Passive")
22486  field(FTVL, "DOUBLE")
22487  field(INP, "$(P):LS01:Z6:ALL4.VAL MS")
22488  field(MALM, "8")
22489  field(NELM, "1")
22490  field(INDX, "1")
22491  field(PREC, "1")
22492  field(FLNK, "$(P):LS01:Z6:P4.PROC")
22493 }
22494 record(ai, "$(P):LS01:Z6:P4") {
22495  field(SCAN, "Passive")
22496  field(INP, "$(P):LS01:Z6:P4:ARRAY.VAL MS")
22497  field(PREC, "1")
22498  field(FLNK, "$(P):LS01:Z6:I4:ARRAY.PROC")
22499 }
22500 
22501 ##
22502 ## Read the ZONE I setting.
22503 ##
22504 record(subArray, "$(P):LS01:Z6:I4:ARRAY") {
22505  field(SCAN, "Passive")
22506  field(FTVL, "DOUBLE")
22507  field(INP, "$(P):LS01:Z6:ALL4.VAL MS")
22508  field(MALM, "8")
22509  field(NELM, "1")
22510  field(INDX, "2")
22511  field(PREC, "1")
22512  field(FLNK, "$(P):LS01:Z6:I4.PROC")
22513 }
22514 record(ai, "$(P):LS01:Z6:I4") {
22515  field(SCAN, "Passive")
22516  field(INP, "$(P):LS01:Z6:I4:ARRAY.VAL MS")
22517  field(PREC, "1")
22518  field(FLNK, "$(P):LS01:Z6:D4:ARRAY.PROC")
22519 }
22520 
22521 ##
22522 ## Read the ZONE D setting.
22523 ##
22524 record(subArray, "$(P):LS01:Z6:D4:ARRAY") {
22525  field(SCAN, "Passive")
22526  field(FTVL, "DOUBLE")
22527  field(INP, "$(P):LS01:Z6:ALL4.VAL MS")
22528  field(MALM, "8")
22529  field(NELM, "1")
22530  field(INDX, "3")
22531  field(PREC, "1")
22532  field(FLNK, "$(P):LS01:Z6:D4.PROC")
22533 }
22534 record(ai, "$(P):LS01:Z6:D4") {
22535  field(SCAN, "Passive")
22536  field(INP, "$(P):LS01:Z6:D4:ARRAY.VAL MS")
22537  field(PREC, "1")
22538  field(FLNK, "$(P):LS01:Z6:MOUT4:ARRAY.PROC")
22539 }
22540 
22541 ##
22542 ## Read the ZONE MOUT setting.
22543 ##
22544 record(subArray, "$(P):LS01:Z6:MOUT4:ARRAY") {
22545  field(SCAN, "Passive")
22546  field(FTVL, "DOUBLE")
22547  field(INP, "$(P):LS01:Z6:ALL4.VAL MS")
22548  field(MALM, "8")
22549  field(NELM, "1")
22550  field(INDX, "4")
22551  field(PREC, "1")
22552  field(FLNK, "$(P):LS01:Z6:MOUT4.PROC")
22553 }
22554 record(ai, "$(P):LS01:Z6:MOUT4") {
22555  field(SCAN, "Passive")
22556  field(INP, "$(P):LS01:Z6:MOUT4:ARRAY.VAL MS")
22557  field(PREC, "1")
22558  field(FLNK, "$(P):LS01:Z6:RANGE4:ARRAY.PROC")
22559 }
22560 
22561 ##
22562 ## Read the ZONE RANGE setting.
22563 ##
22564 record(subArray, "$(P):LS01:Z6:RANGE4:ARRAY") {
22565  field(SCAN, "Passive")
22566  field(FTVL, "DOUBLE")
22567  field(INP, "$(P):LS01:Z6:ALL4.VAL MS")
22568  field(MALM, "8")
22569  field(NELM, "1")
22570  field(INDX, "5")
22571  field(PREC, "1")
22572  field(FLNK, "$(P):LS01:Z6:RANGE4.PROC")
22573 }
22574 record(mbbi, "$(P):LS01:Z6:RANGE4") {
22575  field(INP, "$(P):LS01:Z6:RANGE4:ARRAY.VAL")
22576  field(SCAN, "Passive")
22577  field(ZRST, "Off")
22578  field(ZRVL, "0")
22579  field(ONST, "Range1/Low")
22580  field(ONVL, "1")
22581  field(TWST, "Range2/Medium")
22582  field(TWVL, "2")
22583  field(THST, "Range3/High")
22584  field(THVL, "3")
22585  field(FRST, "Range4")
22586  field(FRVL, "4")
22587  field(FVST, "Range5")
22588  field(FVVL, "5")
22589  field(FLNK, "$(P):LS01:Z6:INPUT4:ARRAY.PROC")
22590 }
22591 
22592 ##
22593 ## Read the ZONE INPUT setting.
22594 ##
22595 record(subArray, "$(P):LS01:Z6:INPUT4:ARRAY") {
22596  field(SCAN, "Passive")
22597  field(FTVL, "DOUBLE")
22598  field(INP, "$(P):LS01:Z6:ALL4.VAL MS")
22599  field(MALM, "8")
22600  field(NELM, "1")
22601  field(INDX, "6")
22602  field(PREC, "1")
22603  field(FLNK, "$(P):LS01:Z6:INPUT4.PROC")
22604 }
22605 record(mbbi, "$(P):LS01:Z6:INPUT4") {
22606  field(INP, "$(P):LS01:Z6:INPUT4:ARRAY.VAL")
22607  field(SCAN, "Passive")
22608  field(ZRST, "None")
22609  field(ZRVL, "0")
22610  field(ONST, "Input A")
22611  field(ONVL, "1")
22612  field(TWST, "Input B")
22613  field(TWVL, "2")
22614  field(THST, "Input C")
22615  field(THVL, "3")
22616  field(FRST, "Input D")
22617  field(FRVL, "4")
22618  field(FVST, "Input D2")
22619  field(FVVL, "5")
22620  field(SXST, "Input D3")
22621  field(SXVL, "6")
22622  field(SVST, "Input D4")
22623  field(SVVL, "7")
22624  field(EIST, "Input D5")
22625  field(EIVL, "8")
22626  field(FLNK, "$(P):LS01:Z6:RATE4:ARRAY.PROC")
22627 }
22628 
22629 ##
22630 ## Read the ZONE RATE setting.
22631 ##
22632 record(subArray, "$(P):LS01:Z6:RATE4:ARRAY") {
22633  field(SCAN, "Passive")
22634  field(FTVL, "DOUBLE")
22635  field(INP, "$(P):LS01:Z6:ALL4.VAL MS")
22636  field(MALM, "8")
22637  field(NELM, "1")
22638  field(INDX, "7")
22639  field(PREC, "1")
22640  field(FLNK, "$(P):LS01:Z6:RATE4.PROC")
22641 }
22642 record(ai, "$(P):LS01:Z6:RATE4") {
22643  field(SCAN, "Passive")
22644  field(INP, "$(P):LS01:Z6:RATE4:ARRAY.VAL MS")
22645  field(PREC, "1")
22646  field(FLNK, "$(P):LS01:Z6:INITCALC4.PROC")
22647 }
22648 
22649 ##############################################################
22650 ##
22651 ## Populate the write records below with the current values.
22652 ## Only do this once at startup.
22653 ##
22654 ###############################################################
22655 
22656 record(calcout, "$(P):LS01:Z6:INITCALC4") {
22657  field(INPA, "0")
22658  field(CALC, "A")
22659  field(VAL, "0")
22660  field(DOPT, "Use OCAL")
22661  field(OOPT, "When Zero")
22662  field(OCAL, "1")
22663  field(OUT, "$(P):LS01:Z6:INITUB4.PROC")
22664 }
22665 
22666 record(dfanout, "$(P):LS01:Z6:INITUB4") {
22667  field(OMSL, "closed_loop")
22668  field(DOL, "$(P):LS01:Z6:UB4.VAL")
22669  field(OUTA, "$(P):LS01:Z6:UB_S4.VAL PP")
22670  field(FLNK, "$(P):LS01:Z6:INITP4.PROC")
22671 }
22672 record(dfanout, "$(P):LS01:Z6:INITP4") {
22673  field(OMSL, "closed_loop")
22674  field(DOL, "$(P):LS01:Z6:P4.VAL")
22675  field(OUTA, "$(P):LS01:Z6:P_S4.VAL PP")
22676  field(FLNK, "$(P):LS01:Z6:INITI4.PROC")
22677 }
22678 record(dfanout, "$(P):LS01:Z6:INITI4") {
22679  field(OMSL, "closed_loop")
22680  field(DOL, "$(P):LS01:Z6:I4.VAL")
22681  field(OUTA, "$(P):LS01:Z6:I_S4.VAL PP")
22682  field(FLNK, "$(P):LS01:Z6:INITD4.PROC")
22683 }
22684 record(dfanout, "$(P):LS01:Z6:INITD4") {
22685  field(OMSL, "closed_loop")
22686  field(DOL, "$(P):LS01:Z6:D4.VAL")
22687  field(OUTA, "$(P):LS01:Z6:D_S4.VAL PP")
22688  field(FLNK, "$(P):LS01:Z6:INITMOUT4.PROC")
22689 }
22690 record(dfanout, "$(P):LS01:Z6:INITMOUT4") {
22691  field(OMSL, "closed_loop")
22692  field(DOL, "$(P):LS01:Z6:MOUT4.VAL")
22693  field(OUTA, "$(P):LS01:Z6:MOUT_S4.VAL PP")
22694  field(FLNK, "$(P):LS01:Z6:INITRANGE4.PROC")
22695 }
22696 record(dfanout, "$(P):LS01:Z6:INITRANGE4") {
22697  field(OMSL, "closed_loop")
22698  field(DOL, "$(P):LS01:Z6:RANGE4.VAL")
22699  field(OUTA, "$(P):LS01:Z6:RANGE_S4.VAL PP")
22700  field(FLNK, "$(P):LS01:Z6:INITINPUT4.PROC")
22701 }
22702 record(dfanout, "$(P):LS01:Z6:INITINPUT4") {
22703  field(OMSL, "closed_loop")
22704  field(DOL, "$(P):LS01:Z6:INPUT4.VAL")
22705  field(OUTA, "$(P):LS01:Z6:INPUT_S4.VAL PP")
22706  field(FLNK, "$(P):LS01:Z6:INITRATE4.PROC")
22707 }
22708 record(dfanout, "$(P):LS01:Z6:INITRATE4") {
22709  field(OMSL, "closed_loop")
22710  field(DOL, "$(P):LS01:Z6:RATE4.VAL")
22711  field(OUTA, "$(P):LS01:Z6:RATE_S4.VAL PP")
22712  field(FLNK, "$(P):LS01:Z6:INITCOUNT4.PROC")
22713 }
22714 
22715 record(dfanout, "$(P):LS01:Z6:INITCOUNT4") {
22716  field(DOL, "1")
22717  field(OUTA, "$(P):LS01:Z6:INITCALC4.A")
22718 }
22719 
22720 
22721 
22722 #############################################
22723 # Write records. There is a calcout record to
22724 # do the actual write.
22725 #############################################
22726 
22727 ##
22728 ## Set the ZONE upper boundary setting.
22729 ##
22730 record(ao, "$(P):LS01:Z6:UB_S4") {
22731  field(SCAN, "Passive")
22732  field(PREC, "1")
22733  field(SDIS, "$(P):LS01:DISABLE")
22734 }
22735 
22736 ##
22737 ## Set the ZONE P setting.
22738 ##
22739 record(ao, "$(P):LS01:Z6:P_S4") {
22740  field(SCAN, "Passive")
22741  field(PREC, "1")
22742  field(SDIS, "$(P):LS01:DISABLE")
22743 }
22744 
22745 ##
22746 ## Set the ZONE I setting.
22747 ##
22748 record(ao, "$(P):LS01:Z6:I_S4") {
22749  field(SCAN, "Passive")
22750  field(PREC, "1")
22751  field(SDIS, "$(P):LS01:DISABLE")
22752 }
22753 
22754 ##
22755 ## Set the ZONE D setting.
22756 ##
22757 record(ao, "$(P):LS01:Z6:D_S4") {
22758  field(SCAN, "Passive")
22759  field(PREC, "1")
22760  field(SDIS, "$(P):LS01:DISABLE")
22761 }
22762 
22763 ##
22764 ## Set the ZONE MOUT setting.
22765 ##
22766 record(ao, "$(P):LS01:Z6:MOUT_S4") {
22767  field(SCAN, "Passive")
22768  field(PREC, "1")
22769  field(SDIS, "$(P):LS01:DISABLE")
22770 }
22771 
22772 ##
22773 ## Set the ZONE RANGE setting.
22774 ##
22775 record(mbbo, "$(P):LS01:Z6:RANGE_S4") {
22776  field(SCAN, "Passive")
22777  field(ZRST, "Off")
22778  field(ZRVL, "0")
22779  field(ONST, "Range1/Low")
22780  field(ONVL, "1")
22781  field(TWST, "Range2/Medium")
22782  field(TWVL, "2")
22783  field(THST, "Range3/High")
22784  field(THVL, "3")
22785  field(FRST, "Range4")
22786  field(FRVL, "4")
22787  field(FVST, "Range5")
22788  field(FVVL, "5")
22789  field(SDIS, "$(P):LS01:DISABLE")
22790 }
22791 
22792 ##
22793 ## Set the ZONE INPUT setting.
22794 ##
22795 record(mbbo, "$(P):LS01:Z6:INPUT_S4") {
22796  field(ZRST, "None")
22797  field(ZRVL, "0")
22798  field(ONST, "Input A")
22799  field(ONVL, "1")
22800  field(TWST, "Input B")
22801  field(TWVL, "2")
22802  field(THST, "Input C")
22803  field(THVL, "3")
22804  field(FRST, "Input D")
22805  field(FRVL, "4")
22806  field(FVST, "Input D2")
22807  field(FVVL, "5")
22808  field(SXST, "Input D3")
22809  field(SXVL, "6")
22810  field(SVST, "Input D4")
22811  field(SVVL, "7")
22812  field(EIST, "Input D5")
22813  field(EIVL, "8")
22814  field(SDIS, "$(P):LS01:DISABLE")
22815 }
22816 
22817 ##
22818 ## Set the ZONE RATE setting.
22819 ##
22820 record(ao, "$(P):LS01:Z6:RATE_S4") {
22821  field(SCAN, "Passive")
22822  field(PREC, "1")
22823  field(SDIS, "$(P):LS01:DISABLE")
22824 }
22825 
22826 ##
22827 ## Record to write the ZONE parameters.
22828 ##
22829 record(calcout, "$(P):LS01:Z6:SET4") {
22830  field(INPA, "$(P):LS01:Z6:UB_S4")
22831  field(INPB, "$(P):LS01:Z6:P_S4")
22832  field(INPC, "$(P):LS01:Z6:I_S4")
22833  field(INPD, "$(P):LS01:Z6:D_S4")
22834  field(INPE, "$(P):LS01:Z6:MOUT_S4")
22835  field(INPF, "$(P):LS01:Z6:RANGE_S4")
22836  field(INPG, "$(P):LS01:Z6:INPUT_S4")
22837  field(INPH, "$(P):LS01:Z6:RATE_S4")
22838  field(CALC, "0")
22839  field(DTYP, "stream")
22840  field(OUT, "@ls336.proto setZONE(4,6) L0 0")
22841  field(SDIS, "$(P):LS01:DISABLE")
22842  field(FLNK, "$(P):LS01:Z6:ALL4.PROC")
22843 }
22844 
22845 
22846 
22847 
22848 
22849 
22850 
22851 
22852 
22853 
22854 record(mbbi, "$(P):LS01:Z6:RANGE4") {
22855  field(ZRST, "Off")
22856  field(ONST, "On")
22857  field(TWST, "")
22858  field(THST, "")
22859  field(FRST, "")
22860  field(FVST, "")
22861 }
22862 
22863 record(mbbo, "$(P):LS01:Z6:RANGE_S4") {
22864  field(ZRST, "Off")
22865  field(ONST, "On")
22866  field(TWST, "")
22867  field(THST, "")
22868  field(FRST, "")
22869  field(FVST, "")
22870 }
22871 
22872 
22873 
22874 
22875 
22876 
22877 # This just includes the zone file and overrides the RANGE options
22878 # for the analog control channels.
22879 
22880 #######################################
22881 #
22882 # Template to support reading and setting
22883 # controller ZONE parameters. It reads the ZONE
22884 # parameters into an array, then uses subArrays to
22885 # extract each parameter.
22886 #
22887 # This template is used by the output template
22888 # and it needs the following macros:
22889 #
22890 # ZONE: zone number
22891 # OUT: output number
22892 #
22893 #######################################
22894 
22895 ##
22896 ## Read the ZONE setting into an array (8 values)
22897 ##
22898 record(waveform, "$(P):LS01:Z7:ALL4") {
22899  field(DTYP, "stream")
22900  field(SDIS, "$(P):LS01:DISABLE_POLL")
22901  field(INP, "@ls336.proto getZONE(4,7) L0 0")
22902  field(SCAN, "Passive")
22903  field(NELM, "8")
22904  field(FTVL, "DOUBLE")
22905  field(PREC, "1")
22906  field(FLNK, "$(P):LS01:Z7:UB4:ARRAY.PROC")
22907 }
22908 
22909 ##
22910 ## Read the ZONE upper boundary setting.
22911 ##
22912 record(subArray, "$(P):LS01:Z7:UB4:ARRAY") {
22913  field(SCAN, "Passive")
22914  field(FTVL, "DOUBLE")
22915  field(INP, "$(P):LS01:Z7:ALL4.VAL MS")
22916  field(MALM, "8")
22917  field(NELM, "1")
22918  field(INDX, "0")
22919  field(PREC, "1")
22920  field(FLNK, "$(P):LS01:Z7:UB4.PROC")
22921 }
22922 record(ai, "$(P):LS01:Z7:UB4") {
22923  field(SCAN, "Passive")
22924  field(INP, "$(P):LS01:Z7:UB4:ARRAY.VAL MS")
22925  field(PREC, "1")
22926  field(FLNK, "$(P):LS01:Z7:P4:ARRAY.PROC")
22927 }
22928 
22929 ##
22930 ## Read the ZONE P setting.
22931 ##
22932 record(subArray, "$(P):LS01:Z7:P4:ARRAY") {
22933  field(SCAN, "Passive")
22934  field(FTVL, "DOUBLE")
22935  field(INP, "$(P):LS01:Z7:ALL4.VAL MS")
22936  field(MALM, "8")
22937  field(NELM, "1")
22938  field(INDX, "1")
22939  field(PREC, "1")
22940  field(FLNK, "$(P):LS01:Z7:P4.PROC")
22941 }
22942 record(ai, "$(P):LS01:Z7:P4") {
22943  field(SCAN, "Passive")
22944  field(INP, "$(P):LS01:Z7:P4:ARRAY.VAL MS")
22945  field(PREC, "1")
22946  field(FLNK, "$(P):LS01:Z7:I4:ARRAY.PROC")
22947 }
22948 
22949 ##
22950 ## Read the ZONE I setting.
22951 ##
22952 record(subArray, "$(P):LS01:Z7:I4:ARRAY") {
22953  field(SCAN, "Passive")
22954  field(FTVL, "DOUBLE")
22955  field(INP, "$(P):LS01:Z7:ALL4.VAL MS")
22956  field(MALM, "8")
22957  field(NELM, "1")
22958  field(INDX, "2")
22959  field(PREC, "1")
22960  field(FLNK, "$(P):LS01:Z7:I4.PROC")
22961 }
22962 record(ai, "$(P):LS01:Z7:I4") {
22963  field(SCAN, "Passive")
22964  field(INP, "$(P):LS01:Z7:I4:ARRAY.VAL MS")
22965  field(PREC, "1")
22966  field(FLNK, "$(P):LS01:Z7:D4:ARRAY.PROC")
22967 }
22968 
22969 ##
22970 ## Read the ZONE D setting.
22971 ##
22972 record(subArray, "$(P):LS01:Z7:D4:ARRAY") {
22973  field(SCAN, "Passive")
22974  field(FTVL, "DOUBLE")
22975  field(INP, "$(P):LS01:Z7:ALL4.VAL MS")
22976  field(MALM, "8")
22977  field(NELM, "1")
22978  field(INDX, "3")
22979  field(PREC, "1")
22980  field(FLNK, "$(P):LS01:Z7:D4.PROC")
22981 }
22982 record(ai, "$(P):LS01:Z7:D4") {
22983  field(SCAN, "Passive")
22984  field(INP, "$(P):LS01:Z7:D4:ARRAY.VAL MS")
22985  field(PREC, "1")
22986  field(FLNK, "$(P):LS01:Z7:MOUT4:ARRAY.PROC")
22987 }
22988 
22989 ##
22990 ## Read the ZONE MOUT setting.
22991 ##
22992 record(subArray, "$(P):LS01:Z7:MOUT4:ARRAY") {
22993  field(SCAN, "Passive")
22994  field(FTVL, "DOUBLE")
22995  field(INP, "$(P):LS01:Z7:ALL4.VAL MS")
22996  field(MALM, "8")
22997  field(NELM, "1")
22998  field(INDX, "4")
22999  field(PREC, "1")
23000  field(FLNK, "$(P):LS01:Z7:MOUT4.PROC")
23001 }
23002 record(ai, "$(P):LS01:Z7:MOUT4") {
23003  field(SCAN, "Passive")
23004  field(INP, "$(P):LS01:Z7:MOUT4:ARRAY.VAL MS")
23005  field(PREC, "1")
23006  field(FLNK, "$(P):LS01:Z7:RANGE4:ARRAY.PROC")
23007 }
23008 
23009 ##
23010 ## Read the ZONE RANGE setting.
23011 ##
23012 record(subArray, "$(P):LS01:Z7:RANGE4:ARRAY") {
23013  field(SCAN, "Passive")
23014  field(FTVL, "DOUBLE")
23015  field(INP, "$(P):LS01:Z7:ALL4.VAL MS")
23016  field(MALM, "8")
23017  field(NELM, "1")
23018  field(INDX, "5")
23019  field(PREC, "1")
23020  field(FLNK, "$(P):LS01:Z7:RANGE4.PROC")
23021 }
23022 record(mbbi, "$(P):LS01:Z7:RANGE4") {
23023  field(INP, "$(P):LS01:Z7:RANGE4:ARRAY.VAL")
23024  field(SCAN, "Passive")
23025  field(ZRST, "Off")
23026  field(ZRVL, "0")
23027  field(ONST, "Range1/Low")
23028  field(ONVL, "1")
23029  field(TWST, "Range2/Medium")
23030  field(TWVL, "2")
23031  field(THST, "Range3/High")
23032  field(THVL, "3")
23033  field(FRST, "Range4")
23034  field(FRVL, "4")
23035  field(FVST, "Range5")
23036  field(FVVL, "5")
23037  field(FLNK, "$(P):LS01:Z7:INPUT4:ARRAY.PROC")
23038 }
23039 
23040 ##
23041 ## Read the ZONE INPUT setting.
23042 ##
23043 record(subArray, "$(P):LS01:Z7:INPUT4:ARRAY") {
23044  field(SCAN, "Passive")
23045  field(FTVL, "DOUBLE")
23046  field(INP, "$(P):LS01:Z7:ALL4.VAL MS")
23047  field(MALM, "8")
23048  field(NELM, "1")
23049  field(INDX, "6")
23050  field(PREC, "1")
23051  field(FLNK, "$(P):LS01:Z7:INPUT4.PROC")
23052 }
23053 record(mbbi, "$(P):LS01:Z7:INPUT4") {
23054  field(INP, "$(P):LS01:Z7:INPUT4:ARRAY.VAL")
23055  field(SCAN, "Passive")
23056  field(ZRST, "None")
23057  field(ZRVL, "0")
23058  field(ONST, "Input A")
23059  field(ONVL, "1")
23060  field(TWST, "Input B")
23061  field(TWVL, "2")
23062  field(THST, "Input C")
23063  field(THVL, "3")
23064  field(FRST, "Input D")
23065  field(FRVL, "4")
23066  field(FVST, "Input D2")
23067  field(FVVL, "5")
23068  field(SXST, "Input D3")
23069  field(SXVL, "6")
23070  field(SVST, "Input D4")
23071  field(SVVL, "7")
23072  field(EIST, "Input D5")
23073  field(EIVL, "8")
23074  field(FLNK, "$(P):LS01:Z7:RATE4:ARRAY.PROC")
23075 }
23076 
23077 ##
23078 ## Read the ZONE RATE setting.
23079 ##
23080 record(subArray, "$(P):LS01:Z7:RATE4:ARRAY") {
23081  field(SCAN, "Passive")
23082  field(FTVL, "DOUBLE")
23083  field(INP, "$(P):LS01:Z7:ALL4.VAL MS")
23084  field(MALM, "8")
23085  field(NELM, "1")
23086  field(INDX, "7")
23087  field(PREC, "1")
23088  field(FLNK, "$(P):LS01:Z7:RATE4.PROC")
23089 }
23090 record(ai, "$(P):LS01:Z7:RATE4") {
23091  field(SCAN, "Passive")
23092  field(INP, "$(P):LS01:Z7:RATE4:ARRAY.VAL MS")
23093  field(PREC, "1")
23094  field(FLNK, "$(P):LS01:Z7:INITCALC4.PROC")
23095 }
23096 
23097 ##############################################################
23098 ##
23099 ## Populate the write records below with the current values.
23100 ## Only do this once at startup.
23101 ##
23102 ###############################################################
23103 
23104 record(calcout, "$(P):LS01:Z7:INITCALC4") {
23105  field(INPA, "0")
23106  field(CALC, "A")
23107  field(VAL, "0")
23108  field(DOPT, "Use OCAL")
23109  field(OOPT, "When Zero")
23110  field(OCAL, "1")
23111  field(OUT, "$(P):LS01:Z7:INITUB4.PROC")
23112 }
23113 
23114 record(dfanout, "$(P):LS01:Z7:INITUB4") {
23115  field(OMSL, "closed_loop")
23116  field(DOL, "$(P):LS01:Z7:UB4.VAL")
23117  field(OUTA, "$(P):LS01:Z7:UB_S4.VAL PP")
23118  field(FLNK, "$(P):LS01:Z7:INITP4.PROC")
23119 }
23120 record(dfanout, "$(P):LS01:Z7:INITP4") {
23121  field(OMSL, "closed_loop")
23122  field(DOL, "$(P):LS01:Z7:P4.VAL")
23123  field(OUTA, "$(P):LS01:Z7:P_S4.VAL PP")
23124  field(FLNK, "$(P):LS01:Z7:INITI4.PROC")
23125 }
23126 record(dfanout, "$(P):LS01:Z7:INITI4") {
23127  field(OMSL, "closed_loop")
23128  field(DOL, "$(P):LS01:Z7:I4.VAL")
23129  field(OUTA, "$(P):LS01:Z7:I_S4.VAL PP")
23130  field(FLNK, "$(P):LS01:Z7:INITD4.PROC")
23131 }
23132 record(dfanout, "$(P):LS01:Z7:INITD4") {
23133  field(OMSL, "closed_loop")
23134  field(DOL, "$(P):LS01:Z7:D4.VAL")
23135  field(OUTA, "$(P):LS01:Z7:D_S4.VAL PP")
23136  field(FLNK, "$(P):LS01:Z7:INITMOUT4.PROC")
23137 }
23138 record(dfanout, "$(P):LS01:Z7:INITMOUT4") {
23139  field(OMSL, "closed_loop")
23140  field(DOL, "$(P):LS01:Z7:MOUT4.VAL")
23141  field(OUTA, "$(P):LS01:Z7:MOUT_S4.VAL PP")
23142  field(FLNK, "$(P):LS01:Z7:INITRANGE4.PROC")
23143 }
23144 record(dfanout, "$(P):LS01:Z7:INITRANGE4") {
23145  field(OMSL, "closed_loop")
23146  field(DOL, "$(P):LS01:Z7:RANGE4.VAL")
23147  field(OUTA, "$(P):LS01:Z7:RANGE_S4.VAL PP")
23148  field(FLNK, "$(P):LS01:Z7:INITINPUT4.PROC")
23149 }
23150 record(dfanout, "$(P):LS01:Z7:INITINPUT4") {
23151  field(OMSL, "closed_loop")
23152  field(DOL, "$(P):LS01:Z7:INPUT4.VAL")
23153  field(OUTA, "$(P):LS01:Z7:INPUT_S4.VAL PP")
23154  field(FLNK, "$(P):LS01:Z7:INITRATE4.PROC")
23155 }
23156 record(dfanout, "$(P):LS01:Z7:INITRATE4") {
23157  field(OMSL, "closed_loop")
23158  field(DOL, "$(P):LS01:Z7:RATE4.VAL")
23159  field(OUTA, "$(P):LS01:Z7:RATE_S4.VAL PP")
23160  field(FLNK, "$(P):LS01:Z7:INITCOUNT4.PROC")
23161 }
23162 
23163 record(dfanout, "$(P):LS01:Z7:INITCOUNT4") {
23164  field(DOL, "1")
23165  field(OUTA, "$(P):LS01:Z7:INITCALC4.A")
23166 }
23167 
23168 
23169 
23170 #############################################
23171 # Write records. There is a calcout record to
23172 # do the actual write.
23173 #############################################
23174 
23175 ##
23176 ## Set the ZONE upper boundary setting.
23177 ##
23178 record(ao, "$(P):LS01:Z7:UB_S4") {
23179  field(SCAN, "Passive")
23180  field(PREC, "1")
23181  field(SDIS, "$(P):LS01:DISABLE")
23182 }
23183 
23184 ##
23185 ## Set the ZONE P setting.
23186 ##
23187 record(ao, "$(P):LS01:Z7:P_S4") {
23188  field(SCAN, "Passive")
23189  field(PREC, "1")
23190  field(SDIS, "$(P):LS01:DISABLE")
23191 }
23192 
23193 ##
23194 ## Set the ZONE I setting.
23195 ##
23196 record(ao, "$(P):LS01:Z7:I_S4") {
23197  field(SCAN, "Passive")
23198  field(PREC, "1")
23199  field(SDIS, "$(P):LS01:DISABLE")
23200 }
23201 
23202 ##
23203 ## Set the ZONE D setting.
23204 ##
23205 record(ao, "$(P):LS01:Z7:D_S4") {
23206  field(SCAN, "Passive")
23207  field(PREC, "1")
23208  field(SDIS, "$(P):LS01:DISABLE")
23209 }
23210 
23211 ##
23212 ## Set the ZONE MOUT setting.
23213 ##
23214 record(ao, "$(P):LS01:Z7:MOUT_S4") {
23215  field(SCAN, "Passive")
23216  field(PREC, "1")
23217  field(SDIS, "$(P):LS01:DISABLE")
23218 }
23219 
23220 ##
23221 ## Set the ZONE RANGE setting.
23222 ##
23223 record(mbbo, "$(P):LS01:Z7:RANGE_S4") {
23224  field(SCAN, "Passive")
23225  field(ZRST, "Off")
23226  field(ZRVL, "0")
23227  field(ONST, "Range1/Low")
23228  field(ONVL, "1")
23229  field(TWST, "Range2/Medium")
23230  field(TWVL, "2")
23231  field(THST, "Range3/High")
23232  field(THVL, "3")
23233  field(FRST, "Range4")
23234  field(FRVL, "4")
23235  field(FVST, "Range5")
23236  field(FVVL, "5")
23237  field(SDIS, "$(P):LS01:DISABLE")
23238 }
23239 
23240 ##
23241 ## Set the ZONE INPUT setting.
23242 ##
23243 record(mbbo, "$(P):LS01:Z7:INPUT_S4") {
23244  field(ZRST, "None")
23245  field(ZRVL, "0")
23246  field(ONST, "Input A")
23247  field(ONVL, "1")
23248  field(TWST, "Input B")
23249  field(TWVL, "2")
23250  field(THST, "Input C")
23251  field(THVL, "3")
23252  field(FRST, "Input D")
23253  field(FRVL, "4")
23254  field(FVST, "Input D2")
23255  field(FVVL, "5")
23256  field(SXST, "Input D3")
23257  field(SXVL, "6")
23258  field(SVST, "Input D4")
23259  field(SVVL, "7")
23260  field(EIST, "Input D5")
23261  field(EIVL, "8")
23262  field(SDIS, "$(P):LS01:DISABLE")
23263 }
23264 
23265 ##
23266 ## Set the ZONE RATE setting.
23267 ##
23268 record(ao, "$(P):LS01:Z7:RATE_S4") {
23269  field(SCAN, "Passive")
23270  field(PREC, "1")
23271  field(SDIS, "$(P):LS01:DISABLE")
23272 }
23273 
23274 ##
23275 ## Record to write the ZONE parameters.
23276 ##
23277 record(calcout, "$(P):LS01:Z7:SET4") {
23278  field(INPA, "$(P):LS01:Z7:UB_S4")
23279  field(INPB, "$(P):LS01:Z7:P_S4")
23280  field(INPC, "$(P):LS01:Z7:I_S4")
23281  field(INPD, "$(P):LS01:Z7:D_S4")
23282  field(INPE, "$(P):LS01:Z7:MOUT_S4")
23283  field(INPF, "$(P):LS01:Z7:RANGE_S4")
23284  field(INPG, "$(P):LS01:Z7:INPUT_S4")
23285  field(INPH, "$(P):LS01:Z7:RATE_S4")
23286  field(CALC, "0")
23287  field(DTYP, "stream")
23288  field(OUT, "@ls336.proto setZONE(4,7) L0 0")
23289  field(SDIS, "$(P):LS01:DISABLE")
23290  field(FLNK, "$(P):LS01:Z7:ALL4.PROC")
23291 }
23292 
23293 
23294 
23295 
23296 
23297 
23298 
23299 
23300 
23301 
23302 record(mbbi, "$(P):LS01:Z7:RANGE4") {
23303  field(ZRST, "Off")
23304  field(ONST, "On")
23305  field(TWST, "")
23306  field(THST, "")
23307  field(FRST, "")
23308  field(FVST, "")
23309 }
23310 
23311 record(mbbo, "$(P):LS01:Z7:RANGE_S4") {
23312  field(ZRST, "Off")
23313  field(ONST, "On")
23314  field(TWST, "")
23315  field(THST, "")
23316  field(FRST, "")
23317  field(FVST, "")
23318 }
23319 
23320 
23321 
23322 
23323 
23324 
23325 # This just includes the zone file and overrides the RANGE options
23326 # for the analog control channels.
23327 
23328 #######################################
23329 #
23330 # Template to support reading and setting
23331 # controller ZONE parameters. It reads the ZONE
23332 # parameters into an array, then uses subArrays to
23333 # extract each parameter.
23334 #
23335 # This template is used by the output template
23336 # and it needs the following macros:
23337 #
23338 # ZONE: zone number
23339 # OUT: output number
23340 #
23341 #######################################
23342 
23343 ##
23344 ## Read the ZONE setting into an array (8 values)
23345 ##
23346 record(waveform, "$(P):LS01:Z8:ALL4") {
23347  field(DTYP, "stream")
23348  field(SDIS, "$(P):LS01:DISABLE_POLL")
23349  field(INP, "@ls336.proto getZONE(4,8) L0 0")
23350  field(SCAN, "Passive")
23351  field(NELM, "8")
23352  field(FTVL, "DOUBLE")
23353  field(PREC, "1")
23354  field(FLNK, "$(P):LS01:Z8:UB4:ARRAY.PROC")
23355 }
23356 
23357 ##
23358 ## Read the ZONE upper boundary setting.
23359 ##
23360 record(subArray, "$(P):LS01:Z8:UB4:ARRAY") {
23361  field(SCAN, "Passive")
23362  field(FTVL, "DOUBLE")
23363  field(INP, "$(P):LS01:Z8:ALL4.VAL MS")
23364  field(MALM, "8")
23365  field(NELM, "1")
23366  field(INDX, "0")
23367  field(PREC, "1")
23368  field(FLNK, "$(P):LS01:Z8:UB4.PROC")
23369 }
23370 record(ai, "$(P):LS01:Z8:UB4") {
23371  field(SCAN, "Passive")
23372  field(INP, "$(P):LS01:Z8:UB4:ARRAY.VAL MS")
23373  field(PREC, "1")
23374  field(FLNK, "$(P):LS01:Z8:P4:ARRAY.PROC")
23375 }
23376 
23377 ##
23378 ## Read the ZONE P setting.
23379 ##
23380 record(subArray, "$(P):LS01:Z8:P4:ARRAY") {
23381  field(SCAN, "Passive")
23382  field(FTVL, "DOUBLE")
23383  field(INP, "$(P):LS01:Z8:ALL4.VAL MS")
23384  field(MALM, "8")
23385  field(NELM, "1")
23386  field(INDX, "1")
23387  field(PREC, "1")
23388  field(FLNK, "$(P):LS01:Z8:P4.PROC")
23389 }
23390 record(ai, "$(P):LS01:Z8:P4") {
23391  field(SCAN, "Passive")
23392  field(INP, "$(P):LS01:Z8:P4:ARRAY.VAL MS")
23393  field(PREC, "1")
23394  field(FLNK, "$(P):LS01:Z8:I4:ARRAY.PROC")
23395 }
23396 
23397 ##
23398 ## Read the ZONE I setting.
23399 ##
23400 record(subArray, "$(P):LS01:Z8:I4:ARRAY") {
23401  field(SCAN, "Passive")
23402  field(FTVL, "DOUBLE")
23403  field(INP, "$(P):LS01:Z8:ALL4.VAL MS")
23404  field(MALM, "8")
23405  field(NELM, "1")
23406  field(INDX, "2")
23407  field(PREC, "1")
23408  field(FLNK, "$(P):LS01:Z8:I4.PROC")
23409 }
23410 record(ai, "$(P):LS01:Z8:I4") {
23411  field(SCAN, "Passive")
23412  field(INP, "$(P):LS01:Z8:I4:ARRAY.VAL MS")
23413  field(PREC, "1")
23414  field(FLNK, "$(P):LS01:Z8:D4:ARRAY.PROC")
23415 }
23416 
23417 ##
23418 ## Read the ZONE D setting.
23419 ##
23420 record(subArray, "$(P):LS01:Z8:D4:ARRAY") {
23421  field(SCAN, "Passive")
23422  field(FTVL, "DOUBLE")
23423  field(INP, "$(P):LS01:Z8:ALL4.VAL MS")
23424  field(MALM, "8")
23425  field(NELM, "1")
23426  field(INDX, "3")
23427  field(PREC, "1")
23428  field(FLNK, "$(P):LS01:Z8:D4.PROC")
23429 }
23430 record(ai, "$(P):LS01:Z8:D4") {
23431  field(SCAN, "Passive")
23432  field(INP, "$(P):LS01:Z8:D4:ARRAY.VAL MS")
23433  field(PREC, "1")
23434  field(FLNK, "$(P):LS01:Z8:MOUT4:ARRAY.PROC")
23435 }
23436 
23437 ##
23438 ## Read the ZONE MOUT setting.
23439 ##
23440 record(subArray, "$(P):LS01:Z8:MOUT4:ARRAY") {
23441  field(SCAN, "Passive")
23442  field(FTVL, "DOUBLE")
23443  field(INP, "$(P):LS01:Z8:ALL4.VAL MS")
23444  field(MALM, "8")
23445  field(NELM, "1")
23446  field(INDX, "4")
23447  field(PREC, "1")
23448  field(FLNK, "$(P):LS01:Z8:MOUT4.PROC")
23449 }
23450 record(ai, "$(P):LS01:Z8:MOUT4") {
23451  field(SCAN, "Passive")
23452  field(INP, "$(P):LS01:Z8:MOUT4:ARRAY.VAL MS")
23453  field(PREC, "1")
23454  field(FLNK, "$(P):LS01:Z8:RANGE4:ARRAY.PROC")
23455 }
23456 
23457 ##
23458 ## Read the ZONE RANGE setting.
23459 ##
23460 record(subArray, "$(P):LS01:Z8:RANGE4:ARRAY") {
23461  field(SCAN, "Passive")
23462  field(FTVL, "DOUBLE")
23463  field(INP, "$(P):LS01:Z8:ALL4.VAL MS")
23464  field(MALM, "8")
23465  field(NELM, "1")
23466  field(INDX, "5")
23467  field(PREC, "1")
23468  field(FLNK, "$(P):LS01:Z8:RANGE4.PROC")
23469 }
23470 record(mbbi, "$(P):LS01:Z8:RANGE4") {
23471  field(INP, "$(P):LS01:Z8:RANGE4:ARRAY.VAL")
23472  field(SCAN, "Passive")
23473  field(ZRST, "Off")
23474  field(ZRVL, "0")
23475  field(ONST, "Range1/Low")
23476  field(ONVL, "1")
23477  field(TWST, "Range2/Medium")
23478  field(TWVL, "2")
23479  field(THST, "Range3/High")
23480  field(THVL, "3")
23481  field(FRST, "Range4")
23482  field(FRVL, "4")
23483  field(FVST, "Range5")
23484  field(FVVL, "5")
23485  field(FLNK, "$(P):LS01:Z8:INPUT4:ARRAY.PROC")
23486 }
23487 
23488 ##
23489 ## Read the ZONE INPUT setting.
23490 ##
23491 record(subArray, "$(P):LS01:Z8:INPUT4:ARRAY") {
23492  field(SCAN, "Passive")
23493  field(FTVL, "DOUBLE")
23494  field(INP, "$(P):LS01:Z8:ALL4.VAL MS")
23495  field(MALM, "8")
23496  field(NELM, "1")
23497  field(INDX, "6")
23498  field(PREC, "1")
23499  field(FLNK, "$(P):LS01:Z8:INPUT4.PROC")
23500 }
23501 record(mbbi, "$(P):LS01:Z8:INPUT4") {
23502  field(INP, "$(P):LS01:Z8:INPUT4:ARRAY.VAL")
23503  field(SCAN, "Passive")
23504  field(ZRST, "None")
23505  field(ZRVL, "0")
23506  field(ONST, "Input A")
23507  field(ONVL, "1")
23508  field(TWST, "Input B")
23509  field(TWVL, "2")
23510  field(THST, "Input C")
23511  field(THVL, "3")
23512  field(FRST, "Input D")
23513  field(FRVL, "4")
23514  field(FVST, "Input D2")
23515  field(FVVL, "5")
23516  field(SXST, "Input D3")
23517  field(SXVL, "6")
23518  field(SVST, "Input D4")
23519  field(SVVL, "7")
23520  field(EIST, "Input D5")
23521  field(EIVL, "8")
23522  field(FLNK, "$(P):LS01:Z8:RATE4:ARRAY.PROC")
23523 }
23524 
23525 ##
23526 ## Read the ZONE RATE setting.
23527 ##
23528 record(subArray, "$(P):LS01:Z8:RATE4:ARRAY") {
23529  field(SCAN, "Passive")
23530  field(FTVL, "DOUBLE")
23531  field(INP, "$(P):LS01:Z8:ALL4.VAL MS")
23532  field(MALM, "8")
23533  field(NELM, "1")
23534  field(INDX, "7")
23535  field(PREC, "1")
23536  field(FLNK, "$(P):LS01:Z8:RATE4.PROC")
23537 }
23538 record(ai, "$(P):LS01:Z8:RATE4") {
23539  field(SCAN, "Passive")
23540  field(INP, "$(P):LS01:Z8:RATE4:ARRAY.VAL MS")
23541  field(PREC, "1")
23542  field(FLNK, "$(P):LS01:Z8:INITCALC4.PROC")
23543 }
23544 
23545 ##############################################################
23546 ##
23547 ## Populate the write records below with the current values.
23548 ## Only do this once at startup.
23549 ##
23550 ###############################################################
23551 
23552 record(calcout, "$(P):LS01:Z8:INITCALC4") {
23553  field(INPA, "0")
23554  field(CALC, "A")
23555  field(VAL, "0")
23556  field(DOPT, "Use OCAL")
23557  field(OOPT, "When Zero")
23558  field(OCAL, "1")
23559  field(OUT, "$(P):LS01:Z8:INITUB4.PROC")
23560 }
23561 
23562 record(dfanout, "$(P):LS01:Z8:INITUB4") {
23563  field(OMSL, "closed_loop")
23564  field(DOL, "$(P):LS01:Z8:UB4.VAL")
23565  field(OUTA, "$(P):LS01:Z8:UB_S4.VAL PP")
23566  field(FLNK, "$(P):LS01:Z8:INITP4.PROC")
23567 }
23568 record(dfanout, "$(P):LS01:Z8:INITP4") {
23569  field(OMSL, "closed_loop")
23570  field(DOL, "$(P):LS01:Z8:P4.VAL")
23571  field(OUTA, "$(P):LS01:Z8:P_S4.VAL PP")
23572  field(FLNK, "$(P):LS01:Z8:INITI4.PROC")
23573 }
23574 record(dfanout, "$(P):LS01:Z8:INITI4") {
23575  field(OMSL, "closed_loop")
23576  field(DOL, "$(P):LS01:Z8:I4.VAL")
23577  field(OUTA, "$(P):LS01:Z8:I_S4.VAL PP")
23578  field(FLNK, "$(P):LS01:Z8:INITD4.PROC")
23579 }
23580 record(dfanout, "$(P):LS01:Z8:INITD4") {
23581  field(OMSL, "closed_loop")
23582  field(DOL, "$(P):LS01:Z8:D4.VAL")
23583  field(OUTA, "$(P):LS01:Z8:D_S4.VAL PP")
23584  field(FLNK, "$(P):LS01:Z8:INITMOUT4.PROC")
23585 }
23586 record(dfanout, "$(P):LS01:Z8:INITMOUT4") {
23587  field(OMSL, "closed_loop")
23588  field(DOL, "$(P):LS01:Z8:MOUT4.VAL")
23589  field(OUTA, "$(P):LS01:Z8:MOUT_S4.VAL PP")
23590  field(FLNK, "$(P):LS01:Z8:INITRANGE4.PROC")
23591 }
23592 record(dfanout, "$(P):LS01:Z8:INITRANGE4") {
23593  field(OMSL, "closed_loop")
23594  field(DOL, "$(P):LS01:Z8:RANGE4.VAL")
23595  field(OUTA, "$(P):LS01:Z8:RANGE_S4.VAL PP")
23596  field(FLNK, "$(P):LS01:Z8:INITINPUT4.PROC")
23597 }
23598 record(dfanout, "$(P):LS01:Z8:INITINPUT4") {
23599  field(OMSL, "closed_loop")
23600  field(DOL, "$(P):LS01:Z8:INPUT4.VAL")
23601  field(OUTA, "$(P):LS01:Z8:INPUT_S4.VAL PP")
23602  field(FLNK, "$(P):LS01:Z8:INITRATE4.PROC")
23603 }
23604 record(dfanout, "$(P):LS01:Z8:INITRATE4") {
23605  field(OMSL, "closed_loop")
23606  field(DOL, "$(P):LS01:Z8:RATE4.VAL")
23607  field(OUTA, "$(P):LS01:Z8:RATE_S4.VAL PP")
23608  field(FLNK, "$(P):LS01:Z8:INITCOUNT4.PROC")
23609 }
23610 
23611 record(dfanout, "$(P):LS01:Z8:INITCOUNT4") {
23612  field(DOL, "1")
23613  field(OUTA, "$(P):LS01:Z8:INITCALC4.A")
23614 }
23615 
23616 
23617 
23618 #############################################
23619 # Write records. There is a calcout record to
23620 # do the actual write.
23621 #############################################
23622 
23623 ##
23624 ## Set the ZONE upper boundary setting.
23625 ##
23626 record(ao, "$(P):LS01:Z8:UB_S4") {
23627  field(SCAN, "Passive")
23628  field(PREC, "1")
23629  field(SDIS, "$(P):LS01:DISABLE")
23630 }
23631 
23632 ##
23633 ## Set the ZONE P setting.
23634 ##
23635 record(ao, "$(P):LS01:Z8:P_S4") {
23636  field(SCAN, "Passive")
23637  field(PREC, "1")
23638  field(SDIS, "$(P):LS01:DISABLE")
23639 }
23640 
23641 ##
23642 ## Set the ZONE I setting.
23643 ##
23644 record(ao, "$(P):LS01:Z8:I_S4") {
23645  field(SCAN, "Passive")
23646  field(PREC, "1")
23647  field(SDIS, "$(P):LS01:DISABLE")
23648 }
23649 
23650 ##
23651 ## Set the ZONE D setting.
23652 ##
23653 record(ao, "$(P):LS01:Z8:D_S4") {
23654  field(SCAN, "Passive")
23655  field(PREC, "1")
23656  field(SDIS, "$(P):LS01:DISABLE")
23657 }
23658 
23659 ##
23660 ## Set the ZONE MOUT setting.
23661 ##
23662 record(ao, "$(P):LS01:Z8:MOUT_S4") {
23663  field(SCAN, "Passive")
23664  field(PREC, "1")
23665  field(SDIS, "$(P):LS01:DISABLE")
23666 }
23667 
23668 ##
23669 ## Set the ZONE RANGE setting.
23670 ##
23671 record(mbbo, "$(P):LS01:Z8:RANGE_S4") {
23672  field(SCAN, "Passive")
23673  field(ZRST, "Off")
23674  field(ZRVL, "0")
23675  field(ONST, "Range1/Low")
23676  field(ONVL, "1")
23677  field(TWST, "Range2/Medium")
23678  field(TWVL, "2")
23679  field(THST, "Range3/High")
23680  field(THVL, "3")
23681  field(FRST, "Range4")
23682  field(FRVL, "4")
23683  field(FVST, "Range5")
23684  field(FVVL, "5")
23685  field(SDIS, "$(P):LS01:DISABLE")
23686 }
23687 
23688 ##
23689 ## Set the ZONE INPUT setting.
23690 ##
23691 record(mbbo, "$(P):LS01:Z8:INPUT_S4") {
23692  field(ZRST, "None")
23693  field(ZRVL, "0")
23694  field(ONST, "Input A")
23695  field(ONVL, "1")
23696  field(TWST, "Input B")
23697  field(TWVL, "2")
23698  field(THST, "Input C")
23699  field(THVL, "3")
23700  field(FRST, "Input D")
23701  field(FRVL, "4")
23702  field(FVST, "Input D2")
23703  field(FVVL, "5")
23704  field(SXST, "Input D3")
23705  field(SXVL, "6")
23706  field(SVST, "Input D4")
23707  field(SVVL, "7")
23708  field(EIST, "Input D5")
23709  field(EIVL, "8")
23710  field(SDIS, "$(P):LS01:DISABLE")
23711 }
23712 
23713 ##
23714 ## Set the ZONE RATE setting.
23715 ##
23716 record(ao, "$(P):LS01:Z8:RATE_S4") {
23717  field(SCAN, "Passive")
23718  field(PREC, "1")
23719  field(SDIS, "$(P):LS01:DISABLE")
23720 }
23721 
23722 ##
23723 ## Record to write the ZONE parameters.
23724 ##
23725 record(calcout, "$(P):LS01:Z8:SET4") {
23726  field(INPA, "$(P):LS01:Z8:UB_S4")
23727  field(INPB, "$(P):LS01:Z8:P_S4")
23728  field(INPC, "$(P):LS01:Z8:I_S4")
23729  field(INPD, "$(P):LS01:Z8:D_S4")
23730  field(INPE, "$(P):LS01:Z8:MOUT_S4")
23731  field(INPF, "$(P):LS01:Z8:RANGE_S4")
23732  field(INPG, "$(P):LS01:Z8:INPUT_S4")
23733  field(INPH, "$(P):LS01:Z8:RATE_S4")
23734  field(CALC, "0")
23735  field(DTYP, "stream")
23736  field(OUT, "@ls336.proto setZONE(4,8) L0 0")
23737  field(SDIS, "$(P):LS01:DISABLE")
23738  field(FLNK, "$(P):LS01:Z8:ALL4.PROC")
23739 }
23740 
23741 
23742 
23743 
23744 
23745 
23746 
23747 
23748 
23749 
23750 record(mbbi, "$(P):LS01:Z8:RANGE4") {
23751  field(ZRST, "Off")
23752  field(ONST, "On")
23753  field(TWST, "")
23754  field(THST, "")
23755  field(FRST, "")
23756  field(FVST, "")
23757 }
23758 
23759 record(mbbo, "$(P):LS01:Z8:RANGE_S4") {
23760  field(ZRST, "Off")
23761  field(ONST, "On")
23762  field(TWST, "")
23763  field(THST, "")
23764  field(FRST, "")
23765  field(FVST, "")
23766 }
23767 
23768 
23769 
23770 
23771 
23772 
23773 # This just includes the zone file and overrides the RANGE options
23774 # for the analog control channels.
23775 
23776 #######################################
23777 #
23778 # Template to support reading and setting
23779 # controller ZONE parameters. It reads the ZONE
23780 # parameters into an array, then uses subArrays to
23781 # extract each parameter.
23782 #
23783 # This template is used by the output template
23784 # and it needs the following macros:
23785 #
23786 # ZONE: zone number
23787 # OUT: output number
23788 #
23789 #######################################
23790 
23791 ##
23792 ## Read the ZONE setting into an array (8 values)
23793 ##
23794 record(waveform, "$(P):LS01:Z9:ALL4") {
23795  field(DTYP, "stream")
23796  field(SDIS, "$(P):LS01:DISABLE_POLL")
23797  field(INP, "@ls336.proto getZONE(4,9) L0 0")
23798  field(SCAN, "Passive")
23799  field(NELM, "8")
23800  field(FTVL, "DOUBLE")
23801  field(PREC, "1")
23802  field(FLNK, "$(P):LS01:Z9:UB4:ARRAY.PROC")
23803 }
23804 
23805 ##
23806 ## Read the ZONE upper boundary setting.
23807 ##
23808 record(subArray, "$(P):LS01:Z9:UB4:ARRAY") {
23809  field(SCAN, "Passive")
23810  field(FTVL, "DOUBLE")
23811  field(INP, "$(P):LS01:Z9:ALL4.VAL MS")
23812  field(MALM, "8")
23813  field(NELM, "1")
23814  field(INDX, "0")
23815  field(PREC, "1")
23816  field(FLNK, "$(P):LS01:Z9:UB4.PROC")
23817 }
23818 record(ai, "$(P):LS01:Z9:UB4") {
23819  field(SCAN, "Passive")
23820  field(INP, "$(P):LS01:Z9:UB4:ARRAY.VAL MS")
23821  field(PREC, "1")
23822  field(FLNK, "$(P):LS01:Z9:P4:ARRAY.PROC")
23823 }
23824 
23825 ##
23826 ## Read the ZONE P setting.
23827 ##
23828 record(subArray, "$(P):LS01:Z9:P4:ARRAY") {
23829  field(SCAN, "Passive")
23830  field(FTVL, "DOUBLE")
23831  field(INP, "$(P):LS01:Z9:ALL4.VAL MS")
23832  field(MALM, "8")
23833  field(NELM, "1")
23834  field(INDX, "1")
23835  field(PREC, "1")
23836  field(FLNK, "$(P):LS01:Z9:P4.PROC")
23837 }
23838 record(ai, "$(P):LS01:Z9:P4") {
23839  field(SCAN, "Passive")
23840  field(INP, "$(P):LS01:Z9:P4:ARRAY.VAL MS")
23841  field(PREC, "1")
23842  field(FLNK, "$(P):LS01:Z9:I4:ARRAY.PROC")
23843 }
23844 
23845 ##
23846 ## Read the ZONE I setting.
23847 ##
23848 record(subArray, "$(P):LS01:Z9:I4:ARRAY") {
23849  field(SCAN, "Passive")
23850  field(FTVL, "DOUBLE")
23851  field(INP, "$(P):LS01:Z9:ALL4.VAL MS")
23852  field(MALM, "8")
23853  field(NELM, "1")
23854  field(INDX, "2")
23855  field(PREC, "1")
23856  field(FLNK, "$(P):LS01:Z9:I4.PROC")
23857 }
23858 record(ai, "$(P):LS01:Z9:I4") {
23859  field(SCAN, "Passive")
23860  field(INP, "$(P):LS01:Z9:I4:ARRAY.VAL MS")
23861  field(PREC, "1")
23862  field(FLNK, "$(P):LS01:Z9:D4:ARRAY.PROC")
23863 }
23864 
23865 ##
23866 ## Read the ZONE D setting.
23867 ##
23868 record(subArray, "$(P):LS01:Z9:D4:ARRAY") {
23869  field(SCAN, "Passive")
23870  field(FTVL, "DOUBLE")
23871  field(INP, "$(P):LS01:Z9:ALL4.VAL MS")
23872  field(MALM, "8")
23873  field(NELM, "1")
23874  field(INDX, "3")
23875  field(PREC, "1")
23876  field(FLNK, "$(P):LS01:Z9:D4.PROC")
23877 }
23878 record(ai, "$(P):LS01:Z9:D4") {
23879  field(SCAN, "Passive")
23880  field(INP, "$(P):LS01:Z9:D4:ARRAY.VAL MS")
23881  field(PREC, "1")
23882  field(FLNK, "$(P):LS01:Z9:MOUT4:ARRAY.PROC")
23883 }
23884 
23885 ##
23886 ## Read the ZONE MOUT setting.
23887 ##
23888 record(subArray, "$(P):LS01:Z9:MOUT4:ARRAY") {
23889  field(SCAN, "Passive")
23890  field(FTVL, "DOUBLE")
23891  field(INP, "$(P):LS01:Z9:ALL4.VAL MS")
23892  field(MALM, "8")
23893  field(NELM, "1")
23894  field(INDX, "4")
23895  field(PREC, "1")
23896  field(FLNK, "$(P):LS01:Z9:MOUT4.PROC")
23897 }
23898 record(ai, "$(P):LS01:Z9:MOUT4") {
23899  field(SCAN, "Passive")
23900  field(INP, "$(P):LS01:Z9:MOUT4:ARRAY.VAL MS")
23901  field(PREC, "1")
23902  field(FLNK, "$(P):LS01:Z9:RANGE4:ARRAY.PROC")
23903 }
23904 
23905 ##
23906 ## Read the ZONE RANGE setting.
23907 ##
23908 record(subArray, "$(P):LS01:Z9:RANGE4:ARRAY") {
23909  field(SCAN, "Passive")
23910  field(FTVL, "DOUBLE")
23911  field(INP, "$(P):LS01:Z9:ALL4.VAL MS")
23912  field(MALM, "8")
23913  field(NELM, "1")
23914  field(INDX, "5")
23915  field(PREC, "1")
23916  field(FLNK, "$(P):LS01:Z9:RANGE4.PROC")
23917 }
23918 record(mbbi, "$(P):LS01:Z9:RANGE4") {
23919  field(INP, "$(P):LS01:Z9:RANGE4:ARRAY.VAL")
23920  field(SCAN, "Passive")
23921  field(ZRST, "Off")
23922  field(ZRVL, "0")
23923  field(ONST, "Range1/Low")
23924  field(ONVL, "1")
23925  field(TWST, "Range2/Medium")
23926  field(TWVL, "2")
23927  field(THST, "Range3/High")
23928  field(THVL, "3")
23929  field(FRST, "Range4")
23930  field(FRVL, "4")
23931  field(FVST, "Range5")
23932  field(FVVL, "5")
23933  field(FLNK, "$(P):LS01:Z9:INPUT4:ARRAY.PROC")
23934 }
23935 
23936 ##
23937 ## Read the ZONE INPUT setting.
23938 ##
23939 record(subArray, "$(P):LS01:Z9:INPUT4:ARRAY") {
23940  field(SCAN, "Passive")
23941  field(FTVL, "DOUBLE")
23942  field(INP, "$(P):LS01:Z9:ALL4.VAL MS")
23943  field(MALM, "8")
23944  field(NELM, "1")
23945  field(INDX, "6")
23946  field(PREC, "1")
23947  field(FLNK, "$(P):LS01:Z9:INPUT4.PROC")
23948 }
23949 record(mbbi, "$(P):LS01:Z9:INPUT4") {
23950  field(INP, "$(P):LS01:Z9:INPUT4:ARRAY.VAL")
23951  field(SCAN, "Passive")
23952  field(ZRST, "None")
23953  field(ZRVL, "0")
23954  field(ONST, "Input A")
23955  field(ONVL, "1")
23956  field(TWST, "Input B")
23957  field(TWVL, "2")
23958  field(THST, "Input C")
23959  field(THVL, "3")
23960  field(FRST, "Input D")
23961  field(FRVL, "4")
23962  field(FVST, "Input D2")
23963  field(FVVL, "5")
23964  field(SXST, "Input D3")
23965  field(SXVL, "6")
23966  field(SVST, "Input D4")
23967  field(SVVL, "7")
23968  field(EIST, "Input D5")
23969  field(EIVL, "8")
23970  field(FLNK, "$(P):LS01:Z9:RATE4:ARRAY.PROC")
23971 }
23972 
23973 ##
23974 ## Read the ZONE RATE setting.
23975 ##
23976 record(subArray, "$(P):LS01:Z9:RATE4:ARRAY") {
23977  field(SCAN, "Passive")
23978  field(FTVL, "DOUBLE")
23979  field(INP, "$(P):LS01:Z9:ALL4.VAL MS")
23980  field(MALM, "8")
23981  field(NELM, "1")
23982  field(INDX, "7")
23983  field(PREC, "1")
23984  field(FLNK, "$(P):LS01:Z9:RATE4.PROC")
23985 }
23986 record(ai, "$(P):LS01:Z9:RATE4") {
23987  field(SCAN, "Passive")
23988  field(INP, "$(P):LS01:Z9:RATE4:ARRAY.VAL MS")
23989  field(PREC, "1")
23990  field(FLNK, "$(P):LS01:Z9:INITCALC4.PROC")
23991 }
23992 
23993 ##############################################################
23994 ##
23995 ## Populate the write records below with the current values.
23996 ## Only do this once at startup.
23997 ##
23998 ###############################################################
23999 
24000 record(calcout, "$(P):LS01:Z9:INITCALC4") {
24001  field(INPA, "0")
24002  field(CALC, "A")
24003  field(VAL, "0")
24004  field(DOPT, "Use OCAL")
24005  field(OOPT, "When Zero")
24006  field(OCAL, "1")
24007  field(OUT, "$(P):LS01:Z9:INITUB4.PROC")
24008 }
24009 
24010 record(dfanout, "$(P):LS01:Z9:INITUB4") {
24011  field(OMSL, "closed_loop")
24012  field(DOL, "$(P):LS01:Z9:UB4.VAL")
24013  field(OUTA, "$(P):LS01:Z9:UB_S4.VAL PP")
24014  field(FLNK, "$(P):LS01:Z9:INITP4.PROC")
24015 }
24016 record(dfanout, "$(P):LS01:Z9:INITP4") {
24017  field(OMSL, "closed_loop")
24018  field(DOL, "$(P):LS01:Z9:P4.VAL")
24019  field(OUTA, "$(P):LS01:Z9:P_S4.VAL PP")
24020  field(FLNK, "$(P):LS01:Z9:INITI4.PROC")
24021 }
24022 record(dfanout, "$(P):LS01:Z9:INITI4") {
24023  field(OMSL, "closed_loop")
24024  field(DOL, "$(P):LS01:Z9:I4.VAL")
24025  field(OUTA, "$(P):LS01:Z9:I_S4.VAL PP")
24026  field(FLNK, "$(P):LS01:Z9:INITD4.PROC")
24027 }
24028 record(dfanout, "$(P):LS01:Z9:INITD4") {
24029  field(OMSL, "closed_loop")
24030  field(DOL, "$(P):LS01:Z9:D4.VAL")
24031  field(OUTA, "$(P):LS01:Z9:D_S4.VAL PP")
24032  field(FLNK, "$(P):LS01:Z9:INITMOUT4.PROC")
24033 }
24034 record(dfanout, "$(P):LS01:Z9:INITMOUT4") {
24035  field(OMSL, "closed_loop")
24036  field(DOL, "$(P):LS01:Z9:MOUT4.VAL")
24037  field(OUTA, "$(P):LS01:Z9:MOUT_S4.VAL PP")
24038  field(FLNK, "$(P):LS01:Z9:INITRANGE4.PROC")
24039 }
24040 record(dfanout, "$(P):LS01:Z9:INITRANGE4") {
24041  field(OMSL, "closed_loop")
24042  field(DOL, "$(P):LS01:Z9:RANGE4.VAL")
24043  field(OUTA, "$(P):LS01:Z9:RANGE_S4.VAL PP")
24044  field(FLNK, "$(P):LS01:Z9:INITINPUT4.PROC")
24045 }
24046 record(dfanout, "$(P):LS01:Z9:INITINPUT4") {
24047  field(OMSL, "closed_loop")
24048  field(DOL, "$(P):LS01:Z9:INPUT4.VAL")
24049  field(OUTA, "$(P):LS01:Z9:INPUT_S4.VAL PP")
24050  field(FLNK, "$(P):LS01:Z9:INITRATE4.PROC")
24051 }
24052 record(dfanout, "$(P):LS01:Z9:INITRATE4") {
24053  field(OMSL, "closed_loop")
24054  field(DOL, "$(P):LS01:Z9:RATE4.VAL")
24055  field(OUTA, "$(P):LS01:Z9:RATE_S4.VAL PP")
24056  field(FLNK, "$(P):LS01:Z9:INITCOUNT4.PROC")
24057 }
24058 
24059 record(dfanout, "$(P):LS01:Z9:INITCOUNT4") {
24060  field(DOL, "1")
24061  field(OUTA, "$(P):LS01:Z9:INITCALC4.A")
24062 }
24063 
24064 
24065 
24066 #############################################
24067 # Write records. There is a calcout record to
24068 # do the actual write.
24069 #############################################
24070 
24071 ##
24072 ## Set the ZONE upper boundary setting.
24073 ##
24074 record(ao, "$(P):LS01:Z9:UB_S4") {
24075  field(SCAN, "Passive")
24076  field(PREC, "1")
24077  field(SDIS, "$(P):LS01:DISABLE")
24078 }
24079 
24080 ##
24081 ## Set the ZONE P setting.
24082 ##
24083 record(ao, "$(P):LS01:Z9:P_S4") {
24084  field(SCAN, "Passive")
24085  field(PREC, "1")
24086  field(SDIS, "$(P):LS01:DISABLE")
24087 }
24088 
24089 ##
24090 ## Set the ZONE I setting.
24091 ##
24092 record(ao, "$(P):LS01:Z9:I_S4") {
24093  field(SCAN, "Passive")
24094  field(PREC, "1")
24095  field(SDIS, "$(P):LS01:DISABLE")
24096 }
24097 
24098 ##
24099 ## Set the ZONE D setting.
24100 ##
24101 record(ao, "$(P):LS01:Z9:D_S4") {
24102  field(SCAN, "Passive")
24103  field(PREC, "1")
24104  field(SDIS, "$(P):LS01:DISABLE")
24105 }
24106 
24107 ##
24108 ## Set the ZONE MOUT setting.
24109 ##
24110 record(ao, "$(P):LS01:Z9:MOUT_S4") {
24111  field(SCAN, "Passive")
24112  field(PREC, "1")
24113  field(SDIS, "$(P):LS01:DISABLE")
24114 }
24115 
24116 ##
24117 ## Set the ZONE RANGE setting.
24118 ##
24119 record(mbbo, "$(P):LS01:Z9:RANGE_S4") {
24120  field(SCAN, "Passive")
24121  field(ZRST, "Off")
24122  field(ZRVL, "0")
24123  field(ONST, "Range1/Low")
24124  field(ONVL, "1")
24125  field(TWST, "Range2/Medium")
24126  field(TWVL, "2")
24127  field(THST, "Range3/High")
24128  field(THVL, "3")
24129  field(FRST, "Range4")
24130  field(FRVL, "4")
24131  field(FVST, "Range5")
24132  field(FVVL, "5")
24133  field(SDIS, "$(P):LS01:DISABLE")
24134 }
24135 
24136 ##
24137 ## Set the ZONE INPUT setting.
24138 ##
24139 record(mbbo, "$(P):LS01:Z9:INPUT_S4") {
24140  field(ZRST, "None")
24141  field(ZRVL, "0")
24142  field(ONST, "Input A")
24143  field(ONVL, "1")
24144  field(TWST, "Input B")
24145  field(TWVL, "2")
24146  field(THST, "Input C")
24147  field(THVL, "3")
24148  field(FRST, "Input D")
24149  field(FRVL, "4")
24150  field(FVST, "Input D2")
24151  field(FVVL, "5")
24152  field(SXST, "Input D3")
24153  field(SXVL, "6")
24154  field(SVST, "Input D4")
24155  field(SVVL, "7")
24156  field(EIST, "Input D5")
24157  field(EIVL, "8")
24158  field(SDIS, "$(P):LS01:DISABLE")
24159 }
24160 
24161 ##
24162 ## Set the ZONE RATE setting.
24163 ##
24164 record(ao, "$(P):LS01:Z9:RATE_S4") {
24165  field(SCAN, "Passive")
24166  field(PREC, "1")
24167  field(SDIS, "$(P):LS01:DISABLE")
24168 }
24169 
24170 ##
24171 ## Record to write the ZONE parameters.
24172 ##
24173 record(calcout, "$(P):LS01:Z9:SET4") {
24174  field(INPA, "$(P):LS01:Z9:UB_S4")
24175  field(INPB, "$(P):LS01:Z9:P_S4")
24176  field(INPC, "$(P):LS01:Z9:I_S4")
24177  field(INPD, "$(P):LS01:Z9:D_S4")
24178  field(INPE, "$(P):LS01:Z9:MOUT_S4")
24179  field(INPF, "$(P):LS01:Z9:RANGE_S4")
24180  field(INPG, "$(P):LS01:Z9:INPUT_S4")
24181  field(INPH, "$(P):LS01:Z9:RATE_S4")
24182  field(CALC, "0")
24183  field(DTYP, "stream")
24184  field(OUT, "@ls336.proto setZONE(4,9) L0 0")
24185  field(SDIS, "$(P):LS01:DISABLE")
24186  field(FLNK, "$(P):LS01:Z9:ALL4.PROC")
24187 }
24188 
24189 
24190 
24191 
24192 
24193 
24194 
24195 
24196 
24197 
24198 record(mbbi, "$(P):LS01:Z9:RANGE4") {
24199  field(ZRST, "Off")
24200  field(ONST, "On")
24201  field(TWST, "")
24202  field(THST, "")
24203  field(FRST, "")
24204  field(FVST, "")
24205 }
24206 
24207 record(mbbo, "$(P):LS01:Z9:RANGE_S4") {
24208  field(ZRST, "Off")
24209  field(ONST, "On")
24210  field(TWST, "")
24211  field(THST, "")
24212  field(FRST, "")
24213  field(FVST, "")
24214 }
24215 
24216 
24217 
24218 
24219 
24220 
24221 # This just includes the zone file and overrides the RANGE options
24222 # for the analog control channels.
24223 
24224 #######################################
24225 #
24226 # Template to support reading and setting
24227 # controller ZONE parameters. It reads the ZONE
24228 # parameters into an array, then uses subArrays to
24229 # extract each parameter.
24230 #
24231 # This template is used by the output template
24232 # and it needs the following macros:
24233 #
24234 # ZONE: zone number
24235 # OUT: output number
24236 #
24237 #######################################
24238 
24239 ##
24240 ## Read the ZONE setting into an array (8 values)
24241 ##
24242 record(waveform, "$(P):LS01:Z10:ALL4") {
24243  field(DTYP, "stream")
24244  field(SDIS, "$(P):LS01:DISABLE_POLL")
24245  field(INP, "@ls336.proto getZONE(4,10) L0 0")
24246  field(SCAN, "Passive")
24247  field(NELM, "8")
24248  field(FTVL, "DOUBLE")
24249  field(PREC, "1")
24250  field(FLNK, "$(P):LS01:Z10:UB4:ARRAY.PROC")
24251 }
24252 
24253 ##
24254 ## Read the ZONE upper boundary setting.
24255 ##
24256 record(subArray, "$(P):LS01:Z10:UB4:ARRAY") {
24257  field(SCAN, "Passive")
24258  field(FTVL, "DOUBLE")
24259  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
24260  field(MALM, "8")
24261  field(NELM, "1")
24262  field(INDX, "0")
24263  field(PREC, "1")
24264  field(FLNK, "$(P):LS01:Z10:UB4.PROC")
24265 }
24266 record(ai, "$(P):LS01:Z10:UB4") {
24267  field(SCAN, "Passive")
24268  field(INP, "$(P):LS01:Z10:UB4:ARRAY.VAL MS")
24269  field(PREC, "1")
24270  field(FLNK, "$(P):LS01:Z10:P4:ARRAY.PROC")
24271 }
24272 
24273 ##
24274 ## Read the ZONE P setting.
24275 ##
24276 record(subArray, "$(P):LS01:Z10:P4:ARRAY") {
24277  field(SCAN, "Passive")
24278  field(FTVL, "DOUBLE")
24279  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
24280  field(MALM, "8")
24281  field(NELM, "1")
24282  field(INDX, "1")
24283  field(PREC, "1")
24284  field(FLNK, "$(P):LS01:Z10:P4.PROC")
24285 }
24286 record(ai, "$(P):LS01:Z10:P4") {
24287  field(SCAN, "Passive")
24288  field(INP, "$(P):LS01:Z10:P4:ARRAY.VAL MS")
24289  field(PREC, "1")
24290  field(FLNK, "$(P):LS01:Z10:I4:ARRAY.PROC")
24291 }
24292 
24293 ##
24294 ## Read the ZONE I setting.
24295 ##
24296 record(subArray, "$(P):LS01:Z10:I4:ARRAY") {
24297  field(SCAN, "Passive")
24298  field(FTVL, "DOUBLE")
24299  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
24300  field(MALM, "8")
24301  field(NELM, "1")
24302  field(INDX, "2")
24303  field(PREC, "1")
24304  field(FLNK, "$(P):LS01:Z10:I4.PROC")
24305 }
24306 record(ai, "$(P):LS01:Z10:I4") {
24307  field(SCAN, "Passive")
24308  field(INP, "$(P):LS01:Z10:I4:ARRAY.VAL MS")
24309  field(PREC, "1")
24310  field(FLNK, "$(P):LS01:Z10:D4:ARRAY.PROC")
24311 }
24312 
24313 ##
24314 ## Read the ZONE D setting.
24315 ##
24316 record(subArray, "$(P):LS01:Z10:D4:ARRAY") {
24317  field(SCAN, "Passive")
24318  field(FTVL, "DOUBLE")
24319  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
24320  field(MALM, "8")
24321  field(NELM, "1")
24322  field(INDX, "3")
24323  field(PREC, "1")
24324  field(FLNK, "$(P):LS01:Z10:D4.PROC")
24325 }
24326 record(ai, "$(P):LS01:Z10:D4") {
24327  field(SCAN, "Passive")
24328  field(INP, "$(P):LS01:Z10:D4:ARRAY.VAL MS")
24329  field(PREC, "1")
24330  field(FLNK, "$(P):LS01:Z10:MOUT4:ARRAY.PROC")
24331 }
24332 
24333 ##
24334 ## Read the ZONE MOUT setting.
24335 ##
24336 record(subArray, "$(P):LS01:Z10:MOUT4:ARRAY") {
24337  field(SCAN, "Passive")
24338  field(FTVL, "DOUBLE")
24339  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
24340  field(MALM, "8")
24341  field(NELM, "1")
24342  field(INDX, "4")
24343  field(PREC, "1")
24344  field(FLNK, "$(P):LS01:Z10:MOUT4.PROC")
24345 }
24346 record(ai, "$(P):LS01:Z10:MOUT4") {
24347  field(SCAN, "Passive")
24348  field(INP, "$(P):LS01:Z10:MOUT4:ARRAY.VAL MS")
24349  field(PREC, "1")
24350  field(FLNK, "$(P):LS01:Z10:RANGE4:ARRAY.PROC")
24351 }
24352 
24353 ##
24354 ## Read the ZONE RANGE setting.
24355 ##
24356 record(subArray, "$(P):LS01:Z10:RANGE4:ARRAY") {
24357  field(SCAN, "Passive")
24358  field(FTVL, "DOUBLE")
24359  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
24360  field(MALM, "8")
24361  field(NELM, "1")
24362  field(INDX, "5")
24363  field(PREC, "1")
24364  field(FLNK, "$(P):LS01:Z10:RANGE4.PROC")
24365 }
24366 record(mbbi, "$(P):LS01:Z10:RANGE4") {
24367  field(INP, "$(P):LS01:Z10:RANGE4:ARRAY.VAL")
24368  field(SCAN, "Passive")
24369  field(ZRST, "Off")
24370  field(ZRVL, "0")
24371  field(ONST, "Range1/Low")
24372  field(ONVL, "1")
24373  field(TWST, "Range2/Medium")
24374  field(TWVL, "2")
24375  field(THST, "Range3/High")
24376  field(THVL, "3")
24377  field(FRST, "Range4")
24378  field(FRVL, "4")
24379  field(FVST, "Range5")
24380  field(FVVL, "5")
24381  field(FLNK, "$(P):LS01:Z10:INPUT4:ARRAY.PROC")
24382 }
24383 
24384 ##
24385 ## Read the ZONE INPUT setting.
24386 ##
24387 record(subArray, "$(P):LS01:Z10:INPUT4:ARRAY") {
24388  field(SCAN, "Passive")
24389  field(FTVL, "DOUBLE")
24390  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
24391  field(MALM, "8")
24392  field(NELM, "1")
24393  field(INDX, "6")
24394  field(PREC, "1")
24395  field(FLNK, "$(P):LS01:Z10:INPUT4.PROC")
24396 }
24397 record(mbbi, "$(P):LS01:Z10:INPUT4") {
24398  field(INP, "$(P):LS01:Z10:INPUT4:ARRAY.VAL")
24399  field(SCAN, "Passive")
24400  field(ZRST, "None")
24401  field(ZRVL, "0")
24402  field(ONST, "Input A")
24403  field(ONVL, "1")
24404  field(TWST, "Input B")
24405  field(TWVL, "2")
24406  field(THST, "Input C")
24407  field(THVL, "3")
24408  field(FRST, "Input D")
24409  field(FRVL, "4")
24410  field(FVST, "Input D2")
24411  field(FVVL, "5")
24412  field(SXST, "Input D3")
24413  field(SXVL, "6")
24414  field(SVST, "Input D4")
24415  field(SVVL, "7")
24416  field(EIST, "Input D5")
24417  field(EIVL, "8")
24418  field(FLNK, "$(P):LS01:Z10:RATE4:ARRAY.PROC")
24419 }
24420 
24421 ##
24422 ## Read the ZONE RATE setting.
24423 ##
24424 record(subArray, "$(P):LS01:Z10:RATE4:ARRAY") {
24425  field(SCAN, "Passive")
24426  field(FTVL, "DOUBLE")
24427  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
24428  field(MALM, "8")
24429  field(NELM, "1")
24430  field(INDX, "7")
24431  field(PREC, "1")
24432  field(FLNK, "$(P):LS01:Z10:RATE4.PROC")
24433 }
24434 record(ai, "$(P):LS01:Z10:RATE4") {
24435  field(SCAN, "Passive")
24436  field(INP, "$(P):LS01:Z10:RATE4:ARRAY.VAL MS")
24437  field(PREC, "1")
24438  field(FLNK, "$(P):LS01:Z10:INITCALC4.PROC")
24439 }
24440 
24441 ##############################################################
24442 ##
24443 ## Populate the write records below with the current values.
24444 ## Only do this once at startup.
24445 ##
24446 ###############################################################
24447 
24448 record(calcout, "$(P):LS01:Z10:INITCALC4") {
24449  field(INPA, "0")
24450  field(CALC, "A")
24451  field(VAL, "0")
24452  field(DOPT, "Use OCAL")
24453  field(OOPT, "When Zero")
24454  field(OCAL, "1")
24455  field(OUT, "$(P):LS01:Z10:INITUB4.PROC")
24456 }
24457 
24458 record(dfanout, "$(P):LS01:Z10:INITUB4") {
24459  field(OMSL, "closed_loop")
24460  field(DOL, "$(P):LS01:Z10:UB4.VAL")
24461  field(OUTA, "$(P):LS01:Z10:UB_S4.VAL PP")
24462  field(FLNK, "$(P):LS01:Z10:INITP4.PROC")
24463 }
24464 record(dfanout, "$(P):LS01:Z10:INITP4") {
24465  field(OMSL, "closed_loop")
24466  field(DOL, "$(P):LS01:Z10:P4.VAL")
24467  field(OUTA, "$(P):LS01:Z10:P_S4.VAL PP")
24468  field(FLNK, "$(P):LS01:Z10:INITI4.PROC")
24469 }
24470 record(dfanout, "$(P):LS01:Z10:INITI4") {
24471  field(OMSL, "closed_loop")
24472  field(DOL, "$(P):LS01:Z10:I4.VAL")
24473  field(OUTA, "$(P):LS01:Z10:I_S4.VAL PP")
24474  field(FLNK, "$(P):LS01:Z10:INITD4.PROC")
24475 }
24476 record(dfanout, "$(P):LS01:Z10:INITD4") {
24477  field(OMSL, "closed_loop")
24478  field(DOL, "$(P):LS01:Z10:D4.VAL")
24479  field(OUTA, "$(P):LS01:Z10:D_S4.VAL PP")
24480  field(FLNK, "$(P):LS01:Z10:INITMOUT4.PROC")
24481 }
24482 record(dfanout, "$(P):LS01:Z10:INITMOUT4") {
24483  field(OMSL, "closed_loop")
24484  field(DOL, "$(P):LS01:Z10:MOUT4.VAL")
24485  field(OUTA, "$(P):LS01:Z10:MOUT_S4.VAL PP")
24486  field(FLNK, "$(P):LS01:Z10:INITRANGE4.PROC")
24487 }
24488 record(dfanout, "$(P):LS01:Z10:INITRANGE4") {
24489  field(OMSL, "closed_loop")
24490  field(DOL, "$(P):LS01:Z10:RANGE4.VAL")
24491  field(OUTA, "$(P):LS01:Z10:RANGE_S4.VAL PP")
24492  field(FLNK, "$(P):LS01:Z10:INITINPUT4.PROC")
24493 }
24494 record(dfanout, "$(P):LS01:Z10:INITINPUT4") {
24495  field(OMSL, "closed_loop")
24496  field(DOL, "$(P):LS01:Z10:INPUT4.VAL")
24497  field(OUTA, "$(P):LS01:Z10:INPUT_S4.VAL PP")
24498  field(FLNK, "$(P):LS01:Z10:INITRATE4.PROC")
24499 }
24500 record(dfanout, "$(P):LS01:Z10:INITRATE4") {
24501  field(OMSL, "closed_loop")
24502  field(DOL, "$(P):LS01:Z10:RATE4.VAL")
24503  field(OUTA, "$(P):LS01:Z10:RATE_S4.VAL PP")
24504  field(FLNK, "$(P):LS01:Z10:INITCOUNT4.PROC")
24505 }
24506 
24507 record(dfanout, "$(P):LS01:Z10:INITCOUNT4") {
24508  field(DOL, "1")
24509  field(OUTA, "$(P):LS01:Z10:INITCALC4.A")
24510 }
24511 
24512 
24513 
24514 #############################################
24515 # Write records. There is a calcout record to
24516 # do the actual write.
24517 #############################################
24518 
24519 ##
24520 ## Set the ZONE upper boundary setting.
24521 ##
24522 record(ao, "$(P):LS01:Z10:UB_S4") {
24523  field(SCAN, "Passive")
24524  field(PREC, "1")
24525  field(SDIS, "$(P):LS01:DISABLE")
24526 }
24527 
24528 ##
24529 ## Set the ZONE P setting.
24530 ##
24531 record(ao, "$(P):LS01:Z10:P_S4") {
24532  field(SCAN, "Passive")
24533  field(PREC, "1")
24534  field(SDIS, "$(P):LS01:DISABLE")
24535 }
24536 
24537 ##
24538 ## Set the ZONE I setting.
24539 ##
24540 record(ao, "$(P):LS01:Z10:I_S4") {
24541  field(SCAN, "Passive")
24542  field(PREC, "1")
24543  field(SDIS, "$(P):LS01:DISABLE")
24544 }
24545 
24546 ##
24547 ## Set the ZONE D setting.
24548 ##
24549 record(ao, "$(P):LS01:Z10:D_S4") {
24550  field(SCAN, "Passive")
24551  field(PREC, "1")
24552  field(SDIS, "$(P):LS01:DISABLE")
24553 }
24554 
24555 ##
24556 ## Set the ZONE MOUT setting.
24557 ##
24558 record(ao, "$(P):LS01:Z10:MOUT_S4") {
24559  field(SCAN, "Passive")
24560  field(PREC, "1")
24561  field(SDIS, "$(P):LS01:DISABLE")
24562 }
24563 
24564 ##
24565 ## Set the ZONE RANGE setting.
24566 ##
24567 record(mbbo, "$(P):LS01:Z10:RANGE_S4") {
24568  field(SCAN, "Passive")
24569  field(ZRST, "Off")
24570  field(ZRVL, "0")
24571  field(ONST, "Range1/Low")
24572  field(ONVL, "1")
24573  field(TWST, "Range2/Medium")
24574  field(TWVL, "2")
24575  field(THST, "Range3/High")
24576  field(THVL, "3")
24577  field(FRST, "Range4")
24578  field(FRVL, "4")
24579  field(FVST, "Range5")
24580  field(FVVL, "5")
24581  field(SDIS, "$(P):LS01:DISABLE")
24582 }
24583 
24584 ##
24585 ## Set the ZONE INPUT setting.
24586 ##
24587 record(mbbo, "$(P):LS01:Z10:INPUT_S4") {
24588  field(ZRST, "None")
24589  field(ZRVL, "0")
24590  field(ONST, "Input A")
24591  field(ONVL, "1")
24592  field(TWST, "Input B")
24593  field(TWVL, "2")
24594  field(THST, "Input C")
24595  field(THVL, "3")
24596  field(FRST, "Input D")
24597  field(FRVL, "4")
24598  field(FVST, "Input D2")
24599  field(FVVL, "5")
24600  field(SXST, "Input D3")
24601  field(SXVL, "6")
24602  field(SVST, "Input D4")
24603  field(SVVL, "7")
24604  field(EIST, "Input D5")
24605  field(EIVL, "8")
24606  field(SDIS, "$(P):LS01:DISABLE")
24607 }
24608 
24609 ##
24610 ## Set the ZONE RATE setting.
24611 ##
24612 record(ao, "$(P):LS01:Z10:RATE_S4") {
24613  field(SCAN, "Passive")
24614  field(PREC, "1")
24615  field(SDIS, "$(P):LS01:DISABLE")
24616 }
24617 
24618 ##
24619 ## Record to write the ZONE parameters.
24620 ##
24621 record(calcout, "$(P):LS01:Z10:SET4") {
24622  field(INPA, "$(P):LS01:Z10:UB_S4")
24623  field(INPB, "$(P):LS01:Z10:P_S4")
24624  field(INPC, "$(P):LS01:Z10:I_S4")
24625  field(INPD, "$(P):LS01:Z10:D_S4")
24626  field(INPE, "$(P):LS01:Z10:MOUT_S4")
24627  field(INPF, "$(P):LS01:Z10:RANGE_S4")
24628  field(INPG, "$(P):LS01:Z10:INPUT_S4")
24629  field(INPH, "$(P):LS01:Z10:RATE_S4")
24630  field(CALC, "0")
24631  field(DTYP, "stream")
24632  field(OUT, "@ls336.proto setZONE(4,10) L0 0")
24633  field(SDIS, "$(P):LS01:DISABLE")
24634  field(FLNK, "$(P):LS01:Z10:ALL4.PROC")
24635 }
24636 
24637 
24638 
24639 
24640 
24641 
24642 
24643 
24644 
24645 
24646 record(mbbi, "$(P):LS01:Z10:RANGE4") {
24647  field(ZRST, "Off")
24648  field(ONST, "On")
24649  field(TWST, "")
24650  field(THST, "")
24651  field(FRST, "")
24652  field(FVST, "")
24653 }
24654 
24655 record(mbbo, "$(P):LS01:Z10:RANGE_S4") {
24656  field(ZRST, "Off")
24657  field(ONST, "On")
24658  field(TWST, "")
24659  field(THST, "")
24660  field(FRST, "")
24661  field(FVST, "")
24662 }
24663 
24664 
24665 
24666 
24667 
24668 
24669 
24670 # This just includes the zone file and overrides the RANGE options
24671 # for the analog control channels.
24672 
24673 #######################################
24674 #
24675 # Template to support reading and setting
24676 # controller ZONE parameters. It reads the ZONE
24677 # parameters into an array, then uses subArrays to
24678 # extract each parameter.
24679 #
24680 # This template is used by the output template
24681 # and it needs the following macros:
24682 #
24683 # ZONE: zone number
24684 # OUT: output number
24685 #
24686 #######################################
24687 
24688 ##
24689 ## Read the ZONE setting into an array (8 values)
24690 ##
24691 record(waveform, "$(P):LS01:Z10:ALL3") {
24692  field(DTYP, "stream")
24693  field(SDIS, "$(P):LS01:DISABLE_POLL")
24694  field(INP, "@ls336.proto getZONE(3,10) L0 0")
24695  field(SCAN, "Passive")
24696  field(NELM, "8")
24697  field(FTVL, "DOUBLE")
24698  field(PREC, "1")
24699  field(FLNK, "$(P):LS01:Z10:UB3:ARRAY.PROC")
24700 }
24701 
24702 ##
24703 ## Read the ZONE upper boundary setting.
24704 ##
24705 record(subArray, "$(P):LS01:Z10:UB3:ARRAY") {
24706  field(SCAN, "Passive")
24707  field(FTVL, "DOUBLE")
24708  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
24709  field(MALM, "8")
24710  field(NELM, "1")
24711  field(INDX, "0")
24712  field(PREC, "1")
24713  field(FLNK, "$(P):LS01:Z10:UB3.PROC")
24714 }
24715 record(ai, "$(P):LS01:Z10:UB3") {
24716  field(SCAN, "Passive")
24717  field(INP, "$(P):LS01:Z10:UB3:ARRAY.VAL MS")
24718  field(PREC, "1")
24719  field(FLNK, "$(P):LS01:Z10:P3:ARRAY.PROC")
24720 }
24721 
24722 ##
24723 ## Read the ZONE P setting.
24724 ##
24725 record(subArray, "$(P):LS01:Z10:P3:ARRAY") {
24726  field(SCAN, "Passive")
24727  field(FTVL, "DOUBLE")
24728  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
24729  field(MALM, "8")
24730  field(NELM, "1")
24731  field(INDX, "1")
24732  field(PREC, "1")
24733  field(FLNK, "$(P):LS01:Z10:P3.PROC")
24734 }
24735 record(ai, "$(P):LS01:Z10:P3") {
24736  field(SCAN, "Passive")
24737  field(INP, "$(P):LS01:Z10:P3:ARRAY.VAL MS")
24738  field(PREC, "1")
24739  field(FLNK, "$(P):LS01:Z10:I3:ARRAY.PROC")
24740 }
24741 
24742 ##
24743 ## Read the ZONE I setting.
24744 ##
24745 record(subArray, "$(P):LS01:Z10:I3:ARRAY") {
24746  field(SCAN, "Passive")
24747  field(FTVL, "DOUBLE")
24748  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
24749  field(MALM, "8")
24750  field(NELM, "1")
24751  field(INDX, "2")
24752  field(PREC, "1")
24753  field(FLNK, "$(P):LS01:Z10:I3.PROC")
24754 }
24755 record(ai, "$(P):LS01:Z10:I3") {
24756  field(SCAN, "Passive")
24757  field(INP, "$(P):LS01:Z10:I3:ARRAY.VAL MS")
24758  field(PREC, "1")
24759  field(FLNK, "$(P):LS01:Z10:D3:ARRAY.PROC")
24760 }
24761 
24762 ##
24763 ## Read the ZONE D setting.
24764 ##
24765 record(subArray, "$(P):LS01:Z10:D3:ARRAY") {
24766  field(SCAN, "Passive")
24767  field(FTVL, "DOUBLE")
24768  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
24769  field(MALM, "8")
24770  field(NELM, "1")
24771  field(INDX, "3")
24772  field(PREC, "1")
24773  field(FLNK, "$(P):LS01:Z10:D3.PROC")
24774 }
24775 record(ai, "$(P):LS01:Z10:D3") {
24776  field(SCAN, "Passive")
24777  field(INP, "$(P):LS01:Z10:D3:ARRAY.VAL MS")
24778  field(PREC, "1")
24779  field(FLNK, "$(P):LS01:Z10:MOUT3:ARRAY.PROC")
24780 }
24781 
24782 ##
24783 ## Read the ZONE MOUT setting.
24784 ##
24785 record(subArray, "$(P):LS01:Z10:MOUT3:ARRAY") {
24786  field(SCAN, "Passive")
24787  field(FTVL, "DOUBLE")
24788  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
24789  field(MALM, "8")
24790  field(NELM, "1")
24791  field(INDX, "4")
24792  field(PREC, "1")
24793  field(FLNK, "$(P):LS01:Z10:MOUT3.PROC")
24794 }
24795 record(ai, "$(P):LS01:Z10:MOUT3") {
24796  field(SCAN, "Passive")
24797  field(INP, "$(P):LS01:Z10:MOUT3:ARRAY.VAL MS")
24798  field(PREC, "1")
24799  field(FLNK, "$(P):LS01:Z10:RANGE3:ARRAY.PROC")
24800 }
24801 
24802 ##
24803 ## Read the ZONE RANGE setting.
24804 ##
24805 record(subArray, "$(P):LS01:Z10:RANGE3:ARRAY") {
24806  field(SCAN, "Passive")
24807  field(FTVL, "DOUBLE")
24808  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
24809  field(MALM, "8")
24810  field(NELM, "1")
24811  field(INDX, "5")
24812  field(PREC, "1")
24813  field(FLNK, "$(P):LS01:Z10:RANGE3.PROC")
24814 }
24815 record(mbbi, "$(P):LS01:Z10:RANGE3") {
24816  field(INP, "$(P):LS01:Z10:RANGE3:ARRAY.VAL")
24817  field(SCAN, "Passive")
24818  field(ZRST, "Off")
24819  field(ZRVL, "0")
24820  field(ONST, "Range1/Low")
24821  field(ONVL, "1")
24822  field(TWST, "Range2/Medium")
24823  field(TWVL, "2")
24824  field(THST, "Range3/High")
24825  field(THVL, "3")
24826  field(FRST, "Range4")
24827  field(FRVL, "4")
24828  field(FVST, "Range5")
24829  field(FVVL, "5")
24830  field(FLNK, "$(P):LS01:Z10:INPUT3:ARRAY.PROC")
24831 }
24832 
24833 ##
24834 ## Read the ZONE INPUT setting.
24835 ##
24836 record(subArray, "$(P):LS01:Z10:INPUT3:ARRAY") {
24837  field(SCAN, "Passive")
24838  field(FTVL, "DOUBLE")
24839  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
24840  field(MALM, "8")
24841  field(NELM, "1")
24842  field(INDX, "6")
24843  field(PREC, "1")
24844  field(FLNK, "$(P):LS01:Z10:INPUT3.PROC")
24845 }
24846 record(mbbi, "$(P):LS01:Z10:INPUT3") {
24847  field(INP, "$(P):LS01:Z10:INPUT3:ARRAY.VAL")
24848  field(SCAN, "Passive")
24849  field(ZRST, "None")
24850  field(ZRVL, "0")
24851  field(ONST, "Input A")
24852  field(ONVL, "1")
24853  field(TWST, "Input B")
24854  field(TWVL, "2")
24855  field(THST, "Input C")
24856  field(THVL, "3")
24857  field(FRST, "Input D")
24858  field(FRVL, "4")
24859  field(FVST, "Input D2")
24860  field(FVVL, "5")
24861  field(SXST, "Input D3")
24862  field(SXVL, "6")
24863  field(SVST, "Input D4")
24864  field(SVVL, "7")
24865  field(EIST, "Input D5")
24866  field(EIVL, "8")
24867  field(FLNK, "$(P):LS01:Z10:RATE3:ARRAY.PROC")
24868 }
24869 
24870 ##
24871 ## Read the ZONE RATE setting.
24872 ##
24873 record(subArray, "$(P):LS01:Z10:RATE3:ARRAY") {
24874  field(SCAN, "Passive")
24875  field(FTVL, "DOUBLE")
24876  field(INP, "$(P):LS01:Z10:ALL3.VAL MS")
24877  field(MALM, "8")
24878  field(NELM, "1")
24879  field(INDX, "7")
24880  field(PREC, "1")
24881  field(FLNK, "$(P):LS01:Z10:RATE3.PROC")
24882 }
24883 record(ai, "$(P):LS01:Z10:RATE3") {
24884  field(SCAN, "Passive")
24885  field(INP, "$(P):LS01:Z10:RATE3:ARRAY.VAL MS")
24886  field(PREC, "1")
24887  field(FLNK, "$(P):LS01:Z10:INITCALC3.PROC")
24888 }
24889 
24890 ##############################################################
24891 ##
24892 ## Populate the write records below with the current values.
24893 ## Only do this once at startup.
24894 ##
24895 ###############################################################
24896 
24897 record(calcout, "$(P):LS01:Z10:INITCALC3") {
24898  field(INPA, "0")
24899  field(CALC, "A")
24900  field(VAL, "0")
24901  field(DOPT, "Use OCAL")
24902  field(OOPT, "When Zero")
24903  field(OCAL, "1")
24904  field(OUT, "$(P):LS01:Z10:INITUB3.PROC")
24905 }
24906 
24907 record(dfanout, "$(P):LS01:Z10:INITUB3") {
24908  field(OMSL, "closed_loop")
24909  field(DOL, "$(P):LS01:Z10:UB3.VAL")
24910  field(OUTA, "$(P):LS01:Z10:UB_S3.VAL PP")
24911  field(FLNK, "$(P):LS01:Z10:INITP3.PROC")
24912 }
24913 record(dfanout, "$(P):LS01:Z10:INITP3") {
24914  field(OMSL, "closed_loop")
24915  field(DOL, "$(P):LS01:Z10:P3.VAL")
24916  field(OUTA, "$(P):LS01:Z10:P_S3.VAL PP")
24917  field(FLNK, "$(P):LS01:Z10:INITI3.PROC")
24918 }
24919 record(dfanout, "$(P):LS01:Z10:INITI3") {
24920  field(OMSL, "closed_loop")
24921  field(DOL, "$(P):LS01:Z10:I3.VAL")
24922  field(OUTA, "$(P):LS01:Z10:I_S3.VAL PP")
24923  field(FLNK, "$(P):LS01:Z10:INITD3.PROC")
24924 }
24925 record(dfanout, "$(P):LS01:Z10:INITD3") {
24926  field(OMSL, "closed_loop")
24927  field(DOL, "$(P):LS01:Z10:D3.VAL")
24928  field(OUTA, "$(P):LS01:Z10:D_S3.VAL PP")
24929  field(FLNK, "$(P):LS01:Z10:INITMOUT3.PROC")
24930 }
24931 record(dfanout, "$(P):LS01:Z10:INITMOUT3") {
24932  field(OMSL, "closed_loop")
24933  field(DOL, "$(P):LS01:Z10:MOUT3.VAL")
24934  field(OUTA, "$(P):LS01:Z10:MOUT_S3.VAL PP")
24935  field(FLNK, "$(P):LS01:Z10:INITRANGE3.PROC")
24936 }
24937 record(dfanout, "$(P):LS01:Z10:INITRANGE3") {
24938  field(OMSL, "closed_loop")
24939  field(DOL, "$(P):LS01:Z10:RANGE3.VAL")
24940  field(OUTA, "$(P):LS01:Z10:RANGE_S3.VAL PP")
24941  field(FLNK, "$(P):LS01:Z10:INITINPUT3.PROC")
24942 }
24943 record(dfanout, "$(P):LS01:Z10:INITINPUT3") {
24944  field(OMSL, "closed_loop")
24945  field(DOL, "$(P):LS01:Z10:INPUT3.VAL")
24946  field(OUTA, "$(P):LS01:Z10:INPUT_S3.VAL PP")
24947  field(FLNK, "$(P):LS01:Z10:INITRATE3.PROC")
24948 }
24949 record(dfanout, "$(P):LS01:Z10:INITRATE3") {
24950  field(OMSL, "closed_loop")
24951  field(DOL, "$(P):LS01:Z10:RATE3.VAL")
24952  field(OUTA, "$(P):LS01:Z10:RATE_S3.VAL PP")
24953  field(FLNK, "$(P):LS01:Z10:INITCOUNT3.PROC")
24954 }
24955 
24956 record(dfanout, "$(P):LS01:Z10:INITCOUNT3") {
24957  field(DOL, "1")
24958  field(OUTA, "$(P):LS01:Z10:INITCALC3.A")
24959 }
24960 
24961 
24962 
24963 #############################################
24964 # Write records. There is a calcout record to
24965 # do the actual write.
24966 #############################################
24967 
24968 ##
24969 ## Set the ZONE upper boundary setting.
24970 ##
24971 record(ao, "$(P):LS01:Z10:UB_S3") {
24972  field(SCAN, "Passive")
24973  field(PREC, "1")
24974  field(SDIS, "$(P):LS01:DISABLE")
24975 }
24976 
24977 ##
24978 ## Set the ZONE P setting.
24979 ##
24980 record(ao, "$(P):LS01:Z10:P_S3") {
24981  field(SCAN, "Passive")
24982  field(PREC, "1")
24983  field(SDIS, "$(P):LS01:DISABLE")
24984 }
24985 
24986 ##
24987 ## Set the ZONE I setting.
24988 ##
24989 record(ao, "$(P):LS01:Z10:I_S3") {
24990  field(SCAN, "Passive")
24991  field(PREC, "1")
24992  field(SDIS, "$(P):LS01:DISABLE")
24993 }
24994 
24995 ##
24996 ## Set the ZONE D setting.
24997 ##
24998 record(ao, "$(P):LS01:Z10:D_S3") {
24999  field(SCAN, "Passive")
25000  field(PREC, "1")
25001  field(SDIS, "$(P):LS01:DISABLE")
25002 }
25003 
25004 ##
25005 ## Set the ZONE MOUT setting.
25006 ##
25007 record(ao, "$(P):LS01:Z10:MOUT_S3") {
25008  field(SCAN, "Passive")
25009  field(PREC, "1")
25010  field(SDIS, "$(P):LS01:DISABLE")
25011 }
25012 
25013 ##
25014 ## Set the ZONE RANGE setting.
25015 ##
25016 record(mbbo, "$(P):LS01:Z10:RANGE_S3") {
25017  field(SCAN, "Passive")
25018  field(ZRST, "Off")
25019  field(ZRVL, "0")
25020  field(ONST, "Range1/Low")
25021  field(ONVL, "1")
25022  field(TWST, "Range2/Medium")
25023  field(TWVL, "2")
25024  field(THST, "Range3/High")
25025  field(THVL, "3")
25026  field(FRST, "Range4")
25027  field(FRVL, "4")
25028  field(FVST, "Range5")
25029  field(FVVL, "5")
25030  field(SDIS, "$(P):LS01:DISABLE")
25031 }
25032 
25033 ##
25034 ## Set the ZONE INPUT setting.
25035 ##
25036 record(mbbo, "$(P):LS01:Z10:INPUT_S3") {
25037  field(ZRST, "None")
25038  field(ZRVL, "0")
25039  field(ONST, "Input A")
25040  field(ONVL, "1")
25041  field(TWST, "Input B")
25042  field(TWVL, "2")
25043  field(THST, "Input C")
25044  field(THVL, "3")
25045  field(FRST, "Input D")
25046  field(FRVL, "4")
25047  field(FVST, "Input D2")
25048  field(FVVL, "5")
25049  field(SXST, "Input D3")
25050  field(SXVL, "6")
25051  field(SVST, "Input D4")
25052  field(SVVL, "7")
25053  field(EIST, "Input D5")
25054  field(EIVL, "8")
25055  field(SDIS, "$(P):LS01:DISABLE")
25056 }
25057 
25058 ##
25059 ## Set the ZONE RATE setting.
25060 ##
25061 record(ao, "$(P):LS01:Z10:RATE_S3") {
25062  field(SCAN, "Passive")
25063  field(PREC, "1")
25064  field(SDIS, "$(P):LS01:DISABLE")
25065 }
25066 
25067 ##
25068 ## Record to write the ZONE parameters.
25069 ##
25070 record(calcout, "$(P):LS01:Z10:SET3") {
25071  field(INPA, "$(P):LS01:Z10:UB_S3")
25072  field(INPB, "$(P):LS01:Z10:P_S3")
25073  field(INPC, "$(P):LS01:Z10:I_S3")
25074  field(INPD, "$(P):LS01:Z10:D_S3")
25075  field(INPE, "$(P):LS01:Z10:MOUT_S3")
25076  field(INPF, "$(P):LS01:Z10:RANGE_S3")
25077  field(INPG, "$(P):LS01:Z10:INPUT_S3")
25078  field(INPH, "$(P):LS01:Z10:RATE_S3")
25079  field(CALC, "0")
25080  field(DTYP, "stream")
25081  field(OUT, "@ls336.proto setZONE(3,10) L0 0")
25082  field(SDIS, "$(P):LS01:DISABLE")
25083  field(FLNK, "$(P):LS01:Z10:ALL3.PROC")
25084 }
25085 
25086 
25087 
25088 
25089 
25090 
25091 
25092 
25093 
25094 
25095 record(mbbi, "$(P):LS01:Z10:RANGE3") {
25096  field(ZRST, "Off")
25097  field(ONST, "On")
25098  field(TWST, "")
25099  field(THST, "")
25100  field(FRST, "")
25101  field(FVST, "")
25102 }
25103 
25104 record(mbbo, "$(P):LS01:Z10:RANGE_S3") {
25105  field(ZRST, "Off")
25106  field(ONST, "On")
25107  field(TWST, "")
25108  field(THST, "")
25109  field(FRST, "")
25110  field(FVST, "")
25111 }
25112 
25113 
25114 
25115 
25116 
25117 
25118 # This just includes the zone file and overrides the RANGE options
25119 # for the analog control channels.
25120 
25121 #######################################
25122 #
25123 # Template to support reading and setting
25124 # controller ZONE parameters. It reads the ZONE
25125 # parameters into an array, then uses subArrays to
25126 # extract each parameter.
25127 #
25128 # This template is used by the output template
25129 # and it needs the following macros:
25130 #
25131 # ZONE: zone number
25132 # OUT: output number
25133 #
25134 #######################################
25135 
25136 ##
25137 ## Read the ZONE setting into an array (8 values)
25138 ##
25139 record(waveform, "$(P):LS01:Z10:ALL4") {
25140  field(DTYP, "stream")
25141  field(SDIS, "$(P):LS01:DISABLE_POLL")
25142  field(INP, "@ls336.proto getZONE(4,10) L0 0")
25143  field(SCAN, "Passive")
25144  field(NELM, "8")
25145  field(FTVL, "DOUBLE")
25146  field(PREC, "1")
25147  field(FLNK, "$(P):LS01:Z10:UB4:ARRAY.PROC")
25148 }
25149 
25150 ##
25151 ## Read the ZONE upper boundary setting.
25152 ##
25153 record(subArray, "$(P):LS01:Z10:UB4:ARRAY") {
25154  field(SCAN, "Passive")
25155  field(FTVL, "DOUBLE")
25156  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
25157  field(MALM, "8")
25158  field(NELM, "1")
25159  field(INDX, "0")
25160  field(PREC, "1")
25161  field(FLNK, "$(P):LS01:Z10:UB4.PROC")
25162 }
25163 record(ai, "$(P):LS01:Z10:UB4") {
25164  field(SCAN, "Passive")
25165  field(INP, "$(P):LS01:Z10:UB4:ARRAY.VAL MS")
25166  field(PREC, "1")
25167  field(FLNK, "$(P):LS01:Z10:P4:ARRAY.PROC")
25168 }
25169 
25170 ##
25171 ## Read the ZONE P setting.
25172 ##
25173 record(subArray, "$(P):LS01:Z10:P4:ARRAY") {
25174  field(SCAN, "Passive")
25175  field(FTVL, "DOUBLE")
25176  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
25177  field(MALM, "8")
25178  field(NELM, "1")
25179  field(INDX, "1")
25180  field(PREC, "1")
25181  field(FLNK, "$(P):LS01:Z10:P4.PROC")
25182 }
25183 record(ai, "$(P):LS01:Z10:P4") {
25184  field(SCAN, "Passive")
25185  field(INP, "$(P):LS01:Z10:P4:ARRAY.VAL MS")
25186  field(PREC, "1")
25187  field(FLNK, "$(P):LS01:Z10:I4:ARRAY.PROC")
25188 }
25189 
25190 ##
25191 ## Read the ZONE I setting.
25192 ##
25193 record(subArray, "$(P):LS01:Z10:I4:ARRAY") {
25194  field(SCAN, "Passive")
25195  field(FTVL, "DOUBLE")
25196  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
25197  field(MALM, "8")
25198  field(NELM, "1")
25199  field(INDX, "2")
25200  field(PREC, "1")
25201  field(FLNK, "$(P):LS01:Z10:I4.PROC")
25202 }
25203 record(ai, "$(P):LS01:Z10:I4") {
25204  field(SCAN, "Passive")
25205  field(INP, "$(P):LS01:Z10:I4:ARRAY.VAL MS")
25206  field(PREC, "1")
25207  field(FLNK, "$(P):LS01:Z10:D4:ARRAY.PROC")
25208 }
25209 
25210 ##
25211 ## Read the ZONE D setting.
25212 ##
25213 record(subArray, "$(P):LS01:Z10:D4:ARRAY") {
25214  field(SCAN, "Passive")
25215  field(FTVL, "DOUBLE")
25216  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
25217  field(MALM, "8")
25218  field(NELM, "1")
25219  field(INDX, "3")
25220  field(PREC, "1")
25221  field(FLNK, "$(P):LS01:Z10:D4.PROC")
25222 }
25223 record(ai, "$(P):LS01:Z10:D4") {
25224  field(SCAN, "Passive")
25225  field(INP, "$(P):LS01:Z10:D4:ARRAY.VAL MS")
25226  field(PREC, "1")
25227  field(FLNK, "$(P):LS01:Z10:MOUT4:ARRAY.PROC")
25228 }
25229 
25230 ##
25231 ## Read the ZONE MOUT setting.
25232 ##
25233 record(subArray, "$(P):LS01:Z10:MOUT4:ARRAY") {
25234  field(SCAN, "Passive")
25235  field(FTVL, "DOUBLE")
25236  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
25237  field(MALM, "8")
25238  field(NELM, "1")
25239  field(INDX, "4")
25240  field(PREC, "1")
25241  field(FLNK, "$(P):LS01:Z10:MOUT4.PROC")
25242 }
25243 record(ai, "$(P):LS01:Z10:MOUT4") {
25244  field(SCAN, "Passive")
25245  field(INP, "$(P):LS01:Z10:MOUT4:ARRAY.VAL MS")
25246  field(PREC, "1")
25247  field(FLNK, "$(P):LS01:Z10:RANGE4:ARRAY.PROC")
25248 }
25249 
25250 ##
25251 ## Read the ZONE RANGE setting.
25252 ##
25253 record(subArray, "$(P):LS01:Z10:RANGE4:ARRAY") {
25254  field(SCAN, "Passive")
25255  field(FTVL, "DOUBLE")
25256  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
25257  field(MALM, "8")
25258  field(NELM, "1")
25259  field(INDX, "5")
25260  field(PREC, "1")
25261  field(FLNK, "$(P):LS01:Z10:RANGE4.PROC")
25262 }
25263 record(mbbi, "$(P):LS01:Z10:RANGE4") {
25264  field(INP, "$(P):LS01:Z10:RANGE4:ARRAY.VAL")
25265  field(SCAN, "Passive")
25266  field(ZRST, "Off")
25267  field(ZRVL, "0")
25268  field(ONST, "Range1/Low")
25269  field(ONVL, "1")
25270  field(TWST, "Range2/Medium")
25271  field(TWVL, "2")
25272  field(THST, "Range3/High")
25273  field(THVL, "3")
25274  field(FRST, "Range4")
25275  field(FRVL, "4")
25276  field(FVST, "Range5")
25277  field(FVVL, "5")
25278  field(FLNK, "$(P):LS01:Z10:INPUT4:ARRAY.PROC")
25279 }
25280 
25281 ##
25282 ## Read the ZONE INPUT setting.
25283 ##
25284 record(subArray, "$(P):LS01:Z10:INPUT4:ARRAY") {
25285  field(SCAN, "Passive")
25286  field(FTVL, "DOUBLE")
25287  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
25288  field(MALM, "8")
25289  field(NELM, "1")
25290  field(INDX, "6")
25291  field(PREC, "1")
25292  field(FLNK, "$(P):LS01:Z10:INPUT4.PROC")
25293 }
25294 record(mbbi, "$(P):LS01:Z10:INPUT4") {
25295  field(INP, "$(P):LS01:Z10:INPUT4:ARRAY.VAL")
25296  field(SCAN, "Passive")
25297  field(ZRST, "None")
25298  field(ZRVL, "0")
25299  field(ONST, "Input A")
25300  field(ONVL, "1")
25301  field(TWST, "Input B")
25302  field(TWVL, "2")
25303  field(THST, "Input C")
25304  field(THVL, "3")
25305  field(FRST, "Input D")
25306  field(FRVL, "4")
25307  field(FVST, "Input D2")
25308  field(FVVL, "5")
25309  field(SXST, "Input D3")
25310  field(SXVL, "6")
25311  field(SVST, "Input D4")
25312  field(SVVL, "7")
25313  field(EIST, "Input D5")
25314  field(EIVL, "8")
25315  field(FLNK, "$(P):LS01:Z10:RATE4:ARRAY.PROC")
25316 }
25317 
25318 ##
25319 ## Read the ZONE RATE setting.
25320 ##
25321 record(subArray, "$(P):LS01:Z10:RATE4:ARRAY") {
25322  field(SCAN, "Passive")
25323  field(FTVL, "DOUBLE")
25324  field(INP, "$(P):LS01:Z10:ALL4.VAL MS")
25325  field(MALM, "8")
25326  field(NELM, "1")
25327  field(INDX, "7")
25328  field(PREC, "1")
25329  field(FLNK, "$(P):LS01:Z10:RATE4.PROC")
25330 }
25331 record(ai, "$(P):LS01:Z10:RATE4") {
25332  field(SCAN, "Passive")
25333  field(INP, "$(P):LS01:Z10:RATE4:ARRAY.VAL MS")
25334  field(PREC, "1")
25335  field(FLNK, "$(P):LS01:Z10:INITCALC4.PROC")
25336 }
25337 
25338 ##############################################################
25339 ##
25340 ## Populate the write records below with the current values.
25341 ## Only do this once at startup.
25342 ##
25343 ###############################################################
25344 
25345 record(calcout, "$(P):LS01:Z10:INITCALC4") {
25346  field(INPA, "0")
25347  field(CALC, "A")
25348  field(VAL, "0")
25349  field(DOPT, "Use OCAL")
25350  field(OOPT, "When Zero")
25351  field(OCAL, "1")
25352  field(OUT, "$(P):LS01:Z10:INITUB4.PROC")
25353 }
25354 
25355 record(dfanout, "$(P):LS01:Z10:INITUB4") {
25356  field(OMSL, "closed_loop")
25357  field(DOL, "$(P):LS01:Z10:UB4.VAL")
25358  field(OUTA, "$(P):LS01:Z10:UB_S4.VAL PP")
25359  field(FLNK, "$(P):LS01:Z10:INITP4.PROC")
25360 }
25361 record(dfanout, "$(P):LS01:Z10:INITP4") {
25362  field(OMSL, "closed_loop")
25363  field(DOL, "$(P):LS01:Z10:P4.VAL")
25364  field(OUTA, "$(P):LS01:Z10:P_S4.VAL PP")
25365  field(FLNK, "$(P):LS01:Z10:INITI4.PROC")
25366 }
25367 record(dfanout, "$(P):LS01:Z10:INITI4") {
25368  field(OMSL, "closed_loop")
25369  field(DOL, "$(P):LS01:Z10:I4.VAL")
25370  field(OUTA, "$(P):LS01:Z10:I_S4.VAL PP")
25371  field(FLNK, "$(P):LS01:Z10:INITD4.PROC")
25372 }
25373 record(dfanout, "$(P):LS01:Z10:INITD4") {
25374  field(OMSL, "closed_loop")
25375  field(DOL, "$(P):LS01:Z10:D4.VAL")
25376  field(OUTA, "$(P):LS01:Z10:D_S4.VAL PP")
25377  field(FLNK, "$(P):LS01:Z10:INITMOUT4.PROC")
25378 }
25379 record(dfanout, "$(P):LS01:Z10:INITMOUT4") {
25380  field(OMSL, "closed_loop")
25381  field(DOL, "$(P):LS01:Z10:MOUT4.VAL")
25382  field(OUTA, "$(P):LS01:Z10:MOUT_S4.VAL PP")
25383  field(FLNK, "$(P):LS01:Z10:INITRANGE4.PROC")
25384 }
25385 record(dfanout, "$(P):LS01:Z10:INITRANGE4") {
25386  field(OMSL, "closed_loop")
25387  field(DOL, "$(P):LS01:Z10:RANGE4.VAL")
25388  field(OUTA, "$(P):LS01:Z10:RANGE_S4.VAL PP")
25389  field(FLNK, "$(P):LS01:Z10:INITINPUT4.PROC")
25390 }
25391 record(dfanout, "$(P):LS01:Z10:INITINPUT4") {
25392  field(OMSL, "closed_loop")
25393  field(DOL, "$(P):LS01:Z10:INPUT4.VAL")
25394  field(OUTA, "$(P):LS01:Z10:INPUT_S4.VAL PP")
25395  field(FLNK, "$(P):LS01:Z10:INITRATE4.PROC")
25396 }
25397 record(dfanout, "$(P):LS01:Z10:INITRATE4") {
25398  field(OMSL, "closed_loop")
25399  field(DOL, "$(P):LS01:Z10:RATE4.VAL")
25400  field(OUTA, "$(P):LS01:Z10:RATE_S4.VAL PP")
25401  field(FLNK, "$(P):LS01:Z10:INITCOUNT4.PROC")
25402 }
25403 
25404 record(dfanout, "$(P):LS01:Z10:INITCOUNT4") {
25405  field(DOL, "1")
25406  field(OUTA, "$(P):LS01:Z10:INITCALC4.A")
25407 }
25408 
25409 
25410 
25411 #############################################
25412 # Write records. There is a calcout record to
25413 # do the actual write.
25414 #############################################
25415 
25416 ##
25417 ## Set the ZONE upper boundary setting.
25418 ##
25419 record(ao, "$(P):LS01:Z10:UB_S4") {
25420  field(SCAN, "Passive")
25421  field(PREC, "1")
25422  field(SDIS, "$(P):LS01:DISABLE")
25423 }
25424 
25425 ##
25426 ## Set the ZONE P setting.
25427 ##
25428 record(ao, "$(P):LS01:Z10:P_S4") {
25429  field(SCAN, "Passive")
25430  field(PREC, "1")
25431  field(SDIS, "$(P):LS01:DISABLE")
25432 }
25433 
25434 ##
25435 ## Set the ZONE I setting.
25436 ##
25437 record(ao, "$(P):LS01:Z10:I_S4") {
25438  field(SCAN, "Passive")
25439  field(PREC, "1")
25440  field(SDIS, "$(P):LS01:DISABLE")
25441 }
25442 
25443 ##
25444 ## Set the ZONE D setting.
25445 ##
25446 record(ao, "$(P):LS01:Z10:D_S4") {
25447  field(SCAN, "Passive")
25448  field(PREC, "1")
25449  field(SDIS, "$(P):LS01:DISABLE")
25450 }
25451 
25452 ##
25453 ## Set the ZONE MOUT setting.
25454 ##
25455 record(ao, "$(P):LS01:Z10:MOUT_S4") {
25456  field(SCAN, "Passive")
25457  field(PREC, "1")
25458  field(SDIS, "$(P):LS01:DISABLE")
25459 }
25460 
25461 ##
25462 ## Set the ZONE RANGE setting.
25463 ##
25464 record(mbbo, "$(P):LS01:Z10:RANGE_S4") {
25465  field(SCAN, "Passive")
25466  field(ZRST, "Off")
25467  field(ZRVL, "0")
25468  field(ONST, "Range1/Low")
25469  field(ONVL, "1")
25470  field(TWST, "Range2/Medium")
25471  field(TWVL, "2")
25472  field(THST, "Range3/High")
25473  field(THVL, "3")
25474  field(FRST, "Range4")
25475  field(FRVL, "4")
25476  field(FVST, "Range5")
25477  field(FVVL, "5")
25478  field(SDIS, "$(P):LS01:DISABLE")
25479 }
25480 
25481 ##
25482 ## Set the ZONE INPUT setting.
25483 ##
25484 record(mbbo, "$(P):LS01:Z10:INPUT_S4") {
25485  field(ZRST, "None")
25486  field(ZRVL, "0")
25487  field(ONST, "Input A")
25488  field(ONVL, "1")
25489  field(TWST, "Input B")
25490  field(TWVL, "2")
25491  field(THST, "Input C")
25492  field(THVL, "3")
25493  field(FRST, "Input D")
25494  field(FRVL, "4")
25495  field(FVST, "Input D2")
25496  field(FVVL, "5")
25497  field(SXST, "Input D3")
25498  field(SXVL, "6")
25499  field(SVST, "Input D4")
25500  field(SVVL, "7")
25501  field(EIST, "Input D5")
25502  field(EIVL, "8")
25503  field(SDIS, "$(P):LS01:DISABLE")
25504 }
25505 
25506 ##
25507 ## Set the ZONE RATE setting.
25508 ##
25509 record(ao, "$(P):LS01:Z10:RATE_S4") {
25510  field(SCAN, "Passive")
25511  field(PREC, "1")
25512  field(SDIS, "$(P):LS01:DISABLE")
25513 }
25514 
25515 ##
25516 ## Record to write the ZONE parameters.
25517 ##
25518 record(calcout, "$(P):LS01:Z10:SET4") {
25519  field(INPA, "$(P):LS01:Z10:UB_S4")
25520  field(INPB, "$(P):LS01:Z10:P_S4")
25521  field(INPC, "$(P):LS01:Z10:I_S4")
25522  field(INPD, "$(P):LS01:Z10:D_S4")
25523  field(INPE, "$(P):LS01:Z10:MOUT_S4")
25524  field(INPF, "$(P):LS01:Z10:RANGE_S4")
25525  field(INPG, "$(P):LS01:Z10:INPUT_S4")
25526  field(INPH, "$(P):LS01:Z10:RATE_S4")
25527  field(CALC, "0")
25528  field(DTYP, "stream")
25529  field(OUT, "@ls336.proto setZONE(4,10) L0 0")
25530  field(SDIS, "$(P):LS01:DISABLE")
25531  field(FLNK, "$(P):LS01:Z10:ALL4.PROC")
25532 }
25533 
25534 
25535 
25536 
25537 
25538 
25539 
25540 
25541 
25542 
25543 record(mbbi, "$(P):LS01:Z10:RANGE4") {
25544  field(ZRST, "Off")
25545  field(ONST, "On")
25546  field(TWST, "")
25547  field(THST, "")
25548  field(FRST, "")
25549  field(FVST, "")
25550 }
25551 
25552 record(mbbo, "$(P):LS01:Z10:RANGE_S4") {
25553  field(ZRST, "Off")
25554  field(ONST, "On")
25555  field(TWST, "")
25556  field(THST, "")
25557  field(FRST, "")
25558  field(FVST, "")
25559 }
25560 
25561 
25562 
25563 
25564 
25565 ################################################################
25566 # Records dealing with alarm handling
25567 
25568 ##
25569 ## Disable top level alarm handling
25570 ##
25571 record(bo, "$(P):LS01:DISABLE_ALARM") {
25572  field(DESC, "Disable Alarms")
25573  field(PINI, "YES")
25574  field(VAL, "0")
25575  field(OMSL, "supervisory")
25576  field(ZNAM, "Alarm Enabled")
25577  field(ONAM, "Alarm Disabled")
25578  field(ZSV, "NO_ALARM")
25579  field(OSV, "MINOR")
25580  field(FLNK, "$(P):LS01:ALARM_SUMMARY_CALC")
25581  info(autosaveFields, "VAL")
25582 }
25583 
25584 #record(bo, "$(P):LS01:DISABLE_ALARM_CALC") {
25585 # field(DESC, "Disable Alarms Calc")
25586 # field(VAL, "1")
25587 # field(OUT, "$(P):LS01:ALARM_SUMMARY_CALC.DISA PP")
25588 # field(FLNK, "$(P):LS01:ALARM_SUMMARY_CALC2")
25589 #}
25590 
25591 ##
25592 ## If we disable the alarm handling, clear the alarm status
25593 ##
25594 record(calcout, "$(P):LS01:DISABLE_ALARM_SETZERO") {
25595  field(INPA, "$(P):LS01:DISABLE_ALARM CP")
25596  field(CALC, "A==1?0:1")
25597  field(DOPT, "Use CALC")
25598  field(OOPT, "When Zero")
25599  field(OUT, "$(P):LS01:ALARM_SUMMARY.VAL PP")
25600 }
25601 
25602 record(calc, "$(P):LS01:ALARM_SUMMARY_CALC") {
25603  field(INPA, "$(P):LS01:ALARM0_SUMMARY CP MS")
25604  field(INPB, "$(P):LS01:ALARM1_SUMMARY CP MS")
25605  field(INPC, "$(P):LS01:ALARM2_SUMMARY CP MS")
25606  field(INPD, "$(P):LS01:ALARM3_SUMMARY CP MS")
25607  field(INPE, "$(P):LS01:ALARMD2_SUMMARY CP MS")
25608  field(INPF, "$(P):LS01:ALARMD3_SUMMARY CP MS")
25609  field(INPG, "$(P):LS01:ALARMD4_SUMMARY CP MS")
25610  field(INPH, "$(P):LS01:ALARMD5_SUMMARY CP MS")
25611  field(INPI, "$(P):LS01:HTRST1_CACHE CP MS")
25612  field(INPJ, "$(P):LS01:HTRST2_CACHE CP MS")
25613  field(CALC, "A")
25614  field(FLNK, "$(P):LS01:ALARM_SUMMARY_CALC2")
25615  field(SDIS, "$(P):LS01:DISABLE_ALARM")
25616 }
25617 record(calcout, "$(P):LS01:ALARM_SUMMARY_CALC2") {
25618  field(INPA, "$(P):LS01:ALARM_SUMMARY_CALC.STAT")
25619  field(CALC, "A!=0?1:0")
25620  field(DOPT, "Use CALC")
25621  field(OOPT, "Every Time")
25622  field(OUT, "$(P):LS01:ALARM_SUMMARY PP")
25623 }
25624 
25625 ##
25626 ## Top level alarm summary record.
25627 ## This summarizes the input alarm summary record
25628 ## along with the two main output heater status records
25629 ## which are on loop 1 and 2.
25630 ##
25631 record(bi, "$(P):LS01:ALARM_SUMMARY") {
25632  field(ZNAM, "No Alarm")
25633  field(ONAM, "Alarm")
25634  field(OSV, "MAJOR")
25635  field(PINI, "YES")
25636  field(VAL, "0")
25637  info(archive, "Monitor, 00:00:01, VAL")
25638 }
25639 
25640 ##
25641 ## Generic Asyn record for reading parameters.
25642 ##
25643 record(asyn,"$(P):LS01:ASYN")
25644 {
25645  field(DTYP,"asynRecordDevice")
25646  field(PORT,"L0")
25647  field(ADDR,"0")
25648  field(OMAX,"1024")
25649  field(IMAX,"1024")
25650  field(OEOS,"\r\n")
25651  field(IEOS,"\r\n")
25652 }
record(bo,"$(P):LS01:DISABLE")
Definition: LS336.db:31
Copyright © 2013 Science and Technology Facilities Council | Generated by   doxygen 1.8.5