AttributeError: 'Utility' object has no attribute 'ser'

пишу приложение с serial port на python и возникла следующая ошибка

File "/home/ivaries/Projects/Locator_Layout/Main/Layout_Control/control.py", line 51, in Move
    self.Utility.move(self.y, self.x, self.block)
  File "/home/ivaries/Projects/Locator_Layout/Main/Layout_Control/utility.py", line 96, in move
    resp = self.__gcode_querry(move_com)
  File "/home/ivaries/Projects/Locator_Layout/Main/Layout_Control/utility.py", line 20, in __gcode_querry
    self.ser.flushInput()
AttributeError: 'Utility' object has no attribute 'ser'

Я понимаю что ошибка говорит о том, что класс Utility не имеет инициализации переменной ser, но если смотреть по коду, то она есть...

def __gcode_querry(self, g_code, resp_lines = 1):
        self.ser.flushInput()
        self.ser.write(g_code.encode())
        resp = self.ser.readline()
        # Последняя линия ответа
        #for i in range(resp_lines - 1):
            #discard = self.ser.readline()
        return resp

def __init__(self, port, baudRate):
        g_code_motor_on = 'M17 ;\n'
        g_code_se_dis = 'M211 S0; \n'
        g_code_rel_mode = 'G91 ;\n'
        g_code_motor_current = 'M907 X10 Y10 ;\n'
        g_code_feedrate = 'M220 S5 ; \n'
        g_code_maxfrate = 'M203 X1.5 y0.5 ; \n'
        g_code_saccel = 'M204 T2 ;\n'

        self.init = False
        try:
            self.ser = serial.Serial(port, baudRate, timeout = 5)
        except:
            return

        # Запустите двигатель, отключите точки остановки и
        # установить относительный режим
        self.__gcode_querry(g_code_motor_on, 29);
        self.__gcode_querry(g_code_maxfrate);
        self.__gcode_querry(g_code_saccel);
        #self.__gcode_querry(g_code_motor_current);
        #self.__gcode_querry(g_code_feedrate);
        self.__gcode_querry(g_code_se_dis, 2);
        self.__gcode_querry(g_code_rel_mode);
        self.init = True

def move(self, x, y, blocking = False):
        move_com = f"G0 X{x} Y{y} ;\n"

        resp = self.__gcode_querry(move_com)

        if True == blocking:
            #todo: возможно, нам нужно вместо этого использовать delta < min_gap
            while(True):
                sleep(1/100)
                current_pos = self.__gcode_coord_get()
                if None != current_pos:
                    break

        return resp

В move вызывается __gcode_querry(move_com), в котором удаляются данные входного буфера self.ser.flushInput(), сам же ser инициализирован в init

        try:
            self.ser = serial.Serial(port, baudRate, timeout = 5)
        except:
            return

в чем может быть беда?


Ответы (0 шт):