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.

193 lines
7.3 KiB
Python

2 years ago
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
2 years ago
from utils.DBModels.DeviceModels import DeviceDB
2 years ago
# from utils.DBModels.ClientModels import DeviceDB
2 years ago
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()
2 years ago
2 years ago
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