1026更新

ModbusPack
zhangxuxutm 2 years ago
parent eb68ed846f
commit 4f32597f3d

5
.gitignore vendored

@ -14,6 +14,11 @@ o
*.code-workspace *.code-workspace
*.json *.json
*.spec *.spec
*.cmd
*.exe
*.api
Static/license.lic Static/license.lic
.idea/.gitignore .idea/.gitignore
/Static/influxDB/ /Static/influxDB/
/bin.build/
Static/InfluxDB.api

@ -611,13 +611,13 @@ QCheckBox#userBox::indicator{
QCheckBox#userBox::indicator:checked{ QCheckBox#userBox::indicator:checked{
image: url(Static/checkoff.png); image: url(:/static/checkoff.png);
} }
QCheckBox#userBox::indicator:enabled:unchecked{ QCheckBox#userBox::indicator:enabled:unchecked{
image: url(Static/checkon.png); image: url(:/static/checkon.png);
} }
@ -714,7 +714,7 @@ QComboBox#timeBox::drop-down{
QComboBox#setBox::drop-down, QComboBox#ProTypeBox::drop-down,QComboBox#TcRtdTypeBox::drop-down, QComboBox#ModbusTypeBox::drop-down, QComboBox#timeBox::drop-down{ QComboBox#setBox::drop-down, QComboBox#ProTypeBox::drop-down,QComboBox#TcRtdTypeBox::drop-down, QComboBox#ModbusTypeBox::drop-down, QComboBox#timeBox::drop-down{
image: url(Static/down.png); image: url(:/static/down.png);
} }
@ -806,3 +806,52 @@ QListView#trendListView::item{
margin-bottom: 10px; margin-bottom: 10px;
} }
QMessageBox {
background-color: #f0f0f0;
color: black;
font-size: 14px;
border: 1px solid #cccccc;
border-radius: 5px;
padding: 5px;
}
QMessageBox QLabel {
color: black;
font-size: 14px;
}
QMessageBox QPushButton {
background-color: #e0e0e0;
color: black;
font-size: 14px;
border: 1px solid #cccccc;
border-radius: 5px;
padding: 5px;
min-width: 5em;
}
QMessageBox QPushButton:hover {
background-color: #f5f5f5;
}
QMessageBox QPushButton:pressed {
background-color: #e5e5e5;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

@ -1,4 +1,5 @@
import sys import sys
import time
# sys.setrecursionlimit(10000) # sys.setrecursionlimit(10000)
@ -20,7 +21,7 @@ from PyQt5.QtWinExtras import QtWin
from win32 import win32api, win32gui from win32 import win32api, win32gui
from win32.lib import win32con from win32.lib import win32con
# from UI.VarManages.FFWidget import FFWidget from UI.VarManages.FFWidget import FFWidget
from windoweffect import WindowEffect, MINMAXINFO, NCCALCSIZE_PARAMS from windoweffect import WindowEffect, MINMAXINFO, NCCALCSIZE_PARAMS
@ -29,9 +30,8 @@ from UI.Main.MainTop import MainTop
from ..ProjectManages.ProjectWidget import ProjectWidgets from ..ProjectManages.ProjectWidget import ProjectWidgets
from ..VarManages.VarWidget import VarWidgets from ..VarManages.VarWidget import VarWidgets, HartWidgets, TcRtdWidgets, AnalogWidgets, FFSimulateWidgets, \
# HartWidgets, TcRtdWidgets, AnalogWidgets, FFSimulateWidgets, \ HartSimulateWidgets
# HartSimulateWidgets
from ..UserManage.UserWidget import UserWidgets from ..UserManage.UserWidget import UserWidgets
from ..TrendManage.TrendWidget import TrendWidgets from ..TrendManage.TrendWidget import TrendWidgets
from ..Setting.RTUSetting import RTUSettingWidget from ..Setting.RTUSetting import RTUSettingWidget
@ -116,22 +116,22 @@ class MainWindow(QMainWindow):
self.trendWidget = TrendWidgets() self.trendWidget = TrendWidgets()
self.TcpSettingWidget = TCPSettingWidget() self.TcpSettingWidget = TCPSettingWidget()
self.RtuSettingWidget = RTUSettingWidget() self.RtuSettingWidget = RTUSettingWidget()
# self.hartWidget = HartWidgets() self.hartWidget = HartWidgets()
# self.tcrtdWidget = TcRtdWidgets() self.tcrtdWidget = TcRtdWidgets()
# self.analogWidget = AnalogWidgets() self.analogWidget = AnalogWidgets()
# self.ffWidget = FFWidget() self.ffWidget = FFWidget()
# self.ffsimulateWidget = FFSimulateWidgets() self.ffsimulateWidget = FFSimulateWidgets()
# self.hartsimulateWidget = HartSimulateWidgets() self.hartsimulateWidget = HartSimulateWidgets()
self.userWidget.setObjectName('userWidget') self.userWidget.setObjectName('userWidget')
self.projectWidget.setObjectName('projectWidget') self.projectWidget.setObjectName('projectWidget')
self.trendWidget.setObjectName('trendWidget') self.trendWidget.setObjectName('trendWidget')
self.varWidget.setObjectName('varWidget') self.varWidget.setObjectName('varWidget')
# self.analogWidget.setObjectName('analogWidget') self.analogWidget.setObjectName('analogWidget')
# self.ffWidget.setObjectName('ffWidget') self.ffWidget.setObjectName('ffWidget')
# self.ffsimulateWidget.setObjectName('ffsimulateWidget') self.ffsimulateWidget.setObjectName('ffsimulateWidget')
# self.hartsimulateWidget.setObjectName('hartsimulateWidget') self.hartsimulateWidget.setObjectName('hartsimulateWidget')
self.rightWidget = QStackedWidget() self.rightWidget = QStackedWidget()
# self.rightWidget.setAttribute(Qt.WA_StyledBackground, True) # self.rightWidget.setAttribute(Qt.WA_StyledBackground, True)
@ -142,19 +142,19 @@ class MainWindow(QMainWindow):
self.rightWidget.addWidget(self.userWidget) self.rightWidget.addWidget(self.userWidget)
self.rightWidget.addWidget(self.TcpSettingWidget) self.rightWidget.addWidget(self.TcpSettingWidget)
self.rightWidget.addWidget(self.RtuSettingWidget) self.rightWidget.addWidget(self.RtuSettingWidget)
# self.rightWidget.addWidget(self.hartWidget) self.rightWidget.addWidget(self.hartWidget)
# self.rightWidget.addWidget(self.tcrtdWidget) self.rightWidget.addWidget(self.tcrtdWidget)
# self.rightWidget.addWidget(self.analogWidget) self.rightWidget.addWidget(self.analogWidget)
# self.rightWidget.addWidget(self.ffWidget) self.rightWidget.addWidget(self.ffWidget)
# self.rightWidget.addWidget(self.ffsimulateWidget) self.rightWidget.addWidget(self.ffsimulateWidget)
# self.rightWidget.addWidget(self.hartsimulateWidget) self.rightWidget.addWidget(self.hartsimulateWidget)
self.rightWidget.widget(1) self.rightWidget.widget(1)
self.leftWidget.createProject.clicked.connect(lambda: self.exButtonClicked(0)) self.leftWidget.createProject.clicked.connect(lambda: self.exButtonClicked(0))
self.leftWidget.varMag.clicked.connect(self.varShow) self.leftWidget.varMag.clicked.connect(self.varShow)
self.leftWidget.trendMag.clicked.connect(lambda: self.exButtonClicked(2)) self.leftWidget.trendMag.clicked.connect(self.reFreshTrendWidget)
self.leftWidget.userMag.clicked.connect(lambda: self.exButtonClicked(3)) self.leftWidget.userMag.clicked.connect(lambda: self.exButtonClicked(3))
self.leftWidget.protocolMag.clicked.connect(self.showSetting) self.leftWidget.protocolMag.clicked.connect(self.showSetting)
@ -186,7 +186,7 @@ class MainWindow(QMainWindow):
self.setWindowFlag(Qt.FramelessWindowHint) self.setWindowFlag(Qt.FramelessWindowHint)
def exButtonClicked(self, index): def exButtonClicked(self, index):
self.rightWidget.setCurrentIndex(index) self.rightWidget.setCurrentIndex(index)
print(index) # print(index)
Globals.setValue('SearchWidget', index) Globals.setValue('SearchWidget', index)
@ -204,7 +204,7 @@ class MainWindow(QMainWindow):
def varShow(self): def varShow(self):
proType = Globals.getValue('currentProType') proType = Globals.getValue('currentProType')
print(type(proType)) # print(type(proType))
if proType == -1: if proType == -1:
return return
elif proType in ['0', '1', '2', '3']: elif proType in ['0', '1', '2', '3']:
@ -229,7 +229,12 @@ class MainWindow(QMainWindow):
elif proType in ['9']: elif proType in ['9']:
self.rightWidget.setCurrentIndex(11) self.rightWidget.setCurrentIndex(11)
Globals.setValue('SearchWidget', 11) Globals.setValue('SearchWidget', 11)
#枚举参数 #枚举参数
def reFreshTrendWidget(self):
self.trendWidget.getMems()
self.exButtonClicked(2)
def enum(self,**enums): def enum(self,**enums):
return type('Enum', (), enums) return type('Enum', (), enums)

@ -5,8 +5,9 @@ from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QSize, Qt from PyQt5.QtCore import QSize, Qt
from PyQt5.QtGui import QPixmap, QIcon from PyQt5.QtGui import QPixmap, QIcon
from UI.TrendManage.TrendWidget import TrendWidgets from UI.TrendManage.TrendWidget import TrendWidgets
from Static import static
from utils import Globals from utils import Globals
from Static import static
class MainTop(QtWidgets.QWidget): class MainTop(QtWidgets.QWidget):
def __init__(self, MainWindow): def __init__(self, MainWindow):
super().__init__() super().__init__()
@ -49,7 +50,6 @@ class MainTop(QtWidgets.QWidget):
self.iconLabol.setPixmap(QPixmap(':/static/zhjt.png').scaled(50,50)) self.iconLabol.setPixmap(QPixmap(':/static/zhjt.png').scaled(50,50))
self.titleLabel.setText("信号发生装置") self.titleLabel.setText("信号发生装置")
self.closeBtn.clicked.connect(self.MainWindow.close) self.closeBtn.clicked.connect(self.MainWindow.close)
self.minBtn.clicked.connect(self.MainWindow.showMinimized) self.minBtn.clicked.connect(self.MainWindow.showMinimized)
self.maxBtn.clicked.connect(self.showMax) self.maxBtn.clicked.connect(self.showMax)

@ -249,12 +249,14 @@ class ProjectButtonDelegate(QItemDelegate):
return return
self.loginWidget = LoginWidget() self.loginWidget = LoginWidget()
self.loginWidget.show() self.loginWidget.show()
lastproType = Globals.getValue('currentProType')
ProjectManage.switchProject(str(self.parent().model.datas[sender.index[0]][1]), str(self.parent().model.datas[sender.index[0]][4])) ProjectManage.switchProject(str(self.parent().model.datas[sender.index[0]][1]), str(self.parent().model.datas[sender.index[0]][4]))
proType = Globals.getValue('currentProType') proType = Globals.getValue('currentProType')
if proType in ['0', '1', '2', '3']: if proType in ['0', '1', '2', '3']:
Globals.getValue('varTable').model.initTable() Globals.getValue('varTable').model.initTable()
# if lastproType in ['0', '1', '2', '3']:
# Globals.getValue('varTable').model.refreshComboBox()
elif proType in ['4']: elif proType in ['4']:
Globals.getValue('HartTable').model.initTable() Globals.getValue('HartTable').model.initTable()
elif proType in ['5']: elif proType in ['5']:
@ -338,8 +340,7 @@ class ProTypeBoxDelegate(ProjectButtonDelegate):
setattr(self, comboBox, QComboBox(self.parent())) setattr(self, comboBox, QComboBox(self.parent()))
cmBox = getattr(self, comboBox) cmBox = getattr(self, comboBox)
# item = ['MODBUSTCP 主站模式', 'MODBUSTCP 从站模式', 'MODBUSRTU 主站模式', 'MODBUSRTU 从站模式','HART', 'TCRTD', 'AO/DO/PI', 'FF', 'FF模拟', 'HART模拟'] item = ['MODBUSTCP 主站模式', 'MODBUSTCP 从站模式', 'MODBUSRTU 主站模式', 'MODBUSRTU 从站模式','HART', 'TCRTD', 'AO/DO/PI', 'FF', 'FF模拟', 'HART模拟']
item = ['MODBUSTCP 主站模式', 'MODBUSTCP 从站模式', 'MODBUSRTU 主站模式', 'MODBUSRTU 从站模式']
cmBox.addItems(item) cmBox.addItems(item)
cmBox.index = [index.row(), index.column()] cmBox.index = [index.row(), index.column()]
if self.parent().model.datas[index.row()][index.column()] in range(10): if self.parent().model.datas[index.row()][index.column()] in range(10):

@ -111,7 +111,7 @@ class RegisterWidget(QWidget):
self.setWindowTitle("Form") self.setWindowTitle("Form")
# self.label.setText("TextLabel") # self.label.setText("TextLabel")
pix = QtGui.QPixmap(':/static/logo.png') pix = QtGui.QPixmap(':/:/static/logo.png')
self.label.setPixmap(pix) self.label.setPixmap(pix)
self.label.setScaledContents(True) self.label.setScaledContents(True)
self.label.setMaximumSize(QSize(110,40)) self.label.setMaximumSize(QSize(110,40))

@ -114,6 +114,8 @@ class TrendWidgets(QWidget):
Globals.setValue('HistoryWidget', self) Globals.setValue('HistoryWidget', self)
def deleteMem(self): def deleteMem(self):
if not self.memLsit:
return
self.historyDB.mem = self.memLsit[self.timeBox.currentIndex()] self.historyDB.mem = self.memLsit[self.timeBox.currentIndex()]
self.historyDB.deleteMem() self.historyDB.deleteMem()
InfluxMem.deleteMem(self.historyDB.mem) InfluxMem.deleteMem(self.historyDB.mem)
@ -173,16 +175,15 @@ class TrendWidgets(QWidget):
def exchangeProject(self): def exchangeProject(self):
self.timeBox.clear() self.timeBox.clear()
self.memLsit = [] self.memLsit = []
self.getMems()
self.refreshList(0) self.refreshList(0)
self.trendWebView.setHtml('')
def getMems(self): def getMems(self):
# 获取所有的趋势表 # 获取所有的趋势表
mems = InfluxMem.get_all() mems = InfluxMem.get_all()
self.proName = Globals.getValue('currentPro') self.proName = Globals.getValue('currentPro')
self.timeBox.clear()
# self.timeBox.clear()
if mems is 'Error': if mems is 'Error':
return return
for x in mems: for x in mems:
@ -195,14 +196,16 @@ class TrendWidgets(QWidget):
def refreshList(self, index): def refreshList(self, index):
# 更新变量列表 # 更新变量列表
self.getMems() self.model.clear()
if self.memLsit == []: if self.memLsit == []:
return return
self.historyDB.mem = self.memLsit[index] self.historyDB.mem = self.memLsit[index]
# self.historyDB.startTime = int(float(self.memLsit[index])) # self.historyDB.startTime = int(float(self.memLsit[index]))
# print(self.memLsit[index]) # print(self.memLsit[index])
tagSet = self.historyDB.queryVarName() tagSet = self.historyDB.queryVarName()
self.model.clear() # if not tagSet:
# QMessageBox.information(self, '提示', '当前工程历史趋势已损坏')
# return
for tag in tagSet: for tag in tagSet:
item = QStandardItem(str(tag)) item = QStandardItem(str(tag))
item.setCheckable(True) item.setCheckable(True)

@ -11,7 +11,6 @@ from PyQt5.QtWidgets import (QApplication, QGridLayout, QHBoxLayout, QLabel,
from protocol.Celery.MBTCPMaster import app from protocol.Celery.MBTCPMaster import app
from Static import static from Static import static
class MessageWidget(QWidget): class MessageWidget(QWidget):
def __init__(self, parent=None): def __init__(self, parent=None):
super(MessageWidget, self).__init__(parent) super(MessageWidget, self).__init__(parent)
@ -65,7 +64,7 @@ class MessageWidget(QWidget):
self.recvLabel.setText(QCoreApplication.translate("Form", u"\u63a5\u6536\u5230\u62a5\u6587", None)) self.recvLabel.setText(QCoreApplication.translate("Form", u"\u63a5\u6536\u5230\u62a5\u6587", None))
self.sendLabel.setText(QCoreApplication.translate("Form", u"\u53d1\u9001\u7684\u62a5\u6587", None)) self.sendLabel.setText(QCoreApplication.translate("Form", u"\u53d1\u9001\u7684\u62a5\u6587", None))
self.clearButton.setText("清空报文") self.clearButton.setText("清空报文")
self.reButton.setText(QCoreApplication.translate("Form", u"\u505c\u6b62\u5237\u65b0", None)) self.reButton.setText('停止刷新')
self.decimaButton.setText('切换进制') self.decimaButton.setText('切换进制')
self.timer = QTimer(self) self.timer = QTimer(self)
@ -90,8 +89,10 @@ class MessageWidget(QWidget):
def stopRe(self): def stopRe(self):
if self.timer.isActive(): if self.timer.isActive():
self.timer.stop() self.timer.stop()
self.reButton.setText('开始刷新')
else: else:
self.timer.start() self.timer.start()
self.reButton.setText('停止刷新')
def addText(self): def addText(self):
self.recvEdit.clear() self.recvEdit.clear()

@ -5,7 +5,7 @@ import qtawesome
from PyQt5 import QtGui,QtCore,QtWidgets from PyQt5 import QtGui,QtCore,QtWidgets
from PyQt5.QtCore import QAbstractTableModel, QModelIndex, Qt, QVariant, QSize from PyQt5.QtCore import QAbstractTableModel, QModelIndex, Qt, QVariant, QSize
from PyQt5.QtWidgets import QItemDelegate, QHBoxLayout, QWidget, QTableView, QMessageBox, QComboBox from PyQt5.QtWidgets import QItemDelegate, QHBoxLayout, QWidget, QTableView, QMessageBox, QComboBox, QStyleOptionViewItem
from protocol.Celery.MBTCPMaster import app as MBTCPMApp from protocol.Celery.MBTCPMaster import app as MBTCPMApp
@ -76,6 +76,7 @@ class VarTableModel(QAbstractTableModel):
self.checkList = ['Unchecked'] * len(self.datas) self.checkList = ['Unchecked'] * len(self.datas)
# self.layoutChanged.emit() # self.layoutChanged.emit()
self.table.proxy.invalidate() self.table.proxy.invalidate()
self.refreshComboBox()
def append_data(self, x): def append_data(self, x):
@ -194,6 +195,24 @@ class VarTableModel(QAbstractTableModel):
self.datas[sourceRow], self.datas[destinationChild] = self.datas[destinationChild], self.datas[sourceRow] self.datas[sourceRow], self.datas[destinationChild] = self.datas[destinationChild], self.datas[sourceRow]
self.table.proxy.invalidate() self.table.proxy.invalidate()
def refreshComboBox(self):
# print(self.table.rowCount())
for i in range(len(self.datas)):
cbRow = str('cb' + str(i) + '5')
index = self.index(i, 5)
delegate = self.table.itemDelegate(index)
delegate.paint(self.table, QStyleOptionViewItem(), index)
try:
comboBox = getattr(delegate, cbRow)
except Exception as e:
continue
if self.datas[i][5] in [0, 1]:
comboBox.setCurrentIndex(self.datas[i][5])
elif self.datas[i][5] in [3, 4]:
comboBox.setCurrentIndex(self.datas[i][5] - 1)
else:
comboBox.setCurrentIndex(-1)
class ModBusTCPSlaveModel(VarTableModel): class ModBusTCPSlaveModel(VarTableModel):
def __init__(self, header, data: list, table = None): def __init__(self, header, data: list, table = None):
''' '''
@ -253,6 +272,7 @@ class VarButtonDelegate(QItemDelegate):
comboBox.addItem('BADC', 3) comboBox.addItem('BADC', 3)
comboBox.addItem('DCBA', 4) comboBox.addItem('DCBA', 4)
comboBox.setCurrentText(self.parent().model.datas[index.row()][index.column()]) comboBox.setCurrentText(self.parent().model.datas[index.row()][index.column()])
comboBox.setMinimumWidth(30)
comboBox.currentIndexChanged.connect(self.indexChange) comboBox.currentIndexChanged.connect(self.indexChange)
@ -376,23 +396,26 @@ class VarButtonDelegate(QItemDelegate):
else: else:
varMes = model.datas[sender.index[0]] varMes = model.datas[sender.index[0]]
name, des, varType, slaveID, address, min, max, order = str(varMes[3]), str(varMes[4]), str(varMes[5]), str(varMes[6]), str(varMes[7]), str(varMes[8]), str(varMes[9]), str(varMes[-1]) name, des, varType, slaveID, address, min, max, order = str(varMes[3]), str(varMes[4]), str(varMes[5]), str(varMes[6]), str(varMes[7]), str(varMes[8]), str(varMes[9]), str(varMes[-1])
print(name, des, varType, slaveID, address, min, max, order) # print(name, des, varType, slaveID, address, min, max, order)
if not name or not varType: if not name or not varType:
reply = QMessageBox.question(self.parent(), reply = QMessageBox.question(self.parent(),
'警告', '警告',
"有字段为空", "有字段为空",
QMessageBox.Yes) QMessageBox.Yes)
return return
sender.isEdit = True
checkbox.setEnabled(False)
model.editableList.remove(sender.index[0]) if sender.oldName and ModBusVar.getByName(sender.oldName):
if sender.oldName: if sender.oldName == name or [varMes[3] for varMes in model.datas].count(name) < 2:
ModbusVarManage.editVar(name = sender.oldName, Nname = name, des = des, varType = varType, slaveID = slaveID, address = address, min = min, max = max, order = order) ModbusVarManage.editVar(name = sender.oldName, Nname = name, des = des, varType = varType, slaveID = slaveID, address = address, min = min, max = max, order = order)
else:
QMessageBox.information(self.parent(), '提示', '已有同名变量')
return
else: else:
ModbusVarManage.createVar(varName = name, varType = varType, des = des, address = address, slaveID = slaveID, min = min, max = max, order = order) res = ModbusVarManage.createVar(varName = name, varType = varType, des = des, address = address, slaveID = slaveID, min = min, max = max, order = order)
if res:
QMessageBox.information(self.parent(), '提示', '已有同名变量')
return
sender.setIcon(qtawesome.icon('fa.pencil', color='#4c8cf2')) sender.setIcon(qtawesome.icon('fa.pencil', color='#4c8cf2'))
rowIndex = sender.index[0] rowIndex = sender.index[0]
varMes = ModbusVarManage.getByName(name) varMes = ModbusVarManage.getByName(name)
@ -401,6 +424,10 @@ class VarButtonDelegate(QItemDelegate):
varMes.insert(2, '') varMes.insert(2, '')
model.insert_data(varMes, rowIndex) model.insert_data(varMes, rowIndex)
model.remove_row(rowIndex + 1) model.remove_row(rowIndex + 1)
sender.isEdit = True
checkbox.setEnabled(False)
model.editableList.remove(sender.index[0])
def delete_action(self): def delete_action(self):
@ -418,18 +445,15 @@ class VarButtonDelegate(QItemDelegate):
trend = ActualTrend(varName = name) trend = ActualTrend(varName = name)
trend.show() trend.show()
class ModbusTypeBox(VarButtonDelegate): class ModbusTypeBox(QItemDelegate):
def __init__(self, parent=None): def __init__(self, parent=None):
super(ModbusTypeBox, self).__init__(parent) super(ModbusTypeBox, self).__init__(parent)
def paint(self, painter, option, index): def paint(self, painter, option, index):
if not self.parent().indexWidget(index): if index.column() == 5:
data = self.parent().model.datas[index.row()] data = self.parent().model.datas[index.row()]
comBox = str('cb' + str(index.row()) + str(index.column())) comBox = str('cb' + str(index.row()) + str(index.column()))
setattr(self, comBox, QComboBox(self.parent())) setattr(self, comBox, QComboBox())
comboBox = getattr(self, comBox) comboBox = getattr(self, comBox)
item = ['Coil Status', 'Input Status', 'Input Register', 'Holding Register'] item = ['Coil Status', 'Input Status', 'Input Register', 'Holding Register']
@ -451,6 +475,7 @@ class ModbusTypeBox(VarButtonDelegate):
comboBox.setObjectName('ModbusTypeBox') comboBox.setObjectName('ModbusTypeBox')
comboBox.setEditable(True) comboBox.setEditable(True)
comboBox.lineEdit().setAlignment(Qt.AlignCenter) comboBox.lineEdit().setAlignment(Qt.AlignCenter)
comboBox.setMinimumWidth(200)
# comboBox.setEnabled(False) # comboBox.setEnabled(False)
h_box_layout = QHBoxLayout() h_box_layout = QHBoxLayout()
h_box_layout.addWidget(comboBox) h_box_layout.addWidget(comboBox)
@ -474,6 +499,7 @@ class ModbusTypeBox(VarButtonDelegate):
index, index,
widget widget
) )
self.parent().openPersistentEditor(index)
def indexChange(self): def indexChange(self):
sender = self.sender() sender = self.sender()

