This commit is contained in:
jinling.yang
2023-01-31 10:53:30 +08:00
7 changed files with 98 additions and 159 deletions

6
.idea/vcs.xml generated
View File

@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

121
.idea/workspace.xml generated
View File

@@ -1,121 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="a6934384-3cb4-412f-ad33-230944183daf" name="变更" comment="" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProjectId" id="2KArBhSuUgtOL9OrfrAo80KuD0S" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/../iot" />
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\odoo-16.0" />
</key>
</component>
<component name="RunManager" selected="Python.odoo1-bin">
<configuration name="odoo-bin" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
<module name="odoo-16.0" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/../../odoo-16.0" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/../../odoo-16.0/odoo-bin" />
<option name="PARAMETERS" value="-c D:\odoo-16.0\odoo_bfm.conf -i base" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="odoo1-bin" type="PythonConfigurationType" factoryName="Python">
<module name="odoo-16.0" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/../../odoo-16.0/odoo-bin" />
<option name="PARAMETERS" value="-c D:\odoo-16.0\odoo_sf.conf -u sf_machine_connect" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<list>
<item itemvalue="Python.odoo-bin" />
<item itemvalue="Python.odoo1-bin" />
</list>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="应用程序级" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="默认任务">
<changelist id="a6934384-3cb4-412f-ad33-230944183daf" name="变更" comment="" />
<created>1673428094330</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1673428094330</updated>
<workItem from="1673428095633" duration="1224000" />
<workItem from="1673488896666" duration="932000" />
<workItem from="1673489852051" duration="6114000" />
<workItem from="1673595526524" duration="1191000" />
<workItem from="1673830425053" duration="311000" />
<workItem from="1673830749980" duration="2399000" />
<workItem from="1673858924810" duration="8856000" />
<workItem from="1673927686764" duration="5062000" />
<workItem from="1673935238301" duration="30408000" />
<workItem from="1674044587531" duration="6421000" />
<workItem from="1674953395592" duration="1841000" />
<workItem from="1674955271489" duration="21000" />
</task>
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="3" />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State />
</value>
</entry>
</map>
</option>
</component>
<component name="com.intellij.coverage.CoverageDataManagerImpl">
<SUITE FILE_PATH="coverage/jikimo_sf$odoo1_bin.coverage" NAME="odoo1-bin 覆盖结果" MODIFIED="1674954622789" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="" />
<SUITE FILE_PATH="coverage/jikimo_sf$odoo_bin.coverage" NAME="odoo-bin 覆盖结果" MODIFIED="1673859119327" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/../../odoo-16.0" />
</component>
</project>

View File

