Макросы в панелях DOP. программные конструкции
Макросы в панелях DOP. программные конструкции
Здравствуйте все! хочу создать тему в которой будем обмениваться разными программными конструкциями при работе с макросами в панелях DOP.
Re: Макросы в панелях DOP. программные конструкции
Ну и сразу мой вопрос - как правильно организовать однократное выполнение кода в макросе?
в моем случае мне нужно при активации бита в контроллере (контроллер слейв) произвести однократную передачу данных в сервопривод.
я как-то пробовал взводить и самосбрасывать бит в панели, но что-то у меня не вышло.
тоесть мне надо, считав бит из контроллера, его сбросить, и параллельно с этим единократно записать значение в серву.
вот что я попробовал:
у меня есть сомнения в этой конструкции, поскольку из-за обмена данными у меня может возникнуть повторное выполнение условия, если бит в контроллере обнулиться позже, чем выполнится условие, связанное с If $40.0 == ON
очень прошу помощи!!!
П.С. такие выебоны связаны с тем, что я , дебила кусок, купил SV2 у которого только 1 порт RS485, и мне теперь приходится все операции с сервой проводить через... панель.
в моем случае мне нужно при активации бита в контроллере (контроллер слейв) произвести однократную передачу данных в сервопривод.
я как-то пробовал взводить и самосбрасывать бит в панели, но что-то у меня не вышло.
тоесть мне надо, считав бит из контроллера, его сбросить, и параллельно с этим единократно записать значение в серву.
вот что я попробовал:
Код: Выделить всё
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
очень прошу помощи!!!
П.С. такие выебоны связаны с тем, что я , дебила кусок, купил SV2 у которого только 1 порт RS485, и мне теперь приходится все операции с сервой проводить через... панель.
Re: Макросы в панелях DOP. программные конструкции
Передайте данные в привод через контроллер.
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 раза.
Re: Макросы в панелях DOP. программные конструкции
Понял! Спасибо большое!
Ну не могу с контроллера я сразу в серву... Потому что балбес и купил не тот плк.
Стоп, а кто тогда сбросит $1 для повторного использования? Точнее как его корректно сбросить не произведя случайную повторную запись ?
Ну не могу с контроллера я сразу в серву... Потому что балбес и купил не тот плк.
Стоп, а кто тогда сбросит $1 для повторного использования? Точнее как его корректно сбросить не произведя случайную повторную запись ?
Re: Макросы в панелях DOP. программные конструкции
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 и произойдет повторная запись? или такого быт не может?
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 и произойдет повторная запись? или такого быт не может?
Re: Макросы в панелях DOP. программные конструкции
Что-то ничего у меня не завелось. не компилируется макрос, хотя проверку синтаксиса проходит.
прикладываю проект, этот кусок находится в background macro
там мне дважды нужно было соорудить однократное выполнение.
прикладываю проект, этот кусок находится в background macro
там мне дважды нужно было соорудить однократное выполнение.
- Вложения
-
- FlyingSaw_07_2021_one_shoot.zip
- (43.09 КБ) 222 скачивания
Re: Макросы в панелях DOP. программные конструкции
В Background macro программа выполняется построчно. Конкретно у вас - 1 команда (строка) за 1 скан.
ИМХО, такое количество кода и в Cycle Macro нормально работать не будет.(( Тем более, что проверить правильность выполнения всего кода будет сложно.
Re: Макросы в панелях DOP. программные конструкции
Ну весь код работал просто на if. Оно закоментровано. В есть него добавлена предложенная вами конструкция.
Предлагаете в ciclle macro это все перенести??
Или тут оставить?? В цикл много кода? Вроде же совсем немного...
Ну или как отработать. Кусок кода по сигналу из контроллера более красиво??
Предлагаете в ciclle macro это все перенести??
Или тут оставить?? В цикл много кода? Вроде же совсем немного...
Ну или как отработать. Кусок кода по сигналу из контроллера более красиво??