import json import collections import time from PyQt5.QtWidgets import QApplication, QMainWindow, QToolBar, QMdiArea, QAction, QInputDialog, QDialog, QFormLayout, QLineEdit, \ QMdiSubWindow, QDialogButtonBox, QWidget, QComboBox, QTabBar, QTabWidget, QGridLayout, QLabel, QPushButton, QSpacerItem, QSizePolicy, QHBoxLayout, QTableWidget from model.ProjectModel.DeviceManage import DevicesManange from protocol.ModBus.TCPMaster import TcpMaster from utils.DBModels.ClientModels import DeviceDB jsonCon = json.dumps([{ "id": 0, "type": "AO", "nums": 4, "bytes": 2, }, { "id": 1, "type": "AI", "nums": 8, "bytes": 4, }]) class Area(): startAddress = DevicesManange().getAddress() endAddress = None bytes = None 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] def writeValues(self): self.masterWriteValues = TcpMaster('127.0.0.2', 502) self.slaveWriteValues = TcpMaster('127.0.0.1', 502) print(self.masterValues,'sssssss') self.masterWriteValues.writeSingleRegister(1, 0, self.masterValues) self.slaveWriteValues.writeSingleRegister(1, 0, self.slaveRealtimeValue) class Devices(): areas = [] startAddress = None endAddress = None def __init__(self, jsonCon=[]): for areaJson in jsonCon: self.areas.append(Area(areaJson)) 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() def getValueLength(self, deviceName): number = 0 if DeviceDB.getByName(deviceName=deviceName).areaJson is None: return number else: numbers = json.loads(DeviceDB.getByName(deviceName=deviceName).areaJson) for i in numbers: number += int(i['nums']) return number def getAllDevice(self): # 查询所有设备 devices = DeviceDB.get_all() if devices is 'error': return l = [] for x in devices: l.append([x.deviceName, x.proType, x.masterSlaveModel, x.areaJson]) return l def writeAreas(self): pass