@ -190,9 +190,13 @@ class TcRtdButtonDelegate(VarButtonDelegate):
QMessageBox.Yes) QMessageBox.Yes)
return return
mv = temToMv(varType, float(value)) mv = temToMv(varType, float(value))
mv += float(compensation)
if not mv and mv != 0: if not mv and mv != 0:
reply = QMessageBox.question(self.parent(),
'警告',
"输入值有误",
QMessageBox.Yes)
return return
mv += float(compensation)
model.table.mvList[sender.index[0]] = mv model.table.mvList[sender.index[0]] = mv
model.table.valueList[sender.index[0]] = float(value) model.table.valueList[sender.index[0]] = float(value)
forceVars = Globals.getValue('forceVars') forceVars = Globals.getValue('forceVars')

@ -1,6 +1,7 @@
import time import time
from PyQt5.QtCore import QThread, pyqtSignal from PyQt5.QtCore import QThread, pyqtSignal
from UI.TrendManage.ActualTrendWidget import ActualTrend
from protocol.TCP.RTDTC import RTDTCClient from protocol.TCP.RTDTC import RTDTCClient
from protocol.TCP.Analog import AnalogClient from protocol.TCP.Analog import AnalogClient
from protocol.FF.FFSimulate import FFSimulate from protocol.FF.FFSimulate import FFSimulate
@ -111,3 +112,6 @@ class HartSimulateThread(FFThread):
self.window.valueList = self.HartSimulate.readValue() self.window.valueList = self.HartSimulate.readValue()
except Exception as e: except Exception as e:
print(e) print(e)

