0308更新

main
parent a27b6db15e
commit 0e55c20ff2

@ -0,0 +1,150 @@
QPushButton#okBtn, QPushButton#delAreaBtn, QPushButton#forceBtn {
font-size: 22px;
}
QPushButton#wirteDIDOforceBtn {
font-size: 16px;
padding-left: 5px;
padding-right: 5px;
padding-top: 5px;
padding-bottom: 5px;
}
QPushButton#forceBtn {
font-size: 26px;
padding-left: 5px;
padding-right: 5px;
padding-top: 5px;
padding-bottom: 5px;
}
QPushButton#deviceAddButton, QPushButton#addareabutton {
color: #328ffc;
font-size: 20px;
}
QPushButton#initAddDeviceButton, QPushButton#initAreaAddButton{
font-size: 45px;
color: #328ffc;
background-color: rgba(255, 255, 255, 0);
}
QPushButton#initAddDeviceButton:hover, QPushButton#initAreaAddButton:hover{
color: #1a86d8;
font: bold;
border-radius: 3px;
margin-bottom: -4px
}
QLabel#WirteDIDOareaMessLabel, QLabel#WirteDIDOareaValueLabel{
font-size: 16px;
}
QLabel#WirteDIDOareaValueLabel{
color: #0160aa;
}
QLabel#areaMessLabel, QLabel#areaValueLabel{
font-size: 28px;
}
QLabel#areaValueLabel{
color: #0160aa;
}
QLabel#readDIDOareaMessLabel, QLabel#readDIDOareaValueLabel{
font-size: 23px;
}
QLabel#dataTypeLabel, QLabel#dataOrderLabel, QLabel#byteLineLabel{
font-size: 24px;
}
QLabel#areaValueLabel{
color: #0160aa;
}
QLineEdit#byteLineEdit, QLineEdit#areaLineEdit {
font-size: 28px;
}
QLineEdit#WirteDIDOareaLineEdit {
font-size: 16px;
}
QLineEdit#areaLineEdit {
font-size: 28px;
}
QComboBox#dataTypeCombox, QComboBox#orderCombox{
font-size: 20px;
}

@ -4,68 +4,16 @@ QMdiSubWindow {
font-size: 18px;
font-weight: bold;
}
QPushButton#okBtn, QPushButton#delAreaBtn, QPushButton#forceBtn {
font-size: 20px;
}
QPushButton#deviceAddButton, QPushButton#addareabutton {
color: #328ffc;
font-size: 21px;
}
QPushButton#initAddDeviceButton, QPushButton#initAreaAddButton{
font-size: 45px;
color: #328ffc;
background-color: rgba(255, 255, 255, 0);
}
QPushButton#initAddDeviceButton:hover, QPushButton#initAreaAddButton:hover{
color: #1a86d8;
font: bold;
border-radius: 3px;
margin-bottom: -4px
}
QLabel#dataTypeLabel, QLabel#dataOrderLabel, QLabel#byteLineLabel, QLabel#areaMessLabel, QLabel#areaValueLabel{
font-size: 20px;
}
QLabel#areaValueLabel{
color: #0160aa;
}
QLineEdit#byteLineEdit, QLineEdit#areaLineEdit {
font-size: 20px;
}
QComboBox#dataTypeCombox, QComboBox#orderCombox{
font-size: 25px;
font-size: 20px;
}
@ -110,11 +58,13 @@ QTabBar::tab{
}
QTabBar#areaTabBar::tab{
min-width: 100px;
/* min-width: 100px;*/
font: 20px;
}
@ -152,10 +102,22 @@ QDockWidget{
}
QDockWidget::title{
font-size: 20px;
background-color: #cbdeec;
color: white;
text-align: center;
}
QToolBar QToolButton{
font-size: 20px;
font: bold;
}

