Регистрация | Последние сообщения | Персональный список | Поиск | Настройка конференции | Личные данные | Правила конференции | Список участников | Top 64 | Статистика раздела | faq | Что нового v.2.3 | Чат
Skunk Forum - Техника, Наука, Общество » АСУТП »
Протокол ModBus

Версия для печати (настроить)

Новая тема | Написать ответ

Подписаться

Автор Тема:   Протокол ModBus
Shumer
Junior Member

Сообщений: 2
Откуда: Альметьевск
Регистрация: Январь 2007

написано 10 Января 2007 20:27ИнфоПравкаОтветитьIP

Объясните пожалуйста новичку как расчитывается контрольная сумма CRC -16. Если можно подробнее. Спасибо.

bessonov2
Member

Сообщений: 45
Регистрация: Май 2006

написано 11 Января 2007 00:00ИнфоПравкаОтветитьIP

В инете можно найти примеры исходников.

sysavt
Junior Member

Сообщений: 12
Регистрация: Январь 2004

написано 11 Января 2007 08:23ИнфоПравкаОтветитьIP

Вот здесь есть спецификация на протокол ссылка и там описана реализация табличного способа формирования CRC, есть где-то расчет полиномом, но надо искать)

GSM
Junior Member

Сообщений: 24
Откуда: Россия, Челяб. обл, г Миасс
Регистрация: Ноябрь 2006

написано 11 Января 2007 09:30ИнфоПравкаОтветитьIP


unsigned char TableCRC1[256], TableCRC2[256];

void CalcTables() {
unsigned short i, mask, bit, crc, mem;

// Определение таблиц для вычисления CRC
for(mask=0; mask<0x100; mask++)
{crc=mask;
for (bit=0; bit<8; bit++)
{mem=(crc & 0x001); crc=(crc>>1); if (mem) {crc^=0xa001;}
}
TableCRC2[mask]=(crc & 0xff); TableCRC1[mask]=(crc >> 8);
}
}

/*----------------------------------------------------------------
Вычисление контрольной суммы для МодБас
-----------------------------------------------------------------*/
void CalcCRC(unsigned char *buff, unsigned int len, unsigned char *ret)
{
unsigned char car, crc[2];
unsigned int i;

crc[0]=0xff; crc[1]=0xff;
for (i=0; i<len; i++)
{car=buff[i]; car ^=crc[0];
crc[0]=(crc[1]^TableCRC2[car]); crc[1]=TableCRC1[car];
}
ret[0]=crc[0]; ret[1]=crc[1];
}

Shumer
Junior Member

Сообщений: 3
Откуда: Альметьевск
Регистрация: Январь 2007

написано 11 Января 2007 20:42ИнфоПравкаОтветитьIP

Вот здесь есть спецификация на протокол ссылка и там описана реализация табличного способа формирования CRC, есть где-то расчет полиномом, но надо искать)

Ссылка не работает всегда ссылается на другой сайт.
если можно дайте другой сайт, хорошо бы если есть метод полинома. Спасибо конечно за помощь.

Конечно после программы на СИ более менее ясно стало, хотя после Паскаля трудновато но ясно. Спасибо конечноза помощь.

GSM
Junior Member

Сообщений: 29
Откуда: Россия, Челяб. обл, г Миасс
Регистрация: Ноябрь 2006

написано 12 Января 2007 13:39ИнфоПравкаОтветитьIP

Описание протокола можно найти в описании контроллеров I8k www.icpdas.com, точно ссылку не помню - файл user_manual_i_8xx7.pdf

bessonov2
Member

Сообщений: 48
Регистрация: Май 2006

написано 12 Января 2007 18:32ИнфоПравкаОтветитьIP

По идее, должно хватать документации на www.modbus.org другое дело, что реализацию передачи данных типа DINT и REAL надо смотреть в документации на конкретное устройство.

richdikb
Junior Member

Сообщений: 1
Откуда: Санкт-Петербург,Россия
Регистрация: Январь 2007

написано 17 Января 2007 13:06ИнфоПравкаОтветитьIP

unsigned short CRC16(unsigned char *Bfr,unsigned int len)
{

unsigned int x,y;
unsigned short int resultXOR;
unsigned short int intFFFF=0xFFFF;

try{
for(x=0; x<len; x++){
resultXOR=(intFFFF^Bfr[x]);
for(y=0; y<8; y++){
if(resultXOR&0x0001){
resultXOR>>=0x0001;
resultXOR^=0xA001;
}
else{
resultXOR>>=1;
}
}
intFFFF=resultXOR;
}
return intFFFF;
}
catch(...){
return 0;
}
}

pw
Member

Сообщений: 75
Регистрация: Январь 2007

написано 05 Марта 2007 19:55ИнфоПравкаОтветитьIP

Не совсем понятно, что делает Эмерсон 3440 в плане выдачи статусного значения параметра в Modbus. Описание непонятно, формат данных в инструкции пользователя просто не приводится четко. Толи bool с непонятным даже значением( true - плохо или хорошо?), толи вообще word с непонятной расшифровкой. В полевой шине значение статуса вообще текстовая строка. В Модбасе это непонятно что, хотя занимает один регистр (то есть целое, как минимум). Пока никакой инфы найти не удалось. Может есть у кого-то?

Ваш ответ:

Коды форума
Смайлики


Ник:    Пароль       
Отключить смайлики

Все время MSK

Склеить | Разбить | Закрыть | Переместить | Удалить

Новая тема | Написать ответ
Последние сообщения         
Перейти к:

Свяжитесь с нами | skunksworks.net

Copyright © skunksworks.net, 2000-2018

Разработка и техническая поддержка: skunksworks.net


Рейтинг@Mail.ru Яндекс.Метрика