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
This commit is contained in:
committed by
Douglas Clowes
parent
5e50f2cb43
commit
89bfef55b0
@@ -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;
|
||||
}
|
||||
|
||||
# <input ABCD>,<off/on [10]>,<high>,<low><deadband>,<latch enable>,<audible>,<visible>
|
||||
# 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
|
||||
Reference in New Issue
Block a user