컬럼명칭 통일 C-xxxxx + SIGPIPE 대응 + SteamAdvisor/FF 개선
=== 컬럼명칭 통일 (c{prefix} → C-{prefix}11) ===
Python 분석스크립트: data pkl 경로 →
gen_temp_profiles: tempref 파일명 →
SteamAdvisorController: TagsFor() 숫자서픽스 → 풀컬럼키(C-6111), ToSuffix() 변환
steam.js: ST_TEMP_COLS ['61',...] → ['C-6111',...], selectbox defaultColumn
appsettings.json: Columns 키 c61/c62/... → C-6111/C-6211/..., DefaultColumn c6111→C-6111
run_column.py: 추출/분석시 col_key = f"C-{{prefix}}11"
C-{x}11_{model,tempref}.json: 신규 명칭 기준 기준프로파일/모델 7컬럼분
=== SteamAdvisor 수정 ===
SteamModel: [JsonPropertyName] 매핑(snake_case → PascalCase 역직렬화)
예외처리: LinearCoeffs.Count < 3 방어코드
steam.js: catch(_) {} → 에러메시지 표시, missing_tags 응답처리
=== Feedforward Controller 개선 ===
ff.js: 상승/하강 양방향 램프 confirm, 방향뱃지(↑↓), Normal 모드 표시
FeedforwardController: 업램프 단독제한 제거(양방향), tcReturnTcTarget/Band 노출
=== DB ===
Hc900DbContext: realtime_table_tagname_key 레거시 UNIQUE 제약/인덱스 DROP 로직
Hc900Controllers: ToDictionaryAsync → GroupBy 변환 (중복 tagname 대응)
=== SIGPIPE 대응 ===
gateway.cpp: signal(SIGPIPE, SIG_IGN) 메인스레드 설치
modbus_tcp.cpp: send() flags 0 → MSG_NOSIGNAL (EPIPE 복구)
sigpipe_ignore.c: LD_PRELOAD 우회 공유라이브러리
Hc900GatewayProcessService: LD_PRELOAD 환경변수 설정
This commit is contained in:
34
scripts/analysis/C-10111_model.json
Normal file
34
scripts/analysis/C-10111_model.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"column": "C-10111",
|
||||
"features": [
|
||||
"feed",
|
||||
"product",
|
||||
"T_C"
|
||||
],
|
||||
"linear_coeffs": [
|
||||
-0.4608333188018109,
|
||||
0.030778679890158908,
|
||||
8.364320439105626
|
||||
],
|
||||
"intercept": 284.18717440136294,
|
||||
"linear_r2": 0.2019,
|
||||
"gbm_r2": 0.9981,
|
||||
"valve_poly": [
|
||||
-1.4012718976320648e-07,
|
||||
0.0003106626129801823,
|
||||
-0.18598847329591273,
|
||||
85.81924723424272
|
||||
],
|
||||
"envelope_lo": {
|
||||
"feed": 693.5,
|
||||
"product": 104.9,
|
||||
"T_C": 58.8
|
||||
},
|
||||
"envelope_hi": {
|
||||
"feed": 1264.4,
|
||||
"product": 1005.0,
|
||||
"T_C": 81.8
|
||||
},
|
||||
"n_operating_points": 23,
|
||||
"n_prod_rows": 5098
|
||||
}
|
||||
67
scripts/analysis/C-10111_tempref.json
Normal file
67
scripts/analysis/C-10111_tempref.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"column": "C-10111",
|
||||
"stages_order": [
|
||||
"reb_temp",
|
||||
"T_B",
|
||||
"T_C",
|
||||
"T_D"
|
||||
],
|
||||
"n_products": 2,
|
||||
"period": "2026-02-20~2026-04-13",
|
||||
"products": [
|
||||
{
|
||||
"label": "P0",
|
||||
"n_rows": 361,
|
||||
"span_AD": 9.02,
|
||||
"vacuum": {
|
||||
"median": 45.12,
|
||||
"std": 13.38
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 78.78,
|
||||
"std": 4.2
|
||||
},
|
||||
"T_B": {
|
||||
"median": 77.64,
|
||||
"std": 11.64
|
||||
},
|
||||
"T_C": {
|
||||
"median": 71.75,
|
||||
"std": 8.56
|
||||
},
|
||||
"T_D": {
|
||||
"median": 69.84,
|
||||
"std": 8.77
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "P1",
|
||||
"n_rows": 4897,
|
||||
"span_AD": 3.22,
|
||||
"vacuum": {
|
||||
"median": 76.95,
|
||||
"std": 3.59
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 84.3,
|
||||
"std": 0.67
|
||||
},
|
||||
"T_B": {
|
||||
"median": 83.46,
|
||||
"std": 3.33
|
||||
},
|
||||
"T_C": {
|
||||
"median": 81.71,
|
||||
"std": 4.32
|
||||
},
|
||||
"T_D": {
|
||||
"median": 81.28,
|
||||
"std": 7.14
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
34
scripts/analysis/C-10211_model.json
Normal file
34
scripts/analysis/C-10211_model.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"column": "C-10211",
|
||||
"features": [
|
||||
"feed",
|
||||
"product",
|
||||
"T_C"
|
||||
],
|
||||
"linear_coeffs": [
|
||||
0.9294864374761924,
|
||||
-0.15452592481820945,
|
||||
-4.355733003639835
|
||||
],
|
||||
"intercept": 51.96343762286648,
|
||||
"linear_r2": 0.2824,
|
||||
"gbm_r2": 0.999,
|
||||
"valve_poly": [
|
||||
6.752259912738752e-08,
|
||||
-0.00010864860285235597,
|
||||
0.0801331606949025,
|
||||
7.741006044043883
|
||||
],
|
||||
"envelope_lo": {
|
||||
"feed": 590.9,
|
||||
"product": 271.8,
|
||||
"T_C": 78.1
|
||||
},
|
||||
"envelope_hi": {
|
||||
"feed": 838.3,
|
||||
"product": 760.9,
|
||||
"T_C": 79.4
|
||||
},
|
||||
"n_operating_points": 30,
|
||||
"n_prod_rows": 20701
|
||||
}
|
||||
67
scripts/analysis/C-10211_tempref.json
Normal file
67
scripts/analysis/C-10211_tempref.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"column": "C-10211",
|
||||
"stages_order": [
|
||||
"reb_temp",
|
||||
"T_B",
|
||||
"T_C",
|
||||
"T_D"
|
||||
],
|
||||
"n_products": 2,
|
||||
"period": "2026-05-26~2026-06-02",
|
||||
"products": [
|
||||
{
|
||||
"label": "P0",
|
||||
"n_rows": 19649,
|
||||
"span_AD": 4.62,
|
||||
"vacuum": {
|
||||
"median": 49.97,
|
||||
"std": 0.22
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 82.45,
|
||||
"std": 0.79
|
||||
},
|
||||
"T_B": {
|
||||
"median": 81.52,
|
||||
"std": 0.87
|
||||
},
|
||||
"T_C": {
|
||||
"median": 78.91,
|
||||
"std": 0.65
|
||||
},
|
||||
"T_D": {
|
||||
"median": 78.03,
|
||||
"std": 0.97
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "P1",
|
||||
"n_rows": 1080,
|
||||
"span_AD": 23.54,
|
||||
"vacuum": {
|
||||
"median": 49.97,
|
||||
"std": 0.16
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 87.58,
|
||||
"std": 1.08
|
||||
},
|
||||
"T_B": {
|
||||
"median": 85.04,
|
||||
"std": 1.58
|
||||
},
|
||||
"T_C": {
|
||||
"median": 78.36,
|
||||
"std": 2.07
|
||||
},
|
||||
"T_D": {
|
||||
"median": 64.54,
|
||||
"std": 4.55
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
34
scripts/analysis/C-6111_model.json
Normal file
34
scripts/analysis/C-6111_model.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"column": "C-6111",
|
||||
"features": [
|
||||
"feed",
|
||||
"product",
|
||||
"T_C"
|
||||
],
|
||||
"linear_coeffs": [
|
||||
0.7327615829237054,
|
||||
-0.02428538513646001,
|
||||
7.063793833539203
|
||||
],
|
||||
"intercept": -585.4115834877662,
|
||||
"linear_r2": 0.9861,
|
||||
"gbm_r2": 0.9949,
|
||||
"valve_poly": [
|
||||
4.5825416007577506e-07,
|
||||
-0.000721366513035835,
|
||||
0.41181608994764535,
|
||||
-42.70089479377073
|
||||
],
|
||||
"envelope_lo": {
|
||||
"feed": 380.5,
|
||||
"product": 329.2,
|
||||
"T_C": 83.9
|
||||
},
|
||||
"envelope_hi": {
|
||||
"feed": 911.8,
|
||||
"product": 824.0,
|
||||
"T_C": 86.1
|
||||
},
|
||||
"n_operating_points": 479,
|
||||
"n_prod_rows": 333626
|
||||
}
|
||||
67
scripts/analysis/C-6111_tempref.json
Normal file
67
scripts/analysis/C-6111_tempref.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"column": "C-6111",
|
||||
"stages_order": [
|
||||
"reb_temp",
|
||||
"T_B",
|
||||
"T_C",
|
||||
"T_D"
|
||||
],
|
||||
"n_products": 2,
|
||||
"period": "2026-02-05~2026-06-05",
|
||||
"products": [
|
||||
{
|
||||
"label": "P0",
|
||||
"n_rows": 171623,
|
||||
"span_AD": 1.69,
|
||||
"vacuum": {
|
||||
"median": 112.99,
|
||||
"std": 0.38
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 84.81,
|
||||
"std": 0.5
|
||||
},
|
||||
"T_B": {
|
||||
"median": 84.33,
|
||||
"std": 0.43
|
||||
},
|
||||
"T_C": {
|
||||
"median": 84.07,
|
||||
"std": 0.28
|
||||
},
|
||||
"T_D": {
|
||||
"median": 83.12,
|
||||
"std": 0.15
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "P1",
|
||||
"n_rows": 162003,
|
||||
"span_AD": 4.56,
|
||||
"vacuum": {
|
||||
"median": 113.01,
|
||||
"std": 0.68
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 87.48,
|
||||
"std": 0.69
|
||||
},
|
||||
"T_B": {
|
||||
"median": 86.54,
|
||||
"std": 0.56
|
||||
},
|
||||
"T_C": {
|
||||
"median": 85.48,
|
||||
"std": 0.39
|
||||
},
|
||||
"T_D": {
|
||||
"median": 82.92,
|
||||
"std": 0.1
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
34
scripts/analysis/C-6211_model.json
Normal file
34
scripts/analysis/C-6211_model.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"column": "C-6211",
|
||||
"features": [
|
||||
"feed",
|
||||
"product",
|
||||
"T_C"
|
||||
],
|
||||
"linear_coeffs": [
|
||||
0.4192774636696495,
|
||||
-0.0031327650421361097,
|
||||
56.90599492143593
|
||||
],
|
||||
"intercept": -4696.245060756706,
|
||||
"linear_r2": 0.9965,
|
||||
"gbm_r2": 0.998,
|
||||
"valve_poly": [
|
||||
3.2700894960484994e-07,
|
||||
-0.0005053236912242627,
|
||||
0.31737798932141487,
|
||||
-3.9334436250422447
|
||||
],
|
||||
"envelope_lo": {
|
||||
"feed": 391.1,
|
||||
"product": 355.8,
|
||||
"T_C": 84.0
|
||||
},
|
||||
"envelope_hi": {
|
||||
"feed": 906.3,
|
||||
"product": 823.4,
|
||||
"T_C": 86.9
|
||||
},
|
||||
"n_operating_points": 479,
|
||||
"n_prod_rows": 332544
|
||||
}
|
||||
67
scripts/analysis/C-6211_tempref.json
Normal file
67
scripts/analysis/C-6211_tempref.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"column": "C-6211",
|
||||
"stages_order": [
|
||||
"reb_temp",
|
||||
"T_B",
|
||||
"T_C",
|
||||
"T_D"
|
||||
],
|
||||
"n_products": 2,
|
||||
"period": "2026-02-05~2026-06-05",
|
||||
"products": [
|
||||
{
|
||||
"label": "P0",
|
||||
"n_rows": 264621,
|
||||
"span_AD": 2.09,
|
||||
"vacuum": {
|
||||
"median": 113.01,
|
||||
"std": 0.33
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 85.41,
|
||||
"std": 0.78
|
||||
},
|
||||
"T_B": {
|
||||
"median": 84.86,
|
||||
"std": 0.93
|
||||
},
|
||||
"T_C": {
|
||||
"median": 84.19,
|
||||
"std": 0.8
|
||||
},
|
||||
"T_D": {
|
||||
"median": 83.25,
|
||||
"std": 1.19
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "P1",
|
||||
"n_rows": 68534,
|
||||
"span_AD": 7.58,
|
||||
"vacuum": {
|
||||
"median": 113.01,
|
||||
"std": 0.32
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 90.43,
|
||||
"std": 1.1
|
||||
},
|
||||
"T_B": {
|
||||
"median": 88.21,
|
||||
"std": 0.55
|
||||
},
|
||||
"T_C": {
|
||||
"median": 86.72,
|
||||
"std": 0.44
|
||||
},
|
||||
"T_D": {
|
||||
"median": 82.85,
|
||||
"std": 0.08
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
34
scripts/analysis/C-8111_model.json
Normal file
34
scripts/analysis/C-8111_model.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"column": "C-8111",
|
||||
"features": [
|
||||
"feed",
|
||||
"product",
|
||||
"T_C"
|
||||
],
|
||||
"linear_coeffs": [
|
||||
0.07625525560006084,
|
||||
0.039701856173688654,
|
||||
13.98648334581965
|
||||
],
|
||||
"intercept": -960.7734208999705,
|
||||
"linear_r2": 0.659,
|
||||
"gbm_r2": 0.8313,
|
||||
"valve_poly": [
|
||||
1.8890153721106516e-06,
|
||||
-0.0015596046011240288,
|
||||
0.5296293071190988,
|
||||
-14.478452900869977
|
||||
],
|
||||
"envelope_lo": {
|
||||
"feed": 650.8,
|
||||
"product": 581.9,
|
||||
"T_C": 83.3
|
||||
},
|
||||
"envelope_hi": {
|
||||
"feed": 781.4,
|
||||
"product": 707.5,
|
||||
"T_C": 86.5
|
||||
},
|
||||
"n_operating_points": 280,
|
||||
"n_prod_rows": 199945
|
||||
}
|
||||
67
scripts/analysis/C-8111_tempref.json
Normal file
67
scripts/analysis/C-8111_tempref.json
Normal file
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"column": "C-8111",
|
||||
"stages_order": [
|
||||
"reb_temp",
|
||||
"T_B",
|
||||
"T_C",
|
||||
"T_D"
|
||||
],
|
||||
"n_products": 2,
|
||||
"period": "2026-03-27~2026-06-05",
|
||||
"products": [
|
||||
{
|
||||
"label": "P0",
|
||||
"n_rows": 28459,
|
||||
"span_AD": 15.16,
|
||||
"vacuum": {
|
||||
"median": 49.97,
|
||||
"std": 0.14
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 93.38,
|
||||
"std": 1.02
|
||||
},
|
||||
"T_B": {
|
||||
"median": 91.57,
|
||||
"std": 0.91
|
||||
},
|
||||
"T_C": {
|
||||
"median": 83.97,
|
||||
"std": 0.54
|
||||
},
|
||||
"T_D": {
|
||||
"median": 78.22,
|
||||
"std": 0.13
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "P1",
|
||||
"n_rows": 171490,
|
||||
"span_AD": 16.36,
|
||||
"vacuum": {
|
||||
"median": 49.97,
|
||||
"std": 0.18
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 94.92,
|
||||
"std": 0.66
|
||||
},
|
||||
"T_B": {
|
||||
"median": 93.05,
|
||||
"std": 0.62
|
||||
},
|
||||
"T_C": {
|
||||
"median": 85.18,
|
||||
"std": 0.51
|
||||
},
|
||||
"T_D": {
|
||||
"median": 78.56,
|
||||
"std": 0.12
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
34
scripts/analysis/C-9111_model.json
Normal file
34
scripts/analysis/C-9111_model.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"column": "C-9111",
|
||||
"features": [
|
||||
"feed",
|
||||
"product",
|
||||
"T_C"
|
||||
],
|
||||
"linear_coeffs": [
|
||||
0.07154616245940783,
|
||||
0.41909641263227626,
|
||||
-23.77111363563102
|
||||
],
|
||||
"intercept": 2169.7017492750356,
|
||||
"linear_r2": 0.746,
|
||||
"gbm_r2": 0.9968,
|
||||
"valve_poly": [
|
||||
5.592609787272492e-09,
|
||||
-8.2019564706617e-06,
|
||||
0.03620454531728825,
|
||||
17.7448717037642
|
||||
],
|
||||
"envelope_lo": {
|
||||
"feed": 254.0,
|
||||
"product": 176.7,
|
||||
"T_C": 73.5
|
||||
},
|
||||
"envelope_hi": {
|
||||
"feed": 1427.6,
|
||||
"product": 1342.0,
|
||||
"T_C": 82.5
|
||||
},
|
||||
"n_operating_points": 161,
|
||||
"n_prod_rows": 107198
|
||||
}
|
||||
40
scripts/analysis/C-9111_tempref.json
Normal file
40
scripts/analysis/C-9111_tempref.json
Normal file
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"column": "C-9111",
|
||||
"stages_order": [
|
||||
"reb_temp",
|
||||
"T_B",
|
||||
"T_C",
|
||||
"T_D"
|
||||
],
|
||||
"n_products": 1,
|
||||
"period": "2026-02-26~2026-06-05",
|
||||
"products": [
|
||||
{
|
||||
"label": "P0",
|
||||
"n_rows": 163236,
|
||||
"span_AD": 2.29,
|
||||
"vacuum": {
|
||||
"median": 76.99,
|
||||
"std": 6.51
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 83.63,
|
||||
"std": 1.82
|
||||
},
|
||||
"T_B": {
|
||||
"median": 83.49,
|
||||
"std": 2.31
|
||||
},
|
||||
"T_C": {
|
||||
"median": 82.16,
|
||||
"std": 3.69
|
||||
},
|
||||
"T_D": {
|
||||
"median": 81.54,
|
||||
"std": 4.32
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
34
scripts/analysis/C-9211_model.json
Normal file
34
scripts/analysis/C-9211_model.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"column": "C-9211",
|
||||
"features": [
|
||||
"feed",
|
||||
"product",
|
||||
"T_C"
|
||||
],
|
||||
"linear_coeffs": [
|
||||
0.22082559721551914,
|
||||
0.41742853431313043,
|
||||
6.570197052019047
|
||||
],
|
||||
"intercept": -479.59199642741356,
|
||||
"linear_r2": 0.5715,
|
||||
"gbm_r2": 0.9835,
|
||||
"valve_poly": [
|
||||
5.864565272695953e-07,
|
||||
-0.0006161781631431878,
|
||||
0.28501938580083425,
|
||||
-15.01586412685447
|
||||
],
|
||||
"envelope_lo": {
|
||||
"feed": 269.7,
|
||||
"product": 98.7,
|
||||
"T_C": 74.7
|
||||
},
|
||||
"envelope_hi": {
|
||||
"feed": 453.6,
|
||||
"product": 397.4,
|
||||
"T_C": 90.2
|
||||
},
|
||||
"n_operating_points": 242,
|
||||
"n_prod_rows": 165829
|
||||
}
|
||||
94
scripts/analysis/C-9211_tempref.json
Normal file
94
scripts/analysis/C-9211_tempref.json
Normal file
@@ -0,0 +1,94 @@
|
||||
{
|
||||
"column": "C-9211",
|
||||
"stages_order": [
|
||||
"reb_temp",
|
||||
"T_B",
|
||||
"T_C",
|
||||
"T_D"
|
||||
],
|
||||
"n_products": 3,
|
||||
"period": "2026-02-26~2026-06-04",
|
||||
"products": [
|
||||
{
|
||||
"label": "P0",
|
||||
"n_rows": 8412,
|
||||
"span_AD": 10.75,
|
||||
"vacuum": {
|
||||
"median": 40.13,
|
||||
"std": 3.79
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 85.1,
|
||||
"std": 2.34
|
||||
},
|
||||
"T_B": {
|
||||
"median": 83.29,
|
||||
"std": 2.14
|
||||
},
|
||||
"T_C": {
|
||||
"median": 77.03,
|
||||
"std": 1.44
|
||||
},
|
||||
"T_D": {
|
||||
"median": 74.15,
|
||||
"std": 1.57
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "P1",
|
||||
"n_rows": 138164,
|
||||
"span_AD": 9.43,
|
||||
"vacuum": {
|
||||
"median": 50.01,
|
||||
"std": 3.82
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 88.31,
|
||||
"std": 0.79
|
||||
},
|
||||
"T_B": {
|
||||
"median": 87.03,
|
||||
"std": 0.72
|
||||
},
|
||||
"T_C": {
|
||||
"median": 81.37,
|
||||
"std": 0.97
|
||||
},
|
||||
"T_D": {
|
||||
"median": 78.88,
|
||||
"std": 1.79
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "P2",
|
||||
"n_rows": 19405,
|
||||
"span_AD": 12.77,
|
||||
"vacuum": {
|
||||
"median": 79.57,
|
||||
"std": 14.99
|
||||
},
|
||||
"stages": {
|
||||
"reb_temp": {
|
||||
"median": 93.72,
|
||||
"std": 1.99
|
||||
},
|
||||
"T_B": {
|
||||
"median": 92.58,
|
||||
"std": 2.04
|
||||
},
|
||||
"T_C": {
|
||||
"median": 89.38,
|
||||
"std": 3.57
|
||||
},
|
||||
"T_D": {
|
||||
"median": 79.21,
|
||||
"std": 5.1
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -20,8 +20,8 @@ FEATURES = ["feed", "product", "T_C"]
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--data", default=BASE + "c6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="c6111")
|
||||
parser.add_argument("--data", default=BASE + "C-6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="C-6111")
|
||||
parser.add_argument("--output", help="JSON 출력 경로 (기본: scripts/analysis/{prefix}_model.json)")
|
||||
args = parser.parse_args()
|
||||
df = pd.read_pickle(args.data)
|
||||
|
||||
@@ -241,7 +241,7 @@ def main():
|
||||
for m, n in vc.items():
|
||||
print(f" {m:9s} {n:7d} {100*n/len(df):5.1f}% ≈ {n*30/3600:7.1f} h")
|
||||
|
||||
out = "/home/windpacer/projects/hc900_ax/scripts/analysis/c6111_data.pkl"
|
||||
out = "/home/windpacer/projects/hc900_ax/scripts/analysis/C-6111_data.pkl"
|
||||
df.to_pickle(out)
|
||||
plot_timeline(df, "/home/windpacer/projects/hc900_ax/scripts/analysis/c6111_timeline.png")
|
||||
print(f"저장: {out}")
|
||||
|
||||
@@ -127,8 +127,8 @@ class OperatorAssist:
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--data", default=BASE + "c6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="c6111")
|
||||
parser.add_argument("--data", default=BASE + "C-6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="C-6111")
|
||||
parser.add_argument("--live", help='JSON live_tags for single predict test')
|
||||
args = parser.parse_args()
|
||||
df = pd.read_pickle(args.data)
|
||||
|
||||
@@ -25,7 +25,7 @@ OP_RESAMPLE = "6h"
|
||||
|
||||
def load(data_path=None):
|
||||
if data_path is None:
|
||||
data_path = BASE + "c6111_data.pkl"
|
||||
data_path = BASE + "C-6111_data.pkl"
|
||||
df = pd.read_pickle(data_path)
|
||||
df = df[df["mode"] == "PROD"].copy()
|
||||
# 엔지니어링 피처: 온도 구배(분리도)
|
||||
@@ -100,7 +100,7 @@ def regress(df):
|
||||
return ops, gbm, Xte, yte, gbm.predict(Xte), imp
|
||||
|
||||
|
||||
def plots(hb, ops, yte, pred, imp, prefix="c6111"):
|
||||
def plots(hb, ops, yte, pred, imp, prefix="C-6111"):
|
||||
fig, ax = plt.subplots(1, 4, figsize=(22, 5))
|
||||
ax[0].scatter(hb["op"], hb["flow"], s=20, c="k", label="mean")
|
||||
ax[0].plot(hb["op"], hb["flow_up"], "b.-", ms=4, label="OP rising")
|
||||
@@ -121,8 +121,8 @@ def plots(hb, ops, yte, pred, imp, prefix="c6111"):
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--data", default=BASE + "c6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="c6111")
|
||||
parser.add_argument("--data", default=BASE + "C-6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="C-6111")
|
||||
args = parser.parse_args()
|
||||
df = load(args.data)
|
||||
print(f"PROD 정합데이터 {len(df)}행")
|
||||
|
||||
@@ -18,8 +18,8 @@ RETRAIN_EVERY = "1D"
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--data", default=BASE + "c6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="c6111")
|
||||
parser.add_argument("--data", default=BASE + "C-6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="C-6111")
|
||||
args = parser.parse_args()
|
||||
df = pd.read_pickle(args.data)
|
||||
df = df[df["mode"] == "PROD"].copy()
|
||||
|
||||
@@ -40,8 +40,8 @@ class SteamPredictor:
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--data", default=BASE + "c6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="c6111")
|
||||
parser.add_argument("--data", default=BASE + "C-6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="C-6111")
|
||||
args = parser.parse_args()
|
||||
df = pd.read_pickle(args.data)
|
||||
df = df[df["mode"] == "PROD"].copy()
|
||||
|
||||
@@ -89,8 +89,8 @@ def shutdown_milestones(df, co):
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--data", default=BASE + "c6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="c6111")
|
||||
parser.add_argument("--data", default=BASE + "C-6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="C-6111")
|
||||
args = parser.parse_args()
|
||||
df = pd.read_pickle(args.data).sort_values("dtat").reset_index(drop=True)
|
||||
cutoffs = detect_cutoffs(df)
|
||||
|
||||
@@ -60,8 +60,8 @@ def milestones(df, ci):
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--data", default=BASE + "c6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="c6111")
|
||||
parser.add_argument("--data", default=BASE + "C-6111_data.pkl")
|
||||
parser.add_argument("--prefix", default="C-6111")
|
||||
args = parser.parse_args()
|
||||
df = pd.read_pickle(args.data).sort_values("dtat").reset_index(drop=True)
|
||||
cutins = detect_cutins(df)
|
||||
|
||||
@@ -22,7 +22,7 @@ MOVE = 0.1 # OP 변경 인식 임계(%)
|
||||
|
||||
|
||||
def main():
|
||||
df = pd.read_pickle(BASE + "c6111_data.pkl")
|
||||
df = pd.read_pickle(BASE + "C-6111_data.pkl")
|
||||
df = df[df["mode"] == "PROD"].copy().sort_values("dtat").reset_index(drop=True)
|
||||
df = df[(df["feed"] > 50) & (df["steam_op"] > 1)]
|
||||
|
||||
|
||||
@@ -359,8 +359,8 @@ def _nanmid(s):
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(description="Export plot data as JSON for web dashboard")
|
||||
parser.add_argument("--data", default=os.path.join(BASE, "c6111_data.pkl"))
|
||||
parser.add_argument("--prefix", default="c6111")
|
||||
parser.add_argument("--data", default=os.path.join(BASE, "C-6111_data.pkl"))
|
||||
parser.add_argument("--prefix", default="C-6111")
|
||||
parser.add_argument("--output", default=None, help="Output path (default: data/{prefix}_plotdata.json)")
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
@@ -35,8 +35,8 @@ def cluster_products(reb):
|
||||
|
||||
|
||||
def build(prefix, stable_from=None, stable_to=None):
|
||||
pkl = os.path.join(BASE, f"c{prefix}_data.pkl")
|
||||
if prefix == "61" and not os.path.exists(pkl):
|
||||
pkl = os.path.join(BASE, f"{prefix}_data.pkl")
|
||||
if prefix == "C-6111" and not os.path.exists(pkl):
|
||||
pkl = os.path.join(BASE, "c6111_data.pkl")
|
||||
if not os.path.exists(pkl):
|
||||
print(f" [skip] {prefix}: {pkl} 없음")
|
||||
@@ -68,14 +68,14 @@ def build(prefix, stable_from=None, stable_to=None):
|
||||
"std": round(float(g["vacuum"].std()), 2)},
|
||||
"stages": stages,
|
||||
})
|
||||
ref = {"column": f"c{prefix}", "stages_order": STAGES,
|
||||
ref = {"column": prefix, "stages_order": STAGES,
|
||||
"n_products": len(products),
|
||||
"period": f"{df['dtat'].min():%Y-%m-%d}~{df['dtat'].max():%Y-%m-%d}",
|
||||
"products": products}
|
||||
out = os.path.join(BASE, f"c{prefix}_tempref.json")
|
||||
out = os.path.join(BASE, f"{prefix}_tempref.json")
|
||||
with open(out, "w") as f:
|
||||
json.dump(ref, f, indent=2, ensure_ascii=False)
|
||||
print(f" c{prefix}: 제품 {len(products)}개 ", end="")
|
||||
print(f" {prefix}: 제품 {len(products)}개 ", end="")
|
||||
for p in products:
|
||||
s = p["stages"]
|
||||
print(f"[{p['label']} reb{s['reb_temp']['median']:.1f}/Tc{s['T_C']['median']:.1f}/"
|
||||
@@ -90,7 +90,7 @@ def main():
|
||||
ap.add_argument("--from", dest="stable_from", help="안정구간 시작 YYYY-MM-DD")
|
||||
ap.add_argument("--to", dest="stable_to", help="안정구간 끝")
|
||||
args = ap.parse_args()
|
||||
prefixes = [args.prefix] if args.prefix else ["61", "62", "81", "91", "92", "101", "102"]
|
||||
prefixes = [args.prefix] if args.prefix else ["C-6111", "C-6211", "C-8111", "C-9111", "C-9211", "C-10111", "C-10211"]
|
||||
for p in prefixes:
|
||||
build(p, args.stable_from, args.stable_to)
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@ PY = sys.executable
|
||||
|
||||
|
||||
def extract(prefix, asset):
|
||||
"""추출 + 운전모드 분류. c{prefix}_data.pkl 저장."""
|
||||
"""추출 + 운전모드 분류. C-{prefix}11_data.pkl 저장."""
|
||||
from c6111_extract import roles_for, tag_frame, classify_phases, clip_to_ranges
|
||||
|
||||
with psycopg.connect(DSN) as conn:
|
||||
@@ -48,7 +48,8 @@ def extract(prefix, asset):
|
||||
|
||||
df = clip_to_ranges(df, roles) # 계기 EU range 밖 스파이크 → NaN
|
||||
df["mode"] = classify_phases(df)
|
||||
out = os.path.join(BASE, f"c{prefix}_data.pkl")
|
||||
col_key = f"C-{prefix}11"
|
||||
out = os.path.join(BASE, f"{col_key}_data.pkl")
|
||||
df.to_pickle(out)
|
||||
|
||||
print(f"\n=== {prefix} ({asset}) ===")
|
||||
@@ -62,8 +63,9 @@ def extract(prefix, asset):
|
||||
|
||||
def run_analysis(script, prefix):
|
||||
"""분석 스크립트 1개 실행 (subprocess)."""
|
||||
data = os.path.join(BASE, f"c{prefix}_data.pkl")
|
||||
cmd = [PY, os.path.join(BASE, script), "--data", data, "--prefix", f"c{prefix}"]
|
||||
col_key = f"C-{prefix}11"
|
||||
data = os.path.join(BASE, f"{col_key}_data.pkl")
|
||||
cmd = [PY, os.path.join(BASE, script), "--data", data, "--prefix", col_key]
|
||||
print(f"\n>>> {' '.join(cmd)}")
|
||||
r = subprocess.run(cmd)
|
||||
return r.returncode
|
||||
@@ -87,11 +89,12 @@ def compare():
|
||||
|
||||
rows = []
|
||||
for prefix, asset, label in COLUMNS:
|
||||
pkl = os.path.join(BASE, f"c{prefix}_data.pkl")
|
||||
# 6-1 legacy: c6111_data.pkl (not c61_data.pkl)
|
||||
if prefix == "61" and not os.path.exists(pkl):
|
||||
col_key = f"C-{prefix}11"
|
||||
pkl = os.path.join(BASE, f"{col_key}_data.pkl")
|
||||
# 6-1 legacy: c6111_data.pkl
|
||||
if not os.path.exists(pkl):
|
||||
alt = os.path.join(BASE, "c6111_data.pkl")
|
||||
if os.path.exists(alt):
|
||||
if prefix == "61" and os.path.exists(alt):
|
||||
pkl = alt
|
||||
if not os.path.exists(pkl):
|
||||
print(f" [skip] {label}: {pkl} 없음")
|
||||
|
||||
Reference in New Issue
Block a user