装置下发参数公式接口编写
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package com.njcn.gather.detection.pojo.enums;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
@@ -10,15 +11,31 @@ import lombok.Getter;
|
||||
@Getter
|
||||
public enum DetectionCodeEnum {
|
||||
|
||||
FREQ("FREQ", "频率"),
|
||||
VRMS("VRMS", "相电压有效值"),
|
||||
DELTA_V("DELTA_V", "电压偏差"),
|
||||
VA("VA", "电压相角"),
|
||||
U1("U1", "基波电压"),
|
||||
V2_50("V2-50", "谐波电压"),
|
||||
SV_1_49("SV_1-49", "间谐波电压"),
|
||||
I1("I1", "基波电流"),
|
||||
I2_50("I2-50", "谐波电流"),
|
||||
SI_1_49("SI_1-49", "间谐波电压"),
|
||||
P2_50("P2-50", "谐波有功功率"),
|
||||
SV_1_49("SV_1-49", "间谐波电压"),
|
||||
SI_1_49("SI_1-49", "间谐波电压"),
|
||||
MAG("MAG", "电压幅值"),
|
||||
DUR("DUR", "持续时间"),
|
||||
IRMS("IRMS", "电流有效值"),
|
||||
IA("IA", "电流相角"),
|
||||
V_UNBAN("V_UNBAN", "三相电压负序不平衡度"),
|
||||
I_UNBAN("I_UNBAN", "三相电流负序不平衡度"),
|
||||
PST("PST", "短时间闪变"),
|
||||
|
||||
|
||||
I1("I1", "基波电流"),
|
||||
|
||||
|
||||
|
||||
|
||||
UNKNOWN_ERROR("-1", "未知异常"),
|
||||
|
||||
;
|
||||
|
||||
@@ -29,4 +46,12 @@ public enum DetectionCodeEnum {
|
||||
this.code = code;
|
||||
this.message = message;
|
||||
}
|
||||
public static DetectionCodeEnum getDetectionCodeByCode(String code) {
|
||||
for (DetectionCodeEnum detectionCodeEnum : DetectionCodeEnum.values()) {
|
||||
if (ObjectUtil.equals(code, detectionCodeEnum.getCode())) {
|
||||
return detectionCodeEnum;
|
||||
}
|
||||
}
|
||||
return UNKNOWN_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -303,6 +303,7 @@ public class DetectionServiceImpl {
|
||||
if (CollUtil.isNotEmpty(dtlsCheckData)) {
|
||||
harmonicResult.setAdType(dtlsCheckData.get(0).getValueType());
|
||||
}
|
||||
//电压下百分比给百分比直接算 电流是是下百分比给的是幅值要转换算
|
||||
List<DetectionData> integerBooleanA = harmRangeComparison(new ArrayList<>(), type, TYPE_A, sourceIssue, dataRule, devHarmMap.get(TYPE_A), fData, num);
|
||||
List<DetectionData> integerBooleanB = harmRangeComparison(new ArrayList<>(), type, TYPE_B, sourceIssue, dataRule, devHarmMap.get(TYPE_B), fData, num);
|
||||
List<DetectionData> integerBooleanC = harmRangeComparison(new ArrayList<>(), type, TYPE_C, sourceIssue, dataRule, devHarmMap.get(TYPE_C), fData, num);
|
||||
@@ -809,8 +810,10 @@ public class DetectionServiceImpl {
|
||||
} else {
|
||||
Double percent;
|
||||
if (I.equals(type)) {
|
||||
//电流是百分比转换成赋值算的
|
||||
percent = fData * 0.01;
|
||||
} else {
|
||||
//电压是百分比算的
|
||||
percent = 1.0;
|
||||
}
|
||||
if (1 == num) {
|
||||
|
||||
@@ -17,6 +17,11 @@ public class TreeDataVO {
|
||||
*/
|
||||
private String scriptTypeName;
|
||||
|
||||
/**
|
||||
* code
|
||||
*/
|
||||
private String scriptTypeCode;
|
||||
|
||||
/**
|
||||
* 源下发的描述
|
||||
*/
|
||||
|
||||
@@ -167,6 +167,7 @@ public class ResultServiceImpl implements IResultService {
|
||||
//大相检测信息
|
||||
TreeDataVO infoVO = new TreeDataVO();
|
||||
infoVO.setScriptTypeName(dictTree.getName());
|
||||
infoVO.setScriptTypeCode(dictTree.getId());
|
||||
//额定条件下频率准确度测试
|
||||
LinkedHashMap<String, List<PqScriptDtls>> subTypeMap = value.stream()
|
||||
.sorted(Comparator.comparing(PqScriptDtls::getIndex))
|
||||
@@ -176,6 +177,7 @@ public class ResultServiceImpl implements IResultService {
|
||||
if (!"VOLTAGE".equals(dictTree.getCode())) {
|
||||
TreeDataVO subType = new TreeDataVO();
|
||||
subType.setScriptTypeName(subName.get(subKey).replace("XX", dictTree.getName()));
|
||||
subType.setScriptTypeCode(subKey);
|
||||
LinkedHashMap<Integer, List<PqScriptDtls>> indexMap = subValue.stream()
|
||||
.sorted(Comparator.comparing(PqScriptDtls::getIndex))
|
||||
.collect(Collectors.groupingBy(PqScriptDtls::getIndex, LinkedHashMap::new, Collectors.toList()));
|
||||
@@ -212,11 +214,13 @@ public class ResultServiceImpl implements IResultService {
|
||||
if (CollUtil.isNotEmpty(subSingleTypeMap)) {
|
||||
TreeDataVO subType = new TreeDataVO();
|
||||
subType.setScriptTypeName(subName.get("Single").replace("XX", dictTree.getName()));
|
||||
subType.setScriptTypeCode(dictTree.getCode());
|
||||
//单影响量下频率准测量集合
|
||||
List<TreeDataVO> subSingleList = new ArrayList<>();
|
||||
subSingleTypeMap.forEach((subKey, subValue) -> {
|
||||
TreeDataVO treeDataVO = new TreeDataVO();
|
||||
treeDataVO.setScriptTypeName(subName.get(subKey).replace("XX", dictTree.getName()));
|
||||
treeDataVO.setScriptTypeCode(subKey);
|
||||
List<TreeDataVO> subTypeList = new ArrayList<>();
|
||||
|
||||
LinkedHashMap<Integer, List<PqScriptDtls>> indexMap = subValue.stream()
|
||||
|
||||
@@ -130,7 +130,7 @@ public class PqScriptController extends BaseController {
|
||||
@ApiOperation("获取指定模式下的所有检测脚本")
|
||||
@ApiImplicitParam(name = "patternId", value = "模式Id", required = true)
|
||||
public HttpResult<List<Map<String, Object>>> getAllPqScript(@RequestParam("patternId") String patternId) {
|
||||
String methodDescribe = getMethodDescribe("getAllPqScript");
|
||||
String methodDescribe = getMethodDescribe("getAll");
|
||||
LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, patternId);
|
||||
List<Map<String, Object>> result = pqScriptService.listAllPqScript(patternId);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe);
|
||||
@@ -142,7 +142,7 @@ public class PqScriptController extends BaseController {
|
||||
@ApiOperation("根据脚本id查询检测脚本详情")
|
||||
@ApiImplicitParam(name = "id", value = "检测脚本id", required = true)
|
||||
public HttpResult<List<SourceIssue>> dls(@RequestBody PqScriptIssueParam param) {
|
||||
String methodDescribe = getMethodDescribe("list");
|
||||
String methodDescribe = getMethodDescribe("dlsDetails");
|
||||
LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, param);
|
||||
List<SourceIssue> sourceIssues = pqScriptDtlsService.listSourceIssue(param);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, sourceIssues, methodDescribe);
|
||||
@@ -154,10 +154,10 @@ public class PqScriptController extends BaseController {
|
||||
@ApiOperation("添加检测脚本")
|
||||
@ApiImplicitParam(name = "id", value = "检测脚本id", required = true)
|
||||
public HttpResult<Boolean> addScriptDtls(@RequestBody PqScriptDtlsParam sourceIssue) {
|
||||
String methodDescribe = getMethodDescribe("list");
|
||||
String methodDescribe = getMethodDescribe("addScriptDtls");
|
||||
LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, sourceIssue);
|
||||
Boolean b = pqScriptDtlsService.saveScriptDtls(sourceIssue);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, b, methodDescribe);
|
||||
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, b , methodDescribe);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
<select id="selectMaxIndex" resultType="java.lang.Integer">
|
||||
|
||||
SELECT
|
||||
max( t.INDEX )
|
||||
IFNULL( max( t.INDEX ), -1 ) AS num
|
||||
FROM
|
||||
pq_script_dtls t
|
||||
WHERE
|
||||
Script_Id = ${scriptId}
|
||||
Script_Id = #{scriptId}
|
||||
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
package com.njcn.gather.script.pojo.param;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.njcn.gather.script.pojo.po.SourceIssue;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -60,7 +58,7 @@ public class PqScriptDtlsParam {
|
||||
private Double fFreq;
|
||||
|
||||
/**
|
||||
*
|
||||
* 装置下发参数
|
||||
*/
|
||||
@JSONField(name = "channelList", ordinal = 7)
|
||||
private List<CheckData> checkDataList;
|
||||
@@ -69,10 +67,8 @@ public class PqScriptDtlsParam {
|
||||
* 通道信息
|
||||
*/
|
||||
@JSONField(name = "channelList", ordinal = 8)
|
||||
private List<SourceIssue.ChannelListDTO> channelList;
|
||||
private List<ChannelListDTO> channelList;
|
||||
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class CheckData {
|
||||
|
||||
@@ -110,9 +106,10 @@ public class PqScriptDtlsParam {
|
||||
* 是否参与误差比较:0-不参与 1-参与
|
||||
*/
|
||||
private Integer errorFlag;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class ChannelListDTO {
|
||||
|
||||
@@ -168,31 +165,30 @@ public class PqScriptDtlsParam {
|
||||
* 谐波叠加列表
|
||||
*/
|
||||
@JSONField(name = "harmList", ordinal = 9)
|
||||
private List<SourceIssue.ChannelListDTO.HarmModel> harmList;
|
||||
private List<HarmModel> harmList;
|
||||
|
||||
/**
|
||||
* 间谐波叠加列表
|
||||
*/
|
||||
@JSONField(name = "inharmList", ordinal = 10)
|
||||
private List<SourceIssue.ChannelListDTO.InharmModel> inharmList;
|
||||
private List<InharmModel> inharmList;
|
||||
|
||||
/**
|
||||
* 暂态数据
|
||||
*/
|
||||
@JSONField(name = "dipData", ordinal = 11)
|
||||
private SourceIssue.ChannelListDTO.DipDataDTO dipData;
|
||||
private DipDataDTO dipData;
|
||||
|
||||
/**
|
||||
* 闪变数据
|
||||
*/
|
||||
@JSONField(name = "flickerData", ordinal = 12)
|
||||
private SourceIssue.ChannelListDTO.FlickerDataDTO flickerData;
|
||||
private FlickerDataDTO flickerData;
|
||||
|
||||
|
||||
/**
|
||||
* 谐波叠加列表
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class HarmModel {
|
||||
|
||||
@@ -219,7 +215,6 @@ public class PqScriptDtlsParam {
|
||||
/**
|
||||
* 间谐波叠加列表
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class InharmModel {
|
||||
|
||||
@@ -247,7 +242,6 @@ public class PqScriptDtlsParam {
|
||||
/**
|
||||
* 暂态数据
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class DipDataDTO {
|
||||
|
||||
@@ -294,7 +288,6 @@ public class PqScriptDtlsParam {
|
||||
/**
|
||||
* 闪变数据
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
public static class FlickerDataDTO {
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ public class PqScriptDtls implements Serializable {
|
||||
/**
|
||||
* 总检测脚本中的测试项序号
|
||||
*/
|
||||
@TableField("Index")
|
||||
@TableField("`index`")
|
||||
private Integer index;
|
||||
|
||||
/**
|
||||
|
||||
@@ -5,7 +5,6 @@ import com.njcn.gather.script.pojo.param.PqScriptDtlsParam;
|
||||
import com.njcn.gather.script.pojo.param.PqScriptIssueParam;
|
||||
import com.njcn.gather.script.pojo.po.PqScriptDtls;
|
||||
import com.njcn.gather.script.pojo.po.SourceIssue;
|
||||
import com.njcn.gather.script.pojo.vo.PqScriptDtlDataVO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -83,7 +82,7 @@ public interface IPqScriptDtlsService extends IService<PqScriptDtls> {
|
||||
* 查询当前检测小项的信息
|
||||
* @return
|
||||
*/
|
||||
List<PqScriptDtlDataVO> scriptDtlsList();
|
||||
List<PqScriptDtlsParam.CheckData> scriptDtlsList(PqScriptDtlsParam sourceIssue);
|
||||
|
||||
Boolean saveCheck();
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||
import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum;
|
||||
import com.njcn.gather.device.pojo.po.PqDev;
|
||||
import com.njcn.gather.device.service.IPqDevService;
|
||||
import com.njcn.gather.device.pojo.enums.CommonEnum;
|
||||
@@ -20,11 +21,12 @@ import com.njcn.gather.script.pojo.po.PqScript;
|
||||
import com.njcn.gather.script.pojo.po.PqScriptCheckData;
|
||||
import com.njcn.gather.script.pojo.po.PqScriptDtls;
|
||||
import com.njcn.gather.script.pojo.po.SourceIssue;
|
||||
import com.njcn.gather.script.pojo.vo.PqScriptDtlDataVO;
|
||||
import com.njcn.gather.script.service.IPqScriptCheckDataService;
|
||||
import com.njcn.gather.script.service.IPqScriptDtlsService;
|
||||
import com.njcn.gather.script.util.ScriptDtlsDesc;
|
||||
import com.njcn.gather.script.util.UnbanUtil;
|
||||
import com.njcn.gather.system.dictionary.pojo.po.DictTree;
|
||||
import com.njcn.gather.system.dictionary.service.IDictTreeService;
|
||||
import com.njcn.gather.type.pojo.po.DevType;
|
||||
import com.njcn.gather.type.service.IDevTypeService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -75,6 +77,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
||||
private final PqScriptMapper pqScriptMapper;
|
||||
private final IPqScriptCheckDataService pqScriptCheckDataService;
|
||||
private final IDevTypeService devTypeService;
|
||||
private final IDictTreeService dictTreeService;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = {Exception.class})
|
||||
@@ -117,19 +120,27 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
||||
@Override
|
||||
public List<SourceIssue> listSourceIssue(PqScriptIssueParam param) {
|
||||
List<SourceIssue> sourceIssues = new ArrayList<>();
|
||||
//校验终端额定电压电流是否相同
|
||||
List<PqDev> list = pqDevService.list(new LambdaQueryWrapper<PqDev>()
|
||||
.eq(PqDev::getPlanId, param.getPlanId())
|
||||
.in(PqDev::getId, param.getDevIds())
|
||||
.eq(PqDev::getState, DataStateEnum.ENABLE.getCode())
|
||||
);
|
||||
Set<String> devTypeSet = list.stream().map(PqDev::getDevType).collect(Collectors.toSet());
|
||||
List<DevType> devTypes = devTypeService.listByIds(devTypeSet);
|
||||
Set<Double> voltSet =new HashSet<>(1);
|
||||
Set<Double> currSet =new HashSet<>(1);
|
||||
if(CollUtil.isNotEmpty(param.getDevIds())){
|
||||
//校验终端额定电压电流是否相同
|
||||
List<PqDev> list = pqDevService.list(new LambdaQueryWrapper<PqDev>()
|
||||
.eq(PqDev::getPlanId, param.getPlanId())
|
||||
.in(PqDev::getId, param.getDevIds())
|
||||
.eq(PqDev::getState, DataStateEnum.ENABLE.getCode())
|
||||
);
|
||||
Set<String> devTypeSet = list.stream().map(PqDev::getDevType).collect(Collectors.toSet());
|
||||
List<DevType> devTypes = devTypeService.listByIds(devTypeSet);
|
||||
//额定电压信息
|
||||
voltSet = devTypes.stream().map(DevType::getDevVolt).collect(Collectors.toSet());
|
||||
//额定电流信息
|
||||
currSet = devTypes.stream().map(DevType::getDevCurr).collect(Collectors.toSet());
|
||||
}else{
|
||||
voltSet.add(1.0);
|
||||
currSet.add(1.0);
|
||||
param.setIsPhaseSequence("-1");
|
||||
}
|
||||
|
||||
//额定电压信息
|
||||
Set<Double> voltSet = devTypes.stream().map(DevType::getDevVolt).collect(Collectors.toSet());
|
||||
//额定电流信息
|
||||
Set<Double> currSet = devTypes.stream().map(DevType::getDevCurr).collect(Collectors.toSet());
|
||||
|
||||
if (voltSet.size() == 1 && currSet.size() == 1) {
|
||||
Double volt = voltSet.stream().collect(Collectors.toList()).stream().findFirst().get();
|
||||
@@ -162,7 +173,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
||||
issue.setType(freqDtls.getScriptCode());
|
||||
issue.setIndex(freqDtls.getIndex());
|
||||
String scriptSubType = freqDtls.getScriptSubType();
|
||||
issue.setSubType(StrUtil.isBlank(scriptSubType) ? scriptSubType : scriptSubType.replace("Base", "NULL"));
|
||||
issue.setSubType(StrUtil.isBlank(scriptSubType)&&CollUtil.isNotEmpty(param.getDevIds()) ? scriptSubType : scriptSubType.replace("Base", "NULL"));
|
||||
PqScriptCheckDataParam checkDataParam = new PqScriptCheckDataParam();
|
||||
checkDataParam.setScriptId(freqDtls.getScriptId());
|
||||
checkDataParam.setIndex(freqDtls.getIndex());
|
||||
@@ -228,34 +239,37 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
||||
public Boolean saveScriptDtls(PqScriptDtlsParam sourceIssue) {
|
||||
List<PqScriptDtls> info = new ArrayList<>();
|
||||
List<PqScriptCheckData> checkList = new ArrayList<>();
|
||||
Integer i=sourceIssue.getIndex();
|
||||
if(ObjectUtil.isNotNull(sourceIssue.getIndex())){
|
||||
Integer i = sourceIssue.getIndex();
|
||||
if (ObjectUtil.isNotNull(sourceIssue.getIndex())) {
|
||||
this.remove(new MPJLambdaWrapper<PqScriptDtls>()
|
||||
.eq(PqScriptDtls::getScriptId,sourceIssue.getScriptId())
|
||||
.eq(PqScriptDtls::getIndex,sourceIssue.getIndex())
|
||||
.eq(PqScriptDtls::getScriptId, sourceIssue.getScriptId())
|
||||
.eq(PqScriptDtls::getIndex, sourceIssue.getIndex())
|
||||
);
|
||||
pqScriptCheckDataService.remove(new MPJLambdaWrapper<PqScriptCheckData>()
|
||||
.eq(PqScriptCheckData::getScriptId,sourceIssue.getScriptId())
|
||||
.eq(PqScriptCheckData::getIndex,sourceIssue.getIndex())
|
||||
.eq(PqScriptCheckData::getScriptId, sourceIssue.getScriptId())
|
||||
.eq(PqScriptCheckData::getIndex, sourceIssue.getIndex())
|
||||
);
|
||||
}else{
|
||||
i = this.baseMapper.selectMaxIndex(sourceIssue.getScriptId());
|
||||
} else {
|
||||
i = this.baseMapper.selectMaxIndex(sourceIssue.getScriptId()) + 1;
|
||||
}
|
||||
List<PqScriptDtlsParam.CheckData> checkDataList = sourceIssue.getCheckDataList();
|
||||
PqScriptCheckData data;
|
||||
for (PqScriptDtlsParam.CheckData checkData : checkDataList) {
|
||||
data=new PqScriptCheckData();
|
||||
data.setScriptId(sourceIssue.getScriptId());
|
||||
data.setIndex(i);
|
||||
data.setValueType(checkData.getValueType());
|
||||
data.setDataType(checkData.getDataType());
|
||||
data.setPhase(checkData.getPhase());
|
||||
data.setValue(checkData.getValue());
|
||||
data.setHarmNum(checkData.getHarmNum());
|
||||
data.setEnable(checkData.getEnable());
|
||||
data.setErrorFlag(checkData.getErrorFlag());
|
||||
checkList.add(data);
|
||||
if (CollUtil.isNotEmpty(checkDataList)) {
|
||||
for (PqScriptDtlsParam.CheckData checkData : checkDataList) {
|
||||
data = new PqScriptCheckData();
|
||||
data.setScriptId(sourceIssue.getScriptId());
|
||||
data.setIndex(i);
|
||||
data.setValueType(checkData.getValueType());
|
||||
data.setDataType(checkData.getDataType());
|
||||
data.setPhase(checkData.getPhase());
|
||||
data.setValue(checkData.getValue());
|
||||
data.setHarmNum(checkData.getHarmNum());
|
||||
data.setEnable(checkData.getEnable());
|
||||
data.setErrorFlag(checkData.getErrorFlag());
|
||||
checkList.add(data);
|
||||
}
|
||||
}
|
||||
|
||||
//频率赋值
|
||||
PqScriptDtls dtls = setScriptDtls(sourceIssue, i);
|
||||
dtls.setValueType(FREQ);
|
||||
@@ -263,95 +277,307 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
||||
dtls.setValue(sourceIssue.getFFreq());
|
||||
dtls.setAngle(0.0);
|
||||
info.add(dtls);
|
||||
//开始遍历通道信息
|
||||
for (SourceIssue.ChannelListDTO channelListDTO : sourceIssue.getChannelList()) {
|
||||
String phase = channelListDTO.getChannelType().substring(0, 1);
|
||||
//电压或者电流
|
||||
if (channelListDTO.getChannelFlag()) {
|
||||
PqScriptDtls uOri = setScriptDtls(sourceIssue, i);
|
||||
uOri.setPhase(phase);
|
||||
if (channelListDTO.getChannelType().contains("U")) {
|
||||
uOri.setValueType(VOL);
|
||||
}
|
||||
if (channelListDTO.getChannelType().contains("I")) {
|
||||
uOri.setValueType(CUR);
|
||||
}
|
||||
uOri.setValue(channelListDTO.getFAmp());
|
||||
uOri.setAngle(channelListDTO.getFPhase());
|
||||
info.add(uOri);
|
||||
}
|
||||
//谐波值
|
||||
if (channelListDTO.getHarmFlag()) {
|
||||
List<SourceIssue.ChannelListDTO.HarmModel> harmList = channelListDTO.getHarmList();
|
||||
for (SourceIssue.ChannelListDTO.HarmModel harmModel : harmList) {
|
||||
PqScriptDtls harm = setScriptDtls(sourceIssue, i);
|
||||
if (CollUtil.isNotEmpty(sourceIssue.getChannelList())) {
|
||||
//开始遍历通道信息
|
||||
for (PqScriptDtlsParam.ChannelListDTO channelListDTO : sourceIssue.getChannelList()) {
|
||||
String phase = channelListDTO.getChannelType().substring(1, 2).toUpperCase();
|
||||
//电压或者电流
|
||||
if (channelListDTO.getChannelFlag()) {
|
||||
PqScriptDtls uOri = setScriptDtls(sourceIssue, i);
|
||||
uOri.setPhase(phase);
|
||||
if (channelListDTO.getChannelType().contains("U")) {
|
||||
harm.setValueType(HARM_V);
|
||||
uOri.setValueType(VOL);
|
||||
}
|
||||
if (channelListDTO.getChannelType().contains("I")) {
|
||||
harm.setValueType(HARM_I);
|
||||
uOri.setValueType(CUR);
|
||||
}
|
||||
harm.setPhase(phase);
|
||||
harm.setHarmNum(harmModel.getHarm());
|
||||
harm.setValue(harmModel.getFAmp());
|
||||
harm.setAngle(harmModel.getFPhase());
|
||||
info.add(harm);
|
||||
uOri.setValue(channelListDTO.getFAmp());
|
||||
uOri.setAngle(channelListDTO.getFPhase());
|
||||
info.add(uOri);
|
||||
}
|
||||
}
|
||||
//间谐波
|
||||
if (channelListDTO.getInHarmFlag()) {
|
||||
List<SourceIssue.ChannelListDTO.InharmModel> inharmList = channelListDTO.getInharmList();
|
||||
for (SourceIssue.ChannelListDTO.InharmModel inharmModel : inharmList) {
|
||||
PqScriptDtls inHarm = setScriptDtls(sourceIssue, i);
|
||||
if (channelListDTO.getChannelType().contains("U")) {
|
||||
inHarm.setValueType(INHARM_V);
|
||||
//谐波值
|
||||
if (channelListDTO.getHarmFlag()) {
|
||||
List<PqScriptDtlsParam.ChannelListDTO.HarmModel> harmList = channelListDTO.getHarmList();
|
||||
for (PqScriptDtlsParam.ChannelListDTO.HarmModel harmModel : harmList) {
|
||||
PqScriptDtls harm = setScriptDtls(sourceIssue, i);
|
||||
if (channelListDTO.getChannelType().contains("U")) {
|
||||
harm.setValueType(HARM_V);
|
||||
}
|
||||
if (channelListDTO.getChannelType().contains("I")) {
|
||||
harm.setValueType(HARM_I);
|
||||
}
|
||||
harm.setPhase(phase);
|
||||
harm.setHarmNum(harmModel.getHarm());
|
||||
harm.setValue(harmModel.getFAmp());
|
||||
harm.setAngle(harmModel.getFPhase());
|
||||
info.add(harm);
|
||||
}
|
||||
if (channelListDTO.getChannelType().contains("I")) {
|
||||
inHarm.setValueType(INHARM_I);
|
||||
}
|
||||
inHarm.setPhase(phase);
|
||||
inHarm.setHarmNum(inharmModel.getInharm());
|
||||
inHarm.setValue(inharmModel.getFAmp());
|
||||
inHarm.setAngle(inharmModel.getFPhase());
|
||||
info.add(inHarm);
|
||||
}
|
||||
}
|
||||
//暂态
|
||||
if (channelListDTO.getDipFlag()) {
|
||||
SourceIssue.ChannelListDTO.DipDataDTO dipData = channelListDTO.getDipData();
|
||||
PqScriptDtls dip = setScriptDtls(sourceIssue, i);
|
||||
dip.setValueType(DIP);
|
||||
dip.setPhase(phase);
|
||||
dip.setTransValue(dipData.getFTransValue());
|
||||
dip.setRetainTime(dipData.getRetainTime());
|
||||
info.add(dip);
|
||||
//间谐波
|
||||
if (channelListDTO.getInHarmFlag()) {
|
||||
List<PqScriptDtlsParam.ChannelListDTO.InharmModel> inharmList = channelListDTO.getInharmList();
|
||||
for (PqScriptDtlsParam.ChannelListDTO.InharmModel inharmModel : inharmList) {
|
||||
PqScriptDtls inHarm = setScriptDtls(sourceIssue, i);
|
||||
if (channelListDTO.getChannelType().contains("U")) {
|
||||
inHarm.setValueType(INHARM_V);
|
||||
}
|
||||
if (channelListDTO.getChannelType().contains("I")) {
|
||||
inHarm.setValueType(INHARM_I);
|
||||
}
|
||||
inHarm.setPhase(phase);
|
||||
inHarm.setHarmNum(inharmModel.getInharm());
|
||||
inHarm.setValue(inharmModel.getFAmp());
|
||||
inHarm.setAngle(inharmModel.getFPhase());
|
||||
info.add(inHarm);
|
||||
}
|
||||
}
|
||||
//暂态
|
||||
if (channelListDTO.getDipFlag()) {
|
||||
PqScriptDtlsParam.ChannelListDTO.DipDataDTO dipData = channelListDTO.getDipData();
|
||||
PqScriptDtls dip = setScriptDtls(sourceIssue, i);
|
||||
dip.setValueType(DIP);
|
||||
dip.setPhase(phase);
|
||||
dip.setTransValue(dipData.getFTransValue());
|
||||
dip.setRetainTime(dipData.getRetainTime());
|
||||
info.add(dip);
|
||||
|
||||
}
|
||||
//闪变
|
||||
if (channelListDTO.getFlickerFlag()) {
|
||||
SourceIssue.ChannelListDTO.FlickerDataDTO flickerData = channelListDTO.getFlickerData();
|
||||
PqScriptDtls dip = setScriptDtls(sourceIssue, i);
|
||||
dip.setValueType(DIP);
|
||||
dip.setPhase(phase);
|
||||
dip.setChagFre(flickerData.getFChagFre());
|
||||
dip.setChagValue(flickerData.getFChagValue());
|
||||
info.add(dip);
|
||||
}
|
||||
//闪变
|
||||
if (channelListDTO.getFlickerFlag()) {
|
||||
PqScriptDtlsParam.ChannelListDTO.FlickerDataDTO flickerData = channelListDTO.getFlickerData();
|
||||
PqScriptDtls dip = setScriptDtls(sourceIssue, i);
|
||||
dip.setValueType(FLICKER);
|
||||
dip.setPhase(phase);
|
||||
dip.setChagFre(flickerData.getFChagFre());
|
||||
dip.setChagValue(flickerData.getFChagValue());
|
||||
info.add(dip);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CollUtil.isNotEmpty(info)) {
|
||||
this.saveBatch(info);
|
||||
}
|
||||
if(CollUtil.isNotEmpty(checkList)){
|
||||
if (CollUtil.isNotEmpty(checkList)) {
|
||||
pqScriptCheckDataService.saveBatch(checkList);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<PqScriptDtlDataVO> scriptDtlsList() {
|
||||
return Collections.emptyList();
|
||||
public List<PqScriptDtlsParam.CheckData> scriptDtlsList(PqScriptDtlsParam sourceIssue) {
|
||||
List<PqScriptDtlsParam.CheckData> info=new ArrayList<>();
|
||||
//获取所有下拉值情况
|
||||
List<PqScriptDtlsParam.CheckData> checkDataList = sourceIssue.getCheckDataList();
|
||||
if(CollUtil.isNotEmpty(checkDataList)){
|
||||
List<String> ids = checkDataList.stream().map(PqScriptDtlsParam.CheckData::getValueType).collect(Collectors.toList());
|
||||
List<DictTree> dictTreeById = dictTreeService.getDictTreeById(ids);
|
||||
Map<String, String> dicTreeMap = dictTreeById.stream().collect(Collectors.toMap(DictTree::getId, DictTree::getCode));
|
||||
PqScriptDtlsParam.CheckData checkData;
|
||||
for (PqScriptDtlsParam.CheckData channelListDTO : checkDataList) {
|
||||
if(dicTreeMap.containsKey(channelListDTO.getValueType())){
|
||||
String code = dicTreeMap.get(channelListDTO.getValueType());
|
||||
DetectionCodeEnum codeEnum = DetectionCodeEnum.getDetectionCodeByCode(code);
|
||||
List<PqScriptDtlsParam.ChannelListDTO> channelList = sourceIssue.getChannelList();
|
||||
List<PqScriptDtlsParam.ChannelListDTO> list;
|
||||
switch (codeEnum){
|
||||
case FREQ:
|
||||
checkData=new PqScriptDtlsParam.CheckData();
|
||||
checkData.setErrorFlag(channelListDTO.getErrorFlag());
|
||||
checkData.setEnable(channelListDTO.getEnable());
|
||||
checkData.setValue(sourceIssue.getFFreq());
|
||||
checkData.setPhase("T");
|
||||
checkData.setDataType(channelListDTO.getDataType());
|
||||
checkData.setValueType(channelListDTO.getValueType());
|
||||
info.add(checkData);
|
||||
break;
|
||||
case U1:
|
||||
case VRMS:
|
||||
if(CollUtil.isNotEmpty(channelList)){
|
||||
list = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
||||
rmsCheck(info, channelListDTO, list);
|
||||
}
|
||||
break;
|
||||
case DELTA_V:
|
||||
if(CollUtil.isNotEmpty(channelList)){
|
||||
list = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
||||
for (PqScriptDtlsParam.ChannelListDTO listDTO : list) {
|
||||
checkData=new PqScriptDtlsParam.CheckData();
|
||||
checkData.setErrorFlag(channelListDTO.getErrorFlag());
|
||||
checkData.setEnable(channelListDTO.getEnable());
|
||||
checkData.setValue(0.0);
|
||||
checkData.setPhase(listDTO.getChannelType().substring(1,2));
|
||||
checkData.setDataType(channelListDTO.getDataType());
|
||||
checkData.setValueType(channelListDTO.getValueType());
|
||||
info.add(checkData);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case VA:
|
||||
if(CollUtil.isNotEmpty(channelList)){
|
||||
list = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
||||
for (PqScriptDtlsParam.ChannelListDTO listDTO : list) {
|
||||
checkData=new PqScriptDtlsParam.CheckData();
|
||||
checkData.setErrorFlag(channelListDTO.getErrorFlag());
|
||||
checkData.setEnable(channelListDTO.getEnable());
|
||||
checkData.setValue(listDTO.getFPhase());
|
||||
checkData.setPhase(listDTO.getChannelType().substring(1,2));
|
||||
checkData.setDataType(channelListDTO.getDataType());
|
||||
checkData.setValueType(channelListDTO.getValueType());
|
||||
info.add(checkData);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case V2_50:
|
||||
if(CollUtil.isNotEmpty(channelList)){
|
||||
list = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
||||
harmCheck(info, channelListDTO, list);
|
||||
}
|
||||
break;
|
||||
case I2_50:
|
||||
if(CollUtil.isNotEmpty(channelList)){
|
||||
list = channelList.stream().filter(x -> x.getChannelType().contains("I")).collect(Collectors.toList());
|
||||
harmCheck(info, channelListDTO, list);
|
||||
}
|
||||
break;
|
||||
case P2_50:
|
||||
break;
|
||||
case SV_1_49:
|
||||
if(CollUtil.isNotEmpty(channelList)){
|
||||
list = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
||||
inHarmCheck(info, channelListDTO, list);
|
||||
}
|
||||
break;
|
||||
case SI_1_49:
|
||||
if(CollUtil.isNotEmpty(channelList)){
|
||||
list= channelList.stream().filter(x -> x.getChannelType().contains("I")).collect(Collectors.toList());
|
||||
inHarmCheck(info, channelListDTO, list);
|
||||
}
|
||||
break;
|
||||
case MAG:
|
||||
list= channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
||||
for (PqScriptDtlsParam.ChannelListDTO listDTO : list) {
|
||||
checkData=new PqScriptDtlsParam.CheckData();
|
||||
checkData.setErrorFlag(channelListDTO.getErrorFlag());
|
||||
checkData.setEnable(channelListDTO.getEnable());
|
||||
checkData.setValue(listDTO.getDipData().getFTransValue());
|
||||
checkData.setPhase(listDTO.getChannelType().substring(1,2));
|
||||
checkData.setDataType(channelListDTO.getDataType());
|
||||
checkData.setValueType(channelListDTO.getValueType());
|
||||
info.add(checkData);
|
||||
}
|
||||
break;
|
||||
case DUR:
|
||||
list = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
||||
for (PqScriptDtlsParam.ChannelListDTO listDTO : list) {
|
||||
checkData=new PqScriptDtlsParam.CheckData();
|
||||
checkData.setErrorFlag(channelListDTO.getErrorFlag());
|
||||
checkData.setEnable(channelListDTO.getEnable());
|
||||
checkData.setValue(listDTO.getDipData().getRetainTime());
|
||||
checkData.setPhase(listDTO.getChannelType().substring(1,2));
|
||||
checkData.setDataType(channelListDTO.getDataType());
|
||||
checkData.setValueType(channelListDTO.getValueType());
|
||||
info.add(checkData);
|
||||
}
|
||||
break;
|
||||
case IRMS:
|
||||
case IA:
|
||||
if(CollUtil.isNotEmpty(channelList)){
|
||||
list = channelList.stream().filter(x -> x.getChannelType().contains("I")).collect(Collectors.toList());
|
||||
rmsCheck(info, channelListDTO, list);
|
||||
}
|
||||
break;
|
||||
case V_UNBAN:
|
||||
list = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
|
||||
unbanCheck(info, channelListDTO, channelList, list);
|
||||
break;
|
||||
case I_UNBAN:
|
||||
list = channelList.stream().filter(x -> x.getChannelType().contains("I")).collect(Collectors.toList());
|
||||
unbanCheck(info, channelListDTO, channelList, list);
|
||||
break;
|
||||
case PST:
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
private void unbanCheck(List<PqScriptDtlsParam.CheckData> info, PqScriptDtlsParam.CheckData channelListDTO, List<PqScriptDtlsParam.ChannelListDTO> channelList, List<PqScriptDtlsParam.ChannelListDTO> list) {
|
||||
PqScriptDtlsParam.CheckData checkData;
|
||||
if(CollUtil.isNotEmpty(list)){
|
||||
PqScriptDtlsParam.ChannelListDTO a = channelList.stream().filter(x -> x.getChannelType().contains("a")).findFirst().get();
|
||||
PqScriptDtlsParam.ChannelListDTO b = channelList.stream().filter(x -> x.getChannelType().contains("b")).findFirst().get();
|
||||
PqScriptDtlsParam.ChannelListDTO c = channelList.stream().filter(x -> x.getChannelType().contains("c")).findFirst().get();
|
||||
checkData=new PqScriptDtlsParam.CheckData();
|
||||
checkData.setErrorFlag(channelListDTO.getErrorFlag());
|
||||
checkData.setEnable(channelListDTO.getEnable());
|
||||
checkData.setValue(UnbanUtil.calculateUnbalance(a.getFAmp(),a.getFPhase(),b.getFAmp(),b.getFPhase(),c.getFAmp(),c.getFPhase()));
|
||||
checkData.setPhase("T");
|
||||
checkData.setDataType(channelListDTO.getDataType());
|
||||
checkData.setValueType(channelListDTO.getValueType());
|
||||
info.add(checkData);
|
||||
}
|
||||
}
|
||||
|
||||
private void rmsCheck(List<PqScriptDtlsParam.CheckData> info, PqScriptDtlsParam.CheckData channelListDTO, List<PqScriptDtlsParam.ChannelListDTO> list) {
|
||||
PqScriptDtlsParam.CheckData checkData;
|
||||
for (PqScriptDtlsParam.ChannelListDTO listDTO : list) {
|
||||
checkData=new PqScriptDtlsParam.CheckData();
|
||||
checkData.setErrorFlag(channelListDTO.getErrorFlag());
|
||||
checkData.setEnable(channelListDTO.getEnable());
|
||||
checkData.setValue(listDTO.getFAmp());
|
||||
checkData.setPhase(listDTO.getChannelType().substring(1,2));
|
||||
checkData.setDataType(channelListDTO.getDataType());
|
||||
checkData.setValueType(channelListDTO.getValueType());
|
||||
info.add(checkData);
|
||||
}
|
||||
}
|
||||
|
||||
private void inHarmCheck(List<PqScriptDtlsParam.CheckData> info, PqScriptDtlsParam.CheckData channelListDTO, List<PqScriptDtlsParam.ChannelListDTO> uList) {
|
||||
PqScriptDtlsParam.CheckData checkData;
|
||||
for (PqScriptDtlsParam.ChannelListDTO listDTO : uList) {
|
||||
List<PqScriptDtlsParam.ChannelListDTO.InharmModel> inharmList = listDTO.getInharmList();
|
||||
if(CollUtil.isNotEmpty(inharmList)){
|
||||
for (PqScriptDtlsParam.ChannelListDTO.InharmModel inharmModel : inharmList) {
|
||||
checkData=new PqScriptDtlsParam.CheckData();
|
||||
checkData.setErrorFlag(channelListDTO.getErrorFlag());
|
||||
checkData.setEnable(channelListDTO.getEnable());
|
||||
checkData.setValue(inharmModel.getFAmp());
|
||||
checkData.setPhase(listDTO.getChannelType().substring(1,2));
|
||||
checkData.setHarmNum(inharmModel.getInharm());
|
||||
checkData.setDataType(channelListDTO.getDataType());
|
||||
checkData.setValueType(channelListDTO.getValueType());
|
||||
info.add(checkData);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void harmCheck(List<PqScriptDtlsParam.CheckData> info, PqScriptDtlsParam.CheckData channelListDTO, List<PqScriptDtlsParam.ChannelListDTO> uList) {
|
||||
PqScriptDtlsParam.CheckData checkData;
|
||||
for (PqScriptDtlsParam.ChannelListDTO listDTO : uList) {
|
||||
List<PqScriptDtlsParam.ChannelListDTO.HarmModel> harmList = listDTO.getHarmList();
|
||||
if(CollUtil.isNotEmpty(harmList)){
|
||||
for (PqScriptDtlsParam.ChannelListDTO.HarmModel harmModel : harmList) {
|
||||
checkData=new PqScriptDtlsParam.CheckData();
|
||||
checkData.setErrorFlag(channelListDTO.getErrorFlag());
|
||||
checkData.setEnable(channelListDTO.getEnable());
|
||||
checkData.setValue(harmModel.getFAmp());
|
||||
checkData.setPhase(listDTO.getChannelType().substring(1,2));
|
||||
checkData.setHarmNum(harmModel.getHarm());
|
||||
checkData.setDataType(channelListDTO.getDataType());
|
||||
checkData.setValueType(channelListDTO.getValueType());
|
||||
info.add(checkData);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Boolean saveCheck() {
|
||||
return null;
|
||||
@@ -373,7 +599,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
||||
queryWrapper.selectAll(PqScriptDtls.class)
|
||||
.selectAs(DictTree::getCode, PqScriptDtls::getScriptCode)
|
||||
.leftJoin(DictTree.class, DictTree::getId, PqScriptDtls::getScriptType)
|
||||
.eq(StrUtil.isNotBlank(param.getScriptType()), PqScriptDtls::getScriptType, param.getScriptSubType())
|
||||
.eq(StrUtil.isNotBlank(param.getScriptType()), PqScriptDtls::getScriptType, param.getScriptType())
|
||||
.eq(StrUtil.isNotBlank(param.getScriptSubType()), PqScriptDtls::getScriptSubType, param.getScriptSubType())
|
||||
// .eq(PqScriptDtls::getIndex, 1)
|
||||
// .le(PqScriptDtls::getIndex, 30)
|
||||
|
||||
@@ -0,0 +1,145 @@
|
||||
package com.njcn.gather.script.util;
|
||||
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
|
||||
/**
|
||||
* @author wr
|
||||
* @description
|
||||
* @date 2025/2/19 14:00
|
||||
*/
|
||||
public class UnbanUtil {
|
||||
|
||||
static class Complex {
|
||||
double real;
|
||||
double imag;
|
||||
|
||||
Complex(double real, double imag) {
|
||||
this.real = real;
|
||||
this.imag = imag;
|
||||
}
|
||||
|
||||
Complex add(Complex other) {
|
||||
return new Complex(this.real + other.real, this.imag + other.imag);
|
||||
}
|
||||
|
||||
Complex multiply(Complex other) {
|
||||
double newReal = this.real * other.real - this.imag * other.imag;
|
||||
double newImag = this.real * other.imag + this.imag * other.real;
|
||||
return new Complex(newReal, newImag);
|
||||
}
|
||||
|
||||
Complex divideBy3() {
|
||||
return new Complex(this.real / 3.0, this.imag / 3.0);
|
||||
}
|
||||
|
||||
double magnitude() {
|
||||
return Math.sqrt(real * real + imag * imag);
|
||||
}
|
||||
|
||||
// 定义旋转因子
|
||||
static final Complex J120 = new Complex(-0.5, Math.sqrt(3) / 2);
|
||||
static final Complex J_MINUS_120 = new Complex(-0.5, -Math.sqrt(3) / 2);
|
||||
}
|
||||
|
||||
public static Complex[] calculateSequenceComponents(Complex Ua, Complex Ub, Complex Uc) {
|
||||
// 计算正序分量
|
||||
Complex temp1 = Ua.add(Ub.multiply(Complex.J_MINUS_120).add(Uc.multiply(Complex.J120)));
|
||||
Complex U1 = temp1.divideBy3();
|
||||
|
||||
// 计算负序分量
|
||||
Complex temp2 = Ua.add(Ub.multiply(Complex.J120).add(Uc.multiply(Complex.J_MINUS_120)));
|
||||
Complex U2 = temp2.divideBy3();
|
||||
|
||||
// 计算零序分量
|
||||
Complex temp0 = Ua.add(Ub).add(Uc);
|
||||
Complex U0 = temp0.divideBy3();
|
||||
|
||||
return new Complex[]{U1, U2, U0};
|
||||
}
|
||||
|
||||
public static double calculateNegativeSequenceImbalance(Complex U1, Complex U2) {
|
||||
double U1Mag = U1.magnitude();
|
||||
double U2Mag = U2.magnitude();
|
||||
return (U2Mag / U1Mag) * 100.0;
|
||||
}
|
||||
|
||||
public static double calculateZeroSequenceImbalance(Complex U1, Complex U0) {
|
||||
double U1Mag = U1.magnitude();
|
||||
double U0Mag = U0.magnitude();
|
||||
return (U0Mag / U1Mag) * 100.0;
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
// 输入三相电压的幅值和相角
|
||||
double Ua0 = 220.0, thetaA = 0.0; // A相
|
||||
double Ub0 = 220.0, thetaB = -120.0; // B相
|
||||
double Uc0 = 220.0, thetaC = 120.0; // C相
|
||||
|
||||
// 转换为复数形式
|
||||
Complex Ua = new Complex(
|
||||
Ua0 * Math.cos(thetaA * Math.PI / 180.0),
|
||||
Ua0 * Math.sin(thetaA * Math.PI / 180.0)
|
||||
);
|
||||
Complex Ub = new Complex(
|
||||
Ub0 * Math.cos(thetaB * Math.PI / 180.0),
|
||||
Ub0 * Math.sin(thetaB * Math.PI / 180.0)
|
||||
);
|
||||
Complex Uc = new Complex(
|
||||
Uc0 * Math.cos(thetaC * Math.PI / 180.0),
|
||||
Uc0 * Math.sin(thetaC * Math.PI / 180.0)
|
||||
);
|
||||
|
||||
// 计算序分量
|
||||
Complex[] components = calculateSequenceComponents(Ua, Ub, Uc);
|
||||
Complex U1 = components[0];
|
||||
Complex U2 = components[1];
|
||||
Complex U0 = components[2];
|
||||
|
||||
// 输出结果
|
||||
System.out.printf("正序分量 U1: %.2f + j%.2f%n", U1.real, U1.imag);
|
||||
System.out.printf("负序分量 U2: %.2f + j%.2f%n", U2.real, U2.imag);
|
||||
System.out.printf("零序分量 U0: %.2f + j%.2f%n", U0.real, U0.imag);
|
||||
|
||||
// 计算不平衡度
|
||||
double negativeImbalance = calculateNegativeSequenceImbalance(U1, U2);
|
||||
double zeroImbalance = calculateZeroSequenceImbalance(U1, U0);
|
||||
|
||||
System.out.printf("负序不平衡度: %.2f%%%n", negativeImbalance);
|
||||
System.out.printf("零序不平衡度: %.2f%%%n", zeroImbalance);
|
||||
}
|
||||
|
||||
// 输入三相电压的幅值和相角
|
||||
public static double calculateUnbalance(double Ua0, double thetaA,
|
||||
double Ub0, double thetaB,
|
||||
double Uc0, double thetaC) {
|
||||
|
||||
|
||||
// 转换为复数形式
|
||||
Complex Ua = new Complex(
|
||||
Ua0 * Math.cos(thetaA * Math.PI / 180.0),
|
||||
Ua0 * Math.sin(thetaA * Math.PI / 180.0)
|
||||
);
|
||||
Complex Ub = new Complex(
|
||||
Ub0 * Math.cos(thetaB * Math.PI / 180.0),
|
||||
Ub0 * Math.sin(thetaB * Math.PI / 180.0)
|
||||
);
|
||||
Complex Uc = new Complex(
|
||||
Uc0 * Math.cos(thetaC * Math.PI / 180.0),
|
||||
Uc0 * Math.sin(thetaC * Math.PI / 180.0)
|
||||
);
|
||||
|
||||
// 计算序分量
|
||||
Complex[] components = calculateSequenceComponents(Ua, Ub, Uc);
|
||||
Complex U1 = components[0];
|
||||
Complex U2 = components[1];
|
||||
Complex U0 = components[2];
|
||||
|
||||
// 输出结果
|
||||
System.out.printf("正序分量 U1: %.2f + j%.2f%n", U1.real, U1.imag);
|
||||
System.out.printf("负序分量 U2: %.2f + j%.2f%n", U2.real, U2.imag);
|
||||
System.out.printf("零序分量 U0: %.2f + j%.2f%n", U0.real, U0.imag);
|
||||
|
||||
// 计算不平衡度
|
||||
return NumberUtil.round(calculateNegativeSequenceImbalance(U1, U2), 2).doubleValue();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user