多核操作器是 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