feat: mpoint增加存储表达式用于决定是否存储
This commit is contained in:
parent
70c415aa1f
commit
2238ab119d
|
@ -0,0 +1,18 @@
|
||||||
|
# Generated by Django 3.2.12 on 2025-03-18 06:14
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('enm', '0057_auto_20250211_1422'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='mpoint',
|
||||||
|
name='save_expr',
|
||||||
|
field=models.TextField(blank=True, null=True, verbose_name='存储表达式'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -30,6 +30,7 @@ class Mpoint(CommonBModel):
|
||||||
code = models.CharField("测点编号", max_length=50, unique=True)
|
code = models.CharField("测点编号", max_length=50, unique=True)
|
||||||
unit = models.CharField("单位", max_length=50, null=True, blank=True)
|
unit = models.CharField("单位", max_length=50, null=True, blank=True)
|
||||||
cate = models.CharField("分类", max_length=50, null=True, blank=True)
|
cate = models.CharField("分类", max_length=50, null=True, blank=True)
|
||||||
|
save_expr = models.TextField("存储表达式", null=True, blank=True)
|
||||||
material = models.ForeignKey(Material, verbose_name="计量某种物料", on_delete=models.CASCADE, null=True, blank=True)
|
material = models.ForeignKey(Material, verbose_name="计量某种物料", on_delete=models.CASCADE, null=True, blank=True)
|
||||||
ep_belong = models.ForeignKey("em.equipment", verbose_name="所属设备", related_name="mp_ep_belong", on_delete=models.SET_NULL, null=True, blank=True)
|
ep_belong = models.ForeignKey("em.equipment", verbose_name="所属设备", related_name="mp_ep_belong", on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
mgroup = models.ForeignKey("mtm.mgroup", verbose_name="所在集合", on_delete=models.SET_NULL, null=True, blank=True)
|
mgroup = models.ForeignKey("mtm.mgroup", verbose_name="所在集合", on_delete=models.SET_NULL, null=True, blank=True)
|
||||||
|
|
|
@ -50,6 +50,28 @@ def translate_eval_formula(exp_str: str, year: int, month: int, day: int, hour:
|
||||||
rval = 0
|
rval = 0
|
||||||
return rval
|
return rval
|
||||||
|
|
||||||
|
def get_can_save_from_save_expr(expr_str: str, self_val) -> bool:
|
||||||
|
"""判断是否可以保存
|
||||||
|
"""
|
||||||
|
pattern = r"\{(.*?)}"
|
||||||
|
matches = re.findall(pattern, expr_str)
|
||||||
|
for match in matches:
|
||||||
|
if match == "self":
|
||||||
|
expr_str = expr_str.replace("{self}", self_val)
|
||||||
|
else:
|
||||||
|
mpoint_data = MpointCache(match).data
|
||||||
|
current_val = mpoint_data.get("last_data", {}).get("last_val", None)
|
||||||
|
if current_val is None:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
expr_str = expr_str.replace(f"{{{match}}}", current_val)
|
||||||
|
try:
|
||||||
|
rval = eval(expr_str)
|
||||||
|
except Exception as e:
|
||||||
|
myLogger.error(f"存储表达式计算错误: {e}, {expr_str}")
|
||||||
|
rval = False
|
||||||
|
return rval
|
||||||
|
|
||||||
def transfer_mpoint_val_to_ep_running_state(current_val, base_val: float, expr_str: str):
|
def transfer_mpoint_val_to_ep_running_state(current_val, base_val: float, expr_str: str):
|
||||||
"""
|
"""
|
||||||
将测点值转换所监测设备的运行状态值
|
将测点值转换所监测设备的运行状态值
|
||||||
|
@ -365,6 +387,11 @@ def insert_mplogx_item(code: str, val, timex: datetime, enp_mpoints_dict):
|
||||||
can_save = True
|
can_save = True
|
||||||
else:
|
else:
|
||||||
can_save = True
|
can_save = True
|
||||||
|
|
||||||
|
|
||||||
|
if mpoint_data.get("save_expr", None):
|
||||||
|
can_save = get_can_save_from_save_expr(mpoint_data["save_expr"], val)
|
||||||
|
|
||||||
if can_save:
|
if can_save:
|
||||||
try:
|
try:
|
||||||
MpointCache(code).set(timex, val)
|
MpointCache(code).set(timex, val)
|
||||||
|
|
Loading…
Reference in New Issue