Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2013, 15:47   #1
Dilex
Пользователь
 
Аватар для Dilex
 
Регистрация: 04.11.2010
Сообщений: 76
По умолчанию Modbus из Pascal в C++ Builder

помогите вот это переписать в С++ Builder , и если есть возможность исходник и откомпилированая программа, я с этим только учусь и хотелбы подробно знать где что происходит !

Исходник взят из руководства, нужно опросить датчик по порту и вывести на экран опрос, всем большое спасибо
4. Генерация и проверка контрольной суммы.
Контрольная сумма (CRC16) представляет собой циклический проверочный код на основе
неприводимого полинома A001h. Передающее устройство формирует контрольную сумму для
всех байт передаваемого сообщения. Принимающее устройство аналогичным образом формирует
контрольную сумму для всех байт принятого сообщения и сравнивает ее с контрольной суммой,
принятой от передающего устройства. При несовпадении сформированной и принятой
контрольных сумм генерируется сообщение об ошибке.
Поле контрольной суммы занимает два байта. Контрольная сумма в сообщении передается
младшим байтом вперед.
Можно выделить два способа формирования контрольной суммы: алгоритмический и
табличный.
4.1. Формирование контрольной суммы алгоритмическим способом.
Алгоритмический способ формирования контрольной суммы прост в понимании, но имеет
более низкое быстродействие по сравнению с табличным. Контрольная сумма формируется по
следующему алгоритму:
1. загрузка CRC регистра (16 бит) единицами (FFFFh);
2. исключающее ИЛИ с первыми 8 битами байта сообщения и содержимым CRC регистра;
3. сдвиг результата на один бит вправо;
4. если сдвигаемый бит = 1, исключающее ИЛИ содержимого регистра со значением A001h;
5. если сдвигаемый бит = 0, повторить шаг 3;
6. повторять шаги 3, 4, 5 пока не будут выполнены 8 сдвигов;
7. исключающее ИЛИ со следующими 8 битами байта сообщения и содержимым CRC
регистра;
8. повторять шаги 3 – 7 пока все байты сообщения не будут обработаны;
9. конечное содержимое регистра будет содержать контрольную сумму.
Подпрограмма алгоритмического формирования контрольной суммы на языке Паскаль:

Код:
type
  TsendRecvBuf : array [0..255] of byte ;
const
  Polynom      = $A001;
function GenerateCRC (Buf : TsendRecvBuf; Count:Word) : word;
var
  i : word;
  CRC : Word;
  bitCounter : Byte;
begin
  CRC:= $FFFF;
  for i:=0 to Count - 3 do
  begin
CRC := CRC xor Buf [i];
for bitCounter :=0 to 7 do
begin
  if (CRC and $00010 = 0 then
  CRC:= CRC shr 1
  else
  begin
    CRC:=CRC srh 1;
    CRC:=CRC xor Polynom;
 
  end;
 
 
end;
end;
    Result:= CRC;
end.
5. Описание системы команд.
5.1. Функция 03h – чтение группы регистров.
Функция 03h обеспечивает чтение содержимого регистров ведомого устройства.
Широковещательная передача не поддерживается. В запросе ведущего содержится адрес
начального регистра, а также количество слов для чтения. Адресация регистров начинается с нуля.
Различия между запросом чтения регистров различных типов не существует. К примеру, запрос на
чтение двух регистров типа INT совпадает с запросом на чтение одного регистра типа FLOAT.
Ответ ведомого содержит количество возвращаемых байт и запрошенные данные. Если
количество слов в запросе превышает 120 (240 байт), разбиение ответа на кадры не производится.
Количество возвращаемых регистров ограничивается 120. Для некоторых приборов количество
возвращаемых регистров ограничивается величиной менее 120 слов. Подробная информация
содержится в руководстве по эксплуатации на прибор.
Функция 08h обеспечивает ряд тестов для проверки системы связи между ведущим и
ведомым, а также для проверки различных внутренних условий ведомого. Широковещательная
передача не поддерживается.
Функция использует поле подфункции для конкретизации выполняемого действия (теста).
Получение диагностической функции не должно оказывать влияние на работу ведомого
устройства.
Подфункция 00h - возврат данных запроса.
Данные, переданные в поле данных запроса должны быть возвращены в поле данных ответа.

Если нужна еще какая информация говорите. Потому как я пытаюсь понять и завтра нужно сдвинутся с места всем огромное спасибо за ответы
Dilex вне форума Ответить с цитированием
Старый 14.07.2013, 19:00   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...вы считаете, что переписав код из Delphi в Си-билдер, ваше понимание сдвинется с точки покоя и все сразу заработает? Сторонний модбас монитор, к примеру MBRTU пробовали?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 14.07.2013, 19:12   #3
Dilex
Пользователь
 
Аватар для Dilex
 
Регистрация: 04.11.2010
Сообщений: 76
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
...вы считаете, что переписав код из Delphi в Си-билдер, ваше понимание сдвинется с точки покоя и все сразу заработает? Сторонний модбас монитор, к примеру MBRTU пробовали?
я не думаю что оно все сразу сдвинется и все сразу заработает ! но очень хочу научится а так как в дальнейшем мне показания с регистратора под который пишется модбас надо будет реализовать в билдере ! ведь как я правильно понял вот та часть которая написана на дэлфи служит и для чтения потока и для записи !? отсюда показания температуры он будет брать с этого куска элемента !
Не стороним модбас монитором не пользовался сейчас скачал мод бас терминал 2 незнаю что из этого выйдет и как мне значения моего регистратора температур вписать в Си билдере чтобы все показания температуры велись программно
Dilex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос ModBus ольгаг Общие вопросы C/C++ 1 04.09.2012 09:35
компонент modbus Snake_ua Компоненты Delphi 4 27.07.2010 08:40
CRC c полиномом MODBUS Gawwws Microsoft Office Excel 2 27.02.2010 00:10