フォーラムへの返信
-
投稿者投稿
-
MZPlatformユーザー会キーマスター
複合コンポーネントには外部参照機能があります。Platform.iniで指定したフォルダに入れたファイルを参照し、参照元のファイルを変更を保存すれば、そのファイルを参照している複合コンポーネントにも反映されます。『アプリケーションビルダー操作説明書』のP118-120をご参照ください。
1.基本の複合コンポーネントの階層内に入って、「この階層」のみをフォルダに名前を付けて保存します。(Platform.iniでCombinativeComponentsFolderに既定で指定されている保存フォルダはMZPlatform\3.6_64\AP_DATA_COMBです。)
2.基本の複合コンポーネントをアプリケーションビルダー上でコピー&ペーストします。
または、アプリケーションビルダー上で右クリック>複合コンポーネント追加で追加します。
3.複製した複合コンポーネントの属性情報設定ウィンドウを表示し、Referenceの欄に参照元複合コンポーネントファイルの名前(例:test.mzcx)を設定します。
4.3のコンポーネントを必要数コピー&ペーストし、アプリケーションを保存します。
参照機能を設定している複合コンポーネントのコンポーネントキーは青色になります。複合コンポーネントは複数を画面上に配置してしおき、アプリケーション開発中は基本の複合コンポーネントの参照を行い、アプリケーション完成時に参照機能を「false」にするという方法をお勧めします。
各複合コンポーネントによって違う処理・設定を加える場合は、完成時に参照無しの状態にしてから行います。以上、ご検討ください。MZPlatformユーザー会キーマスター引数のデータ型を示す文字列について、ご説明が足りず失礼しました。
数値,String,boolean,void型以外はクラス名を指定してください。Color型の場合には「java.awt.Color」となります。
それから、引数2に設定する値ですが、ここではColor型のオブジェクトを設定しなければならず、直接文字列によるRGB値で指定はできません。一旦[色格納変数]に設定して、そこからColorオブジェクトを取得するようにします。
お送りいただいたファイルを少し変更しましたので、ご覧ください。MZPlatformユーザー会キーマスター[コンポーネント格納変数]に設定した[ラベル]のテキスト文字列を設定するメソッド名は「setText(String)」です。この英語のメソッド名は、起動メソッド情報ウィンドウで「全メソッド対象」にチェックを入れると確認できます。
1.「起動メソッド名を設定する(String)」で引数に固定値で「setText」を設定します。
2.次に「setText(String)」には引数が必要なので「起動メソッドに引数を追加する(String,Object)」の処理を設定します。引数1には固定値で「String」とします。この「引数の型を示す文字列」にはメソッド名の後ろの「()」の中に入っている文字列を指定します。
引数2には設定したい値を指定してください。
3.「起動メソッドを実行する()」の処理を設定します。ただ[コンポーネント格納変数]を使っても、処理の設定数はあまり変わらないかもしれません。MZPlatformで提供しているサンプルではコンポーネントの値の初期化の処理は[サブルーチン」や[ファンクション」を先頭に処理を纏めていることが多いです。どうぞご参考になさってください。
MZPlatformユーザー会キーマスター[リスト格納変数]にコンポーネントを入れ、位置を指定してコンポーネントを取得したいときには、[ファンクション]や[イベント生成]など、任意の数値を引数に指定できるコンポーネントを使うと便利です。
ただし、コンポーネントを取得した後、そのコンポーネントのメソッドを実行するには一旦[コンポーネント格納変数]等に格納しなければなりません。
簡単な例を作成しましたので、ご覧ください。また[ファンクション]を使用するなら、[ファンクション]の引数にコンポーネント自体を指定しても良いかと思います。併せて2番目の例もご覧ください。[コンポーネント格納変数]の使い方は少し判りにくいので、疑問の点があればご返信ください。
処理を纏めるには他にも[複合コンポーネント]に入れるなども考えられます。ご検討ください。- この返信は3年、 11ヶ月前にMZPlatformユーザー会が編集しました。
MZPlatformユーザー会キーマスター金型履歴管理システムのサンプルアプリケーションには
1)MZPlatform\3.6_64\AP_DATA\MetalMoldフォルダの中のサンプルとしてのアプリケーションと2)MZPlatform\3.6_64\AP_DATA\Tutorial\金型履歴管理フォルダの中の01~13までの作成例題としてのアプリケーションとがあります。
MetalMoldフォルダのアプリケーションは、改変を想定しておらずチュートリアルの例よりも複雑になっています。実行時にコンポーネントを動的に画面上に配置し、終了時には画面上から削除する設定になっているため、画面編集画面で見ると何も配置されていないように見えます。Tutorialフォルダ内のアプリケーションは、自身で作成できるよう作られています。2)のMZPlatform\3.6_64\AP_DATA\Tutorial\金型履歴管理フォルダの中のファイルをどうぞご覧ください。
MZPlatformユーザー会キーマスター情報ありがとうございます。
確かに、SQL Serverの関数にTIME_TO_SECとTIMEDIFFが無いようです。代わりにDATEDIFFがあるようなので、お試しください。
https://docs.microsoft.com/ja-jp/sql/t-sql/functions/datediff-transact-sql?view=sql-server-ver15SELECT (DATEDIFF(second,time,'[開始日時]’) DIV 300 + 1)*5 AS timespan, AVG(value), MAX(value), MIN(value) FROM data_table WHERE time>='[開始日時]’ AND time<‘[終了日時]’ AND ..[その他の条件].. GROUP BY timespan; こちらでは動作確認していませんが、MySQLでない場合いろいろ書き替えないといけないと思いますし、GROUP BY等の指定がこれでOKかはわかりません。エラーが出たらメッセージもお知らせいただければ参考になるかもしれません。 また、独自に解決できましたらご報告いただけると助かります。
MZPlatformユーザー会キーマスターご質問内容は理解できました。
確かにForでSQL文の実行を繰り返してご希望のテーブルデータを作成することもできますが、SQL文を工夫する方がMZ側の処理が簡単になります。下記にSQL文例のイメージを書きます。
SELECT (TIME_TO_SEC(TIMEDIFF(time,'[開始日時]’)) DIV 300 + 1)*5 AS timespan, AVG(value), MAX(value), MIN(value) FROM data_table WHERE time>='[開始日時]’ AND time<‘[終了日時]’ AND ..[その他の条件].. GROUP BY timespan;
ポイントは、GROUP BYで集約する対象を工夫して作成することです。ここでは、開始日時から終了日時までを5分単位で区切り、その範囲に含まれる値を集約することで一度にテーブルが取得できるようにしています。具体的には、日時の差分を秒単位に変換してから5分を示す300秒で整数の割り算をして、それに1を足してから5をかけると5分単位の経過時間になります。
なお、上記はMySQLを前提に書いていますが、お使いのDBMSによっては文法が異なることがありますので、その場合はお使いのDBMSに合わせた修正が必要です。(対応する関数が存在しない場合は方法を別に考える必要があります)
MZPlatformユーザー会キーマスターご質問内容と添付されたMZアプリだけでは、何を回答すればよいのかわかりません。
SQL文でどのようなテーブルを取得して、それをどのように簡略化したいのかご説明いただき、そのときForで何をしたくてその実現方法がわからないのかご説明ください。
なお、添付されたMZアプリを拝見すると、SQL文が不十分のように見受けられます。
こちらはデータを実際に取得して確認したでしょうか。MZPlatformユーザー会キーマスター追加情報をお知らせします。
JDK11でMZの機能がすべて正常に動くとは限りませんが、JDBCドライバについては、MZ側の設定ファイルにパスを追加することで使えるようです。
MZプラットフォームのインストールフォルダ(3.6の32ビット版であれば標準は C:\MZPlatform\3.6)にあるjarsフォルダにJDBCドライバ(JARファイル)を配置して、同じくetcフォルダにあるPlatformClassPath.iniに
jars/(JARファイル名)
と一行追加して起動すれば使用できると思いますので、お試しください。MZPlatformユーザー会キーマスター最新のバージョン3.6においても、折れ線グラフは横軸に項目軸を取るグラフですので、対象列が日時データであれば文字列に変換されてすべての日時が項目として表示され、ご報告いただいたようなグラフになります。これに対してグラフ側の設定だけでご希望の表示をすべて実現することはできません。
グラフ側で変更可能なものは、1と2で、設定するテーブルデータの行数を表示項目数に設定することができ、そうすればスクロールバーは表示されません。実行中の右クリックで表示されるメニュー(項目軸>表示項目数)から設定できますし、日本語化されていないメソッド(setItemAxisDisplayCount(int))を使えば設定可能です。
3と4と5は、現状SQL文でグラフ表示に必要なテーブルデータに整形する必要があります。日時のデータを指定の文字列で出力するように指定して、必要な間隔のデータとなるように集約(例えば平均化)します。
一方、指定間隔のデータに集約しても抜けがある場合への対応や、行数が多い時に項目名がつぶれてしまう問題は残るので、MZ側でグラフ表示用に値を埋めたり表示項目名を間引いたりするなどの工夫も必要となります。
以上のような工夫を駆使して作っているのが、配布版ツールキットに付属のデータ可視化用のサンプル(IoTDBViewer.mzax)ですので、参考にしていただければ幸いです。こちらはかなり複雑なので読むのが難しいと思いますが、ご不明な点を一つずつお問い合わせください。
-
投稿者投稿