0906更新

main
zcwBit 2 years ago
parent 7e79b14533
commit 32f576d927

@ -21,7 +21,7 @@ class DelAreaWidget(QDialog):
def initUI(self):
vorlayout = QVBoxLayout() #主布局
# layout = QGridLayout()
jsonCons = Device().getAreaJson(self.deviceName)
jsonCons = Device.getAreaJson(self.deviceName)
row = 1
if jsonCons is None:

@ -37,6 +37,7 @@ class MainWindow(QMainWindow):
self.widgetList= []
self.initUI()
self.initAreaWidget()
self.projectManage = DevicesManange()
def initUI(self):
@ -103,7 +104,7 @@ class MainWindow(QMainWindow):
horizontalLayout.addWidget(newbtn)
horizontalLayout.addItem(self.horizontalSpacer)
# horizontalLayout.addWidget(delbth)
horizontalLayout.addWidget(delbth)
newbtn.clicked.connect(lambda: self.newAreaWidget(sub_window))
delbth.clicked.connect(lambda: self.delAreaWidget(sub_window))
@ -135,7 +136,7 @@ class MainWindow(QMainWindow):
pass
def initAreaWidget(self):
alldevices = DevicesManange().getAllDevice()
alldevices = DevicesManange.getAllDevice()
for devices in alldevices:
layout = self.deviceWidget(devices[0]).widget().widget().layout().itemAt(1).widget().layout()
@ -181,8 +182,8 @@ class MainWindow(QMainWindow):
if dialog.exec_() == QDialog.Accepted:
varType, channelNums, channelBytes = dialog.getParameters()
number = DevicesManange.getChannelLength(deviceName)
Device().addAreas(varType, channelNums, channelBytes, deviceName)
areaId = Device().getAreaID(deviceName)[-1]
DevicesManange.addAreas(varType, channelNums, channelBytes, deviceName)
areaId = DevicesManange.getAreaID(deviceName)[-1]
else:
return
@ -270,12 +271,12 @@ class MainWindow(QMainWindow):
areas = devicelist[deviceName][:]
area = areas[areaId - 1]
for are in area:
for widget in range(2, 6):
for widget in range(2, 7):
areaLayout.removeWidget(are[widget])
are[widget].deleteLater()
devicelist[deviceName].remove(area)
Device().delAreas(deviceName,rowAndColumn)
Device.delAreas(deviceName,rowAndColumn)
# self.updateLayout(areaLayout)
else:

@ -8,7 +8,7 @@ import sys
if __name__ == '__main__':
app = QApplication(sys.argv)
# app.setStyle(QStyleFactory.create('Fusion'))
app.setStyle(QStyleFactory.create('Fusion'))
app.setStyleSheet(CommonHelper.readQss('static/main.qss'))
Client.initDB()
window = MainWindow()

