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つで作成できます。
| ファンクション | 分類 | 実行 | 対応バージョン |
|---|---|---|---|
| 5個 | ビット論理・タイマー | ONになるとき・ONの間・周期 | V1.4.0以降 |
- 押すたびに反転
FFは条件がONになった瞬間にだけビットを反転するため、押しボタンの接点に立ち上がりエッジを入れずにそのままつなげます。 - 1つずつシフト
BSFTは条件がONになるたびにN個のビットを1つずつシフトし、空いた位置に新しい値を入れます。 - 範囲をまとめて
BRST・BSETNは、開始ビットからN個をすべてOFFまたはONにします。 - オン時間・オフ時間を別々に
TFLKは、オン時間の間ON、オフ時間の間OFFにする動作を繰り返します。
このページの内容
ファンクションパネルと挿入方法
FF・BSFT・BRST・BSETNはファンクションパネルのビット論理分類に、TFLKはタイマー分類にあります。挿入方法はほかのファンクションと同じです。ファンクションパネルで行をダブルクリックするか、ファンクションの挿入ウィンドウ(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 |
- ① ビット論理分類: 右側の数字は分類内のファンクション数(4)です。
- ② FF・BSFT・BRST・BSETN: ダブルクリックすると、カーソルのセルにファンクションが挿入されます。
- ③ TFLK: タイマー分類の最後の行です。
ファンクションの挿入ウィンドウでは、TFLKの引数の順序が[TFLK] [IN] [ON] [OFF]と表示され、最初の引数(タイマーアドレス)はブロックのTIMERセルに入ります。
共通の動作
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します。
- 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に変わったそのスキャンの値を読みます。
- ① 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になることがあります。
- ①
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のようなバイト・ワード・ダブルワードのアドレスも使えます。
タイマー基準を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つのファンクションのセルには、インデックスアドレス(D100[D0])を使えません。
たとえばTFLK T6 40000 40000を入力すると、OFFのセルが赤く表示され、「TFLK のオン時間とオフ時間の合計(80000)がタイマー T6 に入る最大値 65535 を超えるため、コンパイルされません。時間を短くするか、より広いタイマー(DT)を使ってください。」と表示されます。
範囲外と@IXERR
NにD10のようなアドレスを書くと、個数は実行中に決まります。領域の大きさは、M・Dではデータメモリで決めたサイズ、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は、インデックスアドレスが範囲を外れたときにONになるのと同じビットで、自動ではOFFになりません。OFFにする方法もインデックスアドレスと同じです。モニタリング・シミュレーション中の通知(「インデックスが範囲外になりました — …」)は、インデックスアドレスを使っていないプログラムでは@IXERRがラダー画面かデータテーブルにあるときにだけ表示されます。ビット制御ファンクションの範囲外は、ラダーに@IXERRの接点を置いて確認してください。
- ① Nのセル
D10: 値が0のため、BRST M300 D10をスキップしました。 - ②
@IXERRのラング:@IXERRがONになり、後ろのコイルM1がONになりました。
モニタリングとシミュレーション
5つのファンクションは、シミュレーションでも機器と同じように動作します。
FF・BSFT・BRST・BSETNは、条件がONのときにブロックが通電色で表示されます。アドレスを書いたセルにはそのアドレスの現在値が表示され、定数のセルには表示されません。- BITセルの値は、開始ビット1つの値です。範囲全体は、データテーブルにアドレスを登録して確認してください。
TFLKのTIMERセルには、タイマーの現在値が表示されます。オン時間中はブロックと出力が通電色で表示され、オフ時間中はTONが時間を数えている間と同じく、出力が通電色になりません。- 点滅の一瞬を確認するには、シミュレーションバーの一時停止と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以前のアプリでは開けません。





