diff --git a/site_ansto/instrument/config/environment/hiden_xcs.sct b/site_ansto/instrument/config/environment/hiden_xcs.sct index 6a6e9f2d..88574944 100644 --- a/site_ansto/instrument/config/environment/hiden_xcs.sct +++ b/site_ansto/instrument/config/environment/hiden_xcs.sct @@ -1,8 +1,9 @@ # # Simple driver generator for the Hiden Isochema XCS vapour delivery system -# vim: ts=8 sts=2 sw=2 expandtab autoindent smartindent +# vim: ts=8 sts=2 sw=2 expandtab autoindent smartindent nocindent # driver hiden_xcs_gen = { + # driver_property douglas = clowes usecreatenode = false vendor = hiden; device = xcs; protocol = std; class = environment @@ -14,17 +15,20 @@ driver hiden_xcs_gen = { # Unnamed group has variables at device level # group = { + # group_property douglas = clowes type = float priv = user var temperature var flow1 var flow2 var flow3 + var gas_factor = { value = 1.0; } var humidity = { driveable = humidity readable = 1 read_command = '?ALL DATA' read_function = read_all_data + checkrange_function = chkrange_function value = 50 lowerlimit = 10 upperlimit = 90 @@ -35,22 +39,24 @@ driver hiden_xcs_gen = { # The named group is at the device level, variables below that # group analog = { + # group_property 'data' = true type = float; priv = user; readable = 1; read_function = read_sixteen; - var ain0 = { read_command = '?AIN,0'; }; - var ain1 = { read_command = '?AIN,1'; }; - var ain2 = { read_command = '?AIN,2'; }; - var ain8 = { read_command = '?AIN,8'; }; - var ain9 = { read_command = '?AIN,9'; }; - var ain12 = { read_command = '?AIN,12'; }; + property base = 0; # applies to all following vars + var pv1 = { read_command = '?AIN,0'; property span = 500; }; # ain0 + var pv2 = { read_command = '?AIN,1'; property span = 500; }; # ain1 + var pv3 = { read_command = '?AIN,2'; property span = 500; }; # ain2 + var rhtemp = { read_command = '?AIN,8'; property span = 100; }; # ain8 + var rhsense = { read_command = '?AIN,9'; property span = 100; }; # ain9 + var ansto_temp = { read_command = '?AIN,12'; property span = 100; }; # ain12 writeable = 1; read_function = read_twelve; write_function = write_twelve; - var aout0 = { read_command = '?AOUT,0'; write_command = '!AOUT,0,'; } - var aout1 = { read_command = '?AOUT,1'; write_command = '!AOUT,1,'; } - var aout2 = { read_command = '?AOUT,2'; write_command = '!AOUT,2,'; } + var sp1 = { read_command = '?AOUT,0'; write_command = '!AOUT,0,'; property span = 500; } # aout0 + var sp2 = { read_command = '?AOUT,1'; write_command = '!AOUT,1,'; property span = 500; } # aout1 + var sp3 = { read_command = '?AOUT,2'; write_command = '!AOUT,2,'; property span = 500; } # aout2 }; group digital = { type = int; @@ -59,7 +65,13 @@ driver hiden_xcs_gen = { writeable = 1; read_function = read_digital; write_Function = write_digital; - var dout2 = { read_command = '?DOUT,2'; write_command = '!DOUT,2,'; allowed = '0,1'; readable = 5} + var dout2 = { + read_command = '?DOUT,2'; + write_command = '!DOUT,2,'; + allowed = '0,1'; + readable = 5; + # property junk = junk; + } } # @@ -82,7 +94,17 @@ driver hiden_xcs_gen = { @ if { [string equal -nocase -length 5 "${data}" "AOUT ="] } { @ set result [scan "${data}" "AOUT = %d OK" val] @ if { ${result} == 1 } { -@ set data [expr (100.0 * ${val}) / 4095.0] +@ if { [hpropexists [sct] base] } { +@ set base [sct base] +@ } else { +@ set base 0.0 +@ } +@ if { [hpropexists [sct] span] } { +@ set span [sct span] +@ } else { +@ set span 500.0 +@ } +@ set data [expr (${span} * (${val} - ${base})) / 4095.0] @ } else { @ sct geterror "Syntax (Result=${result}) error in: '${data}'" @ } @@ -94,7 +116,17 @@ driver hiden_xcs_gen = { @ if { [string equal -nocase -length 5 "${data}" "AIN ="] } { @ set result [scan "${data}" "AIN = %d OK" val] @ if { ${result} == 1 } { -@ set data [expr (100.0 * ${val}) / 65535.0] +@ if { [hpropexists [sct] base] } { +@ set base [sct base] +@ } else { +@ set base 0.0 +@ } +@ if { [hpropexists [sct] span] } { +@ set span [sct span] +@ } else { +@ set span 500.0 +@ } +@ set data [expr (${span} * (${val} - ${base})) / 65535.0] @ } else { @ sct geterror "Syntax error (Result=${result}) in: '${data}'" @ } @@ -104,13 +136,13 @@ driver hiden_xcs_gen = { } code read_function read_all_data = { @ if { [string equal -nocase -length 2 "${data}" "A "] } { -@ set lust [split [string range "${data}" 2 end-3] ','] -@ if { [llength ${lust}] == 8 } { -@ set data [expr [lindex ${lust} 0]] -@ hupdate ${tc_root}/temperature [expr [lindex ${lust} 1]] -@ hupdate ${tc_root}/flow1 [expr [lindex ${lust} 3]] -@ hupdate ${tc_root}/flow2 [expr [lindex ${lust} 4]] -@ hupdate ${tc_root}/flow3 [expr [lindex ${lust} 5]] +@ set data_list [split [string range "${data}" 2 end-3] ','] +@ if { [llength ${data_list}] == 8 } { +@ set data [expr [lindex ${data_list} 0]] +@ hupdate ${tc_root}/temperature [expr [lindex ${data_list} 1]] +@ hupdate ${tc_root}/flow1 [expr [lindex ${data_list} 3] / [hval ${tc_root}/gas_factor]] +@ hupdate ${tc_root}/flow2 [expr [lindex ${data_list} 4] / [hval ${tc_root}/gas_factor]] +@ hupdate ${tc_root}/flow3 [expr [lindex ${data_list} 5] / [hval ${tc_root}/gas_factor]] @ } else { @ sct geterror "Syntax error (Result=${result}) in: '${data}'" @ } @@ -121,7 +153,17 @@ driver hiden_xcs_gen = { code write_function write_digital = { } code write_function write_twelve = { -@ set par [expr int(4095.0 * ${par} / 100.0)] +@ if { [hpropexists [sct] base] } { +@ set base [sct base] +@ } else { +@ set base 0.0 +@ } +@ if { [hpropexists [sct] span] } { +@ set span [sct span] +@ } else { +@ set span 500.0 +@ } +@ set par [expr int(${base} + (4095.0 * ${par} / ${SPAN}))] @ set cmd "${cmd_str}${par}" } # @@ -129,4 +171,7 @@ driver hiden_xcs_gen = { # code mkDriver = { } + code chkrange_function = { + @ # hooked + } };