@ -32,14 +32,14 @@ class AreaTabWidget(QTabWidget):
self.setObjectName('areaTabWidget')
self.setTabPosition(QTabWidget.South)
self.tabBar().setObjectName('areaTabBar')
self.addAreaButton = QPushButton("添加区域")
self.addAreaButton = QPushButton("添加通道")
self.addAreaButton.setObjectName('addareabutton')
self.addAreaButton.setIcon(QIcon('Static/add.png'))
self.addAreaButton.setFlat(True)
self.setCornerWidget(self.addAreaButton)
self.addAreaButton.clicked.connect(self.addAreaTab)
# self.state = True
self.initWidget() #初始化界面
# self.tabCloseRequested.connect(self.closeTab)
@ -59,15 +59,18 @@ class AreaTabWidget(QTabWidget):
areas = json.loads(devices[3])
if areas:
self.removeTab(0)
# self.state = False
for area in areas:
dataType, order = self.tran(area["type"], area["order"])
channelBytes = area["bytes"]
settingValue = [dataType, order, channelBytes]
self.addAreaTab(settingValue=settingValue)
else:
widget = QWidget()
widget.setObjectName('initWidget')
layout = QHBoxLayout()
addButton = QPushButton('添加区域')
addButton = QPushButton('添加通道')
addButton.setObjectName('initAreaAddButton')
icon = QIcon('Static/add.png')
iconSize = QSize(50,50)
@ -126,12 +129,11 @@ class AreaWidget(QWidget):
super().__init__()
self.areaTabWidget = areaTabWidget
self.settingValue = settingValue
self.state = True
self.devicesManange = self.areaTabWidget.devicesManange
self.initUI()
def initUI(self):
self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.mainLayout = QHBoxLayout()
self.leftLayout = QGridLayout()
self.rightLayout = QGridLayout()
@ -194,8 +196,8 @@ class AreaWidget(QWidget):
self.mainLayout.addLayout(self.leftLayout, 1)
self.mainLayout.addWidget(line)
self.mainLayout.addLayout(self.rightLayout, 9)
self.mainLayout.setSpacing(20)
self.mainLayout.addLayout(self.rightLayout, 20)
self.mainLayout.setSpacing(10)
# self.deviceWidgetManage.addArea(mainLayout=mainLayout, leftLayoutWidget=leftLayoutWidgets)
@ -219,8 +221,9 @@ class AreaWidget(QWidget):
if self.okBtn.text() == '确定':
if index != -1:
self.areaTabWidget.removeTab(index)
if tabCount == 1:
self.areaTabWidget.initWidget()
# if tabCount == 1:
# self.areaTabWidget.initWidget()
# self.state = True
#正常点击删除按钮的情况
else:
@ -233,8 +236,10 @@ class AreaWidget(QWidget):
Device.delAreas(deviceName, index)
self.devicesManange.getDevice(deviceName).delArea(index, datatype)
self.devicesManange.recalculateAddress()
if tabCount == 1:
self.areaTabWidget.initWidget()
if tabCount == 1:
self.areaTabWidget.initWidget()
self.state = True
@ -246,6 +251,7 @@ class AreaWidget(QWidget):
areaLayout = self.rightLayout
deviceName = self.areaTabWidget.deviceName
#开启软件时判断数据库是否有存在设备信息,并执行相应的操作
if self.settingValue is None:
dataType = self.dataTypeCombox.currentText()
@ -296,29 +302,27 @@ class AreaWidget(QWidget):
widget.deleteLater()
#添加按钮布局
buttonWidgets = ButtonWidgets(self, order = order, byteLineEdit = byteLineEdit, dataType = dataType, deviceName = deviceName)
areaLayout.addWidget(buttonWidgets,0,0)
self.buttonWidgets = ButtonWidgets(self, order = order, byteLineEdit = byteLineEdit, dataType = dataType, deviceName = deviceName)
areaLayout.addWidget(self.buttonWidgets)
self.state = False
areaId = DevicesManange.getAreaID(deviceName)
if self.settingValue is not None:
self.devicesManange.getDevice(deviceName).addArea(type = dataType, bytes = int(byteLineEdit), order = order, nums = 1)
self.isRead = self.devicesManange.getDevice(deviceName).addArea(type = dataType, bytes = int(byteLineEdit), order = order, nums = 1)
self.devicesManange.recalculateAddress()
return
elif areaId is not None and curIndex in areaId:
# print(areaId,curIndex,2222)
DevicesManange.updataAreas(dataType, order, byteLineEdit, deviceName, curIndex)
self.devicesManange.getDevice(deviceName).editArea(index = curIndex, type = dataType, order = order, bytes = int(byteLineEdit))
self.isRead = self.devicesManange.getDevice(deviceName).editArea(index = curIndex, type = dataType, order = order, bytes = int(byteLineEdit))
# self.readVarTimer.start(500)
else:
DevicesManange.addAreas(dataType, order, byteLineEdit, deviceName)
self.devicesManange.getDevice(deviceName).addArea(type = dataType, bytes = int(byteLineEdit), order = order, nums = 1)
self.isRead = self.devicesManange.getDevice(deviceName).addArea(type = dataType, bytes = int(byteLineEdit), order = order, nums = 1)
self.devicesManange.recalculateAddress()
# self.readVarTimer.start(500)
@ -330,38 +334,10 @@ class AreaWidget(QWidget):
self.dataTypeDict = {'不转换': 'ABCD', '字节转换': 'DCBA', '字转换': 'CDAB', '字内转换': 'BADC'}
return self.dataTypeDict[order]
def wirteValue(self, deviceName, curIndex, valueList):
print(deviceName,curIndex, valueList )
# self.devicesManange.writeAreas(deviceName = deviceName, values = valueList)
def readValue(self,deviceName, curIndex):
print(deviceName, curIndex)
# if curIndex == -1:
# return
# else:
# device = self.devicesManange.getDevice(deviceName)
# values = device.getAreaValues(curIndex)
# i = 0
# for value in values:
# areaLabel[i].setText(str(value))
# i =+ 1
#
# else:
# device = self.mainwindow.devicesManange.getDevice(deviceName)
# values = device.getAreaValues(curIndex)
# areaWidgets = self.widgetList[areaIndex]
# for value, widgets in zip(values, areaWidgets):
# widgets[0].setText(str(value))
if __name__ == '__main__':
app = QApplication(sys.argv)
window = AreaTabWidget()

