0618更新

main
ZHANGXUXU\95193 4 months ago
parent 4e2dc90d94
commit 750ae65fb9

@ -6,18 +6,10 @@ from matplotlib.backends.qt_compat import QtCore, QtWidgets
from matplotlib.backends.backend_qt5agg import (FigureCanvas, NavigationToolbar2QT as NavigationToolbar) from matplotlib.backends.backend_qt5agg import (FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
from matplotlib.figure import Figure 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 protocol.Celery.MBTCPMaster import app as MBTCPMApp
from celery.schedules import crontab, timedelta from celery.result import AsyncResult
from celery.result import AsyncResult, GroupResult
from utils.Queue import Queue from utils.Queue import Queue
import tkinter as tk
from model.ProjectModel.VarManage import ModbusVarManage from model.ProjectModel.VarManage import ModbusVarManage
class ActualTrend(QtWidgets.QMainWindow): class ActualTrend(QtWidgets.QMainWindow):

@ -262,7 +262,7 @@ class VarButtonDelegate(QItemDelegate):
comboBox.addItem('CDAB', 2) comboBox.addItem('CDAB', 2)
comboBox.addItem('BADC', 3) comboBox.addItem('BADC', 3)
comboBox.addItem('DCBA', 4) 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) # comboBox.setMinimumWidth(30)
@ -375,21 +375,31 @@ class VarButtonDelegate(QItemDelegate):
fucationDelegate = self.parent().itemDelegate(fucationIndex) fucationDelegate = self.parent().itemDelegate(fucationIndex)
fucationCheckbox = getattr(fucationDelegate, fucationCbRow) 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: if sender.isEdit:
sender.setIcon(qtawesome.icon('fa.save', color='#1fbb6f')) sender.setIcon(qtawesome.icon('fa.save', color='#1fbb6f'))
sender.isEdit = False sender.isEdit = False
sender.oldName = model.datas[sender.index[0]][3] sender.oldName = model.datas[sender.index[0]][3]
model.editableList.append(sender.index[0]) model.editableList.append(sender.index[0])
fucationCheckbox.setEnabled(True) fucationCheckbox.setEnabled(True)
varModelCheckbox.setEnabled(True)
self.parent().viewport().update() self.parent().viewport().update()
else: else:
varMes = model.datas[sender.index[0]] 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) # print(name, des, varType, slaveID, address, min, max, order)
if varType == '': if varType == '':
varType = '0' varType = 0
if varModel == '':
varModel = 0
if not name: if not name:
reply = QMessageBox.question(self.parent(), 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: if sender.oldName == name or [varMes[3] for varMes in model.datas].count(name) < 2:
ModbusVarManage.editVar(name = sender.oldName, Nname = name, des = des, ModbusVarManage.editVar(name = sender.oldName, Nname = name, des = des,
varType = varType, slaveID = slaveID, address = address, 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: else:
QMessageBox.information(self.parent(), '提示', '已有同名变量') QMessageBox.information(self.parent(), '提示', '已有同名变量')
return return
else: else:
res = ModbusVarManage.createVar(varName = name, varType = varType, des = des, res = ModbusVarManage.createVar(varName = name, varType = varType, des = des,
address = address, slaveID = slaveID, min = min, address = address, slaveID = slaveID, min = min,
max = max, order = order, modbusType = modbusType) max = max, order = order, modbusType = modbusType, varModel= varModel)
if res: if res:
QMessageBox.information(self.parent(), '提示', '已有同名变量') QMessageBox.information(self.parent(), '提示', '已有同名变量')
return return
@ -424,6 +434,7 @@ class VarButtonDelegate(QItemDelegate):
sender.isEdit = True sender.isEdit = True
fucationCheckbox.setEnabled(False) fucationCheckbox.setEnabled(False)
varModelCheckbox.setEnabled(False)
model.editableList.remove(sender.index[0]) model.editableList.remove(sender.index[0])
self.parent().viewport().update() self.parent().viewport().update()
@ -499,4 +510,58 @@ class ModbusTypeBox(QItemDelegate):
if index in [2, 3]: if index in [2, 3]:
index += 1 index += 1
self.parent().model.datas[sender.index[0]][sender.index[1]] = index self.parent().model.datas[sender.index[0]][sender.index[1]] = index
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

@ -78,10 +78,11 @@ class VarTableView(QTableView):
self.setupUi() self.setupUi()
def setHeader(self): def setHeader(self):
self.setItemDelegateForColumn(10, VarButtonDelegate(self)) self.setItemDelegateForColumn(11, VarButtonDelegate(self))
self.setItemDelegateForColumn(5, ModbusTypeBox(self)) self.setItemDelegateForColumn(5, ModbusTypeBox(self))
self.setItemDelegateForColumn(10, VarModelBox(self, 10))
self.model = VarTableModel(['ID', '强制值', '当前值', '变量名', '变量描述', '变量类型', self.model = VarTableModel(['ID', '强制值', '当前值', '变量名', '变量描述', '变量类型',
'从站地址', '寄存器地址', '工程量下限', '工程量上限', '操作'], '从站地址', '寄存器地址', '工程量下限', '工程量上限', '值类型', '操作'],
[], modbusType = self.modbusType, table = self) [], modbusType = self.modbusType, table = self)
def setupUi(self): def setupUi(self):

@ -207,7 +207,7 @@ class VarWidgets(QtWidgets.QWidget):
action.text(), action.isChecked()) for action in self.menuValues.actions()])) action.text(), action.isChecked()) for action in self.menuValues.actions()]))
def createVar(self): def createVar(self):
self.varView.model.append_data(['', '', '', '', '', '', '', '', '', '', '','int']) self.varView.model.append_data(['', '', '', '', '', '', '', '', '', '', '','','int'])
def forceVar(self): def forceVar(self):
check = [i for i,x in enumerate(self.varView.model.checkList) if x == 'Checked'] check = [i for i,x in enumerate(self.varView.model.checkList) if x == 'Checked']

