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.
195 lines
7.6 KiB
Python
195 lines
7.6 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.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
|
|
|
|
|
|
|
|
|
|
|