Показано с 1 по 10 из 18

Тема: Modbus контроль ошибок соединения

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    Благодаря пользователю Валенок получилось вычислить КС. Немного поправил, как мог.
    Код:
    FUNCTION crc16Calc : WORD
    VAR_INPUT
    	buffer	: POINTER TO ARRAY[0..16] OF BYTE;
    	n	: INT;
    END_VAR
    VAR
    	i	: INT;
    	crc1,	crc2,	tmp	: BYTE;
    END_VAR
    Код:
    crc1 := crc2 := 16#FF;
    i := 0;
    WHILE i < n DO
    	crc2 := crc2 XOR buffer^[i];
    	tmp := ((ROL(crc2,4) OR ROR(crc2,4))  AND 16#0F) XOR crc2;
    	crc2 := crc1;
    	crc1 := tmp;
    	tmp := (ROL(tmp,4) OR ROR(tmp,4)) AND 16#F0;
    	crc2 := crc2 XOR tmp;
    	tmp := SHL(tmp,1) XOR crc1;
    	crc1 := SHR(crc1, 3);
    	crc2 := crc2 XOR crc1;
    	crc1 := tmp;
    	i := i + 1;
    END_WHILE
    crc16Calc := crc2 + SHL(BYTE_TO_WORD(crc1), 8);
    Запрос/ответ
    [22/05/2021 12:00:56] Written data (COM4)
    03 00 02 03 49 1d ....I.
    [22/05/2021 12:00:56] Read data (COM4)
    03 00 02 6a b4 92 ...jґ’
    1 байт - адрес устройства
    2 байт - адрес устройства (пусто)
    3 байт - регистр управления ключом
    4 байт - регистр состояния 6 дискретных входов
    5,6 КС
    Из описания
    4.jpg
    Теперь надо осуществить процедуру обмена. Уф, это ещё неделю сидеть буду. А потом ещё циклический опрос 15 устройств.
    Последний раз редактировалось Павел_Хабаровск; 22.05.2021 в 06:06.

  2. #2
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,402

    По умолчанию

    Цитата Сообщение от Павел_Хабаровск Посмотреть сообщение
    Благодаря пользователю Валенок получилось вычислить КС. Немного поправил, как мог.
    Код:
    FUNCTION crc16Calc : WORD
    VAR_INPUT
    	buffer	: POINTER TO ARRAY[0..16] OF BYTE;
    	n	: INT;
    END_VAR
    VAR
    	i	: INT;
    	crc1,	crc2,	tmp	: BYTE;
    END_VAR
    Код:
    crc1 := crc2 := 16#FF;
    i := 0;
    WHILE i < n DO
    	crc2 := crc2 XOR buffer^[i];
    	tmp := ((ROL(crc2,4) OR ROR(crc2,4))  AND 16#0F) XOR crc2;
    	crc2 := crc1;
    	crc1 := tmp;
    	tmp := (ROL(tmp,4) OR ROR(tmp,4)) AND 16#F0;
    	crc2 := crc2 XOR tmp;
    	tmp := SHL(tmp,1) XOR crc1;
    	crc1 := SHR(crc1, 3);
    	crc2 := crc2 XOR crc1;
    	crc1 := tmp;
    	i := i + 1;
    END_WHILE
    crc16Calc := crc2 + SHL(BYTE_TO_WORD(crc1), 8);
    Запрос/ответ
    [22/05/2021 12:00:56] Written data (COM4)
    03 00 02 03 49 1d ....I.
    [22/05/2021 12:00:56] Read data (COM4)
    03 00 02 6a b4 92 ...jґ’
    1 байт - адрес устройства
    2 байт - адрес устройства (пусто)
    3 байт - регистр управления ключом
    4 байт - регистр состояния 6 дискретных входов
    5,6 КС
    Из описания
    4.jpg
    Теперь надо осуществить процедуру обмена. Уф, это ещё неделю сидеть буду. А потом ещё циклический опрос 15 устройств.
    Зачем Вы гадите в тему если у Вас протокол не модбас?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  3. #3

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    Зачем Вы гадите в тему если у Вас протокол не модбас?
    Почти Modbus второй байт назвали бы функцией и номер, пусть 100 и вполне похоже на Modbus.

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,402

    По умолчанию

    Цитата Сообщение от ferret_maybe Посмотреть сообщение
    Почти Modbus второй байт назвали бы функцией и номер, пусть 100 и вполне похоже на Modbus.
    вполне не тоже самое что в соответствии со стандартом

    вот же
    Цитата Сообщение от Павел_Хабаровск Посмотреть сообщение
    Разобрался с получением КС в десятичном формате. Как перевести в 16#?
    218 перевожу в HEX получается DA а в запросе должно 16#8B
    он сам на этом споткнулся, требует чтоб десятичная 218 чудесным образом превратилась в 139 от незнания что пользуется не тем протоколом и так же ему подобные новички увидев в теме про модбас и полином A001h какой то расчет контрольной суммы и воспользуются им будут удивляться почему данные не приходят
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •