Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 24

Тема: Чтение/запись нескольких регистров ModBus RTU

  1. #1

    По умолчанию Чтение/запись нескольких регистров ModBus RTU

    Возможно ли в ПЛК посредством ModBus Master читать и писать сразу несколько регистров командами 0x03 и 0x10 либо другими? И как работает приём и передача посредством String modul? Нужно передавать только печатаемые символы? Всё это нужно для сокращения времени опроса по сети.

  2. #2

    По умолчанию

    Можно, в 4-х байта и стрингах так и делается.
    Стринг - вставляете модуль, задаете число передаваемых символов в параметре (по умолчанию 80), копируете побайтно в/из память канала стринга данные и все. Контрольная сумма подставляется автоматически.

  3. #3

    По умолчанию

    Т.е. как я понимаю, организовать обмен с девайсами использующими команды 0x03 и 0x10 в полном объеме не удастся. (Например инвертора от OMRON)

  4. #4

    По умолчанию

    это почему? Команды 0х03 и 0х10 поддержаны.

  5. #5

    По умолчанию По поводу стринга

    Получается, можно читать и писать несколько байт через стринг, но кроме нуля. Или я ошибаюсь?

  6. #6
    Пользователь
    Регистрация
    05.05.2007
    Адрес
    Барнаул->Москва
    Сообщений
    139

    По умолчанию

    Если интересует запись любых символов и тд - можно создать байтовый регистр, сделать на него указатель, как к стрингу. Соответственно в байтовый регистр записываете в Hex код нужного символа, а через указатель получаете его уже в удобноваримом виде - как стринг...

  7. #7

    По умолчанию

    Цитата Сообщение от Milchuk Посмотреть сообщение
    Получается, можно читать и писать несколько байт через стринг, но кроме нуля. Или я ошибаюсь?
    Не зря в модуле string есть параметр "число передаваемых байтов"! Вот сколько там байтов записано, столько и будет передано, хоть они там все нули... А string - потому, что канал нельзя объявить байтовым массивом. Единственное ограничение при передаче нуля - нельзя пользоваться функциями обработки строк, а надо брать указатель и побайтово читать/записывать в канал модуля String

  8. #8

    По умолчанию

    Спасибо, я догадался.

  9. #9
    Пользователь
    Регистрация
    28.12.2006
    Адрес
    Ростов-на-Дону
    Сообщений
    44

    По умолчанию

    Цитата Сообщение от Филоненко Владислав Посмотреть сообщение
    Не зря в модуле string есть параметр "число передаваемых байтов"! Вот сколько там байтов записано, столько и будет передано, хоть они там все нули... А string - потому, что канал нельзя объявить байтовым массивом. Единственное ограничение при передаче нуля - нельзя пользоваться функциями обработки строк, а надо брать указатель и побайтово читать/записывать в канал модуля String
    А меня интересует - в чем трудность реализации команд 0х03 и 0х10 для 16-ти разрядных слов? Откуда весь этот геморрой с указателями? Почему стандарт MODBUS/RTU поддерживается как-то через "зад"?
    В стандарте ясно сказано, что минимальной информационной единицей является 16-разрядный регистр, а не какие-то там переменные типа string. То, что реализовано у Вас не может считаться полноценным протоколом MODBUS. На мой взгляд, все эти недочеты должны быть оговорены в документации, опять же сообразно со стандартом.
    MODBUS - шина, предусматривающая поляризацию. У Вас ее нет. Почему?
    Такая вольная трактовка стандартов может нанести определенный урон хорошему, в общем-то, девайсу (ПЛК 100/150/154) в нелегкой конкурентной борьбе.
    Вопрос. Будет ли осуществляться "причесывание" этого недочета?

  10. #10

    По умолчанию

    Цитата Сообщение от Прохожий Посмотреть сообщение
    А меня интересует - в чем трудность реализации команд 0х03 и 0х10 для 16-ти разрядных слов? Откуда весь этот геморрой с указателями? Почему стандарт MODBUS/RTU поддерживается как-то через "зад"?
    В стандарте ясно сказано, что минимальной информационной единицей является 16-разрядный регистр, а не какие-то там переменные типа string. То, что реализовано у Вас не может считаться полноценным протоколом MODBUS. На мой взгляд, все эти недочеты должны быть оговорены в документации, опять же сообразно со стандартом.
    MODBUS - шина, предусматривающая поляризацию. У Вас ее нет. Почему?
    Такая вольная трактовка стандартов может нанести определенный урон хорошему, в общем-то, девайсу (ПЛК 100/150/154) в нелегкой конкурентной борьбе.
    Вопрос. Будет ли осуществляться "причесывание" этого недочета?
    Никаких проблем с реализацией передачи регистра нет, он и представляется регистром. Или 2-я, если число с плавающей точкой.
    Проблемы (да и проблемы ли это?) лишь с записью множества регистров 1 командой. И собственно к реализации протокола ModBus в контроллере они никакого отношения не имеют.
    Просто фирма 3S Software когда делала свою среду разработки, вот вся такая нехорошая , не предусмотрела специального типа данных, называемого массив регистров ModBus. Редиска однозначно...
    А предусмотрела универсальный тип байтовый массив (string), к-й можно использовать и с ModBus и с Овен и с DCON, и с "фирменным" протоколом от Васи Пупкина. (И зачем такая универсальность, вот раньше помню...включил рубильник - работает, выключил - не работает, красота...).
    Но за универсальность надо немножко доплатить, а именно обратиться к этой структуре по указателю, что просто и не вызывает какого-либо серьезного умственного напряжения.

    По поводу 2-й части:
    ModBus - протокол передачи данных, а не шина. И у него не может быть никакой поляризации!
    О какой поляризации вообще идет речь? В качестве физ. интерфейса передачи используется 485/232/TCP. Про какой интерфейс вы говорите?

    P.S. А контроллер то видели?
    P.P.S. Извините за вольный стиль, предыдущий пост настроил

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

Ваши права

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