高级算法特征值,暂降事件范围分析代码提交
This commit is contained in:
@@ -28,7 +28,9 @@ public enum AdvanceResponseEnum {
|
||||
|
||||
USER_DATA_P_NODE_PARAMETER_ERROR("A0101","无用采用户或所有用户的完整性均不满足条件"),
|
||||
|
||||
RESPONSIBILITY_PARAMETER_ERROR("A0101","调用接口程序计算失败,参数非法")
|
||||
RESPONSIBILITY_PARAMETER_ERROR("A0101","调用接口程序计算失败,参数非法"),
|
||||
|
||||
EVENT_EMPTY("A0102","没有查询到未分析事件")
|
||||
;
|
||||
|
||||
private final String code;
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.njcn.advance.enums;
|
||||
|
||||
/**
|
||||
* @Author: Sunwei 【sunW2016@163.com】
|
||||
* @Description: 高级分析返回结果
|
||||
* @Date: Create in 9:02 2018/3/6
|
||||
* @Modified By:
|
||||
*/
|
||||
public enum EnumEvt {
|
||||
EVT_NUM("evt_num", "高级算法返回事件个数"), EVT_BUF("evt_buf", "高级算法返回数据"), QVVR_TYPE("qvvr_type", "暂降类型"), POW_A("POW_a",
|
||||
"A相波形起始点"), POW_B("POW_b", "B相波形起始点"), POW_C("POW_c", "C相波形起始点"), SEG_T_IDX("SEG_T_idx",
|
||||
"修正分段位置"), SEG_T_NUM("SEG_T_num", "分段数目"), SEG_RMS_T_NUM("SEG_RMS_T_num", "有效值分段数目"), SEG_RMS_T_IDX(
|
||||
"SEG_RMS_T_idx", "有效值分段位置"), UA_MIN("ua_min", "A相电压特征值"), UB_MIN("ub_min",
|
||||
"B相电压特征值"), UC_MIN("uc_min", "C相电压特征值"), U3_MIN("u3_min",
|
||||
"三相电压特征值"), U_MIN_NUM("u_min_num", "特征值个数"), ORDER_MIN_IDX("order_min_idx",
|
||||
"最小值位置"), HOLD_TIME_RMS("hold_time_rms", "有效值算法持续时间"), HOLD_TIME_DQ(
|
||||
"hold_time_dq",
|
||||
"dq变换算法持续时间"), VOLTAGECHANGE_VA("Voltagechange_Va",
|
||||
"A相跳变段电压变化率"), VOLTAGECHANGE_VB("Voltagechange_Vb",
|
||||
"B相跳变段电压变化率"), VOLTAGECHANGE_VC("Voltagechange_Vc",
|
||||
"C相跳变段电压变化率"), ANGLE_DIFF_AP("angle_diff_ap",
|
||||
"A相相位正跳变"), ANGLE_DIFF_BP("angle_diff_bp",
|
||||
"B相相位正跳变"), ANGLE_DIFF_CP("angle_diff_cp",
|
||||
"C相相位正跳变"), ANGLE_DIFF_AN("angle_diff_an",
|
||||
"A相相位负跳变"), ANGLE_DIFF_BN("angle_diff_bn",
|
||||
"B相相位负跳变"), ANGLE_DIFF_CN("angle_diff_cn",
|
||||
"C相相位负跳变"), BPH_MAX_VALUE("bph_max_value",
|
||||
"不平衡度"), QVVR_CATA_CAUSE("qvvr_cata_cause",
|
||||
"暂降原因"), QVVR_PHASETYPE("qvvr_phasetype",
|
||||
"暂降相别"), QVVR_CATA_TYPE("qvvr_cata_type",
|
||||
"暂降类型"), POWER_QVVR_BEFORE_BUF("power_qvvr_before_buf",
|
||||
"暂态前基波功率参数"),POWER_QVVR_AFTER_BUF("power_qvvr_after_buf",
|
||||
"暂态前基波功率参数"),FUND_P("Fund_P",
|
||||
"基波有功功率"),FUND_Q("Fund_Q",
|
||||
"基波无功功率"),FUND_S("Fund_S",
|
||||
"基波视在功率"),QVVR_DIRECTION_INFO("qvvr_direction_info",
|
||||
"暂降源定位特征参数"),TRIG_TIME("trig_time",
|
||||
"暂降触发时刻"),QVVR_BEFORE_RMS("qvvr_before_rms",
|
||||
"暂降前基波有效值"),QVVR_BEFORE_ZK("qvvr_before_zk",
|
||||
"暂降前基波阻抗值"),QVVR_OCCUR_RMS("qvvr_occur_rms",
|
||||
"暂降发生时基波有效值"),QVVR_OCCUR_ZK("qvvr_occur_zk",
|
||||
"暂降发生时基波阻抗值"),QVVR_POS_INFO("qvvr_pos_info",
|
||||
"暂降源与监测位置关系"),QVVR_UTBL_INFO("qvvr_utbl_info",
|
||||
"突变量参数"),ENTER("\n",
|
||||
"回车换行"), QUOTATION("\"",
|
||||
"双引号"), NEWLINE("\n\t",
|
||||
"换行Tab"), TAB("\t",
|
||||
"tab");
|
||||
/**
|
||||
* 字段描述
|
||||
*/
|
||||
private String description;
|
||||
|
||||
/**
|
||||
* 字段值
|
||||
*/
|
||||
private String property;
|
||||
|
||||
EnumEvt(String property, String description) {
|
||||
this.description = description;
|
||||
this.property = property;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
public String getProperty() {
|
||||
return property;
|
||||
}
|
||||
|
||||
public static String setEvtProperty(String property) {
|
||||
return QUOTATION.getProperty() + property + QUOTATION.getProperty() + ":";
|
||||
}
|
||||
|
||||
public static String setEnter(String s, int lineNumber) {
|
||||
return s += "," + ENTER.getProperty() + setTab(lineNumber);
|
||||
}
|
||||
|
||||
public static String setClose(int lineNumber) {
|
||||
String s = ENTER.getProperty();
|
||||
s += setTab(lineNumber);
|
||||
return s + "}";
|
||||
}
|
||||
|
||||
public static String setTab(int count) {
|
||||
String string = "";
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
string += TAB.getProperty();
|
||||
}
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
public static String setNewLine() {
|
||||
return "{" + NEWLINE.getProperty();
|
||||
}
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
package com.njcn.advance.pojo.bo;
|
||||
|
||||
/**
|
||||
* pqs
|
||||
*
|
||||
* @author cdf
|
||||
* @date 2023/6/20
|
||||
*/
|
||||
public interface FinalData {
|
||||
|
||||
/**
|
||||
* 暂降事件按开始时间归集门槛10秒
|
||||
*/
|
||||
int TIME_THRESHOLD = 10;
|
||||
//分组的最大组数
|
||||
int MAX_GROUP_NUM = 1000;
|
||||
//类别数
|
||||
int MAX_CATA_NUM = 7;
|
||||
//最大事件个数
|
||||
int MAX_EVT_NUM = 1000;
|
||||
//三相故障
|
||||
int QVVR_TYPE_THREE = 9;
|
||||
//故障类型未知
|
||||
int QVVR_TYPE_UNKNOWN = 10;
|
||||
//节点不在网络拓扑中
|
||||
int QVVR_TYPE_OUTOFRANGE = -1;
|
||||
int DATA_INF = -1;
|
||||
int EVT_TYPE_NUM = 6;//故障类型数
|
||||
int MAX_PATH_NUM = 50;//最大路径数
|
||||
int NODE_NUM = -1;//输入节点数
|
||||
|
||||
// 暂降综合评估算法
|
||||
int CLUSER_NUM = 4; // 系统中各监测点分类后的代表节点
|
||||
int MAX_LINE_NUM = 1000; // 监测点最多个数
|
||||
int MAX_STA_NUM = 120; // 支持的子系统个数
|
||||
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.njcn.advance.pojo.bo;
|
||||
|
||||
import com.njcn.advance.pojo.dto.QtIdx;
|
||||
import com.njcn.advance.pojo.dto.relevent.FinalData;
|
||||
import com.njcn.advance.pojo.dto.relevent.QtIdx;
|
||||
import com.sun.jna.Structure;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.njcn.advance.pojo.bo;
|
||||
|
||||
import com.njcn.advance.pojo.dto.relevent.FinalData;
|
||||
import com.sun.jna.Structure;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.njcn.advance.pojo.bo;
|
||||
|
||||
import com.njcn.advance.pojo.dto.relevent.FinalData;
|
||||
import com.sun.jna.Structure;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.njcn.advance.pojo.dto;
|
||||
|
||||
import com.njcn.advance.pojo.dto.relevent.QtIdx;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
package com.njcn.advance.pojo.dto.relevent;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* pqs
|
||||
*
|
||||
* @author cdf
|
||||
* @date 2023/7/20
|
||||
*/
|
||||
@Data
|
||||
public class EntityGroupData {
|
||||
private int idx[];
|
||||
private int all_evt_num;
|
||||
private int evt_in_num;
|
||||
private int evt_out_num;
|
||||
private int evt_res_num;
|
||||
|
||||
private int Matrixcata[][];
|
||||
|
||||
private EntityGroupEvtData in_buf[];
|
||||
private EntityGroupEvtData out_buf[];
|
||||
private EntityGroupEvtData res_buf[];
|
||||
private EntityGroupEvtData grp_buf[][];
|
||||
|
||||
private int grp_num[];
|
||||
private int grp_all_num;
|
||||
private EntityGroupEvtData grp_cata_buf[][][];
|
||||
private int grp_cata_num[][];
|
||||
|
||||
public EntityGroupData() {
|
||||
idx = new int[FinalData.MAX_EVT_NUM];
|
||||
Matrixcata = new int[FinalData.MAX_CATA_NUM][FinalData.MAX_EVT_NUM];
|
||||
in_buf = new EntityGroupEvtData[FinalData.MAX_EVT_NUM];
|
||||
out_buf = new EntityGroupEvtData[FinalData.MAX_EVT_NUM];
|
||||
res_buf = new EntityGroupEvtData[FinalData.MAX_EVT_NUM];
|
||||
grp_buf = new EntityGroupEvtData[FinalData.MAX_GROUP_NUM][FinalData.MAX_EVT_NUM];
|
||||
grp_num = new int[FinalData.MAX_GROUP_NUM];
|
||||
grp_cata_buf = new EntityGroupEvtData[FinalData.MAX_GROUP_NUM][FinalData.MAX_CATA_NUM
|
||||
+ 2][FinalData.MAX_EVT_NUM];
|
||||
grp_cata_num = new int[FinalData.MAX_GROUP_NUM][FinalData.MAX_CATA_NUM + 2];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.njcn.advance.pojo.dto.relevent;
|
||||
|
||||
import com.njcn.advance.pojo.dto.SagEvent;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class EntityGroupEvtData implements Cloneable,Comparable<EntityGroupEvtData> {
|
||||
|
||||
//逻辑节点序号
|
||||
private int node;
|
||||
//事件开始时间时标
|
||||
private int start_time;
|
||||
//类别
|
||||
private int cata;
|
||||
//标注类别
|
||||
private int cata2;
|
||||
//物理节点
|
||||
private String nodePhysics;
|
||||
|
||||
private SagEvent sagEvent;
|
||||
|
||||
private String sagReason;
|
||||
|
||||
|
||||
public Object objClone() {
|
||||
try {
|
||||
return clone();
|
||||
} catch (CloneNotSupportedException e) {
|
||||
return new EntityGroupEvtData(null, -1, -1, -1,null,null);
|
||||
}
|
||||
}
|
||||
|
||||
public EntityGroupEvtData(String nodePhysics, int start_time, int cata, int cata2, SagEvent sagEvent, String sagReason) {
|
||||
this.nodePhysics = nodePhysics;
|
||||
this.start_time = start_time;
|
||||
this.cata = cata;
|
||||
this.cata2 = cata2;
|
||||
this.sagEvent = sagEvent;
|
||||
this.sagReason = sagReason;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int compareTo(EntityGroupEvtData obj) {
|
||||
if(this.getStart_time() < obj.getStart_time()){
|
||||
return -1;
|
||||
}else if(this.getStart_time() > obj.getStart_time()){
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.njcn.advance.pojo.dto.relevent;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class EntityLogic {
|
||||
//物理隔绝变压器策略GUID
|
||||
private String tPIndex;
|
||||
//变压器逻辑上节点
|
||||
private String node_h;
|
||||
//变压器逻辑下节点
|
||||
private String node_l;
|
||||
// 变压器连接方式
|
||||
private Integer type;
|
||||
//变压器物理上节点
|
||||
private String nodeBefore;
|
||||
//变压器物理下节点
|
||||
private String nodeNext;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package com.njcn.advance.pojo.dto.relevent;
|
||||
|
||||
import com.njcn.advance.pojo.dto.relevent.FinalData;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Arrays;
|
||||
|
||||
public class EntityMtrans implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
private int Matrixcata0[][];
|
||||
private int Matrixcata1[][];
|
||||
private int Mtrans[][];
|
||||
private int possiable_path[][];
|
||||
private int path_num;
|
||||
|
||||
public EntityMtrans() {
|
||||
super();
|
||||
Mtrans = new int[FinalData.NODE_NUM][FinalData.NODE_NUM];
|
||||
Matrixcata0 = new int[FinalData.EVT_TYPE_NUM][FinalData.NODE_NUM];
|
||||
Matrixcata1 = new int[FinalData.EVT_TYPE_NUM][FinalData.NODE_NUM];
|
||||
possiable_path = new int[FinalData.MAX_PATH_NUM][FinalData.NODE_NUM + 1];
|
||||
path_num = 0;
|
||||
}
|
||||
|
||||
public int[][] getMatrixcata0() {
|
||||
return Matrixcata0;
|
||||
}
|
||||
|
||||
public void setMatrixcata0(int[][] matrixcata0) {
|
||||
Matrixcata0 = matrixcata0;
|
||||
}
|
||||
|
||||
public int[][] getMatrixcata1() {
|
||||
return Matrixcata1;
|
||||
}
|
||||
|
||||
public void setMatrixcata1(int[][] matrixcata1) {
|
||||
Matrixcata1 = matrixcata1;
|
||||
}
|
||||
|
||||
public int[][] getMtrans() {
|
||||
return Mtrans;
|
||||
}
|
||||
|
||||
public void setMtrans(int[][] mtrans) {
|
||||
Mtrans = mtrans;
|
||||
}
|
||||
|
||||
public int[][] getPossiable_path() {
|
||||
return possiable_path;
|
||||
}
|
||||
|
||||
public void setPossiable_path(int[][] possiable_path) {
|
||||
this.possiable_path = possiable_path;
|
||||
}
|
||||
|
||||
public int getPath_num() {
|
||||
return path_num;
|
||||
}
|
||||
|
||||
public void setPath_num(int path_num) {
|
||||
this.path_num = path_num;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "EntityMtrans [Matrixcata0=" + Arrays.toString(Matrixcata0) + ", Matrixcata1="
|
||||
+ Arrays.toString(Matrixcata1) + ", Mtrans=" + Arrays.toString(Mtrans) + ", possiable_path="
|
||||
+ Arrays.toString(possiable_path) + ", path_num=" + path_num + "]";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,123 @@
|
||||
package com.njcn.advance.pojo.dto.relevent;
|
||||
|
||||
import com.njcn.advance.pojo.dto.SagEvent;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/*
|
||||
*一个归一化事件包含多个事件(一对多)
|
||||
*indexEventAss:事件关联分析表Guid
|
||||
*time:归一化中第一个时间
|
||||
*describe:关联事件描述
|
||||
*bRange:是否进行范围分析
|
||||
*indexUser:用户表Guid
|
||||
*updateTime:更新时间
|
||||
*state:数据状态
|
||||
*name:关联事件名称
|
||||
*list:属于该归一化事件的暂降事件
|
||||
*strTime:字符串时间
|
||||
*/
|
||||
@Data
|
||||
public class EventAssObj implements Serializable {
|
||||
private String indexEventAss;
|
||||
private LocalDateTime time;
|
||||
private String describe;
|
||||
private int bRange;
|
||||
private String indexUser;
|
||||
private LocalDateTime updateTime = LocalDateTime.now();
|
||||
private int state;
|
||||
private String name;
|
||||
private String strTime;
|
||||
private List<SagEvent> list;
|
||||
|
||||
public String getStrTime() {
|
||||
return strTime;
|
||||
}
|
||||
|
||||
public void setStrTime(String strTime) {
|
||||
this.strTime = strTime;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getIndexEventAss() {
|
||||
return indexEventAss;
|
||||
}
|
||||
|
||||
public void setIndexEventAss(String indexEventAss) {
|
||||
this.indexEventAss = indexEventAss;
|
||||
}
|
||||
|
||||
public LocalDateTime getTime() {
|
||||
return time;
|
||||
}
|
||||
|
||||
public void setTime(LocalDateTime time) {
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
public String getDescribe() {
|
||||
return describe;
|
||||
}
|
||||
|
||||
public void setDescribe(String describe) {
|
||||
this.describe = describe;
|
||||
}
|
||||
|
||||
public int getbRange() {
|
||||
return bRange;
|
||||
}
|
||||
|
||||
public void setbRange(int bRange) {
|
||||
this.bRange = bRange;
|
||||
}
|
||||
|
||||
public String getIndexUser() {
|
||||
return indexUser;
|
||||
}
|
||||
|
||||
public void setIndexUser(String indexUser) {
|
||||
this.indexUser = indexUser;
|
||||
}
|
||||
|
||||
public LocalDateTime getUpdateTime() {
|
||||
return updateTime;
|
||||
}
|
||||
|
||||
public void setUpdateTime(LocalDateTime updateTime) {
|
||||
this.updateTime = updateTime;
|
||||
}
|
||||
|
||||
public int getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public void setState(int state) {
|
||||
this.state = state;
|
||||
}
|
||||
|
||||
public List<SagEvent> getList() {
|
||||
return list;
|
||||
}
|
||||
|
||||
public void setList(List<SagEvent> list) {
|
||||
this.list = list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "EventAssObj [indexEventAss=" + indexEventAss + ", time=" + time + ", describe=" + describe + ", bRange="
|
||||
+ bRange + ", indexUser=" + indexUser + ", updateTime=" + updateTime + ", state=" + state + ", name="
|
||||
+ name + ", strTime=" + strTime + ", list=" + list + "]";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.njcn.advance.pojo.dto.relevent;
|
||||
|
||||
public class FinalData {
|
||||
public static final int TIME_THRESHOLD = 10;//暂降事件按开始时间归集门槛10秒
|
||||
public static final int MAX_GROUP_NUM = 1000;//分组的最大组数
|
||||
public static final int MAX_CATA_NUM = 7;//类别数
|
||||
public static final int MAX_EVT_NUM = 1000;//最大事件个数
|
||||
|
||||
public static final int QVVR_TYPE_THREE = 9; //三相故障
|
||||
public static final int QVVR_TYPE_UNKNOWN = 10; //故障类型未知
|
||||
public static final int QVVR_TYPE_OUTOFRANGE = -1; //节点不在网络拓扑中
|
||||
public static final int DATA_INF = -1;
|
||||
public static final int EVT_TYPE_NUM = 6;//故障类型数
|
||||
public static final int MAX_PATH_NUM = 50;//最大路径数
|
||||
public static int NODE_NUM;//输入节点数
|
||||
|
||||
// 暂降综合评估算法
|
||||
public static final int CLUSER_NUM = 4; // 系统中各监测点分类后的代表节点
|
||||
public static final int MAX_LINE_NUM = 1000; // 监测点最多个数
|
||||
public static final int MAX_STA_NUM = 120; // 支持的子系统个数
|
||||
|
||||
static {
|
||||
NODE_NUM = -1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package com.njcn.advance.pojo.dto.relevent;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* pqs
|
||||
*终端监测点名称信息
|
||||
* nameGD:供电公司名称
|
||||
* nameBD:变电站名称
|
||||
* nameSubV:母线名称
|
||||
* namePoint:监测点名称
|
||||
* indexPoint:监测点的唯一标识
|
||||
*
|
||||
* 新增add
|
||||
* xuyang
|
||||
* 2021.05.11
|
||||
* 监测点电压等级:monitorVoltageLevel
|
||||
* 监测点干扰源类型终:monitorLoadType
|
||||
*/
|
||||
@Data
|
||||
public class PlantInfo implements Serializable {
|
||||
private String indexPoint;
|
||||
private String nameGD;
|
||||
private String nameBD;
|
||||
private String nameSubV;
|
||||
private String namePoint;
|
||||
private String monitorVoltageLevel;
|
||||
private String monitorLoadType;
|
||||
private String objName;
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.njcn.advance.pojo.dto;
|
||||
package com.njcn.advance.pojo.dto.relevent;
|
||||
|
||||
import com.sun.jna.Structure;
|
||||
import lombok.Data;
|
||||
@@ -0,0 +1,423 @@
|
||||
package com.njcn.advance.pojo.dto;
|
||||
|
||||
import com.njcn.advance.pojo.dto.relevent.PlantInfo;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* pqs
|
||||
*
|
||||
* @author cdf
|
||||
* @date 2023/7/21
|
||||
*/
|
||||
public class SagEvent implements Comparable<SagEvent>, Serializable {
|
||||
// 事件的唯一标识
|
||||
private String indexEventDetail;
|
||||
|
||||
private Integer waveType;
|
||||
// 暂降事件发生时间
|
||||
private LocalDateTime sagTime;
|
||||
|
||||
// 暂降事件发生时间毫秒
|
||||
private Integer msec;
|
||||
|
||||
// 事件描述
|
||||
private String events;
|
||||
|
||||
// 持续时间
|
||||
private Float persistTime;
|
||||
|
||||
// 发生暂降事件的监测点层级信息
|
||||
private PlantInfo plantInfo;
|
||||
|
||||
// 拼接sagTime和msec
|
||||
private String strTime;
|
||||
|
||||
// 事件发生时刻的毫秒表示
|
||||
private Long time;
|
||||
|
||||
// 监测点的唯一标识
|
||||
private String indexPoint;
|
||||
|
||||
// 归一化事件的GUID
|
||||
private String indexEventAss;
|
||||
|
||||
// 特征幅值
|
||||
private Float eventValue;
|
||||
|
||||
// 暂降原因
|
||||
private String sagReason;
|
||||
|
||||
// 暂降类型
|
||||
private String sagType;
|
||||
|
||||
// 暂降类型描述
|
||||
private String sagTypeDes;
|
||||
|
||||
public String getSagTypeDes() {
|
||||
return sagTypeDes;
|
||||
}
|
||||
|
||||
public void setSagTypeDes(String sagTypeDes) {
|
||||
this.sagTypeDes = sagTypeDes;
|
||||
}
|
||||
|
||||
// 暂降深度
|
||||
private String strEventValue;
|
||||
private String strPersist;
|
||||
|
||||
// 事件是否经过高级算法处理(0-未处理,1-已处理,默认为0)
|
||||
private Integer dealFlag;
|
||||
|
||||
// 事件是否经过高级算法处理中文描述(已处理、未处理)
|
||||
private String dealFlagDescription;
|
||||
|
||||
// 录波文件是否存在(0-不存在,1-存在,默认为0)
|
||||
private Integer fileFlag;
|
||||
|
||||
// 录波文件是否存在中文描述(存在、不存在)
|
||||
private String fileFlagDescription;
|
||||
|
||||
// 高级算法返回dq持续时间
|
||||
private Float dqTime;
|
||||
|
||||
// 高级算法处理事件个数记录
|
||||
private Integer number;
|
||||
|
||||
// 归一化处理更新时间
|
||||
private LocalDateTime dealTime;
|
||||
|
||||
// 高级算法的对应关系
|
||||
private int cata;
|
||||
|
||||
// 第一次事件的触发时间
|
||||
private Date firstTime;
|
||||
|
||||
// 第一次事件的暂降类型
|
||||
private String firstType;
|
||||
|
||||
// 第一次事件的触发时间毫秒
|
||||
private Integer firstMs;
|
||||
|
||||
// 第一次事件触发时间date->毫秒
|
||||
private Long firstTimeMills;
|
||||
|
||||
// 暂降严重度
|
||||
private Float severity;
|
||||
|
||||
// 排序方式
|
||||
private int sortType = 0; // 初始化默认为0-按照时间排序 新增1-按暂降严重度排序 2-暂降发生时刻排序 3-先根据电压等级排序,如果相等再按照暂降幅值排序
|
||||
|
||||
//电压等级
|
||||
private Double voltage;
|
||||
|
||||
//监测点对象名称
|
||||
private String objName;
|
||||
|
||||
public String getObjName() {
|
||||
return objName;
|
||||
}
|
||||
|
||||
public void setObjName(String objName) {
|
||||
this.objName = objName;
|
||||
}
|
||||
|
||||
public Integer getWaveType() {
|
||||
return waveType;
|
||||
}
|
||||
|
||||
public void setWaveType(Integer waveType) {
|
||||
this.waveType = waveType;
|
||||
}
|
||||
|
||||
private String strVoltage;
|
||||
|
||||
public Double getVoltage() {
|
||||
return voltage;
|
||||
}
|
||||
|
||||
public void setVoltage(Double voltage) {
|
||||
this.voltage = voltage;
|
||||
}
|
||||
|
||||
public String getStrVoltage() {
|
||||
return strVoltage;
|
||||
}
|
||||
|
||||
public void setStrVoltage(String strVoltage) {
|
||||
//转为double
|
||||
strVoltage = strVoltage.toUpperCase();
|
||||
String str = strVoltage.substring(0, strVoltage.indexOf("KV"));
|
||||
this.voltage = Double.parseDouble(str);
|
||||
}
|
||||
|
||||
public int getSortType() {
|
||||
return sortType;
|
||||
}
|
||||
|
||||
public void setSortType(int sortType) {
|
||||
this.sortType = sortType;
|
||||
}
|
||||
|
||||
public Float getSeverity() {
|
||||
return severity;
|
||||
}
|
||||
|
||||
public void setSeverity(Float severity) {
|
||||
this.severity = severity;
|
||||
}
|
||||
|
||||
public Long getFirstTimeMills() {
|
||||
return firstTimeMills;
|
||||
}
|
||||
|
||||
public void setFirstTimeMills(Long firstTimeMills) {
|
||||
this.firstTimeMills = firstTimeMills;
|
||||
}
|
||||
|
||||
public Integer getFirstMs() {
|
||||
return firstMs;
|
||||
}
|
||||
|
||||
public void setFirstMs(Integer firstMs) {
|
||||
this.firstMs = firstMs;
|
||||
}
|
||||
|
||||
public Date getFirstTime() {
|
||||
return firstTime;
|
||||
}
|
||||
|
||||
public void setFirstTime(Date firstTime) {
|
||||
this.firstTime = firstTime;
|
||||
}
|
||||
|
||||
public String getFirstType() {
|
||||
return firstType;
|
||||
}
|
||||
|
||||
public void setFirstType(String firstType) {
|
||||
this.firstType = firstType;
|
||||
}
|
||||
|
||||
public Integer getFileFlag() {
|
||||
return fileFlag;
|
||||
}
|
||||
|
||||
public void setFileFlag(Integer fileFlag) {
|
||||
this.fileFlag = fileFlag;
|
||||
}
|
||||
|
||||
public String getFileFlagDescription() {
|
||||
return fileFlagDescription;
|
||||
}
|
||||
|
||||
public void setFileFlagDescription(String fileFlagDescription) {
|
||||
this.fileFlagDescription = fileFlagDescription;
|
||||
}
|
||||
|
||||
public int getCata() {
|
||||
return cata;
|
||||
}
|
||||
|
||||
public void setCata(int cata) {
|
||||
this.cata = cata;
|
||||
}
|
||||
|
||||
public LocalDateTime getDealTime() {
|
||||
return dealTime;
|
||||
}
|
||||
|
||||
public void setDealTime(LocalDateTime dealTime) {
|
||||
this.dealTime = dealTime;
|
||||
}
|
||||
|
||||
public Float getDqTime() {
|
||||
return dqTime;
|
||||
}
|
||||
|
||||
public void setDqTime(Float dqTime) {
|
||||
this.dqTime = dqTime;
|
||||
}
|
||||
|
||||
public Integer getNumber() {
|
||||
return number;
|
||||
}
|
||||
|
||||
public void setNumber(Integer number) {
|
||||
this.number = number;
|
||||
}
|
||||
|
||||
public void setDealFlagDescription(String dealFlagDescription) {
|
||||
this.dealFlagDescription = dealFlagDescription;
|
||||
}
|
||||
|
||||
public String getDealFlagDescription() {
|
||||
return dealFlagDescription;
|
||||
}
|
||||
|
||||
public Integer getDealFlag() {
|
||||
return dealFlag;
|
||||
}
|
||||
|
||||
public void setDealFlag(Integer dealFlag) {
|
||||
this.dealFlag = dealFlag;
|
||||
}
|
||||
|
||||
public String getIndexEventDetail() {
|
||||
return indexEventDetail;
|
||||
}
|
||||
|
||||
public void setIndexEventDetail(String indexEventDetail) {
|
||||
this.indexEventDetail = indexEventDetail;
|
||||
}
|
||||
|
||||
public LocalDateTime getSagTime() {
|
||||
return sagTime;
|
||||
}
|
||||
|
||||
public void setSagTime(LocalDateTime sagTime) {
|
||||
this.sagTime = sagTime;
|
||||
}
|
||||
|
||||
public Integer getMsec() {
|
||||
return msec;
|
||||
}
|
||||
|
||||
public void setMsec(Integer msec) {
|
||||
this.msec = msec;
|
||||
}
|
||||
|
||||
public String getEvents() {
|
||||
return events;
|
||||
}
|
||||
|
||||
public void setEvents(String events) {
|
||||
this.events = events;
|
||||
}
|
||||
|
||||
public Float getPersistTime() {
|
||||
return persistTime;
|
||||
}
|
||||
|
||||
public void setPersistTime(Float persistTime) {
|
||||
if (persistTime == null) {
|
||||
this.persistTime = 0f;
|
||||
return;
|
||||
}
|
||||
|
||||
float f1 = (float) (Math.round(persistTime.floatValue() * 1000)) / 1000;
|
||||
this.persistTime = new Float(f1);
|
||||
}
|
||||
|
||||
public PlantInfo getPlantInfo() {
|
||||
return plantInfo;
|
||||
}
|
||||
|
||||
public void setPlantInfo(PlantInfo plantInfo) {
|
||||
this.plantInfo = plantInfo;
|
||||
}
|
||||
|
||||
public String getStrTime() {
|
||||
return strTime;
|
||||
}
|
||||
|
||||
public void setStrTime(String strTime) {
|
||||
this.strTime = strTime;
|
||||
}
|
||||
|
||||
public Long getTime() {
|
||||
return time;
|
||||
}
|
||||
|
||||
public void setTime(Long time) {
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
public String getIndexPoint() {
|
||||
return indexPoint;
|
||||
}
|
||||
|
||||
public void setIndexPoint(String indexPoint) {
|
||||
this.indexPoint = indexPoint;
|
||||
}
|
||||
|
||||
public String getIndexEventAss() {
|
||||
return indexEventAss;
|
||||
}
|
||||
|
||||
public void setIndexEventAss(String indexEventAss) {
|
||||
this.indexEventAss = indexEventAss;
|
||||
}
|
||||
|
||||
public Float getEventValue() {
|
||||
return eventValue;
|
||||
}
|
||||
|
||||
public void setEventValue(Float eventValue) {
|
||||
if (eventValue == null) {
|
||||
this.eventValue = 0f;
|
||||
return;
|
||||
}
|
||||
|
||||
this.eventValue = eventValue;
|
||||
}
|
||||
|
||||
public String getSagReason() {
|
||||
return sagReason;
|
||||
}
|
||||
|
||||
public void setSagReason(String sagReason) {
|
||||
this.sagReason = sagReason;
|
||||
}
|
||||
|
||||
public String getSagType() {
|
||||
return sagType;
|
||||
}
|
||||
|
||||
public void setSagType(String sagType) {
|
||||
this.sagType = sagType;
|
||||
}
|
||||
|
||||
public String getStrEventValue() {
|
||||
return strEventValue;
|
||||
}
|
||||
|
||||
public void setStrEventValue(String strEventValue) {
|
||||
this.strEventValue = strEventValue;
|
||||
}
|
||||
|
||||
public String getStrPersist() {
|
||||
return strPersist;
|
||||
}
|
||||
|
||||
public void setStrPersist(String strPersist) {
|
||||
this.strPersist = strPersist;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 根据设定规则进行排序
|
||||
@Override
|
||||
public int compareTo(SagEvent obj) {
|
||||
switch (this.getSortType()) {
|
||||
case 1:
|
||||
return obj.getSeverity().compareTo(this.getSeverity());
|
||||
case 2:
|
||||
return this.getTime().compareTo(obj.getTime());
|
||||
case 3: {
|
||||
if (obj.getVoltage().compareTo(this.getVoltage()) != 0) {
|
||||
return obj.getVoltage().compareTo(this.getVoltage());
|
||||
}
|
||||
else {
|
||||
return this.getEventValue().compareTo(obj.getEventValue());
|
||||
}
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return this.getFirstTimeMills().compareTo(obj.getFirstTimeMills());
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,200 @@
|
||||
package com.njcn.advance.pojo.dto.waveAnalysis;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class AnalyWaveModel {
|
||||
|
||||
/********************************
|
||||
* 解析Comtrate文件相关实体类
|
||||
* @author yexb 转ww C#代码
|
||||
**********************************/
|
||||
|
||||
// 模拟量通道记录类
|
||||
public static class tagOneChannleCfg {
|
||||
// 通道序号
|
||||
public int nIndex;
|
||||
// 通道名称
|
||||
public String szChannleName;
|
||||
// 相位名称
|
||||
public String szPhasicName;
|
||||
// 监视的通道名称
|
||||
public String szMonitoredChannleName;
|
||||
// 通道的单位
|
||||
public String szUnitName;
|
||||
// 通道的系数
|
||||
public float fCoefficent;
|
||||
// 通道的便宜量
|
||||
public float fOffset;
|
||||
// 起始采样时间的偏移量
|
||||
public float fTimeOffset;
|
||||
// 采样值的最小值
|
||||
public int nMin;
|
||||
// 采样值的最大值
|
||||
public int nMax;
|
||||
// 一次变比
|
||||
public float fPrimary;
|
||||
// 二次变比
|
||||
public float fSecondary;
|
||||
// 一次值还是二次值标志
|
||||
public String szValueType;
|
||||
}
|
||||
|
||||
// 数字量通道记录类
|
||||
public static class tagOneChannleCfg_digital {
|
||||
// 通道序号
|
||||
public int nIndex;
|
||||
// 通道名称
|
||||
public String szChannleName;
|
||||
// 相位名称
|
||||
public String szPhasicName;
|
||||
// 监视的通道名称
|
||||
public String szMonitoredChannleName;
|
||||
// 通道的单位
|
||||
public int Initial;
|
||||
|
||||
}
|
||||
|
||||
// 配置文件总类
|
||||
public static class tagComtradeCfg {
|
||||
public int nChannelNum;
|
||||
public int nPhasic;// 模拟量通道的个数 yexibao 2020-12-15
|
||||
public int nAnalogNum;// 模拟量通道的个数 WW 2013-05-15
|
||||
public int nDigitalNum;// 数字量通道的个数 WW 2013-05-15
|
||||
public List<tagOneChannleCfg> OneChannleCfg;
|
||||
public List<tagOneChannleCfg_digital> OneChannleCfgDig;
|
||||
|
||||
public tagComtradeCfg() {
|
||||
OneChannleCfg = new LinkedList<tagOneChannleCfg>();
|
||||
OneChannleCfgDig = new LinkedList<tagOneChannleCfg_digital>();
|
||||
}
|
||||
}
|
||||
|
||||
public static class tagOneRate{
|
||||
// 1秒钟内的采样点数
|
||||
public long nOneSample;
|
||||
// 总采样点数
|
||||
public long nSampleNum;
|
||||
}
|
||||
|
||||
// 采样总结构
|
||||
public static class tagRates {
|
||||
public int nRates;
|
||||
public List<tagOneRate> OneRate;
|
||||
|
||||
public tagRates() {
|
||||
OneRate = new LinkedList<tagOneRate>();
|
||||
}
|
||||
}
|
||||
|
||||
// 采样值结构
|
||||
public static class tagOneValue {
|
||||
// 数据点时间
|
||||
public String szTime;
|
||||
// 数据点序号
|
||||
public int nIndex;
|
||||
// int nValueNum; WW 2013-05-15
|
||||
// 模拟量数据个数
|
||||
public int nAnalogValueNum;
|
||||
// 数字量数据个数
|
||||
public int nDigitalValueNum;
|
||||
// 数据区
|
||||
// float fValue[8];
|
||||
public List<Float> fValue;// WW 2013-05-15 原来的8通道也是仅考虑了单路的情况,如果遇到多路这里会超出
|
||||
public List<Byte> DigitalValue;// WW 2013-05-15
|
||||
|
||||
public tagOneValue() {
|
||||
fValue = new LinkedList<Float>();
|
||||
DigitalValue = new LinkedList<Byte>();
|
||||
}
|
||||
}
|
||||
|
||||
// 采样值总结构
|
||||
public static class tagValue {
|
||||
// 数据个数
|
||||
public int nValueNum;
|
||||
// 数据区
|
||||
public List<tagOneValue> OneValueList;
|
||||
|
||||
public tagValue() {
|
||||
OneValueList = new LinkedList<tagOneValue>();
|
||||
}
|
||||
}
|
||||
|
||||
public static class tagWave {
|
||||
// 标识 1-二次值的事件波形 2-二次值的RMS 3-一次值的事件波形 4-一次值的RMS
|
||||
//标识 5-二次值的事件波形 6-二次值的RMS 7-一次值的事件波形 8-一次值的RMS
|
||||
private int type;
|
||||
// 相别
|
||||
private int phaseType;// 0:A相;1:B相;2:c相
|
||||
// X坐标值
|
||||
private int xvalue;
|
||||
// y坐标值
|
||||
private float yvalue;
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public int getPhaseType() {
|
||||
return phaseType;
|
||||
}
|
||||
|
||||
public void setPhaseType(int phaseType) {
|
||||
this.phaseType = phaseType;
|
||||
}
|
||||
|
||||
public int getXvalue() {
|
||||
return xvalue;
|
||||
}
|
||||
|
||||
public void setXvalue(int xvalue) {
|
||||
this.xvalue = xvalue;
|
||||
}
|
||||
|
||||
public float getYvalue() {
|
||||
return yvalue;
|
||||
}
|
||||
|
||||
public void setYvalue(float yvalue) {
|
||||
this.yvalue = yvalue;
|
||||
}
|
||||
}
|
||||
//增加返回值描述
|
||||
public static class tagDataValue {
|
||||
//波形对应的标题
|
||||
private List<String> tmpWaveTitle;
|
||||
//波形对应的值
|
||||
private List<List<Float>> listWaveData;
|
||||
//波形对应的相别数量
|
||||
private int iPhasic;
|
||||
|
||||
public List<String> getTmpWaveTitle() {
|
||||
return tmpWaveTitle;
|
||||
}
|
||||
|
||||
public void setTmpWaveTitle(List<String> tmpWaveTitle) {
|
||||
this.tmpWaveTitle = tmpWaveTitle;
|
||||
}
|
||||
|
||||
public List<List<Float>> getListWaveData() {
|
||||
return listWaveData;
|
||||
}
|
||||
|
||||
public void setListWaveData(List<List<Float>> listWaveData) {
|
||||
this.listWaveData = listWaveData;
|
||||
}
|
||||
|
||||
public int getiPhasic() {
|
||||
return iPhasic;
|
||||
}
|
||||
|
||||
public void setiPhasic(int iPhasic) {
|
||||
this.iPhasic = iPhasic;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
package com.njcn.advance.pojo.dto.waveAnalysis;
|
||||
|
||||
import com.sun.jna.Structure;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 输出参数
|
||||
* qvvr_cata_cause 暂降原因(目前算法不支持,不填)
|
||||
* qvvr_phasetype 暂降相别 1:一相 2:两相 3:三相
|
||||
* qvvr_cata_type 暂降类型
|
||||
* 持续时间(单位秒)
|
||||
* hold_time_rms 有效值算法持续时间
|
||||
* hold_time_dq dq变换算法持续时间
|
||||
* 波形起始点(单位度)
|
||||
* POW_a A相波形起始点
|
||||
* POW_b B相波形起始点
|
||||
* POW_c C相波形起始点
|
||||
* 跳变段电压变化率(单位V/S)
|
||||
* Voltagechange_Va A相跳变段电压变化率
|
||||
* Voltagechange_Vb B相跳变段电压变化率
|
||||
* Voltagechange_Vc C相跳变段电压变化率
|
||||
* 分段信息
|
||||
* SEG_T_num 分段数目
|
||||
* SEG_T0_idx 原始分段位置
|
||||
* SEG_T_idx 修正分段位置
|
||||
* 有效值分段信息
|
||||
* SEG_RMS_T_num 分段数目
|
||||
* SEG_RMS_T_idx 分段位置
|
||||
* 特征幅值(单位V)
|
||||
* u_min_num 特征值个数
|
||||
* ua_min A相电压特征值
|
||||
* ub_min B相电压特征值
|
||||
* uc_min C相电压特征值
|
||||
* u3_min 三相电压特征值
|
||||
* order_min_idx 最小值位置
|
||||
* 相位跳变(单位度)
|
||||
* angle_diff_ap A相相位正跳变
|
||||
* angle_diff_bp B相相位正跳变
|
||||
* angle_diff_cp C相相位正跳变
|
||||
* angle_diff_an A相相位负跳变
|
||||
* angle_diff_bn B相相位负跳变
|
||||
* angle_diff_cn C相相位负跳变
|
||||
* bph_max_value 不平衡度(单位%)
|
||||
*/
|
||||
public class BackData extends Structure {
|
||||
public int qvvr_cata_cause[] = new int[256];
|
||||
public int qvvr_phasetype[] = new int[256];
|
||||
public int qvvr_cata_type[] = new int[256];
|
||||
public float hold_time_rms;
|
||||
public float hold_time_dq;
|
||||
public float POW_a;
|
||||
public float POW_b;
|
||||
public float POW_c;
|
||||
public float Voltagechange_Va;
|
||||
public float Voltagechange_Vb;
|
||||
public float Voltagechange_Vc;
|
||||
public int SEG_T_num;
|
||||
public int SEG_T0_idx[] = new int[256];
|
||||
public int SEG_T_idx[] = new int[256];
|
||||
public int SEG_RMS_T_num;
|
||||
public int SEG_RMS_T_idx[] = new int[256];
|
||||
public int u_min_num;
|
||||
public float ua_min[] = new float[256];
|
||||
public float ub_min[] = new float[256];
|
||||
public float uc_min[] = new float[256];
|
||||
public float u3_min[] = new float[256];
|
||||
public int order_min_idx[] = new int[256];
|
||||
public float angle_diff_ap[] = new float[256];
|
||||
public float angle_diff_bp[] = new float[256];
|
||||
public float angle_diff_cp[] = new float[256];
|
||||
public float angle_diff_an[] = new float[256];
|
||||
public float angle_diff_bn[] = new float[256];
|
||||
public float angle_diff_cn[] = new float[256];
|
||||
public float bph_max_value[] = new float[256];
|
||||
|
||||
public static class ByReference extends BackData implements Structure.ByReference {
|
||||
|
||||
}
|
||||
|
||||
public static class ByValue extends BackData implements Structure.ByValue {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String> getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "qvvr_cata_cause", "qvvr_phasetype", "qvvr_cata_type", "hold_time_rms",
|
||||
"hold_time_dq", "POW_a", "POW_b", "POW_c", "Voltagechange_Va", "Voltagechange_Vb", "Voltagechange_Vc",
|
||||
"SEG_T_num", "SEG_T0_idx", "SEG_T_idx","SEG_RMS_T_num","SEG_RMS_T_idx", "u_min_num", "ua_min", "ub_min", "uc_min", "u3_min",
|
||||
"order_min_idx", "angle_diff_ap", "angle_diff_bp", "angle_diff_cp", "angle_diff_an", "angle_diff_bn",
|
||||
"angle_diff_cn", "bph_max_value" });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.njcn.advance.pojo.dto.waveAnalysis;
|
||||
|
||||
import com.sun.jna.Structure;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class CauseStruct extends Structure {
|
||||
//最大能容纳的数据
|
||||
public static final int MAX_SMP_DATA_LEN = 128 * 50 * 120;
|
||||
public float smp_va[] = new float[MAX_SMP_DATA_LEN];
|
||||
public float smp_vb[] = new float[MAX_SMP_DATA_LEN];
|
||||
public float smp_vc[] = new float[MAX_SMP_DATA_LEN];
|
||||
public int smp_rate;
|
||||
public int smp_len;
|
||||
public float threshold[] = new float[50];
|
||||
public int cause = 0;
|
||||
public int no_cal = 0;
|
||||
|
||||
public static class ByReference extends CauseStruct implements Structure.ByReference {
|
||||
}
|
||||
|
||||
public static class ByValue extends CauseStruct implements Structure.ByValue {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String> getFieldOrder() { // 返回值填入的顺序
|
||||
return Arrays.asList(new String[] { "cause", "no_cal" });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package com.njcn.advance.pojo.dto.waveAnalysis;
|
||||
|
||||
public class DirectionData{
|
||||
private int trigTime[] = new int[256];
|
||||
private float qvvrBeforeRms[] = new float[256];
|
||||
private float qvvrBeforeZk[] = new float[256];
|
||||
private float qvvrOccurRms[] = new float[256];
|
||||
private float qvvrOccurZk[] = new float[256];
|
||||
private String qvvrPosInfo[] = new String[256];
|
||||
|
||||
public int[] getTrigTime() {
|
||||
return trigTime;
|
||||
}
|
||||
public void setTrigTime(int[] trigTime) {
|
||||
this.trigTime = trigTime;
|
||||
}
|
||||
public float[] getQvvrBeforeRms() {
|
||||
return qvvrBeforeRms;
|
||||
}
|
||||
public void setQvvrBeforeRms(float[] qvvrBeforeRms) {
|
||||
this.qvvrBeforeRms = qvvrBeforeRms;
|
||||
}
|
||||
public float[] getQvvrBeforeZk() {
|
||||
return qvvrBeforeZk;
|
||||
}
|
||||
public void setQvvrBeforeZk(float[] qvvrBeforeZk) {
|
||||
this.qvvrBeforeZk = qvvrBeforeZk;
|
||||
}
|
||||
public float[] getQvvrOccurRms() {
|
||||
return qvvrOccurRms;
|
||||
}
|
||||
public void setQvvrOccurRms(float[] qvvrOccurRms) {
|
||||
this.qvvrOccurRms = qvvrOccurRms;
|
||||
}
|
||||
public float[] getQvvrOccurZk() {
|
||||
return qvvrOccurZk;
|
||||
}
|
||||
public void setQvvrOccurZk(float[] qvvrOccurZk) {
|
||||
this.qvvrOccurZk = qvvrOccurZk;
|
||||
}
|
||||
public String[] getQvvrPosInfo() {
|
||||
return qvvrPosInfo;
|
||||
}
|
||||
public void setQvvrPosInfo(String[] qvvrPosInfo) {
|
||||
this.qvvrPosInfo = qvvrPosInfo;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.njcn.advance.pojo.dto.waveAnalysis;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author njcn
|
||||
* @高级算法返回数据
|
||||
* @包含RMS值
|
||||
* @X轴坐标
|
||||
* @处理返回的结果
|
||||
*/
|
||||
@Data
|
||||
public class EntityAdvancedData {
|
||||
public float smp_a[];
|
||||
public float smp_b[];
|
||||
public float smp_c[];
|
||||
public float smp_x[];
|
||||
public int smp_len;
|
||||
public String sagReason[]; // 暂降原因描述,数据库获取
|
||||
public String sagType[]; // 暂降类型描述,数据库获取
|
||||
public String sagPhaseType[]; // 暂降相别 1-一相 2-两相 3-三相
|
||||
public int backNumber = -1;
|
||||
public BackData evt_buf[];
|
||||
public PowerData power_before_buf[];
|
||||
public PowerData power_after_buf[];
|
||||
public DirectionData qvvr_direction_info[];
|
||||
public UtblData qvvr_utbl_info[];
|
||||
|
||||
public EntityAdvancedData(int lengthRMS) {
|
||||
super();
|
||||
this.smp_a = new float[lengthRMS];
|
||||
this.smp_b = new float[lengthRMS];
|
||||
this.smp_c = new float[lengthRMS];
|
||||
this.smp_x = new float[lengthRMS];
|
||||
this.sagReason = new String[256];
|
||||
this.sagType = new String[256];
|
||||
this.sagPhaseType = new String[256];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package com.njcn.advance.pojo.dto.waveAnalysis;
|
||||
|
||||
public class PowerData{
|
||||
private float fundP[] = new float[256];
|
||||
private float fundQ[] = new float[256];
|
||||
private float fundS[] = new float[256];
|
||||
|
||||
public float[] getFundP() {
|
||||
return fundP;
|
||||
}
|
||||
public void setFundP(float[] fundP) {
|
||||
this.fundP = fundP;
|
||||
}
|
||||
public float[] getFundQ() {
|
||||
return fundQ;
|
||||
}
|
||||
public void setFundQ(float[] fundQ) {
|
||||
this.fundQ = fundQ;
|
||||
}
|
||||
public float[] getFundS() {
|
||||
return fundS;
|
||||
}
|
||||
public void setFundS(float[] fundS) {
|
||||
this.fundS = fundS;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,168 @@
|
||||
package com.njcn.advance.pojo.dto.waveAnalysis;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class PubWaveModel {
|
||||
|
||||
/************************
|
||||
* Comtrate文件相关
|
||||
*
|
||||
* @author Yexb
|
||||
*
|
||||
**************************/
|
||||
|
||||
// 模拟量通道记录类
|
||||
public static class tagOneChannleCfg {
|
||||
// 通道序号
|
||||
public int nIndex;
|
||||
// 通道名称
|
||||
public String szChannleName;
|
||||
// 相位名称
|
||||
public String szPhasicName;
|
||||
// 监视的通道名称
|
||||
public String szMonitoredChannleName;
|
||||
// 通道的单位
|
||||
public String szUnitName;
|
||||
// 通道的系数
|
||||
public float fCoefficent;
|
||||
// 通道的便宜量
|
||||
public float fOffset;
|
||||
// 起始采样时间的偏移量
|
||||
public float fTimeOffset;
|
||||
// 采样值的最小值
|
||||
public int nMin;
|
||||
// 采样值的最大值
|
||||
public int nMax;
|
||||
// 一次变比
|
||||
public float fPrimary;
|
||||
// 二次变比
|
||||
public float fSecondary;
|
||||
// 一次值还是二次值标志
|
||||
public String szValueType;
|
||||
}
|
||||
|
||||
// 数字量通道记录类
|
||||
public static class tagOneChannleCfg_digital {
|
||||
// 通道序号
|
||||
public int nIndex;
|
||||
// 通道名称
|
||||
public String szChannleName;
|
||||
// 相位名称
|
||||
public String szPhasicName;
|
||||
// 监视的通道名称
|
||||
public String szMonitoredChannleName;
|
||||
// 通道的单位
|
||||
public int Initial;
|
||||
|
||||
}
|
||||
|
||||
// 配置文件总类
|
||||
public static class tagComtradeCfg {
|
||||
public int nChannelNum;
|
||||
public int nAnalogNum;// 模拟量通道的个数 WW 2013-05-15
|
||||
public int nDigitalNum;// 数字量通道的个数 WW 2013-05-15
|
||||
public List<tagOneChannleCfg> OneChannleCfg;
|
||||
public List<tagOneChannleCfg_digital> OneChannleCfgDig;
|
||||
|
||||
public tagComtradeCfg() {
|
||||
OneChannleCfg = new LinkedList<tagOneChannleCfg>();
|
||||
OneChannleCfgDig = new LinkedList<tagOneChannleCfg_digital>();
|
||||
}
|
||||
}
|
||||
|
||||
public static class tagOneRate {
|
||||
// 1秒钟内的采样点数
|
||||
public long nOneSample;
|
||||
// 总采样点数
|
||||
public long nSampleNum;
|
||||
}
|
||||
|
||||
// 采样总结构
|
||||
public static class tagRates {
|
||||
public int nRates;
|
||||
public List<tagOneRate> OneRate;
|
||||
|
||||
public tagRates() {
|
||||
OneRate = new LinkedList<tagOneRate>();
|
||||
}
|
||||
}
|
||||
|
||||
// 采样值结构
|
||||
public static class tagOneValue {
|
||||
// 数据点时间
|
||||
public String szTime;
|
||||
// 数据点序号
|
||||
public int nIndex;
|
||||
// int nValueNum; WW 2013-05-15
|
||||
// 模拟量数据个数
|
||||
public int nAnalogValueNum;
|
||||
// 数字量数据个数
|
||||
public int nDigitalValueNum;
|
||||
// 数据区
|
||||
// float fValue[8];
|
||||
public List<Float> fValue;// WW 2013-05-15 原来的8通道也是仅考虑了单路的情况,如果遇到多路这里会超出
|
||||
public List<Byte> DigitalValue;// WW 2013-05-15
|
||||
|
||||
public tagOneValue() {
|
||||
fValue = new LinkedList<Float>();
|
||||
DigitalValue = new LinkedList<Byte>();
|
||||
}
|
||||
}
|
||||
|
||||
// 采样值总结构
|
||||
public static class tagValue {
|
||||
// 数据个数
|
||||
public int nValueNum;
|
||||
// 数据区
|
||||
public List<tagOneValue> OneValueList;
|
||||
|
||||
public tagValue() {
|
||||
OneValueList = new LinkedList<tagOneValue>();
|
||||
}
|
||||
}
|
||||
|
||||
public static class tagWave {
|
||||
// 标识 1-二次值的事件波形 2-二次值的RMS 3-一次值的事件波形 4-一次值的RMS
|
||||
//标识 5-二次值的事件波形 6-二次值的RMS 7-一次值的事件波形 8-一次值的RMS
|
||||
private int type;
|
||||
// 相别
|
||||
private int phaseType;// 0:A相;1:B相;2:c相
|
||||
// X坐标值
|
||||
private float xvalue;
|
||||
// y坐标值
|
||||
private float yvalue;
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public void setType(int type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public int getPhaseType() {
|
||||
return phaseType;
|
||||
}
|
||||
|
||||
public void setPhaseType(int phaseType) {
|
||||
this.phaseType = phaseType;
|
||||
}
|
||||
|
||||
public float getXvalue() {
|
||||
return xvalue;
|
||||
}
|
||||
|
||||
public void setXvalue(float xvalue) {
|
||||
this.xvalue = xvalue;
|
||||
}
|
||||
|
||||
public float getYvalue() {
|
||||
return yvalue;
|
||||
}
|
||||
|
||||
public void setYvalue(float yvalue) {
|
||||
this.yvalue = yvalue;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
package com.njcn.advance.pojo.dto.waveAnalysis;
|
||||
|
||||
import com.sun.jna.Structure;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author njcn
|
||||
* 传入参数
|
||||
* smp_va A相电压波形数据
|
||||
* smp_vb B相电压波形数据
|
||||
* smp_vc C相电压波形数据
|
||||
* smp_rate 波形采样率
|
||||
* smp_len 每个通道波形数据个数
|
||||
* evt_num 高级算法返回事件个数
|
||||
* evt_buf 高级算法返回数据
|
||||
*/
|
||||
public class Rect extends Structure {
|
||||
public static final int MAX_SMP_DATA_LEN = 128*50*120;
|
||||
public float smp_va[] = new float[MAX_SMP_DATA_LEN];
|
||||
public float smp_vb[] = new float[MAX_SMP_DATA_LEN];
|
||||
public float smp_vc[] = new float[MAX_SMP_DATA_LEN];
|
||||
public int smp_rate;
|
||||
public int smp_len;
|
||||
public int evt_num = -1;
|
||||
public BackData evt_buf[] = new BackData[32];
|
||||
|
||||
public static class ByReference extends Rect implements Structure.ByReference {
|
||||
|
||||
}
|
||||
|
||||
public static class ByValue extends Rect implements Structure.ByValue {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<String> getFieldOrder() {
|
||||
return Arrays.asList(new String[] { "evt_num","evt_buf" });
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
package com.njcn.advance.pojo.dto.waveAnalysis;
|
||||
|
||||
public class UtblData{
|
||||
private long trigTime[] = new long[1];
|
||||
|
||||
public long[] getTrigTime() {
|
||||
return trigTime;
|
||||
}
|
||||
|
||||
public void setTrigTime(long[] trigTime) {
|
||||
this.trigTime = trigTime;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,296 @@
|
||||
package com.njcn.advance.pojo.dto.waveAnalysis;
|
||||
|
||||
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author hongawen
|
||||
* @Date: 2018/12/4 10:03
|
||||
*/
|
||||
public class WaveData implements Serializable {
|
||||
//标题数据
|
||||
private List<String> tmpWaveTitle = new ArrayList<>();
|
||||
|
||||
//瞬时波形的数据
|
||||
List<List<Float>> sunData = new ArrayList<>();
|
||||
|
||||
//RMS波形的数据
|
||||
List<List<Float>> rmsData = new ArrayList<>();
|
||||
|
||||
//相别个数
|
||||
private int iPhasic = 0;
|
||||
|
||||
//PT变比
|
||||
Float pt = 0.0f;
|
||||
|
||||
//CT变比
|
||||
Float ct = 0.0f;
|
||||
|
||||
private String a="A相";
|
||||
|
||||
private String b="B相";
|
||||
|
||||
private String c="C相";
|
||||
|
||||
//波形采样率
|
||||
private long nOneWaveNum = 32;
|
||||
private Date firstTime;//暂降触发第一次
|
||||
private Integer firstMs;
|
||||
|
||||
|
||||
//发生时刻
|
||||
String time;
|
||||
|
||||
//暂降类型
|
||||
String waveType;
|
||||
|
||||
//严重度
|
||||
float yzd;
|
||||
|
||||
//监测点名称
|
||||
String lineName;
|
||||
|
||||
//暂降幅值
|
||||
Float eventValue;
|
||||
|
||||
//持续时间
|
||||
Float persistTime;
|
||||
|
||||
//暂降触发时间
|
||||
private Date trigeTime;
|
||||
|
||||
private boolean openTri=false;
|
||||
|
||||
//最大最小值集合
|
||||
private List<PubWaveModel.tagWave> readComtrade = new ArrayList<>();
|
||||
|
||||
//变电站名称
|
||||
private String subName;
|
||||
|
||||
|
||||
|
||||
public WaveData() {
|
||||
iPhasic = 0;
|
||||
}
|
||||
|
||||
public AnalyWaveModel.tagRates getRatesCfg() {
|
||||
return RatesCfg;
|
||||
}
|
||||
|
||||
public void setRatesCfg(AnalyWaveModel.tagRates ratesCfg) {
|
||||
RatesCfg = ratesCfg;
|
||||
}
|
||||
|
||||
private AnalyWaveModel.tagRates RatesCfg;//cfg_采样率实体类
|
||||
|
||||
public List<PubWaveModel.tagWave> getReadComtrade() {
|
||||
return readComtrade;
|
||||
}
|
||||
|
||||
public void setReadComtrade(List<PubWaveModel.tagWave> readComtrade) {
|
||||
this.readComtrade = readComtrade;
|
||||
}
|
||||
|
||||
public List<List<Float>> getSunData() {
|
||||
return sunData;
|
||||
}
|
||||
|
||||
public void setSunData(List<List<Float>> sunData) {
|
||||
this.sunData = sunData;
|
||||
}
|
||||
|
||||
public List<List<Float>> getRmsData() {
|
||||
return rmsData;
|
||||
}
|
||||
|
||||
public void setRmsData(List<List<Float>> rmsData) {
|
||||
this.rmsData = rmsData;
|
||||
}
|
||||
|
||||
public Float getPt() {
|
||||
return pt;
|
||||
}
|
||||
|
||||
public void setPt(Float pt) {
|
||||
this.pt = pt;
|
||||
}
|
||||
|
||||
public String getTime() {
|
||||
return time;
|
||||
}
|
||||
|
||||
public void setTime(String time) {
|
||||
this.time = time;
|
||||
}
|
||||
|
||||
public String getWaveType() {
|
||||
return waveType;
|
||||
}
|
||||
|
||||
public void setWaveType(String waveType) {
|
||||
this.waveType = waveType;
|
||||
}
|
||||
|
||||
public float getYzd() {
|
||||
return yzd;
|
||||
}
|
||||
|
||||
public void setYzd(float yzd) {
|
||||
this.yzd = yzd;
|
||||
}
|
||||
|
||||
public Float getCt() {
|
||||
return ct;
|
||||
}
|
||||
|
||||
public void setCt(Float ct) {
|
||||
this.ct = ct;
|
||||
}
|
||||
|
||||
public long getnOneWaveNum() {
|
||||
return nOneWaveNum;
|
||||
}
|
||||
|
||||
public void setnOneWaveNum(long nOneWaveNum) {
|
||||
this.nOneWaveNum = nOneWaveNum;
|
||||
}
|
||||
|
||||
public Date getFirstTime() {
|
||||
return firstTime;
|
||||
}
|
||||
|
||||
public void setFirstTime(Date firstTime) {
|
||||
this.firstTime = firstTime;
|
||||
}
|
||||
|
||||
public Integer getFirstMs() {
|
||||
return firstMs;
|
||||
}
|
||||
|
||||
public void setFirstMs(Integer firstMs) {
|
||||
this.firstMs = firstMs;
|
||||
}
|
||||
|
||||
public String getLineName() {
|
||||
return lineName;
|
||||
}
|
||||
|
||||
public void setLineName(String lineName) {
|
||||
this.lineName = lineName;
|
||||
}
|
||||
|
||||
public Float getEventValue() {
|
||||
return eventValue;
|
||||
}
|
||||
|
||||
public void setEventValue(Float eventValue) {
|
||||
this.eventValue = eventValue;
|
||||
}
|
||||
|
||||
public Float getPersistTime() {
|
||||
return persistTime;
|
||||
}
|
||||
|
||||
public void setPersistTime(Float persistTime) {
|
||||
this.persistTime = persistTime;
|
||||
}
|
||||
|
||||
|
||||
public Date getTrigeTime() {
|
||||
return trigeTime;
|
||||
}
|
||||
|
||||
public void setTrigeTime(Date trigeTime) {
|
||||
this.trigeTime = trigeTime;
|
||||
}
|
||||
|
||||
public boolean getOpenTri() {
|
||||
return openTri;
|
||||
}
|
||||
|
||||
public void setOpen(boolean open) {
|
||||
this.openTri = open;
|
||||
}
|
||||
|
||||
public List<String> getTmpWaveTitle() {
|
||||
return tmpWaveTitle;
|
||||
}
|
||||
|
||||
public void setTmpWaveTitle(List<String> tmpWaveTitle) {
|
||||
this.tmpWaveTitle = tmpWaveTitle;
|
||||
}
|
||||
|
||||
public String getA() {
|
||||
return a;
|
||||
}
|
||||
|
||||
public void setA(String a) {
|
||||
this.a = a;
|
||||
}
|
||||
|
||||
public String getB() {
|
||||
return b;
|
||||
}
|
||||
|
||||
public void setB(String b) {
|
||||
this.b = b;
|
||||
}
|
||||
|
||||
public String getC() {
|
||||
return c;
|
||||
}
|
||||
|
||||
public void setC(String c) {
|
||||
this.c = c;
|
||||
}
|
||||
|
||||
public String getSubName() {
|
||||
return subName;
|
||||
}
|
||||
|
||||
public void setSubName(String subName) {
|
||||
this.subName = subName;
|
||||
}
|
||||
|
||||
|
||||
public int getiPhasic() {
|
||||
return iPhasic;
|
||||
}
|
||||
|
||||
public void setiPhasic(int iPhasic) {
|
||||
this.iPhasic = iPhasic;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "WaveData{" +
|
||||
"tmpWaveTitle=" + tmpWaveTitle +
|
||||
", sunData=" + sunData +
|
||||
", rmsData=" + rmsData +
|
||||
", iPhasic=" + iPhasic +
|
||||
", pt=" + pt +
|
||||
", ct=" + ct +
|
||||
", a='" + a + '\'' +
|
||||
", b='" + b + '\'' +
|
||||
", c='" + c + '\'' +
|
||||
", nOneWaveNum=" + nOneWaveNum +
|
||||
", firstTime=" + firstTime +
|
||||
", firstMs=" + firstMs +
|
||||
", RatesCfg=" + RatesCfg +
|
||||
", time='" + time + '\'' +
|
||||
", waveType='" + waveType + '\'' +
|
||||
", yzd=" + yzd +
|
||||
", lineName='" + lineName + '\'' +
|
||||
", eventValue=" + eventValue +
|
||||
", persistTime=" + persistTime +
|
||||
", trigeTime=" + trigeTime +
|
||||
", openTri=" + openTri +
|
||||
", readComtrade=" + readComtrade +
|
||||
", subName='" + subName + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.njcn.advance.pojo.po;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.njcn.db.bo.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
@TableName("pqs_relevancy_log")
|
||||
public class PqsRelevanceLog extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 归一化算法时间
|
||||
*/
|
||||
@TableId("Time_Id")
|
||||
private LocalDateTime timeId;
|
||||
|
||||
|
||||
/**
|
||||
* 归一化算法描述
|
||||
*/
|
||||
private String contentDes;
|
||||
|
||||
private Integer state;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.njcn.advance.utils;
|
||||
|
||||
import cn.hutool.core.io.IoUtil;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import com.njcn.event.api.RmpEventDetailFeignClient;
|
||||
import com.njcn.oss.utils.FileStorageUtil;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
/**
|
||||
* pqs
|
||||
* 波形操作工具类
|
||||
* @author cdf
|
||||
* @date 2023/8/1
|
||||
*/
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
@Slf4j
|
||||
public class WaveUtils {
|
||||
|
||||
private final FileStorageUtil fileStorageUtil;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 读取文件服务器波形数据
|
||||
* @author cdf
|
||||
* @date 2023/8/1
|
||||
*/
|
||||
public String getFile(String filePath){
|
||||
String temJson = null;
|
||||
try(InputStream inputStream = fileStorageUtil.getFileStream(filePath)){
|
||||
temJson = IoUtil.read(inputStream, CharsetUtil.UTF_8);
|
||||
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return temJson;
|
||||
}
|
||||
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user