ТМ 5231 - протокол |
Ответить |
Автор | ||||||||||||||||||
Новичок Присоединился: 14 Декабрь 2007 Категория: Russian Federation Online Status: Offline Публикации: 14 |
Опубликовано: 14 Декабрь 2007 10:11 |
|||||||||||||||||
Ребята, поможите!
Какой протокол у этого старичка? Где вообще взять его. Если не скажите, где, то хоть может кто вспомнит какой у него алгоритм формирования контрольной суммы для каждого запроса, все биты в запросе и ответы я уже расшифровал с помошью прог. Заранее Спасибо. |
||||||||||||||||||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 02 Октябрь 2007 Категория: Russian Federation Online Status: Offline Публикации: 427 |
||||||||||||||||||
Прибор старый, 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 :
|
||||||||||||||||||
При экспериментах ни один чайник не пострадал
----------- Плохому системному интегратору всегда OPC сервер мешает. ______________ Пишу на C++ за еду |
||||||||||||||||||
Новичок Присоединился: 14 Декабрь 2007 Категория: Russian Federation Online Status: Offline Публикации: 14 |
||||||||||||||||||
vald, ОГРОМНОЕ СПАСИБО!
Попробую на новой неделе сгенерировать этот пресловутый CRC. Только вот жаль, что CRC там двухбайтовый, мне осталось расшифровать 5 последних байтов, и если только два из них CRC, то что-же значат остальные? Да... Задачка. :( Скинул по мылу "Элемеру" просьбу выслать протокол. Так ответа до сих пор нет. :( Но спасибо за отклик :) |
||||||||||||||||||
Новичок Присоединился: 14 Декабрь 2007 Категория: Russian Federation Online Status: Offline Публикации: 14 |
||||||||||||||||||
К сожалению пока не удалось воспроизвести этот CRC. По-моему этот CRC строится по классической схеме ModBus.
Ребята, есть у кого-нибудь хоть какой-нибудь протокол приборов Элемер? Очень надо... |
||||||||||||||||||
Новичок Присоединился: 14 Декабрь 2007 Категория: Russian Federation Online Status: Offline Публикации: 14 |
||||||||||||||||||
Нашел!
Протокол легкий. Раскрою здесь, авось кому-нибудь пригодится. Протокол ТМ 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 и символа конца строки) |
||||||||||||||||||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 02 Октябрь 2007 Категория: Russian Federation Online Status: Offline Публикации: 427 |
||||||||||||||||||
Если вы сравните что написано то увидете что в 5231 для генерации crc не смотря на то что используется ASCII протокол берется подсчет контрольной суммы как modbus rtu. Бывает.
|
||||||||||||||||||
При экспериментах ни один чайник не пострадал
----------- Плохому системному интегратору всегда OPC сервер мешает. ______________ Пишу на C++ за еду |
||||||||||||||||||
Новичок Присоединился: 14 Декабрь 2007 Категория: Russian Federation Online Status: Offline Публикации: 14 |
||||||||||||||||||
А я в самом начале так подумал, да вот неправильно его реализовал походу :) Поэтому и возникли сомнения...
|
||||||||||||||||||
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |