Помогите разобраться с контроллером Beckhoff

Стартовая страница Форумы Взаимодействие с устройствами Modbus Помогите разобраться с контроллером Beckhoff

Просмотр 15 сообщений - с 1 по 15 (из 87 всего)
  • Автор
    Сообщения
  • #19399
    sakhalin_Cat
    Участник

    Господа, я вас яростно приветствую. 🙂 🙂
    Будьте другами помогите чайнику. Я реально не программер, у меня возникла трабла.
    Собрал я себе простенькое устройство включать выключать свет и прочую машинерию на контроллере Beckhoff BC9000 и никак у меня не выходит управлять им с рапидскады по ModBus TCP/
    Параметры читаю, регистры вижу, лампочки на страничкев веб при включении реле загораются. А вот загнать какой-либо сигнал управления в контроллер у меня не выходит.
    Реально туплю, уже 100раз доки по бекофу перерыл наизусть практически выучил.
    Непонятно какой в программе читать регистр и непонятно по какому адресу в контроллер слать бит управления.

    #19401
    sakhalin_Cat
    Участник

    Мне бы хотя-бы одно реле включить дальше бы разобрался. Затык не с рапидой а именно в связке. Непонятно какой тип входа читать в контроллере и куда писать по модбасу чтобы в контроллер это прилетело. Дайте простой пример пожалуйста. ну например пусть будет включить один выход.

    #19403
    manjey73
    Участник

    К сожалению без знания Beckhoff трудно помочь. Судя по номеру это машинка на CodeSys 2.3 еще. Ну а там от производителя, поддерживает он битовые операции (функция 0х05 кажется) или нет. То есть надо сперва понять, какой функционал поддерживает данный ПЛК, чтобы что-то посоветовать.

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

    • Этот ответ был изменен 6 месяцев, 2 недели назад от manjey73.
    #19444
    sakhalin_Cat
    Участник

    Помогите пожалуйста.
    Я уже всю голову сломал.
    Что-то лыжи не едут. Я спокойно пишу в регистры контроллера программой modpull
    но я не могу понять как с рапидскады отправить запись в регистр.
    Уже несколько дней сижу и нифига не выходит. На анализаторе всякая фигня присылается. Понимаю, что что-то не так делаю.
    Подскажите куда пнуть?
    .
    Надо записать регистр по адресу 16385 значение — «1» это слово %MW0 состоящее из двух байт %MB0 и %MB1 соответственно содержащие биты %M0.0 — %M0.7
    Вопрос как записать единицу в нужный бит?

    modpoll -m tcp -r 16385 192.168.5.109 1

    #19445
    manjey73
    Участник

    Сделайте скрин настроек modpoll на режим записи.

    Вы записываете непосредственно бит или число, в котором меняете соответствующий бит ?
    Так же сделайте скрин CodeSys (точнее что там у Beckhoff — TwinCat или как ПО называется) по части настроек на данный регистр…

    #19446
    manjey73
    Участник

    Если битовые функции не используются, то надо формулой менять бит и записывать полный регистр, при этом учитывая возможные изменения других бит

    #19447
    manjey73
    Участник

    Лог правильной записи из modpoll и использование Parser Modbus ускорит процесс понимания

    #19448
    sakhalin_Cat
    Участник

    Чтобы изменить состояние слова мне нужно послать двуххбайтовую комманду
    например
    отправка modpoll -m tcp -r 16385 192.168.5.109 255 == DEC=255 == «2Byte» (0000 0000 1111 1111) переводит BOOL регистры %MX0.0 — %/MX0.7 TRUE
    .
    отправка modpoll -m tcp -r 16385 192.168.5.109 -256 == DEC= -256 == «2Byte» (1111 1111 0000 0000) переводит BOOL регистры %MX1.0 — %/MX1.7 TRUE
    .
    отправка modpoll -m tcp -r 16385 192.168.5.109 -1 == DEC= -1 == «2Byte» (1111 1111 1111 1111) переводит BOOL регистры %MX0.0 — %/MX0.7 и %MX1.0 — %/MX1.7 TRUE

    Вопрос — Как мне написать команлу в «Каналах» чтобы изменить один нужный мне Бит не затронув все остальные?
    Какой тип выбрать в настройках «Шаблона устройств» short? ubshort итд итп?

    • Этот ответ был изменен 6 месяцев, 2 недели назад от sakhalin_Cat.
    #19450
    sakhalin_Cat
    Участник

    У modpool нет лога это утилита командной строки. В контроллере — первое двухбайтовое слово «WORD»= %MW0 находится по смещению 16385 и содержит байты %MB0 и %MB1 в которых есть биты %MX0.0 — %/MX0.7 и %MX1.0 — %/MX1.7 соответственно.

    • Этот ответ был изменен 6 месяцев, 2 недели назад от sakhalin_Cat.
    • Этот ответ был изменен 6 месяцев, 2 недели назад от sakhalin_Cat.
    #19453
    manjey73
    Участник

    С чего бы командной строки? или вы под Linux это делаете?

    Если логеры портов, если что.. со временем разберетесь, что использовать.
    Например Tibbo Monitor из пакета Tibbo VPS Manager и так далее и так далее.

    Если вы записываете регистр целиком, то без формул не обойтись.

    В настройках шаблона сделайте команду на нужный регистр, адрес тот же, что и при чтении. раз речь о битах, то ushort

    Потом попробуйте записывать числа стандартной командой, сверяясь с калькулятором Windows например по битам, например число 128 это 0х80 в HEX и 7-й бит в единице
    Ну и так далее проверьте остальные числа

    #19454
    manjey73
    Участник

    Иногда в ПЛК и ПР есть адрес регистра, отвечающий за битовую маску и описано в РЭ, как посчитать именно адрес бита в данном регистре, тогда можно использовать функции Coil для записи битов. Опять же, не знаю, что там с Beckhoff, не было их у меня ни разу. Все зависит от контроллера, что там намутил производитель…

    #19455
    manjey73
    Участник
    public double SetBit(double n, int index, bool value)
    {
    long nn = Convert.ToInt64(n);
    return value ? nn | (1 << index) : nn & ~(1 << index);
    }

    Формула SetBit — добавить в Справочники — Формулы

    Все каналы в БД выполняются последовательно, отменьшего к большему.
    Соответственно у вас есть канал, приходящий из ПЛК. Нужно сделать дорасчетный канал Старше по номеру, куда делать копию этого канала.
    Потом нужное количество каналов с вытаскиванием битов (GetBit)
    К ним привязать каналы управления с формулой SetBit используя для установки дорасчетный канал.
    И после всего этого, используя Модуль автоуправления, проверять изменение дорасчетного канала и если значение не равно предыдущему, отправлять значение этого канала в контроллер.

    В общем думать надо и пробовать…

    • Этот ответ был изменен 6 месяцев, 2 недели назад от manjey73.
    #19457
    sakhalin_Cat
    Участник

    А куда в этой формуле чего подставлять?

    #19458
    sakhalin_Cat
    Участник

    И за что отвечает поле «порядок байт» в «редактор шаблонов»

    #19459
    manjey73
    Участник

    Порядок байт зависит как ПЛК передает данные, обычно это от процессоров зависит, одни передают старшим регистром вперед, другие младшим и так далее. Настройка в драйвере и служит для того, чтобы выставить соответствие тому или иному прибору правильные настройки.

    SetBit(Значение канала, которое меняем, номер бита с 0, значение 0 или 1 в зависимости убираем бит или выставляем)

    Например у нас дорасчетный канал со значением под номером 100

    Формула в канале управления будет SetBit(Val(100), 0, Cmd)
    Стандартная команда Отключить-Включить

Просмотр 15 сообщений - с 1 по 15 (из 87 всего)
  • Вы должны авторизироваться для ответа в этой теме.