PDA

Просмотр полной версии : EasyBuilderPro + Weintek MT8102iE + МВ210-204 + эл.привода



Виктор37174
18.01.2024, 07:25
Приветствую уважаемые форумчане! Недавно начал работать в АСУТП, но уже поставили задачу разобраться в не простом проекте, где возникли нюансы.
EasyBuilderPro 6.08.02 449.
Есть панель Weintek, ПЛК Carek, МВ210-204, и 14 приводов TROX. Со всем разобрался кроме панели и модуля овен.
Панель Weintek MT8102iE и модуль дискретного ввода МВ210-204.
Модуль передает битовую маску в зависимости от номера замкнутого контакта, контакт 1 передает 1, контакт 2 передает 2, контакт 1+2 передает 3, контакт 3 передает 4.
Читается это объектом число, 4х51 тип unsigned32.
7298972990
При замыкании контакта 1 должна происходить запись в другой параметр другого устройства, электропривода, для увеличения уставки, регистр 6х13#0.
7299172992
Для этого используется макрос, и триггер для запуска макроса, но ничего не получается. С простым числом да, все просто, проверено офлайн и онлайн. Но с 4х51 приходит битовая маска, с которой ничего не понятно.
72993
И вот вопрос, как и что нужно сделать чтобы число битовая маска правильно записать в макрос чтобы изменялась уставка другого регистра на другом устройстве.
Может кто реально сталкивался с такой же ситуацией. На форуме искал, не нашел, возможно не внимательно искал, уже тыщу раз переписывал код и много чего пробовал, кроме верного решения.
За ранее спасибо товарищи!

Задача решена!
Второй архив с проектом, правильно выполняющим поставленную задачу.
ЗЫ но это не точно

Dimensy
18.01.2024, 07:55
Что увидел:
Если вы читаете 32 бита, то надо использовать функцию 3х_Double. Также, возможно в настройках поменять местами младший/старший регистр.
В макросе вы читаете только 51 регистр (данные модуля хранятся в регистрах 51 и 52). Попробуйте прочитать 52 регистр

pkl
18.01.2024, 08:05
Для начала выведите ваше значение на панель в двоичном виде. То есть читаете слово состояния входов и отображаете на панели. Если все нормально, то следующим шагом пытаетесь обрабатывать это значение и писать в привод. Вам нужно определить на каком этапе возникает ошибка.

In_Da_Cher_A
18.01.2024, 08:53
Weintek, ПЛК Carek, МВ210-204, и 14 приводов TROX. Со всем разобрался кроме панели и модуля овен.
как и что нужно сделать чтобы число битовая маска правильно записать в макрос чтобы изменялась уставка другого регистра на другом устройстве.
только причём здесь ОВЕН, когда у вас проблемы в панели ? а форум про ОВЕН. не натягивайте сову на глобус,
по Вайнтеку есть свои площадки

Виктор37174
18.01.2024, 08:58
3хdouble51 и 4xdouble51 читается, цифры те же, ничего не поменялось.
3хdouble52 и 4xdouble52 и вообще 52 регистр = device no responce.
Немного не понял как поменять младший старший регистр? И поможет ли это.

Виктор37174
18.01.2024, 09:11
В двоичном виде отображает 4х51 32bit binary. Но никак не обрабатывается, сейчас попробую макрос написать,

macro_command main()

short i
short m
short j
short k
short d=1


SetData(d, "Local HMI", LB, 20, 1)
GetData(j, "Modul vvoda", 4x, 51, 1)
if j==0 then
i=200
m=300
SetData(i, "Local HMI", LW, 10, 1)
SetData(m, "Local HMI", LW, 20, 1)
end if
if j==1 then
i=400
m=500
SetData(i, "Local HMI", LW, 10, 1)
SetData(m, "Local HMI", LW, 20, 1)
end if
end macro_command

Не сработало. Посмотрите пожалуйста, может я делаю что то не так.

Виктор37174
18.01.2024, 09:14
Обращаюсь сюда по причине наличия модуля ОВЕН.
Спасибо за подсказку про площадки Weintek, поищу.
Но я считаю что на разных площадках разрешается спрашивать и просить помощи, тем более что продукт ОВЕН имеется в моем вопросе.

