source: trunk/FACT++/scripts/crateReset.js@ 20022

Last change on this file since 20022 was 18219, checked in by dneise, 9 years ago
resetting Configure before crate reset
File size: 4.0 KB
Line 
1'use strict';
2
3// ==========================================================================
4// Reset Crate
5// ==========================================================================
6
7// call it with: .js doCrateReset.js crate0=true crate3=true
8// or: DIM_CONTROL/START doCrateReset.js crate0=true crate3=true
9
10// -------------------------------------------------------------------------
11
12include('scripts/CheckStates.js');
13
14function crateReset(crate)
15{
16 var msg = "Starting crate reset:";
17
18 var cnt = 0;
19 for (var i=0; i<4; i++)
20 if (crate[i])
21 {
22 cnt++;
23 msg += " "+i;
24 }
25
26 if (cnt==0)
27 {
28 console.out("No crate to reset.");
29 return;
30 }
31
32 dim.log(msg);
33
34 console.out("Checking availability of servers...");
35
36 var table =
37 [
38 [ "MCP" ],
39 [ "FTM_CONTROL" ],
40 [ "FAD_CONTROL" ],
41 ];
42 if (!checkStates(table, 3000))
43 throw new Error("Either MCP, FTM_CONTROL or FAD_CONTROL not online.");
44
45 // No data taking should be in progress
46 // Trigger must be switched off
47 checkSend(["MCP", "FAD_CONTROL", "FTM_CONTROL" ]);
48
49
50 var mcp = dim.state("MCP");
51 if (mcp.name=="TriggerOn" || mcp.state=="TakingData")
52 dim.send("MCP/STOP");
53 if (mcp.name.substr(0,7)=="kConfig")
54 dim.send("MCP/RESET");
55 if (dim.state("FTM_CONTROL").name=="TriggerOn")
56 dim.send("FTM_CONTROL/STOP_TRIGGER");
57 if (dim.state("FTM_CONTROL").name.indexOf("Config")==0)
58 dim.send("FTM_CONTROL/RESET_CONFIGURE");
59
60 console.out("Checking status of servers...");
61
62 var table =
63 [
64 [ "MCP", [ "Idle", "Connected" ]],
65 [ "FTM_CONTROL", [ "Valid" ] ],
66 [ "FAD_CONTROL", [ "Disengaged", "Disconnected", "Connecting", "Connected" ] ],
67 ];
68 if (!checkStates(table, 3000, true))
69 throw new Error("Either MCP, FTM_CONTROL or FAD_CONTROL not in a state in which it ought to be.");
70
71 // FTUs must be switched off
72
73 console.out("Disable FTUs...");
74
75 //checkSend(["FTM_CONTROL"]);
76 dim.send("FTM_CONTROL/ENABLE_FTU", -1, false);
77 v8.sleep(1000);
78
79 // Boards in the crates must be disconnected
80
81 //checkSend(["FAD_CONTROL"]);
82
83 dim.log("Disconnecting crates.");
84
85 if (dim.state("FAD_CONTROL").name=="Connecting" || dim.state("FAD_CONTROL").name=="Connected")
86 for (var i=0; i<10; i++)
87 {
88 for (var j=0; j<4; j++)
89 if (crate[j])
90 {
91 console.out("Sending DISCONNECT "+(j*10+i));
92 dim.send("FAD_CONTROL/DISCONNECT", j*10+i);
93 }
94 }
95
96 v8.sleep(2000);
97 if (!checkStates([[ "FAD_CONTROL", [ "Disengaged", "Disconnected", "Connected" ] ]]))
98 throw new Error("FAD_CONTROL neither Disengaged, Disconnected not Connected.");
99
100
101 // Reset crates
102
103 dim.log("Sending reset.");
104
105 if (cnt==4)
106 dim.send("FTM_CONTROL/RESET_CAMERA");
107 else
108 {
109 for (var i=0; i<4; i++)
110 if (crate[i])
111 {
112 console.out("Sending RESET_CRATE "+i);
113 dim.send("FTM_CONTROL/RESET_CRATE", i);
114 }
115 }
116
117 // We have to wait a bit
118
119 v8.sleep(3200);
120
121 // Reconnect all boards
122
123 dim.log("Waiting for connection.");
124
125 if (dim.state("FAD_CONTROL").name=="Disengaged")
126 {
127 dim.send("Waiting 38s for crates to finish reset.");
128 v8.sleep(38000);
129 dim.send("FAD_CONTROL", "START");
130 }
131 else
132 for (var i=0; i<10; i++)
133 {
134 v8.sleep(3200);
135 for (var j=0; j<4; j++)
136 if (crate[j])
137 {
138 console.out("Sending CONNECT "+(j*10+i));
139 dim.send("FAD_CONTROL/CONNECT", j*10+i);
140 }
141 }
142
143
144 // Reconnect all FTUs
145
146 console.out("Enable FTUs...");
147
148 v8.sleep(1000);
149 dim.send("FTM_CONTROL/ENABLE_FTU", -1, true);
150 v8.sleep(3000);
151 dim.send("FTM_CONTROL/PING");
152 v8.sleep(1000);
153
154 dim.wait("FAD_CONTROL", "Connected", 3000);
155
156 // Done
157
158 dim.log("Crate reset finished.");
159}
Note: See TracBrowser for help on using the repository browser.