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.

541 lines
18 KiB
Python

import os
import openpyxl
from utils.DBModels.ProtocolModel import ModBusVar, HartVar, TcRtdVar, AnalogVar, FFSimulateVar, HartSimulateVar
from utils import Globals
# ID 从站地址 变量名 变量描述 功能码 寄存器地址 工程量下限 工程量上限
class ModbusVarManage(object):
def __init__(self):
super(ModbusManage, self).__init__()
@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)
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('表头错误')
return '表头错误'
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 = l[desIndex]
address = l[addrIndex]
slaveID = l[slaveIndex]
min = l[minIndex]
max = l[maxIndex]
ModBusVarModel = ModBusVar()
if ModBusVarModel.getByName(varName):
ModBusVarModel.update(varType = varType, description = des, address = address, slaveID = slaveID, min = min, max = max, order = 'int').where(ModBusVarModel.varName == varName)
else:
ModBusVarModel.createVar(varName = varName, varType = varType, des = des, address = address, slaveID = slaveID, min = min, max = max, order = 'int')
except Exception as e:
print(e)
return '{}行导入出错'.format(index + 1)
@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
def createVar(self, varName, varType, des, address, slaveID, min, max, order):
# 创建变量
name = str(varName)
des = str(des)
varType = str(varType)
address = str(address)
slaveID = str(slaveID)
min = str(min)
max = str(max)
order = order
if ModBusVar.getByName(name):
return 1
else:
varModel = ModBusVar()
varModel.createVar(varName = varName, varType = varType, des = des, address = address, slaveID = slaveID, min = min, max = max, order = order)
@classmethod
def deleteVar(self, name):
# 删除变量
name = str(name)
# print(name)
ModBusVar.deleteVar(name = name)
@classmethod
def editVar(self, name, Nname, des, varType, slaveID, address, min, max, order):
# 修改变量信息
name = str(name)
Nname = str(Nname)
des = str(des)
varType = str(varType)
slaveID = str(slaveID)
address = str(address)
min = str(min)
max = str(max)
if Nname == name:
ModBusVar.update(varName = Nname, description = des, varType = varType, address = address, slaveID = slaveID, min = min, max = max, order = order).where(ModBusVar.varName == name).execute()
elif ModBusVar.getByName(Nname):
print('已有同名变量')
return
elif not ModBusVar.getByName(name):
print('不存在的变量')
return
else:
ModBusVar.update(varName = Nname, description = des, varType = varType, address = address, slaveID = slaveID, min = min, max = max, order = order).where(ModBusVar.varName == name).execute()
@classmethod
def editOrder(self, name, order):
name = str(name)
order = str(order)
ModBusVar.update(order = order).where(ModBusVar.varName == name).execute()
@classmethod
def getAllVar(self):
# 查询所有变量
vars = ModBusVar.get_all()
if vars is 'error':
return
l = []
for var in vars:
l.append([var.id, var.varName, var.description, var.varType, var.slaveID, var.address, var.min, var.max, var.order])
return l
@classmethod
def getByName(self, name):
# 查询指定变量信息
var = ModBusVar.getByName(name)
if var:
return [var.id, var.varName, var.description, var.varType, var.slaveID, var.address, var.min, var.max]
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')