def readDLMSPacket2(self, data, reply): if not data: return notify = GXReplyData() reply.error = 0 eop = 0x7E #In network connection terminator is not used. if self.client.interfaceType == InterfaceType.WRAPPER and isinstance( self.media, GXNet): eop = None p = ReceiveParameters() p.eop = eop p.waitTime = self.waitTime if eop is None: p.Count = 8 else: p.Count = 5 self.media.eop = eop rd = GXByteBuffer() with self.media.getSynchronous(): if not reply.isStreaming(): self.writeTrace( "TX: " + self.now() + "\t" + GXByteBuffer.hex(data), TraceLevel.VERBOSE) print("TX: " + self.now() + "\t" + GXByteBuffer.hex(data)) self.media.send(data) pos = 0 try: while not self.client.getData(rd, reply, notify): if notify.data.size != 0: if not notify.isMoreData(): t = GXDLMSTranslator() xml = t.dataToXml(notify.data) print(xml) notify.clear() continue elif not p.eop: p.count = self.client.getFrameSize(rd) while not self.media.receive(p): pos += 1 if pos == 3: raise TimeoutException( "Failed to receive reply from the device in given time." ) if rd.size == 0: print("Data send failed. Try to resend " + str(pos) + "/3") self.media.send(data, None) rd.set(p.reply) p.reply = None except Exception as e: self.writeTrace("RX: " + self.now() + "\t" + str(rd), TraceLevel.ERROR) print("RX: " + self.now() + "\t" + str(rd)) raise e self.writeTrace("RX: " + self.now() + "\t" + str(rd), TraceLevel.VERBOSE) print("RX: " + self.now() + "\t" + str(rd)) if reply.error != 0: raise GXDLMSException(reply.error)
def __init__(self): #List available serial ports. print("Available ports:") print(str(GXSerial.getPortNames())) #Define End Of Packet char. eop = '\r' #Make connection using serial port. media = GXSerial("COM10") print(str(media)) #Start to listen events from the media. media.addListener(self) #Update port here to call onPropertyChanged event. #TODO: Update correct port. media.port = "UPDATE CORRECT PORT" #Show all traces. media.trace = TraceLevel.VERBOSE #Set EOP for the media. media.eop = eop try: #Open the connection. media.open() r = ReceiveParameters() r.eop = eop r.count = 5 #Wait reply for 2 seconds. r.waitTime = 2000 ############################ #Send data synchronously. with media.getSynchronous(): media.send("Hello world!") #Send EOP media.send('\r') ret = media.receive(r) if ret: print(str(r.reply.decode("ascii"))) else: raise Exception("Failed to receive reply from the server.") ############################ #Send async data. media.send("Server !\r") #Wait 1 second to receive reply from the server. time.sleep(1) except (KeyboardInterrupt, SystemExit, Exception) as ex: print(ex) media.close() media.removeListener(self)
def __init__(self): #Define End Of Packet char. eop = 0x7e #Make connection using TCP/IP to localhost. #Use ::1 if you want to use IP v6 address. media = GXNet(NetworkType.TCP, "localhost", 0) #Start to listen events from the media. media.addListener(self) print(str(media)) #Update port here to call onPropertyChanged event. media.port = 1000 #Show all traces. media.trace = TraceLevel.VERBOSE #Set EOP for the media. media.eop = eop try: #Open the connection. media.open() r = ReceiveParameters() r.eop = eop r.count = 5 #Wait reply for 2 seconds. r.waitTime = 2000 ############################ #Send data synchronously. with media.getSynchronous(): media.send("Hello world!") #Send EOP media.send(eop) ret = media.receive(r) if ret: print(str(r.reply.decode("ascii"))) else: raise Exception("Failed to receive reply from the server.") ############################ #Send async data. media.send("Server !") media.send(eop) #Wait 1 second to receive reply from the server. time.sleep(1) except (KeyboardInterrupt, SystemExit, Exception) as ex: print(ex) media.close() media.removeListener(self)