Современные технологии автоматизации» («СТА») —  журнал для квалифицированных специалистов по промышленной автоматизации Форум СТА — современные технологии автоматизации Домашняя страница
Домашняя страница форума CTA Домашняя страница форума CTA > II. АСУТП и SCADA > Промышленные сети и коммуникации
  Активные темы Активные темы
  FAQ FAQ  Искать в форуме   Зарегистрироваться Зарегистрироваться  Вход в систему Вход в систему

ТМ 5231 - протокол

 Ответить Ответить
Автор
Сообщение
laznet Смотреть выпадающим
Новичок
Новичок


Присоединился: 14 Декабрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 14
Свойства публикации Свойства публикации   Ответить, цитируя автора - laznet Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Тема сообщения: ТМ 5231 - протокол
    Опубликовано: 14 Декабрь 2007 10:11
Ребята, поможите!

Какой протокол у этого старичка? Где вообще взять его.
Если не скажите, где, то хоть может кто вспомнит какой у него алгоритм формирования контрольной суммы для каждого запроса, все биты в запросе и ответы я уже расшифровал с помошью прог.

Заранее Спасибо.
Наверх
Vald Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 02 Октябрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 427
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vald Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 14 Декабрь 2007 12:04

Прибор старый, crc вроде так генерируется:

Генерация CRC

Начинаем обрабатывать со следующего после ":" символа .

 CRC это 16-ти разрядная величина т.е. два байта. CRC вычисляется передающим устройством и добавляется к сообщению.Принимающее устройство также вычисляет CRC в процессе приема и сравнивает вычисленную величину с полем контрольной суммы пришедшего сообщения. Если суммы не совпали - то имеет место ошибка.

                16-ти битовый регистр CRC предварительно загружается числом FF hex. Процесс начинается с добавления байтов сообщения к текущему содержимому регистра. Для генерации CRC используются только 8 бит данных. Старт и стоп биты, бит паритета, если он используется, не учитываются в CRC.

                В процессе генерации CRC, каждый 8-ми битовый символ складывается по ИСКЛЮЧАЮЩЕМУ ИЛИ с содержимым регистра. Результата сдвигается в направлении младшего бита, с заполнением 0 старшего бита. Младший бит извлекается и проверяется. Если младший бит равен 1, то содержимое регистра складывается с определенной ранее, фиксированной величиной, по ИСКЛЮЧАЮЩЕМУ ИЛИ. Если младший бит равен 0, то ИСКЛЮЧАЮЩЕЕ ИЛИ не делается.

                Этот процесс повторяется пока не будет сделано 8 сдвигов. После последнего (восьмого) сдвига, следующий байт складывается с содержимым регистра и процесс повторяется снова. Финальное содержание регистра, после обработки всех байтов сообщения и есть контрольная сумма CRC.

Алгоритм генерации CRC:

                1. 16-ти битовый регистр загружается числом FF hex (все 1), и используется далее как регистр CRC.

                2. Первый байт сообщения складывается по ИСКЛЮЧАЮЩЕМУ ИЛИ с содержимым регистра CRC. Результат помещается в регистр CRC.

                3. Регистр CRC сдвигается вправо(в направлении младшего бита) на 1 бит, старший бит заполняется 0.

                4. (Если младший бит 0): Повторяется шаг 3 (сдвиг)

       (Если младший бит 1): Делается операция ИСКЛЮЧАЮЩЕЕ ИЛИ регистра CRC и полиномиального числа A001 hex.

       5. Шаги 3 и 4 повторяются восемь раз.

       6. Повторяются шаги со 2 по 5 для следующего сообщения. Это повторяется до тех пор пока все байты сообщения не будут обработаны.

       7. Финальное содержание регистра CRC и есть контрольная сумма.

РАЗМЕЩЕНИЕ CRC В СООБЩЕНИИ

                При передаче 16 бит контрольной суммы CRC в сообщении, сначала передается младший байт, затем старший. Например, если CRC равна 1241 hex :

 

Адрес

Функция

Счетчикк байт

Данные

Данные

Данные

Данные

CRC Ст.

CRC Мл.

 

 

 

 

 

 

 

 

41

12

При экспериментах ни один чайник не пострадал

-----------
Плохому системному интегратору всегда OPC сервер мешает.
______________
Пишу на C++ за еду
Наверх
laznet Смотреть выпадающим
Новичок
Новичок


Присоединился: 14 Декабрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 14
Свойства публикации Свойства публикации   Ответить, цитируя автора - laznet Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 14 Декабрь 2007 15:30
vald, ОГРОМНОЕ СПАСИБО!
Попробую на новой неделе сгенерировать этот пресловутый CRC.

