FIFOバッファへの書き込み
このFP命令は、sで指定されたデータをd_Startで指定されたFIFOバッファに書き込みます。
入力
FIFOバッファに書き込むデータを格納しているデータエリアまたは定数データ
出力
バッファの先頭データエリア
変数sとd_Startは同じデータ型を使用してください。
FIFOバッファがフル(格納データ数 = n_Words、FP_FIFO_DEFINEで定義されたFIFOバッファのサイズ)のときにこの命令を実行すると、エラーが発生し、書き込みは実行されません。
書き込みポインタがFIFOバッファ(FP_FIFO_DEFINEで定義したn_Words)の終端アドレスを示しているとき、この命令を実行すると書き込みポインタは0になります。
で指定されたバッファのサイズ(n_Words)が、n_Words = 0またはn_Words > 4096のとき。
バッファの格納データ数 = 0のとき。
バッファの格納データ数 > バッファサイズ(n_Words)のとき。
書き込みポインタ > バッファサイズ(n_Words)のとき。
データを書き込んだ後、書き込みポインタが4096 (16#1000)以上になるとき。
で指定されたバッファのサイズ(n_Words)が、n_Words = 0またはn_Words > 4096のとき。
バッファの格納データ数 = 0のとき。
バッファの格納データ数 > バッファサイズ(n_Words)のとき。
書き込みポインタ > バッファサイズ(n_Words)のとき。
データを書き込んだ後、書き込みポインタが4096 (16#1000)以上になるとき。
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。POUヘッダは全プログラム言語で使用できます。
VAR
bDefineBuffer: BOOL:=FALSE;
bWriteToBuffer: BOOL:=FALSE;
iWords: INT:=8;
arrFifo: ARRAY [0..11] OF INT:=[12(0)];
END_VAR
VAR_EXTERNAL
g_arrValuesWORD: ARRAY [0..7] OF WORD:=[16#0000,16#0001,16#7FFF,16#8000,16#FFFF,16#1234,16#89AB,16#ABCD];
END_VAR
VAR
END_VAR
変数bWriteToBufferがTRUEにセットされると、このファンクションが実行されます。
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_F,FP_FIFO_DEFINE!,,13,1,22,5,,?DEN?Dn_Words?AENO?Cd_Start);
B(B_VARIN,,iWords,11,3,13,5,);
B(B_VAROUT,,arrFifo[0],22,3,24,5,);
B(B_CONTACT,,bDefineBuffer,5,2,7,4,);
L(7,3,13,3);
L(1,3,5,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,FP_FIFO_WRITE!,,13,1,22,5,,?DEN?D@'s'?AENO?Cd_Start);
B(B_VARIN,,g_arrValuesWORD[0],11,3,13,5,);
B(B_VAROUT,,arrFifo[0],22,3,24,5,);
B(B_CONTACT,,bWriteToBuffer,5,2,7,4,);
L(7,3,13,3);
L(1,3,5,3);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bWriteToBuffer) then
FP_FIFO_WRITE(s := g_arrValuesWORD[0],
d_Start => arrFifo[0]);
end_if;