Стартовая страница › Форумы › Взаимодействие с устройствами › Modbus › Помогите разобраться с контроллером Beckhoff
- В этой теме 89 ответов, 4 участника, последнее обновление 1 год, 11 месяцев назад сделано sakhalin_Cat.
-
АвторСообщения
-
15.05.2021 в 00:27 #19399sakhalin_CatУчастник
Господа, я вас яростно приветствую. 🙂 🙂
Будьте другами помогите чайнику. Я реально не программер, у меня возникла трабла.
Собрал я себе простенькое устройство включать выключать свет и прочую машинерию на контроллере Beckhoff BC9000 и никак у меня не выходит управлять им с рапидскады по ModBus TCP/
Параметры читаю, регистры вижу, лампочки на страничкев веб при включении реле загораются. А вот загнать какой-либо сигнал управления в контроллер у меня не выходит.
Реально туплю, уже 100раз доки по бекофу перерыл наизусть практически выучил.
Непонятно какой в программе читать регистр и непонятно по какому адресу в контроллер слать бит управления.15.05.2021 в 11:42 #19401sakhalin_CatУчастникМне бы хотя-бы одно реле включить дальше бы разобрался. Затык не с рапидой а именно в связке. Непонятно какой тип входа читать в контроллере и куда писать по модбасу чтобы в контроллер это прилетело. Дайте простой пример пожалуйста. ну например пусть будет включить один выход.
15.05.2021 в 13:13 #19403manjey73УчастникК сожалению без знания Beckhoff трудно помочь. Судя по номеру это машинка на CodeSys 2.3 еще. Ну а там от производителя, поддерживает он битовые операции (функция 0х05 кажется) или нет. То есть надо сперва понять, какой функционал поддерживает данный ПЛК, чтобы что-то посоветовать.
Так же зависит как написана программа, может вы просто переписываете значение в программе и будете хоть сколько вокруг плясать, а не измените извне ничего.
- Этот ответ был изменен 2 года, 11 месяцев назад от manjey73.
16.05.2021 в 11:47 #19444sakhalin_CatУчастникПомогите пожалуйста.
Я уже всю голову сломал.
Что-то лыжи не едут. Я спокойно пишу в регистры контроллера программой modpull
но я не могу понять как с рапидскады отправить запись в регистр.
Уже несколько дней сижу и нифига не выходит. На анализаторе всякая фигня присылается. Понимаю, что что-то не так делаю.
Подскажите куда пнуть?
.
Надо записать регистр по адресу 16385 значение — «1» это слово %MW0 состоящее из двух байт %MB0 и %MB1 соответственно содержащие биты %M0.0 — %M0.7
Вопрос как записать единицу в нужный бит?modpoll -m tcp -r 16385 192.168.5.109 1
16.05.2021 в 12:12 #19445manjey73УчастникСделайте скрин настроек modpoll на режим записи.
Вы записываете непосредственно бит или число, в котором меняете соответствующий бит ?
Так же сделайте скрин CodeSys (точнее что там у Beckhoff — TwinCat или как ПО называется) по части настроек на данный регистр…16.05.2021 в 12:13 #19446manjey73УчастникЕсли битовые функции не используются, то надо формулой менять бит и записывать полный регистр, при этом учитывая возможные изменения других бит
16.05.2021 в 12:19 #19447manjey73УчастникЛог правильной записи из modpoll и использование Parser Modbus ускорит процесс понимания
16.05.2021 в 13:14 #19448sakhalin_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 итд итп?- Этот ответ был изменен 2 года, 11 месяцев назад от sakhalin_Cat.
16.05.2021 в 13:20 #19450sakhalin_CatУчастникУ modpool нет лога это утилита командной строки. В контроллере — первое двухбайтовое слово «WORD»= %MW0 находится по смещению 16385 и содержит байты %MB0 и %MB1 в которых есть биты %MX0.0 — %/MX0.7 и %MX1.0 — %/MX1.7 соответственно.
- Этот ответ был изменен 2 года, 11 месяцев назад от sakhalin_Cat.
- Этот ответ был изменен 2 года, 11 месяцев назад от sakhalin_Cat.
16.05.2021 в 13:52 #19453manjey73УчастникС чего бы командной строки? или вы под Linux это делаете?
Если логеры портов, если что.. со временем разберетесь, что использовать.
Например Tibbo Monitor из пакета Tibbo VPS Manager и так далее и так далее.Если вы записываете регистр целиком, то без формул не обойтись.
В настройках шаблона сделайте команду на нужный регистр, адрес тот же, что и при чтении. раз речь о битах, то ushort
Потом попробуйте записывать числа стандартной командой, сверяясь с калькулятором Windows например по битам, например число 128 это 0х80 в HEX и 7-й бит в единице
Ну и так далее проверьте остальные числа16.05.2021 в 13:54 #19454manjey73УчастникИногда в ПЛК и ПР есть адрес регистра, отвечающий за битовую маску и описано в РЭ, как посчитать именно адрес бита в данном регистре, тогда можно использовать функции Coil для записи битов. Опять же, не знаю, что там с Beckhoff, не было их у меня ни разу. Все зависит от контроллера, что там намутил производитель…
16.05.2021 в 13:59 #19455manjey73Участник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 используя для установки дорасчетный канал.
И после всего этого, используя Модуль автоуправления, проверять изменение дорасчетного канала и если значение не равно предыдущему, отправлять значение этого канала в контроллер.В общем думать надо и пробовать…
- Этот ответ был изменен 2 года, 11 месяцев назад от manjey73.
16.05.2021 в 15:19 #19457sakhalin_CatУчастникА куда в этой формуле чего подставлять?
16.05.2021 в 15:20 #19458sakhalin_CatУчастникИ за что отвечает поле «порядок байт» в «редактор шаблонов»
16.05.2021 в 16:17 #19459manjey73УчастникПорядок байт зависит как ПЛК передает данные, обычно это от процессоров зависит, одни передают старшим регистром вперед, другие младшим и так далее. Настройка в драйвере и служит для того, чтобы выставить соответствие тому или иному прибору правильные настройки.
SetBit(Значение канала, которое меняем, номер бита с 0, значение 0 или 1 в зависимости убираем бит или выставляем)
Например у нас дорасчетный канал со значением под номером 100
Формула в канале управления будет SetBit(Val(100), 0, Cmd)
Стандартная команда Отключить-Включить -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.