##// END OF EJS Templates
imanay -
r110:111
parent child
Show More
@@ -1,531 +1,527
1 1 # Needed for the FilesStuff class
2 2 import os
3 3 import numpy as np
4 4 # Needed for the TCPComm class
5 5 import socket
6 6
7 7 class TCPComm:
8 8
9 9 __HEADER = "JRO"
10 10 __TYPE = "ABS"
11 11
12 12 def __init__(self, ipSource, iDSource, ipDestino, iDDestino, portDestino, asServer=False):
13 13
14 14 self.ipSource = ipSource
15 15 self.iDSource = iDSource
16 16 self.ipDestino = ipDestino
17 17 self.iDDestino = iDDestino
18 18 self.portDestino = portDestino
19 19 self.addr = (ipDestino,portDestino)
20 20
21 21 self.sc = "none"
22 22 self.answer = "none" #test
23 23 self.asServer = False
24 24 self.len = "000000"
25 25 self.crc = "0"
26 26
27 27 self.openSocket(asServer)
28 28
29 29 def openSocket(self, asServer):
30 30
31 31 #self.socket_c = socket.socket(AF_INET,SOCK_DGRAM)
32 32 # self.socket_c = socket.socket()
33 33 # self.socket_c.connect((self.ipDestino, self.portDestino))
34 34
35 35 if asServer:
36 36 self.socket_c = socket.socket()
37 37 # self.configAsServer()
38 38 self.socket_c.bind(self.addr)
39 39 self.asServer = True
40 40 else:
41 41 # self.configAsClient()
42 42 self.asServer = False #Socket is opened at the sendData function
43 43
44 44 # def configAsClient(self):
45 45 #Buscar broadcast TCP
46 46 # self.socket_c.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
47 47 # self.socket_c.connect(self.addr)
48 48 # pass
49 49
50 50 # def configAsServer(self):
51 51 #
52 52 # self.socket_c.bind(self.addr)
53 53
54 54 def waitData(self):
55 55 if self.asServer == True:
56 56 trama_rx, l = self.waitAsServer()
57 57 else:
58 58 trama_rx, l = self.waitAsClient()
59 59
60 60 ipSource, ipDestino, cmd, data = self.__getTrama(trama_rx, l)
61 61
62 62 return ipSource, ipDestino, cmd, data
63 63
64 64 def waitAsClient2(self, nbytes = 1024):
65 65 print "\nWaiting the server."
66 66 # Short data through ethernet
67 67 trama_rx = self.socket_c.recv(nbytes)
68 68 print "\nThis socket has received this data: " + str(trama_rx)
69 69
70 70 return trama_rx
71 71
72 72 def waitAsServer2(self, nbytes = 1024):
73 73 print "\nWaiting some client."
74 74 self.socket_c.listen(1)
75 75 sc, addr = self.socket_c.accept()
76 76 self.sc = sc
77 77 self.answer = addr
78 78 # Big data through ethernet
79 79 trama_rx = ""
80 80 while True:
81 81 tmp = self.sc.recv(nbytes)
82 82 trama_rx = trama_rx + tmp
83 83 if trama_rx[-4:] == "quit":
84 84 break
85 85
86 86 print "\nThis socket has received some data from: " + str(self.answer)
87 87
88 88 return trama_rx
89 89
90 90 def waitAsServer(self, nbytes = 1024):
91 91 print "\nWaiting some client."
92 92 self.socket_c.listen(1)
93 93 sc, addr = self.socket_c.accept()
94 94 self.sc = sc
95 95 self.answer = addr
96 96 # Big data through ethernet
97 97 cnt = 0;
98 98 first = 0;
99 99 trama_rx = ""
100 100 while True:
101 101 tmp = self.sc.recv(nbytes)
102 102 trama_rx = trama_rx + tmp
103 103 cnt = len(trama_rx)
104 104 if first == 0:
105 105 first = 1
106 106 lng = int(trama_rx[20:26])
107 print str(lng)
108 if cnt == lng:
107 frm_lng= lng + 31 # 31 bytes are fixed and added to the data size to get the frame size
108 if cnt == frm_lng:
109 109 break
110 110
111 111 print "\nThis socket has received some data from: " + str(self.answer)
112 112
113 113 return trama_rx, lng
114 114
115 115 def waitAsClient(self, nbytes = 1024):
116 116 print "\nWaiting the server."
117 117 # Short data through ethernet
118 118 trama_rx = self.socket_c.recv(nbytes)
119 119 lng = int(trama_rx[20:26])
120 print str(lng)
121 120 print "\nThis socket has received this data: " + str(trama_rx)
122 121
123 122 return trama_rx, lng
124 123
125 124 def sendData2(self, cmd, data, ipDestino):
126 125
127 126 trama_tx = self.__HEADER + ":" + self.__TYPE + ":" + str(self.ipSource) + ":" + str(ipDestino) + \
128 127 ":" + str(self.len) + ":" + str(cmd) + ":" + str(data) + ":" + str(self.crc) + ":" + "quit"
129 128
130 129 if self.asServer == True:
131 130 self.SendAsServer(trama_tx)
132 131 else:
133 132 self.SendAsClient(ipDestino, trama_tx)
134 133
135 134 def sendData(self, cmd, data, ipDestino):
136 135
137 136 trama_tx = self.__HEADER + self.__TYPE + self.iDSource + \
138 137 self.iDDestino + self.len + str(cmd) + str(data) + self.crc
139 138
140 self.len = self.int2str(len(trama_tx))
139 self.len = self.int2str(len(data))
141 140
142 141 trama_tx = self.__HEADER + self.__TYPE + self.iDSource + \
143 142 self.iDDestino + self.len + str(cmd) + str(data) + self.crc
144
145 print trama_tx
146 143
147 144 if self.asServer == True:
148 145 self.SendAsServer(trama_tx)
149 146 else:
150 147 self.SendAsClient(ipDestino, trama_tx)
151 148
152 149 def SendAsServer(self, trama_tx):
153 150
154 151 self.sc.send(trama_tx)
155 152 print "Sending message:[" + trama_tx + "] to: " + str(self.answer)
156 153
157 154
158 155 def SendAsClient(self, ipDestino, trama_tx):
159 156
160 157 self.socket_c.connect((ipDestino, self.portDestino))
161 158 self.socket_c.send(trama_tx)
162 159 print "Sending message:[" + trama_tx + "] to: " + ipDestino
163 160
164 161 def __getTrama2(self, trama):
165 162
166 163 FrameList = trama.split(':')
167 164
168 165 header = FrameList[0]
169 166 TypeOfInstrument = FrameList[1]
170 167 ipSource = FrameList[2]
171 168 ipDestino = FrameList[3]
172 169 len = FrameList[4]
173 170 cmd = FrameList[5]
174 171 data = FrameList[6]
175 172 crc = FrameList[7]
176 173 trash = FrameList[8]
177 174
178 175 return ipSource, ipDestino, cmd, data
179 176
180 177 def __getTrama(self, trama, l):
181 178
182 179 header = trama[0:3]
183 180 TypeOfInstrument = trama[3:6]
184 181 ipSource = trama[6:13]
185 182 ipDestino = trama[13:20]
186 183 len = trama[20:26]
187 184 cmd = trama[26:30]
188 ldata = l-31
189 data = trama[30:30+ldata]
190 crc = trama[30+ldata:]
185 data = trama[30:30+int(l)]
186 crc = trama[30+ int(l):]
191 187
192 188 return ipSource, ipDestino, cmd, data
193 189
194 190 def close_socket(self):
195 191 self.socket_c.close()
196 192
197 193 def open_socket(self):
198 194 self.socket_c = socket.socket()
199 195
200 196 def int2str(self, n):
201 197
202 198 str_n = str(n)
203 199 l_n = len(str_n)
204 200 if l_n == 1:
205 201 str_n = "00000" + str_n
206 202 elif l_n == 2:
207 203 str_n = "0000" + str_n
208 204 elif l_n == 3:
209 205 str_n = "000" + str_n
210 206 elif l_n == 4:
211 207 str_n = "00" + str_n
212 208 elif l_n == 5:
213 209 str_n = "0" + str_n
214 210 return str_n
215 211
216 212 class FilesStuff():
217 213
218 214 def lst2string(self, lst):
219 215 string=''
220 216 for i in lst:
221 217 string=string+i
222 218 return string
223 219
224 220 def string2lst(self, string):
225 221 lst = []
226 222 for i in string:
227 223 lst.append(i)
228 224 return lst
229 225
230 226
231 227 def file1(self, filename, type):
232 228 lst = self.string2lst(filename)
233 229 fin = -1
234 230 t = len(lst)
235 231 for i in np.arange(-1,-t,-1):
236 232 if lst[i]=='/':
237 233 fin=i
238 234 break
239 235 if type == '1':
240 236 nombre2 = lst[fin+1:]
241 237 nombre2[-1]='s'
242 238 nombre2 = self.lst2string(nombre2)
243 239 return nombre2
244 240 if type == '2':
245 241 nombre2 = lst[fin+1:]
246 242 nombre2[-1]='1'
247 243 nombre2 = self.lst2string(nombre2)
248 244 return nombre2
249 245
250 246
251 247 def EliminaSaltoDeLinea(self,cadena):
252 248 i = 0
253 249 for elemento in cadena:
254 250 if elemento =='\n' or elemento =='\r':
255 251 pass
256 252 else:
257 253 i=i+1
258 254 return cadena [:i]
259 255
260 256 def NumeroDeExperimentos(self, path):
261 257 fichero1=open(path,'r')
262 258 cont=0
263 259 for cadena in fichero1:
264 260 cont=cont+1
265 261 if cont==3:
266 262 nexp=''
267 263 pos=0
268 264 for elemento in cadena:
269 265 pos=pos+1
270 266 if elemento=='=':
271 267 nexp=int(cadena[pos:])
272 268 return nexp
273 269 fichero1.close()
274 270
275 271 def Paridad(numero):
276 272 if numero%2==0: return 'par'
277 273 elif numero%2==1: return 'impar'
278 274
279 275 def EvaluaCadena(self,cadena):
280 276 if len(cadena)>35:
281 277 if cadena[-1]=='$':
282 278 return cadena[-35:-2]
283 279 elif cadena[-1]==']':
284 280 return cadena[-34:-1]
285 281 else:
286 282 return None
287 283
288 284 def GuardaEnLista(self,path):
289 285 fichero=open(path,'r')
290 286 lista=[]
291 287 for cadena in fichero:
292 288 cadena = self.EliminaSaltoDeLinea(cadena)
293 289 cadena = self.EvaluaCadena(cadena)
294 290 if cadena != None:
295 291 lista.append(cadena)
296 292 fichero.close()
297 293 return lista
298 294
299 295 def CreaFicherosPrevios(self, path, archivo):
300 296 vector = self.GuardaEnLista(archivo)
301 297 for i in range(1,self.NumeroDeExperimentos(archivo)+1):
302 298 fichero =open(path + str(i)+ '.txt','w')
303 299 for j in range(0,16):
304 300 fichero.write(vector[j+16*(i-1)]+'\n')
305 301 fichero.close()
306 302
307 303 def CapturaValoresEnArchivo(self, path, polarizacion='up'):
308 304 fichero =open(path,'r')
309 305 cnt=0
310 306 lstup=[]
311 307 lstdw=[]
312 308 for cadena in fichero:
313 309 cnt=cnt+1
314 310 if cnt==1:
315 311 nu01=cadena[1:4]
316 312 nu02=cadena[5:8]
317 313 nu03=cadena[9:12]
318 314 nu04=cadena[13:16]
319 315 eu01=cadena[17:20]
320 316 eu02=cadena[21:24]
321 317 eu03=cadena[25:28]
322 318 eu04=cadena[29:32]
323 319 if cnt==2:
324 320 nu05=cadena[1:4]
325 321 nu06=cadena[5:8]
326 322 nu07=cadena[9:12]
327 323 nu08=cadena[13:16]
328 324 eu05=cadena[17:20]
329 325 eu06=cadena[21:24]
330 326 eu07=cadena[25:28]
331 327 eu08=cadena[29:32]
332 328 if cnt==3:
333 329 nu09=cadena[1:4]
334 330 nu10=cadena[5:8]
335 331 nu11=cadena[9:12]
336 332 nu12=cadena[13:16]
337 333 eu09=cadena[17:20]
338 334 eu10=cadena[21:24]
339 335 eu11=cadena[25:28]
340 336 eu12=cadena[29:32]
341 337 if cnt==4:
342 338 nu13=cadena[1:4]
343 339 nu14=cadena[5:8]
344 340 nu15=cadena[9:12]
345 341 nu16=cadena[13:16]
346 342 eu13=cadena[17:20]
347 343 eu14=cadena[21:24]
348 344 eu15=cadena[25:28]
349 345 eu16=cadena[29:32]
350 346 if cnt==5:
351 347 wu01=cadena[1:4]
352 348 wu02=cadena[5:8]
353 349 wu03=cadena[9:12]
354 350 wu04=cadena[13:16]
355 351 su01=cadena[17:20]
356 352 su02=cadena[21:24]
357 353 su03=cadena[25:28]
358 354 su04=cadena[29:32]
359 355 if cnt==6:
360 356 wu05=cadena[1:4]
361 357 wu06=cadena[5:8]
362 358 wu07=cadena[9:12]
363 359 wu08=cadena[13:16]
364 360 su05=cadena[17:20]
365 361 su06=cadena[21:24]
366 362 su07=cadena[25:28]
367 363 su08=cadena[29:32]
368 364 if cnt==7:
369 365 wu09=cadena[1:4]
370 366 wu10=cadena[5:8]
371 367 wu11=cadena[9:12]
372 368 wu12=cadena[13:16]
373 369 su09=cadena[17:20]
374 370 su10=cadena[21:24]
375 371 su11=cadena[25:28]
376 372 su12=cadena[29:32]
377 373 if cnt==8:
378 374 wu13=cadena[1:4]
379 375 wu14=cadena[5:8]
380 376 wu15=cadena[9:12]
381 377 wu16=cadena[13:16]
382 378 su13=cadena[17:20]
383 379 su14=cadena[21:24]
384 380 su15=cadena[25:28]
385 381 su16=cadena[29:32]
386 382 if cnt==9:
387 383 nd01=cadena[1:4]
388 384 nd02=cadena[5:8]
389 385 nd03=cadena[9:12]
390 386 nd04=cadena[13:16]
391 387 ed01=cadena[17:20]
392 388 ed02=cadena[21:24]
393 389 ed03=cadena[25:28]
394 390 ed04=cadena[29:32]
395 391 if cnt==10:
396 392 nd05=cadena[1:4]
397 393 nd06=cadena[5:8]
398 394 nd07=cadena[9:12]
399 395 nd08=cadena[13:16]
400 396 ed05=cadena[17:20]
401 397 ed06=cadena[21:24]
402 398 ed07=cadena[25:28]
403 399 ed08=cadena[29:32]
404 400 if cnt==11:
405 401 nd09=cadena[1:4]
406 402 nd10=cadena[5:8]
407 403 nd11=cadena[9:12]
408 404 nd12=cadena[13:16]
409 405 ed09=cadena[17:20]
410 406 ed10=cadena[21:24]
411 407 ed11=cadena[25:28]
412 408 ed12=cadena[29:32]
413 409 if cnt==12:
414 410 nd13=cadena[1:4]
415 411 nd14=cadena[5:8]
416 412 nd15=cadena[9:12]
417 413 nd16=cadena[13:16]
418 414 ed13=cadena[17:20]
419 415 ed14=cadena[21:24]
420 416 ed15=cadena[25:28]
421 417 ed16=cadena[29:32]
422 418 if cnt==13:
423 419 wd01=cadena[1:4]
424 420 wd02=cadena[5:8]
425 421 wd03=cadena[9:12]
426 422 wd04=cadena[13:16]
427 423 sd01=cadena[17:20]
428 424 sd02=cadena[21:24]
429 425 sd03=cadena[25:28]
430 426 sd04=cadena[29:32]
431 427 if cnt==14:
432 428 wd05=cadena[1:4]
433 429 wd06=cadena[5:8]
434 430 wd07=cadena[9:12]
435 431 wd08=cadena[13:16]
436 432 sd05=cadena[17:20]
437 433 sd06=cadena[21:24]
438 434 sd07=cadena[25:28]
439 435 sd08=cadena[29:32]
440 436 if cnt==15:
441 437 wd09=cadena[1:4]
442 438 wd10=cadena[5:8]
443 439 wd11=cadena[9:12]
444 440 wd12=cadena[13:16]
445 441 sd09=cadena[17:20]
446 442 sd10=cadena[21:24]
447 443 sd11=cadena[25:28]
448 444 sd12=cadena[29:32]
449 445 if cnt==16:
450 446 wd13=cadena[1:4]
451 447 wd14=cadena[5:8]
452 448 wd15=cadena[9:12]
453 449 wd16=cadena[13:16]
454 450 sd13=cadena[17:20]
455 451 sd14=cadena[21:24]
456 452 sd15=cadena[25:28]
457 453 sd16=cadena[29:32]
458 454 blck_1_up = [nu01,nu02,nu03,nu04,eu01,eu02,eu03,eu04,nu05,nu06,nu07,nu08,eu05,eu06,eu07,eu08]
459 455 blck_1_dw = [nd01,nd02,nd03,nd04,ed01,ed02,ed03,ed04,nd05,nd06,nd07,nd08,ed05,ed06,ed07,ed08]
460 456 blck_2_up = [nu09,nu10,nu11,nu12,eu09,eu10,eu11,eu12,nu13,nu14,nu15,nu16,eu13,eu14,eu15,eu16]
461 457 blck_2_dw = [nd09,nd10,nd11,nd12,ed09,ed10,ed11,ed12,nd13,nd14,nd15,nd16,ed13,ed14,ed15,ed16]
462 458 blck_3_up = [wu01,wu02,wu03,wu04,su01,su02,su03,su04,wu05,wu06,wu07,wu08,su05,su06,su07,su08]
463 459 blck_3_dw = [wd01,wd02,wd03,wd04,sd01,sd02,sd03,sd04,wd05,wd06,wd07,wd08,sd05,sd06,sd07,sd08]
464 460 blck_4_up = [wu09,wu10,wu11,wu12,su09,su10,su11,su12,wu13,wu14,wu15,wu16,su13,su14,su15,su16]
465 461 blck_4_dw = [wd09,wd10,wd11,wd12,sd09,sd10,sd11,sd12,wd13,wd14,wd15,wd16,sd13,sd14,sd15,sd16]
466 462
467 463 lstup = blck_1_up + blck_2_up + blck_3_up + blck_4_up
468 464 lstdw = blck_1_dw + blck_2_dw + blck_3_dw + blck_4_dw
469 465
470 466 if polarizacion=='up':
471 467 return lstup
472 468 elif polarizacion=='dw':
473 469 return lstdw
474 470 fichero.close()
475 471
476 472 def CreaFormatoFinal(self, path, filename):
477 473 ne=self.NumeroDeExperimentos(filename)
478 474
479 475 #nombre01 = file1(archivo,'1')
480 476 nombre02 = self.file1(filename,'2')
481 477 fichero=open(path + 'CentralControlFormat.txt','w')
482 478 fichero.write(nombre02+'\n')
483 479 fichero.write(str(ne)+'\n')
484 480
485 481 for i in range(1,65):
486 482
487 483 if i<10:
488 484 nmod = '0'+str(i)
489 485 else: nmod = str(i)
490 486
491 487 fichero.write("ABS_" + nmod+'\n')
492 488
493 489 for j in range(1,ne+1):
494 490 ruta=path+str(j)+'.txt'
495 491 lu=self.CapturaValoresEnArchivo(ruta,polarizacion='up')
496 492 ld=self.CapturaValoresEnArchivo(ruta,polarizacion='dw')
497 493 part1=''
498 494 part2=''
499 495 if lu[i-1]=='1.0': part1='000'
500 496 if lu[i-1]=='2.0': part1='001'
501 497 if lu[i-1]=='3.0': part1='010'
502 498 if lu[i-1]=='0.0': part1='011'
503 499 if lu[i-1]=='0.5': part1='100'
504 500 if lu[i-1]=='1.5': part1='101'
505 501 if lu[i-1]=='2.5': part1='110'
506 502 if lu[i-1]=='3.5': part1='111'
507 503 if ld[i-1]=='1.0': part2='000'
508 504 if ld[i-1]=='2.0': part2='001'
509 505 if ld[i-1]=='3.0': part2='010'
510 506 if ld[i-1]=='0.0': part2='011'
511 507 if ld[i-1]=='0.5': part2='100'
512 508 if ld[i-1]=='1.5': part2='101'
513 509 if ld[i-1]=='2.5': part2='110'
514 510 if ld[i-1]=='3.5': part2='111'
515 511 fichero.write(part1+part2+'\n')
516 512 fichero.write('------'+'\n')
517 513 fichero.close()
518 514
519 515 def EliminaArchivosEnLaCarpeta(self, path, filename):
520 516 ne=self.NumeroDeExperimentos(filename)
521 517 for i in range(1,ne+1):
522 518 os.remove(path + str(i)+'.txt')
523 519
524 520
525 521 def toCentralControlFormat(self, filename):
526 522 """ Funcion que genera un archivo para el control central"""
527 523
528 524 path = os.getcwd() + '/'
529 525 self.CreaFicherosPrevios(path, filename)
530 526 self.CreaFormatoFinal(path, filename)
531 527 self.EliminaArchivosEnLaCarpeta(path, filename)
General Comments 0
You need to be logged in to leave comments. Login now