# -*- coding: utf-8 -*- import base64 import logging import json import hashlib import time import requests from datetime import datetime from odoo import fields, models, api, _ from odoo.exceptions import ValidationError from odoo.exceptions import UserError from odoo.addons.sf_machine_connect.models import py2opcua, ftp_operate _logger = logging.getLogger(__name__) # ---------------------------------------------------------- # Models for client # ---------------------------------------------------------- class FtpButton(models.Model): _inherit = 'sf.cnc.processing' button_state = fields.Boolean(string='是否已经下发') def pri(self): """ 一个测试函数,用于检测能否从”获取cnc程序“处获得NC代码文件 :return: """ s = self.cnc_id s1 = self.cnc_id._filestore() print(s1) v = self.cnc_id.display_name a = self.cnc_id.datas print(v) print(a) ftp_operate.FtpController.prin(self) def up(self): """ 此函数用于将NC代码下发到机床 :return: """ # 点击下发按钮自动补偿三元检测偏差值 try: try: if self.sequence_number == '1': self.check_compensation_before_up() except Exception: raise UserError("补偿值写入执行超时,请检查机床状态或者写入状态") ftp = ftp_operate.FtpController() # ftp.delAllfile('C://Users//马广威//Desktop//ftp') a = self.cnc_id _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_remote = '{}\{}'.format('//(192,168,2,141)//DS', a.display_name) with open(file_path_local, mode='wb+') as file: file.write(datas) # 存在本地的文件下发到机床 ftp.upload_file(remotepath=file_path_remote, localpath=file_path_local) except Exception as e: _logger.info("=====================================", e) raise UserError('NC下发执行超时, 请检查下发状态') # 补偿下发都执行完毕后,按钮标志位变为true self.button_state = True # 新增,下发完成返回当前工单位置 # return { # 'name': _("工单"), # 'view_mode': 'form', # 'res_model': 'mrp.workorder', # 'res_id': self.workorder_id, # 'type': 'ir.actions.act_window', # 'target': 'new' # } def check_compensation_before_up(self): """ 下发NC代码前自动补偿三元检测偏差值 :return: """ try: temp_dict = {} temp_dict[ 'ns=1;s=Project_Default.Group1.Mitsubishi_NC2.hongbianliang550'] = self.workorder_id.compensation_value_x temp_dict[ 'ns=1;s=Project_Default.Group1.Mitsubishi_NC2.hongbianliang551'] = self.workorder_id.compensation_value_y temp = py2opcua.Py2opcua() # temp.connect() temp.write(temp_dict) # temp.disconnect() except Exception as e: _logger.info("=====================================", e) raise UserError('补偿值获取失败,或机床未连接,请检查') class Machine_ftp(models.Model): """ 数据采集类 """ _inherit = 'sf.machine_tool' timestamp = fields.Datetime('时间戳', readonly=True) signed = fields.Integer('刷新间隔', readonly=True) status = fields.Boolean('在线状态', readonly=True) time_on = fields.Char('总在线时长', readonly=True) time_on_now = fields.Char('本次在线时长', readonly=True) tool_num = fields.Integer('当前刀具', readonly=True) program = fields.Char('当前程序', readonly=True) run_status = fields.Selection([('0', '空闲中'), ('1', '加工中'), ('2', '加工中'), ('3', '等待中')], string='运行状态', readonly=True, default='0') run_time = fields.Char('总运行时长', readonly=True) cut_time = fields.Char('总切削时长', readonly=True) cut_status = fields.Selection([('0', '未切削'), ('1', '切削中'), ('2', '切削中'), ('3', '切削中')], string='切削状态', readonly=True, default='0') tool_num_process_time1 = fields.Char('刀位1', readonly=True, default='0') tool_num_process_time2 = fields.Char('刀位2', readonly=True, default='0') tool_num_process_time3 = fields.Char('刀位3', readonly=True, default='0') tool_num_process_time4 = fields.Char('刀位4', readonly=True, default='0') tool_num_process_time5 = fields.Char('刀位5', readonly=True, default='0') tool_num_process_time6 = fields.Char('刀位6', readonly=True, default='0') tool_num_process_time7 = fields.Char('刀位7', readonly=True, default='0') tool_num_process_time8 = fields.Char('刀位8', readonly=True, default='0') tool_num_process_time9 = fields.Char('刀位9', readonly=True, default='0') tool_num_process_time10 = fields.Char('刀位10', readonly=True, default='0') tool_num_process_time11 = fields.Char('刀位11', readonly=True, default='0') tool_num_process_time12 = fields.Char('刀位12', readonly=True, default='0') tool_num_process_time13 = fields.Char('刀位13', readonly=True, default='0') tool_num_process_time14 = fields.Char('刀位14', readonly=True, default='0') tool_num_process_time15 = fields.Char('刀位15', readonly=True, default='0') tool_num_process_time16 = fields.Char('刀位16', readonly=True, default='0') tool_num_process_time17 = fields.Char('刀位17', readonly=True, default='0') tool_num_process_time18 = fields.Char('刀位18', readonly=True, default='0') tool_num_process_time19 = fields.Char('刀位19', readonly=True, default='0') tool_num_process_time20 = fields.Char('刀位20', readonly=True, default='0') tool_num_process_time21 = fields.Char('刀位21', readonly=True, default='0') tool_num_process_time22 = fields.Char('刀位22', readonly=True, default='0') tool_num_process_time23 = fields.Char('刀位23', readonly=True, default='0') tool_num_process_time24 = fields.Char('刀位24', readonly=True, default='0') class WorkCenterBarcode(models.Model): """ 扫码托盘码可查到制造订单,由制造订单查工单 """ _inherit = "mrp.workorder" compensation_value_x = fields.Float(string='X轴补偿值') compensation_value_y = fields.Float(string='Y轴补偿值') button_compensation_state = fields.Boolean(string='是否已经补偿') def compensation(self): """ 将节点与其值放入字典,字典作为参数传入 :return: """ 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.disconnect() except Exception as e: _logger.info("=====================================", e) raise UserError('补偿值获取失败,或机床未连接,请检查') def get__state(self): pay_time = str(datetime.now()) json = { 'params': { 'model_name': 'jikimo.process.order', 'field_name': 'name', 'default_code': 'PO-2022-1207-0020', 'state': '待付款', # 'pay_time': pay_time, # 'get_order_sf': 21, }, } # res_str = json.dumps(vals) url = 'https://bfm.cs.jikimo.com/api/get/state' requests.post(url, json=json, data=None) def process_control(self): if self.routing_type == '获取CNC加工程序' and self.state == '进行中': json = { 'params': { 'model_name': 'jikimo.process.order', 'field_name': 'name', 'default_code': 'PO-2022-1123-0014', 'state': '加工中', }, } url = 'https://bfm.cs.jikimo.com/api/get/state' requests.post(url, json=json, data=None)