diff --git a/sf_machine_connect/__manifest__.py b/sf_machine_connect/__manifest__.py index 52fee05c..8579b691 100644 --- a/sf_machine_connect/__manifest__.py +++ b/sf_machine_connect/__manifest__.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. { - 'name': 'sf_machine_connect', - 'version': '1.0', - 'summary': '智能工厂机床连接模块', + 'name': '机企猫智能工厂 对接机床', + 'version': '2.0', + 'summary': 'sf_machine_connect', 'sequence': 10, 'description': """ 这是一个模块 @@ -20,6 +20,7 @@ 'views/WorkCenterBarcodes.xml', 'views/Stock_picking_Barcodes.xml', 'views/machine_monitor.xml', + 'views/machine_info_present.xml', ], 'assets': { diff --git a/sf_machine_connect/models/ftp_client.py b/sf_machine_connect/models/ftp_client.py index 6744ca1a..f3281653 100644 --- a/sf_machine_connect/models/ftp_client.py +++ b/sf_machine_connect/models/ftp_client.py @@ -24,6 +24,23 @@ class FtpButton(models.Model): _inherit = 'sf.cnc.processing' button_state = fields.Boolean(string='是否已经下发') + user_permissions = fields.Boolean(string='权限', related='workorder_id.user_permissions') + state = fields.Selection(string='状态', related='workorder_id.state') + + @api.onchange('users_ids') + def get_user_permissions(self): + uid = self.env.uid + for workorder in self: + if workorder.users_ids: + list_user_id = [] + for item in workorder.users_ids: + list_user_id.append(item.id) + if uid in list_user_id: + workorder.user_permissions = True + else: + workorder.user_permissions = False + else: + workorder.user_permissions = False def pri(self): """ @@ -53,7 +70,13 @@ class FtpButton(models.Model): except Exception: raise UserError("补偿值写入执行超时,请检查机床状态或者写入状态") - ftp = ftp_operate.FtpController() + # host="192.168.2.158", port=8080, username="MITSUBISHI", password="CNC" + host = self.workorder_id.workcenter_id.machine_tool_id.ftp_host + port = self.workorder_id.workcenter_id.machine_tool_id.ftp_port + username = self.workorder_id.workcenter_id.machine_tool_id.ftp_num + pwd = self.workorder_id.workcenter_id.machine_tool_id.ftp_pwd + + ftp = ftp_operate.FtpController(host, port, username, pwd) # ftp.delAllfile('C://Users//马广威//Desktop//ftp') a = self.cnc_id _logger.info(a.public) @@ -62,12 +85,14 @@ class FtpButton(models.Model): # file_path = '{}\{}\{}'.format(a._filestore(), a.store_fname.split('/'[0]), a.display_name) file_path_local = '{}/{}'.format('/nc2machine', a.display_name) - file_path_remote = '{}\{}'.format('//(192,168,2,141)//DS', a.display_name) + file_path_remote = '{}\{}'.format('//M80(192,168,2,142)//DS', a.display_name) with open(file_path_local, mode='wb+') as file: file.write(datas) # 存在本地的文件下发到机床 + _logger.info("=====================11================") ftp.upload_file(remotepath=file_path_remote, localpath=file_path_local) + _logger.info("=====================22================") except Exception as e: _logger.info("=====================================", e) raise UserError('NC下发执行超时, 请检查下发状态') @@ -85,6 +110,41 @@ class FtpButton(models.Model): # 'target': 'new' # } + # def up_all(self): + # """ + # 此函数用于将NC代码全部下发到机床 + # :return: + # """ + # # host="192.168.2.158", port=8080, username="MITSUBISHI", password="CNC" + # host = self.workorder_id.workcenter_id.machine_tool_id.ftp_host + # port = self.workorder_id.workcenter_id.machine_tool_id.ftp_port + # username = self.workorder_id.workcenter_id.machine_tool_id.ftp_num + # pwd = self.workorder_id.workcenter_id.machine_tool_id.ftp_pwd + # + # ftp = ftp_operate.FtpController(host, port, username, pwd) + # # ftp.delAllfile('C://Users//马广威//Desktop//ftp') + # for item in self.cnc_ids: + # a = item.cnc_id + # print(a.display_name) + # # _logger.info(a.public) + # # _logger.info(a.display_name) + # # datas = base64.standard_b64decode(a.datas) + # # + # # # file_path = '{}\{}\{}'.format(a._filestore(), a.store_fname.split('/'[0]), a.display_name) + # # # file_path_local = '{}/{}'.format('/nc2machine', a.display_name) + # # file_path_local = '{}/{}'.format('D:\\jikimo', a.display_name) + # # # file_path_remote = '{}\{}'.format('//M80(192,168,2,142)//DS', a.display_name) + # # + # # with open(file_path_local, mode='wb+') as file: + # # file.write(datas) + # # 存在本地的文件下发到机床 + # # _logger.info("=====================11================") + # # ftp.upload_file(remotepath=file_path_remote, localpath=file_path_local) + # # _logger.info("=====================22================") + # # except Exception as e: + # # _logger.info("=====================================", e) + # # raise UserError('NC下发执行超时, 请检查下发状态') + def check_compensation_before_up(self): """ 下发NC代码前自动补偿三元检测偏差值 @@ -93,9 +153,9 @@ class FtpButton(models.Model): try: temp_dict = {} temp_dict[ - 'ns=1;s=Project_Default.Group1.Mitsubishi_NC2.hongbianliang550'] = self.workorder_id.compensation_value_x + 'ns=1;s=Project_Default.Group1.Mitsubishi_NC.hongbianliang550'] = self.workorder_id.compensation_value_x temp_dict[ - 'ns=1;s=Project_Default.Group1.Mitsubishi_NC2.hongbianliang551'] = self.workorder_id.compensation_value_y + 'ns=1;s=Project_Default.Group1.Mitsubishi_NC.hongbianliang551'] = self.workorder_id.compensation_value_y temp = py2opcua.Py2opcua() # temp.connect() temp.write(temp_dict) @@ -111,6 +171,21 @@ class Machine_ftp(models.Model): """ _inherit = 'sf.machine_tool' + workorder_ids = fields.One2many('mrp.workorder', 'machine_tool_id', string='工单') + + # 机床配置项目 + # ftp相关 + ftp_num = fields.Char('ftp账号') + ftp_pwd = fields.Char('ftp密码') + ftp_host = fields.Char('ftp地址') + ftp_port = fields.Integer('ftp端口') + # 补偿值写入相关 + x_compensation_node = fields.Char('x补偿值节点') + y_compensation_node = fields.Char('y补偿值节点') + # 数采配置相关 + machine_ip = fields.Char('机床IP') + + # 机床采集项目 timestamp = fields.Datetime('时间戳', readonly=True) signed = fields.Integer('刷新间隔', readonly=True) status = fields.Boolean('在线状态', readonly=True) @@ -160,25 +235,76 @@ class WorkCenterBarcode(models.Model): compensation_value_x = fields.Float(string='X轴补偿值') compensation_value_y = fields.Float(string='Y轴补偿值') button_compensation_state = fields.Boolean(string='是否已经补偿') + machine_tool_id = fields.Many2one('sf.machine_tool', string='机床') + machine_tool_name = fields.Char(string='机床名称', default='未知机床', compute='_total', readonly=True) + machine_tool_type_id = fields.Char(string='机床型号', default='未知型号', compute='_total', readonly=True) + machine_tool_status = fields.Boolean(string='在线状态', compute='_total', readonly=True) + machine_tool_run_status = fields.Selection([('0', '关机中'), ('1', '加工中'), ('2', '加工中'), ('3', '等待中')], + string='运行状态', readonly=True, default='0') + + @api.depends('workcenter_id') + def _total(self): + # self.machine_tool_name = '1号机床' + self.machine_tool_name = self.workcenter_id.machine_tool_id.name + self.machine_tool_type_id = self.workcenter_id.machine_tool_id.type_id.name + self.machine_tool_status = self.workcenter_id.machine_tool_id.status + self.machine_tool_run_status = self.workcenter_id.machine_tool_id.run_status def compensation(self): - """ - 将节点与其值放入字典,字典作为参数传入 - :return: - """ + + hongbianliang550 = self.workcenter_id.machine_tool_id.x_compensation_node + hongbianliang551 = self.workcenter_id.machine_tool_id.y_compensation_node + try: temp_dict = {} - temp_dict['ns=1;s=Project_Default.Group1.Mitsubishi_NC2.hongbianliang550'] = self.compensation_value_x - temp_dict['ns=1;s=Project_Default.Group1.Mitsubishi_NC2.hongbianliang551'] = self.compensation_value_y - temp = py2opcua.Py2opcua() - # temp.connect() - temp.write(temp_dict) - self.button_compensation_state = True + temp_dict[hongbianliang550] = self.compensation_value_x + temp_dict[hongbianliang551] = self.compensation_value_y + print("=================================") + print(temp_dict) + # temp = py2opcua.Py2opcua() + # # temp.connect() + # temp.write(temp_dict) + # self.button_compensation_state = True # temp.disconnect() except Exception as e: _logger.info("=====================================", e) raise UserError('补偿值获取失败,或机床未连接,请检查') + def up_all(self): + """ + 此函数用于将NC代码全部下发到机床 + :return: + """ + # host="192.168.2.158", port=8080, username="MITSUBISHI", password="CNC" + host = self.workcenter_id.machine_tool_id.ftp_host + port = self.workcenter_id.machine_tool_id.ftp_port + username = self.workcenter_id.machine_tool_id.ftp_num + pwd = self.workcenter_id.machine_tool_id.ftp_pwd + print(host, port, username, pwd) + # ftp = ftp_operate.FtpController(host, port, username, pwd) + # ftp.delAllfile('C://Users//马广威//Desktop//ftp') + for item in self.cnc_ids: + a = item.cnc_id + print(a.display_name) + _logger.info(a.public) + _logger.info(a.display_name) + datas = base64.standard_b64decode(a.datas) + + # file_path = '{}\{}\{}'.format(a._filestore(), a.store_fname.split('/'[0]), a.display_name) + # file_path_local = '{}/{}'.format('/nc2machine', a.display_name) + file_path_local = '{}/{}'.format('D:\\jikimo', a.display_name) + # file_path_remote = '{}\{}'.format('//M80(192,168,2,142)//DS', a.display_name) + + with open(file_path_local, mode='wb+') as file: + file.write(datas) + # 存在本地的文件下发到机床 + # _logger.info("=====================11================") + # ftp.upload_file(remotepath=file_path_remote, localpath=file_path_local) + # _logger.info("=====================22================") + # except Exception as e: + # _logger.info("=====================================", e) + # raise UserError('NC下发执行超时, 请检查下发状态') + def get__state(self): pay_time = str(datetime.now()) json = { diff --git a/sf_machine_connect/models/ftp_operate.py b/sf_machine_connect/models/ftp_operate.py index 18838684..e60d5807 100644 --- a/sf_machine_connect/models/ftp_operate.py +++ b/sf_machine_connect/models/ftp_operate.py @@ -45,6 +45,9 @@ class FtpController: self.port = port self.username = username self.password = password + # 测试 + print("==============================================") + print(self.username, self.port, self.host, self.password) ftp = FTP_P() # self.ftp.set_debuglevel(2) #打开调试级别2,显示详细信息 ftp.set_pasv(0) # 0主动模式 1 #被动模式 @@ -68,7 +71,7 @@ class FtpController: :param localpath: :return: """ - bufsize = 1024 + bufsize = 8192 # fp = open(localpath, 'rb') # self.ftp.storbinary('STOR ' + remotepath, fp, bufsize) # fp.close() diff --git a/sf_machine_connect/views/SfWorkOrderBarcodes.xml b/sf_machine_connect/views/SfWorkOrderBarcodes.xml index 858d96f0..11c155c5 100644 --- a/sf_machine_connect/views/SfWorkOrderBarcodes.xml +++ b/sf_machine_connect/views/SfWorkOrderBarcodes.xml @@ -1,4 +1,4 @@ - + sf.install.the.tray.workorder.form.scan.barcode @@ -8,7 +8,6 @@ - diff --git a/sf_machine_connect/views/compensation.xml b/sf_machine_connect/views/compensation.xml index 42c0b383..4a2e6e69 100644 --- a/sf_machine_connect/views/compensation.xml +++ b/sf_machine_connect/views/compensation.xml @@ -11,12 +11,26 @@
- -
+ + + + + + +
diff --git a/sf_machine_connect/views/ftp_button.xml b/sf_machine_connect/views/ftp_button.xml index 4eb8da2a..c8bf8caa 100644 --- a/sf_machine_connect/views/ftp_button.xml +++ b/sf_machine_connect/views/ftp_button.xml @@ -10,8 +10,17 @@ + -