@ -42,7 +42,7 @@ class AreaWidget(QWidget):
self.sub_window.setWidget(self.widget)
def newArea(self):
print(1)
# print(1)
areaSettingWidget = AreaSettingWidget()
if areaSettingWidget.exec_() == QDialog.Accepted:
deviceName, proType, varType = areaSettingWidget.getParameters()

@ -35,7 +35,6 @@ class ButtonWidgets(QWidget):
def areaLayout(self):
areaLayout = QVBoxLayout()
print(self.dataType)
if self.dataType in ['AI','AO']:
hLayout = QHBoxLayout()
hLayout.addWidget(QSplitter())
@ -49,11 +48,11 @@ class ButtonWidgets(QWidget):
areaLayout.addWidget(QSplitter())
for i in range(int(byteLineEdit)):
hLayout = QHBoxLayout()
hLayout.addWidget(QSplitter(), 2)
hLayout.addLayout(self.dateLayout(number = (i + 1)), 6)
hLayout.addWidget(QSplitter(), 2)
hLayout.addLayout(self.dateLayout(number = (i + 1) + 8), 6)
hLayout.addWidget(QSplitter(), 2)
hLayout.addWidget(QSplitter(), 1)
hLayout.addLayout(self.dateLayout(number = (i + 1)), 3)
hLayout.addWidget(QSplitter(), 1)
hLayout.addLayout(self.dateLayout(number = (i + 1) + 8), 3)
hLayout.addWidget(QSplitter(), 1)
areaLayout.addLayout(hLayout)
areaLayout.addWidget(QSplitter())
@ -63,7 +62,7 @@ class ButtonWidgets(QWidget):
number = number
forceLayout = QHBoxLayout()
areaMessLabel = QLabel(str(self.dataType) + "{:<{}}".format(str(number), 2) + ": " + '字节长度: ' + str(self.byteLineEdit) + ' 当前值: ' )
areaMessLabel = QLabel(str(self.dataType) + "{:<{}}".format(str(number), 2) + ": " + '字节长度: ' + str(self.byteLineEdit) + ' 当前值:' )
areaMessLabel.setObjectName('areaMessLabel')
areaValueLabel = QLabel('0')
areaValueLabel.setObjectName('areaValueLabel')
@ -73,21 +72,39 @@ class ButtonWidgets(QWidget):
if '主站' in self.deviceName and self.dataType == 'AI' or ('从站' in self.deviceName and self.dataType == 'AO'):
force = False
self.areaLabel[number] = areaValueLabel
self.areaLabel[number - 1] = areaValueLabel
elif '主站' in self.deviceName and self.dataType == 'DI' or ('从站' in self.deviceName and self.dataType == 'DO'):
force = False
self.areaLabel[number] = areaValueLabel
self.areaLabel[number - 1] = areaValueLabel
if force:
areaLineEdit = QLineEdit('0')
areaLineEdit.setObjectName('areaLineEdit')
areaLineEdit.setFixedSize(80, 33)
forceBtn = forceButton(number = number, valueLabel=areaValueLabel, valueEdit=areaLineEdit)
forceBtn.clicked.connect(self.forceValues)
# forceBtn.setFixedSize(50, 27)
forceLayout.addWidget(areaLineEdit)
forceLayout.addWidget(forceBtn)
self.areaLineEditValue.append('0')
self.areaLineEditValue.append(0)
if self.deviceName[-2:] + self.dataType in ['从站DI','主站DO']:
areaMessLabel.setObjectName('wirteDIDOareaMessLabel')
areaValueLabel.setObjectName('wirteDIDOareaValueLabel')
areaLineEdit.setObjectName('wirteDIDOareaLineEdit')
areaLineEdit.setFixedSize(30, 27)
forceBtn.setObjectName('wirteDIDOforceBtn')
if self.deviceName[-2:] + self.dataType in ['主站DI','从站DO']:
areaMessLabel.setObjectName('readDIDOareaMessLabel')
areaValueLabel.setObjectName('readDIDOareaValueLabel')
forceLayout.setSpacing(10)
# forceLayout.setSpacing(10)
return forceLayout
def wirteAreaLineEditValue(self,dataTypeAndModel, valueLabel, number, value):
@ -100,7 +117,7 @@ class ButtonWidgets(QWidget):
return
else:
valueLabel.setText(value)
self.areaLineEditValue[number -1] = value
self.areaLineEditValue[number -1] = float(value)
#判断输入值是否为0和1
elif dataTypeAndModel in ['主站DO','从站DI']:
@ -117,17 +134,19 @@ class ButtonWidgets(QWidget):
return self.areaLineEditValue
def readValues(self,deviceName, curIndex):
if self.areaLabel is None:
return
elif curIndex == -1:
def readValues(self, curIndex):
print(curIndex)
if self.areaLabel is None or self.areaLabel == dict():
return
# elif curIndex == -1:
# return
else:
device = self.devicesManange.getDevice(deviceName)
# print(id(device))
print(self.deviceName, curIndex)
device = self.devicesManange.getDevice(self.deviceName)
values = device.getAreaValues(curIndex)
for index, value in enumerate(values):
self.areaLabel[index+1].setText(str(value))
self.areaLabel[index].setText(str(value))
# print(self.areaLabel[index],values)
@ -139,10 +158,10 @@ class ButtonWidgets(QWidget):
dataTypeAndModel = self.deviceName[-2:] + self.dataType
curIndex = self.areaWidget.areaTabWidget.currentIndex()
valueList = self.wirteAreaLineEditValue(dataTypeAndModel=dataTypeAndModel, valueLabel=valueLabel,number=number, value=value)
print(valueList, curIndex)
if valueList is None:
return
else:
self.areaWidget.wirteValue(deviceName = self.deviceName, curIndex = curIndex, valueList = valueList)
self.devicesManange.writeAreas(deviceName = self.deviceName, areaIndex = curIndex, values = valueList)