@ -100,6 +100,7 @@ class VarTableView(QTableView):
self.header.setSectionResizeMode(0, QHeaderView.Fixed) self.header.setSectionResizeMode(0, QHeaderView.Fixed)
self.header.resizeSection(0, 70) self.header.resizeSection(0, 70)
class HartTableView(VarTableView): class HartTableView(VarTableView):

@ -20,7 +20,6 @@ from protocol.TCP.TemToMv import temToMv
from protocol.TCP.Analog import getRealAO from protocol.TCP.Analog import getRealAO
import re import re
from Static import static from Static import static
class VarWidgets(QtWidgets.QWidget): class VarWidgets(QtWidgets.QWidget):
_isPopenOpen = False _isPopenOpen = False
def __init__(self, parent=None): def __init__(self, parent=None):

@ -8,6 +8,7 @@ import time
import sys import sys
if __name__ == '__main__': if __name__ == '__main__':
app = QApplication(sys.argv) app = QApplication(sys.argv)
app.setStyle(QStyleFactory.create('Fusion')) app.setStyle(QStyleFactory.create('Fusion'))

@ -107,7 +107,7 @@ class register:
# str = str # str = str
k = des(self.Des_Key, CBC, self.Des_IV, pad=None, padmode=PAD_PKCS5) k = des(self.Des_Key, CBC, self.Des_IV, pad=None, padmode=PAD_PKCS5)
EncryptStr = k.encrypt(str) EncryptStr = k.encrypt(str)
print(type(EncryptStr)) # print(type(EncryptStr))
return base64.b64encode(EncryptStr) # 转base64编码返回 return base64.b64encode(EncryptStr) # 转base64编码返回
# 获取注册码,验证 # 获取注册码,验证
@ -123,7 +123,7 @@ class register:
key_decrypted = str(self.DesDecrypt()) key_decrypted = str(self.DesDecrypt())
if content != 0 and key_decrypted != 0: if content != 0 and key_decrypted != 0:
if content != key_decrypted: if content != key_decrypted:
print("wrong register code, please check and input your register code again:") # print("wrong register code, please check and input your register code again:")
self.regist() self.regist()
elif content == key_decrypted: elif content == key_decrypted:
return True return True

