Сейчас на форуме: zds (+5 невидимых)

 eXeL@B —› Программирование —› Расчет контрольной суммы СЕ303
Посл.ответ Сообщение

Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 апреля 2014 04:13
· Личное сообщение · #1

Доброго времени, пишу утилиту для снятия показаний эл. счетчика СЕ303.
Затупил на следующем этапе - при подаче команд счетчику вычисляется контрольный символ блока
Протокол обмена ответствует ГОСТ Р МЭК 61107-2001). Описание имеется но очень куцо, лично я ничего не понял.

Возможно кто-то имел дело с данным протоколом ? Если имеется пример на любом яву, буду очень благодарен.



Ранг: 20.2 (новичок), 16thx
Активность: 0.020.01
Статус: Участник

Создано: 07 апреля 2014 04:48
· Личное сообщение · #2

Есть пример последовательности блока команд и его контрольной суммы? Как-то эмпиречским путем для какого-то счетчика подбирал однобайтовую КС.

| Сообщение посчитали полезным: New_user

Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 апреля 2014 05:09 · Поправил: New_user
· Личное сообщение · #3

GroundHog

Вот выдернул со снифера - выдача значений за день:

$01 + 'R1' + $02 + 'GRAPE(04.04.14)' + $03 + $51
Контрольный байт по ходу - $51

Вот еще примеры:
$01 +'R1' + $02 +'GRAPE(01.04.14)'+$03 + $4E
$01 +'R1' + $02 +'GRAPE(02.04.14)'+$03 + $4F



Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 апреля 2014 03:36
· Личное сообщение · #4

Вот опять время появилось занятся, так и не могу понять как же формируется контрольный байт, на сайте разработчиков нашел вот что:

Изменение формата байта выполняется функцией программного контроля четности.
Анализируется каждый байт: если число единиц в двоичном формате нечетное, то старший бит устанавливается в 1, если четное – в 0.


Запрос, на сколько я понял состоит из:
SOH<01>STX<02>ETX<03>BCC

И вот еще цитата с ГОСТ-а:
Примечание - Область действия ВСС соответствует ИСО 1745 и распространяется от символа, непосредственно следующего за первым SON- или STX-символом, до символа ЕТХ включительно, который завершает сообщение. Вычисленный ВСС следует сразу за символом ЕТХ.

Помогите плиз не могу вкурить че да как, пробовал суммировать - цифири получаются огромные.



Ранг: 53.9 (постоянный), 19thx
Активность: 0.040
Статус: Участник

Создано: 11 апреля 2014 06:22 · Поправил: Zorn
· Личное сообщение · #5

Попробуй так
Начинаем со второго байта (распространяется от символа, непосредственно следующего за первым SON- или STX-символом)
Считаем единичные биты и ставим старший в зависимости от четности. Складываем все это и оставляем только младший байт (& $FF или переполнение)
Code:
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. char parity(char a)
  5. {
  6.          char p = 1;
  7.          char mask = 1;
  8.          do if (mask&a) p = !p; while (mask<<=1);
  9.          return p;
  10. }
  11.  
  12. int main()
  13. {
  14.          char* input = "\x01R1\x02GRAPE(05.04.14)\x03";
  15.          unsigned char crc = 0;
  16.          int i;
  17.          for(i=1;i<strlen(input);i++)
  18.          {
  19.                  char tmp;
  20.                  if(parity(input[i])) tmp = input[i] | 0x80;
  21.                  else tmp = input[i] & 0x7F;
  22.                  crc += tmp;
  23.                  printf("%02X ",input[i]);
  24.          }
  25.          printf("%02X\n",crc);
  26. }


| Сообщение посчитали полезным: New_user

Ранг: 3.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 11 апреля 2014 18:03 · Поправил: New_user
· Личное сообщение · #6

Спасибо Zorn, закрыто


 eXeL@B —› Программирование —› Расчет контрольной суммы СЕ303
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати