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

Тема: Передача String по MobBus?

  1. #1

    По умолчанию Передача String по MobBus?

    Я новичок и вопрос может показаться дурацким.
    Но...

    У меня задача - собранные виде длинных строк (дата и время события, параметр 1, параметр 2...) данные передавать из управляющего ПЛК в PC.
    Захотелось воспользоваться стандартным ModBus (глубоко личный Owen-овский протокол совсем не привлекает).
    Как я понял, передавать по MobBus можно, либо настроив конфигурацию ПЛК, либо воспользовавшись самодельными библиотеками.

    Плюс первого варианта - после конфигурирования я просто использую передаваемые переменные в программе, не задумываясь, как идет обмен. Но доступные для передачи переменные при конфигурации имеют максимум размерность два байта (регистр), из-за чего приходится делать противную операцию разбиения каждой записи-строки и распихивания ее частей по двухбайтным переменным. Для 32-байтной строки заводить 16 переменных и раскладывать по ним строку?
    Отвратно.

    Плюс второго варианта - возможность настроить обмен по своему желанию. Но минус - разбираться в последовательности и самих функциях библиотеки по скупым комментариям, т.к. внятного описания "что, зачем и в каком порядке", я пока не нашел.

    Что делать? как передать длинную строку через ModBus?

    С уважением,
    Herzog

  2. #2

    По умолчанию

    а может данные шифровать, а на компе расшифровывать?
    Например: 18 бит - это насос №2 включен, а регистр 35 = это номер этапа операции и тд.
    Автоматизация Диспетчеризация Сервис
    e-mail: ads-kaluga@mail.ru

  3. #3

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Если слейв - то на область io можно наложить указатель на любую структуру и не париться.
    Вот с этого места поподробнее, пожалуйста..

    Есть AS:String(32).
    Что мне нужно указать во вкладке CoDeSys "конфигурации ПЛК" для ModBus (доступны переменные типа 2-байта, 8-бит, 4-байта или float), чтобы передалась вся строка AS в одном пакете?
    Если я там напишу указатель на строку, то передаваться будет 4-байтное число, соответствующее адресу строки, а не сама строка.

    С уважением,
    Herzog

  4. #4

    По умолчанию Валенок!

    Plc у меня слейв, разумеется.

    А с указателем ничего не получится.
    Явного преобразования типов нет и если я в помещаю в четырех байтную переменную модбаса адрес строки, то помещаю только число типа dword а не собственно строку, на которую pointer указывает. В результате у меня передастся в компи-мастер не 32 байта содержимого строки, а четыре, изображающие ее адрес.

    Мне это не нужно, мне нужно передать строку. Так как это сделать?

    С уважением,
    Herzog

  5. #5

    По умолчанию

    Цитата Сообщение от Валенок Посмотреть сообщение
    Где адрес-то кладется ?
    Вы не поняли меня.

    Еще раз повторяю - мне из plc нужно передать строку.
    Вы же мне пишите pstr := адр(модбас_переменная), чтобы принять в строку plc переменную от компи, а мне строку из plc нужно передать в компи.

    Передать dword число в строку нет проблем, ложку воды легко можно налить в стакан и я бы не просил в этом помощи.
    Но мне нужно не это.
    Мне нужно передать длинную строку из plc в компи. А в модбас, если я правильно понял, можно завести переменные не длиннее dword-овской. Т.е. получается, что передавать можно стакан информации (string) только, разбивая по чайным ложечкам (типа dword).
    Что довольно противно и непонятно, как обойти эту проблему.

    Чтобы было совсем понятно и поконкретней- как передать строковую переменную типа DT#1970-01-01-00:00:01 через модбас за один пакет?

    C уважением,
    Herzog
    Последний раз редактировалось Herzog; 23.03.2011 в 16:57.

  6. #6

    По умолчанию

    Herzog, если я правильно понял Валенка, надо делать так:
    В конфигураторе МодБас(слейв) создайте кучу регистров( для string(32) аж 16 штук dword), а потом по адресу первого регистра записываете свою строку. а уже PC её обрабатывает...

  7. #7

    По умолчанию Валенок!

    Сильно сомневаюсь, что переменные так и будут стоять в памяти столбиком в порядке своего ввода...

    Но я получил наконец-таки "железку" ПЛК и теперь наступило время проб методом тыка.

    Спасибо за ответ,
    Herzog

  8. #8

    Talking

    Всем программного успеха!

    я эту проблему решил так, использовал owen ПЛК как Modbus Master, на компьютере организовал modbus Slave.

    Снимок.JPG

    в modbus master у Овен есть передача строки.
    длину строки приходится передавать отдельным регистром


    если пригодится, расшифровываю строку на C# я так:
    Снимок.JPG

Ваши права

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