EasyBuilder - Скорая помощь новичкам

Работа с панелями оператора Weintek - подключение, программирование, совмещение с ПЛК

Модераторы: kiv, 8bit, VanMo

Re: EasyBuilder - Скорая помощь новичкам

Сообщение ArtemPM » 08 июн 2021, 10:10

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)
ArtemPM
 
Сообщения: 197
Зарегистрирован: 14 апр 2021, 05:16

Re: EasyBuilder - Скорая помощь новичкам

Сообщение ArtemPM » 08 июн 2021, 20:05

В 15 строке кода из моего предыдущего сообщения должно быть
Код: Выделить всё
SetData(state[0], "Local HMI", LW, 30, 10)
ArtemPM
 
Сообщения: 197
Зарегистрирован: 14 апр 2021, 05:16

Re: EasyBuilder - Скорая помощь новичкам

Сообщение 132435 » 09 июн 2021, 01:00

ArtemPM писал(а):
132435 писал(а):Еще хочу уточнить: у вас и состояния включено/выключено и аварии хранятся в одном двойном слове в S7-300 или состояния и аварии это два разных двойных слова?
Просто в первом случае у вас данные вкл/выкл будут хранится в переменной LW24, а аварии в LW25. Во втором случае будет так как вы описали ранее LW24 и LW26.
Запутаться легко, так как Siemens использует восьмибитную адресацию и у них двойное слово это (MB0,MB1,MB2,MB3), а у Weintek адресация шестнадцатибитная и двойное слово это (LW24,LW25)

Это два разных двойных слова , с разных блоков данных.
Спасибо, Вам за помощь, завтра попробую на ОП как будет работать.
132435
 
Сообщения: 20
Зарегистрирован: 01 апр 2021, 17:09

Re: EasyBuilder - Скорая помощь новичкам

Сообщение 132435 » 09 июн 2021, 17:49

EasyBuilder, Ваш код работает частично. Есть две проблемы:
1. Аварийное состояние не отображается совсем, почему-то.
2. Надо как-то обменять местами полубайты, "приклеить" в части кода инструкцию SWAPB.
Код: Выделить всё
bool on_off[16], alm[16]
short state[16], i=0
GetData(on_off[0], "Local HMI", LW_Bit, 2400, 16)
GetData(alm[0], "Local HMI", LW_Bit, 2600, 16)
for i=0 to 15
   if alm[i] then
      state[i]=2
   else if on_off[i] then
      state[i]=1
   else
      state[i]=0
   end if
next i
//SWAPB(state[0], state[0] 16) // НЕ РАБОТАЕТ!
SetData(state[0], "Local HMI", LW, 30, 16)

end macro_command


https://photos.google.com/album/AF1QipMkFylYrrYByNlx8Gq6546kGwq9JZ0GwNvpjVb6/photo/AF1QipM9Q74igub-ai36k9S0ag0jjNplMT3jj7EBiUer
132435
 
Сообщения: 20
Зарегистрирован: 01 апр 2021, 17:09

Re: EasyBuilder - Скорая помощь новичкам

Сообщение ArtemPM » 09 июн 2021, 19:22

132435 писал(а):EasyBuilder, Ваш код работает частично. Есть две проблемы:
1. Аварийное состояние не отображается совсем, почему-то.
2. Надо как-то обменять местами полубайты, "приклеить" в части кода инструкцию SWAPB.

1. Код скрипта полностью корректен
Вот скриншот тестового проекта: https://ibb.co/KyJCZxn
Изображение
Как видите у аварии приоритет перед включением и соответствующие переменные имеют значение 2, как и должно быть
2. Что же качается свапа. Эта команда переставляет байты в слове и к массиву state не применима. Вам нужно в этом же скрипте считывать через GetData значение слова из Siemens в переменную типа unsigned int. После этого свапать эту переменную и результат записывать в LW24, а уже после этого выполнять все остальные манипуляции с LW24

Используйте коды для встраивания ! [Модератор]
picture_codes.png
picture_codes.png (16.17 КБ) Просмотров: 5821
ArtemPM
 
Сообщения: 197
Зарегистрирован: 14 апр 2021, 05:16

Re: EasyBuilder - Скорая помощь новичкам

Сообщение tangra.god » 10 июн 2021, 11:53

Доброго времени суток!
Подскажите пожалуйста, как можно modbus переменную сохранять в энергонезависимой памяти. Или как привязать modbus переменную к переменной RW. Нужно сохранять задание на ПЧ
tangra.god
 
Сообщения: 33
Зарегистрирован: 10 июн 2021, 11:45

Re: EasyBuilder - Скорая помощь новичкам

Сообщение 8bit » 10 июн 2021, 13:35

tangra.god писал(а):Доброго времени суток!
Подскажите пожалуйста, как можно modbus переменную сохранять в энергонезависимой памяти. Или как привязать modbus переменную к переменной RW. Нужно сохранять задание на ПЧ

либо в макросе функциями GetData()/SetData(), либо объект "Передача данных"
Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1134
Зарегистрирован: 20 апр 2020, 19:07

Re: EasyBuilder - Скорая помощь новичкам

Сообщение tangra.god » 10 июн 2021, 14:05

8bit писал(а):либо в макросе функциями GetData()/SetData(), либо объект "Передача данных"

Благодарю! Очень помогли
tangra.god
 
Сообщения: 33
Зарегистрирован: 10 июн 2021, 11:45

Re: EasyBuilder - Скорая помощь новичкам

Сообщение Number17 » 15 июн 2021, 15:25

Возможно ли сделать так, что бы объекты размещённые в Commom Window, отображались на других окнах в процессе проектирования?
Number17
 
Сообщения: 156
Зарегистрирован: 06 мар 2018, 12:08

Re: EasyBuilder - Скорая помощь новичкам

Сообщение ArtemPM » 16 июн 2021, 04:04

Number17 писал(а):Возможно ли сделать так, что бы объекты размещённые в Commom Window, отображались на других окнах в процессе проектирования?

Во вкладке "Просмотр" главного меню поставьте галочку "Общее окно"
ArtemPM
 
Сообщения: 197
Зарегистрирован: 14 апр 2021, 05:16

Пред.След.

Вернуться в Weintek

Кто сейчас на конференции

Сейчас этот форум просматривают: dimensy, Google [Bot] и гости: 9