Сообщение от
RomeoVar
Вот пример. Каналы с 69 по 74.
Я пытался по всякому ловить xDone. И по триггеру и по состоянию. Никак не получилось. Но через 30 мс. переменнная обновляется
Код:
IF xRdPosReg THEN
xSuccess := FALSE;
wIntPosPOld := GVL.stServo[1].stRdServo.wP700_IntPosP;
GVL.stServo[1].stWrServo.wP700_IntPosP := 4610;
GVL.stServo[1].stWrServo.wP765_IntPosDZT := 1000;
fbModbusRol(slave := ROL_DORNA, xExecute := xRdPosReg (*!*), iChannelIndex := iCurrentCh);
ltTimeOfStart := TargetVars.stRtc.ltSystemTick;
xRdPosReg := FALSE;
xCount := TRUE;
iCntr := iCntr + 1;
END_IF
См. выделенную строку.
Вы, видимо, считаете, что fbModbusRol выполняется синхронно за один цикл контроллера - поэтому сразу после вызова прерываете его работу.
Но это не так - блок работает асинхронно.
Поэтому нужно дождаться сигнала на выходе xDone и только потом прекращать его работу.
См. демонстрацию:
https://dropmefiles.com/G7YW7