|
|
@ -1,6 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from ast import mod
|
|
|
|
|
|
|
|
import re
|
|
|
|
import re
|
|
|
|
from numpy import var
|
|
|
|
from numpy import var
|
|
|
|
import pandas as pd
|
|
|
|
import pandas as pd
|
|
|
@ -41,10 +38,26 @@ class ModbusVarManage(object):
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
@classmethod
|
|
|
|
def importVarForm(self, varName, varType, des, address, slaveID, min, max, order, modbusType, varModel, index):
|
|
|
|
def importVarForm(self, varName, varType, des, address, slaveID, min, max, order, modbusType, varModel, index):
|
|
|
|
|
|
|
|
pattern = re.compile(r'[^0-9\.-]+')
|
|
|
|
varClass = self.getVarClass(modbusType)
|
|
|
|
varClass = self.getVarClass(modbusType)
|
|
|
|
if varType not in [0, 1, 3, 4]:
|
|
|
|
if varType not in [0, 1, 3, 4]:
|
|
|
|
errorInfo = '表{}第{}行导入失败,{}'.format(str(modbusType), str(index + 1), '变量类型有误')
|
|
|
|
errorInfo = '表{}第{}行导入失败,{}'.format(str(modbusType), str(index + 1), '变量类型有误')
|
|
|
|
return errorInfo
|
|
|
|
return errorInfo
|
|
|
|
|
|
|
|
if not varName or not address or not slaveID:
|
|
|
|
|
|
|
|
errorInfo = '表{}第{}行导入失败,有关键字段为空'.format(str(modbusType), str(index + 1))
|
|
|
|
|
|
|
|
return errorInfo
|
|
|
|
|
|
|
|
elif re.findall(pattern, str(address)) or re.findall(pattern, str(slaveID)) or \
|
|
|
|
|
|
|
|
re.findall(pattern, str(min)) or re.findall(pattern, str(max)):
|
|
|
|
|
|
|
|
errorInfo = '表{}第{}行导入失败,{}'.format(str(modbusType), str(index + 1), '寄存器地址、从站地址、工程量下限、工程量上限只能为数字')
|
|
|
|
|
|
|
|
return errorInfo
|
|
|
|
|
|
|
|
if varModel not in ['本地值', '远程值', '模拟值']:
|
|
|
|
|
|
|
|
errorInfo = '表{}第{}行导入失败,{}'.format(str(modbusType), str(index + 1), '变量模型有误')
|
|
|
|
|
|
|
|
return errorInfo
|
|
|
|
|
|
|
|
if order not in ['int', 'ABCD', 'BADC', 'CDAB', 'DCBA']:
|
|
|
|
|
|
|
|
errorInfo = '表{}第{}行导入失败,{}'.format(str(modbusType), str(index + 1), '字节顺序有误')
|
|
|
|
|
|
|
|
return errorInfo
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if varClass.getByName(varName):
|
|
|
|
if varClass.getByName(varName):
|
|
|
|
# 如果变量已存在,更新其信息
|
|
|
|
# 如果变量已存在,更新其信息
|
|
|
@ -361,7 +374,7 @@ class TcRtdManage(object):
|
|
|
|
return
|
|
|
|
return
|
|
|
|
l = []
|
|
|
|
l = []
|
|
|
|
for var in vars:
|
|
|
|
for var in vars:
|
|
|
|
l.append([var.id, var.varName, var.channelNumber,var.description, var.varType, var.min, var.max, var.unit, var.compensationVar, var.varModel])
|
|
|
|
l.append([var.id, var.initialValue, var.varName, var.channelNumber,var.description, var.varType, var.min, var.max, var.unit, var.compensationVar, var.varModel])
|
|
|
|
return l
|
|
|
|
return l
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -435,13 +448,37 @@ class TcRtdManage(object):
|
|
|
|
refreshCache()
|
|
|
|
refreshCache()
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
@classmethod
|
|
|
|
def importVarForm(self, varName, channelNumber, varType, des, min, max, compensationVar, varModel, unit):
|
|
|
|
def importVarForm(self, varName, channelNumber, varType, des, min, max, compensationVar, varModel, unit, initialValue='', index = None):
|
|
|
|
if TcRtdVar.getByName(varName):
|
|
|
|
varTypeList = ['R', 'S', 'B', 'J', 'T', 'E', 'K', 'N', 'C', 'A']
|
|
|
|
# 如果变量已存在,更新其信息
|
|
|
|
pattern = re.compile(r'[^0-9\.-]+')
|
|
|
|
TcRtdVar.update(channelNumber = channelNumber, description=des, varType=varType, min=min, max=max, compensationVar = compensationVar, unit = unit).where(TcRtdVar.varName == varName).execute()
|
|
|
|
# or re.findall(pattern, varName)
|
|
|
|
|
|
|
|
if not varName or not varType or not varModel or not min or not max or not channelNumber :
|
|
|
|
|
|
|
|
errorInfo = '表TCRTD第{}行导入失败,有关键字段为空'.format(str(index + 1))
|
|
|
|
|
|
|
|
return errorInfo
|
|
|
|
|
|
|
|
if re.findall(pattern, str(channelNumber)) or re.findall(pattern, str(min)) or re.findall(pattern, str(max)):
|
|
|
|
|
|
|
|
errorInfo = '表TCRTD第{}行导入失败,{}'.format(str(index + 1), '通道号、工程量下限、工程量上限只能为数字')
|
|
|
|
|
|
|
|
return errorInfo
|
|
|
|
|
|
|
|
if varType not in varTypeList or varType != 'PT100':
|
|
|
|
|
|
|
|
errorInfo = '表TCRTD第{}行导入失败,{}'.format(str(index + 1), str(index + 1), '变量类型错误')
|
|
|
|
|
|
|
|
if varModel not in ['本地值', '远程值', '模拟值']:
|
|
|
|
|
|
|
|
errorInfo = '表TCRTD第{}行导入失败,{}'.format(str(index + 1), str(index + 1), '变量模型有误')
|
|
|
|
|
|
|
|
return errorInfo
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if TcRtdVar.getByChannelNumber(channelNumber):
|
|
|
|
|
|
|
|
# 如果通道号已存在,更新其信息
|
|
|
|
|
|
|
|
if varType in varTypeList:
|
|
|
|
|
|
|
|
#导入热电偶
|
|
|
|
|
|
|
|
TcRtdVar.update(varName = varName, channelNumber = channelNumber, description=des, varType=varType,
|
|
|
|
|
|
|
|
min=min, max=max, compensationVar = compensationVar, unit = unit,
|
|
|
|
|
|
|
|
initialValue=initialValue).where((TcRtdVar.channelNumber == channelNumber) & (TcRtdVar.varType != 'PT100')).execute()
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
#导入热电阻
|
|
|
|
|
|
|
|
TcRtdVar.update(varName = varName, channelNumber = channelNumber, description=des, varType=varType,
|
|
|
|
|
|
|
|
min=min, max=max, compensationVar = compensationVar, unit = unit,
|
|
|
|
|
|
|
|
initialValue=initialValue).where((TcRtdVar.channelNumber == channelNumber) & (TcRtdVar.varType == 'PT100')).execute()
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
tcRtdVarType = TcRtdVar()
|
|
|
|
tcRtdVarType = TcRtdVar()
|
|
|
|
tcRtdVarType.createVar(varName = varName, channelNumber=channelNumber, des = des, varType = varType, min = min, max = max, compensationVar = compensationVar, varModel = varModel, unit = unit)
|
|
|
|
tcRtdVarType.createVar(varName = varName, channelNumber=channelNumber, des = des, varType = varType, min = min, max = max, compensationVar = compensationVar, varModel = varModel, unit = unit,nitialValue=initialValue)
|
|
|
|
# 操作后刷新缓存
|
|
|
|
# 操作后刷新缓存
|
|
|
|
refreshCache()
|
|
|
|
refreshCache()
|
|
|
|
|
|
|
|
|
|
|
@ -450,18 +487,19 @@ class AnalogManage(object):
|
|
|
|
super(AnalogManage, self).__init__()
|
|
|
|
super(AnalogManage, self).__init__()
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
@classmethod
|
|
|
|
def createVar(self, varName, channelNumber, varType, des, min, max, varModel, unit):
|
|
|
|
def createVar(self, varName, channelNumber, varType, des, min, max, varModel, unit, initialValue=''):
|
|
|
|
# 创建变量
|
|
|
|
# 创建变量
|
|
|
|
name = str(varName)
|
|
|
|
name = str(varName)
|
|
|
|
channelNumber = str(channelNumber)
|
|
|
|
channelNumber = str(channelNumber)
|
|
|
|
des = str(des)
|
|
|
|
des = str(des)
|
|
|
|
varModel = str(varModel)
|
|
|
|
varModel = str(varModel)
|
|
|
|
unit = str(unit)
|
|
|
|
unit = str(unit)
|
|
|
|
|
|
|
|
initialValue = str(initialValue)
|
|
|
|
# if AnalogVar.getByName(name):
|
|
|
|
# if AnalogVar.getByName(name):
|
|
|
|
# print('已有同名变量')
|
|
|
|
# print('已有同名变量')
|
|
|
|
# else:
|
|
|
|
# else:
|
|
|
|
analogVarType = AnalogVar()
|
|
|
|
analogVarType = AnalogVar()
|
|
|
|
analogVarType.createVar(varName = name, channelNumber = channelNumber, des = des, varType = varType, min = min, max = max, varModel = varModel, unit=unit)
|
|
|
|
analogVarType.createVar(varName = name, channelNumber = channelNumber, des = des, varType = varType, min = min, max = max, varModel = varModel, unit=unit, initialValue=initialValue)
|
|
|
|
# 操作后刷新缓存
|
|
|
|
# 操作后刷新缓存
|
|
|
|
refreshCache()
|
|
|
|
refreshCache()
|
|
|
|
|
|
|
|
|
|
|
@ -473,7 +511,7 @@ class AnalogManage(object):
|
|
|
|
return
|
|
|
|
return
|
|
|
|
l = []
|
|
|
|
l = []
|
|
|
|
for var in vars:
|
|
|
|
for var in vars:
|
|
|
|
l.append([var.id, var.varName, var.channelNumber, var.description, var.varType, var.min, var.max, var.unit, var.varModel])
|
|
|
|
l.append([var.id, var.initialValue, var.varName, var.channelNumber, var.description, var.varType, var.min, var.max, var.varModel, var.unit])
|
|
|
|
return l
|
|
|
|
return l
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -488,7 +526,7 @@ class AnalogManage(object):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
@classmethod
|
|
|
|
def editVar(self, name, Nname, channelNumber, des, varType, min, max, unit):
|
|
|
|
def editVar(self, name, Nname, channelNumber, des, varType, min, max, unit, initialValue=''):
|
|
|
|
# 修改变量信息
|
|
|
|
# 修改变量信息
|
|
|
|
name = str(name)
|
|
|
|
name = str(name)
|
|
|
|
Nname = str(Nname)
|
|
|
|
Nname = str(Nname)
|
|
|
@ -523,7 +561,7 @@ class AnalogManage(object):
|
|
|
|
var = AnalogVar.getByName(name)
|
|
|
|
var = AnalogVar.getByName(name)
|
|
|
|
if var:
|
|
|
|
if var:
|
|
|
|
|
|
|
|
|
|
|
|
return [var.id, var.varName, var. channelNumber, var.description, var.varType, var.min, var.max, var.unit, var.varModel]
|
|
|
|
return [var.id, var.varName, var. channelNumber, var.description, var.varType, var.min, var.max, var.varModel, var.unit]
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
return False
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
@ -559,13 +597,27 @@ class AnalogManage(object):
|
|
|
|
self.createVar(varName=name, channelNumber=str(i), varType='AI', des=des, min='100', max='200', varModel = '本地值', unit='mA')
|
|
|
|
self.createVar(varName=name, channelNumber=str(i), varType='AI', des=des, min='100', max='200', varModel = '本地值', unit='mA')
|
|
|
|
|
|
|
|
|
|
|
|
@classmethod
|
|
|
|
@classmethod
|
|
|
|
def importVarForm(self, varName, channelNumber, varType, des, min, max, varModel, unit):
|
|
|
|
def importVarForm(self, varName, channelNumber, varType, des, min, max, varModel, unit, initialValue='', index = None):
|
|
|
|
if AnalogVar.getByName(varName):
|
|
|
|
pattern = re.compile(r'[^0-9\.-]+')
|
|
|
|
# 如果变量已存在,更新其信息
|
|
|
|
if not varName or not channelNumber or not varType or not varModel:
|
|
|
|
AnalogVar.update(channelNumber =channelNumber, description=des, varType=varType, min=min, max=max, unit = unit).where(AnalogVar.varName == varName).execute()
|
|
|
|
errorInfo = '表IO第{}行导入失败,有关键字段为空'.format(str(index + 1))
|
|
|
|
|
|
|
|
return errorInfo
|
|
|
|
|
|
|
|
if re.findall(pattern, str(channelNumber)) or re.findall(pattern, str(min)) or re.findall(pattern, str(max)):
|
|
|
|
|
|
|
|
errorInfo = '表IO第{}行导入失败,{}'.format(str(index + 1), '通道号、工程量下限、工程量上限只能为数字')
|
|
|
|
|
|
|
|
return errorInfo
|
|
|
|
|
|
|
|
if varType not in ['AI', 'AO', 'DI', 'DO']:
|
|
|
|
|
|
|
|
errorInfo = '表IO第{}行导入失败,{}'.format(str(index + 1), '变量类型错误')
|
|
|
|
|
|
|
|
return errorInfo
|
|
|
|
|
|
|
|
if varModel not in ['本地值', '远程值', '模拟值']:
|
|
|
|
|
|
|
|
errorInfo = '表IO第{}行导入失败,{}'.format(str(index + 1), '变量模型有误')
|
|
|
|
|
|
|
|
return errorInfo
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if AnalogVar.getByChannelNumber(channelNumber):
|
|
|
|
|
|
|
|
# 如果通道号已存在,更新其信息
|
|
|
|
|
|
|
|
AnalogVar.update(varName = varName, description=des, varType=varType, min=min, max=max, unit = unit, initialValue=initialValue).where((AnalogVar.channelNumber == channelNumber) & (AnalogVar.varType == varType)).execute()
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
analogVarType = AnalogVar()
|
|
|
|
analogVarType = AnalogVar()
|
|
|
|
analogVarType.createVar(varName = varName, channelNumber = channelNumber, des = des, varType = varType, min = min, max = max, varModel = varModel,unit = unit)
|
|
|
|
analogVarType.createVar(varName = varName, channelNumber = channelNumber, des = des, varType = varType, min = min, max = max, varModel = varModel,unit = unit, initialValue=initialValue)
|
|
|
|
# 操作后刷新缓存
|
|
|
|
# 操作后刷新缓存
|
|
|
|
refreshCache()
|
|
|
|
refreshCache()
|
|
|
|
|
|
|
|
|
|
|
@ -699,6 +751,10 @@ class GlobalVarManager(object):
|
|
|
|
@classmethod
|
|
|
|
@classmethod
|
|
|
|
def importVar(cls, sheetName, data):
|
|
|
|
def importVar(cls, sheetName, data):
|
|
|
|
"""导入变量"""
|
|
|
|
"""导入变量"""
|
|
|
|
|
|
|
|
# 在处理数据前,将所有NaN值替换为空字符串
|
|
|
|
|
|
|
|
data = data.fillna('')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
errorConList = []
|
|
|
|
errorConList = []
|
|
|
|
match sheetName:
|
|
|
|
match sheetName:
|
|
|
|
case 'ModbusTCP主站' | 'ModbusTCP从站' | 'ModbusRTU主站' | 'ModbusRTU从站':
|
|
|
|
case 'ModbusTCP主站' | 'ModbusTCP从站' | 'ModbusRTU主站' | 'ModbusRTU从站':
|
|
|
@ -723,7 +779,7 @@ class GlobalVarManager(object):
|
|
|
|
slaveID=row['从站地址'],
|
|
|
|
slaveID=row['从站地址'],
|
|
|
|
min=row.get('工程量下限', ''),
|
|
|
|
min=row.get('工程量下限', ''),
|
|
|
|
max=row.get('工程量上限', ''),
|
|
|
|
max=row.get('工程量上限', ''),
|
|
|
|
order=row.get('字节顺序', 'int'),
|
|
|
|
order=row.get('字节顺序', ''),
|
|
|
|
modbusType=modbusType,
|
|
|
|
modbusType=modbusType,
|
|
|
|
varModel=row.get('值类型', ''),
|
|
|
|
varModel=row.get('值类型', ''),
|
|
|
|
index=index
|
|
|
|
index=index
|
|
|
@ -745,26 +801,36 @@ class GlobalVarManager(object):
|
|
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
if sheetName == 'IO':
|
|
|
|
if sheetName == 'IO':
|
|
|
|
importFunc(
|
|
|
|
errInfo = importFunc(
|
|
|
|
varName=row['变量名'],
|
|
|
|
varName=row['变量名'],
|
|
|
|
channelNumber=row['通道序号'],
|
|
|
|
channelNumber=row['通道序号'],
|
|
|
|
varType=row['变量类型'],
|
|
|
|
varType=row.get('变量类型', ''),
|
|
|
|
des=row.get('变量描述', ''),
|
|
|
|
des=row.get('变量描述', ''),
|
|
|
|
min=row.get('工程量下限', ''),
|
|
|
|
min=row.get('工程量下限', ''),
|
|
|
|
max=row.get('工程量上限', ''),
|
|
|
|
max=row.get('工程量上限', ''),
|
|
|
|
varModel=row.get('值类型', '')
|
|
|
|
unit=row.get('单位', ''),
|
|
|
|
|
|
|
|
varModel=row.get('值类型', ''),
|
|
|
|
|
|
|
|
initialValue=row.get('初始值', ''),
|
|
|
|
|
|
|
|
index=index
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
if errInfo:
|
|
|
|
|
|
|
|
errorConList.append(errInfo)
|
|
|
|
else: # TCRTD
|
|
|
|
else: # TCRTD
|
|
|
|
importFunc(
|
|
|
|
errInfo = importFunc(
|
|
|
|
varName=row['变量名'],
|
|
|
|
varName=row['变量名'],
|
|
|
|
channelNumber=row['通道序号'],
|
|
|
|
channelNumber=row['通道序号'],
|
|
|
|
varType=row['变量类型'],
|
|
|
|
varType=row['变量类型'],
|
|
|
|
des=row.get('变量描述', ''),
|
|
|
|
des=row.get('变量描述', ''),
|
|
|
|
min=row.get('工程量下限', ''),
|
|
|
|
min=row.get('工程量下限', ''),
|
|
|
|
max=row.get('工程量上限', ''),
|
|
|
|
max=row.get('工程量上限', ''),
|
|
|
|
|
|
|
|
unit=row.get('单位', ''),
|
|
|
|
compensationVar=row['补偿值'],
|
|
|
|
compensationVar=row['补偿值'],
|
|
|
|
varModel=row.get('值类型', '')
|
|
|
|
varModel=row.get('值类型', ''),
|
|
|
|
|
|
|
|
initialValue=row.get('初始值', ''),
|
|
|
|
|
|
|
|
index=index
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
if errInfo:
|
|
|
|
|
|
|
|
errorConList.append(errInfo)
|
|
|
|
except Exception as e:
|
|
|
|
except Exception as e:
|
|
|
|
errorConList.append(f'第{index+1}行导入失败: {str(e)}')
|
|
|
|
errorConList.append(f'第{index+1}行导入失败: {str(e)}')
|
|
|
|
|
|
|
|
|
|
|
@ -792,6 +858,8 @@ class GlobalVarManager(object):
|
|
|
|
Globals.getValue(l).model.initTable()
|
|
|
|
Globals.getValue(l).model.initTable()
|
|
|
|
if errorConList:
|
|
|
|
if errorConList:
|
|
|
|
return '\r\n'.join(errorConList)
|
|
|
|
return '\r\n'.join(errorConList)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|