Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12

Тема: Как форматировать все переменные для передачи по ModbusRTU Slave

  1. #1

    По умолчанию Как форматировать все переменные для передачи по ModbusRTU Slave

    Доброго дня. Такая проблема, Есть готовый и уже работающий проект приточки/вытяжки, с которого, понадобилось по ModBusRTU брать все значения аналоговых входов и выходов Mx210/

    Все переменные описаны как:
    xAI_T_return_water,
    xAI_T_direct_water,
    xAI_P_water: ANALOG_SENSOR_VALUE;

    Значение аналог.входов можно получить через .rValue
    xAI_T_return_water.r.Value

    - это будет REAL, а значит просто вписывать их в регистры в Modbus_serial_device нельзя (или нет?).
    Делить на 2 word НЕ нужно, да и глобально мне не понятно, как это сделать через UNIT т.к. тип переменных уже "ANALOG_SENSOR_VALUE"

    В идеале нужно преобразовать все значения переменных WORD взяв 2 знака перед запятой и 1 после. Как это можно сделать глобально? Или придётся добавлять дополнительные переменные и приравнивать их к имеющимся с упрощением?

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

    По умолчанию

    Modbus умеет работать с float (real), в чем проблема то ? СПК тоже должна уметь

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

    По умолчанию

    Добрый день.
    В любом случае потребуется выполнить преобразование к WORD.
    Например, так:

    придётся добавлять дополнительные переменные и приравнивать их к имеющимся с упрощением?
    Или, например, можно воспользоваться ФБ REAL_TO_WORD2 из библиотеки OwenCommunication - тогда можно разбить REAL на два регистра, и мастер сможет получить исходное (а не округленное) значение.

  4. #4

    По умолчанию

    Попытался через UINT, показалось самым простым вариантом, но выдает ошибку "C032: невозможно конвертирование..."
    Например
    Есть переменная

    xAI_P_water :ANALOG_SENSOR_VALUE;

    Добавил переменную

    mAI_P_water :Real_word;

    приравнял,
    mAI_P_water:=xAI_P_water.rValue;

    при перекомпиляции выдает ошибку. Может я что-то не правильно понял

    UPD:
    Вроде понял почему не работало, вроде как надо было приравнивать не к переменной "имя" а к "имя".rRealValue

    mAI_P_water.rRealValue:=xAI_P_water.rValue;

    Но проверить не успел т.к. добавил POU CFC (PRG), в нём пока без ошибок соотносится всё. Вот только не знаю будет ли работать так? Дополнительный POU (PRG) нужно добавлять в MainTask? или будет работать по вызову по ModBus?
    Последний раз редактировалось phenomit; 22.11.2019 в 01:40.

  5. #5

    По умолчанию

    Теперь столкнулся с другой проблемой, не получается привязать Вход уставку регулятора к Holding регистру

    в основной программе переменная real

    после инициализации уставка приравнивается к 23 градусам

    PValve:=23

    И далее участвует в расчетах пид регулятора. Менять уставку можно в визуализации с простой привязкой элемента к переменной "PLC_PRG.PValve"

    Но при привязки входной переменной для ModBus (CFC)

    MBPValve: Real_Word;

    [MBPValve.rRealValue]-----------[PValve]

    Не компилируется т.к. CDS ругается на то, что "PValve" не является входной переменной, но как так, если ее можно менять из визуализации

  6. #6

  7. #7

    По умолчанию

    Да. Или так просто не получится?

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

    По умолчанию

    Цитата Сообщение от phenomit Посмотреть сообщение
    Да. Или так просто не получится?
    Со стандартным Modbus Slave, добавляемым через дерево проекта - нет.
    Используйте библиотеку OwenCommunication.
    См. здесь п. 5.9.2:
    https://ftp.owen.ru/CoDeSys3/11_Docu...odbus_v2.0.pdf

  9. #9

    По умолчанию

    Спасибо

    У меня сейчас основная программа на ST, я добавил pou PRG на CFC с своими переменными и конвертациями из переменных из plc_prg для modbus.
    2 PRG на разных языках работать будет? и нужно-ли эту вспомогательную pou добавлять в main_task?
    Последний раз редактировалось phenomit; 22.11.2019 в 14:17.

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

    По умолчанию

    Оба варианта (вызов одной из программы из другой или привязка программ к одной или разным задачам) являются легитимными - но для каждой программы в проекте должен использовать только один из них (не оба сразу).

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. RS485 Modbus int32 переменные в ПР200 (Slave)
    от Falanor в разделе Среда программирования OWEN Logic
    Ответов: 4
    Последнее сообщение: 22.04.2019, 18:55
  2. МСД-200 ModbusRTU Slave
    от LexSL в разделе Эксплуатация
    Ответов: 12
    Последнее сообщение: 14.12.2013, 11:09
  3. Ответов: 25
    Последнее сообщение: 06.09.2012, 19:16
  4. Ответов: 5
    Последнее сообщение: 14.10.2010, 13:42
  5. Modbus slave переменные
    от Дмитрий77 в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 30.04.2010, 15:26

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

Ваши права

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