Показано с 1 по 7 из 7

Тема: MB_TcpSlave из Owen Communication - AT declaration и RETAIN

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

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

    По умолчанию MB_TcpSlave из Owen Communication - AT declaration и RETAIN

    При использовании привязки переменных к памяти контроллера командой "АТ" перестаёт работать RETAIN. Записанные в регистры значения не сохраняются после перезагрузки контроллера. Привязка позволяет напрямую работать с регистрами MODBUS с разными форматами данных, без их конвертации что очень удобно. Если не использовать АТ, массив ModbusBuffer в RETAIN сохраняется.
    В чем ошибка?

    PROGRAM ModbusSlave
    VAR
    //ФБ Modbus Slave
    fbTcpSlave : OCL.MB_TcpSlave;
    END_VAR

    VAR RETAIN
    //Буфер MODBUS
    ModbusBuffer AT %MW0:ARRAY [0..99] OF WORD;

    //Регистр MODBUS в формате Real
    Reg_REAL AT %MD1 :REAL;
    END_VAR

    //Программа MODBUS Slave
    fbTcpSlave(xEnable:=TRUE,
    pData:=ADR(ModbusBuffer),
    szSize:=SIZEOF(ModbusBuffer),
    );

  2. #2
    Супер Модератор Аватар для Евгений Кислов
    Регистрация
    27.01.2015
    Адрес
    Москва
    Сообщений
    13,925

    По умолчанию

    Добрый день.
    Я предполагаю, что никакой ошибки нет - просто так работает механизм AT-адресации.
    На мой взгляд, в вашем случае проще создать структуру с переменными нужного типа и объявить ее экземпляр в области RETAIN.
    Пример есть здесь, начиная с 01:35:00: https://owen.ru/media/video/webinar_170625

  3. #3

    По умолчанию

    Подтверждаю! У меня SLAVE через структуру, и объявлен как RETAIN.
    Всё работает.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  4. #4

    По умолчанию

    Задача такая. Есть различные переменные(INT,DINT,REAL). Их необходимо в произвольном порядке (в соответствии с ТЗ) привязывать к различным регистрам MODBUS. Допустим CalTemp должен лежать в Holding (INT) регистре 900, а CalPress(INT) в регистре 10. Регистры 100...899 пока зарезервированы. Как в структуре указать номер регистра для конкретной переменной? Или нужно описывать весь массив (1000 регистров)? Какое решение лучше использовать?

  5. #5

    По умолчанию

    Цитата Сообщение от Dmitry_DAK Посмотреть сообщение
    Задача такая. Есть различные переменные(INT,DINT,REAL). Их необходимо в произвольном порядке (в соответствии с ТЗ) привязывать к различным регистрам MODBUS. Допустим CalTemp должен лежать в Holding (INT) регистре 900, а CalPress(INT) в регистре 10. Регистры 100...899 пока зарезервированы. Как в структуре указать номер регистра для конкретной переменной? Или нужно описывать весь массив (1000 регистров)? Какое решение лучше использовать?
    Изначально у вас Retain был на 100 регистров, теперь вы на 1000 перемахнули. Пример структуры слейва на 1000 регистров 1 Структура.jpg
    из которой используются только с 512 по 517 регистр, хотя и остальные доступны тоже.
    Важно, все 32 битные переменные (2 регистра) поместить по чётным адресам, иначе адреса сместятся при выравнивании.
    Последний раз редактировалось kondor3000; 01.06.2026 в 16:04.

  6. #6

    По умолчанию

    Оо! Это КЛАССНО для структуры!

    Да! В ПЛК память расположена последовательно.
    Так что описать надо будет всю тыщу.

    Но сделать это, условно, так:
    ...
    CallPress : INT;
    ...
    wReserved: ARRAY [1..800] OF WORD;

    CalTemp : INT;

    (и подсчитать номера регистров)
    (А всю структуру объявить в области RETAIN)

    Я накну вот этот пост свой: https://cs-cs.net/codesys-modbus-kar...trov-struktury
    Он под 2.3, но там я показал пример структуры и того, как с ней работать.
    Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
    Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net | Канал в ТГ @CsCsNetLab

  7. #7

    По умолчанию

    Благодарю! Идея понятна. Так и сделаем. Сожалею что с AT не получается. Основная задача - импортозамещение, в буржуйском контроллере АТ и RETAIN хорошо дружат...

Похожие темы

  1. Вопрос по MB_TcpSlave из Owen Communication
    от Dmitry_DAK в разделе ПЛК2хх
    Ответов: 3
    Последнее сообщение: 01.06.2026, 20:33
  2. Библиотека Owen Communication ФБ OCL.TCP_Client
    от Sergey666 в разделе СПК1xx (архив)
    Ответов: 1
    Последнее сообщение: 21.02.2024, 11:41
  3. Вопрос по MB_TcpSlave из Owen Communication
    от hermano в разделе ПЛК2хх
    Ответов: 9
    Последнее сообщение: 10.11.2023, 09:06
  4. OWEN Communication Library
    от Zulfiqor в разделе СПК210, СПК1xx [М01]
    Ответов: 2
    Последнее сообщение: 12.09.2021, 18:21
  5. опрос по owen communication
    от Dmitrijb в разделе СПК1xx (архив)
    Ответов: 9
    Последнее сообщение: 19.03.2021, 09:55

Ваши права

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