■Yes/Noポップアップ画面  (KV File: YesNoPOPx_xxx | VT File:YesNoPOPx_xxx

⇒ TO Home Page
内容

  タッチパネルから 手動操作をする際、装置動作の入/切を再度オペレータに確認したい場合があります。そんな時良く使われるのがポップアップ画面に「YES」/「NO」ス イッチを配置して選択してもらう方法ではないでしょうか。そんなコードを実装する機会がありましたので、サンプルとして公開してみました。
動作の種類としては、1つのスイッチで反転を繰り返す「トグル」動作。2つのスイッチでON-OFFを切り替える「ラッチ」動作。押している間だけONす る「モーメンタリ」動作を作ってみました。(モーメンタリには確認手順は存在しませんが)
また、ポップアップ画面を表示する条件(ON 操作時/OFF操作時/ON-OFF操作時/ポップアップ不要 など)もビットパターンで設定できる様にしています。

 今回のコードを作った経緯ですが…引き継いだソフトでポップアップをする所があったのですが、何十か所と個別に同じコードが散りばめられていました。こ の非合理的な記述を改善するため作ってみました。タッチパネルのサンプルも作りましたので、一緒にテストしてください。
巻末にVTのスクリーンサンプル写真を掲載しています。

このサンプルは他と独立したプロジェクト にしました。また、タッチパネルは「VT3-V10」ですが、機種変更は容易かと思います。
下の「●コードをダウンロード」からダウンロードしてください。タッチパネルデータも一緒に圧縮しています。

●PDFを表示  ●コードをダウンロード
◆ 設定ルーチン(SBN 0) 【 YesNoPOPup 】

・このサンプルではスイッチにどの様な機能を持たせるかを、初期化ルーチンで宣言しています。
・以下に示すローカル変数は、各スイッチの動作マスクです。
・今回はスイッチをR0200〜R0315までの32Bitsにしています。02チャンネルと03チャンネルは同パタンにしています。

00119
・上の119行目では、ビットパタン「$C000C000」を変数[MOMENT]に設定しています。
・これはモーメンタリスイッチを[R0214]/[R0215]/[R0314]/[R0315]に割当てる事になります。


man00006
・同様に他の変数にもビットパタンを割当てます。
・[LATCH_NON]はラッチ動作で、ポップアップさせないスイッチのマスクパタンです。
・同様に[LATCH_POP]でラッチ動作、ポップアップありのスイッチパタンを割当てています。
・[LATCH_NON]と[LATCH_POP]に割り当てられたスイッチは[LATCH]にも割り当てます。


00126
・次にトグル動作をするスイッチを割当てます。[T_FF]がトグル動作のマスクパタンです。
・[TF_POP]は現在の状態がTrueまたはFalseの場合、ポップアップさせるマスクパタンです。
・[T_POP]は現在の状態がTrueのときだけ、[F_POP]はFalseの時だけにポップアップ画面が表示されます。
・[NON]はポップアップしないマスクパタンです。

・R0200〜とR0300〜は同パタンにしていますので、このサンプルの設定は以下の通りになります。
・モーメンタリSW:[Rxx14]/[Rxx15]
・ラッチSW(POP無):[Rxx06]/[Rxx12]/[Rxx13]
・ラッチSW(POP有):[Rxx07]/[Rxx08]/[Rxx09]/[Rxx10]/[Rxx11]
・トグルSW(ON/OFF POP):[Rxx00]/[Rxx01]
・トグルSW(ON POP):[Rxx03]
・トグルSW(OFF POP):[Rxx02]
・トグルSW(POP無):[Rxx04]/[Rxx05]

◆ スイッチの挙動分岐 【 YesNoPOPup 】(モーメンタリ/ラッチ/トグル など)

・モーメンタリ スイッチ
00009
・9行目はモーメンタリスイッチの出力です。
・モーメンタリ動作箇所の出力をマスクパタン[MOMENT]でFalseにし、モーメンタリスイッチの箇所の入力を抽出し、そのまま出力に代入していま す。


・ラッチ スイッチ(POP有)
00013
・[LACTH_POP]でポップアップするスイッチ箇所を抽出し、その立上りをサブルーチンの引数である[TM6]に代入し、サブルーチンコールしま す。
・立上り検知のコードに付いては、基本編「微分」を 参照してください。
00112
・上記112行目がサブルーチン10の内容です。引数として[TM6]を使っていますが、レジスタで代用しても良いでしょう。
・ここでは既にONしているスイッチを操作した時に、ポップアップが表示されない様出力状態とマスクしています。
・操作対象のスイッチがOFF状態であるのなら、変数[MEMO]のBitを立てて[▲POP]をセットします。
・[MEMO]と[▲POP]に付いては後述します。

・ラッチ スイッチ(POP無)
00017
・ポップアップ有の時同様、マスクパタン[LATCH_NON]でスイッチ箇所を選択し、その立上りBitを出力操作用デバイス[@MR200]〜に代入 します。
・出力操作デバイス[@MR200]〜に付いては後述します。


・トグル スイッチ
00021
・ラッチ スイッチと同様にマスクパタン[T_FF]で、トグルスイッチ箇所を抽出し、立上りBitを引数に渡しサブルーチンコールします。

・以降、サブルーチン12の内容です。
00097
・上の97行目は現在の出力状態がTrueでも Falseでもポップアップするマスクパタンです。
・変数[MEMO]に操作したスイッチのBit箇所を代入し[▲POP]をセットします。

00099
・上の99行目は現在の状態がFalseの場合のみポッ プアップ表示します。(ONにする時、ポップアップ)
・操作箇所の現在状態([R1200]〜)がFalseなら[CR2010]がONとなり、引数が[MEMO]に代入され、[▲POP]をセットします。
・現在状態がTrueなら[CR2010]はOFFなので、レジスタのBit状態が、出力操作Deviceに代入されます。

000102
・102行目は99行目の動作と反対の動作どなります。
現在の状態がTrueの時のみポップアップ表示し ます。(OFFにする時、ポップアップ)

00105
・[NON]のマスクパタンに一致したスイッチ箇所はそのまま出力操作Device[@MR200]〜に代入され、即時出力操作が実行されます。


◆ ポップアップと[Yes] 「No] スイッチ 【 YesNoPOPup 】

