You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
355 lines
19 KiB
Python
355 lines
19 KiB
Python
import openpyxl
|
|
from PyQt5.QtCore import Qt
|
|
from PyQt5.QtWidgets import QMessageBox, QFileDialog
|
|
|
|
from Agreement.CS.skio.model import *
|
|
from Agreement.CS.skio.worker.iomapping import pt100_t2r, TC_T, set_bit_val, TC_K, TC_E
|
|
from DcsUi.TableFilter import VarDockWidget
|
|
from DcsUi.Trend import TrendUi
|
|
from DcsUi.VarTreeView import VarTreeDockWidget
|
|
from DcsUi.variablecoercion.ToolBarClass import Deploy
|
|
# from DcsUi.variablecoercion.displaycolumnWindow import MyWindow
|
|
from DcsUi.variablecoercion.ToolBarClassWindow import DeployWindow
|
|
from DcsUi.variablecoercion.editTable import configure
|
|
from DcsUi.variablecoercion.model import variableGroupModel
|
|
from DcsUi.variablecoercion.preservationNewGroup import preservation
|
|
from mainwindow import MainWindow
|
|
from utils import core
|
|
from utils.core import MainWindowConfig
|
|
|
|
|
|
class VariableSettingsUi(MainWindow):
|
|
def __init__(self):
|
|
super(VariableSettingsUi, self).__init__()
|
|
self.group = None
|
|
self.uri = None
|
|
self.initUI()
|
|
self.newInitUI()
|
|
|
|
def show(self):
|
|
super(MainWindow, self).show()
|
|
self.dockLeft.setMaximumWidth(300)
|
|
|
|
def closeEvent(self, event):
|
|
event.accept()
|
|
|
|
def newInitUI(self):
|
|
self.dockTop.deleteLater()
|
|
self.dockLeft.deleteLater()
|
|
|
|
self.dockTop = VarDockWidget("变量", self)
|
|
self.addDockWidget(Qt.TopDockWidgetArea, self.dockTop)
|
|
self.setCentralWidget(self.dockTop)
|
|
|
|
self.dockLeft = VarTreeDockWidget('变量强制窗口', self)
|
|
self.addDockWidget(Qt.LeftDockWidgetArea, self.dockLeft)
|
|
|
|
self.splitDockWidget(self.dockLeft, self.dockBottom, Qt.Horizontal)
|
|
self.splitDockWidget(self.dockLeft, self.dockTop, Qt.Horizontal)
|
|
self.splitDockWidget(self.dockTop, self.dockBottom, Qt.Vertical)
|
|
self.setDockNestingEnabled(True)
|
|
self.dockBottom.hide()
|
|
self.dockLeft.setMaximumWidth(250)
|
|
|
|
def varforceFindClicked(self):
|
|
self.varforceFindClickedUi = Deploy(group_name=self.group)
|
|
self.varforceFindClickedUi.add_Group_Signal.connect(self.action1)
|
|
self.varforceFindClickedUi.updata_Group_Signal.connect(self.action2)
|
|
self.varforceFindClickedUi.show()
|
|
|
|
def varforceEdiTupleClicked(self):
|
|
if self.group == None:
|
|
QMessageBox.information(
|
|
self,
|
|
"信息提示",
|
|
"请选择变量组",
|
|
QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
return
|
|
if not self.dockTop.varTab.currentWidget():
|
|
QMessageBox.information(
|
|
self,
|
|
"信息提示",
|
|
"请选择变量组",
|
|
QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
return
|
|
self.varforceEdiTupleClickedUi = configure(group_name=self.group)
|
|
self.varforceEdiTupleClickedUi.my_Signal.connect(self.action2)
|
|
self.varforceEdiTupleClickedUi.show()
|
|
|
|
def varforceNewGroupClicked(self):
|
|
if self.group == None:
|
|
QMessageBox.information(
|
|
self,
|
|
"信息提示",
|
|
"请选择变量组",
|
|
QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
return
|
|
if not self.dockTop.varTab.currentWidget():
|
|
QMessageBox.information(
|
|
self,
|
|
"信息提示",
|
|
"请选择变量组",
|
|
QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
return
|
|
self.varforceNewGroupClickedUi = preservation(group_name=self.group)
|
|
self.varforceNewGroupClickedUi.my_Signal.connect(self.action1)
|
|
self.varforceNewGroupClickedUi.show()
|
|
|
|
def varforceAllForceGroupClicked(self):
|
|
self.varforceAllForceGroupClickedUi = DeployWindow(group_name=self.group, win_type=False)
|
|
self.varforceAllForceGroupClickedUi.show()
|
|
|
|
def TrendClicked(self):
|
|
self.TrendUi = TrendUi(self.projectPath)
|
|
self.TrendUi.show()
|
|
|
|
def varExcelImportClicked(self):
|
|
self.excelPath, filetype = QFileDialog.getOpenFileName(self, '选择文件', '',
|
|
'Excel files(*.xlsx , *.xls)')
|
|
if self.excelPath:
|
|
wb = openpyxl.load_workbook(self.excelPath)
|
|
ws = wb.active
|
|
for row in list(ws.iter_rows())[1:]:
|
|
l = [x.value for x in row]
|
|
try:
|
|
if not VarModel.get(VarModel.sig_name == row[1].value):
|
|
VarModel.create(sig_name=row[1].value, type=row[2].value, cabinets=row[3].value,
|
|
channel=row[4].value,
|
|
carID=row[5].value, PlaceNumber=row[7].value, minValue=row[8].value,
|
|
maxValue=row[9].value)
|
|
else:
|
|
VarModel.update(type=row[2].value, cabinets=row[3].value, channel=row[4].value,
|
|
carID=row[5].value, PlaceNumber=row[7].value, minValue=row[8].value,
|
|
maxValue=row[9].value).where(VarModel.sig_name == row[1].value)
|
|
except:
|
|
VarModel.create(sig_name=row[1].value, type=row[2].value, cabinets=row[3].value,
|
|
channel=row[4].value,
|
|
carID=row[5].value, PlaceNumber=row[7].value, minValue=row[8].value,
|
|
maxValue=row[9].value)
|
|
core.MainWindowConfig.IOMapping.set_current_value()
|
|
self.dockTop.queryModel.datas = self.dockTop.getdicdata()
|
|
self.dockTop.queryModel.layoutChanged.emit()
|
|
|
|
def varforceCancelCurrentroupClicked(self):
|
|
'''批量取消强制按钮点击函数'''
|
|
for i in self.dockTop.varTab.currentWidget().queryModel.checkList:
|
|
if i[1] == 'Checked':
|
|
row = i[0]
|
|
MainWindowConfig.IOMapping.write(
|
|
self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_name'],
|
|
0
|
|
)
|
|
MainWindowConfig.IOMapping.force_value[
|
|
self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_name']] = None
|
|
MainWindowConfig.IOMapping.force_value_stact[
|
|
self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_name']] = False
|
|
QMessageBox.information(
|
|
self,
|
|
"信息提示",
|
|
"取消强制成功",
|
|
QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
|
|
def varforceCancelAllforceGroupClicked(self):
|
|
'''批量强制按钮点击函数'''
|
|
for i in self.dockTop.varTab.currentWidget().queryModel.checkList:
|
|
if i[1] == 'Checked':
|
|
row = i[0]
|
|
if self.dockTop.varTab.currentWidget().queryModel.datas[row]['force_value'] != None:
|
|
if self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_type'] in ['AO','PT100','TC/K','TC/E','TC/T']:
|
|
if self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_type'] == 'PT100':
|
|
try:
|
|
var = float(self.dockTop.varTab.currentWidget().queryModel.datas[row]['force_value'])
|
|
var = pt100_t2r(var)
|
|
except:
|
|
QMessageBox.information(
|
|
self,
|
|
"信息提示",
|
|
"请输入浮点数",
|
|
QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
return
|
|
MainWindowConfig.IOMapping.current_value[
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['reg'])-1][
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['channel'])-1
|
|
] = var
|
|
MainWindowConfig.IOMapping.force_value[
|
|
self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_name']] = var
|
|
elif self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_type'] == 'TC/T':
|
|
try:
|
|
var = float(self.dockTop.varTab.currentWidget().queryModel.datas[row]['force_value'])
|
|
var = TC_T(var)
|
|
except:
|
|
QMessageBox.information(
|
|
self,
|
|
"信息提示",
|
|
"请输入浮点数",
|
|
QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
return
|
|
MainWindowConfig.IOMapping.current_value[
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['reg'])-1][
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['channel'])-1
|
|
] = var
|
|
MainWindowConfig.IOMapping.force_value[
|
|
self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_name']] = var
|
|
elif self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_type'] == 'TC/K':
|
|
try:
|
|
var = float(self.dockTop.varTab.currentWidget().queryModel.datas[row]['force_value'])
|
|
# print(var)
|
|
var = TC_K(var)
|
|
except:
|
|
QMessageBox.information(
|
|
self,
|
|
"信息提示",
|
|
"请输入浮点数",
|
|
QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
return
|
|
MainWindowConfig.IOMapping.current_value[
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['reg'])-1][
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['channel'])-1
|
|
] = var
|
|
MainWindowConfig.IOMapping.force_value[
|
|
self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_name']] = var
|
|
elif self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_type'] == 'TC/E':
|
|
try:
|
|
var = float(self.dockTop.varTab.currentWidget().queryModel.datas[row]['force_value'])
|
|
var = TC_E(var)
|
|
except:
|
|
QMessageBox.information(
|
|
self,
|
|
"信息提示",
|
|
"请输入浮点数",
|
|
QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
return
|
|
MainWindowConfig.IOMapping.current_value[
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['reg'])-1][
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['channel'])-1
|
|
] = var
|
|
MainWindowConfig.IOMapping.force_value[
|
|
self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_name']] = var
|
|
elif self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_type'] == 'AO':
|
|
try:
|
|
var = float(self.dockTop.varTab.currentWidget().queryModel.datas[row]['force_value'])
|
|
highValue = float(self.dockTop.varTab.currentWidget().queryModel.datas[row]['rhi'])
|
|
lowValue = float(self.dockTop.varTab.currentWidget().queryModel.datas[row]['rlo'])
|
|
var = getRealAO(var, highValue, lowValue)
|
|
# print(highValue, lowValue)
|
|
except:
|
|
QMessageBox.information(
|
|
self,
|
|
"信息提示",
|
|
"请输入浮点数",
|
|
QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
return
|
|
MainWindowConfig.IOMapping.current_value[
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['reg'])-1][
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['channel'])-1
|
|
] = var
|
|
# print(MainWindowConfig.IOMapping.current_value)
|
|
MainWindowConfig.IOMapping.force_value[
|
|
self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_name']] = var
|
|
MainWindowConfig.IOMapping.setAOcurrent()
|
|
# elif self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_type'] == 'PT100':
|
|
# try:
|
|
# var = float(self.dockTop.varTab.currentWidget().queryModel.datas[row]['force_value'])
|
|
# var = pt100_t2r(var)
|
|
# except:
|
|
# QMessageBox.information(
|
|
# self,
|
|
# "信息提示",
|
|
# "请输入浮点数",
|
|
# QMessageBox.Yes | QMessageBox.No
|
|
# )
|
|
# return
|
|
# MainWindowConfig.IOMapping.current_value[
|
|
# self.dockTop.varTab.currentWidget().queryModel.datas[row]['reg']][
|
|
# self.dockTop.varTab.currentWidget().queryModel.datas[row]['channel']
|
|
# ] = var
|
|
# MainWindowConfig.IOMapping.force_value[
|
|
# self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_name']] = var
|
|
# elif self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_type'] == 'TC/T':
|
|
# try:
|
|
# var = float(self.dockTop.varTab.currentWidget().queryModel.datas[row]['force_value'])
|
|
# var = RTD_T(var)
|
|
# except:
|
|
# QMessageBox.information(
|
|
# self,
|
|
# "信息提示",
|
|
# "请输入浮点数",
|
|
# QMessageBox.Yes | QMessageBox.No
|
|
# )
|
|
# return
|
|
# MainWindowConfig.IOMapping.current_value[
|
|
# self.dockTop.varTab.currentWidget().queryModel.datas[row]['reg']][
|
|
# self.dockTop.varTab.currentWidget().queryModel.datas[row]['channel']
|
|
# ] = var
|
|
# MainWindowConfig.IOMapping.force_value[
|
|
# self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_name']] = var
|
|
elif self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_type'] in ('DO-24V', 'DO-48V', 'DO'):
|
|
# try:
|
|
# print(int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['force_value']))
|
|
if int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['force_value']) not in [0,1]:
|
|
QMessageBox.information(
|
|
self,
|
|
"信息提示",
|
|
"请输入0或1",
|
|
QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
val = MainWindowConfig.IOMapping.current_value[
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['reg']) - 1][
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['channel']) - 1]
|
|
MainWindowConfig.IOMapping.current_value[
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['reg']) - 1][
|
|
int(self.dockTop.varTab.currentWidget().queryModel.datas[row][
|
|
'channel']) - 1] = set_bit_val(
|
|
byte=val,
|
|
val=int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['force_value']),
|
|
index=int(self.dockTop.varTab.currentWidget().queryModel.datas[row]['offset'])
|
|
)
|
|
MainWindowConfig.IOMapping.force_value[
|
|
self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_name']] = int(
|
|
self.dockTop.varTab.currentWidget().queryModel.datas[row]['force_value'])
|
|
MainWindowConfig.IOMapping.setDIcurrent()
|
|
# except Exception as e:
|
|
# print(e)
|
|
# QMessageBox.information(
|
|
# self,
|
|
# "信息提示",
|
|
# "请输入0或1",
|
|
# QMessageBox.Yes | QMessageBox.No
|
|
# )
|
|
else:
|
|
continue
|
|
MainWindowConfig.IOMapping.force_value_stact[
|
|
self.dockTop.varTab.currentWidget().queryModel.datas[row]['sig_name']] = True
|
|
# MainWindowConfig.IOMapping.setDIcurrent()
|
|
# MainWindowConfig.IOMapping.setAOcurrent()
|
|
QMessageBox.information(
|
|
self,
|
|
"信息提示",
|
|
"强制值设置成功",
|
|
QMessageBox.Yes | QMessageBox.No
|
|
)
|
|
|
|
def action1(self):
|
|
self.dockLeft.refreshTree()
|
|
|
|
def action2(self):
|
|
self.dockTop.varTab.currentWidget().queryModel.header = core.MainWindowConfig.header
|
|
self.dockTop.varTab.currentWidget().queryModel.datas = variableGroupModel.selectGroupData(name=self.group)
|
|
self.dockTop.varTab.currentWidget().queryModel.layoutChanged.emit()
|
|
|
|
|
|
def getRealAO(x,highValue, lowValue):
|
|
if highValue:
|
|
return (16 * (x - lowValue) + 4 * (highValue-lowValue))/(1000 * (highValue - lowValue))
|
|
else:
|
|
return x/1000 |