@ -1,3 +1,4 @@
import re
from PyQt5.QtWidgets import QDialog, QFormLayout, QLineEdit, QDialogButtonBox, QMessageBox
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import Qt

@ -45,8 +45,8 @@ class DeviceWidget(QMainWindow):
self.deviceTabWidget.setCornerWidget(self.addDeviceButton)
self.deviceTabWidget.setTabsClosable(True)
self.deviceTabWidget.tabCloseRequested.connect(self.closeTab)
self.initWidget(True)
self.state = True
self.initWidget()
# 设置主窗口的中心部分为 QTabWidget
self.setCentralWidget(self.deviceTabWidget)
@ -62,7 +62,7 @@ class DeviceWidget(QMainWindow):
else:
return
if self.deviceTabWidget.count() == 0:
self.initWidget(True)
self.creatInitWidget()
@ -70,7 +70,7 @@ class DeviceWidget(QMainWindow):
if deviceName is None:
dialog = DeviceDialog()
if dialog.exec_() == QDialog.Accepted:
self.titleName = dialog.getParameters()
self.titleName, pvUpperLimit, pvLowerLimit, pvUnit = dialog.getParameters()
self.deviceName = self.titleName + self.dockWidget.windowTitle()
DeviceDB().addDevice(deviceName = self.deviceName, proType = self.proType , masterSlaveModel = self.masterSlaveModel)
areaTabWidget = AreaTabWidget(self)
@ -93,7 +93,7 @@ class DeviceWidget(QMainWindow):
def initWidget(self,state):
def initWidget(self):
alldevices = DevicesManange.getAllDevice()
titleName = self.dockWidget.windowTitle()
if alldevices:
@ -101,27 +101,31 @@ class DeviceWidget(QMainWindow):
deviceName = devices[0]
if titleName in deviceName:
# print(devices,333)
self.devicesManange.addDevice(proType = devices[1], masterSlaveModel = devices[2], deviceName = devices[0])
self.addDeviceWidget(deviceName=deviceName)
state = False
if state:
widget = QWidget()
layout = QHBoxLayout()
addButton = QPushButton('添加设备')
addButton.setObjectName('initAddDeviceButton')
icon = QIcon('Static/add.png')
iconSize = QSize(50,50)
addButton.setIcon(icon)
addButton.setIconSize(iconSize)
addButton.clicked.connect(lambda: self.addDeviceWidget(True))
layout.addItem(self.horizontalSpacer)
layout.addWidget(addButton)
layout.addItem(self.horizontalSpacer)
widget.setLayout(layout)
self.deviceTabWidget.addTab(widget,'')
self.deviceTabWidget.tabBar().setHidden(True)
self.addDeviceWidget(deviceName=deviceName)
self.state = False
if self.state:
self.creatInitWidget()
def creatInitWidget(self):
widget = QWidget()
widget.setObjectName('initWidget')
layout = QHBoxLayout()
addButton = QPushButton('添加设备')
addButton.setObjectName('initAddDeviceButton')
icon = QIcon('Static/add.png')
iconSize = QSize(50,50)
addButton.setIcon(icon)
addButton.setIconSize(iconSize)
addButton.clicked.connect(lambda: self.addDeviceWidget(True))
layout.addItem(self.horizontalSpacer)
layout.addWidget(addButton)
layout.addItem(self.horizontalSpacer)
widget.setLayout(layout)
self.deviceTabWidget.addTab(widget,'')
self.deviceTabWidget.tabBar().setHidden(True)