00025


・サブルーチン内でセットされた[▲POP]で[MR000]をセットしています。
・今回はVTの「デバイスによる機能制御」を使ってポップアップ 画面(グローバル画面)を表示させました。
・[MR000]をセットするとポップアップ画面が表示されます。


00006
・[YES]/[NO] 各スイッチの立下りで[MR000]をリセットし、ポップアップ画面を閉じています。


00028
・[YES]スイッチが押されると、操作されたスイッチの箇所を記憶している[MEMO]の内容が[@MR200]〜に代入され、出力を操作します。
・[MEMO]の内容は[YES]/[NO] 各スイッチの立下りでクリアされます。


◆ 出力の操作 【 YesNoPOPup 】(ラッチとトグル インデックス修飾など)

・このサンプルではスイッチを32Bits分使っていますが、R02チャンネルの出力操作をインデックス修飾を使って、R03チャンネルを個別記述しまし た。
・インデックス修飾の為のインデックスレジスタを TimeSlice モジュールで作っています。
00003
・上はTimeSlice モジュールのインデックスレジスタ発生ルーチンです。
・インデックスレジスタ[Z6]は1スキャン毎に0〜15を循環します。
・このサンプルでは基本編「時分割」の[Z7] と動作変更しています。
・[Z6]と「$FFFE」との論理積をとる事で(2の0乗Bitをマスク)奇数をマスクしています。

00031
・マスクパタンとの一致を見るため、[Z6]をデコードして[@MR000]のBitシフトをしています。

・トグル動作出力 (インデックス修飾記述例)
00033
・現在のインデックス位置のスイッチが操作され、トグル動作スイッチであるならば、出力状態を読んでそれを反転しています。
・[@MR200]〜はスイッチのバッファです。
・この2行の記述で16Bits分のトグル動作を実現できます。

・ラッチ出力動作 (インデックス修飾記述例)
00036
・現在のインデックス位置のスイッチが操作され、ラッチ動作スイッチであるならば、ペアになる相手のDeviceをリセットし、自分をセットします。
・この2行の記述で16Bits分のラッチ動作を実現できます。


・トグル動作出力 (個別記述)
00040
・R03チャンネルではトグル動作を個別に記述しました。
・実際は1チャンネル分。この記述が後、15ブロック必要になります。(忙しくてしかたない方はインデックス修飾で記述してください。)
・[@MR600]〜のマスクビットがトグル動作に割当てられているなら、その箇所のスイッチを操作した時に出力を反転します。

・ラッチ動作出力 (個別記述)
00073
・R03チャンネルではラッチ動作を個別に記述しました。
・実際は1チャンネル分。この記述が後、7ブロック必要になります。
・[@MR600]〜のマスクビットがラッチ動作に割当てられているなら、その箇所のスイッチを操作した時にペアになる相手のDeviceをリセットし、 自分をセットします。

◆ VT スクリーンサンプル【 操作方法 】

・左側、緑ランプがR02チャンネル。右側がR03チャンネルです。
・左右とも同じスイッチ機能を割当てています。
screen01


・ラッチスイッチは銘板に「POP」と書かれているスイッチを押すとポップアップ画面が表示されます。
・トグルスイッチは銘板に「POP:」とポップアップ画面表示条件を書いています。「POP:OFF」ならOFF操作時にポップアップ画面を表示します。
screen02


●PDFを表示  ●コードをダウンロード