2016-10-09 9 views
2

새 위성 데이터 처리 센터가 완료되었으며 궤도에 진입하는 위성에서 실시간 데이터를 사용하여 초기 테스트를 수행 할 준비가되었습니다. 첫 번째 메시지가 화면에 표시되고 데이터 값 중 많은 부분이 범위를 벗어났습니다.
예를 들어, 터미널 화면에서 "델타 시간"으로 정의 된 것이 예상 된 범위 [0.01에서 10,000.00 초]를 벗어난 것으로 보이지만 이중으로 표시되는 값은 [-4.12318024e- 028 초]. 원시 바이트 기반 데이터 스트림을 자세히 조사한 후에는 [0xC0 0x83 0xA1 0xCA 0x66 0x55 0x40 0xBA]과 같이 원래 데이터가 위성에서 다운되는 것을 알 수 있습니다. 오래된 터미널 중 하나에서이 데이터는 올바르게 표시되고 예상되는 범위 내에 있습니다.위성 데이터 처리 오류

a. [5] What caused this problem? 
b. [5] If this is the real problem, what should the actual value be? 

답변

0

아, 고장 모드 분석. 정말로 중요!

글쎄, 다른 터미널 데이터를 올바르게 보여줍니다 -> 터미널과 데이터 사이에 호환성이 없습니다.

빅 엔디안, 리틀 엔디안? C로 코딩 되었기 때문에 "오래된"터미널이 거의 Endian이 아니길 기대하고 있습니다. 이제 데이터를 해석 할 수 있습니다. 여기

출력

#include <stdio.h> 

union myW { 
    double x; 
    // Recieved as:[0xC0 0x83 0xA1 0xCA 0x66 0x55 0x40 0xBA] 
    unsigned char d[8] = {0x83, 0xC0,0xCA, 0xA1, 0x55, 0x66, 0xBA, 0x40}; 
}; 

union myBad { 
    double x; 
    // Recieved as:[0xC0 0x83 0xA1 0xCA 0x66 0x55 0x40 0xBA] 
    unsigned char d[8] = {0xC0, 0x83,0xA1, 0xCA, 0x66, 0x55, 0x40, 0xBA}; 
}; 


int main(void) 
{ 
    myW value; 
    value.x = 1.0; // check how reasonable number looks like 

    printf("Something reasonable: \n"); 
    for(int i = 0; i < 8; i++) 
    { 
     printf("%u ", value.d[i]); 
    } 

    myW received; 
    printf("\nWhat shouldve been displayed:\n"); 
    for(int i = 0; i < 8; i++) 
    { 
     printf("%u ", received.d[i]); 
    } 
    printf("\n%f\n", received.x); 

    myBad bad; 
    printf("\nBad output as:\n"); 
    for(int i = 0; i < 8; i++) 
    { 
     printf("%u ", bad.d[i]); 
    } 
    printf("\n%0.30f\n", bad.x); 
} 

일부 코드이다

Something reasonable: 
0 0 0 0 0 0 240 63 
What shouldve been displayed:: 
131 192 202 161 85 102 186 64 
6758.334500 

Bad output as: 
192 131 161 202 102 85 64 186 
-0.000000000000000000000000000412 

그램 컴파일 ++

+0

I 역방향 바이트 +는 비트 + XOR 0x80으로 역방향 시도를하고, 그 결과가 '2.39'이다 .. 하지만 ... 문제가있어 결과가 '20.0'또는 '3.14159'와 같이 주목할만한 것보다 더 "둥근"것으로 나타날 가능성이 높습니다 ... –

+0

왜 그렇게 예상합니까? 그것은 "학문적 인"문제이기 때문에? 예상 된 범위 내에 있습니다! [0.01 ~ 10,000.00 초] – Makketronix