| 1 | #!/usr/bin/python
|
|---|
| 2 | ##############################################################
|
|---|
| 3 | #
|
|---|
| 4 | # CommunicateWithVME.py
|
|---|
| 5 | # Handles the communication with the VME crate
|
|---|
| 6 | # can send commands to the VME crate
|
|---|
| 7 | #
|
|---|
| 8 | #
|
|---|
| 9 | # Michael Rissi 05/2009
|
|---|
| 10 | #
|
|---|
| 11 | #############################################################
|
|---|
| 12 |
|
|---|
| 13 | import GlobalVariables
|
|---|
| 14 | import threading
|
|---|
| 15 | import _VME
|
|---|
| 16 | import time
|
|---|
| 17 | def GetRate(module,channel):
|
|---|
| 18 | _VME.V560_Clear_Scales( module)
|
|---|
| 19 | beginCounter=_VME. V560_Read_Counter( module, channel)
|
|---|
| 20 | GlobalVariables.ServerMessage = "Evaluating rates (2 seconds)..."
|
|---|
| 21 | time.sleep(2)
|
|---|
| 22 | endCounter = _VME. V560_Read_Counter( module, channel)
|
|---|
| 23 | return (endCounter-beginCounter)/2000.
|
|---|
| 24 |
|
|---|
| 25 | def GetRates(module):
|
|---|
| 26 | _VME.V560_Clear_Scales( module)
|
|---|
| 27 | beginCounter =[0,0,0,0,
|
|---|
| 28 | 0,0,0,0,
|
|---|
| 29 | 0,0,0,0,
|
|---|
| 30 | 0,0,0,0]
|
|---|
| 31 | endCounter = [0,0,0,0,
|
|---|
| 32 | 0,0,0,0,
|
|---|
| 33 | 0,0,0,0,
|
|---|
| 34 | 0,0,0,0]
|
|---|
| 35 | rates = ["rates",
|
|---|
| 36 | 0,0,0,0,
|
|---|
| 37 | 0,0,0,0,
|
|---|
| 38 | 0,0,0,0,
|
|---|
| 39 | 0,0,0,0]
|
|---|
| 40 |
|
|---|
| 41 | for i in range(0,16):
|
|---|
| 42 | beginCounter[i]=_VME. V560_Read_Counter( module, i)
|
|---|
| 43 | #GlobalVariables.ServerMessage = str(beginCounter[i])
|
|---|
| 44 | #GlobalVariables.ServerMessage = "Evaluating rates..."
|
|---|
| 45 | time.sleep(2)
|
|---|
| 46 | for i in range(0,16):
|
|---|
| 47 | endCounter[i] = _VME. V560_Read_Counter( module, i)
|
|---|
| 48 | #GlobalVariables.ServerMessage = str(endCounter[i])
|
|---|
| 49 | rates[i+1] =(endCounter[i]-beginCounter[i])/2000.
|
|---|
| 50 | return rates
|
|---|
| 51 |
|
|---|
| 52 | class GimmeRates(threading.Thread):
|
|---|
| 53 | rates=["rates",
|
|---|
| 54 | 0,0,0,0,
|
|---|
| 55 | 0,0,0,0,
|
|---|
| 56 | 0,0,0,0,
|
|---|
| 57 | 0,0,0,0]
|
|---|
| 58 | module = 1
|
|---|
| 59 | def run(self):
|
|---|
| 60 | oldcommand=GlobalVariables.UserInput
|
|---|
| 61 | while(GlobalVariables.UserInput[1:]!="exit" and GlobalVariables.UserInput[1:] != "EXIT"):
|
|---|
| 62 | time.sleep(0.001)
|
|---|
| 63 | newrates = GetRates(self.module)
|
|---|
| 64 | self.rates=newrates
|
|---|
| 65 |
|
|---|
| 66 | class ParseUserInput(threading.Thread):
|
|---|
| 67 | gimmeRates=GimmeRates()
|
|---|
| 68 | def Parse(self,Command):
|
|---|
| 69 | Command = Command[1:]
|
|---|
| 70 | #GlobalVariables.ServerMessage = "PARSING: " + Command
|
|---|
| 71 | sCommand=Command.split()
|
|---|
| 72 | error_code=0
|
|---|
| 73 | #python lacks switch...
|
|---|
| 74 | try:
|
|---|
| 75 | VMEModule=sCommand[0]
|
|---|
| 76 | if(VMEModule == "help"):
|
|---|
| 77 | GlobalVariables.ServerMessage = "please use \'<V812|V560|Triggerboard> help\' "
|
|---|
| 78 | #GlobalVariables.ServerMessage="please use \'<V812|V560|Triggerboard> help\' "
|
|---|
| 79 |
|
|---|
| 80 | # now do the stuff for the V560:
|
|---|
| 81 | if(VMEModule == "V560"):
|
|---|
| 82 | V560Command=sCommand[1]
|
|---|
| 83 | if(V560Command=="help"):
|
|---|
| 84 | GlobalVariables.ServerMessage = "available functions are: \n"
|
|---|
| 85 | GlobalVariables.ServerMessage += "V560 GetRate <module#> <channel#>\n"
|
|---|
| 86 | GlobalVariables.ServerMessage += "V560 GetRates <module#\n "
|
|---|
| 87 | time.sleep(0.05)
|
|---|
| 88 |
|
|---|
| 89 | if(V560Command=="GetRate"):
|
|---|
| 90 | #GlobalVariables.ServerMessage = "trying to get rate"
|
|---|
| 91 | #time.sleep(0.05)
|
|---|
| 92 |
|
|---|
| 93 |
|
|---|
| 94 | try:
|
|---|
| 95 | module = int(sCommand[2])
|
|---|
| 96 | channel= int(sCommand[3])
|
|---|
| 97 | if(module!= self.gimmeRates.module):
|
|---|
| 98 | self.gimmeRates.module=module
|
|---|
| 99 | GlobalVariables.ServerMessage = "please wait... (5sec)"
|
|---|
| 100 | time.sleep(5)
|
|---|
| 101 |
|
|---|
| 102 | GlobalVariables.ServerMessage = str(self.gimmeRates.rates[channel])
|
|---|
| 103 | time.sleep(0.01)
|
|---|
| 104 | except:
|
|---|
| 105 | GlobalVariables.ServerMessage = "Syntax Error (GetRate)"
|
|---|
| 106 | time.sleep(0.01)
|
|---|
| 107 | #GlobalVariables.Rates[int(channel)] = GetRates(int(module),int(channel))
|
|---|
| 108 |
|
|---|
| 109 | if(V560Command=="GetRates" or V560Command=="GR"):
|
|---|
| 110 | GlobalVariables.ServerMessage = "trying to get rates"
|
|---|
| 111 | time.sleep(0.01)
|
|---|
| 112 | try:
|
|---|
| 113 | module = int(sCommand[2])
|
|---|
| 114 | if(module!= self.gimmeRates.module):
|
|---|
| 115 | self.gimmeRates.module=module
|
|---|
| 116 | GlobalVariables.ServerMessage = "please wait... (5sec)"
|
|---|
| 117 | time.sleep(5)
|
|---|
| 118 | #GlobalVariables.ServerMessage = "RATES:"
|
|---|
| 119 | GlobalVariables.ServerMessage = str(self.gimmeRates.rates)
|
|---|
| 120 | time.sleep(0.01)
|
|---|
| 121 | except:
|
|---|
| 122 | GlobalVariables.ServerMessage = "Syntax Error (GetRates)"
|
|---|
| 123 | time.sleep(0.05)
|
|---|
| 124 | #GlobalVariables.Rates[int(channel)] = GetRates(int(module),int(channel))
|
|---|
| 125 |
|
|---|
| 126 |
|
|---|
| 127 | # now do the stuff for the V812:
|
|---|
| 128 | elif(VMEModule == "V812"):
|
|---|
| 129 | V812Command=sCommand[1]
|
|---|
| 130 | if(V812Command=="help"):
|
|---|
| 131 | GlobalVariables.ServerMessage = "available functions are: \n"
|
|---|
| 132 | GlobalVariables.ServerMessage += "V812 SetHexPat <module#[1-10]> <HexPattern[0x0000-0xFFFF>\n"
|
|---|
| 133 | GlobalVariables.ServerMessage += "V812 SetThresh <module#[1-10]> <channel#[0-15]> <thresh[0-255]>\n"
|
|---|
| 134 | GlobalVariables.ServerMessage += "V812 SetAllThresh <module#[1-10]> <thresh[0-255]>\n"
|
|---|
| 135 | GlobalVariables.ServerMessage += "V812 SetMajLevel <module#[1-10]> <MajLev[1-20]>\n"
|
|---|
| 136 | GlobalVariables.ServerMessage += "V812 SetMajThresh <module#[1-10]> <MajThr[0-255]>\n"
|
|---|
| 137 | GlobalVariables.ServerMessage += "V812 SetDeadTime <module#[1-10]> <Block [0-1]> <DeadTime[0-255]>\n"
|
|---|
| 138 | time.sleep(0.05)
|
|---|
| 139 | #set the hexpattern:
|
|---|
| 140 | elif(V812Command=="SetHexPat"):
|
|---|
| 141 | GlobalVariables.ServerMessage = "trying to set the hexpattern:"
|
|---|
| 142 | time.sleep(0.05)
|
|---|
| 143 | try:
|
|---|
| 144 | module = int(sCommand[2])
|
|---|
| 145 | hexpat = int(sCommand[3],16)
|
|---|
| 146 | #print hexpat
|
|---|
| 147 | # hexpat="ddd"
|
|---|
| 148 | GlobalVariables.ServerMessage = "setting module "+str(module)+" to hexpat: "+str(hex(hexpat))
|
|---|
| 149 | time.sleep(0.05)
|
|---|
| 150 | try:
|
|---|
| 151 | print "setting it now..."
|
|---|
| 152 | error_code=_VME.V812_Set_Pattern_Inhibit_Hex(module, hexpat)
|
|---|
| 153 | GlobalVariables.ServerMessage = "success! "
|
|---|
| 154 | time.sleep(0.05)
|
|---|
| 155 |
|
|---|
| 156 | except:
|
|---|
| 157 | VME_ErrorPrint(error_code)
|
|---|
| 158 | print "FAILED"
|
|---|
| 159 | except:
|
|---|
| 160 | GlobalVariables.ServerMessage = "Syntax error (SetHexPat)"
|
|---|
| 161 |
|
|---|
| 162 |
|
|---|
| 163 | time.sleep(0.05)
|
|---|
| 164 | elif(V812Command=="SetAllThresh"):
|
|---|
| 165 | print "trying to set all the threshold:"
|
|---|
| 166 | try:
|
|---|
| 167 | module = int(sCommand[2])
|
|---|
| 168 | thresh = int(sCommand[3])
|
|---|
| 169 | GlobalVariables.ServerMessage="Setting all thresholds...\n"
|
|---|
| 170 | for channel in range(0,16):
|
|---|
| 171 | GlobalVariables.ServerMessage += "setting threshold of channel: "+str(channel)+ " in module "+str(module)+" to: "+str(thresh)+"\n"
|
|---|
| 172 | GlobalVariables.ServerMessage += "success: "+str(_VME.V812_Set_Threshold(module, channel, thresh))+"\n"
|
|---|
| 173 | time.sleep(0.05)
|
|---|
| 174 |
|
|---|
| 175 |
|
|---|
| 176 | except:
|
|---|
| 177 | print "Syntax error (SetAllThresh) "
|
|---|
| 178 | elif(V812Command=="SetThresh"):
|
|---|
| 179 | GlobalVariables.ServerMessage = "trying to set the threshold:"
|
|---|
| 180 | time.sleep(0.05)
|
|---|
| 181 | try:
|
|---|
| 182 | module = int(sCommand[2])
|
|---|
| 183 | channel = int(sCommand[3])
|
|---|
| 184 | thresh = int(sCommand[4])
|
|---|
| 185 | GlobalVariables.ServerMessage = "setting threshold of channel: "+str(channel)+ " in module "+str(module)+" to: "+str(thresh)
|
|---|
| 186 | GlobalVariables.ServerMessage += "success: "+str(_VME.V812_Set_Threshold(module, channel, thresh))
|
|---|
| 187 | time.sleep(0.05)
|
|---|
| 188 | except:
|
|---|
| 189 | GlobalVariables.ServerMessage = "Syntax error (SetThresh) "
|
|---|
| 190 | time.sleep(0.05)
|
|---|
| 191 | elif(V812Command=="SetMajLevel"):
|
|---|
| 192 | GlobalVariables.ServerMessage = "trying to set the majority level:"
|
|---|
| 193 | time.sleep(0.05)
|
|---|
| 194 | try:
|
|---|
| 195 | module = int(sCommand[2])
|
|---|
| 196 | level = int(sCommand[3])
|
|---|
| 197 | GlobalVariables.ServerMessage = "setting maj. level of module "+str(module)+" to: "+str(level)
|
|---|
| 198 | GlobalVariables.ServerMessage += "success: "+str(_VME.V812_Set_Majority_Level(module,level))
|
|---|
| 199 | time.sleep(0.05)
|
|---|
| 200 | except:
|
|---|
| 201 | GlobalVariables.ServerMessage = "Syntax error (SetMajLevel)"
|
|---|
| 202 | time.sleep(0.05)
|
|---|
| 203 |
|
|---|
| 204 | elif(V812Command=="SetMajThresh"):
|
|---|
| 205 | GlobalVariables.ServerMessage = "trying to set the majority threshold:"
|
|---|
| 206 | time.sleep(0.05)
|
|---|
| 207 | try:
|
|---|
| 208 | module = int(sCommand[2])
|
|---|
| 209 | thresh = int(sCommand[3])
|
|---|
| 210 | GlobalVariables.ServerMessage = "setting maj. level of module "+str(module)+" to: "+str(thresh)
|
|---|
| 211 | GlobalVariables.ServerMessage += "success: "+str(_VME.V812_Set_Majority_Threshold(module, thresh))
|
|---|
| 212 | time.sleep(0.05)
|
|---|
| 213 | except:
|
|---|
| 214 | GlobalVariables.ServerMessage = "Syntax error (SetMajThresh)"
|
|---|
| 215 | time.sleep(0.05)
|
|---|
| 216 |
|
|---|
| 217 | elif(V812Command=="SetDeadTime"):
|
|---|
| 218 | GlobalVariables.ServerMessage = "trying to set the majority threshold:"
|
|---|
| 219 | time.sleep(0.05)
|
|---|
| 220 | try:
|
|---|
| 221 | module = int(sCommand[2])
|
|---|
| 222 | block = int(sCommand[3])
|
|---|
| 223 | deadtime= int(sCommand[4])
|
|---|
| 224 | GlobalVariables.ServerMessage = "setting deadtime of module "+str(module)+" block: "+str(block)+ " to: "+str(deadtime)
|
|---|
| 225 | GlobalVariables.ServerMessage += "success: "+str(_VME.V812_Set_Dead_Time(module, block, deadtime))
|
|---|
| 226 | time.sleep(0.05)
|
|---|
| 227 | except:
|
|---|
| 228 | GlobalVariables.ServerMessage = "Syntax error (SetMajThresh)"
|
|---|
| 229 | time.sleep(0.05)
|
|---|
| 230 |
|
|---|
| 231 | else:
|
|---|
| 232 | GlobalVariables.ServerMessage = "Syntax Error (V812)"
|
|---|
| 233 | time.sleep(0.05)
|
|---|
| 234 |
|
|---|
| 235 | except:
|
|---|
| 236 | GlobalVariables.ServerMessage = "syntax error"
|
|---|
| 237 | time.sleep(0.05)
|
|---|
| 238 | #_VME.V812_Set_Threshold(1, 0, 255)
|
|---|
| 239 |
|
|---|
| 240 | def __init__(self):
|
|---|
| 241 | threading.Thread.__init__(self)
|
|---|
| 242 | def run(self):
|
|---|
| 243 | self.gimmeRates.start()
|
|---|
| 244 | oldcommand=GlobalVariables.UserInput
|
|---|
| 245 | while(GlobalVariables.UserInput[1:]!="exit" and GlobalVariables.UserInput[1:] != "EXIT"):
|
|---|
| 246 | CommandToParse=GlobalVariables.UserInput
|
|---|
| 247 | if(oldcommand!=CommandToParse):
|
|---|
| 248 | self.Parse(CommandToParse)
|
|---|
| 249 | oldcommand=CommandToParse
|
|---|
| 250 | time.sleep(0.05)
|
|---|
| 251 |
|
|---|
| 252 |
|
|---|
| 253 |
|
|---|
| 254 | GlobalVariables.ServerMessage = "EXITING PARSER...press <enter> to exit"
|
|---|
| 255 | time.sleep(0.05)
|
|---|
| 256 |
|
|---|