From 91b7c0b6eb4c208c75a0fe97e065ca252e05f117 Mon Sep 17 00:00:00 2001 From: Douglas Clowes Date: Fri, 3 Oct 2014 17:43:05 +1000 Subject: [PATCH] Reasonably working Knauer pump driver --- .../config/environment/knauer_pump.sct | 179 +-- .../config/environment/sct_knauer_pump.tcl | 1195 +++-------------- 2 files changed, 192 insertions(+), 1182 deletions(-) diff --git a/site_ansto/instrument/config/environment/knauer_pump.sct b/site_ansto/instrument/config/environment/knauer_pump.sct index fbe377bd..63a616f5 100644 --- a/site_ansto/instrument/config/environment/knauer_pump.sct +++ b/site_ansto/instrument/config/environment/knauer_pump.sct @@ -39,21 +39,20 @@ driver knauer_pump = { readable = 1; read_command = ' '; fetch_function = volume_fetch; -#checkrange_function = volume_reject; property 'units' = 'mL'; } var setp = { type = float; writeable = 1; write_command = ' '; - write_function = pump_write; + write_function = volume_write; driveable = pump/volume/pval; - checkstatus_function = pump_checkstatus; - halt_function = pump_halt; + checkstatus_function = volume_checkstatus; + halt_function = volume_halt; lowerlimit = 0; upperlimit = 100; tolerance = 0.01; readable = 1; read_command = ' '; - fetch_function = pump_fetch; + fetch_function = volume_fsm; property 'units' = 'mL'; property this_state = 0; } @@ -81,84 +80,12 @@ driver knauer_pump = { type = float; value = 1.0; writeable = 1; write_command = ' '; write_function = flow_write; - lowerlimit = 0; upperlimit = 10; + lowerlimit = 0; upperlimit = 9.999; property 'units' = 'mL/min'; } } } - group grp_stuff = { - readable = 600; - type = text; - data = false; control = false; nxsave = false; - var an_out = { read_command = 'AN_OUT?'; } - var boardinfo = { read_command = 'BOARDINFO?'; } - var config = { read_command = 'CONFIG?'; } - var cprofinfo = { read_command = 'CPROFINFO?'; } - var dout = { read_command = 'DOUT?'; } - var error = { read_command = 'ERROR?'; } - var errors = { read_command = 'ERRORS?'; } - var flushpmp = { read_command = 'FLUSHPMP?'; } - var head = { read_command = 'HEAD?'; } - var head_par = { read_command = 'HEAD_PAR?'; } - var identify = { read_command = 'IDENTIFY?'; } - var lpg = { read_command = 'LPG?'; } - var oem = { read_command = 'OEM?'; } - var opt = { read_command = 'OPT?'; } - var plim = { read_command = 'PLIM?'; } - var pressure = { read_command = 'PRESSURE?'; } - var prfastacq = { read_command = 'PRFASTACQ?'; } - var purge = { read_command = 'PURGE?'; } - var remote = { read_command = 'REMOTE?'; } - var rfid = { read_command = 'RFID?'; } - var service = { read_command = 'SERVICE?'; } - var sysinfo = { read_command = 'SYSINFO?'; } - var 'units' = { read_command = 'UNITS?'; } - var valves = { read_command = 'VALVES?'; } - } - group grp_glp = { - type = text; - readable = 1; - fetch_function = fetch_from_glp; - var board_time = { read_command = '0'; } - var motor_time = { read_command = '1'; } - var head_count = { read_command = '3'; } - var head_time = { read_command = '4'; } - var head_volm = { read_command = '5'; } - var head_voln = { read_command = '6'; } - var head_pwrhi = { read_command = '7'; } - var head_pwrlo = { read_command = '8'; } - var pump_revs = { read_command = '9'; } - var pump_volm = { read_command = '10'; } - var pump_voln = { read_command = '11'; } - var pump_pwrhi = { read_command = '12'; } - var pump_pwrlo = { read_command = '13'; } - } - group grp_status = { - type = text; - readable = 1; - fetch_function = fetch_from_status; - var state = { read_command = '1'; } - var cur_error = { read_command = '2'; } - var cur_run_time = { read_command = '3'; } - var flow_rate = { read_command = '4'; } - var lpg_0 = { read_command = '5'; } - var lpg_1 = { read_command = '6'; } - var lpg_2 = { read_command = '7'; } - var lpg_3 = { read_command = '8'; } - var evt_0 = { read_command = '9'; } - var evt_1 = { read_command = '10'; } - var evt_2 = { read_command = '11'; } - var evt_3 = { read_command = '12'; } - var evt_4 = { read_command = '13'; } - var evt_5 = { read_command = '14'; } - var evt_6 = { read_command = '15'; } - var evt_7 = { read_command = '16'; } - var cur_pres = { read_command = '17'; } - var start_in = { read_command = '18'; } - var error_in = { read_command = '19'; } - } - # # Ensure the pump starts up in REMOTE mode # @@ -177,18 +104,6 @@ driver knauer_pump = { } %%} - code fetch_from_glp = {%% - set index ${cmd_str} - set data [hgetpropval ${tc_root}/dummy/glp real_data] - set dlist [split ${data} ","] - if { [llength ${dlist}] > ${index} } { - sct result [lindex ${dlist} ${index}] - } else { - sct result "" - } - set cmd "@@NOSEND@@" - %%} - # # These functions handle the real_data returned by the pump for the STATUS? command # @@ -198,18 +113,6 @@ driver knauer_pump = { set data "Hidden in real_data property" %%} - code fetch_from_status = {%% - set index ${cmd_str} - set data [hgetpropval ${tc_root}/dummy/status real_data] - set dlist [split ${data} ","] - if { [llength ${dlist}] > ${index} } { - sct result [lindex ${dlist} ${index}] - } else { - sct result "" - } - set cmd "@@NOSEND@@" - %%} - # # Decode the status from the real_data to PUMPING if it is pumping else IDLE # @@ -250,6 +153,7 @@ driver knauer_pump = { "SYS_ST_HOLD" \ "SYS_ST_PURGE" \ "SYS_ST_STANDBY" \ + "SYS_ST_SEVEN" \ "SYS_ST_FAILED" \ "SYS_ST_RUNATEND" \ ] @@ -357,8 +261,7 @@ driver knauer_pump = { set cmd "@@NOSEND@@" %%} -########## - code pump_write = {%% + code volume_write = {%% hsetprop ${tc_root}/[sct driveable] base_volume [hgetpropval ${tc_root}/[sct driveable] raw_volume] hset ${tc_root}/[sct driveable] 0.0 set cmd "REMOTE" @@ -373,7 +276,7 @@ driver knauer_pump = { } %%} - code pump_fetch = {%% + code volume_fsm = {%% if { [sct this_state] > 0 } { set flow_tgt [expr {int(1000.0 * [hval ${tc_root}/pump/flow/setp])}] set ratio_tgt [join [split [hval ${tc_root}/pump/ratio/setp] /] ,] @@ -396,6 +299,12 @@ driver knauer_pump = { } elseif { [sct this_state] == 5 } { set cmd "START:1,0" sct this_state 0 + } elseif { [sct this_state] == 91 } { + set cmd "STOP:1,0" + sct this_state 92 + } elseif { [sct this_state] == 92 } { + set cmd "STOP:0,0" + sct this_state 0 } else { sct this_state 0 set cmd "@@NOSEND@@" @@ -405,15 +314,13 @@ driver knauer_pump = { set cmd "@@NOSEND@@" set nextState idle if { [hpropexists [sct] pumping] && [sct pumping] } { - if { [hpropexists [sct] driving] && [sct driving] } { - pump_checkstatus "${tc_root}" - } set new_value [hval ${tc_root}/pump/status] set old_value [sct oldval] if {${new_value} != ${old_value}} { sct oldval ${new_value} if {${old_value} == "PUMPING" && ${new_value} == "IDLE"} { - set cmd "STOP" + set cmd "STOP:0,0" + sct this_state 91 set nextState noResponse sct result "" sct driving 0 @@ -424,59 +331,11 @@ driver knauer_pump = { } %%} - code pump_halt = {%% - set flow_tgt 0 - set ratio_tgt [join [split [hval ${tc_root}/pump/ratio_sp] /] ,] - set cmd "STOP" - sct send ${cmd} - %%} - ########## - code volume_write = {%% - hsetprop ${tc_root}/[sct driveable] base_volume [hgetpropval ${tc_root}/[sct driveable] raw_volume] - hset ${tc_root}/[sct driveable] 0.0 - set flow_tgt [expr {int(1000.0 * [hval ${tc_root}/pump/flow_sp])}] - set ratio_tgt [join [split [hval ${tc_root}/pump/ratio_sp] /] ,] - set cmd "RAMP:0,${flow_tgt},${ratio_tgt},0,0,0,0,0,0,0,0,3" - sct pumping 1 - set data ${par} - if { ${data} != [sct oldval] } { - debug_log ${tc_root} 1 "[sct] changed to new:${data}, from old:[sct oldval]" - sct oldval ${data} - sct update ${data} - sct utime readtime - } - %%} - - code volume_checkpumping = {%% - set cmd "@@NOSEND@@" - set nextState idle - if { [hpropexists [sct] pumping] && [sct pumping] } { - if { [hpropexists [sct] driving] && [sct driving] } { - volume_checkstatus "${tc_root}" - } - set sp "[sct target]" - set pv "[hval ${tc_root}/[sct driveable]]" - if { (${sp} - ${pv}) <= [sct tolerance] } { - set flow_tgt 0 - set ratio_tgt [join [split [hval ${tc_root}/pump/ratio_sp] /] ,] - set cmd "RAMP:0,${flow_tgt},${ratio_tgt},0,0,0,0,0,0,0,0,2" - set nextState noResponse - sct result "" - sct driving 0 - sct pumping 0 - } - } - %%} - code volume_halt = {%% - set flow_tgt 0 - set ratio_tgt [join [split [hval ${tc_root}/pump/ratio_sp] /] ,] - set cmd "RAMP:0,${flow_tgt},${ratio_tgt},0,0,0,0,0,0,0,0,2" + set cmd "STOP:0,0" + sct this_state 91 + debug_log ${tc_root} 1 "volume_halt sct send ${cmd}" sct send ${cmd} %%} - code volume_reject = {%% - sct geterror "cannot use hset on [sct]" - error "[sct geterror]" - %%} } diff --git a/site_ansto/instrument/config/environment/sct_knauer_pump.tcl b/site_ansto/instrument/config/environment/sct_knauer_pump.tcl index a9c259a9..32f1d88c 100644 --- a/site_ansto/instrument/config/environment/sct_knauer_pump.tcl +++ b/site_ansto/instrument/config/environment/sct_knauer_pump.tcl @@ -80,70 +80,6 @@ proc ::scobj::knauer_pump::checkrange {tc_root} { handle_exception ${catch_status} ${catch_message} } -# function to request the read of a parameter on a device -proc ::scobj::knauer_pump::fetch_from_glp {tc_root nextState cmd_str} { - set catch_status [ catch { - debug_log ${tc_root} 1 "fetch_from_glp tc_root=${tc_root} sct=[sct] cmd=${cmd_str}" - if { [hpropexists [sct] geterror] } { - hdelprop [sct] geterror - } - set cmd "${cmd_str}" -# fetch_from_glp hook code starts - set index ${cmd_str} - set data [hgetpropval ${tc_root}/dummy/glp real_data] - set dlist [split ${data} ","] - if { [llength ${dlist}] > ${index} } { - sct result [lindex ${dlist} ${index}] - } else { - sct result "" - } - set cmd "@@NOSEND@@" -# fetch_from_glp hook code ends - if { [hpropexists [sct] geterror] } { - debug_log ${tc_root} 9 "[sct] error: [sct geterror]" - error "[sct geterror]" - } - debug_log ${tc_root} 1 "fetch_from_glp sct send ${cmd}" - if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} { - sct send "${cmd}" - } - return ${nextState} - } catch_message ] - handle_exception ${catch_status} ${catch_message} -} - -# function to request the read of a parameter on a device -proc ::scobj::knauer_pump::fetch_from_status {tc_root nextState cmd_str} { - set catch_status [ catch { - debug_log ${tc_root} 1 "fetch_from_status tc_root=${tc_root} sct=[sct] cmd=${cmd_str}" - if { [hpropexists [sct] geterror] } { - hdelprop [sct] geterror - } - set cmd "${cmd_str}" -# fetch_from_status hook code starts - set index ${cmd_str} - set data [hgetpropval ${tc_root}/dummy/status real_data] - set dlist [split ${data} ","] - if { [llength ${dlist}] > ${index} } { - sct result [lindex ${dlist} ${index}] - } else { - sct result "" - } - set cmd "@@NOSEND@@" -# fetch_from_status hook code ends - if { [hpropexists [sct] geterror] } { - debug_log ${tc_root} 9 "[sct] error: [sct geterror]" - error "[sct geterror]" - } - debug_log ${tc_root} 1 "fetch_from_status sct send ${cmd}" - if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} { - sct send "${cmd}" - } - return ${nextState} - } catch_message ] - handle_exception ${catch_status} ${catch_message} -} - # function to request the read of a parameter on a device proc ::scobj::knauer_pump::flow_fetch {tc_root nextState cmd_str} { set catch_status [ catch { @@ -243,169 +179,6 @@ proc ::scobj::knauer_pump::noResponse {tc_root} { handle_exception ${catch_status} ${catch_message} } -# checkstatus function for driveable interface -proc ::scobj::knauer_pump::pump_checkstatus {tc_root} { - set catch_status [ catch { -# pump_checkstatus hook code goes here - if {[sct driving]} { - set sp "[sct target]" - set pv "[hval ${tc_root}/[sct driveable]]" - if { abs(${pv} - ${sp}) <= [sct tolerance] } { - if { [hpropexists [sct] settle_time] } { - if { [hpropexists [sct] settle_time_start] } { - if { [sct utime] - [sct settle_time_start] >= [sct settle_time]} { - sct driving 0 - return "idle" - } - return "busy" - } else { - sct utime settle_time_start - return "busy" - } - } - sct driving 0 - return "idle" - } - if { [hpropexists [sct] settle_time_start] } { - hdelprop [sct] settle_time_start - } - return "busy" - } else { - return "idle" - } - } catch_message ] - handle_exception ${catch_status} ${catch_message} -} - -# function to request the read of a parameter on a device -proc ::scobj::knauer_pump::pump_fetch {tc_root nextState cmd_str} { - set catch_status [ catch { - debug_log ${tc_root} 1 "pump_fetch tc_root=${tc_root} sct=[sct] cmd=${cmd_str}" - if { [hpropexists [sct] geterror] } { - hdelprop [sct] geterror - } - set cmd "${cmd_str}" -# pump_fetch hook code starts - if { [sct this_state] > 0 } { - set flow_tgt [expr {int(1000.0 * [hval ${tc_root}/pump/flow/setp])}] - set ratio_tgt [join [split [hval ${tc_root}/pump/ratio/setp] /] ,] - set time_tgt [expr {int(60000.0 * 1000.0 * [sct target] / ${flow_tgt})}] - set time_1 [expr {${time_tgt} - 500}] - set time_2 [expr {${time_tgt} + 500}] - set nextState noResponse - if { [sct this_state] == 1 } { - set cmd "TT_LOAD:1" - sct this_state [expr {[sct this_state] + 1}] - } elseif { [sct this_state] == 2 } { - set cmd "TT_SET:0,0,${flow_tgt},${ratio_tgt},0,0,0,0,0,0,0,0" - sct this_state [expr {[sct this_state] + 1}] - } elseif { [sct this_state] == 3 } { - set cmd "TT_SET:1,${time_1},${flow_tgt},${ratio_tgt},0,0,0,0,0,0,0,0" - sct this_state [expr {[sct this_state] + 1}] - } elseif { [sct this_state] == 4 } { - set cmd "TT_SET:2,${time_2},0,${ratio_tgt},0,0,0,0,0,0,0,0" - sct this_state [expr {[sct this_state] + 1}] - } elseif { [sct this_state] == 5 } { - set cmd "START:1,0" - sct this_state 0 - } else { - sct this_state 0 - set cmd "@@NOSEND@@" - set nextState idle - } - } else { - set cmd "@@NOSEND@@" - set nextState idle - if { [hpropexists [sct] pumping] && [sct pumping] } { - if { [hpropexists [sct] driving] && [sct driving] } { - pump_checkstatus "${tc_root}" - } - set new_value [hval ${tc_root}/pump/status] - set old_value [sct oldval] - if {${new_value} != ${old_value}} { - sct oldval ${new_value} - if {${old_value} == "PUMPING" && ${new_value} == "IDLE"} { - set cmd "STOP" - set nextState noResponse - sct result "" - sct driving 0 - sct pumping 0 - } - } - } - } -# pump_fetch hook code ends - if { [hpropexists [sct] geterror] } { - debug_log ${tc_root} 9 "[sct] error: [sct geterror]" - error "[sct geterror]" - } - debug_log ${tc_root} 1 "pump_fetch sct send ${cmd}" - if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} { - sct send "${cmd}" - } - return ${nextState} - } catch_message ] - handle_exception ${catch_status} ${catch_message} -} - -# halt function for driveable interface -proc ::scobj::knauer_pump::pump_halt {tc_root} { - set catch_status [ catch { - debug_log ${tc_root} 1 "pump_halt tc_root=${tc_root} sct=[sct] driving=[sct driving]" - ### TODO hset [sct] [hval [sct]] -# pump_halt hook code starts - set flow_tgt 0 - set ratio_tgt [join [split [hval ${tc_root}/pump/ratio_sp] /] ,] - set cmd "STOP" - sct send ${cmd} -# pump_halt hook code ends - sct driving 0 - return "idle" - } catch_message ] - handle_exception ${catch_status} ${catch_message} -} - -# function to write a parameter value on a device -proc ::scobj::knauer_pump::pump_write {tc_root nextState cmd_str} { - set catch_status [ catch { - debug_log ${tc_root} 1 "pump_write tc_root=${tc_root} sct=[sct] cmd=${cmd_str}" - if { [hpropexists [sct] geterror] } { - hdelprop [sct] geterror - } - set par [sct target] - set cmd "${cmd_str}${par}" -# pump_write hook code starts - hsetprop ${tc_root}/[sct driveable] base_volume [hgetpropval ${tc_root}/[sct driveable] raw_volume] - hset ${tc_root}/[sct driveable] 0.0 - set cmd "REMOTE" - sct this_state 1 - sct pumping 1 - set data ${par} - if { ${data} != [sct oldval] } { - debug_log ${tc_root} 1 "[sct] changed to new:${data}, from old:[sct oldval]" - sct oldval ${data} - sct update ${data} - sct utime readtime - } -# pump_write hook code ends - if { [hpropexists [sct] geterror] } { - debug_log ${tc_root} 9 "[sct] error: [sct geterror]" - error "[sct geterror]" - } - if { [hpropexists [sct] driving] } { - if { [hpropexists [sct] writestatus] && [sct writestatus] == "start" } { - sct driving 1 - } - } - debug_log ${tc_root} 1 "pump_write sct send ${cmd}" - if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} { - sct send "${cmd}" - } - return ${nextState} - } catch_message ] - handle_exception ${catch_status} ${catch_message} -} - # check function for hset change proc ::scobj::knauer_pump::ratio_check {tc_root} { set catch_status [ catch { @@ -730,6 +503,7 @@ proc ::scobj::knauer_pump::state_fetch {tc_root nextState cmd_str} { "SYS_ST_HOLD" \ "SYS_ST_PURGE" \ "SYS_ST_STANDBY" \ + "SYS_ST_SEVEN" \ "SYS_ST_FAILED" \ "SYS_ST_RUNATEND" \ ] @@ -781,6 +555,40 @@ proc ::scobj::knauer_pump::status_fetch {tc_root nextState cmd_str} { handle_exception ${catch_status} ${catch_message} } +# checkstatus function for driveable interface +proc ::scobj::knauer_pump::volume_checkstatus {tc_root} { + set catch_status [ catch { +# volume_checkstatus hook code goes here + if {[sct driving]} { + set sp "[sct target]" + set pv "[hval ${tc_root}/[sct driveable]]" + if { abs(${pv} - ${sp}) <= [sct tolerance] } { + if { [hpropexists [sct] settle_time] } { + if { [hpropexists [sct] settle_time_start] } { + if { [sct utime] - [sct settle_time_start] >= [sct settle_time]} { + sct driving 0 + return "idle" + } + return "busy" + } else { + sct utime settle_time_start + return "busy" + } + } + sct driving 0 + return "idle" + } + if { [hpropexists [sct] settle_time_start] } { + hdelprop [sct] settle_time_start + } + return "busy" + } else { + return "idle" + } + } catch_message ] + handle_exception ${catch_status} ${catch_message} +} + # function to request the read of a parameter on a device proc ::scobj::knauer_pump::volume_fetch {tc_root nextState cmd_str} { set catch_status [ catch { @@ -821,6 +629,139 @@ proc ::scobj::knauer_pump::volume_fetch {tc_root nextState cmd_str} { handle_exception ${catch_status} ${catch_message} } +# function to request the read of a parameter on a device +proc ::scobj::knauer_pump::volume_fsm {tc_root nextState cmd_str} { + set catch_status [ catch { + debug_log ${tc_root} 1 "volume_fsm tc_root=${tc_root} sct=[sct] cmd=${cmd_str}" + if { [hpropexists [sct] geterror] } { + hdelprop [sct] geterror + } + set cmd "${cmd_str}" +# volume_fsm hook code starts + if { [sct this_state] > 0 } { + set flow_tgt [expr {int(1000.0 * [hval ${tc_root}/pump/flow/setp])}] + set ratio_tgt [join [split [hval ${tc_root}/pump/ratio/setp] /] ,] + set time_tgt [expr {int(60000.0 * 1000.0 * [sct target] / ${flow_tgt})}] + set time_1 [expr {${time_tgt} - 500}] + set time_2 [expr {${time_tgt} + 500}] + set nextState noResponse + if { [sct this_state] == 1 } { + set cmd "TT_LOAD:1" + sct this_state [expr {[sct this_state] + 1}] + } elseif { [sct this_state] == 2 } { + set cmd "TT_SET:0,0,${flow_tgt},${ratio_tgt},0,0,0,0,0,0,0,0" + sct this_state [expr {[sct this_state] + 1}] + } elseif { [sct this_state] == 3 } { + set cmd "TT_SET:1,${time_1},${flow_tgt},${ratio_tgt},0,0,0,0,0,0,0,0" + sct this_state [expr {[sct this_state] + 1}] + } elseif { [sct this_state] == 4 } { + set cmd "TT_SET:2,${time_2},0,${ratio_tgt},0,0,0,0,0,0,0,0" + sct this_state [expr {[sct this_state] + 1}] + } elseif { [sct this_state] == 5 } { + set cmd "START:1,0" + sct this_state 0 + } elseif { [sct this_state] == 91 } { + set cmd "STOP:1,0" + sct this_state 92 + } elseif { [sct this_state] == 92 } { + set cmd "STOP:0,0" + sct this_state 0 + } else { + sct this_state 0 + set cmd "@@NOSEND@@" + set nextState idle + } + } else { + set cmd "@@NOSEND@@" + set nextState idle + if { [hpropexists [sct] pumping] && [sct pumping] } { + set new_value [hval ${tc_root}/pump/status] + set old_value [sct oldval] + if {${new_value} != ${old_value}} { + sct oldval ${new_value} + if {${old_value} == "PUMPING" && ${new_value} == "IDLE"} { + set cmd "STOP:0,0" + sct this_state 91 + set nextState noResponse + sct result "" + sct driving 0 + sct pumping 0 + } + } + } + } +# volume_fsm hook code ends + if { [hpropexists [sct] geterror] } { + debug_log ${tc_root} 9 "[sct] error: [sct geterror]" + error "[sct geterror]" + } + debug_log ${tc_root} 1 "volume_fsm sct send ${cmd}" + if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} { + sct send "${cmd}" + } + return ${nextState} + } catch_message ] + handle_exception ${catch_status} ${catch_message} +} + +# halt function for driveable interface +proc ::scobj::knauer_pump::volume_halt {tc_root} { + set catch_status [ catch { + debug_log ${tc_root} 1 "volume_halt tc_root=${tc_root} sct=[sct] driving=[sct driving]" + ### TODO hset [sct] [hval [sct]] +# volume_halt hook code starts + set cmd "STOP:0,0" + sct this_state 91 + debug_log ${tc_root} 1 "volume_halt sct send ${cmd}" + sct send ${cmd} +# volume_halt hook code ends + sct driving 0 + return "idle" + } catch_message ] + handle_exception ${catch_status} ${catch_message} +} + +# function to write a parameter value on a device +proc ::scobj::knauer_pump::volume_write {tc_root nextState cmd_str} { + set catch_status [ catch { + debug_log ${tc_root} 1 "volume_write tc_root=${tc_root} sct=[sct] cmd=${cmd_str}" + if { [hpropexists [sct] geterror] } { + hdelprop [sct] geterror + } + set par [sct target] + set cmd "${cmd_str}${par}" +# volume_write hook code starts + hsetprop ${tc_root}/[sct driveable] base_volume [hgetpropval ${tc_root}/[sct driveable] raw_volume] + hset ${tc_root}/[sct driveable] 0.0 + set cmd "REMOTE" + sct this_state 1 + sct pumping 1 + set data ${par} + if { ${data} != [sct oldval] } { + debug_log ${tc_root} 1 "[sct] changed to new:${data}, from old:[sct oldval]" + sct oldval ${data} + sct update ${data} + sct utime readtime + } +# volume_write hook code ends + if { [hpropexists [sct] geterror] } { + debug_log ${tc_root} 9 "[sct] error: [sct geterror]" + error "[sct geterror]" + } + if { [hpropexists [sct] driving] } { + if { [hpropexists [sct] writestatus] && [sct writestatus] == "start" } { + sct driving 1 + } + } + debug_log ${tc_root} 1 "volume_write sct send ${cmd}" + if {![string equal -nocase -length 10 ${cmd} "@@NOSEND@@"]} { + sct send "${cmd}" + } + return ${nextState} + } catch_message ] + handle_exception ${catch_status} ${catch_message} +} + proc ::scobj::knauer_pump::mkDriver { sct_controller name device_class simulation_flag ip_address tcp_port } { ::scobj::knauer_pump::sics_log 9 "::scobj::knauer_pump::mkDriver ${sct_controller} ${name} ${device_class} ${simulation_flag} ${ip_address} ${tcp_port}" set ns "[namespace current]" @@ -871,796 +812,6 @@ proc ::scobj::knauer_pump::mkDriver { sct_controller name device_class simulatio ::scobj::knauer_pump::sics_log 9 "simulation_flag=${simulation_flag} => No poll/write for knauer_pump" } - hfactory ${scobj_hpath}/grp_glp plain spy none - hsetprop ${scobj_hpath}/grp_glp data "true" - hsetprop ${scobj_hpath}/grp_glp klass "@none" - hsetprop ${scobj_hpath}/grp_glp type "part" - - hfactory ${scobj_hpath}/grp_glp/board_time plain user text - hsetprop ${scobj_hpath}/grp_glp/board_time read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {0} - hsetprop ${scobj_hpath}/grp_glp/board_time rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/board_time control true - hsetprop ${scobj_hpath}/grp_glp/board_time data true - hsetprop ${scobj_hpath}/grp_glp/board_time mutable true - hsetprop ${scobj_hpath}/grp_glp/board_time nxsave true - hsetprop ${scobj_hpath}/grp_glp/board_time oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/board_time klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/board_time sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/board_time type "part" - hsetprop ${scobj_hpath}/grp_glp/board_time nxalias "${name}_grp_glp_board_time" - - hfactory ${scobj_hpath}/grp_glp/head_count plain user text - hsetprop ${scobj_hpath}/grp_glp/head_count read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {3} - hsetprop ${scobj_hpath}/grp_glp/head_count rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/head_count control true - hsetprop ${scobj_hpath}/grp_glp/head_count data true - hsetprop ${scobj_hpath}/grp_glp/head_count mutable true - hsetprop ${scobj_hpath}/grp_glp/head_count nxsave true - hsetprop ${scobj_hpath}/grp_glp/head_count oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/head_count klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/head_count sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/head_count type "part" - hsetprop ${scobj_hpath}/grp_glp/head_count nxalias "${name}_grp_glp_head_count" - - hfactory ${scobj_hpath}/grp_glp/head_pwrhi plain user text - hsetprop ${scobj_hpath}/grp_glp/head_pwrhi read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {7} - hsetprop ${scobj_hpath}/grp_glp/head_pwrhi rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/head_pwrhi control true - hsetprop ${scobj_hpath}/grp_glp/head_pwrhi data true - hsetprop ${scobj_hpath}/grp_glp/head_pwrhi mutable true - hsetprop ${scobj_hpath}/grp_glp/head_pwrhi nxsave true - hsetprop ${scobj_hpath}/grp_glp/head_pwrhi oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/head_pwrhi klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/head_pwrhi sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/head_pwrhi type "part" - hsetprop ${scobj_hpath}/grp_glp/head_pwrhi nxalias "${name}_grp_glp_head_pwrhi" - - hfactory ${scobj_hpath}/grp_glp/head_pwrlo plain user text - hsetprop ${scobj_hpath}/grp_glp/head_pwrlo read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {8} - hsetprop ${scobj_hpath}/grp_glp/head_pwrlo rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/head_pwrlo control true - hsetprop ${scobj_hpath}/grp_glp/head_pwrlo data true - hsetprop ${scobj_hpath}/grp_glp/head_pwrlo mutable true - hsetprop ${scobj_hpath}/grp_glp/head_pwrlo nxsave true - hsetprop ${scobj_hpath}/grp_glp/head_pwrlo oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/head_pwrlo klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/head_pwrlo sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/head_pwrlo type "part" - hsetprop ${scobj_hpath}/grp_glp/head_pwrlo nxalias "${name}_grp_glp_head_pwrlo" - - hfactory ${scobj_hpath}/grp_glp/head_time plain user text - hsetprop ${scobj_hpath}/grp_glp/head_time read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {4} - hsetprop ${scobj_hpath}/grp_glp/head_time rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/head_time control true - hsetprop ${scobj_hpath}/grp_glp/head_time data true - hsetprop ${scobj_hpath}/grp_glp/head_time mutable true - hsetprop ${scobj_hpath}/grp_glp/head_time nxsave true - hsetprop ${scobj_hpath}/grp_glp/head_time oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/head_time klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/head_time sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/head_time type "part" - hsetprop ${scobj_hpath}/grp_glp/head_time nxalias "${name}_grp_glp_head_time" - - hfactory ${scobj_hpath}/grp_glp/head_volm plain user text - hsetprop ${scobj_hpath}/grp_glp/head_volm read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {5} - hsetprop ${scobj_hpath}/grp_glp/head_volm rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/head_volm control true - hsetprop ${scobj_hpath}/grp_glp/head_volm data true - hsetprop ${scobj_hpath}/grp_glp/head_volm mutable true - hsetprop ${scobj_hpath}/grp_glp/head_volm nxsave true - hsetprop ${scobj_hpath}/grp_glp/head_volm oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/head_volm klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/head_volm sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/head_volm type "part" - hsetprop ${scobj_hpath}/grp_glp/head_volm nxalias "${name}_grp_glp_head_volm" - - hfactory ${scobj_hpath}/grp_glp/head_voln plain user text - hsetprop ${scobj_hpath}/grp_glp/head_voln read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {6} - hsetprop ${scobj_hpath}/grp_glp/head_voln rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/head_voln control true - hsetprop ${scobj_hpath}/grp_glp/head_voln data true - hsetprop ${scobj_hpath}/grp_glp/head_voln mutable true - hsetprop ${scobj_hpath}/grp_glp/head_voln nxsave true - hsetprop ${scobj_hpath}/grp_glp/head_voln oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/head_voln klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/head_voln sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/head_voln type "part" - hsetprop ${scobj_hpath}/grp_glp/head_voln nxalias "${name}_grp_glp_head_voln" - - hfactory ${scobj_hpath}/grp_glp/motor_time plain user text - hsetprop ${scobj_hpath}/grp_glp/motor_time read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {1} - hsetprop ${scobj_hpath}/grp_glp/motor_time rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/motor_time control true - hsetprop ${scobj_hpath}/grp_glp/motor_time data true - hsetprop ${scobj_hpath}/grp_glp/motor_time mutable true - hsetprop ${scobj_hpath}/grp_glp/motor_time nxsave true - hsetprop ${scobj_hpath}/grp_glp/motor_time oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/motor_time klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/motor_time sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/motor_time type "part" - hsetprop ${scobj_hpath}/grp_glp/motor_time nxalias "${name}_grp_glp_motor_time" - - hfactory ${scobj_hpath}/grp_glp/pump_pwrhi plain user text - hsetprop ${scobj_hpath}/grp_glp/pump_pwrhi read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {12} - hsetprop ${scobj_hpath}/grp_glp/pump_pwrhi rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/pump_pwrhi control true - hsetprop ${scobj_hpath}/grp_glp/pump_pwrhi data true - hsetprop ${scobj_hpath}/grp_glp/pump_pwrhi mutable true - hsetprop ${scobj_hpath}/grp_glp/pump_pwrhi nxsave true - hsetprop ${scobj_hpath}/grp_glp/pump_pwrhi oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/pump_pwrhi klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/pump_pwrhi sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/pump_pwrhi type "part" - hsetprop ${scobj_hpath}/grp_glp/pump_pwrhi nxalias "${name}_grp_glp_pump_pwrhi" - - hfactory ${scobj_hpath}/grp_glp/pump_pwrlo plain user text - hsetprop ${scobj_hpath}/grp_glp/pump_pwrlo read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {13} - hsetprop ${scobj_hpath}/grp_glp/pump_pwrlo rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/pump_pwrlo control true - hsetprop ${scobj_hpath}/grp_glp/pump_pwrlo data true - hsetprop ${scobj_hpath}/grp_glp/pump_pwrlo mutable true - hsetprop ${scobj_hpath}/grp_glp/pump_pwrlo nxsave true - hsetprop ${scobj_hpath}/grp_glp/pump_pwrlo oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/pump_pwrlo klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/pump_pwrlo sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/pump_pwrlo type "part" - hsetprop ${scobj_hpath}/grp_glp/pump_pwrlo nxalias "${name}_grp_glp_pump_pwrlo" - - hfactory ${scobj_hpath}/grp_glp/pump_revs plain user text - hsetprop ${scobj_hpath}/grp_glp/pump_revs read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {9} - hsetprop ${scobj_hpath}/grp_glp/pump_revs rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/pump_revs control true - hsetprop ${scobj_hpath}/grp_glp/pump_revs data true - hsetprop ${scobj_hpath}/grp_glp/pump_revs mutable true - hsetprop ${scobj_hpath}/grp_glp/pump_revs nxsave true - hsetprop ${scobj_hpath}/grp_glp/pump_revs oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/pump_revs klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/pump_revs sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/pump_revs type "part" - hsetprop ${scobj_hpath}/grp_glp/pump_revs nxalias "${name}_grp_glp_pump_revs" - - hfactory ${scobj_hpath}/grp_glp/pump_volm plain user text - hsetprop ${scobj_hpath}/grp_glp/pump_volm read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {10} - hsetprop ${scobj_hpath}/grp_glp/pump_volm rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/pump_volm control true - hsetprop ${scobj_hpath}/grp_glp/pump_volm data true - hsetprop ${scobj_hpath}/grp_glp/pump_volm mutable true - hsetprop ${scobj_hpath}/grp_glp/pump_volm nxsave true - hsetprop ${scobj_hpath}/grp_glp/pump_volm oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/pump_volm klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/pump_volm sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/pump_volm type "part" - hsetprop ${scobj_hpath}/grp_glp/pump_volm nxalias "${name}_grp_glp_pump_volm" - - hfactory ${scobj_hpath}/grp_glp/pump_voln plain user text - hsetprop ${scobj_hpath}/grp_glp/pump_voln read ${ns}::fetch_from_glp ${scobj_hpath} rdValue {11} - hsetprop ${scobj_hpath}/grp_glp/pump_voln rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_glp/pump_voln control true - hsetprop ${scobj_hpath}/grp_glp/pump_voln data true - hsetprop ${scobj_hpath}/grp_glp/pump_voln mutable true - hsetprop ${scobj_hpath}/grp_glp/pump_voln nxsave true - hsetprop ${scobj_hpath}/grp_glp/pump_voln oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_glp/pump_voln klass "parameter" - hsetprop ${scobj_hpath}/grp_glp/pump_voln sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_glp/pump_voln type "part" - hsetprop ${scobj_hpath}/grp_glp/pump_voln nxalias "${name}_grp_glp_pump_voln" - - if {[string equal -nocase "${simulation_flag}" "false"]} { - ${sct_controller} poll ${scobj_hpath}/grp_glp/board_time 1 - ${sct_controller} poll ${scobj_hpath}/grp_glp/head_count 1 - ${sct_controller} poll ${scobj_hpath}/grp_glp/head_pwrhi 1 - ${sct_controller} poll ${scobj_hpath}/grp_glp/head_pwrlo 1 - ${sct_controller} poll ${scobj_hpath}/grp_glp/head_time 1 - ${sct_controller} poll ${scobj_hpath}/grp_glp/head_volm 1 - ${sct_controller} poll ${scobj_hpath}/grp_glp/head_voln 1 - ${sct_controller} poll ${scobj_hpath}/grp_glp/motor_time 1 - ${sct_controller} poll ${scobj_hpath}/grp_glp/pump_pwrhi 1 - ${sct_controller} poll ${scobj_hpath}/grp_glp/pump_pwrlo 1 - ${sct_controller} poll ${scobj_hpath}/grp_glp/pump_revs 1 - ${sct_controller} poll ${scobj_hpath}/grp_glp/pump_volm 1 - ${sct_controller} poll ${scobj_hpath}/grp_glp/pump_voln 1 - } else { - ::scobj::knauer_pump::sics_log 9 "simulation_flag=${simulation_flag} => No poll/write for knauer_pump" - } - - hfactory ${scobj_hpath}/grp_status plain spy none - hsetprop ${scobj_hpath}/grp_status data "true" - hsetprop ${scobj_hpath}/grp_status klass "@none" - hsetprop ${scobj_hpath}/grp_status type "part" - - hfactory ${scobj_hpath}/grp_status/cur_error plain user text - hsetprop ${scobj_hpath}/grp_status/cur_error read ${ns}::fetch_from_status ${scobj_hpath} rdValue {2} - hsetprop ${scobj_hpath}/grp_status/cur_error rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/cur_error control true - hsetprop ${scobj_hpath}/grp_status/cur_error data true - hsetprop ${scobj_hpath}/grp_status/cur_error mutable true - hsetprop ${scobj_hpath}/grp_status/cur_error nxsave true - hsetprop ${scobj_hpath}/grp_status/cur_error oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/cur_error klass "parameter" - hsetprop ${scobj_hpath}/grp_status/cur_error sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/cur_error type "part" - hsetprop ${scobj_hpath}/grp_status/cur_error nxalias "${name}_grp_status_cur_error" - - hfactory ${scobj_hpath}/grp_status/cur_pres plain user text - hsetprop ${scobj_hpath}/grp_status/cur_pres read ${ns}::fetch_from_status ${scobj_hpath} rdValue {17} - hsetprop ${scobj_hpath}/grp_status/cur_pres rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/cur_pres control true - hsetprop ${scobj_hpath}/grp_status/cur_pres data true - hsetprop ${scobj_hpath}/grp_status/cur_pres mutable true - hsetprop ${scobj_hpath}/grp_status/cur_pres nxsave true - hsetprop ${scobj_hpath}/grp_status/cur_pres oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/cur_pres klass "parameter" - hsetprop ${scobj_hpath}/grp_status/cur_pres sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/cur_pres type "part" - hsetprop ${scobj_hpath}/grp_status/cur_pres nxalias "${name}_grp_status_cur_pres" - - hfactory ${scobj_hpath}/grp_status/cur_run_time plain user text - hsetprop ${scobj_hpath}/grp_status/cur_run_time read ${ns}::fetch_from_status ${scobj_hpath} rdValue {3} - hsetprop ${scobj_hpath}/grp_status/cur_run_time rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/cur_run_time control true - hsetprop ${scobj_hpath}/grp_status/cur_run_time data true - hsetprop ${scobj_hpath}/grp_status/cur_run_time mutable true - hsetprop ${scobj_hpath}/grp_status/cur_run_time nxsave true - hsetprop ${scobj_hpath}/grp_status/cur_run_time oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/cur_run_time klass "parameter" - hsetprop ${scobj_hpath}/grp_status/cur_run_time sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/cur_run_time type "part" - hsetprop ${scobj_hpath}/grp_status/cur_run_time nxalias "${name}_grp_status_cur_run_time" - - hfactory ${scobj_hpath}/grp_status/error_in plain user text - hsetprop ${scobj_hpath}/grp_status/error_in read ${ns}::fetch_from_status ${scobj_hpath} rdValue {19} - hsetprop ${scobj_hpath}/grp_status/error_in rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/error_in control true - hsetprop ${scobj_hpath}/grp_status/error_in data true - hsetprop ${scobj_hpath}/grp_status/error_in mutable true - hsetprop ${scobj_hpath}/grp_status/error_in nxsave true - hsetprop ${scobj_hpath}/grp_status/error_in oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/error_in klass "parameter" - hsetprop ${scobj_hpath}/grp_status/error_in sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/error_in type "part" - hsetprop ${scobj_hpath}/grp_status/error_in nxalias "${name}_grp_status_error_in" - - hfactory ${scobj_hpath}/grp_status/evt_0 plain user text - hsetprop ${scobj_hpath}/grp_status/evt_0 read ${ns}::fetch_from_status ${scobj_hpath} rdValue {9} - hsetprop ${scobj_hpath}/grp_status/evt_0 rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/evt_0 control true - hsetprop ${scobj_hpath}/grp_status/evt_0 data true - hsetprop ${scobj_hpath}/grp_status/evt_0 mutable true - hsetprop ${scobj_hpath}/grp_status/evt_0 nxsave true - hsetprop ${scobj_hpath}/grp_status/evt_0 oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/evt_0 klass "parameter" - hsetprop ${scobj_hpath}/grp_status/evt_0 sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/evt_0 type "part" - hsetprop ${scobj_hpath}/grp_status/evt_0 nxalias "${name}_grp_status_evt_0" - - hfactory ${scobj_hpath}/grp_status/evt_1 plain user text - hsetprop ${scobj_hpath}/grp_status/evt_1 read ${ns}::fetch_from_status ${scobj_hpath} rdValue {10} - hsetprop ${scobj_hpath}/grp_status/evt_1 rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/evt_1 control true - hsetprop ${scobj_hpath}/grp_status/evt_1 data true - hsetprop ${scobj_hpath}/grp_status/evt_1 mutable true - hsetprop ${scobj_hpath}/grp_status/evt_1 nxsave true - hsetprop ${scobj_hpath}/grp_status/evt_1 oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/evt_1 klass "parameter" - hsetprop ${scobj_hpath}/grp_status/evt_1 sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/evt_1 type "part" - hsetprop ${scobj_hpath}/grp_status/evt_1 nxalias "${name}_grp_status_evt_1" - - hfactory ${scobj_hpath}/grp_status/evt_2 plain user text - hsetprop ${scobj_hpath}/grp_status/evt_2 read ${ns}::fetch_from_status ${scobj_hpath} rdValue {11} - hsetprop ${scobj_hpath}/grp_status/evt_2 rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/evt_2 control true - hsetprop ${scobj_hpath}/grp_status/evt_2 data true - hsetprop ${scobj_hpath}/grp_status/evt_2 mutable true - hsetprop ${scobj_hpath}/grp_status/evt_2 nxsave true - hsetprop ${scobj_hpath}/grp_status/evt_2 oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/evt_2 klass "parameter" - hsetprop ${scobj_hpath}/grp_status/evt_2 sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/evt_2 type "part" - hsetprop ${scobj_hpath}/grp_status/evt_2 nxalias "${name}_grp_status_evt_2" - - hfactory ${scobj_hpath}/grp_status/evt_3 plain user text - hsetprop ${scobj_hpath}/grp_status/evt_3 read ${ns}::fetch_from_status ${scobj_hpath} rdValue {12} - hsetprop ${scobj_hpath}/grp_status/evt_3 rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/evt_3 control true - hsetprop ${scobj_hpath}/grp_status/evt_3 data true - hsetprop ${scobj_hpath}/grp_status/evt_3 mutable true - hsetprop ${scobj_hpath}/grp_status/evt_3 nxsave true - hsetprop ${scobj_hpath}/grp_status/evt_3 oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/evt_3 klass "parameter" - hsetprop ${scobj_hpath}/grp_status/evt_3 sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/evt_3 type "part" - hsetprop ${scobj_hpath}/grp_status/evt_3 nxalias "${name}_grp_status_evt_3" - - hfactory ${scobj_hpath}/grp_status/evt_4 plain user text - hsetprop ${scobj_hpath}/grp_status/evt_4 read ${ns}::fetch_from_status ${scobj_hpath} rdValue {13} - hsetprop ${scobj_hpath}/grp_status/evt_4 rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/evt_4 control true - hsetprop ${scobj_hpath}/grp_status/evt_4 data true - hsetprop ${scobj_hpath}/grp_status/evt_4 mutable true - hsetprop ${scobj_hpath}/grp_status/evt_4 nxsave true - hsetprop ${scobj_hpath}/grp_status/evt_4 oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/evt_4 klass "parameter" - hsetprop ${scobj_hpath}/grp_status/evt_4 sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/evt_4 type "part" - hsetprop ${scobj_hpath}/grp_status/evt_4 nxalias "${name}_grp_status_evt_4" - - hfactory ${scobj_hpath}/grp_status/evt_5 plain user text - hsetprop ${scobj_hpath}/grp_status/evt_5 read ${ns}::fetch_from_status ${scobj_hpath} rdValue {14} - hsetprop ${scobj_hpath}/grp_status/evt_5 rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/evt_5 control true - hsetprop ${scobj_hpath}/grp_status/evt_5 data true - hsetprop ${scobj_hpath}/grp_status/evt_5 mutable true - hsetprop ${scobj_hpath}/grp_status/evt_5 nxsave true - hsetprop ${scobj_hpath}/grp_status/evt_5 oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/evt_5 klass "parameter" - hsetprop ${scobj_hpath}/grp_status/evt_5 sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/evt_5 type "part" - hsetprop ${scobj_hpath}/grp_status/evt_5 nxalias "${name}_grp_status_evt_5" - - hfactory ${scobj_hpath}/grp_status/evt_6 plain user text - hsetprop ${scobj_hpath}/grp_status/evt_6 read ${ns}::fetch_from_status ${scobj_hpath} rdValue {15} - hsetprop ${scobj_hpath}/grp_status/evt_6 rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/evt_6 control true - hsetprop ${scobj_hpath}/grp_status/evt_6 data true - hsetprop ${scobj_hpath}/grp_status/evt_6 mutable true - hsetprop ${scobj_hpath}/grp_status/evt_6 nxsave true - hsetprop ${scobj_hpath}/grp_status/evt_6 oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/evt_6 klass "parameter" - hsetprop ${scobj_hpath}/grp_status/evt_6 sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/evt_6 type "part" - hsetprop ${scobj_hpath}/grp_status/evt_6 nxalias "${name}_grp_status_evt_6" - - hfactory ${scobj_hpath}/grp_status/evt_7 plain user text - hsetprop ${scobj_hpath}/grp_status/evt_7 read ${ns}::fetch_from_status ${scobj_hpath} rdValue {16} - hsetprop ${scobj_hpath}/grp_status/evt_7 rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/evt_7 control true - hsetprop ${scobj_hpath}/grp_status/evt_7 data true - hsetprop ${scobj_hpath}/grp_status/evt_7 mutable true - hsetprop ${scobj_hpath}/grp_status/evt_7 nxsave true - hsetprop ${scobj_hpath}/grp_status/evt_7 oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/evt_7 klass "parameter" - hsetprop ${scobj_hpath}/grp_status/evt_7 sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/evt_7 type "part" - hsetprop ${scobj_hpath}/grp_status/evt_7 nxalias "${name}_grp_status_evt_7" - - hfactory ${scobj_hpath}/grp_status/flow_rate plain user text - hsetprop ${scobj_hpath}/grp_status/flow_rate read ${ns}::fetch_from_status ${scobj_hpath} rdValue {4} - hsetprop ${scobj_hpath}/grp_status/flow_rate rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/flow_rate control true - hsetprop ${scobj_hpath}/grp_status/flow_rate data true - hsetprop ${scobj_hpath}/grp_status/flow_rate mutable true - hsetprop ${scobj_hpath}/grp_status/flow_rate nxsave true - hsetprop ${scobj_hpath}/grp_status/flow_rate oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/flow_rate klass "parameter" - hsetprop ${scobj_hpath}/grp_status/flow_rate sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/flow_rate type "part" - hsetprop ${scobj_hpath}/grp_status/flow_rate nxalias "${name}_grp_status_flow_rate" - - hfactory ${scobj_hpath}/grp_status/lpg_0 plain user text - hsetprop ${scobj_hpath}/grp_status/lpg_0 read ${ns}::fetch_from_status ${scobj_hpath} rdValue {5} - hsetprop ${scobj_hpath}/grp_status/lpg_0 rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/lpg_0 control true - hsetprop ${scobj_hpath}/grp_status/lpg_0 data true - hsetprop ${scobj_hpath}/grp_status/lpg_0 mutable true - hsetprop ${scobj_hpath}/grp_status/lpg_0 nxsave true - hsetprop ${scobj_hpath}/grp_status/lpg_0 oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/lpg_0 klass "parameter" - hsetprop ${scobj_hpath}/grp_status/lpg_0 sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/lpg_0 type "part" - hsetprop ${scobj_hpath}/grp_status/lpg_0 nxalias "${name}_grp_status_lpg_0" - - hfactory ${scobj_hpath}/grp_status/lpg_1 plain user text - hsetprop ${scobj_hpath}/grp_status/lpg_1 read ${ns}::fetch_from_status ${scobj_hpath} rdValue {6} - hsetprop ${scobj_hpath}/grp_status/lpg_1 rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/lpg_1 control true - hsetprop ${scobj_hpath}/grp_status/lpg_1 data true - hsetprop ${scobj_hpath}/grp_status/lpg_1 mutable true - hsetprop ${scobj_hpath}/grp_status/lpg_1 nxsave true - hsetprop ${scobj_hpath}/grp_status/lpg_1 oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/lpg_1 klass "parameter" - hsetprop ${scobj_hpath}/grp_status/lpg_1 sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/lpg_1 type "part" - hsetprop ${scobj_hpath}/grp_status/lpg_1 nxalias "${name}_grp_status_lpg_1" - - hfactory ${scobj_hpath}/grp_status/lpg_2 plain user text - hsetprop ${scobj_hpath}/grp_status/lpg_2 read ${ns}::fetch_from_status ${scobj_hpath} rdValue {7} - hsetprop ${scobj_hpath}/grp_status/lpg_2 rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/lpg_2 control true - hsetprop ${scobj_hpath}/grp_status/lpg_2 data true - hsetprop ${scobj_hpath}/grp_status/lpg_2 mutable true - hsetprop ${scobj_hpath}/grp_status/lpg_2 nxsave true - hsetprop ${scobj_hpath}/grp_status/lpg_2 oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/lpg_2 klass "parameter" - hsetprop ${scobj_hpath}/grp_status/lpg_2 sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/lpg_2 type "part" - hsetprop ${scobj_hpath}/grp_status/lpg_2 nxalias "${name}_grp_status_lpg_2" - - hfactory ${scobj_hpath}/grp_status/lpg_3 plain user text - hsetprop ${scobj_hpath}/grp_status/lpg_3 read ${ns}::fetch_from_status ${scobj_hpath} rdValue {8} - hsetprop ${scobj_hpath}/grp_status/lpg_3 rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/lpg_3 control true - hsetprop ${scobj_hpath}/grp_status/lpg_3 data true - hsetprop ${scobj_hpath}/grp_status/lpg_3 mutable true - hsetprop ${scobj_hpath}/grp_status/lpg_3 nxsave true - hsetprop ${scobj_hpath}/grp_status/lpg_3 oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/lpg_3 klass "parameter" - hsetprop ${scobj_hpath}/grp_status/lpg_3 sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/lpg_3 type "part" - hsetprop ${scobj_hpath}/grp_status/lpg_3 nxalias "${name}_grp_status_lpg_3" - - hfactory ${scobj_hpath}/grp_status/start_in plain user text - hsetprop ${scobj_hpath}/grp_status/start_in read ${ns}::fetch_from_status ${scobj_hpath} rdValue {18} - hsetprop ${scobj_hpath}/grp_status/start_in rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/start_in control true - hsetprop ${scobj_hpath}/grp_status/start_in data true - hsetprop ${scobj_hpath}/grp_status/start_in mutable true - hsetprop ${scobj_hpath}/grp_status/start_in nxsave true - hsetprop ${scobj_hpath}/grp_status/start_in oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/start_in klass "parameter" - hsetprop ${scobj_hpath}/grp_status/start_in sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/start_in type "part" - hsetprop ${scobj_hpath}/grp_status/start_in nxalias "${name}_grp_status_start_in" - - hfactory ${scobj_hpath}/grp_status/state plain user text - hsetprop ${scobj_hpath}/grp_status/state read ${ns}::fetch_from_status ${scobj_hpath} rdValue {1} - hsetprop ${scobj_hpath}/grp_status/state rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_status/state control true - hsetprop ${scobj_hpath}/grp_status/state data true - hsetprop ${scobj_hpath}/grp_status/state mutable true - hsetprop ${scobj_hpath}/grp_status/state nxsave true - hsetprop ${scobj_hpath}/grp_status/state oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_status/state klass "parameter" - hsetprop ${scobj_hpath}/grp_status/state sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_status/state type "part" - hsetprop ${scobj_hpath}/grp_status/state nxalias "${name}_grp_status_state" - - if {[string equal -nocase "${simulation_flag}" "false"]} { - ${sct_controller} poll ${scobj_hpath}/grp_status/cur_error 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/cur_pres 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/cur_run_time 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/error_in 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/evt_0 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/evt_1 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/evt_2 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/evt_3 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/evt_4 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/evt_5 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/evt_6 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/evt_7 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/flow_rate 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/lpg_0 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/lpg_1 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/lpg_2 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/lpg_3 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/start_in 1 - ${sct_controller} poll ${scobj_hpath}/grp_status/state 1 - } else { - ::scobj::knauer_pump::sics_log 9 "simulation_flag=${simulation_flag} => No poll/write for knauer_pump" - } - - hfactory ${scobj_hpath}/grp_stuff plain spy none - hsetprop ${scobj_hpath}/grp_stuff data "false" - hsetprop ${scobj_hpath}/grp_stuff klass "@none" - hsetprop ${scobj_hpath}/grp_stuff type "part" - - hfactory ${scobj_hpath}/grp_stuff/an_out plain user text - hsetprop ${scobj_hpath}/grp_stuff/an_out read ${ns}::getValue ${scobj_hpath} rdValue {AN_OUT?} - hsetprop ${scobj_hpath}/grp_stuff/an_out rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/an_out control false - hsetprop ${scobj_hpath}/grp_stuff/an_out data false - hsetprop ${scobj_hpath}/grp_stuff/an_out mutable true - hsetprop ${scobj_hpath}/grp_stuff/an_out nxsave false - hsetprop ${scobj_hpath}/grp_stuff/an_out oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/an_out sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/an_out type "part" - hsetprop ${scobj_hpath}/grp_stuff/an_out nxalias "${name}_grp_stuff_an_out" - - hfactory ${scobj_hpath}/grp_stuff/boardinfo plain user text - hsetprop ${scobj_hpath}/grp_stuff/boardinfo read ${ns}::getValue ${scobj_hpath} rdValue {BOARDINFO?} - hsetprop ${scobj_hpath}/grp_stuff/boardinfo rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/boardinfo control false - hsetprop ${scobj_hpath}/grp_stuff/boardinfo data false - hsetprop ${scobj_hpath}/grp_stuff/boardinfo mutable true - hsetprop ${scobj_hpath}/grp_stuff/boardinfo nxsave false - hsetprop ${scobj_hpath}/grp_stuff/boardinfo oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/boardinfo sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/boardinfo type "part" - hsetprop ${scobj_hpath}/grp_stuff/boardinfo nxalias "${name}_grp_stuff_boardinfo" - - hfactory ${scobj_hpath}/grp_stuff/config plain user text - hsetprop ${scobj_hpath}/grp_stuff/config read ${ns}::getValue ${scobj_hpath} rdValue {CONFIG?} - hsetprop ${scobj_hpath}/grp_stuff/config rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/config control false - hsetprop ${scobj_hpath}/grp_stuff/config data false - hsetprop ${scobj_hpath}/grp_stuff/config mutable true - hsetprop ${scobj_hpath}/grp_stuff/config nxsave false - hsetprop ${scobj_hpath}/grp_stuff/config oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/config sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/config type "part" - hsetprop ${scobj_hpath}/grp_stuff/config nxalias "${name}_grp_stuff_config" - - hfactory ${scobj_hpath}/grp_stuff/cprofinfo plain user text - hsetprop ${scobj_hpath}/grp_stuff/cprofinfo read ${ns}::getValue ${scobj_hpath} rdValue {CPROFINFO?} - hsetprop ${scobj_hpath}/grp_stuff/cprofinfo rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/cprofinfo control false - hsetprop ${scobj_hpath}/grp_stuff/cprofinfo data false - hsetprop ${scobj_hpath}/grp_stuff/cprofinfo mutable true - hsetprop ${scobj_hpath}/grp_stuff/cprofinfo nxsave false - hsetprop ${scobj_hpath}/grp_stuff/cprofinfo oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/cprofinfo sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/cprofinfo type "part" - hsetprop ${scobj_hpath}/grp_stuff/cprofinfo nxalias "${name}_grp_stuff_cprofinfo" - - hfactory ${scobj_hpath}/grp_stuff/dout plain user text - hsetprop ${scobj_hpath}/grp_stuff/dout read ${ns}::getValue ${scobj_hpath} rdValue {DOUT?} - hsetprop ${scobj_hpath}/grp_stuff/dout rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/dout control false - hsetprop ${scobj_hpath}/grp_stuff/dout data false - hsetprop ${scobj_hpath}/grp_stuff/dout mutable true - hsetprop ${scobj_hpath}/grp_stuff/dout nxsave false - hsetprop ${scobj_hpath}/grp_stuff/dout oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/dout sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/dout type "part" - hsetprop ${scobj_hpath}/grp_stuff/dout nxalias "${name}_grp_stuff_dout" - - hfactory ${scobj_hpath}/grp_stuff/error plain user text - hsetprop ${scobj_hpath}/grp_stuff/error read ${ns}::getValue ${scobj_hpath} rdValue {ERROR?} - hsetprop ${scobj_hpath}/grp_stuff/error rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/error control false - hsetprop ${scobj_hpath}/grp_stuff/error data false - hsetprop ${scobj_hpath}/grp_stuff/error mutable true - hsetprop ${scobj_hpath}/grp_stuff/error nxsave false - hsetprop ${scobj_hpath}/grp_stuff/error oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/error sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/error type "part" - hsetprop ${scobj_hpath}/grp_stuff/error nxalias "${name}_grp_stuff_error" - - hfactory ${scobj_hpath}/grp_stuff/errors plain user text - hsetprop ${scobj_hpath}/grp_stuff/errors read ${ns}::getValue ${scobj_hpath} rdValue {ERRORS?} - hsetprop ${scobj_hpath}/grp_stuff/errors rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/errors control false - hsetprop ${scobj_hpath}/grp_stuff/errors data false - hsetprop ${scobj_hpath}/grp_stuff/errors mutable true - hsetprop ${scobj_hpath}/grp_stuff/errors nxsave false - hsetprop ${scobj_hpath}/grp_stuff/errors oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/errors sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/errors type "part" - hsetprop ${scobj_hpath}/grp_stuff/errors nxalias "${name}_grp_stuff_errors" - - hfactory ${scobj_hpath}/grp_stuff/flushpmp plain user text - hsetprop ${scobj_hpath}/grp_stuff/flushpmp read ${ns}::getValue ${scobj_hpath} rdValue {FLUSHPMP?} - hsetprop ${scobj_hpath}/grp_stuff/flushpmp rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/flushpmp control false - hsetprop ${scobj_hpath}/grp_stuff/flushpmp data false - hsetprop ${scobj_hpath}/grp_stuff/flushpmp mutable true - hsetprop ${scobj_hpath}/grp_stuff/flushpmp nxsave false - hsetprop ${scobj_hpath}/grp_stuff/flushpmp oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/flushpmp sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/flushpmp type "part" - hsetprop ${scobj_hpath}/grp_stuff/flushpmp nxalias "${name}_grp_stuff_flushpmp" - - hfactory ${scobj_hpath}/grp_stuff/head plain user text - hsetprop ${scobj_hpath}/grp_stuff/head read ${ns}::getValue ${scobj_hpath} rdValue {HEAD?} - hsetprop ${scobj_hpath}/grp_stuff/head rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/head control false - hsetprop ${scobj_hpath}/grp_stuff/head data false - hsetprop ${scobj_hpath}/grp_stuff/head mutable true - hsetprop ${scobj_hpath}/grp_stuff/head nxsave false - hsetprop ${scobj_hpath}/grp_stuff/head oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/head sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/head type "part" - hsetprop ${scobj_hpath}/grp_stuff/head nxalias "${name}_grp_stuff_head" - - hfactory ${scobj_hpath}/grp_stuff/head_par plain user text - hsetprop ${scobj_hpath}/grp_stuff/head_par read ${ns}::getValue ${scobj_hpath} rdValue {HEAD_PAR?} - hsetprop ${scobj_hpath}/grp_stuff/head_par rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/head_par control false - hsetprop ${scobj_hpath}/grp_stuff/head_par data false - hsetprop ${scobj_hpath}/grp_stuff/head_par mutable true - hsetprop ${scobj_hpath}/grp_stuff/head_par nxsave false - hsetprop ${scobj_hpath}/grp_stuff/head_par oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/head_par sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/head_par type "part" - hsetprop ${scobj_hpath}/grp_stuff/head_par nxalias "${name}_grp_stuff_head_par" - - hfactory ${scobj_hpath}/grp_stuff/identify plain user text - hsetprop ${scobj_hpath}/grp_stuff/identify read ${ns}::getValue ${scobj_hpath} rdValue {IDENTIFY?} - hsetprop ${scobj_hpath}/grp_stuff/identify rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/identify control false - hsetprop ${scobj_hpath}/grp_stuff/identify data false - hsetprop ${scobj_hpath}/grp_stuff/identify mutable true - hsetprop ${scobj_hpath}/grp_stuff/identify nxsave false - hsetprop ${scobj_hpath}/grp_stuff/identify oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/identify sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/identify type "part" - hsetprop ${scobj_hpath}/grp_stuff/identify nxalias "${name}_grp_stuff_identify" - - hfactory ${scobj_hpath}/grp_stuff/lpg plain user text - hsetprop ${scobj_hpath}/grp_stuff/lpg read ${ns}::getValue ${scobj_hpath} rdValue {LPG?} - hsetprop ${scobj_hpath}/grp_stuff/lpg rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/lpg control false - hsetprop ${scobj_hpath}/grp_stuff/lpg data false - hsetprop ${scobj_hpath}/grp_stuff/lpg mutable true - hsetprop ${scobj_hpath}/grp_stuff/lpg nxsave false - hsetprop ${scobj_hpath}/grp_stuff/lpg oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/lpg sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/lpg type "part" - hsetprop ${scobj_hpath}/grp_stuff/lpg nxalias "${name}_grp_stuff_lpg" - - hfactory ${scobj_hpath}/grp_stuff/oem plain user text - hsetprop ${scobj_hpath}/grp_stuff/oem read ${ns}::getValue ${scobj_hpath} rdValue {OEM?} - hsetprop ${scobj_hpath}/grp_stuff/oem rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/oem control false - hsetprop ${scobj_hpath}/grp_stuff/oem data false - hsetprop ${scobj_hpath}/grp_stuff/oem mutable true - hsetprop ${scobj_hpath}/grp_stuff/oem nxsave false - hsetprop ${scobj_hpath}/grp_stuff/oem oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/oem sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/oem type "part" - hsetprop ${scobj_hpath}/grp_stuff/oem nxalias "${name}_grp_stuff_oem" - - hfactory ${scobj_hpath}/grp_stuff/opt plain user text - hsetprop ${scobj_hpath}/grp_stuff/opt read ${ns}::getValue ${scobj_hpath} rdValue {OPT?} - hsetprop ${scobj_hpath}/grp_stuff/opt rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/opt control false - hsetprop ${scobj_hpath}/grp_stuff/opt data false - hsetprop ${scobj_hpath}/grp_stuff/opt mutable true - hsetprop ${scobj_hpath}/grp_stuff/opt nxsave false - hsetprop ${scobj_hpath}/grp_stuff/opt oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/opt sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/opt type "part" - hsetprop ${scobj_hpath}/grp_stuff/opt nxalias "${name}_grp_stuff_opt" - - hfactory ${scobj_hpath}/grp_stuff/plim plain user text - hsetprop ${scobj_hpath}/grp_stuff/plim read ${ns}::getValue ${scobj_hpath} rdValue {PLIM?} - hsetprop ${scobj_hpath}/grp_stuff/plim rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/plim control false - hsetprop ${scobj_hpath}/grp_stuff/plim data false - hsetprop ${scobj_hpath}/grp_stuff/plim mutable true - hsetprop ${scobj_hpath}/grp_stuff/plim nxsave false - hsetprop ${scobj_hpath}/grp_stuff/plim oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/plim sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/plim type "part" - hsetprop ${scobj_hpath}/grp_stuff/plim nxalias "${name}_grp_stuff_plim" - - hfactory ${scobj_hpath}/grp_stuff/pressure plain user text - hsetprop ${scobj_hpath}/grp_stuff/pressure read ${ns}::getValue ${scobj_hpath} rdValue {PRESSURE?} - hsetprop ${scobj_hpath}/grp_stuff/pressure rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/pressure control false - hsetprop ${scobj_hpath}/grp_stuff/pressure data false - hsetprop ${scobj_hpath}/grp_stuff/pressure mutable true - hsetprop ${scobj_hpath}/grp_stuff/pressure nxsave false - hsetprop ${scobj_hpath}/grp_stuff/pressure oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/pressure sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/pressure type "part" - hsetprop ${scobj_hpath}/grp_stuff/pressure nxalias "${name}_grp_stuff_pressure" - - hfactory ${scobj_hpath}/grp_stuff/prfastacq plain user text - hsetprop ${scobj_hpath}/grp_stuff/prfastacq read ${ns}::getValue ${scobj_hpath} rdValue {PRFASTACQ?} - hsetprop ${scobj_hpath}/grp_stuff/prfastacq rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/prfastacq control false - hsetprop ${scobj_hpath}/grp_stuff/prfastacq data false - hsetprop ${scobj_hpath}/grp_stuff/prfastacq mutable true - hsetprop ${scobj_hpath}/grp_stuff/prfastacq nxsave false - hsetprop ${scobj_hpath}/grp_stuff/prfastacq oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/prfastacq sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/prfastacq type "part" - hsetprop ${scobj_hpath}/grp_stuff/prfastacq nxalias "${name}_grp_stuff_prfastacq" - - hfactory ${scobj_hpath}/grp_stuff/purge plain user text - hsetprop ${scobj_hpath}/grp_stuff/purge read ${ns}::getValue ${scobj_hpath} rdValue {PURGE?} - hsetprop ${scobj_hpath}/grp_stuff/purge rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/purge control false - hsetprop ${scobj_hpath}/grp_stuff/purge data false - hsetprop ${scobj_hpath}/grp_stuff/purge mutable true - hsetprop ${scobj_hpath}/grp_stuff/purge nxsave false - hsetprop ${scobj_hpath}/grp_stuff/purge oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/purge sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/purge type "part" - hsetprop ${scobj_hpath}/grp_stuff/purge nxalias "${name}_grp_stuff_purge" - - hfactory ${scobj_hpath}/grp_stuff/remote plain user text - hsetprop ${scobj_hpath}/grp_stuff/remote read ${ns}::getValue ${scobj_hpath} rdValue {REMOTE?} - hsetprop ${scobj_hpath}/grp_stuff/remote rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/remote control false - hsetprop ${scobj_hpath}/grp_stuff/remote data false - hsetprop ${scobj_hpath}/grp_stuff/remote mutable true - hsetprop ${scobj_hpath}/grp_stuff/remote nxsave false - hsetprop ${scobj_hpath}/grp_stuff/remote oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/remote sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/remote type "part" - hsetprop ${scobj_hpath}/grp_stuff/remote nxalias "${name}_grp_stuff_remote" - - hfactory ${scobj_hpath}/grp_stuff/rfid plain user text - hsetprop ${scobj_hpath}/grp_stuff/rfid read ${ns}::getValue ${scobj_hpath} rdValue {RFID?} - hsetprop ${scobj_hpath}/grp_stuff/rfid rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/rfid control false - hsetprop ${scobj_hpath}/grp_stuff/rfid data false - hsetprop ${scobj_hpath}/grp_stuff/rfid mutable true - hsetprop ${scobj_hpath}/grp_stuff/rfid nxsave false - hsetprop ${scobj_hpath}/grp_stuff/rfid oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/rfid sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/rfid type "part" - hsetprop ${scobj_hpath}/grp_stuff/rfid nxalias "${name}_grp_stuff_rfid" - - hfactory ${scobj_hpath}/grp_stuff/service plain user text - hsetprop ${scobj_hpath}/grp_stuff/service read ${ns}::getValue ${scobj_hpath} rdValue {SERVICE?} - hsetprop ${scobj_hpath}/grp_stuff/service rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/service control false - hsetprop ${scobj_hpath}/grp_stuff/service data false - hsetprop ${scobj_hpath}/grp_stuff/service mutable true - hsetprop ${scobj_hpath}/grp_stuff/service nxsave false - hsetprop ${scobj_hpath}/grp_stuff/service oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/service sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/service type "part" - hsetprop ${scobj_hpath}/grp_stuff/service nxalias "${name}_grp_stuff_service" - - hfactory ${scobj_hpath}/grp_stuff/sysinfo plain user text - hsetprop ${scobj_hpath}/grp_stuff/sysinfo read ${ns}::getValue ${scobj_hpath} rdValue {SYSINFO?} - hsetprop ${scobj_hpath}/grp_stuff/sysinfo rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/sysinfo control false - hsetprop ${scobj_hpath}/grp_stuff/sysinfo data false - hsetprop ${scobj_hpath}/grp_stuff/sysinfo mutable true - hsetprop ${scobj_hpath}/grp_stuff/sysinfo nxsave false - hsetprop ${scobj_hpath}/grp_stuff/sysinfo oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/sysinfo sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/sysinfo type "part" - hsetprop ${scobj_hpath}/grp_stuff/sysinfo nxalias "${name}_grp_stuff_sysinfo" - - hfactory ${scobj_hpath}/grp_stuff/units plain user text - hsetprop ${scobj_hpath}/grp_stuff/units read ${ns}::getValue ${scobj_hpath} rdValue {UNITS?} - hsetprop ${scobj_hpath}/grp_stuff/units rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/units control false - hsetprop ${scobj_hpath}/grp_stuff/units data false - hsetprop ${scobj_hpath}/grp_stuff/units mutable true - hsetprop ${scobj_hpath}/grp_stuff/units nxsave false - hsetprop ${scobj_hpath}/grp_stuff/units oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/units sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/units type "part" - hsetprop ${scobj_hpath}/grp_stuff/units nxalias "${name}_grp_stuff_units" - - hfactory ${scobj_hpath}/grp_stuff/valves plain user text - hsetprop ${scobj_hpath}/grp_stuff/valves read ${ns}::getValue ${scobj_hpath} rdValue {VALVES?} - hsetprop ${scobj_hpath}/grp_stuff/valves rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/grp_stuff/valves control false - hsetprop ${scobj_hpath}/grp_stuff/valves data false - hsetprop ${scobj_hpath}/grp_stuff/valves mutable true - hsetprop ${scobj_hpath}/grp_stuff/valves nxsave false - hsetprop ${scobj_hpath}/grp_stuff/valves oldval UNKNOWN - hsetprop ${scobj_hpath}/grp_stuff/valves sdsinfo "::nexus::scobj::sdsinfo" - hsetprop ${scobj_hpath}/grp_stuff/valves type "part" - hsetprop ${scobj_hpath}/grp_stuff/valves nxalias "${name}_grp_stuff_valves" - - if {[string equal -nocase "${simulation_flag}" "false"]} { - ${sct_controller} poll ${scobj_hpath}/grp_stuff/an_out 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/boardinfo 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/config 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/cprofinfo 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/dout 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/error 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/errors 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/flushpmp 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/head 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/head_par 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/identify 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/lpg 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/oem 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/opt 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/plim 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/pressure 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/prfastacq 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/purge 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/remote 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/rfid 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/service 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/sysinfo 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/units 600 - ${sct_controller} poll ${scobj_hpath}/grp_stuff/valves 600 - } else { - ::scobj::knauer_pump::sics_log 9 "simulation_flag=${simulation_flag} => No poll/write for knauer_pump" - } - hfactory ${scobj_hpath}/pump plain spy none hsetprop ${scobj_hpath}/pump data "true" hsetprop ${scobj_hpath}/pump klass "@none" @@ -1746,7 +897,7 @@ proc ::scobj::knauer_pump::mkDriver { sct_controller name device_class simulatio hsetprop ${scobj_hpath}/pump/flow/setp mutable true hsetprop ${scobj_hpath}/pump/flow/setp nxsave true hsetprop ${scobj_hpath}/pump/flow/setp lowerlimit 0 - hsetprop ${scobj_hpath}/pump/flow/setp upperlimit 10 + hsetprop ${scobj_hpath}/pump/flow/setp upperlimit 9.999 hsetprop ${scobj_hpath}/pump/flow/setp oldval 1.0 hset ${scobj_hpath}/pump/flow/setp 1.0 hsetprop ${scobj_hpath}/pump/flow/setp klass "parameter" @@ -1824,15 +975,15 @@ proc ::scobj::knauer_pump::mkDriver { sct_controller name device_class simulatio hsetprop ${scobj_hpath}/pump/volume/pval nxalias "${name}_pump_volume_pval" hfactory ${scobj_hpath}/pump/volume/setp plain user float - hsetprop ${scobj_hpath}/pump/volume/setp read ${ns}::pump_fetch ${scobj_hpath} rdValue { } + hsetprop ${scobj_hpath}/pump/volume/setp read ${ns}::volume_fsm ${scobj_hpath} rdValue { } hsetprop ${scobj_hpath}/pump/volume/setp rdValue ${ns}::rdValue ${scobj_hpath} - hsetprop ${scobj_hpath}/pump/volume/setp write ${ns}::pump_write ${scobj_hpath} noResponse { } + hsetprop ${scobj_hpath}/pump/volume/setp write ${ns}::volume_write ${scobj_hpath} noResponse { } hsetprop ${scobj_hpath}/pump/volume/setp noResponse ${ns}::noResponse ${scobj_hpath} hsetprop ${scobj_hpath}/pump/volume/setp check ${ns}::checkrange ${scobj_hpath} hsetprop ${scobj_hpath}/pump/volume/setp driving 0 hsetprop ${scobj_hpath}/pump/volume/setp checklimits ${ns}::checklimits ${scobj_hpath} - hsetprop ${scobj_hpath}/pump/volume/setp checkstatus ${ns}::pump_checkstatus ${scobj_hpath} - hsetprop ${scobj_hpath}/pump/volume/setp halt ${ns}::pump_halt ${scobj_hpath} + hsetprop ${scobj_hpath}/pump/volume/setp checkstatus ${ns}::volume_checkstatus ${scobj_hpath} + hsetprop ${scobj_hpath}/pump/volume/setp halt ${ns}::volume_halt ${scobj_hpath} hsetprop ${scobj_hpath}/pump/volume/setp driveable pump/volume/pval hsetprop ${scobj_hpath}/pump/volume/setp control true hsetprop ${scobj_hpath}/pump/volume/setp data true