@ -20,7 +20,7 @@ def parseDate(date_string: str):
class HistoryDBManage(): class HistoryDBManage():
org = "DCS" org = "DCS"
# bucket = "history" # bucket = "history"
url = "http://127.0.0.1:8086" url = "http://localhost:8086"
def __init__(self, bucket, mem = None, isCelery = True): def __init__(self, bucket, mem = None, isCelery = True):
self.getToken(isCelery) self.getToken(isCelery)
@ -95,7 +95,11 @@ class HistoryDBManage():
|> range(start: {})\ |> range(start: {})\
|> filter(fn:(r) => r._measurement == "{}")\ |> filter(fn:(r) => r._measurement == "{}")\
|> filter(fn:(r) => r._field == "value")'.format(self.bucket, self.startTime, self.mem) |> filter(fn:(r) => r._field == "value")'.format(self.bucket, self.startTime, self.mem)
results = self.queryApi.query(query, org = self.org) try:
results = self.queryApi.query(query, org = self.org)
except Exception as e:
BucketsApi(self.client).create_bucket(bucket_name = self.bucket, org = self.org)
return tagSet
for result in results: for result in results:
for record in result.records: for record in result.records:
tagSet.add(record['varName']) tagSet.add(record['varName'])

@ -109,7 +109,7 @@ class ProjectManage(object):
# 删除工程 # 删除工程
name = str(name) name = str(name)
# print(name) # print(name)
print(Globals.getValue('currentPro')) # print(Globals.getValue('currentPro'))
Client.initDB() Client.initDB()
if name == Globals.getValue('currentPro'): if name == Globals.getValue('currentPro'):
Globals.getValue('currentProDB').close() Globals.getValue('currentProDB').close()
@ -144,11 +144,11 @@ class ProjectManage(object):
Globals.setValue('currentProDB', projectDB) Globals.setValue('currentProDB', projectDB)
Globals.setValue('currentProType', proType) Globals.setValue('currentProType', proType)
# if Globals.getValue('FFThread').isRunning(): if Globals.getValue('FFThread').isRunning():
# Globals.getValue('FFThread').reStart() Globals.getValue('FFThread').reStart()
# return return
# if proType == '7': if proType == '7':
# Globals.getValue('FFThread').start() Globals.getValue('FFThread').start()
# initDB # initDB
@classmethod @classmethod

