Макросы в панелях DOP. программные конструкции

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Макросы в панелях DOP. программные конструкции

Сообщение bayk »

Здравствуйте все! хочу создать тему в которой будем обмениваться разными программными конструкциями при работе с макросами в панелях DOP.

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: Макросы в панелях DOP. программные конструкции

Сообщение bayk »

Ну и сразу мой вопрос - как правильно организовать однократное выполнение кода в макросе?
в моем случае мне нужно при активации бита в контроллере (контроллер слейв) произвести однократную передачу данных в сервопривод.
я как-то пробовал взводить и самосбрасывать бит в панели, но что-то у меня не вышло.

тоесть мне надо, считав бит из контроллера, его сбросить, и параллельно с этим единократно записать значение в серву.
вот что я попробовал:

Код: Выделить всё

If $18.3 == ON     // $18 - это битовая маска регистра контроллера, которая читается в бэкграунд-макро постоянно
  if $40.0 == off  // просто произвольный бит
  ({Link2}1@PLC_M3040) =  0  // это сброс  флага, который  вычитывается панелью как $18.3
  biton $40.0
  ENDIF	
ENDIF

If $40.0 == ON 
     ({LINK2}3@SERVO-050E) = 25    // запись нужного значения в серву
   BITOFF $40.0
ENDIF
у меня есть сомнения в этой конструкции, поскольку из-за обмена данными у меня может возникнуть повторное выполнение условия, если бит в контроллере обнулиться позже, чем выполнится условие, связанное с If $40.0 == ON

очень прошу помощи!!!

П.С. такие выебоны связаны с тем, что я , дебила кусок, купил SV2 у которого только 1 порт RS485, и мне теперь приходится все операции с сервой проводить через... панель.

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Макросы в панелях DOP. программные конструкции

Сообщение tvent »

bayk писал(а):
12 июн 2021, 17:42
мне нужно при активации бита в контроллере (контроллер слейв) произвести однократную передачу данных в сервопривод.
Передайте данные в привод через контроллер.
bayk писал(а):
12 июн 2021, 17:42
мне надо, считав бит из контроллера, его сбросить, и параллельно с этим единократно записать значение в серву
Cycle Macro
IFB {Link1}1@M3040 == OFF THEN GOTO LABEL 1
IF $1 == 1 THEN GOTO LABEL 1
{Link3}1@Servo = 25
BITOFF ({Link1}1@M3040)
$1 = 1
Endif
Endif
Label 1
End
Последний раз редактировалось tvent 14 июн 2021, 08:20, всего редактировалось 2 раза.

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: Макросы в панелях DOP. программные конструкции

Сообщение bayk »

Понял! Спасибо большое!
Ну не могу с контроллера я сразу в серву... Потому что балбес и купил не тот плк.
Стоп, а кто тогда сбросит $1 для повторного использования? Точнее как его корректно сбросить не произведя случайную повторную запись ?

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Макросы в панелях DOP. программные конструкции

Сообщение tvent »

bayk писал(а):
15 июн 2021, 12:09
Стоп, а кто тогда сбросит $1 для повторного использования?
Вставьте END перед Label 1 и $1=0, после.
Возможны варианты.

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: Макросы в панелях DOP. программные конструкции

Сообщение bayk »

Cycle Macro
IFB {Link1}1@M3040 == OFF THEN GOTO LABEL 1
IF $1 == 1 THEN GOTO LABEL 1
{Link3}1@Servo = 25
BITOFF ({Link1}1@M3040)
$1 = 1
Endif
Label 1
$1=0
Endif
End

так???
меня просто мучает вопрос, а если BITOFF ({Link1}1@M3040) команда пройдет медленнее, чем $1 = 1 и произойдет повторная запись? или такого быт не может?

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Макросы в панелях DOP. программные конструкции

Сообщение tvent »

tvent писал(а):
15 июн 2021, 12:59
так???
Можно и так.
bayk писал(а):
18 июн 2021, 16:53
если BITOFF ({Link1}1@M3040) команда пройдет медленнее, чем $1 = 1 и произойдет повторная запись?
Нет. $1 = 1 будет выполняться строго после завершения BITOFF

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: Макросы в панелях DOP. программные конструкции

Сообщение bayk »

Что-то ничего у меня не завелось. не компилируется макрос, хотя проверку синтаксиса проходит.
прикладываю проект, этот кусок находится в background macro
там мне дважды нужно было соорудить однократное выполнение.
Вложения
FlyingSaw_07_2021_one_shoot.zip
(43.09 КБ) 222 скачивания

tvent
Сообщения: 1019
Зарегистрирован: 11 янв 2011, 17:02

Re: Макросы в панелях DOP. программные конструкции

Сообщение tvent »

bayk писал(а):
18 июл 2021, 14:20
Что-то ничего у меня не завелось. не компилируется макрос, хотя проверку синтаксиса проходит.
прикладываю проект, этот кусок находится в background macro
там мне дважды нужно было соорудить однократное выполнение.
В Background macro программа выполняется построчно. Конкретно у вас - 1 команда (строка) за 1 скан.
ИМХО, такое количество кода и в Cycle Macro нормально работать не будет.(( Тем более, что проверить правильность выполнения всего кода будет сложно.

bayk
Сообщения: 887
Зарегистрирован: 30 май 2015, 21:20

Re: Макросы в панелях DOP. программные конструкции

Сообщение bayk »

Ну весь код работал просто на if. Оно закоментровано. В есть него добавлена предложенная вами конструкция.
Предлагаете в ciclle macro это все перенести??
Или тут оставить?? В цикл много кода? Вроде же совсем немного...
Ну или как отработать. Кусок кода по сигналу из контроллера более красиво??

Ответить