Про это нигде не написано пока, поэтому показываю как можно делать синхронизацию с использованием ФБ TLocker.
function_block TLocker
var_input
sleepus: ulint := 50;
end_var
var
_sleepus: ulint := 50;
_cnt: caa.count;
_mutex: caa.bolt;
end_var
_sleepus := sleepus;
--------------------
method public Lock
while _mutex.Reserve( _cnt ) do SchedWaitSleep( _sleepus ); end_while;
--------------------
method public UnLock
_mutex.Free();
----------------------
Для использования нужно обернуть доступ к глобальным переменным методами Lock и Unlock:
var
_locker: TLocker;
end_var
_locker.Lock();
// Модифицируем данные.
// ...
_locker.Unlock();