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

Тема: обращение к битам по модбас

  1. #1
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию обращение к битам по модбас

    В примерах на форуме мне не удалось получить ответ на такой вопрос.

    Я подключаю к ПЛК (МАСТЕР) устройство по Модбасу RTU (некий АЦП, не ОВЕН). В описании на устройство я вижу таблицу используемых регистров.
    Среди них есть несколько типов -

    bool
    char
    int
    float
    long

    и указаны их адреса, команды чтения-записи, диапазон значений и т.д.

    Читаю про создание Мастера в ПЛК и в Конфигураторе выбираю Universal Modbas device. Всякие там скорости обмена и прочее - это понятно.
    Теперь создаем список переменных, которыми обмениваются ПЛК и АЦП.
    И вот тут-то я не могу стартовать.

    Беру из описанных в РЭ на АЦП регистров:

    Адрес регистра: 101
    Тип: bool
    Код ф-ции чтения: -
    Код ф-ции записи: 5

    Сразу за этим битом идет следующий, адрес регистра 102 и так далее.
    Но дальше в таблице есть бит с таким же адресом

    Адрес регистра: 101
    Тип: bool
    Код ф-ции чтения: 1
    Код ф-ции записи: -

    Вопрос: как правильно в Конфигураторе ПЛК этот бит показать? Как быть с тем, что с адреса 101 будет и чтение, и запись туда же?

    Ну, а дальше остальные регистры, с адресами и 40010, и 30001, и прочая, и прочая... Тоже некоторые только пишутся или читаются, а некоторые тудым-сюдым. Но думаю, если подскажете, как обойтись с битами, то дальше будет легче.

    Спасибо!

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

    По умолчанию

    читать и писать в один регистр можно без проблем.
    к примеру я использовал такое для контроля частоты пч.
    если в регистре не то значение, что в плк, то давал команду на запись.биты писать в регистр:
    VAR
    a:WORD;
    END_VAR

    a.0:= ;(*0-бит*)
    a.1:= ;(*1- бит*)
    ...и т.д.
    Последний раз редактировалось lara197a; 17.12.2010 в 21:07.

  3. #3
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    спасибо за скорость

    и все же, главное: действия в конфигураторе. я не понимаю, как мне записать адрес бита 101. создавать слово из 8 бит? так 100 в параметрах модуля - это адрес слова или бита?

    если не влом, просто расскажите все параметры, которые нужно указать в конфигураторе для обращения к битам 100, 101, 102... на чтение и на запись.

  4. #4
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

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

    но все таки. предположим, что я никогда не узнаю, с каким адресом мне нужно обратиться к ацп, чтобы по команде чтения регистра вытянуть 16 байт и распотрошить их на биты.
    тогда процедура создания в конфигураторе возможности обращения к битовым переменным с указанными адресами 100, 101, 102... - какова?
    ведь я порождаю там минимально объект длиной 8 бит. нет там буля...
    вот это хотелось бы понять. пока автор досыпает свои сны

    А пока пофантазирую. Описание Модбаса говорит, что со стороны девайса распределение адресов может быть каким угодно. Единственное:

    The only requirement is to link data reference with physical address

    Таким образом, размышляю я, вовсе не факт, что битовые переменные с адресами 100 и 101 будут физически рядом (как бы это не казалось очевидным). А если так, то я в самом строго независящем от причуд программиста АЦП случае должен сделать так:

    1) Для чтения бита 100 - Конфигуратором породить 8 бит в области обмена, дать этому объекту адрес 100 и обращаться к нему командами битового чтения. В получаемом ответе я должен взять строго младший бит, ибо стандарт говорит, что в любом случае именно там находится бит бит, который я адресую.

    2) Для чтения бита 101 я точно так же порождаю байт, но даю ему номер 101 и так же обращаюсь к нему, вытягивая младший бит.

    3) Для записи 100 бита я порождаю еще один объект с номером 100 и объявляю его выходным. И пишу либо 0000, дибо FF00. И других вариантов нет.
    Вроде так...

    Исправлено: Ага! Дудки! Вкуриваю Конфигуратор: В возможных командах в выходном модуле "8 битов" есть только команда 0x0F и "застандартная" 0x71. Вот и выходит (если я правильно понимаю), что записать в один бит, не переживая о способе размещения остальных битов - НИЗЗЯ.

    Это правильно?
    Последний раз редактировалось drvlas; 18.12.2010 в 11:16.

  5. #5

    По умолчанию

    Если вы пишете бит коммандой записи бита, то и адрес указан бита, не регистра, не байта, а именно БИТА. То есть адреса бита с 0 до 15 будут в 16-ти разрядном регистре с адресом 0, биты с адресами 16..31 будут в регистре с адресом 1 и т. д.

  6. #6
    Пользователь Аватар для drvlas
    Регистрация
    30.09.2010
    Адрес
    Киев
    Сообщений
    700

    По умолчанию

    Я думаю о записи одного бита, а не о чтении и не о записи регистра.

    Если я пишу командой записи 1 бита (команда 0х05), то именно в этот бит все и попадает. Причем по самой линий связи проходит вот та самая неповторимая комбинация 0000 или FF00.

    А если пишу командой записи многих битов (команда 0x0F), но указываю количество битов 1, то в путь отправляется слово из 16 бит, но просто с младшим битом, который установлен в нужное нам состояние 0 или 1.

    И вроде это работает. В том устройстве (АЦП), что я сейчас запустил, не было реализовано команды 0x0F, а в ПЛК поленились реализовать команду 0х05. Поэтому проверять пришлось от компьютера. А от ПЛК так и не могу записать бит. Ну, кажется, что легче достучаться до автора того АЦП, чем до наших другзей из ОВЕНа. Они не сказали мне, что я неправ, но и не поспешили заняться добавлением команды 0х05

  7. #7

    По умолчанию

    Вот кусок оглавления из описания библиотеки модбас для ПЛК63. Не знаю с каким контроллером Вы работаете, но если в биосе плк нет комманды 0х05, то ее можно организовать в программе пользователя, поковыряйте в этом направлении.


  8. #8

    По умолчанию

    Здравствуйте, drvlas. В чем собственно проблема? Что за оборудование вы подключаете и что вы хотите из него получить?
    Дело в том, что у любой железяки есть определенный набор правил. Ну к примеру, регистры с 0 по 100 читаются ф-ей 03h, а пишутся ф-ей 10h. Если про битовые операции нет ни слова, то с данными регистрами они могут просто не работать.
    Биоса в ПЛК нет (что бы людей в заблуждение не вводить). Но есть область PLC_Configuration или проще говоря конфигурация ПЛК. К сожалению в ПЛК63 изначально задумывался как довольно простое устройство. Поэтому часть функционала в конфигурацию контроллера не вошло. Работать с функцией 5 вы можете только через библиотеку. Если ПЛК63 выступает мастером сети, то программу придется писать исключительно через библиотеку, т.к. конфигурация ПЛК63 не позволяет организовывать мастера сети.
    Последний раз редактировалось Александр Приходько; 22.12.2010 в 10:17.

  9. #9

    По умолчанию

    Цитата Сообщение от Александр Приходько Посмотреть сообщение
    Биоса в ПЛК нет (что бы людей в заблуждение не вводить).
    Что же тогда по вашему исполняет программу? Вы же ее не пишете на ассемблере по "железу". Есть некий набор поддерживаемых функций, который присутствует в данной системе. В ПЛК63 нет функций поддержки модбас, а в плк100 есть, но не все реализованы - вот суть вопроса.

  10. #10

    По умолчанию

    1. Программу выполняет система исполнения CoDeSys - на то от там и есть. CODESYS - ЭТО НЕ ТОЛЬКО СИСТЕМА ПРОГРАММИРОВАНИЯ...
    2. То, что ПЛК63 не поддерживает в конфигурации ПЛК работу мастером четко прописано. То, что с помощью БЕСПЛАТНОЙ библиотеки Мастер таки можно организовать - тоже написано...
    3. В ПЛК100 поддержаны не все функции ModBus - это тоже описано.

    Так в чем вопрос?

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

Ваши права

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