# SVN changeset patch # User imanay # Date 2013-02-05 22:35:47.901758 # Revision 76 Implementation of the client and library using TCP. Index: trunk/absroot/source/abspy/abscontrol/client3.py =================================================================== diff --git a/trunk/absroot/source/abspy/abscontrol/client3.py b/trunk/absroot/source/abspy/abscontrol/client3.py new file mode 10644 --- /dev/null (revision 0) +++ b/trunk/absroot/source/abspy/abscontrol/client3.py (revision 76) @@ -0,0 +1,500 @@ +# imports needed for the file convertion +import os +import sys +import time +import numpy as np + +import library3 + +class ABSClient: + + def __init__(self,ipSource="localhost", ipDestino="192.168.1.117", portDestino=7000): + + self.ipSource = ipSource + self.ipDestino = ipDestino + self.portDestino = portDestino + + self.createObjects() + + def createObjects(self): + + self.commObj = library3.TCPComm(self.ipSource, self.ipDestino, self.portDestino) + + def sendFile(self, filename): + + #From matriz to control module format + self.FuncionMaestra_GeneraFormatoControlCentral(filename) + FileName = "FormatoControlCentral.txt" + F_Obj = open(FileName,"r") + FileList = F_Obj.readlines() + F_Obj.close() + FileStr = "".join(FileList) + data = FileStr + + self.commObj.open_socket() +# self.commObj.sendData(cmd="SNDF", data=data, id = 117) + self.commObj.sendData2(cmd="SNDF", data=data, ipDestino = self.ipDestino) +# self.commObj.waitData() + self.commObj.waitClient() + self.commObj.close_socket() + + def changeBeam(self, newBeam): + + self.commObj.open_socket() +# self.commObj.sendData(cmd="CHGB", data=newBeam, id = 117) + self.commObj.sendData2(cmd="CHGB", data=newBeam, ipDestino = self.ipDestino) +# self.commObj.waitData() + self.commObj.waitClient() + self.commObj.close_socket() + + def __writeFile(self, filename, data): + + fobj = open(filename,"w") + fobj.writelines(data) + fobj.close() + + def getStatus(self, data): + + self.commObj.open_socket() +# self.commObj.sendData(cmd="ANST", data = data, id = 117) + self.commObj.sendData2(cmd="ANST", data = data, ipDestino = self.ipDestino) +# ipSource, ipDestino, cmd, data = self.commObj.waitData() + ipSource, ipDestino, cmd, data = self.commObj.waitClient() + self.commObj.close_socket() + self.__writeFile("report.txt", data) + +########## + + def FuncionMaestra_GeneraFormatoControlCentral(self,archivo): + """ Funcion que genera un archivo para el control central""" + + # CarpetaDeTrabajo='/home/redes/ABS_Control_2012_09_24/Control_Module_v1_Client_09_24/' + CarpetaDeTrabajo = os.getcwd() + '/' + #print CarpetaDeTrabajo + #CarpetaDeTrabajo='/home/redes/workspace/ABS_Client_v2/Debug/' + + def lst2string(lst): + string='' + for i in lst: + string=string+i + return string + + def string2lst(string): + lst = [] + for i in string: + lst.append(i) + return lst + + + def file1(string, type): + lst = string2lst(archivo) + fin = -1 + t = len(lst) + for i in np.arange(-1,-t,-1): + if lst[i]=='/': + fin=i + break + if type == '1': + nombre2 = lst[fin+1:] + nombre2[-1]='s' + nombre2 = lst2string(nombre2) + return nombre2 + if type == '2': + nombre2 = lst[fin+1:] + nombre2[-1]='1' + nombre2 = lst2string(nombre2) + return nombre2 + + + def EliminaSaltoDeLinea(cadena): + i = 0 + for elemento in cadena: + if elemento =='\n' or elemento =='\r': + pass + else: + i=i+1 + return cadena [:i] + + def NumeroDeExperimentos(path): + fichero1=open(path,'r') + cont=0 + for cadena in fichero1: + cont=cont+1 + if cont==3: + nexp='' + pos=0 + for elemento in cadena: + pos=pos+1 + if elemento=='=': + nexp=int(cadena[pos:]) + return nexp + fichero1.close() + + def Paridad(numero): + if numero%2==0: return 'par' + elif numero%2==1: return 'impar' + + def EvaluaCadena(cadena): + if len(cadena)>35: + if cadena[-1]=='$': + return cadena[-35:-2] + elif cadena[-1]==']': + return cadena[-34:-1] + else: + return None + + def GuardaEnLista(path): + fichero=open(path,'r') + lista=[] + for cadena in fichero: + cadena = EliminaSaltoDeLinea(cadena) + cadena = EvaluaCadena(cadena) + if cadena != None: + lista.append(cadena) + fichero.close() + return lista + + def CreaFicherosPrevios(): + vector = GuardaEnLista(archivo) + for i in range(1,NumeroDeExperimentos(archivo)+1): + fichero =open(CarpetaDeTrabajo+str(i)+'.txt','w') + for j in range(0,16): + fichero.write(vector[j+16*(i-1)]+'\n') + fichero.close() + + def CapturaValoresEnArchivo(path,polarizacion='up'): + fichero =open(path,'r') + cnt=0 + lstup=[] + lstdw=[] + for cadena in fichero: + cnt=cnt+1 + if cnt==5: + su01=cadena[17:20] + su02=cadena[21:24] + su03=cadena[25:28] + su04=cadena[29:32] + if cnt==6: + su05=cadena[17:20] + su06=cadena[21:24] + su07=cadena[25:28] + su08=cadena[29:32] + if cnt==7: + su09=cadena[17:20] + su10=cadena[21:24] + su11=cadena[25:28] + su12=cadena[29:32] + if cnt==8: + su13=cadena[17:20] + su14=cadena[21:24] + su15=cadena[25:28] + su16=cadena[29:32] + if cnt==13: + sd01=cadena[17:20] + sd02=cadena[21:24] + sd03=cadena[25:28] + sd04=cadena[29:32] + if cnt==14: + sd05=cadena[17:20] + sd06=cadena[21:24] + sd07=cadena[25:28] + sd08=cadena[29:32] + if cnt==15: + sd09=cadena[17:20] + sd10=cadena[21:24] + sd11=cadena[25:28] + sd12=cadena[29:32] + if cnt==16: + sd13=cadena[17:20] + sd14=cadena[21:24] + sd15=cadena[25:28] + sd16=cadena[29:32] + lstup=[su01,su02,su03,su04,su05,su06,su07,su08,su09,su10,su11,su12,su13,su14,su15,su16] + lstdw=[sd01,sd02,sd03,sd04,sd05,sd06,sd07,sd08,sd09,sd10,sd11,sd12,sd13,sd14,sd15,sd16] + if polarizacion=='up': + return lstup + elif polarizacion=='dw': + return lstdw + fichero.close() + + def CapturaValoresEnArchivo2(path,polarizacion='up'): + fichero =open(path,'r') + cnt=0 + lstup=[] + lstdw=[] + for cadena in fichero: + cnt=cnt+1 + if cnt==1: + nu01=cadena[1:4] + nu02=cadena[5:8] + nu03=cadena[9:12] + nu04=cadena[13:16] + eu01=cadena[17:20] + eu02=cadena[21:24] + eu03=cadena[25:28] + eu04=cadena[29:32] + if cnt==2: + nu05=cadena[1:4] + nu06=cadena[5:8] + nu07=cadena[9:12] + nu08=cadena[13:16] + eu05=cadena[17:20] + eu06=cadena[21:24] + eu07=cadena[25:28] + eu08=cadena[29:32] + if cnt==3: + nu09=cadena[1:4] + nu10=cadena[5:8] + nu11=cadena[9:12] + nu12=cadena[13:16] + eu09=cadena[17:20] + eu10=cadena[21:24] + eu11=cadena[25:28] + eu12=cadena[29:32] + if cnt==4: + nu13=cadena[1:4] + nu14=cadena[5:8] + nu15=cadena[9:12] + nu16=cadena[13:16] + eu13=cadena[17:20] + eu14=cadena[21:24] + eu15=cadena[25:28] + eu16=cadena[29:32] + if cnt==5: + wu01=cadena[1:4] + wu02=cadena[5:8] + wu03=cadena[9:12] + wu04=cadena[13:16] + su01=cadena[17:20] + su02=cadena[21:24] + su03=cadena[25:28] + su04=cadena[29:32] + if cnt==6: + wu05=cadena[1:4] + wu06=cadena[5:8] + wu07=cadena[9:12] + wu08=cadena[13:16] + su05=cadena[17:20] + su06=cadena[21:24] + su07=cadena[25:28] + su08=cadena[29:32] + if cnt==7: + wu09=cadena[1:4] + wu10=cadena[5:8] + wu11=cadena[9:12] + wu12=cadena[13:16] + su09=cadena[17:20] + su10=cadena[21:24] + su11=cadena[25:28] + su12=cadena[29:32] + if cnt==8: + wu13=cadena[1:4] + wu14=cadena[5:8] + wu15=cadena[9:12] + wu16=cadena[13:16] + su13=cadena[17:20] + su14=cadena[21:24] + su15=cadena[25:28] + su16=cadena[29:32] + if cnt==9: + nd01=cadena[1:4] + nd02=cadena[5:8] + nd03=cadena[9:12] + nd04=cadena[13:16] + ed01=cadena[17:20] + ed02=cadena[21:24] + ed03=cadena[25:28] + ed04=cadena[29:32] + if cnt==10: + nd05=cadena[1:4] + nd06=cadena[5:8] + nd07=cadena[9:12] + nd08=cadena[13:16] + ed05=cadena[17:20] + ed06=cadena[21:24] + ed07=cadena[25:28] + ed08=cadena[29:32] + if cnt==11: + nd09=cadena[1:4] + nd10=cadena[5:8] + nd11=cadena[9:12] + nd12=cadena[13:16] + ed09=cadena[17:20] + ed10=cadena[21:24] + ed11=cadena[25:28] + ed12=cadena[29:32] + if cnt==12: + nd13=cadena[1:4] + nd14=cadena[5:8] + nd15=cadena[9:12] + nd16=cadena[13:16] + ed13=cadena[17:20] + ed14=cadena[21:24] + ed15=cadena[25:28] + ed16=cadena[29:32] + if cnt==13: + wd01=cadena[1:4] + wd02=cadena[5:8] + wd03=cadena[9:12] + wd04=cadena[13:16] + sd01=cadena[17:20] + sd02=cadena[21:24] + sd03=cadena[25:28] + sd04=cadena[29:32] + if cnt==14: + wd05=cadena[1:4] + wd06=cadena[5:8] + wd07=cadena[9:12] + wd08=cadena[13:16] + sd05=cadena[17:20] + sd06=cadena[21:24] + sd07=cadena[25:28] + sd08=cadena[29:32] + if cnt==15: + wd09=cadena[1:4] + wd10=cadena[5:8] + wd11=cadena[9:12] + wd12=cadena[13:16] + sd09=cadena[17:20] + sd10=cadena[21:24] + sd11=cadena[25:28] + sd12=cadena[29:32] + if cnt==16: + wd13=cadena[1:4] + wd14=cadena[5:8] + wd15=cadena[9:12] + wd16=cadena[13:16] + sd13=cadena[17:20] + sd14=cadena[21:24] + sd15=cadena[25:28] + sd16=cadena[29:32] + lst_n_up=[nu01,nu02,nu03,nu04,nu05,nu06,nu07,nu08,nu09,nu10,nu11,nu12,nu13,nu14,nu15,nu16] + lst_n_dw=[nd01,nd02,nd03,nd04,nd05,nd06,nd07,nd08,nd09,nd10,nd11,nd12,nd13,nd14,nd15,nd16] + lst_s_up=[su01,su02,su03,su04,su05,su06,su07,su08,su09,su10,su11,su12,su13,su14,su15,su16] + lst_s_dw=[sd01,sd02,sd03,sd04,sd05,sd06,sd07,sd08,sd09,sd10,sd11,sd12,sd13,sd14,sd15,sd16] + lst_w_up=[wu01,wu02,wu03,wu04,wu05,wu06,wu07,wu08,wu09,wu10,wu11,wu12,wu13,wu14,wu15,wu16] + lst_w_dw=[wd01,wd02,wd03,wd04,wd05,wd06,wd07,wd08,wd09,wd10,wd11,wd12,wd13,wd14,wd15,wd16] + lst_e_up=[eu01,eu02,eu03,eu04,eu05,eu06,eu07,eu08,eu09,eu10,eu11,eu12,eu13,eu14,eu15,eu16] + lst_e_dw=[ed01,ed02,ed03,ed04,ed05,ed06,ed07,ed08,ed09,ed10,ed11,ed12,ed13,ed14,ed15,ed16] + + lstup = lst_s_up + lst_w_up + lst_n_up + lst_e_up + lstdw = lst_s_dw + lst_w_dw + lst_n_up + lst_e_up + + if polarizacion=='up': + return lstup + elif polarizacion=='dw': + return lstdw + fichero.close() + + + def CreaFormatoFinal(): + ne=NumeroDeExperimentos(archivo) + + #nombre01 = file1(archivo,'1') + nombre02 = file1(archivo,'2') + fichero=open(CarpetaDeTrabajo+'FormatoControlCentral.txt','w') + fichero.write(nombre02+'\n') + fichero.write(str(ne)+'\n') + for i in range(1,17): + + if i<10: + nmod = '0'+str(i) + else: nmod = str(i) + + + fichero.write('S'+nmod+'\n') + for j in range(1,ne+1): + ruta=CarpetaDeTrabajo+str(j)+'.txt' + lu=CapturaValoresEnArchivo(ruta,polarizacion='up') + ld=CapturaValoresEnArchivo(ruta,polarizacion='dw') + part1='' + part2='' + if lu[i-1]=='1.0': part1='000' + if lu[i-1]=='2.0': part1='001' + if lu[i-1]=='3.0': part1='010' + if lu[i-1]=='0.0': part1='011' + if lu[i-1]=='0.5': part1='100' + if lu[i-1]=='1.5': part1='101' + if lu[i-1]=='2.5': part1='110' + if lu[i-1]=='3.5': part1='111' + if ld[i-1]=='1.0': part2='000' + if ld[i-1]=='2.0': part2='001' + if ld[i-1]=='3.0': part2='010' + if ld[i-1]=='0.0': part2='011' + if ld[i-1]=='0.5': part2='100' + if ld[i-1]=='1.5': part2='101' + if ld[i-1]=='2.5': part2='110' + if ld[i-1]=='3.5': part2='111' + fichero.write(part1+part2+'\n') + fichero.write('------'+'\n') + fichero.close() + + def CreaFormatoFinal2(): + ne=NumeroDeExperimentos(archivo) + + #nombre01 = file1(archivo,'1') + nombre02 = file1(archivo,'2') + fichero=open(CarpetaDeTrabajo+'FormatoControlCentral.txt','w') + fichero.write(nombre02+'\n') + fichero.write(str(ne)+'\n') + + for i in range(1,65): + + if i<10: + nmod = '0'+str(i) + else: nmod = str(i) + + fichero.write("ABS_" + nmod+'\n') + + for j in range(1,ne+1): + ruta=CarpetaDeTrabajo+str(j)+'.txt' + lu=CapturaValoresEnArchivo2(ruta,polarizacion='up') + ld=CapturaValoresEnArchivo2(ruta,polarizacion='dw') + part1='' + part2='' + if lu[i-1]=='1.0': part1='000' + if lu[i-1]=='2.0': part1='001' + if lu[i-1]=='3.0': part1='010' + if lu[i-1]=='0.0': part1='011' + if lu[i-1]=='0.5': part1='100' + if lu[i-1]=='1.5': part1='101' + if lu[i-1]=='2.5': part1='110' + if lu[i-1]=='3.5': part1='111' + if ld[i-1]=='1.0': part2='000' + if ld[i-1]=='2.0': part2='001' + if ld[i-1]=='3.0': part2='010' + if ld[i-1]=='0.0': part2='011' + if ld[i-1]=='0.5': part2='100' + if ld[i-1]=='1.5': part2='101' + if ld[i-1]=='2.5': part2='110' + if ld[i-1]=='3.5': part2='111' + fichero.write(part1+part2+'\n') + fichero.write('------'+'\n') + fichero.close() + + def EliminaArchivosEnLaCarpeta(): + ne=NumeroDeExperimentos(archivo) + for i in range(1,ne+1): + os.remove(CarpetaDeTrabajo+str(i)+'.txt') + + CreaFicherosPrevios() + CreaFormatoFinal2() + EliminaArchivosEnLaCarpeta() + +########## + +if __name__ == '__main__': + + filename = "experimento1.abs" + + absObj = ABSClient() +# absObj.sendFile(filename) +# absObj.changeBeam("0") +# absObj.changeBeam("1") +# absObj.changeBeam("2") +# absObj.changeBeam("3") +# absObj.changeBeam("4") +# absObj.changeBeam("5") +# absObj.changeBeam("6") +# absObj.changeBeam("7") + absObj.getStatus(5) \ No newline at end of file Index: trunk/absroot/source/abspy/abscontrol/library3.py =================================================================== diff --git a/trunk/absroot/source/abspy/abscontrol/library3.py b/trunk/absroot/source/abspy/abscontrol/library3.py new file mode 10644 --- /dev/null (revision 0) +++ b/trunk/absroot/source/abspy/abscontrol/library3.py (revision 76) @@ -0,0 +1,165 @@ +import socket + +class TCPComm: + + __HEADER = "JRO" + __TYPE = "ABS" + + def __init__(self, ipSource, ipDestino, portDestino, asServer=False): + + self.ipSource = ipSource + self.ipDestino = ipDestino + self.portDestino = portDestino + self.addr = (ipDestino,portDestino) + + self.sc = "none" + self.answer = "none" #test + self.asServer = False + self.len = 0 + self.crc = 0 + + self.openSocket(asServer) + + def openSocket(self, asServer): + + #self.socket_c = socket.socket(AF_INET,SOCK_DGRAM) +# self.socket_c = socket.socket() +# self.socket_c.connect((self.ipDestino, self.portDestino)) + + if asServer: + self.socket_c = socket.socket() +# self.configAsServer() + self.socket_c.bind(self.addr) + self.asServer = True + else: +# self.configAsClient() + self.asServer = False #Socket is opened at the sendData function + +# def configAsClient(self): + #Buscar broadcast TCP +# self.socket_c.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) +# self.socket_c.connect(self.addr) +# pass + +# def configAsServer(self): +# +# self.socket_c.bind(self.addr) + + def waitData(self, nbytes = 1024): + + print "\nWaiting some client." + + if self.asServer == False: + # Short data through ethernet + trama_rx = self.socket_c.recv(nbytes) + else: + self.socket_c.listen(1) + sc, addr = self.socket_c.accept() + self.sc = sc + self.answer = addr + # Big data through ethernet + trama_rx = "" + while True: + tmp = self.sc.recv(nbytes) + trama_rx = trama_rx + tmp + if trama_rx[-4:] == "quit": + break + + print "\nThis socket has received some data." + + ipSource, ipDestino, cmd, data = self.__getTrama(trama_rx) + + return ipSource, ipDestino, cmd, data + + def waitServer(self, nbytes = 1024): + + print "\nWaiting some client." + self.socket_c.listen(1) + sc, addr = self.socket_c.accept() + self.sc = sc + self.answer = addr + # Big data through ethernet + trama_rx = "" + while True: + tmp = self.sc.recv(nbytes) + trama_rx = trama_rx + tmp + if trama_rx[-4:] == "quit": + break + + print "\nThis socket has received some data from: " + str(self.answer) + + ipSource, ipDestino, cmd, data = self.__getTrama(trama_rx) + + return ipSource, ipDestino, cmd, data + + def waitClient(self, nbytes = 1024): + + print "\nWaiting the server." + # Short data through ethernet + trama_rx = self.socket_c.recv(nbytes) + + print "\nThis socket has received this data: " + str(trama_rx) + + ipSource, ipDestino, cmd, data = self.__getTrama(trama_rx) + + return ipSource, ipDestino, cmd, data + + def sendData(self, cmd, data, id): + + trama_tx = self.__HEADER + ":" + self.__TYPE + ":" + str(self.ipSource) + ":" + str(self.ipDestino) + \ + ":" + str(self.len) + ":" + str(cmd) + ":" + str(data) + ":" + str(self.crc) + + if self.portDestino == 7000: + trama_tx = trama_tx + ":" + "quit" + # Send messages + if self.asServer == False: + host = "192.168.1." + str(id) + self.socket_c.connect((host, self.portDestino)) + self.socket_c.send(trama_tx) + else: + self.sc.send(trama_tx) + print "Sending message:[" + trama_tx + "]" + + def sendData2(self, cmd, data, ipDestino): + + trama_tx = self.__HEADER + ":" + self.__TYPE + ":" + str(self.ipSource) + ":" + str(ipDestino) + \ + ":" + str(self.len) + ":" + str(cmd) + ":" + str(data) + ":" + str(self.crc) + ":" + "quit" + + if self.asServer == True: + self.SendAsServer(trama_tx) + else: + self.SendAsClient(ipDestino, trama_tx) + + def SendAsServer(self, trama_tx): + + self.sc.send(trama_tx) + print "Sending message:[" + trama_tx + "] to: " + str(self.answer) + + + def SendAsClient(self, ipDestino, trama_tx): + + self.socket_c.connect((ipDestino, self.portDestino)) + self.socket_c.send(trama_tx) + print "Sending message:[" + trama_tx + "] to: " + ipDestino + + def __getTrama(self, trama): + + FrameList = trama.split(':') + + header = FrameList[0] + TypeOfInstrument = FrameList[1] + ipSource = FrameList[2] + ipDestino = FrameList[3] + len = FrameList[4] + cmd = FrameList[5] + data = FrameList[6] + crc = FrameList[7] + trash = FrameList[8] + + return ipSource, ipDestino, cmd, data + + def close_socket(self): + self.socket_c.close() + + def open_socket(self): + self.socket_c = socket.socket() \ No newline at end of file