@ -1,9 +1,7 @@
import openpyxl import openpyxl
from utils.DBModels.ProtocolModel import ModbusTcpMasterVar, ModbusRtuMasterVar, ModbusRtuSlaveVar,\ from utils.DBModels.ProtocolModel import ModbusTcpMasterVar, ModbusRtuMasterVar, ModbusRtuSlaveVar,\
ModbusTcpSlaveVar, HartVar, TcRtdVar, AnalogVar, FFSimulateVar, HartSimulateVar ModbusTcpSlaveVar, HartVar, TcRtdVar, AnalogVar, FFSimulateVar, HartSimulateVar
from utils import Globals
# ID 从站地址 变量名 变量描述 功能码 寄存器地址 工程量下限 工程量上限 # ID 从站地址 变量名 变量描述 功能码 寄存器地址 工程量下限 工程量上限
@ -110,7 +108,7 @@ class ModbusVarManage(object):
@classmethod @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) name = str(varName)
des = str(des) des = str(des)
@ -120,12 +118,14 @@ class ModbusVarManage(object):
min = str(min) min = str(min)
max = str(max) max = str(max)
order = order order = order
varModel = str(varModel)
if self.getVarClass(modbusType).getByName(name): if self.getVarClass(modbusType).getByName(name):
return 1 return 1
else: else:
varModel =self.getVarClass(modbusType)() modbusVarType =self.getVarClass(modbusType)()
varModel.createVar(varName = varName, varType = varType, des = des, address = address, slaveID = slaveID, min = min, max = max, order = order) modbusVarType.createVar(varName = varName, varType = varType, des = des, address = address,
slaveID = slaveID, min = min, max = max, order = order, varModel = varModel)
@classmethod @classmethod
@ -137,7 +137,7 @@ class ModbusVarManage(object):
@classmethod @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) name = str(name)
@ -148,8 +148,10 @@ class ModbusVarManage(object):
address = str(address) address = str(address)
min = str(min) min = str(min)
max = str(max) max = str(max)
varModel = str(varModel)
if Nname == name: 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): elif self.getVarClass(modbusType).getByName(Nname):
print('已有同名变量') print('已有同名变量')
return return
@ -157,7 +159,8 @@ class ModbusVarManage(object):
print('不存在的变量') print('不存在的变量')
return return
else: 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 @classmethod
def editOrder(self, name, order, modbusType): def editOrder(self, name, order, modbusType):
@ -174,7 +177,7 @@ class ModbusVarManage(object):
return return
l = [] l = []
for var in vars: 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 return l
@classmethod @classmethod
@ -182,7 +185,7 @@ class ModbusVarManage(object):
# 查询指定变量信息 # 查询指定变量信息
var = self.getVarClass(modbusType).getByName(name) var = self.getVarClass(modbusType).getByName(name)
if var: 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: else:
return False return False

@ -72,6 +72,7 @@ class ModBusVar(BaseModel):
min = CharField() min = CharField()
max = CharField() max = CharField()
order = CharField() order = CharField()
varModel = IntegerField()
# 查询变量是否存在 # 查询变量是否存在
@ -89,7 +90,7 @@ class ModBusVar(BaseModel):
query.execute() 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.varName = varName
self.varType = varType self.varType = varType
self.description = des self.description = des
@ -99,6 +100,7 @@ class ModBusVar(BaseModel):
self.min = min self.min = min
self.max = max self.max = max
self.order = order self.order = order
self.varModel = varModel
# print(self.createTime) # print(self.createTime)
self.save() self.save()

Loading…
Cancel
Save