@@ -179,11 +179,23 @@ class Machine_ftp(models.Model):
ftp_pwd = fields.Char('ftp密码')
ftp_host = fields.Char('ftp地址')
ftp_port = fields.Integer('ftp端口')
ftp_remote_path = fields.Char('机床ftp路径')
# 补偿值写入相关
x_compensation_node = fields.Char('x补偿值节点')
y_compensation_node = fields.Char('y补偿值节点')
# 数采配置相关
machine_ip = fields.Char('机床IP')
machine_signed = fields.Char('机床刷新间隔')
machine_status = fields.Char('机床在线状态')
machine_time_on = fields.Char('机床总在线时长')
machine_tool_num = fields.Char('机床当前刀具')
machine_program = fields.Char('机床当前程序')
machine_run_status = fields.Char('机床运行状态')
machine_run_time = fields.Char('机床总运行时长')
machine_cut_time = fields.Char('机床总切削时长')
machine_cut_status = fields.Char('机床切削状态')
machine_emg_status = fields.Char('机床急停状态')
machine_mode = fields.Char('机床操作模式')
# 机床采集项目
timestamp = fields.Datetime('时间戳', readonly=True)
@@ -234,21 +246,41 @@ class WorkCenterBarcode(models.Model):
compensation_value_x = fields.Float(string='X轴补偿值')
compensation_value_y = fields.Float(string='Y轴补偿值')
button_compensation_state = fields.Boolean(string='是否已经补偿')
button_compensation_state = fields.Boolean(string='是否已经补偿', readonly=True)
button_up_all_state = fields.Boolean(string='是否已经全部下发', readonly=True)
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_name = fields.Char(string='机床名称', default='未知机床', compute='_run_info', readonly=True)
machine_tool_type_id = fields.Char(string='机床型号', default='未知型号', compute='_run_info', readonly=True)
machine_tool_status = fields.Boolean(string='在线状态', compute='_run_info', readonly=True)
machine_tool_run_status = fields.Selection([('0', '关机中'), ('1', '加工中'), ('2', '加工中'), ('3', '等待中')],
string='运行状态', readonly=True, default='0')
string='运行状态', compute='_run_info', readonly=True, default='0')
machine_tool_timestamp = fields.Datetime('时间戳', compute='_run_info', readonly=True)
machine_tool_time_on = fields.Char('总在线时长', compute='_run_info', readonly=True)
machine_tool_time_on_now = fields.Char('本次在线时长', compute='_run_info', readonly=True)
machine_tool_tool_num = fields.Integer('当前刀具', compute='_run_info', readonly=True)
machine_tool_program = fields.Char('当前程序', compute='_run_info', readonly=True)
machine_tool_machine_ip = fields.Char('机床IP', compute='_run_info', readonly=True)
machine_tool_cut_status = fields.Selection([('0', '未切削'), ('1', '切削中'), ('2', '切削中'), ('3', '切削中')],
string='切削状态', compute='_run_info', readonly=True, default='0')
machine_tool_compensation_value_x = fields.Char('x补偿值', compute='_run_info', readonly=True)
machine_tool_compensation_value_y = fields.Char('y补偿值', compute='_run_info', readonly=True)
@api.depends('workcenter_id')
def _total(self):
@api.depends('workcenter_id.machine_tool_id.timestamp')
def _run_info(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
self.machine_tool_timestamp = self.workcenter_id.machine_tool_id.timestamp
self.machine_tool_time_on = self.workcenter_id.machine_tool_id.time_on
self.machine_tool_time_on_now = self.workcenter_id.machine_tool_id.time_on_now
self.machine_tool_tool_num = self.workcenter_id.machine_tool_id.tool_num
self.machine_tool_program = self.workcenter_id.machine_tool_id.program
self.machine_tool_machine_ip = self.workcenter_id.machine_tool_id.machine_ip
self.machine_tool_cut_status = self.workcenter_id.machine_tool_id.cut_status
self.machine_tool_compensation_value_x = self.compensation_value_x
self.machine_tool_compensation_value_y = self.compensation_value_y
def compensation(self):
@@ -269,6 +301,8 @@ class WorkCenterBarcode(models.Model):
except Exception as e:
_logger.info("=====================================", e)
raise UserError('补偿值获取失败,或机床未连接,请检查')
# 补偿执行完毕后按钮标志位变为true
self.button_compensation_state = True
def up_all(self):
"""
@@ -280,30 +314,36 @@ class WorkCenterBarcode(models.Model):
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)
remote_path = self.workcenter_id.machine_tool_id.ftp_remote_path
print(host, port, username, pwd, remote_path)
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)
try:
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)
# 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)
file_path_remote = '{}\{}'.format(remote_path, 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)
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下发执行超时, 请检查下发状态')
except Exception as e:
_logger.info("=====================================", e)
raise UserError('NC下发执行超时, 请检查下发状态')
# 下发都执行完毕后按钮标志位变为true
self.button_up_all_state = True
def get__state(self):
pay_time = str(datetime.now())

View File

@@ -12,10 +12,14 @@
</group>
<div>
<div>
<field name="button_compensation_state"/>
<field name="button_compensation_state" attrs='{"invisible": ["|",
("state","!=","progress"),("user_permissions","=",False)]}'/>
<button string="一键补偿" name="compensation" type="object" confirm="是否确认下发补偿"
class="btn-primary" attrs='{"invisible": ["|",
("state","!=","progress"),("user_permissions","=",False)]}'/>
<span>&#32;</span>
<field name="button_up_all_state" attrs='{"invisible": ["|",
("state","!=","progress"),("user_permissions","=",False)]}'/>
<button string="一键下发" name="up_all" type="object" style="text-align: right;" confirm="是否确认一键下发"
class="btn-primary" attrs='{"invisible": ["|",
("state","!=","progress"),("user_permissions","=",False)]}'/>

View File

@@ -11,9 +11,10 @@
<xpath expr="//field[@name='remark']" position="after">
<!-- <button string="测试按钮" name="pri" type="object" class="btn-primary"/>-->
<!-- <field name="workorder_id" invisible="1"/>-->
<field name="button_state"/>
<field name="user_permissions" invisible="1"/>
<field name="state" invisible="1"/>
<field name="button_state" attrs='{"invisible": ["|",("state","!=","progress"),
("user_permissions","!=",True)]}' optional="show"/>
<button string="下发" name="up" type="object" class="btn-primary" confirm="是否确认下发此程序"
attrs='{"invisible": ["|",("state","!=","progress"),
("user_permissions","!=",True)]}'/>

View File

@@ -7,13 +7,22 @@
<field name="arch" type="xml">
<xpath expr="//page[last()-3]" position="before">
<page string="机床信息" attrs='{"invisible": [("routing_type","!=","CNC加工")]}'>
<group>
<!-- <field name="machine_tool_id"/>-->
<group string="机床信息">
<field name="machine_tool_name"/>
<field name="machine_tool_type_id"/>
<field name="machine_tool_machine_ip"/>
</group>
<group string="运行信息">
<field name="machine_tool_timestamp"/>
<field name="machine_tool_status"/>
<field name="machine_tool_run_status"/>
<!-- <field name="cnc_ids" widget="one2many" string="工作程序"></field>-->
<field name="machine_tool_time_on"/>
<field name="machine_tool_time_on_now"/>
<field name="machine_tool_tool_num"/>
<field name="machine_tool_program"/>
<field name="machine_tool_cut_status"/>
<field name="machine_tool_compensation_value_x"/>
<field name="machine_tool_compensation_value_y"/>
</group>
</page>
</xpath>

View File

@@ -107,6 +107,7 @@
<field name="ftp_pwd"/>
<field name="ftp_host"/>
<field name="ftp_port"/>
<field name="ftp_remote_path"/>
</group>
<group string="补偿值相关">
<field name="x_compensation_node"/>
@@ -114,6 +115,17 @@
</group>
<group string="数采相关">
<field name="machine_ip"/>
<field name="machine_signed"/>
<field name="machine_status"/>
<field name="machine_time_on"/>
<field name="machine_tool_num"/>
<field name="machine_program"/>
<field name="machine_run_status"/>
<field name="machine_run_time"/>
<field name="machine_cut_time"/>
<field name="machine_cut_status"/>
<field name="machine_emg_status"/>
<field name="machine_mode"/>
</group>
</group>