МихаилГл
18.01.2024, 09:14
3хdouble51 и 4xdouble51 читается, цифры те же, ничего не поменялось.
3хdouble52 и 4xdouble52 и вообще 52 регистр = device no responce.
Немного не понял как поменять младший старший регистр? И поможет ли это.

Может не 51 и 52, а 50 и 51 надо читать, возможно есть смещение в настройках

Виктор37174
18.01.2024, 09:18
Может не 51 и 52, а 50 и 51 надо читать, возможно есть смещение в настройках

3хdouble50 и 4xdouble50 и вообще 50 регистр = device no responce.

МихаилГл
18.01.2024, 09:21
3хdouble50 и 4xdouble50 и вообще 50 регистр = device no responce.

Посмотрел документацию... Только 51. Забейте число, которое получаете, в калькулятор виндовс в режиме программиста, и посмотрите, какие биты (входы модуля соответственно) в единице.

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

pkl
18.01.2024, 09:22
Объявите J как INT и читайте в запросе 2 слова начиная с 51 регистра.
Для начала ничего менять не нужно.
Примерно так.
INT j
GetData(j, "Modul vvoda", 4x, 51, 2)
Либо можно массив объявить. И отдельно каждый регистр как элемент массива обработать.

Виктор37174
18.01.2024, 09:39
Объявите J как INT и читайте в запросе 2 слова начиная с 51 регистра.
Для начала ничего менять не нужно.
Примерно так.
INT j
GetData(j, "Modul vvoda", 4x, 51, 2)
Либо можно массив объявить. И отдельно каждый регистр как элемент массива обработать.

7299872999
Попробовал, вот что получилось, ошибка, неверный тип переменной, количество данных надо 1

pkl
18.01.2024, 09:41
То есть вам нужен один регистр № 50?
И да, если объявили INT то читать нужно 1 значение, не 2. Программа сама прочитает 2 регистра. Моя ошибка.

kondor3000
18.01.2024, 09:53
МВ210-204 на 20 входов или с 0 по 19 бит,
Какой 1 регистр вы читаете ? У вас с 16 по 19 бит работать не будет. Нужно читать 2 регистра сразу.
Сначала разберитесь с чтением всех 20 бит, потом разбирайтесь с макросом.

Виктор37174
18.01.2024, 09:55
То есть вам нужен один регистр № 50?
И да, если объявили INT то читать нужно 1 значение, не 2. Программа сама прочитает 2 регистра. Моя ошибка.

Нужен один регистр, 51, именно по нему можно определить замкнут контакт или разомкнут. Пока ничего не помогло. Попробую массив, только с ними ни разу не работал.

Виктор37174
18.01.2024, 10:00
МВ210-204 на 20 входов или с 0 по 19 бит,
Какой 1 регистр вы читаете ? У вас с 16 по 19 бит работать не будет.
Сначала разберитесь с чтением всех 20 бит, потом разбирайтесь с макросом.

4х51 32bit unsigned читается.
замкнутые контакты 1=1 2=2 3=4 4=8 5=16 6=32 и так далее, это число которое отображается на панели.
При замыкании контакта должен срабатывать макрос на изменение регистра другого устройства на определенное число.
БИтовая маска читается, я так думаю, но не получается ее преобразовать макросом чтобы он производил изменение.

pkl
18.01.2024, 10:03
Если нужен 1 регистр с входами с 1 по 16, то массив вам не нужен. Подайте лог. 1 на вход модуля. Отобразите на экране полученное значение в двоичном виде ( надеюсь знаете как). Скрин экрана в студию. Пока вы не получите на экране число 0000....001 дальнейшие действия бессмысленны

Виктор37174
18.01.2024, 10:20
Если нужен 1 регистр с входами с 1 по 16, то массив вам не нужен. Подайте лог. 1 на вход модуля. Отобразите на экране полученное значение в двоичном виде ( надеюсь знаете как). Скрин экрана в студию. Пока вы не получите на экране число 0000....001 дальнейшие действия бессмысленны

Вы правильно мне подсказывали, все получилось. Считать 32bit binary регистр 4x51, выставил количество знаков 20, отобразил длинное число, хотя наверное это даже лишнее, сейчас попробую другую конфигурацию.
Но самое главная запись которая помогла, это int j, а дальше как то само пошло поехало.
Осталась задача, чтобы число которое меняем регистром 4х51, можно было менять и чтобы оно сохранялось при значении 0 регистра 4х51