@ -44,7 +44,7 @@ class ModbusVarManage(object):
maxIndex = index maxIndex = index
# print(IDIndex, slaveIndex, nameIndex, desIndex, typeIndex, addrIndex, minIndex, maxIndex) # print(IDIndex, slaveIndex, nameIndex, desIndex, typeIndex, addrIndex, minIndex, maxIndex)
if IDIndex == None or slaveIndex == None or nameIndex == None or desIndex == None or typeIndex == None or addrIndex == None or minIndex == None or maxIndex == None: if IDIndex == None or slaveIndex == None or nameIndex == None or desIndex == None or typeIndex == None or addrIndex == None or minIndex == None or maxIndex == None:
print('表头错误') # print('表头错误')
return '表头错误' return '表头错误'
for index, row in enumerate(list(ws.iter_rows())[1:]): for index, row in enumerate(list(ws.iter_rows())[1:]):
@ -96,7 +96,7 @@ class ModbusVarManage(object):
max = str(max) max = str(max)
order = order order = order
if ModBusVar.getByName(name): if ModBusVar.getByName(name):
print('已有同名变量') return 1
else: else:
varModel = ModBusVar() varModel = ModBusVar()
varModel.createVar(varName = varName, varType = varType, des = des, address = address, slaveID = slaveID, min = min, max = max, order = order) varModel.createVar(varName = varName, varType = varType, des = des, address = address, slaveID = slaveID, min = min, max = max, order = order)

