Страница 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
    Адрес
    Краснодар
    Сообщений
    10,583

    По умолчанию

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

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

    По умолчанию

    Добрый день.
    В любом случае потребуется выполнить преобразование к 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

  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
    Адрес
    Москва
    Сообщений
    12,064

    По умолчанию

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

Страница 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, 12:09
  3. Ответов: 25
    Последнее сообщение: 06.09.2012, 20:16
  4. Ответов: 5
    Последнее сообщение: 14.10.2010, 14:42
  5. Modbus slave переменные
    от Дмитрий77 в разделе ПЛК1хх
    Ответов: 7
    Последнее сообщение: 30.04.2010, 16:26

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

Ваши права

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