@ -1,7 +1,7 @@
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QToolBar, QAction, QTabWidget, QGridLayout
from PyQt5.QtCore import Qt
from PyQt5.QtCore import Qt, QTimer
from PyQt5.QtGui import QIcon
from utils.DBModels.BaseModel import *
from model.ClientModel.Client import Client
@ -26,18 +26,22 @@ class MainWindow(QMainWindow):
def initUI(self):
self.protocolTimer = QTimer()
self.protocolTimer.timeout.connect(self.readValues)
self.toolbar = QToolBar()
self.addToolBar(self.toolbar)
self.startProtocolBtn = QAction("开始通讯", self)
self.startProtocolBtn.setObjectName("startProtocolBtn")
self.startProtocolBtn.setCheckable(True)
self.startProtocolBtn.triggered.connect(self.startProtocol)
self.loadProjectBtn = QAction('导入工程', self)
self.loadProjectBtn.setObjectName("loadProjectBtn")
self.loadProjectBtn.triggered.connect(self.loadProject)
self.toolbar.addAction(self.loadProjectBtn)
# self.toolbar.addAction(self.loadProjectBtn)
self.toolbar.addAction(self.startProtocolBtn)
dpMasterDockWidget = QDockWidget('DP主站')
@ -63,29 +67,52 @@ class MainWindow(QMainWindow):
self.setWindowIcon(QIcon('Static/zhjt.ico'))
self.setWindowTitle("PROFIBUS")
self.showMaximized()
self.resize(800, 600)
# self.showMaximized()
def startProtocol(self):
if self.startProtocolBtn.isCheckable():
self.startProtocolBtn.setText('停止通讯')
self.startProtocolBtn.setCheckable(False)
self.protocolTimer.start(500)
else:
self.startProtocolBtn.setText('开始通讯')
self.startProtocolBtn.setCheckable(True)
self.protocolTimer.stop()
def readValues(self):
self.devicesManange.readAreas()
dockWidgets = self.findChildren(QDockWidget) #找到四个dockWidget窗口
for dockWidget in dockWidgets:
deviceTabWidgets = dockWidget.findChildren(QTabWidget, 'deviceTabWidget') #判断四个窗口里是否有deviceTabWidget
for deviceTabWidget in deviceTabWidgets:
areaTabWidgets = deviceTabWidget.findChildren(QTabWidget, 'areaTabWidget')
for areaTabWidget in areaTabWidgets:
leftLayout = areaTabWidget.currentWidget().layout().itemAt(0)
if isinstance(leftLayout,QGridLayout):
masterAndSlave = dockWidget.windowTitle()[2:5]
dataType = leftLayout.itemAtPosition(0,1).widget().currentText()
dataTypeAndModel = masterAndSlave + dataType
if dataTypeAndModel in ['主站AI', '主站DI', '从站AO', '从站DO']:
curIndex = areaTabWidget.currentIndex()
buttonlayoutWidget = areaTabWidget.currentWidget().layout().itemAt(2).itemAtPosition(0,0).widget()#获取buttonlayout
buttonlayoutWidget.readValues(deviceName = deviceName, curIndex = curIndex)
if dockWidget.widget().deviceTabWidget.currentWidget().objectName() == 'initWidget':
print(dockWidget.widget().deviceTabWidget.currentWidget().objectName())
continue
areaTabWidget = dockWidget.widget().deviceTabWidget.currentWidget()#判断四个窗口里是否有deviceTabWidget
if areaTabWidget.currentWidget().objectName() == 'initWidget':
print(2)
continue
if areaTabWidget.currentWidget().state:
print(3)
continue
# masterAndSlave = dockWidget.windowTitle()[2:5]
# proType = dockWidget.windowTitle()
# dataType = dataTypeCombox.currentText()
# dataTypeAndModel = masterAndSlave + dataType
# if dataTypeAndModel in ['主站AI', '主站DI', '从站AO', '从站DO']:
# devicecurIndex = deviceTabWidget.currentIndex()
# deviceTabText = deviceTabWidget.tabText(devicecurIndex)
# try:
areacurindex = areaTabWidget.currentIndex()
# deviceName = deviceTabText + proType
buttonlayoutWidget = areaTabWidget.currentWidget().buttonWidgets#获取buttonlayout
buttonlayoutWidget.readValues(curIndex = areacurindex)
# except Exception as e:
# print(e)
def loadProject(self):
pass

