ГОСТ Р МЭК 61784-3-12—2016
Приложение А
(справочное)
Дополнительная информация для профилей коммуникаций функциональной безопасности
CPF12
А.1 Вычисление хэш функции
Нижеприведенный коддля PDU безопасности представляет из себя пример того, как вычисляются CRC коды
PDU безопасности. В таблицах учитываются три нулевых младших разряда.
Параметр: psPacket FSCF12/1 Safety PDU
slartCrc Начальное значение (начисления CRC
seqHo - SeqNo
oldCRC
bRcvD.i
s.ze
- CRC_D последнею пр’иняюго/стправленною PDIT ведомою
- устройства безопасности
- bRcvDlт - Tiue: вычисления CRC принятою кадра
bRcvD.r - Fa.se: вычисления CRC для отправленного кадра
- размер- PPU безопасности
Возвр’А^ает: bSuccees - TRUE: CRC верен
U1HT8 CalcCrc(SAFE7Y_FDU ’psFacket, U1HT16 startCrc, U1HT16 • seqHo, UlNTie oldCrc,
U1H78 bRcvD.i, U:N78_ei2e)
// временные значения
UINC16 vl,м2;
U1HT16 crc;
U1H716 СГС_ССЯЛ/ОП;
// сб^ая часть вычисления CRC,
// вюшч&е; CRC_U, Conn-ID, Sequence-Но., Oftd
U1HT8 ’pCtC - ip-SFacket->au8Data!2*;
i
/ указатель на МЛ-аД—МЙ бай: CRC
U1HT8 »pSafeData// указатель на младший байт SafeData
If (Size > 6 ]
pCrc*-;
do
(
crc - 0?
// т.е. 2 или кратное двум данным безопасности
//-> младиий бай: С
еоо
при байтовом
// смешении 3 вместо 2
// сброс сгс
// Последовательность для вычисления:
// с-.арый CRC-Lo, Старый CRC-Hi, Connld-Lo, Connld-H., SeqHo-Ю, SeqHo-H., Coe.rr.arid,
// (Индекс,) Данные
*7
j
// CRC-Ю
M l
- aCRCCabl*((U1HT8 •) Acre)•H1_BYTE*‘;// Обратитесь к CRC-таблице
м2 - aCRClab2*((U1HT8 *) AStaitOrc) O’’;// Обра?и:есь к CRC-таблице
M l -
m
!
XOR
м 2 ;
((U1HT8 *) АСГС) RIBYTE - (CUIMTB ») Ам1) HIBYCE XOR ((U1HT8 ♦)
Acre);ДО_ВУГЕ»,-
((U1H78 *) АСГС) l/> BYTE - ((UZH78
A
m
’.)
1/ BYTE ;
i
_
a
// CRC-H.
M l
-
aCRCCabl
*(
(U1HTB
•) Acre)
•H1_BY7E;
*;
м2 -
aCRC7ab2:(lUlNTS •) AstartCtC)11; ;
M l
-
m
!
XOR м2;
((U1HT8 •) Acre)’H1_BYTE’ - ((U1H78 *1 AMl) H1_BYCE XOR ((U1H78 »)
Acre)*
x
>
byte
;,-
((U1H78 •) Acre)’LO BYTE - ((U1H7B *) Ам1) 1) BYTE ;
77