Added fake disk chopper controller.
This commit is contained in:
@@ -0,0 +1,227 @@
|
|||||||
|
# $Revision: 1.2 $
|
||||||
|
# $Date: 2007/03/16 06:11:56 $
|
||||||
|
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
|
||||||
|
# Last revision by: $Author: ffr $
|
||||||
|
|
||||||
|
# Creates a socket server which listens for connections and accepts commands
|
||||||
|
proc serverOpen {channel addr port} {
|
||||||
|
global connected
|
||||||
|
global serverState
|
||||||
|
|
||||||
|
set serverState "UID"
|
||||||
|
set connected 1
|
||||||
|
fileevent $channel readable "readLine Server $channel"
|
||||||
|
puts "OPENED"
|
||||||
|
puts -nonewline $channel "#SES#Fill in your user ID"
|
||||||
|
flush $channel
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
proc reset {} {
|
||||||
|
global serverState
|
||||||
|
set serverState "UID"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
proc getUID {channel line} {
|
||||||
|
global validUID
|
||||||
|
global validPWD
|
||||||
|
global serverState
|
||||||
|
|
||||||
|
puts "Get UID"
|
||||||
|
switch -glob $line {
|
||||||
|
"kill" {exit}
|
||||||
|
"user:*" {
|
||||||
|
if {$line == "user:NCS"} {
|
||||||
|
puts "validUID"
|
||||||
|
set validUID true
|
||||||
|
} else {
|
||||||
|
puts "invalidUID"
|
||||||
|
set validUID false
|
||||||
|
}
|
||||||
|
puts "send fill in password msg"
|
||||||
|
puts -nonewline $channel "#SES#Fill in your password"
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
puts "invalidUID"
|
||||||
|
set validUID false
|
||||||
|
puts -nonewline $channel "#SES#Fill in your password"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
set serverState "PWD"
|
||||||
|
}
|
||||||
|
|
||||||
|
proc getPWD {channel line} {
|
||||||
|
global validUID
|
||||||
|
global validPWD
|
||||||
|
global serverState
|
||||||
|
|
||||||
|
puts "Get PWD"
|
||||||
|
switch -glob $line {
|
||||||
|
"kill" {exit}
|
||||||
|
"password:NCS013" {
|
||||||
|
if {$line == "password:NCS013"} {
|
||||||
|
puts "validPWD"
|
||||||
|
set validPWD true
|
||||||
|
} else {
|
||||||
|
puts "invalidPWD"
|
||||||
|
set validPWD false
|
||||||
|
}
|
||||||
|
if {$validUID && $validPWD} {
|
||||||
|
puts -nonewline $channel "#SES#Hello"
|
||||||
|
set serverState "CMD"
|
||||||
|
} else {
|
||||||
|
puts -nonewline $channel "#SES#You are not a valid user, try again!"
|
||||||
|
puts -nonewline $channel "#SES#Fill in your user ID"
|
||||||
|
set serverState "UID"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
puts "invalidPWD"
|
||||||
|
set validPWD false
|
||||||
|
puts -nonewline $channel "#SES#You are not a valid user, try again!"
|
||||||
|
puts -nonewline $channel "#SES#Fill in your user ID"
|
||||||
|
set serverState "UID"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
proc getCMD {channel line} {
|
||||||
|
global validUID
|
||||||
|
global validPWD
|
||||||
|
global serverState
|
||||||
|
|
||||||
|
puts "Get CMD"
|
||||||
|
set cmd [lindex [split $line "#"] 2]
|
||||||
|
switch -glob $line {
|
||||||
|
"" {}
|
||||||
|
"kill" {exit}
|
||||||
|
"#SOS#STATE 1:" {
|
||||||
|
puts -nonewline $channel "#SOS#ACCEPT CH= 1# State= Synchron.#ASPEED= 0#RSPEED= 0#APHASE= -0.72#RPHASE= 0#AVETO = 0#DIR = CW#MONIT = ok#FLOWR = 3.7#WTEMP = 14.2#MTEMP = 18.1#MVIBR = 0.0#MVACU = 0.0022#DATE = 9/10/2007#TIME = 4:48:36 PM#"
|
||||||
|
}
|
||||||
|
"#SOS#STATE 2:" {
|
||||||
|
puts -nonewline $channel "#SOS#ACCEPT CH= 2# State= Synchron.#ASPEED= 0#RSPEED= 0#APHASE= -0.72#RPHASE= -0.6#AVETO = 0#DIR = CW#MONIT = ok#FLOWR = 3.7#WTEMP = 14.2#MTEMP = 18.1#MVIBR = 0.0#MVACU = 0.0022#DATE = 9/10/2007#TIME = 4:48:36 PM#"
|
||||||
|
}
|
||||||
|
"#SOS#STATE 3:" {
|
||||||
|
puts -nonewline $channel "#SOS#ACCEPT CH= 3# State= Synchron.#ASPEED= 0#RSPEED= 0#APHASE= 999.99#RPHASE= -0.6#AVETO = 0#DIR = CW#MONIT = ok#FLOWR = 3.7#WTEMP = 14.2#MTEMP = 18.1#MVIBR = 0.0#MVACU = 0.0022#DATE = 9/10/2007#TIME = 4:48:36 PM#"
|
||||||
|
}
|
||||||
|
"#SOS#STATE 4:" {
|
||||||
|
puts -nonewline $channel "#SOS#ACCEPT CH= 4# State= Synchron.#ASPEED= 0#RSPEED= 0#APHASE= -0.72#RPHASE= -0.6#AVETO = 0#DIR = CW#MONIT = ok#FLOWR = 3.7#WTEMP = 14.2#MTEMP = 18.1#MVIBR = 0.0#MVACU = 0.0022#DATE = 9/10/2007#TIME = 4:48:36 PM#"
|
||||||
|
}
|
||||||
|
"#SOS#SPEED ?:*" {
|
||||||
|
set cmdarg [lindex [split $line :] 1]
|
||||||
|
if {[string length $cmdarg] != 6} {
|
||||||
|
puts "ERROR: Command must have six characters"
|
||||||
|
puts -nonewline $channel "#SOS#NCCEPT $cmd"
|
||||||
|
} elseif { [string is double $cmdarg] } {
|
||||||
|
puts -nonewline $channel "#SOS#ACCEPT $cmd"
|
||||||
|
} else {
|
||||||
|
puts "ERROR: Speed must be numeric in <$line>"
|
||||||
|
puts -nonewline $channel "#SOS#NCCEPT $cmd"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#SOS#GEAR ?:*" {
|
||||||
|
set cmdarg [lindex [split $line :] 1]
|
||||||
|
if {[string length $cmdarg] != 6} {
|
||||||
|
puts "ERROR: Command must have six characters"
|
||||||
|
puts -nonewline $channel "#SOS#NCCEPT $cmd"
|
||||||
|
} elseif { [string is double $cmdarg] } {
|
||||||
|
puts -nonewline $channel "#SOS#ACCEPT $cmd"
|
||||||
|
} else {
|
||||||
|
puts "ERROR: Gear must be an integer in <$line>"
|
||||||
|
puts -nonewline $channel "#SOS#NCCEPT $cmd"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#SOS#PHASE ?:*" {
|
||||||
|
set cmdarg [lindex [split $line :] 1]
|
||||||
|
if {[string length $cmdarg] != 6} {
|
||||||
|
puts "ERROR: Command must have six characters"
|
||||||
|
puts -nonewline $channel "#SOS#NCCEPT $cmd"
|
||||||
|
} elseif { [string is double $cmdarg] } {
|
||||||
|
puts -nonewline $channel "#SOS#ACCEPT $cmd"
|
||||||
|
} else {
|
||||||
|
puts "ERROR: PHASE must be a float in <$line>"
|
||||||
|
puts -nonewline $channel "#SOS#NCCEPT $cmd"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#SOS#DIR ?:*" {
|
||||||
|
set cmdarg [lindex [split $line :] 1]
|
||||||
|
set trimarg [string trim $cmdarg]
|
||||||
|
if {[string length $cmdarg] != 6} {
|
||||||
|
puts "ERROR: Command must have six characters"
|
||||||
|
puts -nonewline $channel "#SOS#NCCEPT $cmd"
|
||||||
|
} elseif { $trimarg == "CW" || $trimarg == "CCW" } {
|
||||||
|
puts -nonewline $channel "#SOS#ACCEPT $cmd"
|
||||||
|
} else {
|
||||||
|
puts "ERROR: DIR must be CW or CCW in <$line>"
|
||||||
|
puts -nonewline $channel "#SOS#NCCEPT $cmd"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#SOS#IDLE ?:*" {
|
||||||
|
puts -nonewline $channel "#SOS#ACCEPT $cmd"
|
||||||
|
}
|
||||||
|
"#SOS#RESUM ?:*" {
|
||||||
|
puts -nonewline $channel "#SOS#ACCEPT $cmd"
|
||||||
|
}
|
||||||
|
"#SOS#BRAKE ?:*" {
|
||||||
|
puts -nonewline $channel "#SOS#ACCEPT $cmd"
|
||||||
|
}
|
||||||
|
"#SOS#ESTOP" {
|
||||||
|
puts -nonewline $channel "#SOS#ACCEPT $cmd"
|
||||||
|
}
|
||||||
|
default {
|
||||||
|
puts -nonewline $channel "#SOS#NCCEPT $cmd"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# Reads a command from a DMC2280 client and then performs an appropriate
|
||||||
|
# action depending on whether or not the command produces output or has
|
||||||
|
# been defined.
|
||||||
|
proc readLine {who channel} {
|
||||||
|
global didRead
|
||||||
|
global B
|
||||||
|
global validUID
|
||||||
|
global validPWD
|
||||||
|
global serverState
|
||||||
|
|
||||||
|
if {[gets $channel line]<0} {
|
||||||
|
fileevent $channel readable {}
|
||||||
|
after idle "close $channel;set out 1"
|
||||||
|
} elseif {[eof $channel]} {
|
||||||
|
puts "RECEIVED EOF: $line"
|
||||||
|
close $f
|
||||||
|
return -code error "Got EOF, close channel"
|
||||||
|
} else {
|
||||||
|
puts "RECEIVED: $line"
|
||||||
|
switch $serverState {
|
||||||
|
"UID" {
|
||||||
|
getUID $channel $line
|
||||||
|
}
|
||||||
|
"PWD" {
|
||||||
|
getPWD $channel $line
|
||||||
|
}
|
||||||
|
"CMD" {
|
||||||
|
getCMD $channel $line
|
||||||
|
}
|
||||||
|
}
|
||||||
|
puts "flush channel"
|
||||||
|
flush $channel
|
||||||
|
flush $channel
|
||||||
|
set didRead 1
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
# startserver -port 1034
|
||||||
|
proc startserver {args} {
|
||||||
|
global tcl_interactive;
|
||||||
|
array set parr $args;
|
||||||
|
set connected 0;
|
||||||
|
set server [socket -server serverOpen $parr(-port)];
|
||||||
|
fconfigure $server -blocking 0 -buffering none -translation binary -buffersize 1
|
||||||
|
after 100 update;
|
||||||
|
if {$tcl_interactive==0} {vwait forever }
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
startserver -server localhost -port 60000
|
||||||
@@ -30,7 +30,7 @@ foreach {key host port} {
|
|||||||
|
|
||||||
# TEST CHOPPER HOST AND PORT
|
# TEST CHOPPER HOST AND PORT
|
||||||
foreach {key host port} {
|
foreach {key host port} {
|
||||||
NCS013 localhost 10000
|
NCS013 localhost 60000
|
||||||
} {
|
} {
|
||||||
dict set CHOPPER_HOSTPORT $key HOST $host
|
dict set CHOPPER_HOSTPORT $key HOST $host
|
||||||
dict set CHOPPER_HOSTPORT $key PORT $port
|
dict set CHOPPER_HOSTPORT $key PORT $port
|
||||||
|
|||||||
Reference in New Issue
Block a user