친애하는 커뮤니티 여러분, 저는 이 주제에 대해 어려움을 겪고 있습니다. 누군가 도와줄 수 있습니다. My Datatable은 "Timestamp"의 다른 시점에서 측정되는 "Serialnumber" 아래의 많은 부분으로 구성됩니다. 측정 결과(예: Isc, Pmpp, ...)
측정 시간이 증가함에 따라 행에 저장됩니다. 내가해야 할 일은 각 부품에 대한 첫 번째 측정 (가장 빠른 시간)으로 측정 값을 개별적으로 정규화하는 것입니다. 부품 XY와 유사 -> (Pmpp/Pmpp0; t=0)
큰 데이터 테이블을 한 부분만 포함하고 시간 경과에 따른 연속 측정을 포함하는 많은 하위 테이블로 서브세팅하는 스크립트를 작성했습니다. 아래 코드와 같이:
dt_LT = Open(big_datatable.jump);
Mod_Tab = dt_LT << Tabulate( Add Table( Row Table( Grouping Columns( :SerialNumber ) ) ) );
Mod_dt = Mod_Tab << Make Into Data Table;
Mod_dt << Set Name( "Modul-Datatable" );
Zahl_Mod = NRow (Mod_dt);
Current Data Table (Mod_dt);
Mod_List = :Name( "SerialNumber") << Get Values;
content= Text Box(Mod_List);
New Window ("Modul gefunden", content);
Current Data Table (dt_LT);
For (i = 1, i <= Zahl_Mod, i++,
dt_LT << clear row states;
dt_LT << select Where (:Name ("SerialNumber") == Mod_List[i]);
If( N Row( dt_LT << get selected rows ) < 3, Continue() );
Mod = dt_LT << Subset ((selected Rows), Output Table Name("Module_"||Mod_List[i]));
이것은 잘 작동합니다. 필요한 만큼 하위 테이블을 얻습니다. 또한 각 하위 집합에서 가장 빠른 측정이 제대로 작동하는지 확인하십시오. 아래 코드를 참조하십시오.
Current data table(Mod);
Eval (init_Zeit = col minimum(:Timestamp);
init_flash = Mod << get rows where ((:Timestamp) == init_Zeit);
row = init_flash[1];
실패한 것은 정규화입니다. 스크립트는 마지막 하위 집합에 고정되고 마지막 하위 집합 테이블의 가장 초기 측정으로 다른 모든 데이터를 정규화합니다.아래 스크립트 참조
Em0 = :Eff_Modul[row];
Ez0 = :Eff_Zelle[row];
FF0 = :FF[row];
Impp0 = :Impp[row];
Isc0 = :Isc[row];
Pmpp0 = :Pmpp[row];
Rs_Serial0 = :Rs_Serial[row];
Rsh_Shunt0 = :Rsh_Shunt[row];
Vmpp0 = :Vmpp[row];
Impp0 = :Impp[row];
Voc0 = :Voc[row];
New Column ("Pmpp_Norm", Numeric, continuous,
Formula ( :Pmpp / Pmpp0));
마지막 하위 테이블에서 나는 측정 열에서 정규화 후 1을 얻습니다. 다른 모든 하위 테이블에서는 정규화된 값에 대해 1 미만인 값을 얻습니다. for 루프 내에서 하위 집합 테이블 간에 어떻게 전환할 수 있습니까? 아무도 도울 수 있습니까? 미리 감사합니다
미카엘
답장을 보내 주셔서 감사합니다. 실제로 나는 for 루프에 "I"라고 부르는 표현식이 있었는데 이것은 증가 인덱스 "i"와 혼동을 일으켰습니다. 내 표현의 이름을 "I1"로 바꾸었고 제대로 작동했습니다!
고맙습니다, 미카엘
L-값은 할당의 왼쪽입니다. 비변수에 무언가를 할당하려고 합니다. 예를 들어:
Insert Into( { 5, 6, 7 }, 8 );
이 대안은 다음과 같이 작동합니다.
my list = { 5, 6, 7 };
Insert Into( my list, 8 );
안녕하세요, 초고속 답변 감사합니다!
제안한대로 스크립트를 다시 작성했습니다. for 루프가 중단되고 다음 항목으로 전환되지 않는 것보다 목록의 첫 번째 항목에 대해 계산이 잘 작동합니다. 디버거는 L-값이 없는 개체를 참조하여 무언가를 언급합니다...
그것이 무엇을 의미하는지 정말로 모릅니다. 변수를 재설정해야 합니까? 또는 활성 테이블에서 선택 항목을 삭제하시겠습니까?
다시 한 번 감사드립니다!
VG, 미카엘
전역 변수를 사용합니다. Pmpp0 열 수식에서 Pmpp0의 값이 반복될 때마다 계속 변경되면 수식 계산도 그에 따라 변경됩니다. 이 방법을 사용하는 경우 수식에서 변수의 평가된 현재 값을 명시적으로 사용해야 합니다.
예를 들어:
Pmpp0 = :Pmpp[row];
F = Eval Expr(:Pmpp / Expr(Pmpp0));// Formula expression with evaluated Pmpp0
Mod << New Column("Pmpp_Norm", Numeric, continuous, Formula(Name Expr(F)));