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

Тема: Адресация переменных Codesys

  1. #1

    По умолчанию Адресация переменных Codesys

    Доброго времени суток всем!

    хочу узнать про нумерацию регистров по Modbus в Codesys 2.3 для контроллера ПКЛ110-М02
    у меня сейчас настроена сквозная нумерация регистров (т.е. при добавлении адресов в конфигурации ПЛК регистры начинаются с 0 адреса и дальше 1, 2, 3, 4, и т.д.)
    можно ли для Вашего контроллера создать переменную уже с заданным адресом, например чтобы значение Float передавалось по регистру с адресом 350, а переменная Word - по адресу 400 ИЛИ мне в ручную нужно создать 349 пустых переменных, на 350 будет необходимый мне Float, затем ещё 40+ пустых переменных и по адресу 400 нужный мне Word?

    вот конкретный пример того, что мне нужно: сейчас мне пришлось создать пустые переменные с 53 по 56, чтобы по 57 адресу отправить нужный мне бит
    можно ли сразу создать переменную с нужным адресом, и не заниматься созданием пустых переменных?

    я искал решение на форуме и смотрел библиотеки, но или не понял способ решения моей проблемы или не нашёл то, что мне нужно
    Изображения Изображения
    • Тип файла: png image.png (22.8 Кб, Просмотров: 40)

  2. #2

    По умолчанию

    Цитата Сообщение от high_roll Посмотреть сообщение
    Доброго времени суток всем!

    хочу узнать про нумерацию регистров по Modbus в Codesys 2.3 для контроллера ПКЛ110-М02
    вот конкретный пример того, что мне нужно: сейчас мне пришлось создать пустые переменные с 53 по 56, чтобы по 57 адресу отправить нужный мне бит
    можно ли сразу создать переменную с нужным адресом, и не заниматься созданием пустых переменных?

    я искал решение на форуме и смотрел библиотеки, но или не понял способ решения моей проблемы или не нашёл то, что мне нужно
    В слейве нельзя задать адрес, зато адрес можно задать в мастере. Если вам нужен 57 регистр, кто мешает вам сделать в Мастере его 53 и не добавлять пустые в слейве?

    Тем более с 350 и 400 регистром, проще в Мастере его сделать хоть 50, хоть 0.

    Если у вас нет вариантов перепрограммировать Мастера, то можно добавить 300 (400) штук 2Byte или 150(200) штук 4Byte.
    Читать вы будете не всё, а только 2 нужных регистра.

    Тут биб-ки для Слейва и описание https://owen.ru/forum/showthread.php?t=28996
    Последний раз редактировалось kondor3000; 29.08.2024 в 18:43.

  3. #3
    Пользователь
    Регистрация
    27.11.2011
    Адрес
    Краснодар
    Сообщений
    13,009

    По умолчанию

    Через библиотеки вроде можно. Через Конфигурацию нет, к тому же там есть выравнивание.

  4. #4

    По умолчанию

    проблема в том, что мастер-устройство у заказчика
    а они вообще не АЛЁ и не знают как да и что менять

    ну вот вариант с библиотеками хороший
    дайте совет пожалуйста какие есть, и есть ли к ним руководство?

  5. #5
    Пользователь
    Регистрация
    23.09.2008
    Адрес
    Центророссийск
    Сообщений
    3,070

    По умолчанию

    А что вам дадут лежащие где-то здесь либы? Вам нужно 57 и 400. Ну поставите стартовый 57, и все равно будет структура в 343 регистра.
    Местная либа (ниже привели) не работает с отдельными регистрами. Вы также определяете непрерывный блок памяти для слейва, только не в конфигурации. Разница - небольшая.

    Лучше уточняйте у них (где мастер) макс номер регистра. Если из тыщи не вышли - наколотите "4 byte" сколько указали по максимуму/2 (идент узла в помощь) и пишите только что нужно как и делали.

    А чтоб забыть про конфигурацию и не заниматься хренью с вычислениями адресов - можно типа так:

    Код:
    var
      регистр_W : word := ..
      регистр_X : word := ..
    
      W : word;
      X : real;
      
    ---------------------------
    SysMemCpy(ADR(W), ADR(%QD6.1.0) + 2 * регистр_W, SIZEOF(W)); //взяли из слейва
    
    .. поработали c W
    X := ..  посчитали чего-то
    
    SysMemCpy(ADR(%QD6.1.0) + 2 * регистр_X, ADR(X), SIZEOF(X)); //и положили в слейв
    И пофиг на выравнивание если вдруг невыравненые адреса у того мастера.
    А для всяких булей проще через точку или промежуточные функции GET/SET_BIT написать с заданием абсолютного адреса бита. Погромист вы или кто? Пусть машина считает - она для того.

    Да и для либы с этим же проще. Все равно блок слейва - единое пространство памяти
    Ну или через syslibcom пакеты самому колбасить "на лету" без выделения памяти под слейв - это скучно хотя и возможно.
    Последний раз редактировалось Валенок; 29.08.2024 в 18:34.

  6. #6

    По умолчанию

    Тут биб-ки для Слейва и описание https://owen.ru/forum/showthread.php?t=28996

    Но лучший вариант, скопировать 2Byte (4Byte) в конфигурации и зажать секунд на 5-7 Ctrl + V
    Последний раз редактировалось kondor3000; 29.08.2024 в 18:52.

  7. #7

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Но лучший вариант, скопировать 2Byte (4Byte) в конфигурации и зажать секунд на 5-7 Ctrl + V
    понял, спасибо

  8. #8

    По умолчанию

    и благодарю за другие советы, буду смотреть, что лучше подойдёт

Похожие темы

  1. Адресация переменных по Modbus
    от Uniqum в разделе ПЛК1хх
    Ответов: 22
    Последнее сообщение: 16.09.2022, 14:16
  2. Адресация переменных из PLC в ОPC
    от Vitorgan в разделе ПЛК1хх [М02]
    Ответов: 8
    Последнее сообщение: 05.02.2021, 13:11
  3. Адресация переменных
    от Vitorgan в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 24.07.2016, 22:01
  4. Адресация переменных по стандарту МЭК 61131-3
    от DrDWoo в разделе Помощь Разработчикам
    Ответов: 8
    Последнее сообщение: 27.12.2013, 11:32
  5. адресация глобальных переменных
    от Назаров Александр в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 24.12.2009, 12:01

Метки этой темы

Ваши права

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