Commit f2c3f88c by dongshufeng

prepare of tn input collection

parent 721be71c
use std::collections::{HashMap, HashSet}; use std::collections::{BTreeMap, HashMap, HashSet};
use arrow_schema::{DataType, Field, Schema}; use arrow_schema::{DataType, Field, Schema};
use ds_common::{DEV_TOPO_DF_NAME, DYN_TOPO_DF_NAME, POINT_DF_NAME, SHUNT_MEAS_DF_NAME, STATIC_TOPO_DF_NAME, TERMINAL_DF_NAME}; use ds_common::{DEV_TOPO_DF_NAME, POINT_DF_NAME, SHUNT_MEAS_DF_NAME, STATIC_TOPO_DF_NAME, TERMINAL_DF_NAME};
use ds_common::dyn_topo::{read_dev_topo, read_dyn_topo}; use ds_common::dyn_topo::read_dev_topo;
use ds_common::static_topo::{read_point_terminal, read_static_topo, read_terminal_cn_dev}; use ds_common::static_topo::{read_point_terminal, read_static_topo, read_terminal_cn_dev};
use ds_common::tn_input::read_shunt_measures; use ds_common::tn_input::read_shunt_measures;
use eig_domain::DataUnit; use eig_domain::{DataUnit, MeasureValue};
use mems::model::{get_df_from_in_plugin, get_meas_from_plugin_input, get_wasm_result, PluginInput, PluginOutput}; use mems::model::{get_df_from_in_plugin, get_meas_from_plugin_input, get_wasm_result, PluginInput, PluginOutput};
use mems::model::dev::{MeasPhase, PsRsrType}; use mems::model::dev::{MeasPhase, PsRsrType};
...@@ -25,14 +26,13 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 { ...@@ -25,14 +26,13 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 {
let mut meas_phase: Vec<MeasPhase> = vec![]; let mut meas_phase: Vec<MeasPhase> = vec![];
// terminal, cn, dev // terminal, cn, dev
let mut terminals: Vec<Vec<u64>> = vec![]; let mut terminals: Vec<Vec<u64>> = vec![];
// key is point id, value is (terminal id, measure phase)
let mut point_of_shunt_dev: HashMap<u64, (u64, MeasPhase)> = HashMap::with_capacity(0);
// dev id to device type // dev id to device type
let mut dev_type: HashMap<u64, u16> = HashMap::new(); let mut dev_type: HashMap<u64, u16> = HashMap::new();
// dynamic topo // dynamic topo: terminal, cn, tn, dev
let mut dyn_topo: Vec<Vec<u64>>;
// terminal, cn, tn, dev
let mut dyn_dev_topo: Vec<Vec<u64>> = vec![]; let mut dyn_dev_topo: Vec<Vec<u64>> = vec![];
// key is point id, value is (terminal id, measure phase)
let mut point_terminal: HashMap<u64, (u64, MeasPhase)> = HashMap::with_capacity(0);
let mut with_static = false; let mut with_static = false;
if let Err(s) = &r2 { if let Err(s) = &r2 {
error = Some(s.clone()); error = Some(s.clone());
...@@ -44,15 +44,7 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 { ...@@ -44,15 +44,7 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 {
let mut rdr = csv::ReaderBuilder::new().has_headers(true).from_reader(&input.bytes[from..end]); let mut rdr = csv::ReaderBuilder::new().has_headers(true).from_reader(&input.bytes[from..end]);
let mut records = rdr.records(); let mut records = rdr.records();
// 对第i个边输入该节点的 dataframe 进行处理 // 对第i个边输入该节点的 dataframe 进行处理
if input.dfs[i] == DYN_TOPO_DF_NAME { if input.dfs[i] == DEV_TOPO_DF_NAME {
match read_dyn_topo(&mut records) {
Ok(v) => dyn_topo = v,
Err(s) => {
error = Some(s);
break;
}
}
} else if input.dfs[i] == DEV_TOPO_DF_NAME {
match read_dev_topo(&mut records) { match read_dev_topo(&mut records) {
Ok(v) => dyn_dev_topo = v, Ok(v) => dyn_dev_topo = v,
Err(s) => { Err(s) => {
...@@ -78,7 +70,7 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 { ...@@ -78,7 +70,7 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 {
} }
} else if input.dfs[i] == SHUNT_MEAS_DF_NAME { } else if input.dfs[i] == SHUNT_MEAS_DF_NAME {
match read_shunt_measures(&mut records) { match read_shunt_measures(&mut records) {
Ok(v) => point_terminal = v, Ok(v) => point_of_shunt_dev = v,
Err(s) => error = Some(s), Err(s) => error = Some(s),
} }
} }
...@@ -145,27 +137,34 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 { ...@@ -145,27 +137,34 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 {
get_wasm_result(output) get_wasm_result(output)
} else { } else {
let (meas, units) = r1.unwrap(); let (meas, units) = r1.unwrap();
let mut terminal_tn = HashMap::with_capacity(dyn_dev_topo.len());
let mut tn_measure: BTreeMap<u64, Vec<(f64, DataUnit, MeasPhase)>> = BTreeMap::new();
for v in dyn_dev_topo { for v in dyn_dev_topo {
let terminal = v[0]; let terminal = v[0];
let tn = v[2]; let tn = v[2];
let dev = v[3]; terminal_tn.insert(terminal, tn);
let dev_type = v[4] as u16; tn_measure.insert(tn, vec![]);
} }
// 开始处理开关量 // 开始处理开关量
for m in meas { for m in meas {
if let Some((terminal, phase)) = point_terminal.get(&m.point_id) { if let Some((terminal, phase)) = point_of_shunt_dev.get(&m.point_id) {
if let Some(unit) = units.get(&m.point_id) { if let Some(tn) = terminal_tn.get(terminal) {
match unit { let v = tn_measure.get_mut(tn).unwrap();
DataUnit::A => {} if let Some(unit) = units.get(&m.point_id) {
DataUnit::V => {} match unit {
DataUnit::kV => {} DataUnit::A => {
DataUnit::W => {}
DataUnit::kW => {} }
DataUnit::MW => {} DataUnit::V => {}
DataUnit::Var => {} DataUnit::kV => {}
DataUnit::kVar => {} DataUnit::W => {}
DataUnit::MVar => {} DataUnit::kW => {}
_ => {} DataUnit::MW => {}
DataUnit::Var => {}
DataUnit::kVar => {}
DataUnit::MVar => {}
_ => {}
}
} }
} }
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论