##// END OF EJS Templates
First beam is loaded by default after sending the beam file to the control modules.
First beam is loaded by default after sending the beam file to the control modules.

File last commit:

r165:166
r231:232
Show More
server2.py
368 lines | 11.6 KiB | text/x-python | PythonLexer
import os
import library2
import time
class ABSServer:
def __init__(self,ipSource="localhost", ipDestino="192.168.1.117", portDestino=7000, ipDestino2="192.168.1.11", portDestino2=5500):
self.ipSource = ipSource
self.ipDestino = ipDestino
self.portDestino = portDestino
self.ipDestino2 = ipDestino2
self.portDestino2 = portDestino2
self.tx_buffer = "default"
self.rx_buffer = "default"
self.createObjects()
def createObjects(self):
asServer = True
self.commServerObj = library2.TCPComm("Central_Control", self.ipDestino, self.portDestino, asServer)
self.commClientObj = library2.TCPComm("Central_Control", self.ipDestino2, self.portDestino2)
def waitRequest(self):
# Using rx buffer
ipSource, ipDestino, cmd, self.rx_buffer = self.commServerObj.waitServer()
if cmd == "SNDF":
datarpta = self.sendFile2Modules(mode=2, cmd = cmd)
if cmd == "CHGB":
datarpta = self.changeBeam(cmd = cmd)
if cmd == "ANST":
self.getStatus(mode=4, cmd = cmd)
# Using tx buffer
datarpta = self.tx_buffer
self.commServerObj.sendData2(cmd=cmd, data=datarpta, ipDestino = ipSource)
def checkModule(self, address):
cmd = "ping -c 1 -w 1 192.168.1."+ str(address) + " >> /dev/null"
status = os.system(cmd)
if status == 256:
return False
return True
def __writeReport(self, enaModules):
status_array = ["Status of modules\n"]
status_array.append("----------------\n")
for address in range(1,65):
if address in enaModules:
status_array.append("192.168.1." + str(address) + " [1 1]\n")
else:
status_array.append("192.168.1." + str(address) + " [0 0]\n")
f = open("module_status.txt","w")
f.writelines(status_array)
f.close()
def checkAntenna(self):
"""
Direccion de los modulos de las antenas:
Norte : 01-16
Este : 17-32
Oeste: : 33-48
Sur : 49-64
"""
enaModules = []
for address in range(1,65):
if self.checkModule(address):
enaModules.append(address)
self.__writeReport(enaModules)
return enaModules
def sendFile2Modules(self, mode, cmd):
if mode == 1:
self.__sendFile2Modules1()
else:
self.__sendFile2Modules2(cmd)
def __sendFile2Modules1(self):
#Needed for the loop
rx_frame_list = self.rx_buffer.split('\n',2)
self.experiment_name = rx_frame_list[0]
experiment_number = rx_frame_list[1]
str_control_modules = rx_frame_list[2]
lst_control_modules = str_control_modules.split("------\n")
# enaModules = self.checkAntenna()
enaModules = [11,12,13,14]
for address in range(1,65):
if address not in enaModules:
continue
self.__writeModuleFile(self.experiment_name, lst_control_modules[address-1])
cmd = "tftp -m binary 192.168.1."+ str(address) +" 69 -c put " + self.experiment_name
print cmd
os.system(cmd)
self.__loadFile()
def __sendFile2Modules2(self,cmd):
#Needed for the loop
rx_frame_list = self.rx_buffer.split('\n',2)
correct = 0
failure = 0
header = rx_frame_list[0] + "\n"
str_control_modules = rx_frame_list[2]
lst_control_modules = str_control_modules.split("------\n")
# enaModules = self.checkAntenna()
enaModules = [11,12,13,14]
for id in range(1,65):
if id not in enaModules:
continue
#tcp client needed
self.commClientObj.open_socket()
ip = "192.168.1." + str(id)
self.commClientObj.sendData2(cmd, header + lst_control_modules[id-1], ip)
ipSource, ipDestino, cmd, tmp = self.commClientObj.waitClient()
self.commClientObj.close_socket()
if tmp == "OK":
correct = correct + 1
else:
failure = failure + 1
if correct == len(enaModules):
rpta = "OK"
else:
rpta = "Failure"
return rpta
def __writeModuleFile(self, filename, str):
fobj = open(filename,"w")
fobj.write(filename + "\n")
fobj.write("------\n")
fobj.write(str)
fobj.write("------\n")
fobj.close()
def __readModuleFile(self, filename):
fobj1 = open(filename,"r")
file_list_1 = fobj1.readlines()
fobj1.close()
content_str = ''.join(file_list_1[2:-1])
return content_str
def __loadFile(self):
#Working with the UDP socket
self.commClientObj.sendData("none", "CARGA:" + self.experiment_name + ":")
self.commClientObj.sendData("none", "CAMBIA:0:")
def changeBeam(self, cmd):
correct = 0
failure = 0
# enaModules = self.checkAntenna()
enaModules = [11,12,13,14]
for id in range(1,65):
if id not in enaModules:
continue
self.commClientObj.open_socket()
ip = "192.168.1." + str(id)
self.commClientObj.sendData2(cmd, self.rx_buffer, ip)
# ipSource, ipDestino, cmd, tmp = self.commClientObj.waitData()
ipSource, ipDestino, cmd, tmp = self.commClientObj.waitClient()
self.commClientObj.close_socket()
if tmp == "OK":
correct = correct + 1
else:
failure = failure + 1
if correct == len(enaModules):
rpta = "OK"
else:
rpta = "Failure"
return rpta
def getStatus(self, mode, cmd):
if mode == 1:
self.__getStsMode1()
elif mode == 2:
self.__getStsMode2()
elif mode == 3:
self.__getStsMode3()
else:
self.__getStsMode4(cmd)
def __getStsMode1(self):
#rpta = self.commClientObj.sendTxRxCommand(cmd='CHEQUEO', data="0")
self.commClientObj.sendData("CHEQUEO:" + self.rx_buffer + ":")
seconds = int (self.rx_buffer)
# Give 5 seconds to the control modules
time.sleep(seconds)
# Checking the module connection
module_list = self.connection_status(10)
#Generating the complete report
module = 1
number_of_modules = 16
filename1 = "Verificacion"
filename2 = "report.txt"
fobj2 = open(filename2,"w")
fobj2.write("Verification_file\n")
fobj2.write("-----------------\n")
fobj2.close()
while module <= number_of_modules:
if module_list[module -1] == "1":
#Preparing and doing the tftp command
cmd = "tftp -m binary 192.168.1."+ str(base + module) +" 69 -c get " + filename1
print cmd
os.system(cmd)
# Getting data from the control module file
fobj1 = open(filename1,"r")
file_list_1 = fobj1.readlines()
fobj1.close()
content = file_list_1[2:-1]
#
fobj2 = open(filename2,"a")
if base == 10:
fobj2.write("S" + str(module) + "\n")
else:
fobj2.write("N" + str(module) + "\n")
fobj2.writelines(content)
fobj2.write("------\n")
fobj2.close()
module = module + 1
def __getStsMode2(self):
#rpta = self.commClientObj.sendTxRxCommand(cmd='CHEQUEO', data="0")
self.commClientObj.sendData("CHEQUEO:" + self.rx_buffer + ":")
seconds = int (self.rx_buffer)
# Give 5 seconds to the control modules
time.sleep(seconds)
# Checking the module connection
enaModules = self.checkAntenna()
#Generating the complete report
filename1 = "Verificacion"
line1 = "Verification_file\n"
line2 = "-----------------\n"
report_list = [line1, line2]
for address in range(1,65):
if address not in enaModules:
continue
#Preparing and doing the tftp command
cmd = "tftp -m binary 192.168.1."+ str(address) +" 69 -c get " + filename1
print cmd
os.system(cmd)
#Sub_header
report_list.append("ABS_" + str(address) + "\n")
# Content
fobj1 = open(filename1,"r")
file_list_1 = fobj1.readlines()
fobj1.close()
content = ''.join(file_list_1[2:-1])
report_list.append(content)
#Ending
report_list.append("------\n")
#print "\nFinalizado"
self.tx_buffer = ''.join(report_list)
def __AddingHeader(self,content_list, title):
line1 = title + "\n"
line2 = "-----------------\n"
header_list = [line1, line2]
verification_list = header_list + content_list
# Arming the frame
self.tx_buffer = ''.join(verification_list)
def __getModuleFile(self, filename):
enaModules = self.checkAntenna()
content_list = []
for address in range(1,65):
if address not in enaModules:
continue
#Preparing and doing the tftp command
cmd = "tftp -m binary 192.168.1."+ str(address) +" 69 -c get " + filename
print cmd
os.system(cmd)
#Sub_header
content_list.append("ABS_" + str(address) + "\n")
# From module file to list
content_str = self.__readModuleFile(filename)
content_list.append(content_str)
content_list.append("------\n")
self.__AddingHeader(content_list, title = "Verification_file")
def __getStsMode3(self):
self.commClientObj.sendData("none", "CHEQUEO:" + self.rx_buffer + ":")
seconds = int (self.rx_buffer)
# Give 5 seconds to the control modules
time.sleep(seconds)
self.__getModuleFile(filename = "Verificacion")
def __getStsMode4(self, cmd):
content_str = ""
# enaModules = self.checkAntenna()
enaModules = [11,12,13,14]
for id in range(1,65):
if id not in enaModules:
continue
self.commClientObj.open_socket()
ip = "192.168.1." + str(id)
self.commClientObj.sendData2(cmd, self.rx_buffer, ip)
ipSource, ipDestino, cmd, tmp = self.commClientObj.waitClient()
self.commClientObj.close_socket()
content_str = content_str + tmp
# self.__AddingHeader(content_list, title = "Verification_file")
#Using tx buffer
self.tx_buffer = content_str
if __name__ == '__main__':
absObj = ABSServer()
while 1:
absObj.waitRequest()