|
|
|
@ -10,11 +10,11 @@ from PyQt5.QtGui import QPixmap, QIcon
|
|
|
|
|
from UI.DeviceWidget import DeviceDialog
|
|
|
|
|
from UI.AreaSettingWidget import AreaSettingWidget
|
|
|
|
|
from UI.DelAreaWidget import DelAreaWidget
|
|
|
|
|
# from model.ProjectModel.AreaManage import Devices, DevicesManange, Area
|
|
|
|
|
from model.ProjectModel.DeviceManage import DevicesManange, Device
|
|
|
|
|
from protocol.ModBus.ModBusThread import MyThread
|
|
|
|
|
from utils.DBModels.BaseModel import *
|
|
|
|
|
# from utils.DBModels.ClientModels import DeviceDB
|
|
|
|
|
# from model.ClientModel.Client import Client
|
|
|
|
|
from utils.DBModels.DeviceModels import DeviceDB
|
|
|
|
|
from model.ClientModel.Client import Client
|
|
|
|
|
class CommonHelper:
|
|
|
|
|
def __init__(self):
|
|
|
|
|
pass
|
|
|
|
@ -33,10 +33,12 @@ class MainWindow(QMainWindow):
|
|
|
|
|
self.sub_windows = [] #存储设备widget
|
|
|
|
|
self.nowValue = [] #储存当前值
|
|
|
|
|
self.areaLabel = [] #存储通道信息文本
|
|
|
|
|
# self.initAreaWidget()
|
|
|
|
|
|
|
|
|
|
self.number = 0
|
|
|
|
|
self.arealist = {}
|
|
|
|
|
self.widgetList= []
|
|
|
|
|
self.initUI()
|
|
|
|
|
self.initAreaWidget()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def initUI(self):
|
|
|
|
|
self.toolbar = QToolBar()
|
|
|
|
|
|
|
|
|
@ -68,46 +70,6 @@ class MainWindow(QMainWindow):
|
|
|
|
|
self.setWindowTitle("PROFIBUS")
|
|
|
|
|
self.setGeometry(1000, 500, 800, 600)
|
|
|
|
|
|
|
|
|
|
# def initAreaWidget(self):
|
|
|
|
|
# alldevices = Devices().getAllDevice()
|
|
|
|
|
#
|
|
|
|
|
# for devices in alldevices:
|
|
|
|
|
# layout = self.deviceWidget(devices[0]).widget().widget().layout().itemAt(1).widget().layout()
|
|
|
|
|
# areas = devices[3]
|
|
|
|
|
# number = 0
|
|
|
|
|
# masterSlaveModel = devices[2]
|
|
|
|
|
# if areas is not None:
|
|
|
|
|
# areas = json.loads(areas)
|
|
|
|
|
# for area in areas:
|
|
|
|
|
# varType = area["type"]
|
|
|
|
|
# channelNums = area["nums"]
|
|
|
|
|
# channelBytes = area["bytes"]
|
|
|
|
|
# for i in range(int(channelNums)):
|
|
|
|
|
# if masterSlaveModel == '主站':
|
|
|
|
|
# if (i + number) % 2 == 0:
|
|
|
|
|
# layout.addWidget(QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte'), (i + number) // 2,
|
|
|
|
|
# (i + number) % 2)
|
|
|
|
|
# layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 1)
|
|
|
|
|
# layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 2)
|
|
|
|
|
#
|
|
|
|
|
# else:
|
|
|
|
|
# layout.addWidget(QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte'), (i + number) // 2,
|
|
|
|
|
# (i + number) % 2 + 3)
|
|
|
|
|
# layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 4)
|
|
|
|
|
# layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 5)
|
|
|
|
|
# else:
|
|
|
|
|
# if (i + number) % 2 == 0:
|
|
|
|
|
# layout.addWidget(QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte'), (i + number) // 2,
|
|
|
|
|
# (i + number) % 2)
|
|
|
|
|
# layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 1)
|
|
|
|
|
# layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 2)
|
|
|
|
|
# else:
|
|
|
|
|
# layout.addWidget(QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte'), (i + number) // 2,
|
|
|
|
|
# (i + number) % 2 + 3)
|
|
|
|
|
# layout.addWidget(QLabel('0'), (i + number) // 2, (i + number) % 2 + 4)
|
|
|
|
|
# layout.addWidget(QLineEdit('0'), (i + number) // 2, (i + number) % 2 + 5)
|
|
|
|
|
#
|
|
|
|
|
# number = number + int(channelNums)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def deviceWidget(self, windowTitle):
|
|
|
|
@ -164,13 +126,37 @@ class MainWindow(QMainWindow):
|
|
|
|
|
|
|
|
|
|
return sub_window
|
|
|
|
|
|
|
|
|
|
def initAreaWidget(self):
|
|
|
|
|
alldevices = DevicesManange().getAllDevice()
|
|
|
|
|
|
|
|
|
|
for devices in alldevices:
|
|
|
|
|
layout = self.deviceWidget(devices[0]).widget().widget().layout().itemAt(1).widget().layout()
|
|
|
|
|
areas = devices[3]
|
|
|
|
|
number = 0
|
|
|
|
|
masterSlaveModel = devices[2]
|
|
|
|
|
deviceName = devices[0]
|
|
|
|
|
if areas is not None:
|
|
|
|
|
areas = json.loads(areas)
|
|
|
|
|
for area in areas:
|
|
|
|
|
varType = area["type"]
|
|
|
|
|
channelNums = area["nums"]
|
|
|
|
|
channelBytes = area["bytes"]
|
|
|
|
|
areaID = area['id']
|
|
|
|
|
|
|
|
|
|
if masterSlaveModel == '主站':
|
|
|
|
|
self.addChannelWidget(deviceName, number, channelNums, channelBytes, varType, layout, areaID)
|
|
|
|
|
else:
|
|
|
|
|
self.addChannelWidget(deviceName, number, channelNums, channelBytes, varType, layout, areaID)
|
|
|
|
|
number = number + int(channelNums)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def createDeciveWidget(self):
|
|
|
|
|
dialog = DeviceDialog()
|
|
|
|
|
if dialog.exec_() == QDialog.Accepted:
|
|
|
|
|
deviceName, proType, masterSlaveModel, pvUpperLimit, pvLowerLimit, pvUnit = dialog.getParameters()
|
|
|
|
|
windowTitle = deviceName + ' ' + proType + masterSlaveModel + ' ' + pvLowerLimit + '-' + pvUpperLimit + pvUnit
|
|
|
|
|
# DeviceDB().createDevice(deviceName = windowTitle, proType = proType, masterSlaveModel = masterSlaveModel, pvUpperLimit=pvUpperLimit, pvLowerLimit=pvLowerLimit, pvUnit=pvUnit)
|
|
|
|
|
DeviceDB().addDevice(deviceName = windowTitle, proType = proType, masterSlaveModel = masterSlaveModel, pvUpperLimit=pvUpperLimit, pvLowerLimit=pvLowerLimit, pvUnit=pvUnit)
|
|
|
|
|
else:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
@ -184,34 +170,54 @@ class MainWindow(QMainWindow):
|
|
|
|
|
dialog = AreaSettingWidget()
|
|
|
|
|
if dialog.exec_() == QDialog.Accepted:
|
|
|
|
|
varType, channelNums, channelBytes = dialog.getParameters()
|
|
|
|
|
# devices = Devices()
|
|
|
|
|
# number = devices.getValueLength(deviceName)
|
|
|
|
|
# devices.addAreas(varType, channelNums, channelBytes, deviceName)
|
|
|
|
|
# self.devicesmanage.addDevice(deviceName, channelNums, channelBytes)
|
|
|
|
|
number = DevicesManange.getChannelLength(deviceName)
|
|
|
|
|
Device().addAreas(varType, channelNums, channelBytes, deviceName)
|
|
|
|
|
areaId = Device().getAreaID(deviceName)[-1]
|
|
|
|
|
# Device().addDevice(deviceName, channelNums, channelBytes)
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
return
|
|
|
|
|
layout = sub_window.widget().widget().layout().itemAt(1).widget().layout() #获取sub_window的widgetArea的areaLayout2
|
|
|
|
|
number = self.number #待从数据库获取具体的数据
|
|
|
|
|
for i in range(int(channelNums)):
|
|
|
|
|
self.addChannelWidget(deviceName, number, channelNums, channelBytes, varType, layout, areaId)
|
|
|
|
|
number += int(channelNums)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def addChannelWidget(self,deviceNames, numbers, channelNums, channelBytes , varTypes, layouts ,ID):
|
|
|
|
|
deviceName = deviceNames
|
|
|
|
|
number = numbers
|
|
|
|
|
channelNum = channelNums
|
|
|
|
|
channelByte = channelBytes
|
|
|
|
|
varType = varTypes
|
|
|
|
|
layout = layouts
|
|
|
|
|
ID = ID
|
|
|
|
|
widgetList = []
|
|
|
|
|
arealists = []
|
|
|
|
|
|
|
|
|
|
for i in range(int(channelNum)):
|
|
|
|
|
if (i + number) % 2 == 0:
|
|
|
|
|
areaLabel = QLabel(varType + str(i + 1 ) + ": " + channelBytes + 'Byte' )
|
|
|
|
|
areaLabel = QLabel(varType + str(i + 1 ) + ": " + channelByte + 'Byte' )
|
|
|
|
|
areaLabel2 =QLabel('0')
|
|
|
|
|
areaLineEdit = QLineEdit('0')
|
|
|
|
|
editbtn = QPushButton('强制')
|
|
|
|
|
|
|
|
|
|
layout.addWidget(areaLabel , (i + number)//2, (i + number) % 2)
|
|
|
|
|
layout.addWidget(areaLabel, (i + number)//2, (i + number) % 2)
|
|
|
|
|
layout.addWidget(areaLabel2, (i + number)//2, (i + number) % 2 + 1 )
|
|
|
|
|
layout.addWidget(areaLineEdit, (i + number)//2, (i + number) % 2 + 2 )
|
|
|
|
|
layout.addWidget(editbtn, (i + number) // 2, (i + number) % 2 + 3)
|
|
|
|
|
|
|
|
|
|
editbtn.clicked.connect(lambda checked, btn=editbtn: self.forceEdit(btn))
|
|
|
|
|
widgetList.append([layout, ID, editbtn, areaLabel, areaLabel2, areaLineEdit])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# self.nowValue.append([deviceName, layout, ID, editbtn, areaLabel, areaLabel2, areaLineEdit, (i + number)//2, (i + number) % 2 + 1])
|
|
|
|
|
|
|
|
|
|
self.nowValue.append([deviceName, layout, i+1, editbtn, areaLabel2, areaLineEdit, (i + number)//2, (i + number) % 2 + 1])
|
|
|
|
|
self.areaLabel.append([deviceName, i+1, areaLabel, (i + number)//2, (i + number) % 2])
|
|
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
areaLabel = QLabel(varType + str(i + 1) + ": " + channelBytes + 'Byte')
|
|
|
|
|
areaLabel = QLabel(varType + str(i + 1) + ": " + channelByte + 'Byte')
|
|
|
|
|
areaLabel2 = QLabel('0')
|
|
|
|
|
areaLineEdit = QLineEdit('0')
|
|
|
|
|
editbtn = QPushButton('强制')
|
|
|
|
@ -222,70 +228,105 @@ class MainWindow(QMainWindow):
|
|
|
|
|
layout.addWidget(editbtn, (i + number) // 2, (i + number) % 2 + 6)
|
|
|
|
|
|
|
|
|
|
editbtn.clicked.connect(lambda checked, btn=editbtn: self.forceEdit(btn))
|
|
|
|
|
self.nowValue.append([deviceName, layout, i + 1, editbtn, areaLabel2, areaLineEdit, (i + number) // 2, (i + number) % 2 + 4])
|
|
|
|
|
self.areaLabel.append([deviceName, i + 1, areaLabel, (i + number) // 2, (i + number) % 2 + 3])
|
|
|
|
|
self.number += int(channelNums)
|
|
|
|
|
widgetList.append([layout, ID, editbtn, areaLabel, areaLabel2, areaLineEdit])
|
|
|
|
|
arealists.append(widgetList)
|
|
|
|
|
self.arealist[deviceName] = arealists
|
|
|
|
|
|
|
|
|
|
def forceEdit(self, btn):
|
|
|
|
|
for item in self.nowValue:
|
|
|
|
|
if btn in item:
|
|
|
|
|
item[4].setText(item[5].text())
|
|
|
|
|
|
|
|
|
|
# self.nowValue.append([deviceName, layout, ID, editbtn, areaLabel, areaLabel2, areaLineEdit, (i + number) // 2, (i + number) % 2 + 4])
|
|
|
|
|
|
|
|
|
|
self.nowValue.append(self.arealist)
|
|
|
|
|
print(self.nowValue,'aaaaaa')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def forceEdit(self, btn):
|
|
|
|
|
pass
|
|
|
|
|
# for item in self.nowValue:
|
|
|
|
|
# if btn in item:
|
|
|
|
|
# item[4].setText(item[5].text())
|
|
|
|
|
|
|
|
|
|
def delAreaWidget(self, sub_window):
|
|
|
|
|
subwindow = sub_window
|
|
|
|
|
if self.areaLabel:
|
|
|
|
|
if self.nowValue:
|
|
|
|
|
self.deviceName = subwindow.windowTitle()
|
|
|
|
|
delAreaWidget = DelAreaWidget(self.areaLabel, self.deviceName)
|
|
|
|
|
rowAndColumn = delAreaWidget.getDelAreaRowAndColunm()
|
|
|
|
|
self.getAreaWidget(rowAndColumn, subwindow)
|
|
|
|
|
delAreaWidget = DelAreaWidget(self.deviceName)
|
|
|
|
|
if delAreaWidget.exec_() == QDialog.Accepted:
|
|
|
|
|
rowAndColumn = delAreaWidget.getDelAreaRowAndColunm()
|
|
|
|
|
if rowAndColumn == []:
|
|
|
|
|
return
|
|
|
|
|
else:
|
|
|
|
|
self.getAreaWidget(rowAndColumn, subwindow)
|
|
|
|
|
Device().delAreas(self.deviceName,rowAndColumn)
|
|
|
|
|
else:
|
|
|
|
|
return
|
|
|
|
|
else:
|
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getAreaWidget(self, rowAndColumn, sub_window):
|
|
|
|
|
rowAndColumns = rowAndColumn
|
|
|
|
|
subwindow = sub_window
|
|
|
|
|
areaLayout = subwindow.widget().widget().layout().itemAt(1).widget().layout()
|
|
|
|
|
|
|
|
|
|
for rowAndColumn in rowAndColumns:
|
|
|
|
|
print(rowAndColumn)
|
|
|
|
|
row = rowAndColumn[0]
|
|
|
|
|
column = rowAndColumn[1]
|
|
|
|
|
if column == 0:
|
|
|
|
|
for i in range(4):
|
|
|
|
|
widget = areaLayout.itemAtPosition(row, i).widget()
|
|
|
|
|
areaLayout.removeWidget(widget)
|
|
|
|
|
widget.deleteLater()
|
|
|
|
|
#删除self.areaLabel列表中的对象
|
|
|
|
|
for label in self.areaLabel:
|
|
|
|
|
if widget in label:
|
|
|
|
|
self.areaLabel.remove(label)
|
|
|
|
|
else:
|
|
|
|
|
for i in range(4,8):
|
|
|
|
|
widget = areaLayout.itemAtPosition(row, i).widget()
|
|
|
|
|
areaLayout.removeWidget(widget)
|
|
|
|
|
widget.deleteLater()
|
|
|
|
|
# 删除self.areaLabel列表中的对象
|
|
|
|
|
for label in self.areaLabel:
|
|
|
|
|
if widget in label:
|
|
|
|
|
self.areaLabel.remove(label)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
deviceName = subwindow.windowTitle()
|
|
|
|
|
for areaId in rowAndColumn:
|
|
|
|
|
for devicelist in self.nowValue:
|
|
|
|
|
areas = devicelist[deviceName]
|
|
|
|
|
print(areas,'sssss')
|
|
|
|
|
area = areas[areaId - 1]
|
|
|
|
|
index = areas.index(area)
|
|
|
|
|
print(index,'index')
|
|
|
|
|
print(area,'ssss')
|
|
|
|
|
|
|
|
|
|
# for area in areas:
|
|
|
|
|
# for widget in range(2, 6):
|
|
|
|
|
# print(widget)
|
|
|
|
|
# print(area[widget])
|
|
|
|
|
# area[widget].deleteLater()
|
|
|
|
|
# areaLayout.removeWidget(area[widget])
|
|
|
|
|
# self.nowValue.remove(areaS)
|
|
|
|
|
# # print(self.nowValue)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# print(rowAndColumn,'sssss')
|
|
|
|
|
# for areaId in rowAndColumn:
|
|
|
|
|
# for nowWidget in self.nowValue:
|
|
|
|
|
# if nowWidget[0] == deviceName and nowWidget[2] == areaId:
|
|
|
|
|
# for widget in range(3, 7):
|
|
|
|
|
#
|
|
|
|
|
# areaLayout.removeWidget(nowWidget[widget])
|
|
|
|
|
# nowWidget[widget].deleteLater()
|
|
|
|
|
# delAreaWidgetList.append(nowWidget)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# for widget in delAreaWidgetList: #从列表中删除已删除的部件
|
|
|
|
|
# self.nowValue.remove(widget)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#重置area的id
|
|
|
|
|
# i = 1
|
|
|
|
|
# j = 1
|
|
|
|
|
# for nowWidget in self.nowValue:
|
|
|
|
|
# if nowWidget[0] == deviceName:
|
|
|
|
|
# if nowWidget[2] == j:
|
|
|
|
|
# index = nowWidget.index(nowWidget[2])
|
|
|
|
|
# nowWidget[index] = i
|
|
|
|
|
# else:
|
|
|
|
|
# j = nowWidget[2]
|
|
|
|
|
# i += 1
|
|
|
|
|
# index = nowWidget.index(nowWidget[2])
|
|
|
|
|
# nowWidget[index] = i
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def startProtocol(self):
|
|
|
|
|
if self.areaLabel:
|
|
|
|
|
print(1)
|
|
|
|
|
else:
|
|
|
|
|
print(2)
|
|
|
|
|
return
|
|
|
|
|
a = []
|
|
|
|
|
for i in range(len(self.nowValue)):
|
|
|
|
|
a.append(i)
|
|
|
|
|
|
|
|
|
|
for i in a :
|
|
|
|
|
for j in self.nowValue:
|
|
|
|
|
j[5].setText(str(i))
|
|
|
|
|
print(a)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def closeEvent(self, event):
|
|
|
|
@ -302,8 +343,7 @@ class AreaQMdiSubWindow(QMdiSubWindow):
|
|
|
|
|
super().__init__()
|
|
|
|
|
self.number = 0
|
|
|
|
|
def closeEvent(self, event):
|
|
|
|
|
pass
|
|
|
|
|
# self.devicedb.deleteDevice(deviceName = self.windowTitle())
|
|
|
|
|
DeviceDB.deleteDevice(deviceName = self.windowTitle())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -312,7 +352,7 @@ class AreaQMdiSubWindow(QMdiSubWindow):
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
app = QApplication(sys.argv)
|
|
|
|
|
# Client.initDB()
|
|
|
|
|
Client.initDB()
|
|
|
|
|
window = MainWindow()
|
|
|
|
|
|
|
|
|
|
window.show()
|
|
|
|
|