LXSDF T2

LXSDF T2 형식의 통신포맷을 사용하는 장치와 통신하기 위한 호스트측의 프로그램 전체 구조를 그림에 보이고 있다. 호스트에서는 가장 먼저 COM포트 오픈 하는 것으로 시작한다. 임베디드 시스템에서는 MCU에서 UART통신설정을 해둬야 한다.

  1. COM Read Bytes : com 포트에서 순차적으로 수신된 바이트열들 읽기.
  2. LXSDF T2 Tx Packet Extraction : 패킷의 시작점을 의미하는 SyncByte (255, 254 순으로 데이터 배치되어 있음)  검출하여 패킷단위 분리.
  3. LXSDF T2 Tx elements : packet 요소들을 분리. 본 과정에서 확보된 각 패킷 요소들은 제품별로 그 의미가 다를 수 있다.
  4. Get device providing data : 제품별 데이터 배치 정보 문서 참조하여 기기에서 제공하는 정보 확보

.

 

코드예 . T2 Tx 패킷 추출 및 패킷 요소 확보.

앞의 그림2의 단계 2와 3의 처리 코드 예. 간단한 일반 함수만 사용되고 있는것이라 언어와 무관하게 전체적인 코딩방법론은 동일하다.

        // transmit the data received by serial with the function by 1 byte  in order .
        // processing  in the function : Find the sync spot and abstract data by each packet TX Index .
        #define Ch_Num 1  // ubpulse 320/340/360/H3. 
        #define Sample_Num 1 // ubpulse 320/340/360/H3. 
        bool Sync_After = false;
        byte Packet_TX_Index = 0;
        byte Data_Prev = 0; // PREVALUE
 
        byte PUD0 = 0;
        byte CRD_PUD2_PCDT = 0;
        byte PUD1 = 0;
        byte PacketCount = 0;
        byte PacketCyclicData = 0;
        byte psd_idx = 0;
        byte PacketStreamData[2];   

        int Parsing_LXSDFT2(byte data_crnt)
        {
            int retv = 0;

            if (Data_Prev == 255 && data_crnt == 254)// Found sync spot.
            {
                Sync_After = true;
                Packet_TX_Index = 0;                  // Initialize  packet  TX Index  0.
            }
            
            Data_Prev = data_crnt;                   // receive the present value as pre value.

            if (Sync_After == true)                  // only task after discovering sync.
            {
                Packet_TX_Index++;                    // increase TX Index 1. The spot where is discovered 254 is 1. Whenever receiving 1 byte as serial, it increases 1.
                if (Packet_TX_Index > 1)              // only task over TX Index  2.
                {
                    if (Packet_TX_Index == 2)            // occupied TX Index2 PUD0.
                        PUD0 = data_crnt;
                    else if (Packet_TX_Index == 3)       // occupied TX Index 3 CRD, PUD2, PCD Type 
CRD_PUD2_PCDT = data_crnt;
                    else if (Packet_TX_Index == 4)       // occupied TX Index 4  PC. 
                        PacketCount = data_crnt;
                    else if (Packet_TX_Index == 5)       // occupied TX Index 5  PUD1.
                        PUD1 = data_crnt;
                    else if (Packet_TX_Index == 6)       // occupied TX Index 6 PCD(Packet cyclic data) .
                        PacketCyclicData = data_crnt;
                    else if (Packet_TX_Index > 6)        // Stream data(wave-pattern data) enters one each in order in more than TX Index 7. the data procedure to receive ->  it is recorded in order of Ch 1 high byte , Ch 2 high byte low byte..
                    {
                        psd_idx = (byte)(Packet_TX_Index - 7); // Packet Stream Data arrangement Index.
                        PacketStreamData[psd_idx] = data_crnt; // crnt data is occupied in order and stream data is only occupied.
                        if (Packet_TX_Index == (Ch_Num * 2 * Sample_Num + 6)) // Channel number  x 2( 2bytes occupation) x Sample capacity + 6(Index value before the front section of wave-pattern data) is the end of one packet.
                        {
                            Sync_After = false; // Be false to search sync spot again.
                            retv = 1; // If Passing of 1 packet unit is finished, it will be returned.
                        }
                    }
                } //if (Packet_TX_Index > 1)

            }
            return retv; //If 1  packet is finished, others return 0.
        }