多核操作器是 IEC 61131-3 标准的延伸。
该运算符可用于执行信号,例如,保证对不同任务写入的变量的独占访问。
TEST_AND_SET 的输入是一个类型为DWORD 的变量。必须可以对该变量进行写访问。变量被设置为1 ,结果返回前一个值。
该操作是原子操作,即不会被其他任务打断。这也适用于多核平台。
例如,程序中的调用是dwOldValue := TEST_AND_SET(dw); ,其中变量dwOldValue 和dw 的数据类型必须是DWORD 。
示例
下面的示例展示了一种典型的用法。应实现对STRING 类型变量的独占访问,该变量通过pstrOutput 指针寻址。对字符串的访问不是原子式的。如果多个任务同时写入同一个字符串,那么内容可能会不一致。通过TEST_AND_SET 函数,现在可以在不同任务中写入同一个STRING 变量。
FUNCTION ExclusiveStringWrite : BOOL VAR_INPUT strToWrite : STRING; pstrOutput : POINTER TO STRING; END_VAR VAR_STAT dwSynch : DWORD; END_VAR VAR dwOldValue: DWORD; END_VAR dwOldValue := TEST_AND_SET(dwSynch); // Write the 1 and read the old value at the same time IF dwOldValue = 0 THEN // 0 means: no other task is currently writing pstrOutput^ := strToWrite; // Now you can write safely on the string dwSynch := 0; // The DWORD must be reset ExclusiveStringWrite := TRUE; // Writing was successful ELSE ExclusiveStringWrite := FALSE; // Writing was not successful