VPLブロックを使ってみよう(Timer)失敗編(1)
今年最後の失敗です。。。σ(^-^;)
さて、今日は大晦日です。
2008年も残りわずかですね。(これを書き始めたのが22:55なのであと1時間ちょっとです。)
31日ってふと、年明けまであと残り何秒あるのか知りたくなりませんか?
そんな時のためにこんなものを作ってみました。
なんともまぁ、RoboticsStudioを使う意味がどこにあるのかっていう。。。σ(^-^;)
(でも、18時半頃からスタートして、ここまで持っていくのにもああでもない、こうでもないとVPL図を書き換え、それなりに時間がかかりました。。。(ρ_-)o)
もともとはRDSのヘルプを見ていたらTimerブロックを使った事がないことを思い出したので、ちょっと触ってみようと思ったのと「大晦日」というキーワードからの連想で、
【やりたかったこと】
ダイアログのボタンを押した時刻から、2008年12月31日23時59分59秒までの残り時間を表示させ、Timerブロックを用い一定間隔で残り時間を更新する。
というようなカウントダウンみたいなことをやってみたかったのですが、まだサービスの仕組みを理解できておらず、うまく動きませんでした。
【結果】
秒単位の誤差を許容すればボタンを押した時刻からの残り時間を取得することはできたが、残り時間が更新されずにループした回数だけ同じ時刻が表示された。
思った通りに動かすことはできませんでしたが、今までの総復習と新しいブロック(TimerとMergeとVariable)を使ってみたという点ではよかったと思います。
そもそもこういうことが実現可能かすら不明なのですが、もう少しなんとかできないものか考えてみたいです。
それでは、皆様よいお年を〜
【今回使用したブロック】
【今回作成したサービス】
プロジェクト名を「GetRemainingTime」で新規作成。
- プログラム追加箇所
-
- GetRemainingTimeTypes.cs
/// <summary> /// GetRemainingTime state /// </summary> [DataContract] public class GetRemainingTimeState { [DataMember] public string RemainingTime { get; set; } }
-
- GetRemainingTime.cs
- 1つ目
/// <summary> /// Service state /// </summary> [ServiceState] GetRemainingTimeState _state = new GetRemainingTimeState();
の前に
TimeSpan remainingTime; System.DateTime limitTime = new DateTime(2009,1,1,0,0,0);
を追加。
- 2つ目
/// <summary> /// Service constructor /// </summary> public GetRemainingTimeService(DsspServiceCreationPort creationPort) : base(creationPort) { remainingTime = limitTime - System.DateTime.Now; _state.Time = "2008年も残り " + remainingTime.Hours + "時間" + remainingTime.Minutes + "分" + remainingTime.Minutes +"秒です!"; }
【今回作成したVPL図(最初にダイアログボックスに表示させた方)】
この、ダイアログボックスに表示させるバージョンで、Timerを使ったVPL図も作成してみたのですが、実行してみると、方向ダイアログの上矢印キーを押すたびに、ダイアログボックスが増えて、増えて、増えて・・・(ρ_-)o
こんな結果になり、手がつけられなくなったのでLog表示に変えてみたのですが、時間が更新されないという問題点は何も改善されておりません。。。
【追記】
初めは下準備として、"GetCurrentTime"というプロジェクト名で現在時刻を取得するサービスを作成していたのですが、そのプログラムに残り時間表示処理を追加して実行し、画像ショットをとってしまいました。お手数ですが図中で"GetCurrentTime"となっている部分は全て"GetRemainingTime"に読み替えて下さい。