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

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.DeviceModels import DeviceDB
# 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 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