diff --git a/UI/VarManages/ModbusModel.py b/UI/VarManages/ModbusModel.py index e39fde3..0a9586f 100644 --- a/UI/VarManages/ModbusModel.py +++ b/UI/VarManages/ModbusModel.py @@ -401,20 +401,32 @@ class VarButtonDelegate(QItemDelegate): if sender.oldName and ModbusVarManage.getByName(sender.oldName, modbusType): - if sender.oldName == name or [varMes[3] for varMes in model.datas].count(name) < 2: - ModbusVarManage.editVar(name = sender.oldName, Nname = name, des = des, - varType = varType, slaveID = slaveID, address = address, - min = min, max = max, order = order, modbusType = modbusType, varModel= varModel) + if sender.oldName == name: + # 名称未改变,直接执行修改变量操作 + ModbusVarManage.editVar(name=sender.oldName, Nname=name, des=des, + varType=varType, slaveID=slaveID, address=address, + min=min, max=max, order=order, modbusType=modbusType, varModel=varModel) else: + # 名称改变,检查新名称是否已存在 + if GlobalVarManager.isVarNameExist(name): + QMessageBox.information(self.parent(), '提示', '已有同名变量') + return + else: + # 执行修改变量操作 + ModbusVarManage.editVar(name=sender.oldName, Nname=name, des=des, + varType=varType, slaveID=slaveID, address=address, + min=min, max=max, order=order, modbusType=modbusType, varModel=varModel) + + else: + if GlobalVarManager.isVarNameExist(name): QMessageBox.information(self.parent(), '提示', '已有同名变量') return - else: - res = ModbusVarManage.createVar(varName = name, varType = varType, des = des, + else: + ModbusVarManage.createVar(varName = name, varType = varType, des = des, address = address, slaveID = slaveID, min = min, max = max, order = order, modbusType = modbusType, varModel= varModel) - if res: - QMessageBox.information(self.parent(), '提示', '已有同名变量') - return + + sender.setIcon(qtawesome.icon('fa.pencil', color='#4c8cf2')) rowIndex = sender.index[0] varMes = ModbusVarManage.getByName(name, modbusType) diff --git a/model/ProjectModel/VarManage.py b/model/ProjectModel/VarManage.py index 83efd30..d3ab85d 100644 --- a/model/ProjectModel/VarManage.py +++ b/model/ProjectModel/VarManage.py @@ -525,4 +525,37 @@ class HartSimulateVarManage(object): return False def initVar(self): - self.createVar(varName='name', des='TC', varModel='本地值') \ No newline at end of file + self.createVar(varName='name', des='TC', varModel='本地值') + +class GlobalVarManager(object): + # 所有支持的变量模型类列表 + allVarClass = [ + ModbusTcpMasterVar, ModbusTcpSlaveVar, ModbusRtuMasterVar, ModbusRtuSlaveVar, + HartVar, TcRtdVar, AnalogVar, HartSimulateVar + ] + + @classmethod + def getAllVarNames(cls): + """获取所有协议模型中存在的变量名(去重集合)""" + allVarNames = set() + + for varClass in cls.allVarClass: + try: + # 查询该模型类的所有变量名 + query = varClass.select(varClass.varName) + names = {var.varName for var in query} + allVarNames.update(names) + except Exception as e: + print(f"查询 {varClass.__name__} 变量名失败: {str(e)}") + + return allVarNames + + @classmethod + def isVarNameExist(cls, varName): + """检查新变量名是否在任意协议模型中已存在""" + existingNames = cls.getAllVarNames() + print(varName,existingNames ) + if str(varName) in existingNames: + return True + else: + return False \ No newline at end of file