Files
tiandihe/backend/models.py
Joshi 95ec77afae feat(opc): 添加计划写入触发功能及相关配置
后续的配置是追踪的点位配置和写入的点位配置已经做好持久化在页面上配置完保存重启OPC即可实现持久化
后续的代码修改:从哪里开始而不是从最小的钢卷号开始,因为对方数据库里面的计划有几百条,写入的时候写入哪个计划的钢卷信息给一级都是需要修改代码的,现在默认的都是第一个钢卷

添加写入计数器、来源和目标节点的配置,支持从计划表读取数据并写入到指定开卷机的OPC节点。包括:
1. 在models.py中添加相关字段
2. 在opc_service.py中实现写入触发逻辑
3. 在OpcConfig.vue中添加配置界面
4. 更新相关API接口以支持新配置
2026-04-13 16:09:48 +08:00

191 lines
7.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from typing import Optional, List, Dict
from pydantic import BaseModel, Field
class PDIPLTMCreate(BaseModel):
coilid: str = Field(..., min_length=12, max_length=12, description="钢卷号必须为12位")
rollprogramnb: Optional[int] = None
sequencenb: Optional[int] = None
schedule_code: Optional[str] = None
entry_coil_thickness: Optional[float] = None
entry_coil_thickness_max: Optional[float] = None
entry_coil_thickness_min: Optional[float] = None
entry_coil_width: Optional[float] = None
entry_coil_width_max: Optional[float] = None
entry_coil_width_min: Optional[float] = None
entry_coil_weight: Optional[float] = None
entry_of_coil_length: Optional[float] = None
entry_of_coil_inner_diameter: Optional[float] = None
entry_of_coil_outer_diameter: Optional[float] = None
trimming: Optional[int] = None
trimming_width: Optional[float] = None
smp_length: Optional[float] = None
smp_num: Optional[float] = None
smp_frq: Optional[str] = None
preceding_process_code: Optional[str] = None
next_process_code: Optional[str] = None
hot_mill_delivery_temp: Optional[float] = None
finished_coil_temp: Optional[float] = None
crown_average: Optional[float] = None
coil_flatness_average: Optional[float] = None
coil_flatness_max_value: Optional[float] = None
coil_flatness_min_value: Optional[float] = None
material_yield_point: Optional[float] = None
material_tensile: Optional[float] = None
hotactfmwedgeavg: Optional[float] = None
weight_mode: Optional[str] = None
dummy_coil_mrk: Optional[str] = None
cut_mode: Optional[str] = None
off_gauge_head_length: Optional[float] = None
off_gauge_tail_length: Optional[float] = None
exit_coil_no: Optional[str] = None
exit_coil_weight: Optional[float] = None
exit_coil_weight_max: Optional[float] = None
exit_coil_weight_min: Optional[float] = None
exit_coil_thickness: Optional[float] = None
exit_coil_thickness_max: Optional[float] = None
exit_coil_thickness_min: Optional[float] = None
exit_coil_width: Optional[float] = None
exit_coil_width_max: Optional[float] = None
exit_coil_width_min: Optional[float] = None
work_order_no: Optional[str] = None
order_quality: Optional[str] = None
steel_grade: Optional[str] = None
sg_sign: Optional[str] = None
order_thickness: Optional[float] = None
order_thickness_max: Optional[float] = None
order_thickness_min: Optional[float] = None
order_width: Optional[float] = None
order_width_max: Optional[float] = None
order_width_min: Optional[float] = None
sleeve_code_of_cold_coil: Optional[str] = None
packing_type_code: Optional[str] = None
thk_ds: Optional[str] = None
ext_num_01: Optional[str] = None
# chemical elements
c: Optional[float] = None
si: Optional[float] = None
mn: Optional[float] = None
p: Optional[float] = None
s: Optional[float] = None
cu: Optional[float] = None
ni: Optional[float] = None
cr: Optional[float] = None
mo: Optional[float] = None
v: Optional[float] = None
ti: Optional[float] = None
sol_al: Optional[float] = None
fe: Optional[float] = None
nb: Optional[float] = None
n: Optional[float] = None
b: Optional[float] = None
send_flag: Optional[str] = None
work_order_no: Optional[str] = None
coiler_diameter: Optional[int] = None
l2_grade: Optional[str] = None
scrap_cut_head_len: Optional[float] = None
scrap_cut_tail_len: Optional[float] = None
meterweight: Optional[float] = None
meter_d_outside: Optional[float] = None
meter_width: Optional[float] = None
uncoiler_tension: Optional[float] = None
looper_tension_1: Optional[float] = None
pl_tension: Optional[float] = None
looper_tension_2: Optional[float] = None
looper_tension_3: Optional[float] = None
class PDIPLTMUpdate(BaseModel):
rollprogramnb: Optional[int] = None
sequencenb: Optional[int] = None
schedule_code: Optional[str] = None
entry_coil_thickness: Optional[float] = None
entry_coil_thickness_max: Optional[float] = None
entry_coil_thickness_min: Optional[float] = None
entry_coil_width: Optional[float] = None
entry_coil_width_max: Optional[float] = None
entry_coil_width_min: Optional[float] = None
entry_coil_weight: Optional[float] = None
entry_of_coil_length: Optional[float] = None
entry_of_coil_inner_diameter: Optional[float] = None
entry_of_coil_outer_diameter: Optional[float] = None
trimming: Optional[int] = None
trimming_width: Optional[float] = None
smp_length: Optional[float] = None
smp_num: Optional[float] = None
smp_frq: Optional[str] = None
preceding_process_code: Optional[str] = None
next_process_code: Optional[str] = None
hot_mill_delivery_temp: Optional[float] = None
finished_coil_temp: Optional[float] = None
crown_average: Optional[float] = None
coil_flatness_average: Optional[float] = None
material_yield_point: Optional[float] = None
material_tensile: Optional[float] = None
weight_mode: Optional[str] = None
dummy_coil_mrk: Optional[str] = None
cut_mode: Optional[str] = None
off_gauge_head_length: Optional[float] = None
off_gauge_tail_length: Optional[float] = None
exit_coil_no: Optional[str] = None
exit_coil_weight: Optional[float] = None
exit_coil_weight_max: Optional[float] = None
exit_coil_weight_min: Optional[float] = None
exit_coil_thickness: Optional[float] = None
exit_coil_thickness_max: Optional[float] = None
exit_coil_thickness_min: Optional[float] = None
exit_coil_width: Optional[float] = None
exit_coil_width_max: Optional[float] = None
exit_coil_width_min: Optional[float] = None
work_order_no: Optional[str] = None
order_quality: Optional[str] = None
steel_grade: Optional[str] = None
sg_sign: Optional[str] = None
order_thickness: Optional[float] = None
order_thickness_max: Optional[float] = None
order_thickness_min: Optional[float] = None
order_width: Optional[float] = None
order_width_max: Optional[float] = None
order_width_min: Optional[float] = None
packing_type_code: Optional[str] = None
thk_ds: Optional[str] = None
c: Optional[float] = None
si: Optional[float] = None
mn: Optional[float] = None
p: Optional[float] = None
s: Optional[float] = None
cu: Optional[float] = None
ni: Optional[float] = None
cr: Optional[float] = None
mo: Optional[float] = None
v: Optional[float] = None
ti: Optional[float] = None
sol_al: Optional[float] = None
nb: Optional[float] = None
n: Optional[float] = None
b: Optional[float] = None
send_flag: Optional[str] = None
coiler_diameter: Optional[int] = None
l2_grade: Optional[str] = None
uncoiler_tension: Optional[float] = None
looper_tension_1: Optional[float] = None
pl_tension: Optional[float] = None
looper_tension_2: Optional[float] = None
looper_tension_3: Optional[float] = None
scrap_cut_head_len: Optional[float] = None
scrap_cut_tail_len: Optional[float] = None
meterweight: Optional[float] = None
class OpcConfig(BaseModel):
opc_url: str
counter_node: str
poll_interval: int = 2
trackmap_nodes: Dict[str, str] = {}
signal1_node: str = ""
signal2_node: str = ""
write_counter_node: str = ""
write_source_node: str = ""
write_target_node: str = ""
write_nodes: Dict[str, Dict[str, str]] = {}