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

Тема: Красивая доступ к битам регистра ввода модуля

  1. #1

    По умолчанию Красивая доступ к битам регистра ввода модуля

    Добрый день
    Имеется ПЛК110 master и МВ110-32ДН slave
    Протокол Modbus RTU
    Доступ к входам модуля через два регистра (не побитно) с адресами 99 и 100 функцией Read holding registr
    Все хорошо но как красиво получить доступ к конкретному входу

    1 вариант
    в конфигураторе ПЛК присвоить регистрам имена например In_1_16 и In_17_32
    читать состояние входов по адресации бита в переменной например In_1_16.5 - состояние входа 6
    Плохо то что входа в этом случае обезличены - нельзя их назвать как то удобно
    если потребуется перенести вход на другой модуль или бит то придется искать и заменять во все программе

    2 вариант
    объявить глобальную переменную по адресу области ввода модуля например _In_1_16 AT %IW6.3.0.0 : WORD;
    Проблемы теже что и с предыдущем вариантом

    3 вариант
    каждый раз присваивать BOOL переменным значения битов из регистра ввода модуля
    например
    In1 := In_1_16.0;
    In2 := In_1_16.1;
    In3 := In_1_16.2;
    etc...
    Уже можно обращаться к входам по красивым и правильным названиям и легко пересадить программную переменную на другой вход но этот вариант увеличивает объем программы и время ее выполнения

    Вопрос:
    Существует ли еще какие то возможности удобно присвоить переменные входам модуля или расположить переменную по адресу бита входа
    Хотя конечно последнее глупость - невозможно расположить булевую переменную 8 бит в памяти 1 бита входа

    Поделитесь кто как делает пожалуйста

    PS такая же проблема в принципе и с выходами которые записываются не побитно а регистром

  2. #2
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,823

    По умолчанию

    Можно использовать битовую адресацию через глобальные константы
    Захват-1.png

    не забыть вкл. эту галку
    Захват-2.png

    Самый простой способ
    VAR_GLOBAL CONSTANT
    In1:INT:=0;
    In2:INT:=1;
    In3:INT:=2;
    In4:INT:=3;
    In5:INT:=4;
    In6:INT:=5;
    In7:INT:=6;
    In8:INT:=7;
    In9:INT:=8;
    In10:INT:=9;
    In11:INT:=10;
    In12:INT:=11;
    In13:INT:=12;
    In14:INT:=13;
    In15:INT:=14;
    In16:INT:=15;
    In17:INT:=16;
    In18:INT:=17;
    In19:INT:=18;
    и т.д.
    Захват-3.png
    В отличии от Ваших вар.1 и 2 в том, что если нужно "пересадить программную переменную на другой вход", например поменять местами In1 и In5, то достаточно в объявлении констант поменять значения
    VAR_GLOBAL CONSTANT
    In1:INT:=4;
    In2:INT:=1;
    In3:INT:=2;
    In4:INT:=3;
    In5:INT:=0;
    In6:INT:=5;
    In7:INT:=6;
    ..............
    Вариант Б. Осмысленные названия.
    VAR_GLOBAL CONSTANT
    Urov_man:INT:=0;
    Razr_man:INT:=1;
    Par_man:INT:=2;
    Urov_plus:INT:=3;
    Urov_minus:INT:=4;
    Razr_plus:INT:=5;
    Razr_minus:INT:=6;
    Par_plus:INT:=7;
    Par_minus:INT:=8;
    Produvka:INT:=9;
    TST_Alarm:INT:=10;
    TST_Next:INT:=11;
    TST_Prev:INT:=12;
    и т.д.
    Захват-4.png
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  3. #3
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,823

    По умолчанию

    Доступ к входам модуля через два регистра (не побитно) с адресами 99 и 100 функцией Read holding registr
    Все хорошо но как красиво получить доступ к конкретному входу
    1. Совсем не обязательно читать с помощью двух регистров, можно прочитать битовую маску маску из МВ110-32Д с помощью одного 32bit input module

    2. Совсем забыл про такой способ - самый красивый - http://www.owen.ru/forum/showthread....l=1#post178890
    Про те шаблоны, что там упоминаются я ничего не нашел. Но в этой теме есть совет
    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Галочку надо в таргете поставить для модуля 32 bit input или output.
    createbitchannels=true
    Чтобы среда генерила битовые коннекторы. Что и было сделано в шаблоне. Шаблона то у Вас нет? Сделайте сами, по аналогии с 8bit
    Воспользуемся этим советом на примере ПЛК160
    Ищем на диске С папку "C:\CoDeSys\Targets\PLC110.60_M\IOModules" или "C:\CoDeSys\Targets\PLC110.60_L\IOModules" в зависимости от вида лицензии на ПЛК (L или M).
    Блокнотом открываем файл "hardware.cfg" в нем через поиск ищем "[Module.ID2005]"
    В этой группе добавляем строку
    createbitchannels=true
    Захват-2.png

    В Содесис обновить конфигурацию ПЛК (Дополнение, Стандартная конфигурация) или создать новый проект с ПЛК110-60(L или M).
    Теперь в «Universal ModBus Device» вставить не 2 Register input module, а 32bit input module.
    Захват-3.png
    Адрес регистра 99 из руководства.
    Теперь можно присвоить имена отдельным разрядам прямо в конфигурации
    Например IN1, IN2, IN3,... и тд.
    Эти имена будут глобальными, их дополнительно нигде больше не нужно объявлять(описывать).
    Захват-4.png

    Тот же фокус можно сделать, например для Register input module
    Захват-7.png

    Для таких модулей, если отдельные биты не нужны, то никто и не заставляет именовать отдельные биты. Остается возможность присваивать имена регистрам, как и у обычных 32bit module или Register input module.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  4. #4

    По умолчанию

    Хороший вариант, спасибо.
    Жаль только что в этом случае нельзя избавится от названий которые присвоены регистрам ввода-вывода модуля
    То есть для входа нужно помнить название регистра на котором он сидит и название входа. При большом количестве модулей тут может быть путаница.

    Почитал хелп про опцию "Замена констант" - я так понял что влияет только при отладке онлайн - если она включена то с константами нельзя обращаться как с переменными - присваивать им значения. Но зато при включенной код в контроллере выполняется быстрей.

    Возник еще вопрос:
    Что произойдет если в область ввода вывода добавить 8 bit input module а читать его командой чтения регистра (т е 16 бит )?
    img-2017-01-17-12-44-10.png
    Прочитаются только 8 бит в модуль Bit8_1?
    или остальные 8 бит попадут в следующий модуль ввода (на рисунке под именем Bit8_2)? Если это так то это удобный способ битового доступа к входам или выходам

  5. #5

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    1. Совсем не обязательно читать с помощью двух регистров, можно прочитать битовую маску маску из МВ110-32Д с помощью одного 32bit input module

    2. Совсем забыл про такой способ - самый красивый - http://www.owen.ru/forum/showthread....l=1#post178890
    Про те шаблоны, что там упоминаются я ничего не нашел. Но в этой теме есть совет
    Отлично!!!
    Попробовал - все получилось!
    Не понятно почему эта опция не включена поумолчанию в таргете
    А то называется 32 bit module а выглядиn как DWORD

    Этот способ решает все проблемы
    Спасибо огромное. Буду пользоваться

  6. #6

    По умолчанию

    кстати прописал строку
    createbitchannels=true
    и для следующих модулей

    [Module.ID2003]
    Name=Register input module

    [Module.ID2004]
    Name=Register output module

    теперь и регистры стало возможно именовать побитно
    красота

    Надеюсь эта самодеятельность ни где не аукнется

  7. #7
    Пользователь Аватар для petera
    Регистрация
    06.05.2011
    Адрес
    Минск
    Сообщений
    3,823

    По умолчанию

    Цитата Сообщение от razv Посмотреть сообщение
    кстати прописал строку
    createbitchannels=true
    и для следующих модулей

    [Module.ID2003]
    Name=Register input module

    [Module.ID2004]
    Name=Register output module

    теперь и регистры стало возможно именовать побитно
    красота

    Надеюсь эта самодеятельность ни где не аукнется
    Для модулей в Slave это тоже работает.
    Мой канал на ютубе
    https://www.youtube.com/c/ПетрАртюков
    Библиотека ГМ для СП300
    https://disk.yandex.com/d/gHLMhLi8x1_HBg

  8. #8
    Пользователь Аватар для DIPHENHYDRAMINE
    Регистрация
    14.01.2018
    Адрес
    Воскресенск
    Сообщений
    38

    По умолчанию

    Цитата Сообщение от petera Посмотреть сообщение
    1. Совсем не обязательно читать с помощью двух регистров, можно прочитать битовую маску маску из МВ110-32Д с помощью одного 32bit input module

    2. Совсем забыл про такой способ - самый красивый - http://www.owen.ru/forum/showthread....l=1#post178890
    Про те шаблоны, что там упоминаются я ничего не нашел. Но в этой теме есть совет

    Воспользуемся этим советом на примере ПЛК160
    Ищем на диске С папку "C:\CoDeSys\Targets\PLC110.60_M\IOModules" или "C:\CoDeSys\Targets\PLC110.60_L\IOModules" в зависимости от вида лицензии на ПЛК (L или M).
    Блокнотом открываем файл "hardware.cfg" в нем через поиск ищем "[Module.ID2005]"
    В этой группе добавляем строку
    createbitchannels=true
    Захват-2.png

    В Содесис обновить конфигурацию ПЛК (Дополнение, Стандартная конфигурация) или создать новый проект с ПЛК110-60(L или M).
    Теперь в «Universal ModBus Device» вставить не 2 Register input module, а 32bit input module.
    Захват-3.png
    Адрес регистра 99 из руководства.
    Теперь можно присвоить имена отдельным разрядам прямо в конфигурации
    Например IN1, IN2, IN3,... и тд.
    Эти имена будут глобальными, их дополнительно нигде больше не нужно объявлять(описывать).
    Захват-4.png

    Тот же фокус можно сделать, например для Register input module
    Захват-7.png

    Для таких модулей, если отдельные биты не нужны, то никто и не заставляет именовать отдельные биты. Остается возможность присваивать имена регистрам, как и у обычных 32bit module или Register input module.
    а если потом открыть этот проект на другом компе, где
    файл "hardware.cfg" оригинальный? проблем не будет?

Похожие темы

  1. Ответов: 9
    Последнее сообщение: 12.12.2016, 13:22
  2. Ответов: 0
    Последнее сообщение: 14.04.2016, 14:29
  3. Создание модуля ввода-вывода
    от Flutter в разделе Master SCADA 3
    Ответов: 12
    Последнее сообщение: 13.01.2015, 16:46
  4. обращение к битам по модбас
    от drvlas в разделе ПЛК1хх
    Ответов: 12
    Последнее сообщение: 23.12.2010, 11:06
  5. выбор модуля ввода
    от kriklivtsev в разделе Разработки
    Ответов: 1
    Последнее сообщение: 17.02.2010, 12:58

Ваши права

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