refactor: replace hardcoded signal mappings with ModelRegistry
This commit is contained in:
parent
b4bb27f1e5
commit
4821cb9d36
@ -1,208 +1,80 @@
|
||||
|
||||
#include <TestProject/RNG/BaseData.h>
|
||||
#include <TestProject/RNG/Generator.h>
|
||||
#include <TestProject/RNG/RandT.h>
|
||||
#include <TestProject/RNG/read_csv.hpp>
|
||||
BaseData::BaseData data1;
|
||||
// ReadCSV::DoubleData ddata("D102-1#酸槽数据.csv"); ///< 2列:入口流量,出口流量
|
||||
ReadCSV::DoubleData
|
||||
ddata("数据毛刺-仿真.csv"); ///< 4列:实际速度,实际电流,设定速度,spderr
|
||||
ReadCSV::DoubleData gdata("毛刺数据.csv"); ///< 6列:RW_o_Drv_ActSpd
|
||||
///< RW_o_Drv_Current
|
||||
///< RW_o_Drv_TQ_Ref
|
||||
///< RW_o_Drv_SpdRegInt
|
||||
///< RW_o_Drv_SpdErr RW_o_Drv_AVF
|
||||
ReadCSV::DoubleData spbdata(
|
||||
"转矩减小-速度偏差大-仿真2.csv"); ///< 4列:实际速度,实际电流,实际转矩,设定速度
|
||||
ReadCSV::DoubleData
|
||||
liquid_data("液位.csv"); ///< 4列:实际速度,实际电流,实际转矩,设定速度
|
||||
// ReadCSV::IntData idata("D302-压辊数据.csv"); ///< 2列:阀动作,接近开关信号
|
||||
ReadCSV::IntData
|
||||
idata("C308仿-压辊数据.csv"); ///< 3列:阀动作- 开,接近开关信号-开,阀动作-关
|
||||
ReadCSV::DoubleData
|
||||
ddata_cn("D102-3#BR电流数据.csv"); ///< 4列:2/3/4电流,速度设定值
|
||||
ReadCSV::DoubleData
|
||||
ddata_cb("D102-3#BR异常电流数据.csv"); ///< 4列:2/3/4电流,速度设定值
|
||||
#include <TestProject/RNG/model/ModelRegistry.h>
|
||||
#include <glob/BinaryTele.h>
|
||||
#include <zlib/MemFix.hpp>
|
||||
#include <zlib/zoneDef.h>
|
||||
#include <string>
|
||||
#include <cmath>
|
||||
#include "mix_cc/debug/pre_define.h"
|
||||
|
||||
ReadCSV::IntData car_data("D302-2#小车减速位.csv"); ///< 2列:位置,接近开关
|
||||
ReadCSV::DoubleData std1_wr("D302-1#机架正弯.csv"); ///< 2列:给定,反馈
|
||||
ReadCSV::DoubleData std5_wr("D302-工作辊正弯DS.csv"); ///< 2列:给定,反馈
|
||||
ReadCSV::DoubleData loop3("D302-3#活套1-5电流.csv"); ///< 5列:1-5电机电流
|
||||
ReadCSV::DoubleData c308fur2col("C308速度毛刺仿真.csv"); ///< 2列 正常 毛刺
|
||||
ReadCSV::IntData
|
||||
std4_cr("D102-4#机架上中间辊窜辊.csv"); ///< 5列:编码器-4个窜动
|
||||
ReadCSV::IntData loop8_bool("D102-loop8.csv"); ///< 2列:DS,OS
|
||||
using namespace std;
|
||||
using namespace chrono;
|
||||
|
||||
Generator::Generator() {
|
||||
Generator::Generator() : registry(ModelRegistry::instance()) {
|
||||
stime = chrono::system_clock::now();
|
||||
logger_ = std::make_unique<LOG>("Generator");
|
||||
logger_ = make_unique<LOG>("Generator");
|
||||
}
|
||||
|
||||
Generator::~Generator() {
|
||||
// if (!map_tables_.empty()) {
|
||||
// auto iter = map_tables_.begin();
|
||||
// while (iter != map_tables_.end()) {
|
||||
// delete iter->second;
|
||||
// iter->second = nullptr;
|
||||
// map_tables_.erase(iter++);
|
||||
// }
|
||||
// }
|
||||
for (auto &it : m_mapfix) {
|
||||
for (auto& it : m_mapfix) {
|
||||
if (it.second != nullptr) {
|
||||
delete it.second;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool Generator::wtite_in_shm(int event_no) {
|
||||
try {
|
||||
// if (map_tables_.find(event_no) == map_tables_.end()) {
|
||||
// map_tables_[event_no] =
|
||||
// new CMemTable<PLC_DATA>(StringHelper::ToString<int>(event_no),
|
||||
// 100);
|
||||
// }
|
||||
// logger_->Debug() << "wtite_in_shm Test--1" << endl;
|
||||
if (m_mapfix.find(event_no) == m_mapfix.end()) {
|
||||
m_mapfix.insert(
|
||||
make_pair(event_no, new CMemFix<PLC_DATA>(std::to_string(event_no),
|
||||
make_pair(event_no, new CMemFix<PLC_DATA>(to_string(event_no),
|
||||
TEL_CACHE_SIZE)));
|
||||
}
|
||||
|
||||
binary_tele.ReBuild(event_no);
|
||||
int size = binary_tele.size();
|
||||
// binary_tele.Print();
|
||||
|
||||
size_t data_index =
|
||||
((chrono::system_clock::now() - stime).count() / (size_t)pow(10, 6)) /
|
||||
20; ///<时间-下标
|
||||
logger_->Debug() << "wtite_in_shm Test--2"
|
||||
<< "---data_index:" << data_index << endl;
|
||||
20;
|
||||
|
||||
// First pass: create all models and link valve_pair models
|
||||
for (int i = 0; i < size; i++) {
|
||||
const char* spec = binary_tele[i].tables[1];
|
||||
string specStr = (spec != nullptr && strlen(spec) > 0) ? string(spec) : "";
|
||||
float defaultVal = atof(binary_tele[i].defaultValue);
|
||||
string key = string(binary_tele[i].item);
|
||||
registry.getOrCreate(specStr, defaultVal, key);
|
||||
}
|
||||
for (int i = 0; i < size; i++) {
|
||||
const char* spec = binary_tele[i].tables[1];
|
||||
string specStr = (spec != nullptr && strlen(spec) > 0) ? string(spec) : "";
|
||||
float defaultVal = atof(binary_tele[i].defaultValue);
|
||||
string key = string(binary_tele[i].item);
|
||||
IModel* model = registry.getOrCreate(specStr, defaultVal, key);
|
||||
model->linkPeers(registry);
|
||||
}
|
||||
|
||||
// Second pass: evaluate
|
||||
for (int i = 0; i < size; i++) {
|
||||
const char* spec = binary_tele[i].tables[1];
|
||||
string specStr = (spec != nullptr && strlen(spec) > 0) ? string(spec) : "";
|
||||
float defaultVal = atof(binary_tele[i].defaultValue);
|
||||
string key = string(binary_tele[i].item);
|
||||
IModel* model = registry.getOrCreate(specStr, defaultVal, key);
|
||||
|
||||
if (binary_tele[i].type[0] == 'b') {
|
||||
/*bool量*/
|
||||
if (binary_tele[i].length != '1') {
|
||||
binary_tele[i] = RandT::randomBool();
|
||||
if (strcmp(binary_tele[i].item, "3G-DSA-B01-01B") == 0) {
|
||||
/*2#张力辊压辊打开*/
|
||||
binary_tele[i] = (float)idata(data_index, 0);
|
||||
} else if (strcmp(binary_tele[i].item, "3G-PX-B01-01") == 0) {
|
||||
/*2#张力辊压辊打开位*/
|
||||
binary_tele[i] = (float)idata(data_index, 1);
|
||||
} else if (strcmp(binary_tele[i].item, "3G-DSA-B01-01A") == 0) {
|
||||
/*2#张力辊压辊关闭*/
|
||||
binary_tele[i] = (float)idata(data_index, 2);
|
||||
}
|
||||
|
||||
else if (strcmp(binary_tele[i].item, "ENT_DR_2R22_limi") == 0) {
|
||||
/*No.2入口钢卷小车-后退极限接近开关*/
|
||||
binary_tele[i] = (float)car_data(data_index, 1);
|
||||
} else if (strcmp(binary_tele[i].item, "ENT_DR_2R11_act") == 0) {
|
||||
/*4#机架窜辊动作1*/
|
||||
binary_tele[i] = (float)std4_cr(data_index, 1);
|
||||
} else if (strcmp(binary_tele[i].item, "ENT_DR_2R12_act") == 0) {
|
||||
/*4#机架窜辊动作2*/
|
||||
binary_tele[i] = (float)std4_cr(data_index, 2);
|
||||
} else if (strcmp(binary_tele[i].item, "ENT_DR_2R11_limi") == 0) {
|
||||
/*4#机架窜辊动作3*/
|
||||
binary_tele[i] = (float)std4_cr(data_index, 3);
|
||||
} else if (strcmp(binary_tele[i].item, "ENT_DR_2R12_limi") == 0) {
|
||||
/*4#机架窜辊动作4*/
|
||||
binary_tele[i] = (float)std4_cr(data_index, 4);
|
||||
} else if (strcmp(binary_tele[i].item, "ENT_DR_2_run") == 0) {
|
||||
/*入口活套-No.8摆动门传动侧关闭极限接近开关*/
|
||||
binary_tele[i] = (float)loop8_bool(data_index, 0);
|
||||
} else if (strcmp(binary_tele[i].item, "ENT_DR_2_Ft") == 0) {
|
||||
/*入口活套-No.8摆动门操作侧关闭极限接近开关*/
|
||||
binary_tele[i] = (float)loop8_bool(data_index, 1);
|
||||
}
|
||||
|
||||
} else {
|
||||
logger_->Error() << "event_no:" << event_no << ",数据项:"
|
||||
<< binary_tele[i].chinese
|
||||
<< ",item:" << binary_tele[i].item
|
||||
<< "类型长度不匹配,"
|
||||
<< "type:" << binary_tele[i].type
|
||||
<< ",lenth:" << binary_tele[i].length << std::endl;
|
||||
}
|
||||
binary_tele[i] = model->evaluateBool(data_index) ? 1.0f : 0.0f;
|
||||
} else {
|
||||
/*模拟量*/
|
||||
strcpy((char *)binary_tele[i].value, binary_tele[i].defaultValue);
|
||||
float dataN = binary_tele[i];
|
||||
binary_tele[i] = float(dataN + RandT::RandT(-0.01, 0.01));
|
||||
|
||||
if (strcmp(binary_tele[i].item, "BR1_1_V_act") == 0) {
|
||||
/*1#张力辊1#辊 实际速度*/
|
||||
binary_tele[i] =
|
||||
(float)binary_tele[i] + (float)c308fur2col(data_index, 1);
|
||||
} else if (strcmp(binary_tele[i].item, "BR1_2_V_act") == 0) {
|
||||
/*2#张力辊1#辊 设定速度*/
|
||||
binary_tele[i] =
|
||||
(float)binary_tele[i] + (float)c308fur2col(data_index, 0);
|
||||
} else if (strcmp(binary_tele[i].item, "BR2_1_V_act") == 0) {
|
||||
/*2#张力辊1#辊 实际电流*/
|
||||
binary_tele[i] =
|
||||
(float)binary_tele[i] + (float)c308fur2col(data_index, 0);
|
||||
} else if (strcmp(binary_tele[i].item, "BR2_2_V_act") == 0) {
|
||||
/*2#张力辊2#辊 实际速度*/
|
||||
binary_tele[i] =
|
||||
(float)binary_tele[i] + (float)c308fur2col(data_index, 1);
|
||||
} else if (strcmp(binary_tele[i].item, "BR2_2_I_act") == 0) {
|
||||
/*2#张力辊2#辊 实际电流*/
|
||||
binary_tele[i] = (float)spbdata(data_index, 1);
|
||||
} else if (strcmp(binary_tele[i].item, "BR2_2_TQ_act") == 0) {
|
||||
/*2#张力辊2#辊 实际转矩*/
|
||||
binary_tele[i] = (float)spbdata(data_index, 2);
|
||||
} else if (strcmp(binary_tele[i].item, "IW_3G_LV_J02_03") == 0) {
|
||||
/*入口液压站液位*/
|
||||
binary_tele[i] = (float)liquid_data(data_index, 0);
|
||||
} else if (strcmp(binary_tele[i].item, "TCM-4-82-BDRef-1-118") == 0) {
|
||||
/*1#机架工作辊正弯辊压力给定*/
|
||||
binary_tele[i] = (float)std1_wr(data_index, 0);
|
||||
} else if (strcmp(binary_tele[i].item, "TCM-4-82-BD-1-101") == 0) {
|
||||
/*1#机架工作辊正弯辊压力反馈*/
|
||||
binary_tele[i] = (float)std1_wr(data_index, 1);
|
||||
} else if (strcmp(binary_tele[i].item, "TCM-72-150-BDRef-5-134") == 0) {
|
||||
/*5#机架工作辊DS正弯辊压力给定*/
|
||||
binary_tele[i] = (float)std5_wr(data_index, 0);
|
||||
} else if (strcmp(binary_tele[i].item, "TCM-72-150-BD-5-117") == 0) {
|
||||
/*5#机架工作辊DS正弯辊压力反馈*/
|
||||
binary_tele[i] = (float)std5_wr(data_index, 1);
|
||||
} else if (strcmp(binary_tele[i].item, "ENT_BR_4R1_torfbk") == 0) {
|
||||
/*3#活套1#电机电流*/
|
||||
binary_tele[i] = (float)loop3(data_index, 0);
|
||||
} else if (strcmp(binary_tele[i].item, "ENT_BR_4R2_torfbk") == 0) {
|
||||
/*3#活套2#电机电流*/
|
||||
binary_tele[i] = (float)loop3(data_index, 1);
|
||||
} else if (strcmp(binary_tele[i].item, "ENT_BR_4R3_torfbk") == 0) {
|
||||
/*3#活套3#电机电流*/
|
||||
binary_tele[i] = (float)loop3(data_index, 2);
|
||||
} else if (strcmp(binary_tele[i].item, "ENT_BR_4R3_curfbk") == 0) {
|
||||
/*3#活套4#电机电流*/
|
||||
binary_tele[i] = (float)loop3(data_index, 3);
|
||||
} else if (strcmp(binary_tele[i].item, "ENT_BR_4R1_curfbk") == 0) {
|
||||
/*3#活套5#电机电流*/
|
||||
binary_tele[i] = (float)loop3(data_index, 4);
|
||||
} else if (strcmp(binary_tele[i].item, "ENT_BR_4R2_curfbk") == 0) {
|
||||
/*4#机架上中间辊窜辊编码器*/
|
||||
binary_tele[i] = (float)std4_cr(data_index, 0);
|
||||
} else if (strcmp(binary_tele[i].item, "ACD-3-42-FQ-2") == 0) {
|
||||
/*3#酸槽出口流量 ---Test*/
|
||||
binary_tele[i] = (float)RandT::randomBool();
|
||||
} else {
|
||||
// logger_->Debug() << "test:" << binary_tele[i].item
|
||||
// << ",value:" << binary_tele[i] << endl;
|
||||
}
|
||||
|
||||
// logger_->Debug() << "vale:" << binary_tele[i].value << "," << dataN
|
||||
// << endl;
|
||||
binary_tele[i] = model->evaluate(data_index);
|
||||
}
|
||||
}
|
||||
// binary_tele.Print();
|
||||
char *buff = binary_tele.GetTeleData();
|
||||
// this->logger_->Debug() << buff << endl;
|
||||
// map_tables_[event_no]->push((PLC_DATA*)buff);
|
||||
m_mapfix[event_no]->push((PLC_DATA *)buff);
|
||||
// ((BinaryTele*)buff)->Print();
|
||||
|
||||
char* buff = binary_tele.GetTeleData();
|
||||
m_mapfix[event_no]->push((PLC_DATA*)buff);
|
||||
return true;
|
||||
} catch (const std::exception &e) {
|
||||
} catch (const std::exception& e) {
|
||||
logger_->Error() << "wtite_in_shm Error!" << e.what() << std::endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,24 +3,26 @@
|
||||
#include <glob/BinaryTele.h>
|
||||
#include <log4cplus/LOG.h>
|
||||
#include <zlib/MemVar.h>
|
||||
#include <zlib/MemFix.hpp>
|
||||
#include <zlib/zoneDef.h>
|
||||
#include <TestProject/RNG/model/ModelRegistry.h>
|
||||
#include <array>
|
||||
#include <chrono>
|
||||
#include <map>
|
||||
#include <numeric>
|
||||
#include <string>
|
||||
#include <zlib/MemFix.hpp>
|
||||
#include <zlib/MemTable.hpp>
|
||||
using namespace chrono;
|
||||
using namespace std;
|
||||
|
||||
class Generator {
|
||||
public:
|
||||
public:
|
||||
Generator();
|
||||
~Generator();
|
||||
bool wtite_in_shm(int event_no);
|
||||
|
||||
private:
|
||||
private:
|
||||
std::unique_ptr<LOG> logger_;
|
||||
BinaryTele binary_tele{CMemVar::Const()->event_eis_start, "T_LOV_FDAAITEM"};
|
||||
// map<int, CMemTable<PLC_DATA>*> map_tables_;
|
||||
map<int, CMemFix<PLC_DATA>*> m_mapfix;
|
||||
chrono::system_clock::time_point stime;
|
||||
};
|
||||
ModelRegistry& registry;
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user