diff --git a/UI/TrendManage/ActualTrendWidget.py b/UI/TrendManage/ActualTrendWidget.py index e6c1586..8d16d56 100644 --- a/UI/TrendManage/ActualTrendWidget.py +++ b/UI/TrendManage/ActualTrendWidget.py @@ -6,18 +6,10 @@ from matplotlib.backends.qt_compat import QtCore, QtWidgets from matplotlib.backends.backend_qt5agg import (FigureCanvas, NavigationToolbar2QT as NavigationToolbar) from matplotlib.figure import Figure -from PyQt5.QtCore import QThread - -import matplotlib.ticker as ticker -import matplotlib.pyplot as plt from protocol.Celery.MBTCPMaster import app as MBTCPMApp -from celery.schedules import crontab, timedelta -from celery.result import AsyncResult, GroupResult - +from celery.result import AsyncResult from utils.Queue import Queue -import tkinter as tk - from model.ProjectModel.VarManage import ModbusVarManage class ActualTrend(QtWidgets.QMainWindow): diff --git a/UI/VarManages/ModbusModel.py b/UI/VarManages/ModbusModel.py index 07df6f5..98fbc27 100644 --- a/UI/VarManages/ModbusModel.py +++ b/UI/VarManages/ModbusModel.py @@ -262,7 +262,7 @@ class VarButtonDelegate(QItemDelegate): comboBox.addItem('CDAB', 2) comboBox.addItem('BADC', 3) comboBox.addItem('DCBA', 4) - comboBox.setCurrentText(self.parent().model.datas[index.row()][index.column()]) + comboBox.setCurrentText(str(self.parent().model.datas[index.row()][index.column()])) # comboBox.setMinimumWidth(30) @@ -375,21 +375,31 @@ class VarButtonDelegate(QItemDelegate): fucationDelegate = self.parent().itemDelegate(fucationIndex) fucationCheckbox = getattr(fucationDelegate, fucationCbRow) + varModelCbRow = str('cb' + str(sender.index[0]) + str(10)) + varModelIndex = self.parent().model.index(sender.index[0], 10) + varModelDelegate = self.parent().itemDelegate(varModelIndex) + varModelCheckbox = getattr(varModelDelegate, varModelCbRow) + if sender.isEdit: sender.setIcon(qtawesome.icon('fa.save', color='#1fbb6f')) sender.isEdit = False sender.oldName = model.datas[sender.index[0]][3] model.editableList.append(sender.index[0]) fucationCheckbox.setEnabled(True) + varModelCheckbox.setEnabled(True) self.parent().viewport().update() else: varMes = model.datas[sender.index[0]] - name, des, varType, slaveID, address, min, max, order = str(varMes[3]), str(varMes[4]), str(varMes[5]), str(varMes[6]), str(varMes[7]), str(varMes[8]), str(varMes[9]), str(varMes[-1]) + name, des, varType, slaveID, address, min, max, varModel, order = str(varMes[3]), str(varMes[4]), str(varMes[5]), str(varMes[6]), str(varMes[7]), str(varMes[8]), str(varMes[9]), str(varMes[10]), str(varMes[-1]) # print(name, des, varType, slaveID, address, min, max, order) if varType == '': - varType = '0' + varType = 0 + + if varModel == '': + varModel = 0 + if not name: reply = QMessageBox.question(self.parent(), '警告', @@ -402,14 +412,14 @@ class VarButtonDelegate(QItemDelegate): 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) + min = min, max = max, order = order, modbusType = modbusType, varModel= varModel) else: QMessageBox.information(self.parent(), '提示', '已有同名变量') return else: res = ModbusVarManage.createVar(varName = name, varType = varType, des = des, address = address, slaveID = slaveID, min = min, - max = max, order = order, modbusType = modbusType) + max = max, order = order, modbusType = modbusType, varModel= varModel) if res: QMessageBox.information(self.parent(), '提示', '已有同名变量') return @@ -424,6 +434,7 @@ class VarButtonDelegate(QItemDelegate): sender.isEdit = True fucationCheckbox.setEnabled(False) + varModelCheckbox.setEnabled(False) model.editableList.remove(sender.index[0]) self.parent().viewport().update() @@ -499,4 +510,58 @@ class ModbusTypeBox(QItemDelegate): if index in [2, 3]: index += 1 self.parent().model.datas[sender.index[0]][sender.index[1]] = index - \ No newline at end of file + + +class VarModelBox(QItemDelegate): + def __init__(self, parent=None, comBoxColumn = 10): + super(VarModelBox, self).__init__(parent) + self.comBoxColumn = comBoxColumn + def paint(self, painter, option, index): + #本地值、模拟值、远程值 对应 0, 1, 2 + if (index.column() == self.comBoxColumn) and index.row() not in self.parent().model.editableList: + data = self.parent().model.datas[index.row()] + comBox = str('cb' + str(index.row()) + str(index.column())) + setattr(self, comBox, QComboBox()) + comboBox = getattr(self, comBox) + items = ['本地值', '模拟值', '远程值'] + comboBox.addItems(items) + comboxIndex = self.parent().model.datas[index.row()][index.column()] + if comboxIndex in [0, 1, 2]: + comboBox.setCurrentIndex(int(comboxIndex)) + else: + comboBox.setCurrentIndex(0) + + + comboBox.currentIndexChanged.connect( self.indexChange) + comboBox.setObjectName('ModbusTypeBox') + comboBox.setEditable(True) + comboBox.lineEdit().setAlignment(Qt.AlignCenter) + # comboBox.setMinimumWidth(200) + # comboBox.setEnabled(False) + hboxLayout = QHBoxLayout() + hboxLayout.addWidget(comboBox) + hboxLayout.setContentsMargins(0, 0, 0, 0) + # hboxLayout.setAlignment(Qt.AlignCenter) + comboBox.index = [index.row(), index.column()] + row = index.row() + if row % 2 == 0: + comboBox.setStyleSheet("QComboBox { background-color: #EFEFEF; height: 40px; }") + else: + comboBox.setStyleSheet("QComboBox { background-color: #e9e7e3; height: 40px; }") + + if str(data[index.column()]): + comboBox.setEnabled(False) + else: + comboBox.setEnabled(True) + widget = QWidget() + widget.setLayout(hboxLayout) + self.parent().setIndexWidget( + index, + widget + ) + self.parent().openPersistentEditor(index) + + def indexChange(self): + sender = self.sender() + index = sender.currentIndex() + self.parent().model.datas[sender.index[0]][sender.index[1]] = index \ No newline at end of file diff --git a/UI/VarManages/VarTable.py b/UI/VarManages/VarTable.py index b4f2478..2984138 100644 --- a/UI/VarManages/VarTable.py +++ b/UI/VarManages/VarTable.py @@ -78,10 +78,11 @@ class VarTableView(QTableView): self.setupUi() def setHeader(self): - self.setItemDelegateForColumn(10, VarButtonDelegate(self)) + self.setItemDelegateForColumn(11, VarButtonDelegate(self)) self.setItemDelegateForColumn(5, ModbusTypeBox(self)) + self.setItemDelegateForColumn(10, VarModelBox(self, 10)) self.model = VarTableModel(['ID', '强制值', '当前值', '变量名', '变量描述', '变量类型', - '从站地址', '寄存器地址', '工程量下限', '工程量上限', '操作'], + '从站地址', '寄存器地址', '工程量下限', '工程量上限', '值类型', '操作'], [], modbusType = self.modbusType, table = self) def setupUi(self): diff --git a/UI/VarManages/VarWidget.py b/UI/VarManages/VarWidget.py index 75bad85..e89b95f 100644 --- a/UI/VarManages/VarWidget.py +++ b/UI/VarManages/VarWidget.py @@ -207,7 +207,7 @@ class VarWidgets(QtWidgets.QWidget): action.text(), action.isChecked()) for action in self.menuValues.actions()])) def createVar(self): - self.varView.model.append_data(['', '', '', '', '', '', '', '', '', '', '','int']) + self.varView.model.append_data(['', '', '', '', '', '', '', '', '', '', '','','int']) def forceVar(self): check = [i for i,x in enumerate(self.varView.model.checkList) if x == 'Checked'] diff --git a/model/ProjectModel/VarManage.py b/model/ProjectModel/VarManage.py index b3dc100..246273b 100644 --- a/model/ProjectModel/VarManage.py +++ b/model/ProjectModel/VarManage.py @@ -1,9 +1,7 @@ import openpyxl - from utils.DBModels.ProtocolModel import ModbusTcpMasterVar, ModbusRtuMasterVar, ModbusRtuSlaveVar,\ ModbusTcpSlaveVar, HartVar, TcRtdVar, AnalogVar, FFSimulateVar, HartSimulateVar -from utils import Globals # ID 从站地址 变量名 变量描述 功能码 寄存器地址 工程量下限 工程量上限 @@ -110,7 +108,7 @@ class ModbusVarManage(object): @classmethod - def createVar(self, varName, varType, des, address, slaveID, min, max, order, modbusType): + def createVar(self, varName, varType, des, address, slaveID, min, max, order, modbusType, varModel): # 创建变量 name = str(varName) des = str(des) @@ -120,12 +118,14 @@ class ModbusVarManage(object): min = str(min) max = str(max) order = order + varModel = str(varModel) if self.getVarClass(modbusType).getByName(name): return 1 else: - varModel =self.getVarClass(modbusType)() - varModel.createVar(varName = varName, varType = varType, des = des, address = address, slaveID = slaveID, min = min, max = max, order = order) + modbusVarType =self.getVarClass(modbusType)() + modbusVarType.createVar(varName = varName, varType = varType, des = des, address = address, + slaveID = slaveID, min = min, max = max, order = order, varModel = varModel) @classmethod @@ -137,7 +137,7 @@ class ModbusVarManage(object): @classmethod - def editVar(self, name, Nname, des, varType, slaveID, address, min, max, order, modbusType): + def editVar(self, name, Nname, des, varType, slaveID, address, min, max, order, modbusType, varModel): # 修改变量信息 name = str(name) @@ -148,8 +148,10 @@ class ModbusVarManage(object): address = str(address) min = str(min) max = str(max) + varModel = str(varModel) if Nname == name: - self.getVarClass(modbusType).update(varName = Nname, description = des, varType = varType, address = address, slaveID = slaveID, min = min, max = max, order = order).where(self.getVarClass(modbusType).varName == name).execute() + self.getVarClass(modbusType).update(varName = Nname, description = des, varType = varType, address = address, slaveID = slaveID, + min = min, max = max, order = order, varModel = varModel).where(self.getVarClass(modbusType).varName == name).execute() elif self.getVarClass(modbusType).getByName(Nname): print('已有同名变量') return @@ -157,7 +159,8 @@ class ModbusVarManage(object): print('不存在的变量') return else: - self.getVarClass(modbusType).update(varName = Nname, description = des, varType = varType, address = address, slaveID = slaveID, min = min, max = max, order = order).where(self.getVarClass(modbusType).varName == name).execute() + self.getVarClass(modbusType).update(varName = Nname, description = des, varType = varType, address = address, slaveID = slaveID, + min = min, max = max, order = order, varModel = varModel).where(self.getVarClass(modbusType).varName == name).execute() @classmethod def editOrder(self, name, order, modbusType): @@ -174,7 +177,7 @@ class ModbusVarManage(object): return l = [] for var in vars: - l.append([var.id, var.varName, var.description, var.varType, var.slaveID, var.address, var.min, var.max, var.order]) + l.append([var.id, var.varName, var.description, var.varType, var.slaveID, var.address, var.min, var.max, var.varModel, var.order]) return l @classmethod @@ -182,7 +185,7 @@ class ModbusVarManage(object): # 查询指定变量信息 var = self.getVarClass(modbusType).getByName(name) if var: - return [var.id, var.varName, var.description, var.varType, var.slaveID, var.address, var.min, var.max] + return [var.id, var.varName, var.description, var.varType, var.slaveID, var.address, var.min, var.max, var.varModel] else: return False diff --git a/utils/DBModels/ProtocolModel.py b/utils/DBModels/ProtocolModel.py index 2ba9a79..70a6afa 100644 --- a/utils/DBModels/ProtocolModel.py +++ b/utils/DBModels/ProtocolModel.py @@ -72,6 +72,7 @@ class ModBusVar(BaseModel): min = CharField() max = CharField() order = CharField() + varModel = IntegerField() # 查询变量是否存在 @@ -89,7 +90,7 @@ class ModBusVar(BaseModel): query.execute() # 创建变量 - def createVar(self, varName, varType, des, address, slaveID, min, max, order): + def createVar(self, varName, varType, des, address, slaveID, min, max, order, varModel): self.varName = varName self.varType = varType self.description = des @@ -99,6 +100,7 @@ class ModBusVar(BaseModel): self.min = min self.max = max self.order = order + self.varModel = varModel # print(self.createTime) self.save()