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')