Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 18 из 18

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

  1. #11

    По умолчанию

    Добрый день.

    Решил не создавать новую тему, а поднять старую. Тема та же, только под другим углом.

    Цитата Сообщение от Николаев Андрей Посмотреть сообщение
    Почитать описание. Есть в подмодуле ModBus Master соответствующие параметры, отвечающие за ошибку обмена.
    Цитата Сообщение от Александр Приходько Посмотреть сообщение
    Велосипед в миллионный раз изобретать интересно, но!
    Открываем РП и читаем главу Modbus Master из которой мы узнаем, что есть два регистра

    last adres и last error.
    Подскажите пожалуйста, как выяснить адрес устройства, с целью контроля связи, при опросе приборов по Ethernet (ПЛК110 опрашивает через МКОН).
    В данном случае в регистре last adress постоянное значение, вероятно т.к. IP один, а адрес конечного прибора задается в "Universal Modbus device".

  2. #12

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Туз бубей говорит что плк по eth, а приборы на rs, тогда

    почитать собственное РЭ устройства
    Добрый день, Валенок.

    Спасибо что откликнулись.

    Прошу Вас пояснить, что Вы имели ввиду. Адрес устройств опрашиваемых по RS мне известны, опрос ПЛК110 Ethernet Modbus Master > МКОН > устройства RS485 Slave производится.

    В РП "Программирование программируемых логических контроллеров ПЛК110" содержится информация обсуждаемая в данной теме:
    «Last Address» – содержит адрес последнего опрошенного мастером
    устройства
    (адрес последовательного устройства или IP-адрес, в зависимости от режима работы универсального устройства ModBus);
    − «Last error» – содержит код ошибки из таблицы В.1"


    Меня интересует, как в CoDeSys 2.3 выяснить какому из устройств на нижнем уровне (Slave RS485) принадлежит ошибка содержится в "Last error", какой ModbusSlaveAdress в данный момент опрашивается. В регистре «Last Address» всегда одно и то же значение = IP МКОН.
    2020-10-30_08-08-20.jpg

    РЭ на какое устройство мне стоит еще раз перечитать?
    Последний раз редактировалось kait-volga; 30.10.2020 в 07:16.

  3. #13

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    обычное дело


    Теперь - на МКОН. Почему то кажется что стр 17


    РЭ МКОН конечно же читал, возможно не то ищу, поэтому и спрашиваю.

    стр. 17 РЭ МКОН содержит изображение плагина настроек шлюза, примечание о резервировании адреса 1 и отсыл к приложению "Ручная настройка".
    Я не нахожу здесь ответа на вопрос, как в CoDeSys 2.3 диагностировать ошибку связи с определенным Slave устройством в сети RS-485.

  4. #14

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    У меня нет мкона. РЭ/Рис 7.5. Разным slave id в rtu разные slave id в tcp - не ?
    Вероятно "не". "Рисунок 7.5 – Настройки шлюза Master RS-485/Slave Ethernet" - другой режим. Меня интересует Master Ethernet/Slave RS-485.

    Если я верно трактую документацию, при обращении к МКОН по Ethernet порт не изменно равен 502.
    2020-11-03_12-30-38.jpg

    PS Разные Slave ID в RTU, в Ethernet имеют различные друг от друга Slave ID. Они одинаковы, что в RTU, что в Ethernet.

    Вопрос был, что в CoDeSys регистр «Last Address» содержит всегда одно и то же значение Module IP = IP МКОН, а Slave ID задается в ModuleSlave и как идентифицировать опрашиваемое устройство в момент получения ошибки Last Error.
    Последний раз редактировалось kait-volga; 03.11.2020 в 11:50.

  5. #15

    По умолчанию

    Благодаря пользователю Валенок получилось вычислить КС. Немного поправил, как мог.
    Код:
    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.

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

    По умолчанию

    Цитата Сообщение от Павел_Хабаровск Посмотреть сообщение
    Благодаря пользователю Валенок получилось вычислить КС. Немного поправил, как мог.
    Код:
    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

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

  7. #17

    По умолчанию

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

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

    По умолчанию

    Цитата Сообщение от 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

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

Страница 2 из 2 ПерваяПервая 12

Ваши права

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