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

Тема: Как из REAL сделать 2 * WORD (для Modbus)?

  1. #1

    Exclamation Как из REAL сделать 2 * WORD (для Modbus)?

    Добрый вечер!

    ПЛК 150 используется как модуль ввода-вывода для СПК 110 (зачем, не спрашивайте, рак мозга у одного товарища-погроммиста).

    Протокол обмена - Modbus-RTU через RS485.

    Модбас передает максимум переменные типа WORD. Аналоговые входы\выходы имеют тип REAL (по длине - 2хWORD).

    Вопрос - как сделать в Codesys 2.3 из REAL два WORD.

    MEMCPY, насколько я понял, оно не умеет.

    Как еще?

    Заранее спасибо!

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

    По умолчанию

    модбас передает все
    4 байта
    8 байт
    флоат
    файл
    и т.д.
    плк 150 тоже

  3. #3
    Пользователь Аватар для _Mikhail
    Регистрация
    25.07.2013
    Адрес
    Ярославль
    Сообщений
    510

    По умолчанию

    Для передачи REAL между ПЛК и СПК не надо его разбивать. нужно считывать оба регистра и составлять обратно REAL.Все это описано http://www.owen.ru/forum/showthread.php?t=23897

  4. #4
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Цитата Сообщение от SokolovA Посмотреть сообщение
    (зачем, не спрашивайте, рак мозга у одного товарища-погроммиста)
    вполне нормальное решение, чтоб не закупать модули по отдельности

    а вот по Вам
    1) выше уже написано что конфигуратор плк150 позволяет иметь в слейве и реалы в том числе
    2) memcpy может и не работает, только она для КДС3.5, а в КДС2.3 используется sysmemcpy
    3) вариантов как еще масса
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  5. #5

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    вполне нормальное решение, чтоб не закупать модули по отдельности

    а вот по Вам
    1) выше уже написано что конфигуратор плк150 позволяет иметь в слейве и реалы в том числе
    2) memcpy может и не работает, только она для КДС3.5, а в КДС2.3 используется sysmemcpy
    3) вариантов как еще масса
    Неа, не нормальное, ни по деньгам - экономии в данном конкретном случае в минус рубль, ни по технологичности - вместо разработки я трачу время на разбивку\склеивание переменных.

    ПЛК 150 передает REAL. А вот на стороне 3.6 у меня такая http://i.piccy.info/i9/08796125136446202e0ae4ae0143f4ac/1468439960/201414/1051572/150.jpg.
    Модбас больше чем WORD не принимает, тип сменить нельзя, он зависит от команды, а они только для BOOL (Функция 01), BYTE (02), WORD (03, 04).

    2. За sysmemcpy спасибо.

    3. А какой вариант наилучший, напишите плиз!

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

    По умолчанию

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

    можно почитать что такое реал
    упаковываете в один регистр мантису
    в др. экспоненту.

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

  7. #7
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Цитата Сообщение от SokolovA Посмотреть сообщение
    Неа, не нормальное, ни по деньгам - экономии в данном конкретном случае в минус рубль, ни по технологичности - вместо разработки я трачу время на разбивку\склеивание переменных.

    ПЛК 150 передает REAL. А вот на стороне 3.6 у меня такая http://i.piccy.info/i9/08796125136446202e0ae4ae0143f4ac/1468439960/201414/1051572/150.jpg.
    Модбас больше чем WORD не принимает, тип сменить нельзя, он зависит от команды, а они только для BOOL (Функция 01), BYTE (02), WORD (03, 04).

    2. За sysmemcpy спасибо.

    3. А какой вариант наилучший, напишите плиз!
    Т.е. у Вас нет сложностей опрашивать несколько устройств в сети, вместо одного?
    У Вас нет проблем с габаритами шкафа для этой мини-задачи?
    Из модуля аналоговых входов, Вам тоже пришлось бы "выуживать" РЕАЛ по модбас, не вижу разницы с текущим вариантом комплектации. Если Вы планировали забирать ИНТ-ы, то кто мешает делать это в плк?
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #8

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Нормальное решение программиста который не занимается хренью в виде разбивки/склеивания мифических регистров, а пересылает целиком структуры и пьет пиво пока вы пытаетесь "экономить рубль".

    Модбас вообще не работает c BOOL, BYTE, WORD.
    Функции 1,2 - атавизм. Функции 3,4 позволяют прочитать объем абстрактных данных от 2 до 250 байт куда можно пихнуть практически все что угодно с точки зрения автоматизации.
    Рубль тут никто не экономит, написал, чтобы не спрашивали про финансовую составляющую.

    Ок, и как же их переслать, эти структуры, со стороны 2.3, если аналоговый вход имеетр тип REAL, а в 3.6 я не могу задать произвольный тип переменной, которая мне приходит по модбасу, она только WORD или меньше. То есть 250 байт он может и могет, но они будут разбиты на N переменных типа WORD. Которые нужно резать на источнике (ПЛК 150) и склеивать на приемнике (СПК 110).

    Еще раз, скрин (http://i.piccy.info/i9/0879612513644...051572/150.jpg).

    Тип WORD в переменной не меняется.

    Цитата Сообщение от capzap Посмотреть сообщение
    Т.е. у Вас нет сложностей опрашивать несколько устройств в сети, вместо одного?
    У Вас нет проблем с габаритами шкафа для этой мини-задачи?
    Из модуля аналоговых входов, Вам тоже пришлось бы "выуживать" РЕАЛ по модбас, не вижу разницы с текущим вариантом комплектации. Если Вы планировали забирать ИНТ-ы, то кто мешает делать это в плк?
    А в чем проблема опрашивать 5 модулей? Они это сами делают, мне ни строчки кода писать не надо, только раздать адреса и настройки залить в модули.
    Проблемы, наверное, будут, когда один из модулей отвалится, но тогда и вся система станет неработоспособной.

    Габариты - это не мои проблемы, в данной задаче. Но, в общем и целом, шкафы производства РФ пока еще есть и они стоят копейки.

    Из модулей мне ничего выуживать не надо, есть готовое решение от Овена - шаблоны модулей. Вопросы взаимодействия с шиной от меня экранированы в данном случае, что упрощает и ускоряет разработку.

    Либо у меня не тот кодесис, либо я что-то делаю не так. Еще раз, тип аналогового входа на ПЛК 150 - REAL. В модбас-слейв на ПЛК я могу сделать переменную REAL. Но на 3.6 мой канал имеет тип ARRAY [0...4] OF WORD, и изменить ни тип канала, ни, соответственно, тип переменных в канале я не могу руками.
    В этом-то вся и проблема.
    Значит, нужно на ПЛК запихивать REAL в два WORD, а на СПК наоборот их склеивать.

    Что не так?

  9. #9
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Цитата Сообщение от SokolovA Посмотреть сообщение
    Что не так?
    да много чего не так, не ликбез же проводить

    переходите в тему http://www.owen.ru/forum/showthread.php?t=23897 скачивайте документ SPK_Modbus_v.0.ХХ до страницы 120 раздел 6.4.2. Описание реализации на языке ST ну и дальше по описанию
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

Похожие темы

  1. Как передать значения REAL по modbus?
    от kat в разделе СПК1хх
    Ответов: 22
    Последнее сообщение: 29.08.2020, 22:34
  2. Перевод WORD в REAL в CFC.
    от Newcomer в разделе ПЛК1хх
    Ответов: 3
    Последнее сообщение: 16.01.2016, 10:11
  3. Упаковка переменных BOOL, INT, REAL в Modbus String
    от ПРОЕКТ-П в разделе ПЛК1хх
    Ответов: 15
    Последнее сообщение: 20.04.2015, 22:09
  4. Из двух WORD один REAL?
    от kholonkin в разделе СПК2хх
    Ответов: 1
    Последнее сообщение: 06.09.2013, 11:17
  5. modbus RTU, real, swap (перестановка слов)
    от vitiali в разделе ПЛК1хх
    Ответов: 9
    Последнее сообщение: 18.07.2011, 17:52

Ваши права

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