コード例 #1
0
 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)
コード例 #2
0
 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)
コード例 #3
0
ファイル: example.py プロジェクト: ivan45654/Gurux.Net.Python
 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)