MP STUDIO 2 · ファンクション · V1.4.0以降 ====== MP STUDIO 2 · ビット制御ファンクション ====== ビット制御ファンクションは、ビットを反転したり、1つずつシフトしたり、まとめてOFFまたはONにしたりする''FF''・''BSFT''・''BRST''・''BSETN''と、オン時間とオフ時間を別々に決めて点滅させるタイマー''TFLK''の5つのファンクションです(V1.4.0以降)。押しボタン1つで出力をON・OFFする回路、コンベヤー上の製品の位置と不良の追跡、警告灯の点滅のように、複数のラングが必要だった回路をファンクション1つで作成できます。 [[#例|例を見る]] [[#ファンクションパネルと挿入方法|挿入方法]] {{ :ja-jp_products:mp_studio:bf-hero.png?1600 |例のプログラムをシミュレーションし、ファンクションパネルのビット論理分類とFF・BSFT・TFLKブロックの値が一緒に表示されたMP STUDIO 2のウィンドウ全体 }} ^ ファンクション ^ 分類 ^ 実行 ^ 対応バージョン ^ | 5個 | ビット論理・タイマー | ONになるとき・ONの間・周期 | V1.4.0以降 | * **押すたびに反転**\\ ''FF''は条件がONになった瞬間にだけビットを反転するため、押しボタンの接点に立ち上がりエッジを入れずにそのままつなげます。 * **1つずつシフト**\\ ''BSFT''は条件がONになるたびにN個のビットを1つずつシフトし、空いた位置に新しい値を入れます。 * **範囲をまとめて**\\ ''BRST''・''BSETN''は、開始ビットからN個をすべてOFFまたはONにします。 * **オン時間・オフ時間を別々に**\\ ''TFLK''は、オン時間の間ON、オフ時間の間OFFにする動作を繰り返します。 **このページの内容** * [[#ファンクションパネルと挿入方法|ファンクションパネルと挿入方法]] * [[#共通の動作|共通の動作]] * [[#ff_フリップフロップ|FF フリップフロップ]] * [[#bsft_ビットシフトレジスタ|BSFT ビットシフトレジスタ]] * [[#brst・bsetn_ビット範囲リセット・セット|BRST・BSETN ビット範囲リセット・セット]] * [[#tflk_フリッカータイマー|TFLK フリッカータイマー]] * [[#コンパイルされない入力|コンパイルされない入力]] * [[#範囲外と_ixerr|範囲外と@IXERR]] * [[#モニタリングとシミュレーション|モニタリングとシミュレーション]] * [[#例|例]] * [[#確認事項|確認事項]] ~~NOTOC~~ ===== ファンクションパネルと挿入方法 ===== ''FF''・''BSFT''・''BRST''・''BSETN''はファンクションパネルの**ビット論理**分類に、''TFLK''は**タイマー**分類にあります。挿入方法はほかのファンクションと同じです。ファンクションパネルで行をダブルクリックするか、[[:ja-jp_products:mp_studio:functions#ファンクションの挿入ウィンドウ|ファンクションの挿入ウィンドウ]](''Ctrl+E'')に''FF P32''のように1行で入力してください。ファンクションパネルの検索欄に''ビット''・''フリップ''・''シフト''・''フリッカー''と入力しても見つかります。 ^ ファンクション ^ ファンクションパネルの名前 ^ ブロックのセル(左から) ^ | ''FF'' | FF: フリップフロップ(ビット反転) | OUT | | ''BSFT'' | BSFT: ビットシフトレジスタ | BIT・N・IN・DIR | | ''BRST'' | BRST: ビット範囲リセット | BIT・N | | ''BSETN'' | BSETN: ビット範囲セット | BIT・N | | ''TFLK'' | TFLK: フリッカータイマー(ON/OFF) | TIMER・ON・OFF | {{ :ja-jp_products:mp_studio:bf-palette-marked.svg?300 |図1. ビット論理分類とタイマー分類を展開したファンクションパネル }} * **① ビット論理分類:** 右側の数字は分類内のファンクション数(4)です。 * **② FF・BSFT・BRST・BSETN:** ダブルクリックすると、カーソルのセルにファンクションが挿入されます。 * **③ TFLK:** タイマー分類の最後の行です。 ファンクションの挿入ウィンドウでは、''TFLK''の引数の順序が''[TFLK] [IN] [ON] [OFF]''と表示され、最初の引数(タイマーアドレス)はブロックのTIMERセルに入ります。 {{ :ja-jp_products:mp_studio:bf-insert.png?470 |図2. TFLK T5 20 180を入力し、引数の順序と説明が表示されたファンクションの挿入ウィンドウ }} ===== 共通の動作 ===== 5つのファンクションは、いずれもブロックの左側の条件で動作します。動作するタイミングはファンクションごとに異なります。 ^ ファンクション ^ 動作するタイミング ^ | ''FF''・''BSFT'' | 条件がOFFからONに変わったスキャンで1回(立ち上がりエッジと同じタイミング) | | ''BRST''・''BSETN'' | 条件がONのスキャンごと | | ''TFLK'' | 条件がONの間、オン時間とオフ時間を繰り返す | * ''FF''・''BSFT''・''BRST''・''BSETN''は、ブロックの左側の条件をそのままブロックの右側へ伝えるため、後ろにコイルを続けて配置できます。''TFLK''は、ブロックの右側が点滅の出力です。 * ''FF''・''BSFT''は、直前の条件をブロックごとに個別に記憶します。 * 電源を入れた後やダウンロードした後の最初のスキャンで条件がすでにONの場合は、OFFからONに変わったものとみなします。このとき、''FF''は1回反転し、''BSFT''は1つシフトします。 * ''MCS''区間の中に置くと、区間がOFFの間は条件がOFFのときと同じように動作し、ブロックの右側もOFFになります(ほかのファンクションブロックは''MCS''に関係なく実行されます)。区間が再びONになったときに条件がONであれば、OFFからONに変わったものとみなします。 ===== FF フリップフロップ ===== ''FF''は、条件がOFFからONに変わったスキャンでだけOUTのビットを反転します(0なら1、1なら0)。条件をONのまま保っている間は、再び反転しません。たとえば''P0''接点の後ろの''FF P32''は、''P0''を押すたびに''P32''をON・OFFします。 {{ :ja-jp_products:mp_studio:bf-ff-sim.png?1022 |図3. シミュレーションでP0をONにし、FFがP32をONにした様子 }} * OUTには、''P''・''M''のビット、''D10.5''のようなDワード内のビット、''#名前''のユーザービットを使えます。 * 同じビットを2つの''FF''で反転できます。''P0''と''P1''の後ろにそれぞれ''FF P32''を置くと、どちらのボタンを押しても''P32''が切り替わります。2つの条件が同じスキャンで同時にONになると、2回反転して元のままになります。 > **同じビットのコイルがFFの結果を上書きする** > ''FF''のOUTに書いたビットを通常のコイルにも使うと、コイルがスキャンごとにそのビットを書き直すため、''FF''が反転した値が残りません。OUTに書いたビットは、SETコイルと同じく二重コイルのチェックの対象外なので、チェックでも表示されません。''FF''のOUTに書いたビットは、通常のコイルと一緒に使わないでください。 ===== BSFT ビットシフトレジスタ ===== ''BSFT''は、条件がOFFからONに変わるたびに、BITからN個のビットを1つずつシフトし、空いた位置にINの値を入れます。シフトする方向はDIRで決めます。コンベヤー上の製品の不良追跡と排出、順次点灯、工程の履歴のように、位置に合わせて値を移す回路に使います。 ^ DIR ^ シフトする方向 ^ INが入る位置 ^ 押し出されて捨てられる値 ^ | 0 | 番号が大きくなる方向 | ''BIT'' | ''BIT+N-1''の値 | | 1 | 番号が小さくなる方向 | ''BIT+N-1'' | ''BIT''の値 | たとえば''BSFT M200 8 P2 0''は、条件がONに変わるたびに''M200''~''M206''の値を1つ後ろ(''M201''~''M207'')へ移し、''M200''にそのときの''P2''の値を入れます。''M207''にあった値は捨てられます。 * **BIT:** 開始ビットです。''P''・''M''のビットと、''D10.0''のようなDワード内のビットを使えます。Dワード内のビットは、''D10.15''の次が''D11.0''に続きます。 * **N:** ビットの個数です。1以上の定数、または''D0''・''BD0''のようなバイト・ワードのアドレスを書きます。 * **IN:** 入れる値です。0・1、または''M5''・''P1''のようなビットを書きます。 * **DIR:** シフトする方向です。0・1、またはビットを書きます。 IN・DIRがビットの場合は、条件がONに変わったそのスキャンの値を読みます。 {{ :ja-jp_products:mp_studio:bf-bsft-sim-marked.svg?857 |図4. シミュレーションでBSFTが不良検出の結果をM200~M207へシフトした様子 }} * **① BSFTブロック:** BIT・N・IN・DIRのセルです。 * **② データテーブル:** ''M200''~''M207''にシフトされてきた値が表示されます。 * **③ 排出のラング:** ''M207''がONになり、''P33''がONになりました。 ===== BRST・BSETN ビット範囲リセット・セット ===== ''BRST''はBITからN個のビットをすべて0に、''BSETN''はすべて1に書き込みます。条件がONのスキャンごとに書き込み、同じ値を繰り返し書き込んでも問題ありません。BITとNに使えるものは''BSFT''と同じです。 ^ 例 ^ 動作 ^ | ''BRST M200 8'' | ''M200''~''M207''をすべてOFFにします。 | | ''BSETN D20.0 8'' | ''D20''の0~7番のビットをすべてONにします。 | | ''BRST M0 D0'' | ''M0''から、''D0''の値の個数だけビットをOFFにします。 | ===== TFLK フリッカータイマー ===== ''TFLK''は、条件がONになるとONから始めて、オン時間の間ON、オフ時間の間OFFにする動作を繰り返します。出力はブロックの右側へ伝わる信号です。TIMERセルのタイマーの接点(例: ''T5'')も同じ値でON・OFFするため、ほかのラングでも同じ点滅を使えます。 * TIMERセルのタイマーの現在値は、1周期の中で経過した時間です。オン時間とオフ時間を足した値に達すると、0から数え直します。 * 条件がOFFになると、出力はすぐにOFFになり、現在値が0になります。再びONになると、ONから始めます。 * オン時間が0のときは出力が常にOFFで、オフ時間が0のときは条件がONの間、常にONです。 * ONにするスキャンの時間も数えるため、オン時間が1スキャンより短いと、ONになってすぐにOFFになることがあります。 * ONとOFFが同じ固定周期の点滅は、[[:ja-jp_products:mp_studio:memory_symbols#システムビットとユーザー変数|システムビット]]''@Fn''でも作れます。''TFLK''は、オン時間とオフ時間を別々に決めるときに使います。 {{ :ja-jp_products:mp_studio:bf-tflk-sim-marked.svg?1022 |図5. シミュレーションでオフ時間中のTFLK }} * **① ''T5''の現在値:** 1周期の中で経過した時間です。 * **② ON・OFF:** オン時間(''20'' = 0.2秒)とオフ時間(''180'' = 1.8秒)です。 * **③ ''P34'':** ''TFLK''の出力です。 * **④ ''T5''の接点:** ''TFLK''の出力と同じ値で''P35''をON・OFFします。 ONとOFFは、''TON''の設定値(SET VALUE)と同じ単位です。数値だけを書くと10 ms単位になり(''20''は0.2秒)、''200MS''・''2S''・''1M''・''1H''のように単位を付けるとその時間になります。''5MS''のように10 msより短い値は10倍の50 msとして入り、セルにオレンジ色の警告が表示されます。''BD0''・''D0''・''DD0''のようなバイト・ワード・ダブルワードのアドレスも使えます。 [[:ja-jp_products:mp_studio:menus_settings#タイマー基準|タイマー基準]]を1 msに変えたプロジェクトでは、数値は1 ms単位です。タイマー基準を変えるときに表示される**タイマー基準の変更**ウィンドウでは、数値で書いた''TFLK''のON・OFFも設定値として一緒に数えられます。**値も直す(同じ時間を保つ)**を選ぶと、変えた基準に合わせて一緒に直されます。 TIMERセルには、''TON''と同じく''BT5''(バイト)・''T5''(ワード)・''DT5''(ダブルワード)を使えます。タイマーのサイズによって、1周期(オン時間+オフ時間)の最大が決まります。タイマー番号はほかのタイマーファンクションと重ならないようにする必要があり、重なるとコンパイル時に「タイマーメモリは重複して使用できません。」と表示されます。 ^ TIMERセル ^ 1周期の最大(タイマー基準10 ms) ^ 1周期の最大(タイマー基準1 ms) ^ | ''BT'' | 2.55秒 | 0.255秒 | | ''T'' | 655.35秒 | 65.535秒 | | ''DT'' | 約497日 | 約49.7日 | ===== コンパイルされない入力 ===== 次の入力は、セルが赤く表示され、コンパイルされません。理由は、セルを選択するとインスペクターに、セルにマウスポインターを合わせるとツールチップに表示されます。 ^ セル ^ コンパイルされない入力 ^ | ''FF''のOUT | ''@BEGIN''のように機器が毎スキャンセットするシステムビット、''T0''・''D10''のようなワードアドレス、''D0>3''のような比較式 | | ''BSFT''・''BRST''・''BSETN''のBIT | ''#名前''のユーザービット、''@''のシステムビット、''T''・''C''・''D''のワードアドレス、比較式 | | ''BSFT''・''BRST''・''BSETN''のN | 0以下の定数、領域の終わりを超える個数(例: M領域が''M2047''までのときの''BSETN M2040 9'')、''DD0''のようなダブルワードアドレス | | ''BSFT''のIN・DIR | 0・1以外の定数(''2''・''-1''など)、''BD0''・''D0''のようなバイト・ワードのアドレス | | ''TFLK''のON・OFF | 負の値、足した値がタイマーに収まらない定数(例: TIMERが''T1''のときの''40000''と''40000'') | | ''TFLK''のTIMER | ONに書いた値より狭いタイマー(例: ONが''DD0''または''70000''のときの''T1'') | 5つのファンクションのセルには、[[:ja-jp_products:mp_studio:indexed_address|インデックスアドレス]](''D100[D0]'')を使えません。 たとえば''TFLK T6 40000 40000''を入力すると、OFFのセルが赤く表示され、「TFLK のオン時間とオフ時間の合計(80000)がタイマー T6 に入る最大値 65535 を超えるため、コンパイルされません。時間を短くするか、より広いタイマー(DT)を使ってください。」と表示されます。 {{ :ja-jp_products:mp_studio:bf-red-reason.png?1000 |図6. ON・OFFの合計がタイマーT6に収まらず赤く表示されたOFFのセルと、インスペクターに表示された理由 }} ===== 範囲外と@IXERR ===== Nに''D10''のようなアドレスを書くと、個数は実行中に決まります。領域の大きさは、''M''・''D''では[[:ja-jp_products:mp_studio:memory_symbols#データメモリ|データメモリ]]で決めたサイズ、''P''では実際の入出力端子の数ではなく、機種によって''P55''または''P127''までのP領域全体です。実行時にNが0以下の場合や、BITからN個のビットがその領域の終わりを超える場合、機器は次のように動作します。 * そのブロックだけをスキップします。どのビットも書き込まないため、ほかのメモリは上書きしません。ブロックの右側には条件をそのまま伝えます(インデックスアドレスの範囲外とは異なり、右側への信号はOFFになりません)。 * システムビット''@IXERR''がONになります。 * 条件がOFFの場合(''BSFT''は条件がONに変わったスキャン以外)は範囲をチェックしないため、''@IXERR''はONになりません。 ''TFLK''のON・OFFにアドレスを書いた場合は、実行時に1周期が上の表の最大を超えると''@IXERR''がONになり、出力がOFFのまま現在値が0にとどまります。 ''@IXERR''は、[[:ja-jp_products:mp_studio:indexed_address#範囲外と_ixerr|インデックスアドレス]]が範囲を外れたときにONになるのと同じビットで、自動ではOFFになりません。OFFにする方法もインデックスアドレスと同じです。モニタリング・シミュレーション中の通知(「インデックスが範囲外になりました — …」)は、インデックスアドレスを使っていないプログラムでは''@IXERR''がラダー画面かデータテーブルにあるときにだけ表示されます。ビット制御ファンクションの範囲外は、ラダーに''@IXERR''の接点を置いて確認してください。 {{ :ja-jp_products:mp_studio:bf-ixerr-notice.png?590 |図7. データテーブルに@IXERRがあるプログラムで表示された通知 }} {{ :ja-jp_products:mp_studio:bf-ixerr-sim-marked.svg?793 |図8. シミュレーションでBRSTの個数が範囲を外れ、@IXERRがONになった様子 }} * **① Nのセル''D10'':** 値が0のため、''BRST M300 D10''をスキップしました。 * **② ''@IXERR''のラング:** ''@IXERR''がONになり、後ろのコイル''M1''がONになりました。 ===== モニタリングとシミュレーション ===== 5つのファンクションは、シミュレーションでも機器と同じように動作します。 * ''FF''・''BSFT''・''BRST''・''BSETN''は、条件がONのときにブロックが通電色で表示されます。アドレスを書いたセルにはそのアドレスの現在値が表示され、定数のセルには表示されません。 * BITセルの値は、開始ビット1つの値です。範囲全体は、[[:ja-jp_products:mp_studio:monitoring#データテーブル|データテーブル]]にアドレスを登録して確認してください。 * ''TFLK''のTIMERセルには、タイマーの現在値が表示されます。オン時間中はブロックと出力が通電色で表示され、オフ時間中は''TON''が時間を数えている間と同じく、出力が通電色になりません。 * 点滅の一瞬を確認するには、[[:ja-jp_products:mp_studio:simulation#シミュレーションバー|シミュレーションバー]]の**一時停止**と**1 スキャン実行**を使ってください。 * **実行 → 使用データ一覧**では、Nが定数の場合はBITからN個のビットが、Nがアドレスの場合は開始ビットだけが、使用中のセルとして塗りつぶされます(''M''・''D''領域)。 ===== 例 ===== 3つの例は、''MPA-8A8R(T)''の新規プロジェクト(データメモリは既定値)に順に作成し、シミュレーションで確認できます。 ==== 例1. 押しボタン1つでランプをON・OFFする ==== ''P0''を押すたびに、''P32''のランプをON・OFFする例です。 - **設定 → シンボル**で、''P0''にLAMP_BTN、''P32''にLAMPを登録します。 - 下のラングを作成します。 ^ ラング ^ 入力 ^ ファンクション ^ 動作 ^ | 0 | ''P0'' | ''FF P32'' | ''P0''を押すたびに''P32''を反転します。 | **実行 → シミュレーション**を開始し、シミュレーションバーの''P0''チップでON・OFFを繰り返します。''P0''をONにするたびに''P32''がONとOFFを交互に繰り返し(図3)、''P0''をONにしている間は変わりません。 ==== 例2. コンベヤーの不良品を追跡する ==== コンベヤーが1区画動くたびに不良検出の結果を''M200''~''M207''へシフトし、不良品が排出位置である8番目(''M207'')に達すると、''P33''で排出する例です。 - **設定 → シンボル**で、''P1''にMOVE_PULSE、''P2''にNG_SENSOR、''P3''にCLEAR_BTN、''M200''にTRACK、''P33''にEJECTを登録します。 - 例1のラングの後ろに、下のラングを作成します。 ^ ラング ^ 入力 ^ ファンクション・コイル ^ 動作 ^ | 1 | ''P1'' | ''BSFT M200 8 P2 0'' | 1区画動くたびに''P2''の値を''M200''に入れ、''M200''~''M207''を1つずつシフトします。 | | 2 | ''M207'' | コイル''P33'' | 排出位置に達した不良品を排出します。 | | 3 | ''P3'' | ''BRST M200 8'' | 追跡の記録をすべて消去します。 | シミュレーション中にデータテーブルに''M200''~''M207''を登録し、''P2''をONにしたまま''P1''を1回ON・OFFします。続けて''P2''をOFFにし、''P1''をさらに7回ON・OFFすると、最初の不良が''M207''に達して''P33''がONになります。図4は、1番目と3番目が不良品のときの様子です。''P3''をONにすると''M200''~''M207''がすべてOFFになり、ラング2はラング3より前にあるため、''P33''は次のスキャンでOFFになります。 ==== 例3. 警告灯を点滅させる ==== 警報入力''P4''がONの間、警告灯''P34''を0.2秒ON、1.8秒OFFにする動作を繰り返す例です(タイマー基準10 ms)。 - **設定 → シンボル**で、''P4''にALARM、''P34''にBEACONを登録します。 - 例2のラングの後ろに、下のラングを作成します。 ^ ラング ^ 入力 ^ ファンクション・コイル ^ 動作 ^ | 4 | ''P4'' | ''TFLK T5 20 180''の後ろにコイル''P34'' | 0.2秒ON、1.8秒OFFにします。''TFLK T5 200MS 1800MS''と書いても同じです。 | | 5 | ''T5'' | コイル''P35'' | 同じ点滅を''P35''にも出力します。 | シミュレーション中に''P4''をONにすると、''P34''と''P35''が2秒ごとに0.2秒ずつONになり、''T5''の現在値は0から199まで増えた後、0に戻ります(図5)。''P4''をOFFにすると、すぐにOFFになり、''T5''は0になります。 ===== 確認事項 ===== * ''FF''・''BSFT''が直前の条件を記憶するビットは自動で用意され、シンボルテーブル・データテーブル・使用データ一覧には表示されません。 > **V1.3.0以前では開けない** > ビット制御ファンクションを1つでも使った''.mpx''プロジェクトは、V1.3.0以前のアプリでは開けません。 ===== 関連文書 ===== * [[:ja-jp_products:mp_studio:ladder_editing|Phase 3 · ラダー編集]] * [[:ja-jp_products:mp_studio:functions|Phase 4 · ファンクション]] * [[:ja-jp_products:mp_studio:memory_symbols|Phase 5 · メモリとシンボル]] * [[:ja-jp_products:mp_studio:monitoring|Phase 7 · モニタリングとデータテーブル]] * [[:ja-jp_products:mp_studio:simulation|Phase 8 · シミュレーション]] * [[:ja-jp_products:mp_studio:indexed_address|インデックスアドレス(ポインタ)]] [[:ja-jp_products:mp_studio|← MP STUDIO 2 ユーザーマニュアルに戻る]]