Описание протокола ТМ-512

 

 

Посылка ТС               

Флаг

Тип-НомГруппы

(Тип-НомГруппы)

ТС

(ТС)

7F

XX

XX

XX

XX

1

2

3

4

5

 

,где

Тип-НомГруппы – 1 байт

·         для ТС    10XX.XXXX  (XX-Номер группы ТС с 1, в группе 8 ТС, первый - старший бит)

 

 (Тип-НомГруппы) – 1 байтповтор предыдущего байта если количество битов  «1» в байте четное, иначе инверсное значение байта

 

ТС – 1 байт - Значение телесигналов (первый телесигнал лежит в старшем бите)

 

(ТС) – 1 байт 1 байтповтор предыдущего байта с инверсией нечетных битов (маска 01010101), а затем если количество битов  «1» в в исходном байте четное – значение инвертируется.

 

 

Посылка ТИТ

Флаг

Тип-НомГруппы

(Тип-НомГруппы)

ТИТ1

(ТИТ1)

ТИТ8

(ТИТ8)

7F

XX

XX

XX

XX

 

XX

XX

1

2

3

4

5

 

18

19

 

,где

Тип-НомГруппы – 1 байт

·         для ТИТ 101X.XXXX  ( XX –Номер группы ТИТ с 1, в группе 8 ТИТ)

 

(Тип-НомГруппы) – 1 байтповтор предыдущего байта если количество битов  «1» в байте четное, иначе инверсное значение байта

 

ТИТ – 1 байт - Значение телеизмерения

 

(ТИТ) – 1 байт 1 байтповтор предыдущего байта если количество битов  «1» в байте НЕчетное, иначе инверсное значение байта

 

Примечание:

1.      Пакеты передаются непрерывно (без пауз между пакетами)

2.      Пакеты ТС и ТИТ рекомендуется чередовать

3.      Чередование групп чисто циклическое без приоритетов и анализа изменений телеметрии


Пример программы формирования пакета на передачу

 

FormatBuffer512(char *buf, short len)

            {

            unsigned i,k,l,m;

 

/*----------------------------------------------------------*/

 

            b_out[0] = 0x7f;                     // Flag message

            b_out[1] = buf[0];

 

            k=0;

            for( i=0; i<8; i++ ) k += (buf[0]>>i)&1;

            if( k&1 ) b_out[2] = (~buf[0]);

            else      b_out[2] = ( buf[0]);

 

            l = ((buf[0]&0xF0) == 0x50)? 8:1;  // ТС или ТИТ?

            for( i=0; i<l; i++ )

                        {

                        b_out[(i*2)+3] = buf[1+i];

                        k=0;

                        for( m=0; m<8; m++ ) k += (buf[1+i]>>m)&1;

                        if( k&1 ) b_out[(i*2)+4] = ( buf[1+i] )^0x55;

                        else       b_out[(i*2)+4] = (~buf[1+i] )^0x55;

                        }

len_out = ((buf[0]&0xF0) == 0x50)?19:5;

            return 0;

            }