|
|
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()
|