132435 писал(а):Добрый день. Подскажите пожалуйста, как реализовать вот такую задачу. Хочу визуализировать работу клапанов. Состояние считываю (двойное слово) с S7-300, записывая в память ОП (LW24). Каждый бит (LW24) это состояние клапана Отключен/Включен, а в (LW26) их аварийн. состояние. Теперь каждому клапану присваивается адрес с LW30 по LW40, которые будут отображать их состояние 0-Off, 1-On, 2-alarm.
И остаётся за "малым", перенести состояние битов с адресов LW24 и LW26 каждому клапану
Мне таких макросов ещё не приходилось писать, так ка только учусь, недавно начал осваивать ОП Weintek. Полагаю, что нужно использовать цикл в котором нужно смещать адрес нужн.кол-во раз(косвенная адресация), но как это сделать, я не знаю, если бы это был STL то без проблем, а тут у меня проблемы. Скиньте пожалуйста наброски кода, или как можно обращаться к адресам ОП косвенно через макрос. Буду благодарен за любую помощь.
Самое простое сделать как-то так:
- Код: Выделить всё
- macro_command main()
bool on_off[10], alm[10]
short state[10], i=0
GetData(on_off[0], "Local HMI", LW_Bit, 2400, 10)
GetData(alm[0], "Local HMI", LW_Bit, 2600, 10)
for i=0 to 9
if alm[i] then
state[i]=2
else if on_off[i] then
state[i]=1
else
state[i]=0
end if
next i
SetData(state[i], "Local HMI", LW, 30, 10)
end macro_command
В строке 4 разбираем слово LW24 на биты и заносим первые 10 в массив on_off
В строке 5 разбираем слово LW26 на биты и заносим первые 10 в массив alm
Далее в цикле формируем 10 слов состояний клапанов и записываем все 10 слов в память панели начиная с адреса LW30.
Еще хочу уточнить: у вас и состояния включено/выключено и аварии хранятся в одном двойном слове в S7-300 или состояния и аварии это два разных двойных слова?
Просто в первом случае у вас данные вкл/выкл будут хранится в переменной LW24, а аварии в LW25. Во втором случае будет так как вы описали ранее LW24 и LW26.
Запутаться легко, так как Siemens использует восьмибитную адресацию и у них двойное слово это (MB0,MB1,MB2,MB3), а у Weintek адресация шестнадцатибитная и двойное слово это (LW24,LW25)