Commit ba8a8619 by dongshufeng

collect tn input, not finished

parent 9137a27b
...@@ -106,7 +106,7 @@ fn read_config(records: &mut StringRecordsIter<&[u8]>) ...@@ -106,7 +106,7 @@ fn read_config(records: &mut StringRecordsIter<&[u8]>)
match records.next() { match records.next() {
Some(Ok(record)) => { Some(Ok(record)) => {
let mut col = 0; let mut col = 0;
let mut name = "dev_ohm".to_string(); let mut name = "".to_string();
let mut ohm_per_km = "".to_string(); let mut ohm_per_km = "".to_string();
for str in record.iter() { for str in record.iter() {
if col == 0 { if col == 0 {
...@@ -120,7 +120,7 @@ fn read_config(records: &mut StringRecordsIter<&[u8]>) ...@@ -120,7 +120,7 @@ fn read_config(records: &mut StringRecordsIter<&[u8]>)
} }
} }
if col != 2 { if col != 2 {
return Err(format!("Wrong config input, expected col 2, actual {col}")); return Err(format!("Wrong config input, expected col more than 2, actual {col}"));
} }
match serde_json::from_str::<[f64; 18]>(&ohm_per_km) { match serde_json::from_str::<[f64; 18]>(&ohm_per_km) {
Ok(ohm) => { Ok(ohm) => {
......
...@@ -12,4 +12,5 @@ csv = "1.3.0" ...@@ -12,4 +12,5 @@ csv = "1.3.0"
serde_cbor = "0.11" serde_cbor = "0.11"
arrow-schema = { version = "52.1", features = ["serde"] } arrow-schema = { version = "52.1", features = ["serde"] }
ds-common = { path = "../ds-common" } ds-common = { path = "../ds-common" }
eig-domain = { path = "../../../eig-domain" }
mems = { path = "../../../mems" } mems = { path = "../../../mems" }
\ No newline at end of file
use std::collections::{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}; use ds_common::{DEV_TOPO_DF_NAME, DYN_TOPO_DF_NAME, POINT_DF_NAME};
use ds_common::dyn_topo::{read_dev_topo, read_dyn_topo}; use ds_common::dyn_topo::{read_dev_topo, read_dyn_topo};
use ds_common::static_topo::read_points;
use eig_domain::DataUnit;
use mems::model::{get_meas_from_plugin_input, get_wasm_result, PluginInput, PluginOutput}; use mems::model::{get_meas_from_plugin_input, get_wasm_result, PluginInput, PluginOutput};
use mems::model::dev::PsRsrType;
#[no_mangle] #[no_mangle]
pub unsafe fn run(ptr: i32, len: u32) -> u64 { pub unsafe fn run(ptr: i32, len: u32) -> u64 {
...@@ -20,7 +24,9 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 { ...@@ -20,7 +24,9 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 {
} }
let mut dyn_topo: Vec<Vec<u64>>; let mut dyn_topo: Vec<Vec<u64>>;
// terminal, cn, tn, dev // terminal, cn, tn, dev
let mut dev_topo: Vec<Vec<u64>>; let mut dev_topo: Vec<Vec<u64>> = vec![];
// point, terminal
let mut points: Vec<Vec<u64>> = vec![];
for i in 0..input.dfs_len.len() { for i in 0..input.dfs_len.len() {
let size = input.dfs_len[i] as usize; let size = input.dfs_len[i] as usize;
let end = from + size; let end = from + size;
...@@ -43,6 +49,11 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 { ...@@ -43,6 +49,11 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 {
break; break;
} }
} }
} else if input.dfs[i] == POINT_DF_NAME {
match read_points(&mut records) {
Ok(v) => points = v,
Err(s) => error = Some(s),
}
} }
} }
if error.is_none() { if error.is_none() {
...@@ -53,6 +64,48 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 { ...@@ -53,6 +64,48 @@ pub unsafe fn run(ptr: i32, len: u32) -> u64 {
}; };
get_wasm_result(output) get_wasm_result(output)
} else { } else {
let type1 = PsRsrType::SyncGenerator as u16;
let type2 = PsRsrType::Load as u16;
let type3 = PsRsrType::ShuntCompensator as u16;
let shunt_types = [type1, type2, type3];
let (meas, units) = r1.unwrap();
let mut point_terminal = HashMap::with_capacity(points.len());
let mut terminal_with_shunt_dev = HashSet::new();
for v in points {
point_terminal.insert(v[0], v[1]);
}
for v in dev_topo {
let terminal = v[0];
let tn = v[2];
let dev = v[3];
let dev_type = v[4] as u16;
if shunt_types.contains(&dev_type) {
terminal_with_shunt_dev.insert(terminal);
}
}
// 开始处理开关量
for m in meas {
if let Some(terminal) = point_terminal.get(&m.point_id) {
if terminal_with_shunt_dev.contains(terminal) {
if let Some(unit) = units.get(&m.point_id) {
match unit {
DataUnit::OnOrOff => {}
DataUnit::A => {}
DataUnit::V => {}
DataUnit::kV => {}
DataUnit::W => {}
DataUnit::kW => {}
DataUnit::MW => {}
DataUnit::Var => {}
DataUnit::kVar => {}
DataUnit::MVar => {}
_ => {}
}
}
}
}
}
let mut csv_str = String::from("cn,tn\n"); let mut csv_str = String::from("cn,tn\n");
// build schema // build schema
let schema = Schema::new(vec![ let schema = Schema::new(vec![
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论