Добрый день.
В тестовом проекте считываетя значение holding register 01 (03 функция) слейва по протоколу Modbus RTU. Контроллер Beckhoff CX9020 с встроенным портом RS232/485. среда TwinCAT3, com port mode KL6xx1 Mode(Emulation), data bytes=64, buffer size=256, библиотека TC2 Modbus RTU, функция ModbusRtuMaster_KL6x22B, ReadRegs. Длина отправляемого пакета должна быть 8 байт (01 03 00 01 00 01 D5 CA), по факту отправляется пакет длиной 128 байт, заканчивающийся 00 00, которые воспринимаются как контрольная сумма, что видно с симуляторе модбаса в приложенном скриншоте. Сигнал также проверял осциллографом, картина та же, т.е. это не проблема в симуляторе. Подскажите, пожалуйста, в чем может быть проблема?
- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Длина пакета Modbus RTU в Beckhoff CX9020
Модератор: Глоб.модераторы
-
- здесь недавно
- Сообщения: 3
- Зарегистрирован: 25 июл 2021, 00:12
- Имя: Рустам
- Страна: Canada
- город/регион: Toronto
Длина пакета Modbus RTU в Beckhoff CX9020
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- частый гость
- Сообщения: 404
- Зарегистрирован: 25 фев 2016, 12:18
- Имя: Жидков Игорь Алексеевич
- Страна: РФ
- город/регион: Королев/Фрязино
- Благодарил (а): 4 раза
- Поблагодарили: 12 раз
Длина пакета Modbus RTU в Beckhoff CX9020
Для начала посмотрите "внутренние" буферы передачи, т.е. после того как вы буфер передали функции (либо запрос создали) , встроенный механизм должен заполнить внутренний буфер. Можете перед каждым запросом принудительно чистить этот буфер чтобы видеть что туда ушло. Когда он заполнится так как должен после этого можно думать почему ваш приемник принимает 128 байт.
Судя по картинке не тот CRC "симулятором" ожидается. (Да и вообще RTU не пакеты принимает, а анализирует поток байтов на лету, поэтому если начало запроса корректно, то не столь важно что там в хвосте).
Кстати еще нужно настроить дуплекс/полудуплекс, т.к. что передатчик что приемник должны переключиться на прослушивание после передачи.
Ну и там симулятор может быть "кривой". Попробуйте другой симулятор.
Судя по картинке не тот CRC "симулятором" ожидается. (Да и вообще RTU не пакеты принимает, а анализирует поток байтов на лету, поэтому если начало запроса корректно, то не столь важно что там в хвосте).
Кстати еще нужно настроить дуплекс/полудуплекс, т.к. что передатчик что приемник должны переключиться на прослушивание после передачи.
Ну и там симулятор может быть "кривой". Попробуйте другой симулятор.
Компилятор - лучший друг человека!
-
- здесь недавно
- Сообщения: 3
- Зарегистрирован: 25 июл 2021, 00:12
- Имя: Рустам
- Страна: Canada
- город/регион: Toronto
Длина пакета Modbus RTU в Beckhoff CX9020
Я не нашел, где изменяются настройки режима дуплекс/полудуплекс, они вроде как определяются при заказе контроллера при покупке ( в моем случае это N031-0001 RS485 with echo, end point (terminated)). Симулятор с PLC Schneider Electric работает корректно. Непонятно откуда берется количество 128 байт, т к функция ModbusRtuMaster_KL6x22B с длиной буфера 22 байт, в настройках ком порта - 64, длина буфера - 256. После рестарта ПЛС первое отправляемое сообщение с таким же содержимым как и последующие, поэтому наверно принудительная очистка внутреннего буфера вряд ли поможет.
-
- частый гость
- Сообщения: 404
- Зарегистрирован: 25 фев 2016, 12:18
- Имя: Жидков Игорь Алексеевич
- Страна: РФ
- город/регион: Королев/Фрязино
- Благодарил (а): 4 раза
- Поблагодарили: 12 раз
Длина пакета Modbus RTU в Beckhoff CX9020
я использовал EL6022 модуль, там в настройках COE был тип дуплекс/полудуплекс.
на сайте бекхофа руководство есть, el600x_el602xen.pdf, говорит о том как нужно делать. там как минимум нужно режим физический 422/485 и параметры передачи задать соответсвеено приемнику.
код передачи выложите, плк не будет в порт больше данных гнать чем указано в функции. либо в коде косяц, либо в настройке, либо в помехах.
про связь виртуального ПЛК с аппаратным модулем связи особо не переживайте ("ModbusRtuMaster_KL6x22B с длиной буфера 22 байт" это вообще системная вещь и ровным счетом ничего не значит).
на сайте бекхофа руководство есть, el600x_el602xen.pdf, говорит о том как нужно делать. там как минимум нужно режим физический 422/485 и параметры передачи задать соответсвеено приемнику.
код передачи выложите, плк не будет в порт больше данных гнать чем указано в функции. либо в коде косяц, либо в настройке, либо в помехах.
про связь виртуального ПЛК с аппаратным модулем связи особо не переживайте ("ModbusRtuMaster_KL6x22B с длиной буфера 22 байт" это вообще системная вещь и ровным счетом ничего не значит).
Компилятор - лучший друг человека!
-
- здесь недавно
- Сообщения: 3
- Зарегистрирован: 25 июл 2021, 00:12
- Имя: Рустам
- Страна: Canada
- город/регион: Toronto
Длина пакета Modbus RTU в Beckhoff CX9020
Пробовал конфигурировать по разному, пока безрезультатно. Я использую порт встроенный в СХ9020. Где-то в одной из статей встречал упоминоние что при использовании встроенного порта также необходимо активировать его посредсвом использования функции serial port communication, но описания как это сделать не нашел. Может проблема связана с этим?