@ -9,8 +9,10 @@ import sys
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setStyle(QStyleFactory.create('windowsvista'))
app.setStyleSheet(CommonHelper.readQss('static/main.qss'))
app.setStyleSheet(CommonHelper.readQss('static/main.qss') + CommonHelper.readQss('static/Area.qss'))
Client.initDB()
window = MainWindow()
window.show()
window.showMaximized()
# window.show()
sys.exit(app.exec_())

@ -20,6 +20,7 @@ class Device():
def __init__(self):
self.inputAreas = []
self.outputAreas = []
self.areas = []
self.indexDict = collections.OrderedDict()
# 有序字典 键:总区域索引 值: [类型(输入 : 0, 或输出 : 1), 该类型的第几个区域索引]
@ -40,6 +41,7 @@ class Device():
area.addressList = np.arange(area.startAddress, area.endAddress + 1, area.bytes).tolist()
self.indexDict[len(self.indexDict.values())] = len(self.inputAreas)
self.inputAreas.append(area)
self.areas.append(area)
elif type in ["DO" , "AO"]:
area.startAddress = 0 if not self.outputEndAddress else self.outputEndAddress
area.endAddress = area.startAddress + area.length
@ -47,6 +49,9 @@ class Device():
area.addressList = np.arange(area.startAddress, area.endAddress + 1, area.bytes).tolist()
self.indexDict[len(self.indexDict.values())] = len(self.outputAreas)
self.outputAreas.append(area)
self.areas.append(area)
if (self.masterOrSlave == '主站' and type in ['AI', 'DI']) or (self.masterOrSlave == '从站' and type in ['AO', 'DO']):
return True
# print(id(self), self.inputAreas)
# print(self.deviceName, area.addressList, area.startAddress, area.endAddress, self.inputAreas)
@ -58,6 +63,7 @@ class Device():
# self.recalculateAddress()
def recalculateAddress(self):
# print(self.inputStartAddress)
for inputOrOutput, areas in enumerate([self.inputAreas, self.outputAreas]):
endAddress = 0
for index, area in enumerate(areas):
@ -71,11 +77,17 @@ class Device():
area.addressList = np.arange(area.startAddress, area.endAddress + 1, area.bytes).tolist()
# print(area.addressList, area.startAddress, area.endAddress, self.deviceName)
endAddress = area.endAddress
else:
if inputOrOutput == 0:
self.inputEndAddress = endAddress
elif inputOrOutput == 1:
self.outputEndAddress = endAddress
# print(endAddress)
# else:
# print(endAddress)
if endAddress == 0 and inputOrOutput == 0:
endAddress = self.inputStartAddress
if endAddress == 0 and inputOrOutput == 1:
endAddress = self.outputStartAddress
if inputOrOutput == 0:
self.inputEndAddress = endAddress
elif inputOrOutput == 1:
self.outputEndAddress = endAddress
# endAddress = 0
# print(self.deviceName, self.inputEndAddress)
@ -90,12 +102,14 @@ class Device():
def getAreaValues(self, index):
if self.masterOrSlave == "从站":
return self.outputAreas[index].currentValue
else:
# print(self.inputAreas, index)
# print(id(self), self.inputAreas)
return self.inputAreas[index].currentValue
# if self.masterOrSlave == "从站":
# return self.outputAreas[index].currentValue
# else:
# # print(self.inputAreas, index)
# # print(id(self), self.inputAreas)
# return self.inputAreas[index].currentValue
# print(self.areas[index].currentValue)
return self.areas[index].currentValue
def getLength(self, nums, bytes):
length = int(nums) * int(bytes)
@ -110,7 +124,6 @@ class Device():
@classmethod
def delAreas(self, deviceName, id):
jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson)
print(len(jsonCon))
if len(jsonCon) > id:
jsonCon.pop(id)
else:
@ -121,7 +134,7 @@ class Device():
DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute()
else:
for index, areajsonId in enumerate(jsonCon):
areajsonId["id"] = index + 1
areajsonId["id"] = index
areaJson = json.dumps(jsonCon)
DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute()
@ -147,7 +160,7 @@ class DevicesManange():
self.paSlaveDevices = collections.OrderedDict()
self.dpSlaveModbus = TcpMaster(host = '192.168.2.10', port = 502)
self.paSlaveModbus = TcpMaster(host = '192.168.4.10', port = 502)
self.dpMasterModbus = TcpMaster(host = '192.168.0.40', port = 502)
self.dpMasterModbus = TcpMaster(host = '192.168.1.10', port = 502)
self.paMasterModbus = TcpMaster(host = '192.168.3.10', port = 502)
@ -187,6 +200,8 @@ class DevicesManange():
def recalculateAddress(self):
for devicesDict in [self.paMasterDevices, self.paSlaveDevices, self.dpMasterDevices, self.dpSlaveDevices]:
# print(len(devicesDict))
# print(devicesDict)
# print(self.dpMasterDevices)
for index, (deviceName, device) in enumerate(devicesDict.items()):
if index == 0:
device.inputStartAddress = 0
@ -197,8 +212,9 @@ class DevicesManange():
device.inputStartAddress = 0 if inputAddress == 0 else inputAddress
device.outputStartAddress = 0 if outputAddress == 0 else outputAddress
# print(device.inputStartAddress, device.inputEndAddress, deviceName, '输入')
# print(device.outputStartAddress, device.outputEndAddress, deviceName, 'shuchu')
device.recalculateAddress()
# print(device.outputStartAddress, device.outputEndAddress, deviceName)
# print(device.outputStartAddress, device.outputEndAddress, deviceName, 'shuchu')
# previousDevice = device
@ -207,34 +223,35 @@ class DevicesManange():
if deviceName in devicesDict:
return devicesDict[deviceName]
def writeAreas(self, deviceName, values):
def writeAreas(self, deviceName, areaIndex, values):
# print(values)
bytes = b""
device = self.getDevice(deviceName)
# print(device, deviceName)
if device.type == "DP" and device.masterOrSlave == "主站":
curProDict = self.dpMasterDevices
areas = device.outputAreas
# areas = device.outputAreas
modbusM = self.dpMasterModbus
elif device.type == "DP" and device.masterOrSlave == "从站":
curProDict = self.dpSlaveDevices
areas = device.inputAreas
# areas = device.inputAreas
modbusM = self.dpSlaveModbus
elif device.type == "PA" and device.masterOrSlave == "主站":
areas = device.outputAreas
# areas = device.outputAreas
curProDict = self.paMasterDevices
modbusM = self.paMasterModbus
elif device.type == "PA" and device.masterOrSlave == "从站":
areas = device.inputAreas
# areas = device.inputAreas
curProDict = self.paSlaveDevices
modbusM = self.paSlaveModbus
# print(values)
for area, value in zip(areas, values):
area.forceValue = value
if area.type in ['DO', 'DI'] and device.type == 'PA':
area.forceValue = value[8:] + value[:8]
elif area.type in ['DO', 'DI'] and device.type == 'DP' and device.masterOrSlave == "主站":
area.forceValue = value[8:] + value[:8]
# for area, value in zip(areas, values):
area = device.areas[areaIndex]
area.forceValue = values
if area.type in ['DO', 'DI'] and device.type == 'PA':
area.forceValue = values[8:] + values[:8]
elif area.type in ['DO', 'DI'] and device.type == 'DP' and device.masterOrSlave == "主站":
area.forceValue = values[8:] + values[:8]
for device in curProDict.values():
forceAreas = device.outputAreas if device.masterOrSlave == "主站" else device.inputAreas
@ -308,7 +325,8 @@ class DevicesManange():
else:
bytes = bytes[::-1]
area.currentValue = bytesToCoils(bytes)
# print(area.currentValue)
print(area.currentValue, device.deviceName, area.startAddress,area.endAddress)
# print()
@classmethod
def addAreas(self, type, order, bytes, deviceName):
jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson)