@ -27,99 +27,13 @@ jsonCon = json.dumps([{
class Area():
startAddress = DevicesManange().getAddress()
startAddress = None
endAddress = None
bytes = None
type = None
addressList = []
def __init__(self):
self.masterRealtimeValue = []
self.slaveRealtimeValue = []
self.masterForceValue = []
self.slaveForceValue = []
self.masterValues = []
self.slaveValues = []
# self.id = areaJson["id"]
# self.type = areaJson["type"]
# self.nums = areaJson["nums"]
# self.bytes = areaJson["bytes"]
# self.values = [0] * self.nums
# self.writeValues = [0] * self.nums
# def getallAreaAddress(self):
# self.masterRegisterAddress = []
# self.slaveRegisterAddress = []
# self.masterDevicesAddressStart, self.SlaveDevicesAddressStart = DevicesManange().getByteLengthStart()
# print(self.masterDevicesAddressStart, self.SlaveDevicesAddressStart, 'ssss')
# for key in self.masterDevicesAddressStart:
# if DeviceDB.getByName(deviceName=key).areaJson is not None:
# registerAddress = 0
# jsonCon = json.loads(DeviceDB.getByName(deviceName=key).areaJson)
# for jsonKey in jsonCon:
# nums = int(jsonKey["nums"])
# bytes = int(jsonKey["bytes"])
# for i in range(nums):
# if bytes % 2 == 0:
# byte = bytes // 2
# else:
# byte = (bytes+1) // 2
# registerAddress = registerAddress + byte
# self.masterRegisterAddress.append(self.masterDevicesAddressStart[key] + registerAddress)
#
#
# for key in self.SlaveDevicesAddressStart:
# if DeviceDB.getByName(deviceName=key).areaJson is not None:
# registerAddress = 0
# jsonCon = json.loads(DeviceDB.getByName(deviceName=key).areaJson)
# for jsonKey in jsonCon:
# nums = int(jsonKey["nums"])
# bytes = int(jsonKey["bytes"])
# for i in range(nums):
# if bytes % 2 == 0:
# byte = bytes // 2
# else:
# byte = (bytes + 1) // 2
# registerAddress = registerAddress + byte
# self.slaveRegisterAddress.append(self.SlaveDevicesAddressStart[key] + registerAddress)
#
# print(self.masterRegisterAddress, self.slaveRegisterAddress)
# return self.masterRegisterAddress, self.slaveRegisterAddress #按顺序返回所有的寄存器地址
# def getallAreaValue(self,sub_windows):
# self.sub_windows = sub_windows
#
# for sub_window in sub_windows:
# if '主站' in sub_window.windowTitle():
# areaLayout = sub_window.widget().widget().layout().itemAt(1).widget().layout()
# for row in range(areaLayout.rowCount()):
# for column in range(areaLayout.columnCount()):
# widget_item = areaLayout.itemAtPosition(row, column)
# if widget_item is not None:
# widget = widget_item.widget()
# if isinstance(widget, QLineEdit):
# line_edit_text = widget.text()
# concurrent_label = areaLayout.itemAtPosition(row, column - 1).widget().text()
# proTypeLabel = areaLayout.itemAtPosition(row, column - 2).widget()
# self.masterRealtimeValue.append(concurrent_label)
# self.masterForceValue.append(line_edit_text)
# else:
# areaLayout = sub_window.widget().widget().layout().itemAt(1).widget().layout()
# for row in range(areaLayout.rowCount()):
# for column in range(areaLayout.columnCount()):
# widget_item = areaLayout.itemAtPosition(row, column)
# if widget_item is not None:
# widget = widget_item.widget()
# if isinstance(widget, QLineEdit):
# line_edit_text = widget.text()
# concurrent_label = areaLayout.itemAtPosition(row, column - 1).widget().text()
# proTypeLabel = areaLayout.itemAtPosition(row, column - 2).widget()
# self.slaveRealtimeValue.append(concurrent_label)
# self.slaveForceValue.append(line_edit_text)
# self.masterRealtimeValue = [int(s) if s.isdigit() else float(s) for s in self.masterRealtimeValue]
# self.slaveRealtimeValue = [int(s) if s.isdigit() else float(s) for s in self.slaveRealtimeValue]
# self.masterForceValue = [int(s) if s.isdigit() else float(s) for s in self.masterForceValue]
# self.slaveForceValue = [int(s) if s.isdigit() else float(s) for s in self.slaveForceValue]
pass
def writeValues(self):

@ -1,36 +1,32 @@
import collections
import json
from utils.DBModels.DeviceModels import DeviceDB
from model.ProjectModel.AreaManage import Area
class Device():
areas = []
startAddress = None
endAddress = None
endAddress = 0
protocolType = None
masterOrSlave = None
deviceName = None
def __init__(self):
pass
def addAreas(self, type, nums, bytes, deviceName):
if DeviceDB.getByName(deviceName=deviceName).areaJson is None:
jsonCon = ([{
"id": 1,
"type": type,
"nums": nums,
"bytes": bytes,
}])
def addArea(self, type, nums, bytes):
area = Area()
area.startAddress = self.endAddress
length = int(nums) * int(bytes)
if length % 2 != 0:
length = (length + 1) // 2
else:
jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson)
id = jsonCon[-1]["id"] + 1
jsonCon.append({
"id": id,
"type": type,
"nums": nums,
"bytes": bytes,
})
areaJson = json.dumps(jsonCon)
DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute()
length = length / 2
area.endAddress = startAddress + length
self.endAddress = area.endAddress
for index, address in range(area.startAddress, area.endAddress):
if index % bytes == 0 and self.protocolType == 'DP':
area.
def getValueLength(self):
@ -40,6 +36,7 @@ class Device():
def writeAreas(self):
pass
@classmethod
def delAreas(self, deviceName, ids):
jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson)
@ -57,18 +54,7 @@ class Device():
DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute()
def getAreaID(self, deviceNames):
deviceName = deviceNames
jsonConsStr = DeviceDB.getByName(deviceName=deviceName).areaJson
if jsonConsStr is None:
return
else:
jsonCons = json.loads(jsonConsStr)
id = []
for jsonCon in jsonCons:
id.append(jsonCon["id"])
return id
@classmethod
def getAreaJson(self, deviceNames):
deviceName = deviceNames
jsonConsStr = DeviceDB.getByName(deviceName=deviceName).areaJson
@ -80,61 +66,68 @@ class Device():
class DevicesManange():
def __init__(self):
self.masterDevices = collections.OrderedDict()
self.slaveDevices = collections.OrderedDict() # 有序字典 (OrderedDict)
self.initDevices()
self.dpMasterDevices = collections.OrderedDict()
self.dpSlaveDevices = collections.OrderedDict() # 有序字典 (OrderedDict)
self.paMasterDevices = collections.OrderedDict()
self.paSlaveDevices = collections.OrderedDict()
def addDevice(self, proType, masterSlaveModel, deviceName):
device = Device()
device.type = proType
device.masterSlaveModel = masterSlaveModel
device.deviceName = deviceName
masterSlaveModel = masterSlaveModel
if proType == "DP" and masterSlaveModel == "主站":
curProDict = self.dpMasterDevices
elif proType == "DP" and masterSlaveModel == "从站":
curProDict = self.dpSlaveDevices
elif proType == "PA" and masterSlaveModel == "主站":
curProDict = self.paMasterDevices
elif proType == "PA" and masterSlaveModel == "从站":
curProDict = self.paSlaveDevices
if len(curProDict) == 0:
device.startAddress = 0
else:
device.startAddress = curProDict.values[-1].endAddress + 1
curProDict[deviceName] = device
def initDevices(self):
devices = DeviceDB.get_all()
@classmethod
def addAreas(self, type, nums, bytes, deviceName):
if DeviceDB.getByName(deviceName=deviceName).areaJson is None:
jsonCon = ([{
"id": 1,
"type": type,
"nums": nums,
"bytes": bytes,
}])
else:
jsonCon = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson)
id = jsonCon[-1]["id"] + 1
jsonCon.append({
"id": id,
"type": type,
"nums": nums,
"bytes": bytes,
})
areaJson = json.dumps(jsonCon)
DeviceDB.update(areaJson=areaJson).where(DeviceDB.deviceName == deviceName).execute()
if devices is 'error':
@classmethod
def getAreaID(self, deviceNames):
deviceName = deviceNames
jsonConsStr = DeviceDB.getByName(deviceName=deviceName).areaJson
if jsonConsStr is None:
return
for x in devices:
masterSlaveModel = x.masterSlaveModel
if masterSlaveModel == '主站':
devices = x.deviceName
masterByteLong = 0
if x.areaJson is not None:
for y in json.loads(x.areaJson):
numbers = y['nums']
bytes = int(y['bytes'])
if bytes % 2 == 0:
byte = bytes // 2
else:
byte = (bytes + 1) // 2
masterByteLong += int(numbers) * int(byte)
self.masterDevices[devices] = masterByteLong
elif masterSlaveModel == '从站':
devices = x.deviceName
salveByteLong = 0
if x.areaJson is not None:
for y in json.loads(x.areaJson):
numbers = y['nums']
bytes = int(y['bytes'])
if bytes % 2 == 0:
byte = bytes // 2
else:
byte = (bytes + 1) // 2
salveByteLong += int(numbers) * (byte)
self.slaveDevices[devices] = salveByteLong
def addDevice(self, deviceName,channelNums, channelBytes):
channelBytes = int(channelBytes)
if channelBytes % 2 == 0:
channelBytes = channelBytes // 2
else:
channelBytes = (channelBytes + 1) // 2
if deviceName in self.masterDevices:
self.masterDevices[deviceName] = self.masterDevices[deviceName] + int(channelNums) * int(channelBytes)
elif deviceName in self.slaveDevices:
self.slaveDevices[deviceName] = self.slaveDevices[deviceName] + int(channelNums) * int(channelBytes)
elif '主站' in deviceName:
self.masterDevices[deviceName] = int(channelNums) * int(channelBytes)
elif '从站' in deviceName:
self.slaveDevices[deviceName] = int(channelNums) * int(channelBytes)
return self.masterDevices, self.slaveDevices #分别返回PA和DP每个设备的字节的总长度
jsonCons = json.loads(jsonConsStr)
id = []
for jsonCon in jsonCons:
id.append(jsonCon["id"])
return id
@classmethod
def getChannelLength(self, deviceName):
@ -150,21 +143,7 @@ class DevicesManange():
def editDevies(self):
pass
def getByteLengthStart(self):
masterAddress = 0
slaveAddress = 0
masterAddressList = {}
slaveAddressList = {}
for key in self.masterDevices:
masterAddressList[key] = int(masterAddress)
masterAddress = int(self.masterDevices[key]) + masterAddress
for key in self.slaveDevices:
slaveAddressList[key] = int(slaveAddress)
slaveAddress = int(self.slaveDevices[key]) + slaveAddress
print(masterAddressList, '主站', slaveAddressList, '从站')
return masterAddressList, slaveAddressList #返回PA和DP每个字节长度的起始值
@classmethod
def getAllDevice(self):
# 查询所有设备
devices = DeviceDB.get_all()

@ -0,0 +1,27 @@
import re
from AreaManage import Area
from DeviceManage import Device
def importProject():
curSlave = 0
startAddress = 0
protocolType = None
devices = []
with open('program.txt', 'r') as f:
lines = f.readlines()
for line in lines:
if "协议类型选择" in line:
if line[-3:-2] == '0':
protocolType = "DP主站"
elif "-Slave [" in line:
device = Device()
pattern = r'\d+'
slaveIndex = re.findall(pattern, line)[0]
deviceName = protocolType + slaveIndex
if slaveIndex == "0":
device.startAddress = 0
elif
importProject()
Loading…
Cancel
Save