1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Длина пакета Modbus RTU в Beckhoff CX9020

RS-485, ProfiBUS, 4-20 mA, Wi-Fi, GSM и так далее

Модератор: Глоб.модераторы

Ответить

Автор темы
Avara
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 25 июл 2021, 00:12
Имя: Рустам
Страна: Canada
город/регион: Toronto

Длина пакета Modbus RTU в Beckhoff CX9020

Сообщение Avara »

Добрый день.
В тестовом проекте считываетя значение 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, которые воспринимаются как контрольная сумма, что видно с симуляторе модбаса в приложенном скриншоте. Сигнал также проверял осциллографом, картина та же, т.е. это не проблема в симуляторе. Подскажите, пожалуйста, в чем может быть проблема?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

izhidkov
частый гость
частый гость
Сообщения: 404
Зарегистрирован: 25 фев 2016, 12:18
Имя: Жидков Игорь Алексеевич
Страна: РФ
город/регион: Королев/Фрязино
Благодарил (а): 4 раза
Поблагодарили: 12 раз

Длина пакета Modbus RTU в Beckhoff CX9020

Сообщение izhidkov »

Для начала посмотрите "внутренние" буферы передачи, т.е. после того как вы буфер передали функции (либо запрос создали) , встроенный механизм должен заполнить внутренний буфер. Можете перед каждым запросом принудительно чистить этот буфер чтобы видеть что туда ушло. Когда он заполнится так как должен после этого можно думать почему ваш приемник принимает 128 байт.

Судя по картинке не тот CRC "симулятором" ожидается. (Да и вообще RTU не пакеты принимает, а анализирует поток байтов на лету, поэтому если начало запроса корректно, то не столь важно что там в хвосте).
Кстати еще нужно настроить дуплекс/полудуплекс, т.к. что передатчик что приемник должны переключиться на прослушивание после передачи.

Ну и там симулятор может быть "кривой". Попробуйте другой симулятор.
Компилятор - лучший друг человека!

Автор темы
Avara
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 25 июл 2021, 00:12
Имя: Рустам
Страна: Canada
город/регион: Toronto

Длина пакета Modbus RTU в Beckhoff CX9020

Сообщение Avara »

Я не нашел, где изменяются настройки режима дуплекс/полудуплекс, они вроде как определяются при заказе контроллера при покупке ( в моем случае это N031-0001 RS485 with echo, end point (terminated)). Симулятор с PLC Schneider Electric работает корректно. Непонятно откуда берется количество 128 байт, т к функция ModbusRtuMaster_KL6x22B с длиной буфера 22 байт, в настройках ком порта - 64, длина буфера - 256. После рестарта ПЛС первое отправляемое сообщение с таким же содержимым как и последующие, поэтому наверно принудительная очистка внутреннего буфера вряд ли поможет.
Аватара пользователя

izhidkov
частый гость
частый гость
Сообщения: 404
Зарегистрирован: 25 фев 2016, 12:18
Имя: Жидков Игорь Алексеевич
Страна: РФ
город/регион: Королев/Фрязино
Благодарил (а): 4 раза
Поблагодарили: 12 раз

Длина пакета Modbus RTU в Beckhoff CX9020

Сообщение izhidkov »

я использовал EL6022 модуль, там в настройках COE был тип дуплекс/полудуплекс.
на сайте бекхофа руководство есть, el600x_el602xen.pdf, говорит о том как нужно делать. там как минимум нужно режим физический 422/485 и параметры передачи задать соответсвеено приемнику.

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

про связь виртуального ПЛК с аппаратным модулем связи особо не переживайте ("ModbusRtuMaster_KL6x22B с длиной буфера 22 байт" это вообще системная вещь и ровным счетом ничего не значит).
Компилятор - лучший друг человека!

Автор темы
Avara
здесь недавно
здесь недавно
Сообщения: 3
Зарегистрирован: 25 июл 2021, 00:12
Имя: Рустам
Страна: Canada
город/регион: Toronto

Длина пакета Modbus RTU в Beckhoff CX9020

Сообщение Avara »

Пробовал конфигурировать по разному, пока безрезультатно. Я использую порт встроенный в СХ9020. Где-то в одной из статей встречал упоминоние что при использовании встроенного порта также необходимо активировать его посредсвом использования функции serial port communication, но описания как это сделать не нашел. Может проблема связана с этим?
Ответить

Вернуться в «Интерфейсы, протоколы, связь»