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.

572 lines
19 KiB
Python

7 months ago
import openpyxl
7 months ago
from utils.DBModels.ProtocolModel import ModbusTcpMasterVar, ModbusRtuMasterVar, ModbusRtuSlaveVar,\
ModbusTcpSlaveVar, HartVar, TcRtdVar, AnalogVar, FFSimulateVar, HartSimulateVar
7 months ago
# ID 从站地址 变量名 变量描述 功能码 寄存器地址 工程量下限 工程量上限
class ModbusVarManage(object):
7 months ago
ModBusVarClass = {
'ModbusTcpMaster': ModbusTcpMasterVar,
'ModbusTcpSlave': ModbusRtuMasterVar,
'ModbusRtuMaster': ModbusRtuSlaveVar,
'ModbusRtuSlave': ModbusTcpSlaveVar,
}
7 months ago
def __init__(self):
super().__init__()
7 months ago
@classmethod
def getVarClass(self, modbusType):
"""根据类型获取对应的变量类"""
return self.ModBusVarClass.get(modbusType)
7 months ago
@classmethod
def importModbusVar(self, path):
# 导入modbus变量表
wb = openpyxl.load_workbook(path)
ws = wb.active
IDIndex = None
slaveIndex = None
nameIndex = None
desIndex = None
typeIndex = None
addrIndex = None
minIndex = None
maxIndex = None
for index, cell in enumerate(list(ws.iter_rows())[0]):
if cell.value in ['id', 'ID']:
IDIndex = index
if cell.value == '从站地址':
slaveIndex = index
if cell.value == '变量名':
nameIndex = index
if cell.value == '变量描述':
desIndex = index
if cell.value == '变量类型':
typeIndex = index
if cell.value == '寄存器地址':
addrIndex = index
if cell.value == '工程量下限':
minIndex = index
if cell.value == '工程量上限':
maxIndex = index
# print(IDIndex, slaveIndex, nameIndex, desIndex, typeIndex, addrIndex, minIndex, maxIndex)
7 months ago
if IDIndex == None or slaveIndex == None or nameIndex == None or desIndex == None or typeIndex == None or addrIndex == None or minIndex == None or maxIndex == None:
7 months ago
# print('表头错误')
return '表头错误'
errorConList = []
for index, row in enumerate(list(ws.iter_rows())[1:]):
try:
l = [str(x.value) for x in row]
varName = l[nameIndex]
varType = l[typeIndex]
des = '' if l[desIndex] == 'None' else l[desIndex]
address = l[addrIndex]
slaveID = l[slaveIndex]
min = '' if l[minIndex] == 'None' else l[minIndex]
max = '' if l[maxIndex] == 'None' else l[maxIndex]
if {varName, varType, address, slaveID} & {'None'}:
errorConList.append('{}行导入失败,有关键字段为空'.format(str(index + 1)))
continue
if varType not in ['0', '1', '3', '4']:
errorConList.append('{}行导入失败,变量类型有误'.format(str(index + 1)))
continue
if ModBusVar.getByName(varName):
ModBusVar.update(varType = varType, description = des, address = address, slaveID = slaveID, min = min, max = max, order = 'int').where(ModBusVar.varName == varName).execute()
else:
ModBusVarModel = ModBusVar()
ModBusVarModel.createVar(varName = varName, varType = varType, des = des, address = address, slaveID = slaveID, min = min, max = max, order = 'int')
except Exception as e:
errorConList.append('{}行导入失败,{}'.format(str(index + 1), str(e)))
continue
else:
if errorConList:
return '\r\n'.join(errorConList)
else:
return '导入成功'
@classmethod
def exportModbusVar(self, excelPath):
vars = ModBusVar.get_all()
if vars is 'error':
return
wb = openpyxl.Workbook()
# Create a new worksheet
ws = wb.active
ws.title = "Modbus Variables"
ws.append(['ID', '从站地址', '变量名', '变量描述', '变量类型', '寄存器地址', '工程量下限', '工程量上限'])
for var in vars:
ws.append([var.id, var.slaveID, var.varName, var.description, var.varType, var.address, var.min, var.max])
# Save the workbook
wb.save(excelPath)
@classmethod
4 months ago
def createVar(self, varName, varType, des, address, slaveID, min, max, order, modbusType, varModel):
7 months ago
# 创建变量
name = str(varName)
des = str(des)
varType = str(varType)
address = str(address)
slaveID = str(slaveID)
min = str(min)
max = str(max)
order = order
4 months ago
varModel = str(varModel)
7 months ago
if self.getVarClass(modbusType).getByName(name):
7 months ago
return 1
else:
7 months ago
4 months ago
modbusVarType =self.getVarClass(modbusType)()
modbusVarType.createVar(varName = varName, varType = varType, des = des, address = address,
slaveID = slaveID, min = min, max = max, order = order, varModel = varModel)
7 months ago
@classmethod
7 months ago
def deleteVar(self, name, modbusType):
7 months ago
# 删除变量
name = str(name)
# print(name)
7 months ago
self.getVarClass(modbusType).deleteVar(name = name)
7 months ago
@classmethod
4 months ago
def editVar(self, name, Nname, des, varType, slaveID, address, min, max, order, modbusType, varModel):
7 months ago
7 months ago
# 修改变量信息
name = str(name)
Nname = str(Nname)
des = str(des)
varType = str(varType)
slaveID = str(slaveID)
address = str(address)
min = str(min)
max = str(max)
4 months ago
varModel = str(varModel)
7 months ago
if Nname == name:
4 months ago
self.getVarClass(modbusType).update(varName = Nname, description = des, varType = varType, address = address, slaveID = slaveID,
min = min, max = max, order = order, varModel = varModel).where(self.getVarClass(modbusType).varName == name).execute()
7 months ago
elif self.getVarClass(modbusType).getByName(Nname):
7 months ago
print('已有同名变量')
return
7 months ago
elif not self.getVarClass(modbusType).getByName(name):
7 months ago
print('不存在的变量')
return
else:
4 months ago
self.getVarClass(modbusType).update(varName = Nname, description = des, varType = varType, address = address, slaveID = slaveID,
min = min, max = max, order = order, varModel = varModel).where(self.getVarClass(modbusType).varName == name).execute()
7 months ago
@classmethod
7 months ago
def editOrder(self, name, order, modbusType):
7 months ago
name = str(name)
order = str(order)
7 months ago
self.getVarClass(modbusType).update(order = order).where(self.getVarClass(modbusType).varName == name).execute()
7 months ago
@classmethod
7 months ago
def getAllVar(self, modbusType):
7 months ago
# 查询所有变量
7 months ago
vars = self.getVarClass(modbusType).get_all()
7 months ago
if vars is 'error':
return
l = []
for var in vars:
4 months ago
l.append([var.id, var.varName, var.description, var.varType, var.slaveID, var.address, var.min, var.max, var.varModel, var.order])
7 months ago
return l
@classmethod
7 months ago
def getByName(self, name, modbusType):
7 months ago
# 查询指定变量信息
7 months ago
var = self.getVarClass(modbusType).getByName(name)
7 months ago
if var:
4 months ago
return [var.id, var.varName, var.description, var.varType, var.slaveID, var.address, var.min, var.max, var.varModel]
7 months ago
else:
return False
class HartVarManage(object):
def __init__(self):
super(HartVarManage, self).__init__()
@classmethod
def createVar(self, varName, des):
# 创建变量
name = str(varName)
des = str(des)
if HartVar.getByName(name):
print('已有同名变量')
else:
varModel = HartVar()
varModel.createVar(varName = varName, des = des)
@classmethod
def getAllVar(self):
# 查询所有变量
vars = HartVar.get_all()
if vars is 'error':
return
l = []
for var in vars:
l.append([var.id, var.varName, var.description])
return l
@classmethod
def deleteVar(self, name):
# 删除变量
name = str(name)
# print(name)
HartVar.deleteVar(name = name)
@classmethod
def editVar(self, name, Nname, des):
# 修改变量信息
name = str(name)
Nname = str(Nname)
des = str(des)
if Nname == name:
HartVar.update(varName = Nname, description = des).where(HartVar.varName == name).execute()
elif HartVar.getByName(Nname):
print('已有同名变量')
return
elif not HartVar.getByName(name):
print('不存在的变量')
return
else:
HartVar.update(varName = Nname, description = des).where(HartVar.varName == name).execute()
@classmethod
def getByName(self, name):
# 查询指定变量信息
var = HartVar.getByName(name)
if var:
varMes = [var.id, var.varName, var.description]
[varMes.append('') for x in range(10)]
return varMes
else:
return False
def initVar(self):
self.createVar(varName='name', des='TC')
class TcRtdManage(object):
def __init__(self):
super(TcRtdManage, self).__init__()
@classmethod
def createVar(self, varName, varType, des, min, max, compensationVar):
# 创建变量
name = str(varName)
des = str(des)
if TcRtdVar.getByName(name):
print('已有同名变量')
else:
varModel = TcRtdVar()
varModel.createVar(varName = varName, des = des, varType = varType, min = min, max = max, compensationVar = compensationVar)
@classmethod
def getAllVar(self):
# 查询所有变量
vars = TcRtdVar.get_all()
if vars is 'error':
return
l = []
for var in vars:
l.append([var.id, var.varName, var.description, var.varType, var.min, var.max, var.compensationVar])
return l
@classmethod
def deleteVar(self, name):
# 删除变量
name = str(name)
# print(name)
TcRtdVar.deleteVar(name = name)
@classmethod
def editVar(self, name, Nname, des, varType, min, max, compensationVar):
# 修改变量信息
name = str(name)
Nname = str(Nname)
des = str(des)
varType = str(varType)
min = str(min)
max = str(max)
compensationVar = str(compensationVar)
if Nname == name:
TcRtdVar.update(varName=Nname, description=des, varType=varType, min=min, max=max, compensationVar = compensationVar).where(TcRtdVar.varName == name).execute()
elif TcRtdVar.getByName(Nname):
print('已有同名变量')
return
elif not TcRtdVar.getByName(name):
print('不存在的变量')
return
else:
TcRtdVar.update(varName=Nname, description=des, varType=varType, min=min, max=max, compensationVar = compensationVar).where(TcRtdVar.varName == name).execute()
@classmethod
def getByName(self, name):
# 查询指定变量信息
var = TcRtdVar.getByName(name)
if var:
return [var.id, var.varName, var.description, var.varType, var.min, var.max, var.compensationVar]
else:
return False
def initVar(self):
# 创建变量
for i in range(1, 9):
name = 'Value' + str(i)
self.createVar(varName=name, varType='R', des='TC', min='100', max='200', compensationVar = '0')
for i in range(9, 17):
name = 'Value' + str(i)
self.createVar(varName=name, varType='PT100', des='RTD', min='100', max='200', compensationVar = '0')
@classmethod
def editvarType(self, name, varType):
name = str(name)
TcRtdVar.update(varType = str(varType)).where(TcRtdVar.varName == name).execute()
class AnalogManage(object):
def __init__(self):
super(AnalogManage, self).__init__()
@classmethod
def createVar(self, varName, varType, des, min, max):
# 创建变量
name = str(varName)
des = str(des)
if AnalogVar.getByName(name):
print('已有同名变量')
else:
varModel = AnalogVar()
varModel.createVar(varName = varName, des = des, varType = varType, min = min, max = max)
@classmethod
def getAllVar(self):
# 查询所有变量
vars = AnalogVar.get_all()
if vars is 'error':
return
l = []
for var in vars:
l.append([var.id, var.varName, var.description, var.varType, var.min, var.max])
return l
@classmethod
def deleteVar(self, name):
# 删除变量
name = str(name)
# print(name)
AnalogVar.deleteVar(name = name)
@classmethod
def editVar(self, name, Nname, des, varType, min, max):
# 修改变量信息
name = str(name)
Nname = str(Nname)
des = str(des)
varType = str(varType)
min = str(min)
max = str(max)
if Nname == name:
AnalogVar.update(varName=Nname, description=des, varType=varType, min=min, max=max).where(AnalogVar.varName == name).execute()
elif AnalogVar.getByName(Nname):
print('已有同名变量')
return
elif not AnalogVar.getByName(name):
print('不存在的变量')
return
else:
AnalogVar.update(varName=Nname, description=des, varType=varType, min=min, max=max).where(AnalogVar.varName == name).execute()
@classmethod
def getByName(self, name):
# 查询指定变量信息
var = AnalogVar.getByName(name)
if var:
return [var.id, var.varName, var.description, var.varType, var.min, var.max]
else:
return False
def initVar(self):
for i in range(1, 9):
name = 'Value' + str(i)
if i < 5:
des = '有源4-20mA输出' + str(i)
self.createVar(varName=name, varType='AO', des=des, min='100', max='200')
else:
des = '无源4-20mA输出' + str(i)
self.createVar(varName=name, varType='AO', des=des, min='100', max='200')
for i in range(1, 9):
name = 'Value' + str(i + 8)
if i < 5:
des = '有源频率输出' + str(i)
self.createVar(varName=name, varType='Hz', des=des, min='100', max='200')
elif i < 7:
des = '无源NPN频率输出' + str(i)
self.createVar(varName=name, varType='Hz', des=des, min='100', max='200')
else:
des = '无源PNP频率输出' + str(i)
self.createVar(varName=name, varType='Hz', des=des, min='100', max='200')
for i in range(1, 9):
name = 'Value' + str(i + 16)
self.createVar(varName=name, varType='DO', des='DO', min='0', max='1')
class FFSimulateManage(object):
def __init__(self):
super(FFSimulateManage, self).__init__()
@classmethod
def createVar(self, varName, varType, des):
# 创建变量
name = str(varName)
des = str(des)
if FFSimulateVar.getByName(name):
print('已有同名变量')
else:
varModel = FFSimulateVar()
varModel.createVar(varName = varName, des = des, varType = varType)
@classmethod
def getAllVar(self):
# 查询所有变量
vars = FFSimulateVar.get_all()
if vars is 'error':
return
l = []
for var in vars:
l.append([var.id, var.varName, var.description, var.varType])
return l
@classmethod
def deleteVar(self, name):
# 删除变量
name = str(name)
# print(name)
FFSimulateVar.deleteVar(name = name)
@classmethod
def editVar(self, name, Nname, des, varType):
# 修改变量信息
name = str(name)
Nname = str(Nname)
des = str(des)
varType = str(varType)
if Nname == name:
FFSimulateVar.update(varName=Nname, description=des, varType=varType).where(FFSimulateVar.varName == name).execute()
elif FFSimulateVar.getByName(Nname):
print('已有同名变量')
return
elif not FFSimulateVar.getByName(name):
print('不存在的变量')
return
else:
FFSimulateVar.update(varName=Nname, description=des, varType=varType).where(FFSimulateVar.varName == name).execute()
@classmethod
def getByName(self, name):
# 查询指定变量信息
var = FFSimulateVar.getByName(name)
if var:
return [var.id, var.varName, var.description, var.varType]
else:
return False
def initVar(self):
for i in range(1, 9):
name = 'Value' + str(i)
if i < 5:
self.createVar(varName=name, varType='AI', des='AI')
else:
self.createVar(varName=name, varType='DI', des='DI')
for i in range(9, 17):
name = 'Value' + str(i)
if i < 13:
self.createVar(varName=name, varType='AO', des='AO')
else:
self.createVar(varName=name, varType='DO', des='DO')
class HartSimulateVarManage(object):
def __init__(self):
super(HartSimulateVarManage, self).__init__()
@classmethod
def createVar(self, varName, des):
# 创建变量
name = str(varName)
des = str(des)
if HartSimulateVar.getByName(name):
print('已有同名变量')
else:
varModel = HartSimulateVar()
varModel.createVar(varName = varName, des = des)
@classmethod
def getAllVar(self):
# 查询所有变量
vars = HartSimulateVar.get_all()
if vars is 'error':
return
l = []
for var in vars:
l.append([var.id, var.varName, var.description])
return l
@classmethod
def deleteVar(self, name):
# 删除变量
name = str(name)
# print(name)
HartSimulateVar.deleteVar(name = name)
@classmethod
def editVar(self, name, Nname, des):
# 修改变量信息
name = str(name)
Nname = str(Nname)
des = str(des)
if Nname == name:
HartSimulateVar.update(varName = Nname, description = des).where(HartSimulateVar.varName == name).execute()
elif HartSimulateVar.getByName(Nname):
print('已有同名变量')
return
elif not HartSimulateVar.getByName(name):
print('不存在的变量')
return
else:
HartSimulateVar.update(varName = Nname, description = des).where(HartSimulateVar.varName == name).execute()
@classmethod
def getByName(self, name):
# 查询指定变量信息
var = HartSimulateVar.getByName(name)
if var:
varMes = [var.id, var.varName, var.description]
[varMes.append('') for x in range(10)]
return varMes
else:
return False
def initVar(self):
self.createVar(varName='name', des='TC')