From 89bfef55b02aefc063bbde5a23f0f6a32a9816f5 Mon Sep 17 00:00:00 2001 From: Ferdi Franceschini Date: Fri, 12 Aug 2011 08:46:21 +1000 Subject: [PATCH] This is a simple LS336 simulation. It just implements the commands which the sct_lakeshore_336.tcl driver uses. You can set the temperature and the sensor readings have a random one degree fluctuation. r3238 | ffr | 2011-08-12 08:46:21 +1000 (Fri, 12 Aug 2011) | 4 lines --- .../fakeTempControl/lakeshore/SIM_LS336.tcl | 230 ++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 site_ansto/instrument/TEST_SICS/fakeTempControl/lakeshore/SIM_LS336.tcl diff --git a/site_ansto/instrument/TEST_SICS/fakeTempControl/lakeshore/SIM_LS336.tcl b/site_ansto/instrument/TEST_SICS/fakeTempControl/lakeshore/SIM_LS336.tcl new file mode 100644 index 00000000..d5346855 --- /dev/null +++ b/site_ansto/instrument/TEST_SICS/fakeTempControl/lakeshore/SIM_LS336.tcl @@ -0,0 +1,230 @@ +# $Revision: 1.3 $ +# $Date: 2007/10/31 06:10:30 $ +# Author: Ferdi Franceschini (ffr@ansto.gov.au) +# Last revision by: $Author: ffr $ + +# Creates a socket server which listens for connections and accepts commands +# from clients (eg SICS). +proc serverOpen {channel addr port} { + global voltage + global connected + set connected 1 + set voltage 0 +# fconfigure $channel -translation binary -buffering none + fileevent $channel readable "readLine $channel" + puts "OPENED" + return; +} + +# ,,,,,, +# Default to off for all inputs +array set ALARM {"A" 0 "B" 0 "C" 0 "D" 0} +array set ALARMST {"A" 0 "B" 0 "C" 0 "D" 0} +array set CRVHDR { +1 "DT-336-1 ,STANDARD ,1,+500.000,1" +2 "DT-336-2 ,STANDARD ,2,+0.500,1" +3 "DT-336-3 ,STANDARD ,3,+2.000,2" +4 "DT-336-4 ,STANDARD ,4,+0.301,2" +} +array set HTR {1 0 2 0} +array set HTRST {1 0 2 0} +set IDN "LSCI,MODEL336,336A03T/#######,1.2" +array set INCRV {"A" 1 "B" 2 "C" 3 "D" 4} +array set INTYPE {"A" "1,0,1,0,1" "B" "1,0,1,0,1" "C" "1,0,1,0,1" "D" "1,0,1,0,1" } +array set KRDG {"A" 300 "B" 300 "C" 300 "D" 300} +array set MOUT {1 0.0 2 0.0 3 0.0 4 0.0} +array set OUTMODE {1 1,1,0 2 1,2,0 3 1,3,0 4 1,4,0} +array set PID {1 +0150.0,+0005.0,+000.0 2 +0150.0,+0005.0,+000.0} +array set RAMP {1 +000.00 2 +000.00} +array set RAMPST {1 0 2 0} +array set RANGE {1 0 2 0 3 0 4 0} +array set RDGST {"A" 0 "B" 0 "C" 0 "D" 0} +array set RELAY {1 "1,A,0" 2 "2,A,0"} +array set RELAYST {1 0 2 0} +array set SETP {1 300.0 2 300.0 3 300.0 4 300.0} +set STB 0 + +proc driveTotemp {} { +global array SETP +global array KRDG +global array stepKRDG +set tol 0.1 + foreach {spi t} {1 A 2 B 3 C 4 D} { + set diff [expr abs( $KRDG($t) - $SETP($spi) )] + if { $diff > $tol } { + puts "[info level 0] diff = $diff, stepKRDG($t) = $stepKRDG($t)" + if {$diff < [expr abs($stepKRDG($t)) ]} { + set KRDG($t) $SETP($spi) + } else { + set KRDG($t) [expr $KRDG($t) + $stepKRDG($t)] + } + } + } +} +proc readLine {channel} { +global array ALARM +global array ALARMST +global array CRVHDR +global array HTR +global array HTRST +global IDN +global array INCRV +global array INTYPE +global array KRDG +global array MOUT +global array OUTMODE +global array PID +global array RAMP +global array RAMPST +global array RANGE +global array RDGST +global array RELAY +global array RELAYST +global array SETP +global array stepKRDG +global STB + + if [eof $channel] { + # Channel will be closed then re-opened + return -code error "GOT EOF" + } + gets $channel data + puts "RECEIVED: $data" + switch [llength $data] { + 0 { + puts "Oops received nothing" + set cmd XXX + } + 1 { + set cmd [lindex $data 0] + } + 2 { + set cmd [lindex $data 0] + set arg [lindex $data 1] + } + default { + puts $channel "ERR: Invalid command: $data" + flush stdout + flush stderr + flush $channel + return -code error "Invalid command: $data" + } + } + + switch $cmd { + "ALARM?" { + puts $channel $ALARM($arg) + } + "ALARMST?" { + puts $channel $ALARMST($arg) + } + "CRVHDR?" { + puts $channel $CRVHDR($arg) + } + "HTR?" { + puts $channel $HTR($arg) + } + "HTRST?" { + puts $channel $HTRST($arg) + } + "*IDN?" { + driveTotemp + puts $IDN + puts $channel $IDN + } + "INCRV?" { + puts $channel $INCRV($arg) + } + "INTYPE?" { + puts $channel $INTYPE($arg) + } + "KRDG?" { + puts $channel [expr rand() + $KRDG($arg) - 0.5] + } + "MOUT?" { + puts $channel $MOUT($arg) + } + "OUTMODE?" { + puts $channel $OUTMODE($arg) + } + "PID?" { + puts $channel $PID($arg) + } + "RAMP?" { + puts $channel $RAMP($arg) + } + "RAMPST?" { + puts $channel $RAMPST($arg) + } + "RANGE?" { + puts $channel $RANGE($arg) + } + "RDGST?" { + puts $channel $RDGST($arg) + } + "RELAY?" { + puts $channel $RELAY($arg) + } + "RELAYST?" { + puts $channel $RELAYST($arg) + } + "SETP?" { + puts $channel $SETP($arg) + } + "*STB?" { + puts $channel $STB + } + "*TST?" { + puts $channel 0 + } + "ALARM" { + } + "INCRV" { + } + "INTYPE" { + } + "MOUT" { + } + "OUTMODE" { + } + "PID" { + } + "RAMP" { + } + "RANGE" { + array set RANGE [split $arg ,] + } + "RELAY" { + } + "SETP" { + foreach {s v} [split $arg ,] {} + puts "set SETPOINT $s $v" + array set SETP "$s $v" + switch $s { + "1" {set stepKRDG(A) [expr ( $v - $KRDG(A) )/10.0] } + "2" {set stepKRDG(B) [expr ( $v - $KRDG(B) )/10.0] } + "3" {set stepKRDG(C) [expr ( $v - $KRDG(C) )/10.0] } + "4" {set stepKRDG(D) [expr ( $v - $KRDG(D) )/10.0] } + } + } + } + + + flush stdout + flush stderr + flush $channel + +} + +# startserver -port 1034 +proc startserver {args} { + global tcl_interactive; + array set parr $args; + set connected 0; + set server [socket -server serverOpen $parr(-port)]; + after 100 update; + if {$tcl_interactive==0} {vwait forever } + return; +} + +startserver -port 7777