def sendReqState(self, *largs): ''' Peticion de estados y eventos ''' # Generacion del paquete, lo guardamos por si hay que retransmitir if self.state == States.HALTED or not self.transport.connected: log.msg('Deteniendo consulta') return # Hay un paquete que enviar if self._to_send_buffer: self.state = States.COMMAND_QUEUED pkg = self._to_send_buffer.pop(0) pkg['SEQ'] = self.seq log.msg('Comando: %s' % pkg) self.transport.write(pkg.octet_str()) self.next_seq() reactor.callLater(self.co.poll_delay, self.sendReqState) #@UndefinedVariable log.msg('Envio del comando') return # TODO: Tomar de la confguracion del SCADA self.tries = 0 self.current_pkg = Paquete.crear_estados_y_eventos( 0x01, self.uc.id_UC, self.seq) # Enviamos el paquete al medio self.transport.write(self.current_pkg.octet_str()) # Cambio de estado self.scada_state = States.STATE_REQ_SENT # Preparamos el temeout log.msg('Poll ---> %.2d%.2d' % (self.co.id_CO, self.uc.id_UC)) self.timeout_defer = reactor.callLater( self.co.t_out, self.timeoutElapsed) #@UndefinedVariable
def sendReqState(self, *largs): ''' Peticion de estados y eventos ''' # Generacion del paquete, lo guardamos por si hay que retransmitir if self.state == States.HALTED or not self.transport.connected: log.msg('Deteniendo consulta') return # Hay un paquete que enviar if self._to_send_buffer: self.state = States.COMMAND_QUEUED pkg = self._to_send_buffer.pop(0) pkg['SEQ'] = self.seq log.msg('Comando: %s' % pkg ) self.transport.write( pkg.octet_str() ) self.next_seq() reactor.callLater( self.co.poll_delay, self.sendReqState ) #@UndefinedVariable log.msg('Envio del comando') return # TODO: Tomar de la confguracion del SCADA self.tries = 0 self.current_pkg = Paquete.crear_estados_y_eventos(0x01, self.uc.id_UC, self.seq) # Enviamos el paquete al medio self.transport.write(self.current_pkg.octet_str()) # Cambio de estado self.scada_state = States.STATE_REQ_SENT # Preparamos el temeout log.msg('Poll ---> %.2d%.2d' % (self.co.id_CO, self.uc.id_UC)) self.timeout_defer = reactor.callLater(self.co.t_out, self.timeoutElapsed) #@UndefinedVariable
def work(self): ''' El hilo del concentrador ''' print "Inciando concentrador", self.concentrador, print " microcontroladores 485 nros:", map( lambda c: c.id_UC, self.concentrador.uc_set.all()) if not self._connect(): print "No se pudo conectar con %s:%s" % self.direccion() return # Seteamos el timeout self.socket.settimeout(1) # El automata se encarga de validar la integridad de los pauqetes automata = UCNetPacketDetector() while True: if GLOBAL_INTERRUPT_FLAG: return if not self.concentrador.uc_set.all().count(): print "Sin controladores que pollear" return data = None tiempo_inicial = time.time() for uc in self.concentrador.uc_set.all(): print "Poll UC ", uc.id_UC p = Paquete.crear_estados_y_eventos(0x01, uc.id_UC, self.seq_num) print p try: self.socket.send(p.octet_str()) except SocketError, e: print "Error en envio: %s" % e return try: data = self.socket.recv(255) except SocketError, e: print "Error en recepcion %s" % e else: # Si recibimos datos probamos armar el paquete automata.feed(data) # Con lo que sale del automata armamos un paquete r = Paquete(lista_enteros=automata.get_pkg()) p.evaluar_respuesta(r) print r self.avanzar_seq_num()
def work(self): ''' El hilo del concentrador ''' print "Inciando concentrador", self.concentrador, print " microcontroladores 485 nros:", map(lambda c: c.id_UC, self.concentrador.uc_set.all()) if not self._connect(): print "No se pudo conectar con %s:%s" % self.direccion() return # Seteamos el timeout self.socket.settimeout(1) # El automata se encarga de validar la integridad de los pauqetes automata = UCNetPacketDetector() while True: if GLOBAL_INTERRUPT_FLAG: return if not self.concentrador.uc_set.all().count(): print "Sin controladores que pollear" return data = None tiempo_inicial = time.time() for uc in self.concentrador.uc_set.all(): print "Poll UC ", uc.id_UC p = Paquete.crear_estados_y_eventos(0x01, uc.id_UC, self.seq_num) print p try: self.socket.send(p.octet_str()) except SocketError, e: print "Error en envio: %s" % e return try: data = self.socket.recv(255) except SocketError, e: print "Error en recepcion %s" % e else: # Si recibimos datos probamos armar el paquete automata.feed(data) # Con lo que sale del automata armamos un paquete r = Paquete(lista_enteros = automata.get_pkg()) p.evaluar_respuesta(r) print r self.avanzar_seq_num()
def on_pushSendReqEv_pressed(self): pkg = Paquete.crear_estados_y_eventos(self.origen, self.destino, self.secuencia) self.entrada_hexa() self.line_envio.setText(pkg.hex_dump())
def on_pushSendReqEv_pressed(self): pkg = Paquete.crear_estados_y_eventos(self.origen, self.destino, self.secuencia) self.entrada_hexa() self.line_envio.setText(pkg.hex_dump())