Описание протокола ТМ-512
Флаг |
Тип-НомГруппы |
(Тип-НомГруппы) |
ТС |
(ТС) |
7F |
XX |
XX |
XX |
XX |
1 |
2 |
3 |
4 |
5 |
,где
·
для ТС 10XX.XXXX (XX-Номер
группы ТС с 1, в группе 8 ТС, первый - старший бит)
ТС – 1 байт - Значение телесигналов (первый телесигнал
лежит в старшем бите)
Флаг |
Тип-НомГруппы |
(Тип-НомГруппы) |
ТИТ1 |
(ТИТ1) |
… |
ТИТ8 |
(ТИТ8) |
7F |
XX |
XX |
XX |
XX |
|
XX |
XX |
1 |
2 |
3 |
4 |
5 |
|
18 |
19 |
,где
·
для ТИТ 101X.XXXX ( XX –Номер
группы ТИТ с 1, в группе 8 ТИТ)
ТИТ – 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;
}