Только вот жаль, что CRC там двухбайтовый, мне осталось расшифровать 5 последних байтов, и если только два из них CRC, то что-же значат остальные? Да... Задачка. :( Скинул по мылу "Элемеру" просьбу выслать протокол. Так ответа до сих пор нет. :(

Но спасибо за отклик :)
Наверх
laznet Смотреть выпадающим
Новичок
Новичок


Присоединился: 14 Декабрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 14
Свойства публикации Свойства публикации   Ответить, цитируя автора - laznet Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 17 Декабрь 2007 04:19
К сожалению пока не удалось воспроизвести этот CRC. По-моему этот CRC строится по классической схеме ModBus.

Ребята, есть у кого-нибудь хоть какой-нибудь протокол приборов Элемер? Очень надо...
Наверх
laznet Смотреть выпадающим
Новичок
Новичок


Присоединился: 14 Декабрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 14
Свойства публикации Свойства публикации   Ответить, цитируя автора - laznet Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 17 Декабрь 2007 06:38
Нашел!

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

Протокол ТМ 5231:

Запрашиваемые параметры
Прибор ТМ5231 производит индикацию температуры по 8 каналам. В качестве запрашиваемых параметров выступают 8 температур (по 1-й на каждый канал). Прибор не ведет никакой тип архива, и выдает только текущие данные.

Тип связи
В качестве канала связи используется RS-232. Используются следующие настройки COM-порта::
•     количество бит      – 8;
•     количество стоповых бит      – 1;
•     проверка на четность      – отсутствует.
Скорость передачи по каналу связи – 9600 б/сек.

Формат запросов:
:<номер прибора>;<команда>;<код;>;<контрольная сумма><CR>, где:
•     <номер прибора> - число в диапазоне от 1 до 254 записанное с использованием символов 0,1,2,...,9 и определяющее, к какому прибору посылается запрос. Заводская установка - 1 (для всех приборов);
•     <команда> - команда, определяющая дальнейшие действия прибора (по-моему всегда 1);
•     <код> - канал измерения температуры (коды 0-7 соответствуют 1-8 каналам измерения температуры);
•     <контрольная сумма> - контрольная сумма. Массив, защищаемый контрольной суммой, начинается с первого символа номера прибора и заканчивается последним символом ";" включительно.
•     <CR> - символ с кодом 13(десятичное).
Все значения передаются в десятичном виде.

Допустимые символы при обмене:
ASCII символ     0     9     :     !     ;     .     $     <CR>
Код ASCII символа     48     57-58     33     59     45     46     36     13

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

Пример запроса:
Десятичные коды
:1;1;2;32202

ASCII символов
58,49,59,49,59,50,59,51,50,50,48,50,13

Формат ответов:
!<номер прибора>;<команда>;<код;>;<контрольная сумма><CR>, где:

•     <номер прибора> - число в диапазоне от 1 до 254 записанное с использованием символов 0,1,2,...,9 и определяющее, к какому прибору посылается запрос. Заводская установка - 1 (для всех приборов);
•     <команда> - команда, определяющая дальнейшие действия прибора;
•     <код> - значение температуры;
•     <контрольная сумма> - контрольная сумма. Массив, защищаемый контрольной суммой, начинается с первого символа номера прибора и заканчивается последним символом ";" включительно.
•     <CR> - символ с кодом 13(десятичное).

Все значения принимаются в десятичном виде.

Если в ответе прибора значение операнда начинается с символа "$" , это значит, что произошла ошибка, а код этой ошибки находится после символа "$" .
Возможные коды ошибок:
•     0 - прибор не исправен и требует ремонта;
•     1 - прибор не исправен и требует ремонта;
•     2 - входной сигнал превышает максимально допустимый уровень;
•     3 - не существующий номер канала.

Пример ответа:
Десятичные коды
!1;-49.8;12161

ASCII символов
33,49,59,45,52,57,46,56,59,49,50,49,54,49,13

Расчет контрольной суммы (алгоритм на Pascal):
function Ttm_52xx.CRCCheck (var S: String): string;
Var
r, l : integer;
ks   : word;
ss   : string;
Begin
    ks:=65535;
    for r:=2 to length(s) do
      begin
        ks := ks xor ORD(s[r]);
        for l :=1 to 8 do
          IF (ks div 2)*2<>ks then ks:=(ks div 2) xor 40961
                             else ks:=(ks div 2);
      end;
    Str(ks,ss);
    Result := ss;
End;



ТО ЖЕ, НО НА С


void _CRCCheck( BYTE * chBufReq, BYTE count )
{
     unsigned short ks;
     int y,l;

     ks = 0xFFFF;
    for ( y = 2; y < count; y++ )
     {
        ks ^= chBufReq[y];
        for ( l = 1; l <= 8; l++ )
               if ( (ks / 2)*2 != ks )
                    ks = (ks >> 1) ^ 0xA001;
            else
                    ks = (ks >> 1);
     }
     int t = ks;
}
,где

chBufReq - буфер сообщения всего,
count - длина буфера (без CRC и символа конца строки)
Наверх
Vald Смотреть выпадающим
Действительный член
Действительный член
Аватар

Присоединился: 02 Октябрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 427
Свойства публикации Свойства публикации   Ответить, цитируя автора - Vald Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 17 Декабрь 2007 14:40
Если вы сравните что написано то увидете что в 5231 для генерации crc не смотря на то что используется ASCII протокол берется подсчет контрольной суммы как modbus rtu.  Бывает.
При экспериментах ни один чайник не пострадал

-----------
Плохому системному интегратору всегда OPC сервер мешает.
______________
Пишу на C++ за еду
Наверх
laznet Смотреть выпадающим
Новичок
Новичок


Присоединился: 14 Декабрь 2007
Категория: Russian Federation
Online Status: Offline
Публикации: 14
Свойства публикации Свойства публикации   Ответить, цитируя автора - laznet Ответить, цитируя автора -  ОтветитьОтвет Прямая ссылка на эту публикацию Опубликовано: 18 Декабрь 2007 03:20
А я в самом начале так подумал, да вот неправильно его реализовал походу :) Поэтому и возникли сомнения...
Наверх
 Ответить Ответить

Переход на форум Права доступа на форуме Смотреть выпадающим

Bulletin Board Software by Web Wiz Forums® version 9.64
Powered by Web Wiz Forums Free Express Edition
Copyright ©2001-2009 Web Wiz