Объявите J как INT и читайте в запросе 2 слова начиная с 51 регистра.
Для начала ничего менять не нужно.
Примерно так.
INT j
GetData(j, "Modul vvoda", 4x, 51, 2)
Либо можно массив объявить. И отдельно каждый регистр как элемент массива обработать.
Объявите J как INT и читайте в запросе 2 слова начиная с 51 регистра.
Для начала ничего менять не нужно.
Примерно так.
INT j
GetData(j, "Modul vvoda", 4x, 51, 2)
Либо можно массив объявить. И отдельно каждый регистр как элемент массива обработать.
Последний раз редактировалось pkl; 18.01.2024 в 09:24.
То есть вам нужен один регистр № 50?
И да, если объявили INT то читать нужно 1 значение, не 2. Программа сама прочитает 2 регистра. Моя ошибка.
Последний раз редактировалось pkl; 18.01.2024 в 09:44.
МВ210-204 на 20 входов или с 0 по 19 бит,
Какой 1 регистр вы читаете ? У вас с 16 по 19 бит работать не будет. Нужно читать 2 регистра сразу.
Сначала разберитесь с чтением всех 20 бит, потом разбирайтесь с макросом.
Последний раз редактировалось kondor3000; 18.01.2024 в 09:57.
4х51 32bit unsigned читается.
замкнутые контакты 1=1 2=2 3=4 4=8 5=16 6=32 и так далее, это число которое отображается на панели.
При замыкании контакта должен срабатывать макрос на изменение регистра другого устройства на определенное число.
БИтовая маска читается, я так думаю, но не получается ее преобразовать макросом чтобы он производил изменение.
Если нужен 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
Распишите конкретно, что вам нужно от макроса. Текст, который вы привели кривой, потому что макрос в панели - это функция, поэтому, то что вы прибавляете 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
Последний раз редактировалось Dimensy; 18.01.2024 в 11:21.
Ваш код тоже попробую. У меня получилось так, в процессе уже приходит понимание, что нужно сделать и как достичь результата.
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
Код проверен, работает на оборудовании. Конфигурация есть выше.
Проект что то не прикрепляется