код макроса

macro_command main()

short i=0
short m=0
int j
short k
short d=1

SetData(d, "Local HMI", LB, 20, 1)
GetData(j, "Modul vvoda", 4x, 51, 1)
if j==0 then
i=i
m=m
end if
if j==1 then
i=400+i
m=500+m
end if
if j==2 then
i=600+i
m=700+m
end if
if j==3 then
i=800+i
m=900+m
end if
SetData(i, "Local HMI", LW, 10, 1)
SetData(m, "Local HMI", LW, 20, 1)
end macro_command

Dimensy
18.01.2024, 11:01
Распишите конкретно, что вам нужно от макроса. Текст, который вы привели кривой, потому что макрос в панели - это функция, поэтому, то что вы прибавляете m и i не на что не влияет



macro_command main()
unsigned int mv
short A = 0
short B = 0

GetData(mv, "Modul vvoda", 3x_Double, 51, 1)
select case mv
case 1
A = чему-то
B = чему-то
break
case 2
A = чему-то
B = чему-то
break
case 3
A = чему-то
B = чему-то
break
case 4
A = чему-то
B = чему-то
end select

Здесь записываем А куда надо
Здесь записываем B куда надо

end macro_command

Виктор37174
18.01.2024, 11:58
Распишите конкретно, что вам нужно от макроса. Текст, который вы привели кривой, потому что макрос в панели - это функция, поэтому, то что вы прибавляете m и i не на что не влияет



macro_command main()
unsigned int mv
short A = 0
short B = 0

GetData(mv, "Modul vvoda", 3x_Double, 51, 1)
select case mv
case 1
A = чему-то
B = чему-то
break
case 2
A = чему-то
B = чему-то
break
case 3
A = чему-то
B = чему-то
break
case 4
A = чему-то
B = чему-то
end select

Здесь записываем А куда надо
Здесь записываем B куда надо

end macro_command


Ваш код тоже попробую. У меня получилось так, в процессе уже приходит понимание, что нужно сделать и как достичь результата.

macro_command main()

short i
short m
int j
short k
short b
short d=1
short n
short x
SetData(d, "Local HMI", LB, 20, 1)
GetData(j, "Modul vvoda", 4x, 51, 1)
GetData(k, "Local HMI", LW, 37, 1)
GetData(b, "Local HMI", LW, 74, 1)
GetData(n, "Local HMI", LW, 137, 1)
GetData(x, "Local HMI", LW, 174, 1)
if j==0 then

i=k
m=b
SetData(i, "ElectroPrivod", 6x, 11#0, 1)
SetData(m, "ElectroPrivod", 6x, 13#0, 1)
end if
if j==1 then
i=n+k
m=b
SetData(i, "ElectroPrivod", 6x, 11#0, 1)
SetData(m, "ElectroPrivod", 6x, 13#0, 1)
end if
if j==2 then
i=k
m=x+b
SetData(i, "ElectroPrivod", 6x, 11#0, 1)
SetData(m, "ElectroPrivod", 6x, 13#0, 1)
end if
if j==3 then
i=n+k
m=x+b
SetData(i, "ElectroPrivod", 6x, 11#0, 1)
SetData(m, "ElectroPrivod", 6x, 13#0, 1)
end if
SetData(i, "ElectroPrivod", 6x, 11#0, 1)
SetData(m, "ElectroPrivod", 6x, 13#0, 1)
end macro_command

Код проверен, работает на оборудовании. Конфигурация есть выше.
Проект что то не прикрепляется

Виктор37174
18.01.2024, 12:00
Благодарю вас за помощь! Направили в нужное направление!

Evgen Dnepr
28.02.2024, 13:03
Подскажите как правильно указать регистр для кнопки! 73957
У меня Овен ПР205 и панель Weintec MT8071iP.

Виктор37174
04.03.2024, 10:16
Уже разобрались? Ну так по фото, если регистр правильный, и имеет битовое переключение 1-0, то правильно.

МихаилГл
04.03.2024, 10:27
Уже разобрались? Ну так по фото, если регистр правильный, и имеет битовое переключение 1-0, то правильно.

Вроде в другой ветке все решили, там вроде было как то так: 17101.01 и не 6 команда, а 6Bit. Но точно не помню.