@ -94,7 +94,7 @@ def setValue(self, name, varType, slaveID, address, value, order): # 写入变
slaveID = int(slaveID) slaveID = int(slaveID)
address = int(address) - self.offset address = int(address) - self.offset
varType = str(varType) varType = str(varType)
print(address, 555555555555555555) # print(address, 555555555555555555)
if varType == '4': if varType == '4':
self.TcpModbus.writeSingleRegister(slaveId = slaveID, address = address, outputValue = value, order = order) self.TcpModbus.writeSingleRegister(slaveId = slaveID, address = address, outputValue = value, order = order)
elif varType == '0': elif varType == '0':

@ -1,5 +1,5 @@
from pythonnet import load from pythonnet import load
load('coreclr') # load('coreclr')
import clr # 与其他模块不同此处不直接导入pythonnet 而是导入clrpython与c#交互核心) import clr # 与其他模块不同此处不直接导入pythonnet 而是导入clrpython与c#交互核心)
dll_path = 'protocol\\FF\\NationalInstruments.Fieldbus' # 为了方便理解这里给到dll所在的绝对路径且包含dll文件本身 dll_path = 'protocol\\FF\\NationalInstruments.Fieldbus' # 为了方便理解这里给到dll所在的绝对路径且包含dll文件本身
clr.AddReference(dll_path) #加载c#库 clr.AddReference(dll_path) #加载c#库

@ -15,12 +15,12 @@ class HartProtocol(object):
for index, address in enumerate(self.addressList): for index, address in enumerate(self.addressList):
value = self.rtuMaster.readHoldingRegisters(slaveId = 1, startAddress = address, varNums = 2, order = 'ABCD') value = self.rtuMaster.readHoldingRegisters(slaveId = 1, startAddress = address, varNums = 2, order = 'ABCD')
valueList.append(value) valueList.append(value)
print(self.addressList, valueList) # print(self.addressList, valueList)
return valueList return valueList
def writeValue(self, devIndex, elemIndex, value): def writeValue(self, devIndex, elemIndex, value):
address = self.addressList[devIndex * 5 + elemIndex] address = self.addressList[devIndex * 5 + elemIndex]
print(address) # print(address)
self.rtuMaster.writeSingleRegister(slaveId = 1, address = address, outputValue = value, order = 'DCBA') self.rtuMaster.writeSingleRegister(slaveId = 1, address = address, outputValue = value, order = 'DCBA')
if __name__ == '__main__': if __name__ == '__main__':

Loading…
Cancel
Save