Merged Release 1.2

r1897 | ffr | 2007-04-20 11:53:31 +1000 (Fri, 20 Apr 2007) | 2 lines
This commit is contained in:
Ferdi Franceschini
2007-04-20 11:53:31 +10:00
committed by Douglas Clowes
parent d0957b18d5
commit ade5216ea9
22 changed files with 901 additions and 182 deletions

View File

@@ -377,6 +377,7 @@ static pHdb MakeSicsVarNode(pSicsVariable pVar, char *name){
pHdbCallback pCall = NULL;
commandContext comCom;
int type;
hdbValue v;
switch(pVar->eType){
case veInt:
@@ -407,6 +408,18 @@ static pHdb MakeSicsVarNode(pSicsVariable pVar, char *name){
AppendHipadabaCallback(node,HCBSET,pCall);
RegisterCallback(pVar->pCall,comCom, VALUECHANGE, ValueCallback,
node,NULL);
switch(pVar->eType){
case veInt:
v = MakeHdbInt(pVar->iVal);
break;
case veFloat:
v = MakeHdbFloat((double)pVar->fVal);
break;
case veText:
v = MakeHdbText(pVar->text);
break;
}
UpdateHipadabaPar(node,v,NULL);
node->protected = 1;
return node;

View File

@@ -19,8 +19,13 @@ proc xhmake {path priv dtype pKey pVal} {
}
hmake /commands spy none
hsetprop /commands type commandset
set pathlist(/commands) 1
hsetprop /commands type commandset
hmake /graphics spy none
set pathlist(/graphics) 1
hsetprop /graphics type graphset
hsetprop /commands type commandset
#TODO change this to hparts.tcl
source $cfPath(hipadaba)/hpaths.tcl
@@ -28,6 +33,9 @@ set instrument [string tolower [SplitReply [Instrument]] ]
hmake /$instrument spy none
hsetprop /$instrument type instrument
set pathlist(/$instrument) 1
hmake /$instrument/status spy none
set pathlist(/$instrument/status) 1
hsetprop /$instrument/status type part
# Generate hipadaba nodes for the paths in the hpaths file
foreach hp $hpaths {
@@ -75,17 +83,20 @@ foreach motor [sicslist type motor] {
foreach {obj name part master_obj} $cvirtmotor_hpath {
set path /$instrument/$part
hattach $path $obj $name
sicspoll add $path/$name hdb 2
foreach m $master_obj {
hchain $path/$name $path/$m
}
#FIXME polling causes scans to abort
#sicspoll add $path/$name hdb 2
}
#------------- scan command
hsetprop /commands type part
#--- Graphics
hmake /graphics spy none
hsetprop /graphics type graphset
::scancommand::commands_hpath_setup /commands
::scancommand::graphics_hpath_setup /graphics
::scancommand::init
#------------- plc controller
::plc::status_hpath_setup /$instrument/status
unset pathlist;

View File

@@ -9,7 +9,7 @@
set tmpstr [string map {"$" ""} {$Name: not supported by cvs2svn $}]
set nx_content_release_tag [lindex $tmpstr [expr [llength $tmpstr] - 1]]
set tmpstr [string map {"$" ""} {$Revision: 1.22 $}]
set tmpstr [string map {"$" ""} {$Revision: 1.23 $}]
set nx_content_revision_num [lindex $tmpstr [expr [llength $tmpstr] - 1]]
MakeNXScript
@@ -101,7 +101,7 @@ proc hmm_save {nxobj entryname point} {
$nxobj updatedictvar padim0 $dim0
$nxobj updatedictvar padim1 $dim1
$nxobj putslab $dictalias(hmm) [list $point 0 0] [list 1 $dim0 $dim1 ] hmm [SplitReply [hmm_start]] $histo_length [SplitReply [hmm_bank]]
put2Dpolar_angle $nxobj $point $dim0 $dim1;
# put2Dpolar_angle $nxobj $point $dim0 $dim1;
#TODO replace scandata with generic name
$nxobj makelink scandata hmcounts
$nxobj makelink scanhoraxis dhaxis

View File

@@ -0,0 +1,13 @@
namespace eval plc {
proc status_hpath_setup {parent} {
set plcPath $parent/plc
hmake $plcPath spy none;
hsetprop $plcPath type part;
set objlist [sicslist match plc_*];
foreach v $objlist {
if { [SplitReply [sicslist $v type]]== "SicsVariable"} {
hattach $plcPath $v [string replace $v 0 3];
}
}
}
}

View File

@@ -243,7 +243,7 @@ variable scanVariable scan_var scanVarStart 0 scanVarStep 1
hsetprop $parent/beam_monitor_scan type graphdata;
hsetprop $parent/beam_monitor_scan viewer default;
hsetprop $parent/beam_monitor_scan rank 1;
hattach $parent/beam_monitor_scan bmonscan_np_graphics_target dim;
hattach $parent/beam_monitor_scan bmonscan_np_target dim;
hattach $parent/beam_monitor_scan bmonscan_point_graphics_current point;
hattach $parent/beam_monitor_scan bmonscan_var_graphics_value lastaxis
hattach $parent/beam_monitor_scan bmonscan_counts lastdata

View File

@@ -1,3 +1,4 @@
config/plc/plc_common_1.tcl
config/counter/counter_common_1.tcl
config/hipadaba/common_hipadaba_configuration.tcl
config/hmm/hmm_configuration_common_1.tcl

View File

@@ -12,14 +12,14 @@ aperture slits ]
# Configurable virtual motors
# obj name path master_obj
set cvirtmotor_hpath [list \
ss1vg ss1vg slits/first top\
ss1vo ss1vo slits/first top\
ss1hg ss1hg slits/first right\
ss1ho ss1ho slits/first right\
ss2vg ss2vg slits/second top\
ss2vo ss2vo slits/second top\
ss2hg ss2hg slits/second right\
ss2ho ss2ho slits/second right\
ss1vg ss1vg slits/first [list top bottom left right]\
ss1vo ss1vo slits/first [list top bottom left right]\
ss1hg ss1hg slits/first [list top bottom left right]\
ss1ho ss1ho slits/first [list top bottom left right]\
ss2vg ss2vg slits/second [list top bottom left right]\
ss2vo ss2vo slits/second [list top bottom left right]\
ss2hg ss2hg slits/second [list top bottom left right]\
ss2ho ss2ho slits/second [list top bottom left right]\
sth sth sample [SplitReply [stth long_name]]\
mth mth monochromator [SplitReply [mtth long_name]]]

View File

@@ -0,0 +1,353 @@
<?xml version = '1.0' encoding = 'UTF-8'?>
<!-- Revised version MJL 2/07 -->
<anstohm:anstohm filler="ansto1" >
<config_server>
<DIR defaultpath="/srv/www/htdocs" />
<DAT filenamepre="DAT" filenameext_BIN="bin" filenameext_CSV="csv" filenameext_XML="xml" filenameext_ZIP="zip" />
</config_server>
<config_fillers>
<config_filler host="ALL" dae_type="ALL" >
<DIR defaultpath="/srv/www/htdocs" />
<EIS filename="EIS.bin" />
<CFG_ECHO filenamepre="CFG" filenameext="xml" />
<RAW filenamepre="RAW" filenameext="txt" />
<EVT filenamepre="EVT" filenameext="txt" />
<HDS filenamepre="HDS" filenameext="bin.zip" />
<HDD filenamepre="HDD" filenameext="bin.zip" />
<EOS filename="EOS.bin" />
<FAT
DATASET_SOURCE="INTERNAL"
FRAME_SOURCE="INTERNAL"
HARD_VETO_1="ENABLE" HARD_VETO_2="DISABLE" HARD_VETO_3="DISABLE" HARD_VETO_4="DISABLE"
SOFT_VETO_1="DISABLE" SOFT_VETO_2="DISABLE" SOFT_VETO_3="DISABLE" SOFT_VETO_4="DISABLE"
MONITOR_1="ENABLE" MONITOR_2="DISABLE" MONITOR_3="DISABLE"
FRAME_FREQUENCY="50.00"
FRAME_DUTYCYCLE="99"
CLOCK_SCALE="1000"
NOS_PERIODS="1"
COUNT_METHOD="UNLIMITED"
COUNT_SIZE="0"
COUNT_STOP="IMMEDIATE"
EXPAND_OAT_X="0"
EXPAND_OAT_Y="0"
EXPAND_OAT_T="0"
OFFSET_OAT_X="0"
OFFSET_OAT_Y="0"
OFFSET_OAT_T="0"
HISTOGRAM_WEIGHT="1"
HISTOGRAM_MODE="XYTP"
RATE_MAPPING="ENABLE"
TOTAL_HISTOGRAMS="ENABLE"
TEST_HISTOGRAMS="ENABLE"
TEST_HISTO_1D_SIZES="1024"
TEST_HISTO_2D_SIZES="1024"
FIND_EVENT_MINMAX="ENABLE"
EVENT_STORAGE="ENABLE"
EVENT_STORAGE_SIZE="1000000"
EVENT_INPUT_STREAMING="DISABLE"
EVENT_INPUT_STREAMING_FORMAT="PACKEDBIN"
EVENT_INPUT_STREAMING_RATE="REALTIME"
EVENT_OUTPUT_STREAMING="DISABLE"
EVENT_OUTPUT_STREAMING_FORMAT="PACKEDBIN"
EVENT_OUTPUT_STREAMING_UNPACKED_BITFIELDSIZE_X="16"
EVENT_OUTPUT_STREAMING_UNPACKED_BITFIELDSIZE_Y="16"
EVENT_OUTPUT_STREAMING_UNPACKED_BITFIELDSIZE_T="32"
EVENT_OUTPUT_STREAMING_UNPACKED_BITFIELDSIZE_F="32"
EVENT_OUTPUT_STREAMING_UNPACKED_BITFIELDSIZE_V="8"
EVENT_OUTPUT_STREAMING_UNPACKED_BITFIELDSIZE_SPARE="24"
HISTO_STREAMING="ZIPBIN"
LOG_RAW="DISABLE"
LOG_EVT="DISABLE"
MULTIPLE_DATASETS="ENABLE"
MULTI_HOST_HISTO_STITCH_TYPE="X_DIRECTION"
MULTI_HOST_HISTO_STITCH_OVERLAP="32"
MULTI_HOST_HISTO_STITCH_ORDER="NORMAL"
READ_DATA_TYPE="HISTOPERIOD_XYT"
READ_DATA_MULTIHOST_JOIN_OR_STITCH="STITCH"
READ_DATA_PERIOD_NUMBER="0"
READ_DATA_START="-1"
READ_DATA_END="-1"
READ_DATA_ORDER_TRANSPOSE_XY="DISABLE"
READ_DATA_ORDER_FLIP_X="DISABLE"
READ_DATA_ORDER_FLIP_Y="DISABLE"
VIEW_TYPE="HISTOPERIOD_XYT"
VIEW_COLOUR_TABLE="RAIN"
VIEW_SCALING_TYPE="LOG"
VIEW_RATE_MAP_TIME_CONST="1."
VIEW_LOG_SCALING_RANGE="2"
VIEW_ROOT_SCALING_RANGE="2"
VIEW_ROI_XMIN="-1"
VIEW_ROI_XMAX="-1"
VIEW_ROI_YMIN="-1"
VIEW_ROI_YMAX="-1"
VIEW_ROI_1DMIN="-1"
VIEW_ROI_1DMAX="-1"
VIEW_MAG_X="1"
VIEW_MAG_Y="1"
VIEW_MAG_1D="1"
VIEW_INTERP_X="1"
VIEW_INTERP_Y="1"
VIEW_FLIP_X="DISABLE"
VIEW_FLIP_Y="DISABLE"
VIEW_MAJOR_TICK_MARKS_X="5"
VIEW_MAJOR_TICK_MARKS_Y="5"
VIEW_MINOR_TICK_MARKS_X="32"
VIEW_MINOR_TICK_MARKS_Y="16"
VIEW_HISTO_PERIOD="-1"
VIEW_HISTO_OAT_T_BIN="-1"
VIEW_AUTO_REFRESH="1"
VIEW_DISPLAY_FORMAT="DISLIN_PNG"
VIEW_MULTIHOST_JOIN_OR_STITCH="STITCH"
>
</FAT>
<BAT NO_BAT_ENTRIES="1" NO_BAT_PERIODS="1" NO_REPEAT_ENTRY="0" NO_REPEAT_TABLE="0" NO_EXECUTE_TABLE="0" >
<PERIOD_INDICES>
0
</PERIOD_INDICES>
</BAT>
<CAT>
</CAT>
</config_filler>
<config_filler host="ALL" dae_type="SIMULATED" >
<FAT
FRAME_FREQUENCY="50.00"
SIZE_PERIOD="262144"
MULTI_HOST_HISTO_STITCH_TYPE="X_DIRECTION"
MULTI_HOST_HISTO_STITCH_OVERLAP="32"
MULTI_HOST_HISTO_STITCH_ORDER="NORMAL"
VIEW_TYPE="HISTOPERIOD_XYT"
VIEW_RATE_MAP_TIME_CONST="10"
VIEW_MAG_X="1"
VIEW_MAG_Y="1"
SIMULATED_EVENT_PATTERN="RADIAL_LINES"
SIMULATED_EVENT_X0="0"
SIMULATED_EVENT_X1="511"
SIMULATED_EVENT_Y0="0"
SIMULATED_EVENT_Y1="511"
SIMULATED_EVENT_T0="0"
SIMULATED_EVENT_T1="19999999"
SIMULATED_EVENTS_PER_FRAME="10000"
SIMULATED_FRAMES_PER_CYCLE="5000"
SIMULATED_PARAM_K1="0.9"
>
</FAT>
<OAT NO_OAT_X_CHANNELS="512" NO_OAT_Y_CHANNELS="512" NO_OAT_T_CHANNELS="1">
<X>
-0.5 0.5
</X>
<Y>
-0.5 0.5
</Y>
<T>
0 200000
</T>
</OAT>
</config_filler>
<config_filler host="ALL" dae_type="FASTCOMTEC" >
<FAT
FRAME_FREQUENCY="50.00"
SIZE_PERIOD="150000"
VIEW_TYPE="HISTOPERIOD_XYT"
VIEW_RATE_MAP_TIME_CONST="3"
VIEW_MAG_X="2"
VIEW_MAG_Y="1"
P7888_PLL_SYNC_METHOD="USING_DUPLICATED_ANODE_PULSE_INPUT"
>
</FAT>
<OAT NO_OAT_X_CHANNELS="500" NO_OAT_Y_CHANNELS="300" NO_OAT_T_CHANNELS="1">
<X>
-0.5 0.5
</X>
<Y>
-0.5 0.5
</Y>
<T>
0 200000
</T>
</OAT>
</config_filler>
<config_filler host="ALL" dae_type="MESYTEC" >
<FAT
FRAME_FREQUENCY="50.00"
SIZE_PERIOD="65536"
VIEW_TYPE="HISTOPERIOD_XYT"
VIEW_RATE_MAP_TIME_CONST="10"
VIEW_MAG_X="8"
VIEW_MAG_Y="1"
MESYTEC_MCPD2_IP="192.168.168.121"
MESYTEC_MCPD2_LAST_IP="192.168.168.122"
MESYTEC_USING_PAIRED_TUBES="YES"
MESYTEC_TUBE_PAIR_LEN="960"
MESYTEC_PULSER="DISABLE"
> <!-- MESYTEC_TUBE_PAIR_LEN = 960 spans full range of observed position data -->
</FAT>
<OAT NO_OAT_X_CHANNELS="128" NO_OAT_Y_CHANNELS="512" NO_OAT_T_CHANNELS="1">
<X>
127.5 126.5
</X>
<Y>
-0.5 0.5
</Y>
<T>
0 200000
</T>
</OAT>
<CAT>
<MESYTEC_MPSD8_CHANNEL_GAINS>
<!-- MPSD8 gain per channel, settable in range 0.50 - 1.88 -->
<!-- MPSD8 #0 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #1 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #2 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #3 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #4 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #5 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #6 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #7 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #8 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #9 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #A --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #B --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #C --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #D --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #E --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #F --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
</MESYTEC_MPSD8_CHANNEL_GAINS>
<MESYTEC_MPSD8_THRESHOLDS>
<!-- MPSD8 thresholds per unit, settable in range 5% - 50% -->
<!-- MPSD8 #0 --> 6
<!-- MPSD8 #1 --> 6
<!-- MPSD8 #2 --> 6
<!-- MPSD8 #3 --> 6
<!-- MPSD8 #4 --> 6
<!-- MPSD8 #5 --> 6
<!-- MPSD8 #6 --> 6
<!-- MPSD8 #7 --> 6
<!-- MPSD8 #8 --> 6
<!-- MPSD8 #9 --> 6
<!-- MPSD8 #A --> 6
<!-- MPSD8 #B --> 6
<!-- MPSD8 #C --> 6
<!-- MPSD8 #D --> 6
<!-- MPSD8 #E --> 6
<!-- MPSD8 #F --> 6
</MESYTEC_MPSD8_THRESHOLDS>
<MESYTEC_TUBE_PAIR_RESISTANCE_RATIOS>
<!-- Resistance ratio R1/R0 per Mesytec tube pair -->
<!-- Set entry to 0. where single tubes are used. -->
<!-- MPSD8 #0 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #1 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #2 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #3 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #4 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #5 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #6 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #7 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #8 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #9 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #A --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #B --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #C --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #D --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #E --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #F --> 1. 1. 1. 1. 1. 1. 1. 1.
</MESYTEC_TUBE_PAIR_RESISTANCE_RATIOS>
<MESYTEC_TUBE_MAGNIFICATIONS>
<!-- Magnification factors for Mesytec position readings, per tube. -->
<!-- Default value 1. -->
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
</MESYTEC_TUBE_MAGNIFICATIONS>
<MESYTEC_TUBE_OFFSETS>
<!-- Offset factors to be added to Mesytec position readings, per tube. -->
<!-- Default value 0. -->
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
</MESYTEC_TUBE_OFFSETS>
<MESYTEC_MPSD8_TUBE_HISTOGRAM_WEIGHTS>
<!-- MPSD8 histogram weights, per tube. -->
<!-- Use positive integer values in this table, default value 100 suggested. -->
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100 100 100 100 100 100 100 100 100
</MESYTEC_MPSD8_TUBE_HISTOGRAM_WEIGHTS>
</CAT>
</config_filler>
<config_filler host="ALL" dae_type="BNL" >
<FAT
FRAME_FREQUENCY="50.00"
SIZE_PERIOD="31744"
MULTI_HOST_HISTO_STITCH_TYPE="X_DIRECTION"
MULTI_HOST_HISTO_STITCH_OVERLAP="8"
MULTI_HOST_HISTO_JOIN_STITCH_ORDER="INVERTED"
VIEW_TYPE="HISTOPERIOD_XYT"
VIEW_RATE_MAP_TIME_CONST="1"
VIEW_MAG_X="0.25"
VIEW_MAG_Y="1"
BNL_SIMEVENTRATE="0"
BNL_FRAME_SCALER="0"
BNL_DATASET_SCALER="0"
BNL_DATASET_TIMER="ENABLE"
BNL_DATASET_FRAME="ENABLE"
BNL_PER_CARD_X_OFFSET="480"
>
</FAT>
<OAT NO_OAT_X_CHANNELS="248" NO_OAT_Y_CHANNELS="128" NO_OAT_T_CHANNELS="1">
<X>
991.5 987.5
</X>
<Y>
-0.5 3.5
</Y>
<T>
0 200000
</T>
</OAT>
</config_filler>
</config_fillers>
</anstohm:anstohm>

View File

@@ -0,0 +1,244 @@
<?xml version = '1.0' encoding = 'UTF-8'?>
<!-- Revised version MJL 2/07 -->
<anstohm:anstohm filler="ansto1" >
<config_server>
<DIR defaultpath="/srv/www/htdocs" />
<DAT filenamepre="DAT" filenameext_BIN="bin" filenameext_CSV="csv" filenameext_XML="xml" filenameext_ZIP="zip" />
</config_server>
<config_fillers>
<config_filler host="ALL">
<DIR defaultpath="/srv/www/htdocs" />
<CFG_ECHO filenamepre="CFG" filenameext="xml" />
<RAW filenamepre="RAW" filenameext="txt" />
<EVT filenamepre="EVT" filenameext="txt" />
<HDS filenamepre="HDS" filenameext="bin.zip" />
<HDD filenamepre="HDD" filenameext="bin.zip" />
<DAT filenamepre="DAT" filenameext_BIN="bin" filenameext_CSV="csv" filenameext_XML="xml" filenameext_ZIP="zip" />
<FAT
DATASET_SOURCE="INTERNAL"
FRAME_SOURCE="INTERNAL"
HARD_VETO_1="ENABLE" HARD_VETO_2="DISABLE" HARD_VETO_3="DISABLE" HARD_VETO_4="DISABLE"
SOFT_VETO_1="DISABLE" SOFT_VETO_2="DISABLE" SOFT_VETO_3="DISABLE" SOFT_VETO_4="DISABLE"
MONITOR_1="ENABLE" MONITOR_2="DISABLE" MONITOR_3="DISABLE"
FRAME_FREQUENCY="50.00"
FRAME_DUTYCYCLE="99"
CLOCK_SCALE="1000"
NOS_PERIODS="1"
SIZE_PERIOD="507904"
COUNT_METHOD="UNLIMITED"
COUNT_SIZE="0"
COUNT_STOP="IMMEDIATE"
EXPAND_OAT_X="0"
EXPAND_OAT_Y="0"
EXPAND_OAT_T="0"
OFFSET_OAT_X="0"
OFFSET_OAT_Y="0"
OFFSET_OAT_T="0"
HISTOGRAM_WEIGHT="1"
HISTOGRAM_MODE="XYTP"
RATE_MAPPING="ENABLE"
TOTAL_HISTOGRAMS="ENABLE"
TEST_HISTOGRAMS="ENABLE"
TEST_HISTO_1D_SIZES="1024"
TEST_HISTO_2D_SIZES="1024"
DATA_MINMAX="ENABLE"
DATA_STREAMING="ZIPBIN"
HISTO_STREAMING="ZIPBIN"
LOG_RAW="DISABLE"
LOG_EVT="DISABLE"
MULTIPLE_DATASETS="ENABLE"
MULTI_HOST_HISTO_STITCH_TYPE="X_DIRECTION"
MULTI_HOST_HISTO_STITCH_OVERLAP="32"
MULTI_HOST_HISTO_JOIN_STITCH_ORDER="INVERTED"
READ_DATA_ORDER_TRANSPOSE_XY="DISABLE"
READ_DATA_ORDER_FLIP_X="DISABLE"
READ_DATA_ORDER_FLIP_Y="ENABLE"
VIEW_TYPE="TOTAL_HISTOGRAM_XY"
VIEW_COLOUR_TABLE="RAIN"
VIEW_SCALING_TYPE="LOG"
VIEW_LOG_SCALING_RANGE="2"
VIEW_ROOT_SCALING_RANGE="2"
VIEW_ROI_XMIN="-1"
VIEW_ROI_XMAX="-1"
VIEW_ROI_YMIN="-1"
VIEW_ROI_YMAX="-1"
VIEW_ROI_1DMIN="-1"
VIEW_ROI_1DMAX="-1"
VIEW_MAG_X="0.25"
VIEW_MAG_Y="0.5"
VIEW_MAG_1D="1"
VIEW_INTERP_X="1"
VIEW_INTERP_Y="1"
VIEW_HISTO_PERIOD="-1"
VIEW_HISTO_OAT_T_BIN="-1"
VIEW_AUTO_REFRESH="1"
VIEW_DISPLAY_FORMAT="DISLIN_PNG"
VIEW_MULTIHOST_JOIN_OR_STITCH="STITCH"
SIMULATED_EVENT_PATTERN="RADIAL_LINES"
SIMULATED_EVENT_X0="0"
SIMULATED_EVENT_X1="991"
SIMULATED_EVENT_Y0="0"
SIMULATED_EVENT_Y1="511"
SIMULATED_EVENT_T0="0"
SIMULATED_EVENT_T1="19999999"
SIMULATED_EVENTS_PER_FRAME="10000"
SIMULATED_FRAMES_PER_CYCLE="1000"
SIMULATED_PARAM_K1="0.9"
P7888_PLL_SYNC_METHOD="USING_DUPLICATED_ANODE_PULSE_INPUT"
MESYTEC_MCPD2_IP="192.168.168.121"
MESYTEC_MCPD2_LAST_IP="192.168.168.122"
MESYTEC_USING_PAIRED_TUBES="YES"
MESYTEC_TUBE_PAIR_LEN="960"
MESYTEC_PULSER="DISABLE"
BNL_SIMEVENTRATE="0"
BNL_FRAME_SCALER="0"
BNL_DATASET_SCALER="0"
BNL_DATASET_TIMER="ENABLE"
BNL_DATASET_FRAME="ENABLE"
BNL_PER_CARD_X_OFFSET="480"
> <!-- MESYTEC_TUBE_PAIR_LEN = 960 spans full range of observed position data -->
</FAT>
<BAT NO_BAT_ENTRIES="1" NO_BAT_PERIODS="1" NO_REPEAT_ENTRY="0" NO_REPEAT_TABLE="0" NO_EXECUTE_TABLE="0" >
<PERIOD_INDICES>
0
</PERIOD_INDICES>
</BAT>
<OAT NO_OAT_X_CHANNELS="992" NO_OAT_Y_CHANNELS="512" NO_OAT_T_CHANNELS="1">
<X>
991.5 990.5
</X>
<Y>
511.5 510.5
</Y>
<T>
0 200000
</T>
</OAT>
<CAT>
<MESYTEC_MPSD8_CHANNEL_GAINS>
<!-- MPSD8 gain per channel, settable in range 0.50 - 1.88 -->
<!-- MPSD8 #0 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #1 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #2 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #3 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #4 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #5 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #6 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #7 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #8 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #9 --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #A --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #B --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #C --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #D --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #E --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
<!-- MPSD8 #F --> 1.00 1.00 1.00 1.00 1.00 1.00 1.00 1.00
</MESYTEC_MPSD8_CHANNEL_GAINS>
<MESYTEC_MPSD8_THRESHOLDS>
<!-- MPSD8 thresholds per unit, settable in range 5% - 50% -->
<!-- MPSD8 #0 --> 6
<!-- MPSD8 #1 --> 6
<!-- MPSD8 #2 --> 6
<!-- MPSD8 #3 --> 6
<!-- MPSD8 #4 --> 6
<!-- MPSD8 #5 --> 6
<!-- MPSD8 #6 --> 6
<!-- MPSD8 #7 --> 6
<!-- MPSD8 #8 --> 6
<!-- MPSD8 #9 --> 6
<!-- MPSD8 #A --> 6
<!-- MPSD8 #B --> 6
<!-- MPSD8 #C --> 6
<!-- MPSD8 #D --> 6
<!-- MPSD8 #E --> 6
<!-- MPSD8 #F --> 6
</MESYTEC_MPSD8_THRESHOLDS>
<MESYTEC_TUBE_PAIR_RESISTANCE_RATIOS>
<!-- Resistance ratio R1/R0 per Mesytec tube pair -->
<!-- Set entry to 0. where single tubes are used. -->
<!-- MPSD8 #0 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #1 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #2 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #3 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #4 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #5 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #6 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #7 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #8 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #9 --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #A --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #B --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #C --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #D --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #E --> 1. 1. 1. 1. 1. 1. 1. 1.
<!-- MPSD8 #F --> 1. 1. 1. 1. 1. 1. 1. 1.
</MESYTEC_TUBE_PAIR_RESISTANCE_RATIOS>
<MESYTEC_TUBE_MAGNIFICATIONS>
<!-- Magnification factors for Mesytec position readings, per tube. -->
<!-- Default value 1. -->
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
</MESYTEC_TUBE_MAGNIFICATIONS>
<MESYTEC_TUBE_OFFSETS>
<!-- Offset factors to be added to Mesytec position readings, per tube. -->
<!-- Default value 0. -->
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
</MESYTEC_TUBE_OFFSETS>
<MESYTEC_MPSD8_TUBE_HISTOGRAM_WEIGHTS>
<!-- MPSD8 histogram weights, per tube. -->
<!-- Use positive integer values in this table, default value 100 suggested. -->
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
</MESYTEC_MPSD8_TUBE_HISTOGRAM_WEIGHTS>
</CAT>
</config_filler>
</config_fillers>
</anstohm:anstohm>

View File

@@ -14,6 +14,18 @@ if {$sim_mode == "true"} {
}
source $cfPath(hmm)/hmm_configuration_common_1.tcl
# Configure to upload a complete configuration to the histogram server.
# In this case it's the main config file plus the FAT, BAT and OAT files
# in the same direcory as the SICS executable (for this example).
# Alternatives:
# - A partial config could be uploaded instead - e.g. just the main config file,
# in that case the main config file points to a set of FAT, BAT OAT files
# located on the server.
# - The histogram server could configure itself from a config file set
# kept on the local file system (not automated presently, manual control only)
# - Or, no configuration at all could be uploaded, the
# histogram server can configure itself using its default config files.
hmm configure hmconfigscript "returnconfigfile $cfPath(hmm)/anstohm_full.xml"
if {$sim_mode == "true"} {
proc ::histogram_memory::hmm_initialize {} {
@@ -62,7 +74,8 @@ proc setmode {mode} {
hmm configure stitch_nxc [expr 480*8 - 1];
hmm configure oat_ntc_eff 1;
}
hmm configure hmconfigscript "returnconfigfile $cfPath(hmm)/anstohm_full_normal.xml"
#hmm configure hmconfigscript "returnconfigfile $cfPath(hmm)/anstohm_full_normal.xml"
hmm configure hmconfigscript "returnconfigfile $cfPath(hmm)/anstohm_full_small.xml"
}
}
}

View File

@@ -1,7 +1,7 @@
# $Revision: 1.11 $
# $Date: 2007-04-10 00:31:41 $
# $Revision: 1.12 $
# $Date: 2007-04-20 01:53:31 $
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
# Last revision by: $Author: dcl $
# Last revision by: $Author: ffr $
# START MOTOR CONFIGURATION
@@ -90,7 +90,7 @@ set ss2d_HiRange [expr $vSlitHome + $vSlitLoRange]
# set movecount high to reduce the frequency of
# hnotify messages to a reasonable level
set move_count 100
set move_count 10
############################
# Motor Controller 1

View File

@@ -0,0 +1,5 @@
MakeMultiChan plc_chan 137.157.204.65 30001
MakeSafetyPLC plc plc_chan 0
source $cfPath(plc)/plc_common_1.tcl

View File

@@ -1,7 +1,7 @@
# $Revision: 1.14 $
# $Date: 2007-04-17 23:32:58 $
# $Revision: 1.15 $
# $Date: 2007-04-20 01:53:31 $
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
# Last revision by: $Author: dcl $
# Last revision by: $Author: ffr $
# Required by server_config.tcl
VarMake Instrument Text Internal
@@ -25,6 +25,7 @@ fileeval $cfPath(motors)/motor_configuration.tcl
########
fileeval $cfPath(plc)/plc.tcl
fileeval $cfPath(counter)/counter.tcl
fileeval $cfPath(hmm)/hmm_configuration.tcl
fileeval $cfPath(nexus)/nxscripts.tcl
@@ -70,7 +71,4 @@ detector_type lock
detector_description 8 curved multiwire segments
detector_description lock
fileeval extraconfig.tcl
MakeMultiChan plc_chan 137.157.204.65 30001
MakeSafetyPLC plc plc_chan 0
fileeval extraconfig.tcl

View File

@@ -1,3 +1,4 @@
config/plc/plc_common_1.tcl
config/counter/counter_common_1.tcl
config/hipadaba/common_hipadaba_configuration.tcl
config/hmm/hmm_configuration_common_1.tcl

View File

@@ -13,14 +13,14 @@ aperture slits ]
# Configurable virtual motors
# obj name path master_obj
set cvirtmotor_hpath [list \
ss1vg ss1vg slits/first top\
ss1vo ss1vo slits/first top\
ss1hg ss1hg slits/first right\
ss1ho ss1ho slits/first right\
ss2vg ss2vg slits/second top\
ss2vo ss2vo slits/second top\
ss2hg ss2hg slits/second right\
ss2ho ss2ho slits/second right\
ss1vg ss1vg slits/first [list top bottom left right]\
ss1vo ss1vo slits/first [list top bottom left right]\
ss1hg ss1hg slits/first [list top bottom left right]\
ss1ho ss1ho slits/first [list top bottom left right]\
ss2vg ss2vg slits/second [list top bottom left right]\
ss2vo ss2vo slits/second [list top bottom left right]\
ss2hg ss2hg slits/second [list top bottom left right]\
ss2ho ss2ho slits/second [list top bottom left right]\
sth sth sample [SplitReply [stth long_name]]\
mth mth monochromator [SplitReply [mtth long_name]]]

View File

@@ -14,6 +14,32 @@ if {$sim_mode == "true"} {
}
source $cfPath(hmm)/hmm_configuration_common_1.tcl
# Configure to upload a complete configuration to the histogram server.
# In this case it's the main config file plus the FAT, BAT and OAT files
# in the same direcory as the SICS executable (for this example).
# Alternatives:
# - A partial config could be uploaded instead - e.g. just the main config file,
# in that case the main config file points to a set of FAT, BAT OAT files
# located on the server.
# - The histogram server could configure itself from a config file set
# kept on the local file system (not automated presently, manual control only)
# - Or, no configuration at all could be uploaded, the
# histogram server can configure itself using its default config files.
proc setmode {mode} {
global cfPath;
switch $mode {
pulser {
hmm configure hmconfigscript "returnconfigfile $cfPath(hmm)/anstohm_full_MESYTEC_PULSER.xml"
}
calibration {
hmm configure hmconfigscript "returnconfigfile $cfPath(hmm)/anstohm_full_nofolding.xml"
}
normal -
default {
hmm configure hmconfigscript "returnconfigfile $cfPath(hmm)/anstohm_full_folding.xml"
}
}
}
if {$sim_mode == "true"} {
proc ::histogram_memory::hmm_initialize {} {

View File

@@ -1,5 +1,5 @@
# $Revision: 1.14 $
# $Date: 2007-04-06 09:32:57 $
# $Revision: 1.15 $
# $Date: 2007-04-20 01:53:31 $
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
# Last revision by: $Author: ffr $
@@ -91,7 +91,7 @@ set ss2d_HiRange [expr $vSlitHome + $vSlitLoRange]
# set movecount high to reduce the frequency of
# hnotify messages to a reasonable level
set move_count 100
set move_count 10
############################
# Motor Controller 1

View File

@@ -0,0 +1,5 @@
MakeMultiChan plc_chan 137.157.204.65 30002
MakeSafetyPLC plc plc_chan 0
source $cfPath(plc)/plc_common_1.tcl

View File

@@ -1,7 +1,7 @@
# $Revision: 1.21 $
# $Date: 2007-04-17 23:32:34 $
# $Revision: 1.22 $
# $Date: 2007-04-20 01:53:31 $
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
# Last revision by: $Author: dcl $
# Last revision by: $Author: ffr $
# Required by server_config.tcl
VarMake Instrument Text Internal
@@ -25,6 +25,7 @@ fileeval $cfPath(motors)/motor_configuration.tcl
########
fileeval $cfPath(plc)/plc.tcl
fileeval $cfPath(counter)/counter.tcl
fileeval $cfPath(hmm)/hmm_configuration.tcl
fileeval $cfPath(nexus)/nxscripts.tcl
@@ -72,5 +73,3 @@ detector_description lock
fileeval extraconfig.tcl
MakeMultiChan plc_chan 137.157.204.65 30002
MakeSafetyPLC plc plc_chan 0

View File

@@ -1,7 +1,7 @@
# SICS common configuration
# $Revision: 1.23 $
# $Date: 2007-04-13 03:13:22 $
# $Revision: 1.24 $
# $Date: 2007-04-20 01:53:31 $
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
# Last revision by $Author: ffr $
@@ -15,7 +15,8 @@ hmm $cfParent/hmm\
scan $cfParent/scan\
counter $cfParent/counter\
nexus $cfParent/nexus\
hipadaba $cfParent/hipadaba]
hipadaba $cfParent/hipadaba\
plc $cfParent/plc]
ServerOption LogFileBaseName $sicsroot/log/serverlog
@@ -51,7 +52,7 @@ sics_release [lindex $tmpstr [expr [llength $tmpstr] - 1]]
sics_release lock
VarMake sics_revision_num Text Internal
set tmpstr [string map {"$" ""} {$Revision: 1.23 $}]
set tmpstr [string map {"$" ""} {$Revision: 1.24 $}]
sics_revision_num [lindex $tmpstr [expr [llength $tmpstr] - 1]]
sics_revision_num lock

View File

@@ -1,7 +1,7 @@
# Some useful functions for SICS configuration.
# $Revision: 1.2 $
# $Date: 2007-03-13 21:27:28 $
# $Revision: 1.3 $
# $Date: 2007-04-20 01:53:31 $
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
# Last revision by $Author: ffr $
@@ -54,7 +54,9 @@ proc getinfo {object} {
set wc [format "%s_*" $object];
set objlist [sicslist match $wc];
foreach v $objlist {
clientput [$v];
if { [SplitReply [sicslist $v type]]== "SicsVariable"} {
clientput [$v];
}
}
}
publish getinfo spy

View File

@@ -12,6 +12,7 @@
#include "multichan.h"
#include "nwatch.h"
#include "safetyplc.h"
#include "sicsvar.h"
extern int DMC2280MotionControl;
@@ -40,6 +41,25 @@ extern int DMC2280MotionControl;
#define MOTOR_BOTH_BITS (MOTOR_ENABLED_BIT | MOTOR_DISABLED_BIT)
#define ACCESS_BOTH_BITS (ACCESS_LOCKED_BIT | ACCESS_UNLOCKED_BIT)
int PLC_UserPriv = 0; /* Internal */
typedef enum {
Unknown_low, Invalid_high, Enabled, Disabled,
Opened, Closed, Locked, Unlocked, True, False,}PLC_STATUS;
char *plc_states[] = {
"Unknown_low", "Invalid_high", "Enabled",
"Disabled", "Opened", "Closed",
"Locked", "Unlocked", "True", "False"};
typedef enum {
Key,Secondary,Tertiary,MotionControl,Access,
DC,Exit,Trip,Fault,Operate,Relay,Ready,}PLC_PARAM;
char *plc_parname[] = {
"plc_key","plc_secondary","plc_tertiary","plc_motioncontrol",
"plc_access","plc_dc","plc_exit","plc_trip",
"plc_fault","plc_operate","plc_relay","plc_ready"};
typedef struct __SafetyPLCController SafetyPLCController, *pSafetyPLCController;
struct __SafetyPLCController {
@@ -47,6 +67,7 @@ struct __SafetyPLCController {
pMultiChan mcc; /* associated MultiChan object */
int iGetOut;
int iValue;
int oldValue;
pNWTimer nw_tmr; /* NetWait timer handle */
int timeout;
struct timeval tvSend;
@@ -69,6 +90,8 @@ struct __command {
void* cntx;
};
static int PLC_GetState(void *pData, char *param, PLC_STATUS *retState);
static int PLC_Tx(void* ctx)
{
int iRet = 1;
@@ -202,8 +225,11 @@ static void PLC_Notify(void* context, int event)
*/
static int GetCallback(void* ctx, const char* resp, int resp_len)
{
int iRet;
int iRet,i;
unsigned int iRead;
PLC_STATUS plcState;
pSicsVariable plcVar=NULL;
pSafetyPLCController self = (pSafetyPLCController) ctx;
if (resp_len < 0) {
DMC2280MotionControl = -1;
@@ -226,7 +252,15 @@ static int GetCallback(void* ctx, const char* resp, int resp_len)
else /* disabled */
DMC2280MotionControl = 0;
}
if (self->oldValue != self->iValue) {
for (i=0; i < sizeof(plc_parname)/sizeof(plc_parname[0]); i++) {
plcVar = (pSicsVariable)FindCommandData(pServ->pSics,plc_parname[i],"SicsVariable");
PLC_GetState(self,plc_parname[i],&plcState);
VarSetText(plcVar,plc_states[plcState],PLC_UserPriv);
}
}
self->oldValue = self->iValue;
self->iGetOut = 0;
return 0;
}
@@ -249,128 +283,117 @@ static int MyTimerCallback(void* context, int mode)
return 1;
}
static int PLC_GetState(void *pData, char *param, PLC_STATUS *retState)
{
pSafetyPLCController self = (pSafetyPLCController) pData;
if (strcasecmp(param, plc_parname[Key]) == 0) {
*retState = Unknown_low;
if ((self->iValue & KEY_BOTH_BITS) == KEY_BOTH_BITS)
*retState = Invalid_high;
else if (self->iValue & KEY_ENABLED_BIT)
*retState = Enabled;
else if (self->iValue & KEY_DISABLED_BIT)
*retState = Disabled;
return OKOK;
}
if (strcasecmp(param, plc_parname[Secondary]) == 0) {
*retState = Unknown_low;
if ((self->iValue & SEC_BOTH_BITS) == SEC_BOTH_BITS)
*retState = Invalid_high;
if (self->iValue & SEC_OPENED_BIT)
*retState = Opened;
else if (self->iValue & SEC_CLOSED_BIT)
*retState = Closed;
return OKOK;
}
if (strcasecmp(param, plc_parname[Tertiary]) == 0) {
*retState = Unknown_low;
if ((self->iValue & TER_BOTH_BITS) == TER_BOTH_BITS)
*retState = Invalid_high;
if (self->iValue & TER_OPENED_BIT)
*retState = Opened;
else if (self->iValue & TER_CLOSED_BIT)
*retState = Closed;
return OKOK;
}
if (strcasecmp(param, plc_parname[MotionControl]) == 0) {
*retState = Unknown_low;
if ((self->iValue & MOTOR_BOTH_BITS) == MOTOR_BOTH_BITS)
*retState = Invalid_high;
else if (self->iValue & MOTOR_ENABLED_BIT)
*retState = Enabled;
else if (self->iValue & MOTOR_DISABLED_BIT)
*retState = Disabled;
return OKOK;
}
if (strcasecmp(param, plc_parname[Access]) == 0) {
*retState = Unknown_low;
if ((self->iValue & ACCESS_BOTH_BITS) == ACCESS_BOTH_BITS)
*retState = Invalid_high;
else if (self->iValue & ACCESS_LOCKED_BIT)
*retState = Locked;
else if (self->iValue & ACCESS_UNLOCKED_BIT)
*retState = Unlocked;
return OKOK;
}
if (strcasecmp(param, plc_parname[DC]) == 0) {
*retState = False;
if (self->iValue & DC_POWEROK_BIT)
*retState = True;
return OKOK;
}
if (strcasecmp(param, plc_parname[Exit]) == 0) {
*retState = False;
if (self->iValue & EXIT_INPROGRESS_BIT)
*retState = True;
return OKOK;
}
if (strcasecmp(param, plc_parname[Trip]) == 0) {
*retState = False;
if (self->iValue & SAFETY_TRIPPED_BIT)
*retState = True;
return OKOK;
}
if (strcasecmp(param, plc_parname[Fault]) == 0) {
*retState = False;
if (self->iValue & SAFETY_MALFUNCTION_BIT)
*retState = True;
return OKOK;
}
if (strcasecmp(param, plc_parname[Operate]) == 0) {
*retState = False;
if (self->iValue & TER_OPERATE_BIT)
*retState = True;
return OKOK;
}
if (strcasecmp(param, plc_parname[Relay]) == 0) {
*retState = False;
if (self->iValue & RELAY_ENABLED_BIT)
*retState = True;
return OKOK;
}
if (strcasecmp(param, plc_parname[Ready]) == 0) {
*retState = False;
if (self->iValue & INST_READY_BIT)
*retState = True;
return OKOK;
}
return 0;
}
static int PLC_Print(SConnection *pCon, SicsInterp *pSics,
void *pData, char *name, char *param)
{
char line[132];
pSafetyPLCController self = (pSafetyPLCController) pData;
if (strcasecmp(param, "key") == 0) {
char* state = "unknown(low)";
if ((self->iValue & KEY_BOTH_BITS) == KEY_BOTH_BITS)
state = "invalid(high)";
else if (self->iValue & KEY_ENABLED_BIT)
state = "enabled";
else if (self->iValue & KEY_DISABLED_BIT)
state = "disabled";
snprintf(line, 132, "%s.Key = %s", name, state);
PLC_STATUS state;
if (PLC_GetState(pData, param, &state) != OKOK) {
return 0;
} else {
snprintf(line, 132, "%s.%s = %s", name, param, plc_states[state]);
SCWrite(pCon, line, eStatus);
return OKOK;
}
if (strcasecmp(param, "secondary") == 0) {
char* state = "unknown(low)";
if ((self->iValue & SEC_BOTH_BITS) == SEC_BOTH_BITS)
state = "invalid(high)";
if (self->iValue & SEC_OPENED_BIT)
state = "opened";
else if (self->iValue & SEC_CLOSED_BIT)
state = "closed";
snprintf(line, 132, "%s.Secondary = %s", name, state);
SCWrite(pCon, line, eStatus);
return OKOK;
}
if (strcasecmp(param, "tertiary") == 0) {
char* state = "unknown(low)";
if ((self->iValue & TER_BOTH_BITS) == TER_BOTH_BITS)
state = "invalid(high)";
if (self->iValue & TER_OPENED_BIT)
state = "opened";
else if (self->iValue & TER_CLOSED_BIT)
state = "closed";
snprintf(line, 132, "%s.Tertiary = %s", name, state);
SCWrite(pCon, line, eStatus);
return OKOK;
}
if (strcasecmp(param, "motioncontrol") == 0) {
char* state = "unknown(low)";
if ((self->iValue & MOTOR_BOTH_BITS) == MOTOR_BOTH_BITS)
state = "invalid(high)";
else if (self->iValue & MOTOR_ENABLED_BIT)
state = "enabled";
else if (self->iValue & MOTOR_DISABLED_BIT)
state = "disabled";
snprintf(line, 132, "%s.MotionControl = %s", name, state);
SCWrite(pCon, line, eStatus);
return OKOK;
}
if (strcasecmp(param, "access") == 0) {
char* state = "unknown(low)";
if ((self->iValue & ACCESS_BOTH_BITS) == ACCESS_BOTH_BITS)
state = "invalid(high)";
else if (self->iValue & ACCESS_LOCKED_BIT)
state = "locked";
else if (self->iValue & ACCESS_UNLOCKED_BIT)
state = "unlocked";
snprintf(line, 132, "%s.Access = %s", name, state);
SCWrite(pCon, line, eStatus);
return OKOK;
}
if (strcasecmp(param, "dc") == 0) {
char* state = "false";
if (self->iValue & DC_POWEROK_BIT)
state = "true";
snprintf(line, 132, "%s.DC = %s", name, state);
SCWrite(pCon, line, eStatus);
return OKOK;
}
if (strcasecmp(param, "exit") == 0) {
char* state = "false";
if (self->iValue & EXIT_INPROGRESS_BIT)
state = "true";
snprintf(line, 132, "%s.Exit = %s", name, state);
SCWrite(pCon, line, eStatus);
return OKOK;
}
if (strcasecmp(param, "trip") == 0) {
char* state = "false";
if (self->iValue & SAFETY_TRIPPED_BIT)
state = "true";
snprintf(line, 132, "%s.Trip = %s", name, state);
SCWrite(pCon, line, eStatus);
return OKOK;
}
if (strcasecmp(param, "fault") == 0) {
char* state = "false";
if (self->iValue & SAFETY_MALFUNCTION_BIT)
state = "true";
snprintf(line, 132, "%s.Fault = %s", name, state);
SCWrite(pCon, line, eStatus);
return OKOK;
}
if (strcasecmp(param, "operate") == 0) {
char* state = "false";
if (self->iValue & TER_OPERATE_BIT)
state = "true";
snprintf(line, 132, "%s.Operate = %s", name, state);
SCWrite(pCon, line, eStatus);
return OKOK;
}
if (strcasecmp(param, "relay") == 0) {
char* state = "false";
if (self->iValue & RELAY_ENABLED_BIT)
state = "true";
snprintf(line, 132, "%s.Relay = %s", name, state);
SCWrite(pCon, line, eStatus);
return OKOK;
}
if (strcasecmp(param, "ready") == 0) {
char* state = "false";
if (self->iValue & INST_READY_BIT)
state = "true";
snprintf(line, 132, "%s.Ready = %s", name, state);
SCWrite(pCon, line, eStatus);
return OKOK;
}
return 0;
}
static int PLC_Action(SConnection *pCon, SicsInterp *pSics,
@@ -385,22 +408,25 @@ static int PLC_Action(SConnection *pCon, SicsInterp *pSics,
}
else if (argc == 2) {
if (strcasecmp(argv[1], "list") == 0) {
PLC_Print(pCon, pSics, pData, argv[0], "key");
PLC_Print(pCon, pSics, pData, argv[0], "secondary");
PLC_Print(pCon, pSics, pData, argv[0], "tertiary");
PLC_Print(pCon, pSics, pData, argv[0], "motioncontrol");
PLC_Print(pCon, pSics, pData, argv[0], "access");
PLC_Print(pCon, pSics, pData, argv[0], "dc");
PLC_Print(pCon, pSics, pData, argv[0], "exit");
PLC_Print(pCon, pSics, pData, argv[0], "trip");
PLC_Print(pCon, pSics, pData, argv[0], "fault");
PLC_Print(pCon, pSics, pData, argv[0], "operate");
PLC_Print(pCon, pSics, pData, argv[0], "relay");
PLC_Print(pCon, pSics, pData, argv[0], "ready");
PLC_Print(pCon, pSics, pData, argv[0], plc_parname[Key]);
PLC_Print(pCon, pSics, pData, argv[0], plc_parname[Secondary]);
PLC_Print(pCon, pSics, pData, argv[0], plc_parname[Tertiary]);
PLC_Print(pCon, pSics, pData, argv[0], plc_parname[MotionControl]);
PLC_Print(pCon, pSics, pData, argv[0], plc_parname[Access]);
PLC_Print(pCon, pSics, pData, argv[0], plc_parname[DC]);
PLC_Print(pCon, pSics, pData, argv[0], plc_parname[Exit]);
PLC_Print(pCon, pSics, pData, argv[0], plc_parname[Trip]);
PLC_Print(pCon, pSics, pData, argv[0], plc_parname[Fault]);
PLC_Print(pCon, pSics, pData, argv[0], plc_parname[Operate]);
PLC_Print(pCon, pSics, pData, argv[0], plc_parname[Relay]);
PLC_Print(pCon, pSics, pData, argv[0], plc_parname[Ready]);
return OKOK;
}
if (PLC_Print(pCon, pSics, pData, argv[0], argv[1]))
return OKOK;
} else if (argc == 3) {
if (strcasecmp(argv[1], "hattach") == 0) {
}
}
snprintf(line, 132, "%s does not understand %s", argv[0], argv[1]);
SCWrite(pCon, line, eError);
@@ -451,8 +477,10 @@ int SafetyPLCFactory(SConnection *pCon, SicsInterp *pSics,
void *pData, int argc, char *argv[])
{
pSafetyPLCController pNew = NULL;
int iRet, status;
int iRet, status, i;
char pError[256];
pSicsVariable plcVar=NULL;
PLC_STATUS plcState;
if(argc < 4)
{
@@ -479,6 +507,12 @@ int SafetyPLCFactory(SConnection *pCon, SicsInterp *pSics,
SCWrite(pCon,pError,eError);
}
for (i=0; i < sizeof(plc_parname)/sizeof(plc_parname[0]); i++) {
plcVar = VarCreate(PLC_UserPriv,veText,plc_parname[i]);
PLC_GetState(pNew,plc_parname[i],&plcState);
VarSetText(plcVar,plc_states[plcState],PLC_UserPriv);
AddCommand(pSics,plc_parname[i],VarWrapper,(KillFunc)VarKill,plcVar);
}
/*
create the command
*/