変数のビットアクセス
重要
プロセッサがメモリ上で直接ビットアクセスを実行できる場合にのみ、2つのタスクによる同時ビットアクセスを実装します。すべてのx86およびx64システムには、メモリ内のビットアクセス用のコマンドがあります。 ARMやPPCなどのシステムは、メモリ内のビットに直接アクセスできません。
プロセッサがメモリ内で直接ビットアクセスを実行できない場合でも、2つのタスクが同時にビットアクセスを実行する場合は、次の手順に従います。セマフォを使用する(SysSemEnter)または競合するビットアクセスを防ぐための同様の手法。ただし、タスク内でビットアクセスを実行することをお勧めします。
インデックスアクセスを使用すると、個々のビットを整数変数でアドレス指定できます。構造体変数または関数ブロックインスタンスを使用して、個々のビットをシンボリックにアドレス指定できます。
ビット整数変数へのインデックスアクセス
整数変数の個々のビットをアドレス指定できます。これを行うには、変数にドットとアドレス指定されたビットのインデックスを追加します。ビットインデックスは、任意の定数で指定できます。インデックス付けは0ベースです。
構文
<integer variable name> . <index> <integer data typ> = BYTE | WORD | DWORD | LWORD | SINT | USINT | INT | UINT | DINT | UDINT | LINT | ULINT
プログラムでは、変数の3番目のビット wA 変数の値に設定されます xB。定数 c_usiENABLE 変数の3番目のビットにアクセスするためのインデックスとして機能します iX。
インデックスアクセス
PROGRAM PLC_PRG
VAR
        wA : WORD := 16#FFFF;
        xB : BOOL := 0;
END_VAR
// Index access in an integer variable
wA.2 := xB;結果: wA = 2#1111_1111_1111_1011 = 16#FFFB
インデックスとしての定数
// GVL declaration
VAR_GLOBAL CONSTANT
        gc_usiENABLE : USINT := 2;
END_VAR
PROGRAM PLC_PRG
VAR
        iX : INT := 0;
END_VAR
// Constant as index
iX.gc_usiENABLE :=  TRUE;       // Third bit in iX is set TRUE結果: iX = 4
構造体変数のシンボリックビットアクセス
とともに BIT データ型の場合、個々のビットを1つの構造に組み合わせて、それらに個別にアクセスできます。次に、ビットはコンポーネント名でアドレス指定されます。
構造体の型宣言
TYPE S_CONTROLLER :
STRUCT
        bitOperationEnabled : BIT;
        bitSwitchOnActive : BIT;
        bitEnableOperation : BIT;
        bitError : BIT;
        bitVoltageEnabled : BIT;
        bitQuickStop : BIT;
        bitSwitchOnLocked : BIT;
        bitWarning : BIT;
END_STRUCT
END_TYPE宣言とビットへの書き込みアクセス
PROGRAM PLC_PRG
VAR
        ControlDriveA : S_CONTROLLER;
END_VAR
// Symbolic bit access to bitEnableOperation
ControlDriveA.bitEnableOperation := TRUE;機能ブロックインスタンスでのシンボリックビットアクセス
関数ブロックでは、個々のビットの変数を宣言できます。
FUNCTION_BLOCK FB_Controller
VAR_INPUT
        bitSwitchOnActive : BIT;
        bitEnableOperation : BIT;
        bitVoltageEnabled : BIT;
        bitQuickStop : BIT;
        bitSwitchOnLocked : BIT;
END_VAR
VAR_OUTPUT
        bitOperationEnabled : BIT;
        bitError : BIT;
        bitWarning : BIT;
END_VAR
VAR
END_VAR
;
PROGRAM PLC_PRG
VAR
        fbController : FB_Controller;
END_VAR
// Symbolic bit access to bitSwitchOnActive
fbController(bitSwitchOnActive := TRUE);