diff --git a/apps/abs/models.py b/apps/abs/models.py index 035835a..2e0c1ec 100644 --- a/apps/abs/models.py +++ b/apps/abs/models.py @@ -377,8 +377,10 @@ class ABSConfiguration(Configuration): return False #-------------Write each abs module----------- + if beams: - message = 'SNDF{:02d}'.format(nbeams) + block_id = 0 + message = 'SNDF{:03d}{:02d}{:02d}'.format(nbeams, nbeams, block_id) for i, status in enumerate(self.module_status): message += ''.join([fromBinary2Char(beam.module_6bits(i)) for beam in beams]) status = ['0'] * 64 @@ -386,14 +388,16 @@ class ABSConfiguration(Configuration): sock = self.send_multicast(message) - for i in range(64): + for i in range(32): try: data, address = sock.recvfrom(1024) + print address, data if data == '1': status[int(address[0][10:])-1] = '3' elif data == '0': status[int(address[0][10:])-1] = '1' - except: + except Exception as e: + print 'Error {}'.format(e) n += 1 sock.close() else: @@ -481,7 +485,7 @@ class ABSConfiguration(Configuration): for i, status in enumerate(self.module_status): if status != '0': num += 1 - print('status {}:{}'.format(i+1, status)) + #print('status {}:{}'.format(i+1, status)) return num def send_multicast(self, message): @@ -489,8 +493,10 @@ class ABSConfiguration(Configuration): multicast_group = ('224.3.29.71', 10000) # Create the datagram socket sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - sock.settimeout(0.01) + sock.settimeout(1) + # sock.bind((local_ip, 10000)) local_ip = os.environ.get('LOCAL_IP', '127.0.0.1') + local_ip = '192.168.1.128' sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, socket.inet_aton(local_ip)) sent = sock.sendto(message, multicast_group) print('Sending ' + message) @@ -506,9 +512,12 @@ class ABSConfiguration(Configuration): n = 0 status = ['0'] * 64 - for i in range(64): + for i in range(32): + #if True: try: + address = None data, address = sock.recvfrom(1024) + print address, data if data == '1': status[int(address[0][10:])-1] = '3' elif data == '0': @@ -516,6 +525,7 @@ class ABSConfiguration(Configuration): n += 1 print('Module: {} connected'.format(address)) except: + print('Module: {} error'.format(address)) pass sock.close() @@ -538,11 +548,13 @@ class ABSConfiguration(Configuration): """ # Se manda a cero RC para poder realizar cambio de beam - confs = Configuration.objects.filter(experiment = self.experiment).filter(type=0) + if self.experiment is None: + confs = [] + else: + confs = Configuration.objects.filter(experiment = self.experiment).filter(type=0) confdds = '' confjars = '' confrc = '' - #TO STOP DEVICES: DDS-JARS-RC for i in range(0,len(confs)): if i==0: @@ -563,7 +575,6 @@ class ABSConfiguration(Configuration): confrc = conf confrc.stop_device() break - if beam_pos > 0: beam_pos = beam_pos - 1 else: @@ -574,8 +585,7 @@ class ABSConfiguration(Configuration): status = ['0'] * 64 message = 'CHGB{}'.format(beam_pos) sock = self.send_multicast(message) - - for i in range(64): + for i in range(32): try: data, address = sock.recvfrom(1024) print address, data @@ -583,7 +593,8 @@ class ABSConfiguration(Configuration): status[int(address[0][10:])-1] = '3' elif data == '0': status[int(address[0][10:])-1] = '1' - except: + except Exception as e: + print 'Error {}'.format(e) pass sock.close() @@ -670,6 +681,7 @@ class ABSBeam(models.Model): """ This function reads antenna pattern and choose 6bits (upbits-downbits) for one abs module """ + module += 1 if module > 64: beam_bits = "" return beam_bits diff --git a/apps/abs/urls.py b/apps/abs/urls.py index 488f016..918ac5b 100644 --- a/apps/abs/urls.py +++ b/apps/abs/urls.py @@ -5,6 +5,7 @@ from apps.abs import views urlpatterns = ( url(r'^(?P-?\d+)/$', views.abs_conf, name='url_abs_conf'), url(r'^(?P-?\d+)/edit/$', views.abs_conf_edit, name='url_edit_abs_conf'), + url(r'^alert/$', views.abs_conf_alert, name='url_alert_abs_conf'), url(r'^(?P-?\d+)/import/$', views.import_file, name='url_import_abs_conf'), #url(r'^(?P-?\d+)/status/', views.abs_conf, {'status_request':True},name='url_status_abs_conf'), url(r'^(?P-?\d+)/change_beam/(?P-?\d+)/$', views.send_beam, name='url_send_beam'), diff --git a/apps/abs/views.py b/apps/abs/views.py index 8443e6b..5f5ca29 100644 --- a/apps/abs/views.py +++ b/apps/abs/views.py @@ -5,6 +5,7 @@ from django.contrib import messages from django.conf import settings from django.http import HttpResponse from django.core.urlresolvers import reverse +from django.views.decorators.csrf import csrf_exempt from datetime import datetime from time import sleep @@ -200,6 +201,15 @@ def abs_conf_edit(request, id_conf): return render(request, 'abs_conf_edit.html', kwargs) +@csrf_exempt +def abs_conf_alert(request): + + if request.method == 'POST': + print request.POST + return HttpResponse(json.dumps({'result':1}), content_type='application/json') + else: + return redirect('index') + def import_file(request, id_conf): @@ -342,7 +352,6 @@ def remove_beam(request, id_conf, id_beam): if request.method=='POST': if beam: try: - beam.remove_beamfromlist() beam.delete() messages.success(request, 'Beam: "%s" has been deleted.' % beam) except: @@ -403,4 +412,4 @@ def plot_pattern(request, id_conf, id_beam, antenna): fig.savefig(buf, format='png') response = HttpResponse(buf.getvalue(), content_type='image/png') return response - \ No newline at end of file +