Как возвращаемое значение из класса, унаследованного от serial_asyncio - PullRequest
0 голосов
/ 27 мая 2020

У меня весы CAS CI-200A. Имеет командный режим. В командном режиме весы слушают последовательные команды и отвечают. Я использую глобальную переменную SendWT_result, которая возвращает мне текущее значение веса ... есть ли способ получить результат без глобальной переменной?

Я пробовал использовать 'a = l oop .run_until_complete (coro)', но это вернуть только объект, например: (SerialTransport (None, None, None), <<strong> main .Send_WT object at 0xb61d9eb0>)

import asyncio
import serial_asyncio
SendWT_result=''
message = b"\rWT\r\n"
class Send_WT(asyncio.Protocol):
def connection_made(self, transport,message=message):
    self.transport = transport
    print('port opened', transport)
    transport.serial.rts = False  # You can manipulate Serial object via transport
    transport.write(message)  # Write serial data via transport

def data_received(self, data):
    global SendWT_result 
    SendWT_result+=str(data)
    print ("this is DATA: {0}".format(data))
    if b'\n' in data:
            SendWT_result=int(SendWT_result[SendWT_result.rindex('x')+6:SendWT_result.rindex('kg')])
            self.transport.close()

    print("SendWT_result from import: {0}".format(SendWT_result))
def connection_lost(self, exc):

    print('port closed')
    self.transport.loop.stop()

def pause_writing(self):
    print('pause writing')
    print(self.transport.get_write_buffer_size())

def resume_writing(self):
    print(self.transport.get_write_buffer_size())
    print('resume writing')

loop = asyncio.new_event_loop()
coro = serial_asyncio.create_serial_connection(loop, Send_WT, '/dev/ttyUSB0', baudrate=9600)
a=loop.run_until_complete(coro)
loop.run_forever()
loop.close()
print(a)
...