Add base/span properties and a gas factor calculation

This commit is contained in:
Douglas Clowes
2014-02-07 11:52:04 +11:00
parent 7f99daaf05
commit 99b5b92565

View File

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