@ -1,15 +0,0 @@
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in range(0, len(nums)):
for j in range(1, len(nums)):
if nums[i] + nums[j] == target:
print([i,j])
solution = Solution()
solution.twoSum([2,7,11,15], 9)

@ -69,6 +69,7 @@ def floatToBytes(values, length, order):
# hOrder = '<'if order.byte in ['ABCD', 'DCBA'] else '>'
# 获取values的长度
valuesNums = len(values)
# print(values,valuesNums,6666)
# 将values转换为字节流
valueByte = struct.pack(f"!{'f' * valuesNums}", *values)
valueByte = reorderBytes(valueByte, format = order) + struct.pack('B' * (length - valuesNums * 4), *[0] * (length - valuesNums * 4))

@ -24,7 +24,9 @@ class DeviceDB(BaseModel):
proType = CharField()
masterSlaveModel = CharField()
areaJson = JSONField()
pvUpperLimit = CharField()
pvLowerLimit = CharField()
pvUnit = CharField()
createTime = CharField()
# 查询设备是否存在
@ -48,11 +50,14 @@ class DeviceDB(BaseModel):
# 添加设备
def addDevice(self, deviceName, proType, masterSlaveModel=masterSlaveModel, areaJson=json.dumps([])):
def addDevice(self, deviceName, proType, masterSlaveModel=masterSlaveModel, areaJson=json.dumps([]), pvLowerLimit=pvLowerLimit, pvUpperLimit=pvUpperLimit, pvUnit=pvUnit):
self.deviceName = deviceName
self.proType = proType
self.masterSlaveModel = masterSlaveModel
self.areaJson = areaJson
self.pvUpperLimit = pvUpperLimit
self.pvLowerLimit = pvLowerLimit
self.pvUnit = pvUnit
self.createTime = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S')
# print(self.createTime)
self.save()

Loading…
Cancel
Save