def clear_plc(self): try: # 运动状态全部清零 self.__write(HOCK_RESET_PLC, 0) # 重置清零 self.__write(HOCK_STOP_PLC, 0) # 紧急停止清零 self.__write(HOCK_MOVE_STATUS_PLC, 0) # 运动状态清零 self.__write(EAST_PLC, 0) self.__write(WEST_PLC, 0) self.__write(SOUTH_PLC, 0) self.__write(NORTH_PLC, 0) self.__write(UP_PLC, 0) self.__write(DOWN_PLC, 0) self.__write(UP_CARGOHOOK_PLC, 0) self.__write(DOWN_CARGOHOOK_PLC, 0) self.__write(GO_AND_BACK, 0) self.__write(SOUTH_NORTH_SERVER_ERROR, 0) self.__write(EAST_SERVER_ERROR, 0) self.__write(WEST_SERVER_ERROR, 0) self.__write(WEST_LIMIT_ERROR, 0) self.__write(EAST_LIMIT_ERROR, 0) self.__write(NORTH_LIMIT_ERROR, 0) self.__write(SOUTH_LIMIT_ERROR, 0) self.power = True except Exception as e: logger("PLC 无法写入数值,请检查端口", level='error')
def speed(self): try: move_speed = self.__read(MOVE_SPEED) except Exception as e: logger(e.__str__(), level="error") else: self._speed = move_speed return self._speed
def re_work(self): self.intelligentthread.work = True try: self.intelligentthread.target_bag_position.clear() self.intelligentthread.move_to_bag_x = False self.intelligentthread.move_to_bag_y = False self.intelligentthread.scan_bag = False except Exception as e: logger(e.__str__(), "error")
def clear_plc(self): ''' 行车清零 :return: ''' try: self.plchandle.clear_plc() except Exception as e: logger(e.__str__(), "error")
def resetplc(self): ''' 行车复位 :return: ''' try: self.plchandle.reset() except Exception as e: logger(e.__str__(), "error")
def read_status(self): ''' 读取钩子移动状态: 1:运动 0:静止 :return: int ''' try: result = self.__read(HOCK_MOVE_STATUS_PLC) except Exception as exc: logger("PLC 无法读取数值,请检查端口", level='error') result = 0 return result
def power(self, trueorfalse): ''' 1:开启 0:关闭 :return: ''' try: self._power = trueorfalse self.__write(POWER_PLC, 1 if trueorfalse else 0) except Exception as e: logger(e.__str__(), level="error")
def power(self): ''' 1:开启 0:关闭 :return: ''' try: powervalue = self.__read(POWER_PLC) except Exception as e: logger(e.__str__(), level="error") else: self._power = (powervalue == 1) return self._power
def is_open(self): ''' 用来检测程序是否连接了PLC :return: ''' try: # self.info() self._plc_status = True except Exception as e: logger("PLC 连接失败,请检查端口", level='error') self._plc_status = False return self._plc_status
def __write(self, address, value: int): ''' 向PLC中写入数据 :param address: :param value: :return: ''' try: self.master.execute(1, cst.WRITE_SINGLE_REGISTER, address, output_value=value) except: logger("PLC 无法写入,请检查端口", level='error')
def move(self, east=0, west=0, south=0, nourth=0, up=0, down=0, up_cargohook=0, down_cargohook=0): try: self.plchandle.move(east, west, south, nourth, up, down, up_cargohook, down_cargohook) except Exception as e: logger(e.__str__(), "error")
def __read(self, address): ''' 向PLC中读取数据 :param address: :return: ''' try: info = self.master.execute(1, cst.READ_HOLDING_REGISTERS, starting_address=address, quantity_of_x=1) except Exception as e: logger(e.__str__(), "error") raise e else: return info[0]
def init_plc(self): ''' 初始化PLC :return: ''' try: self.master = modbus_rtu.RtuMaster( serial.Serial(port=self.port, baudrate=19200, bytesize=8, parity='E', stopbits=1, xonxoff=0)) self.master.set_timeout(self.timeout) # PLC 延迟 self.master.set_verbose(True) except Exception as exc: logger("PLC 连接失败,请检查端口", level='error') self._plc_status = False
def quickly_stop_work(self): ''' 行车紧急停止 :return: ''' self.intelligentthread.work = False try: self.plchandle.ugent_stop() if len(self.intelligentthread.target_bag_position) > 0: self.intelligentthread.target_bag_position.clear() self.intelligentthread.scan_bag = False self.intelligentthread.move_to_bag_x = False self.intelligentthread.move_to_bag_y = False if self.intelligentthread.save_video: self.intelligentthread.update_savevideo.emit( self.intelligentthread.save_video) except Exception as e: logger(e.__str__(), "error")
def reset(self): '''复位 1:复位 0:取消复位 ''' try: # 写入复位 self.__write(HOCK_RESET_PLC, 1) # 紧急停止清零 self.__write(HOCK_STOP_PLC, 0) # 运动状态清零 self.__write(HOCK_MOVE_STATUS_PLC, 0) self.__write(EAST_PLC, 0) self.__write(WEST_PLC, 0) self.__write(SOUTH_PLC, 0) self.__write(NORTH_PLC, 0) self.__write(UP_PLC, 0) self.__write(DOWN_PLC, 0) self.__write(UP_CARGOHOOK_PLC, 0) self.__write(DOWN_CARGOHOOK_PLC, 0) self.power = True except Exception as e: logger("PLC 无法写入数值,请检查端口", level='error')
def check_error(self): info = {} try: south_north = self.__read(SOUTH_NORTH_SERVER_ERROR) except Exception as e: south_north = 1 logger("PLC 无法读取{}数值,请检查端口".format('南北伺服寄存器地址'), level='error') info['south_north'] = south_north try: east_server = self.__read(EAST_SERVER_ERROR) except: east_server = 1 logger("PLC 无法读取{}数值,请检查端口".format('东伺服寄存器地址'), level='error') info['east_server'] = east_server try: west_server = self.__read(WEST_SERVER_ERROR) except: west_server = 1 # self.__read(WEST_SERVER_ERROR) logger("PLC 无法读取{}数值,请检查端口".format('西伺服寄存器地址'), level='error') info['west_server'] = west_server try: west = self.__read(WEST_LIMIT_ERROR) except: west = 1 logger("PLC 无法读取{}数值,请检查端口".format('西限位寄存器地址'), level='error') info['west'] = west try: east = self.__read(EAST_LIMIT_ERROR) except: east = 1 logger("PLC 无法读取{}数值,请检查端口".format('东限位寄存器地址'), level='error') info['east'] = east try: north = self.__read(NORTH_LIMIT_ERROR) except: north = 1 logger("PLC 无法读取{}数值,请检查端口".format('北限位寄存器地址'), level='error') info['north'] = north try: south = self.__read(SOUTH_LIMIT_ERROR) except: south = 1 logger("PLC 无法读取{}数值,请检查端口".format('南限位寄存器地址'), level='error') info['south'] = south try: sourth_north_server_trip_warn = self.__read( SOUTH_NORTH_SERVER_TRIP_WARN) except: sourth_north_server_trip_warn = 1 info['sourth_north_server_trip_warn'] = sourth_north_server_trip_warn try: east_west_server1_trip_warn = self.__read( EAST_WEST_SERVER1_TRIP_WARN) except: east_west_server1_trip_warn = 1 info['east_west_server1_trip_warn'] = east_west_server1_trip_warn try: east_west_server2_trip_warn = self.__read( EAST_WEST_SERVER2_TRIP_WARN) except: east_west_server2_trip_warn = 1 info['east_west_server2_trip_warn'] = east_west_server2_trip_warn return info
def switch_power(self): try: self.plchandle.power = True except Exception as e: logger(e.__str__(), "error")
def hock_stop(self): try: self.__write(HOCK_MOVE_STATUS_PLC, int(0)) except Exception as e: logger("PLC 无法写入数值,请检查端口", level='error')
def move(self, east=0, west=0, south=0, nourth=0, up=0, down=0, up_cargohook=0, down_cargohook=0): try: self.__write(HOCK_MOVE_STATUS_PLC, int(1)) # 钩子运动状态上升 if east != 0: east_server = self.__read(EAST_SERVER_ERROR) east_limit = self.__read(EAST_LIMIT_ERROR) if (east_server is None or east_server != 1) and (east_limit is None or east_limit != -1): self.__write(EAST_PLC, int(east)) logger("向东{}cm".format(int(east)), level='info') if west != 0: west_server = self.__read(WEST_SERVER_ERROR) west_limit = self.__read(WEST_LIMIT_ERROR) if (west_server is None or west_server != 1) and (west_limit is None or west_limit != -1): self.__write(WEST_PLC, int(west)) logger("向西{}cm".format(int(west)), level='info') if south != 0: northsourth_server = self.__read(SOUTH_NORTH_SERVER_ERROR) sourth_limit = self.__read(SOUTH_LIMIT_ERROR) if (northsourth_server is None or northsourth_server != 1) and (sourth_limit is None or sourth_limit != -1): self.__write(SOUTH_PLC, int(south)) logger("向南{}cm".format(int(south)), level='info') if nourth != 0: northsourth_server = self.__read(SOUTH_NORTH_SERVER_ERROR) north_limit = self.__read(NORTH_LIMIT_ERROR) if (northsourth_server is None or northsourth_server != 1) and (north_limit is None or north_limit != -1): self.__write(NORTH_PLC, int(nourth)) logger("向北{}cm".format(int(nourth)), level='info') # 定位钩上升 if up != 0: self.__write(UP_PLC, int(up)) logger("向上{}cm".format(int(up)), level='info') # 定位钩下降 if down != 0: self.__write(DOWN_PLC, int(down)) logger("向下{}cm".format(int(down)), level='info') # 货钩上升 if up_cargohook != 0: self.__write(UP_CARGOHOOK_PLC, int(up_cargohook)) logger("货钩向上{}cm".format(int(up_cargohook)), level='info') # 货钩下降 if down_cargohook != 0: self.__write(DOWN_CARGOHOOK_PLC, int(down_cargohook)) logger("货钩向下{}cm".format(int(down_cargohook)), level='info') except Exception as exc: logger("PLC 无法写入数值,请检查端口", level='error')
def go_and_back(self): try: self.__write(GO_AND_BACK, int(1)) # 钩子运动状态上升 except Exception as exc: logger("PLC 无法写入数值,请检查端口", level='error')
def move_status(self, value): try: self.__write(HOCK_MOVE_STATUS_PLC, int(value)) # 运动状态写入 except Exception as exc: logger("PLC 无法写入数值,请检查端口", level='error')
def speed(self, speed_value): try: self._speed = speed_value self.__write(MOVE_SPEED, speed_value) except Exception as e: logger(e.__str__(), level="error")
def turnon_lamp(self): try: self.plchandle.turnon_lamp() except Exception as e: logger(e.__str__(), "error")