Visual Basicでサービス作成 NC死活監視

NC装置の死活監視機能を作ろうと思いました。

・サービスで常駐

・cnc_allclibhndl3(ハンドル番号取得)コマンドを定期実行し、日時とリターンコードをCSVファイルに追記していく

フォームアプリケーションは作りましたが、サービスは初めてなので、まずはサービスの作り方から調べました。新規プロジェクト作成で、Windowsサービスで作成すればサービスを作れます。

タイマーをフォームアプリケーションと同じように作ったところ、繰り返してくれない・・・・。よく見るとSystem.Windows.Form.Timerって書いてある。フォーム用のタイマーだからサービスでは動かないのでは?と調べてみたらサービスの場合はSystem.Timers.Timerで作らないといけないようです。プログラムの書き方も違いました。

プロパティではEnable=Falseにしておき、サービス開始処理の中で有効化する。その時にインターバルも指定。

Timer1.Enabled = True
Timer1.Interval = 10000

タイマーの中の処理で、今の日時、カンマ、cnc_allclibhndl3のリターンコードを文字列にしたもの、改行を出力。

str1 = System.DateTime.Now & "," & nRet.ToString & vbCrLf

System.IO.File.AppendAllText("C:\XXXX\XXXX\alive.csv", str1)

 

あと、サービスはVisual Studioからデバッグしても実行できません。Windowsのサービスに登録して、サービスの開始をして実行します。

出来上がったので実機確認。サービスを起動してNCルーターの電源をオン。CSVの前半はNCが起動していないのでリターンコード-16、途中から通信できてリターンコード0に変わりました。

CSVファイルに書くことが出来たので、このデータを使えば何時から何時まで稼働していたか、電源ON・OFFの比率など集計が出来ます。

今回作った機能では電源が入っているかしかわかりません。切削加工していた時間も記録できるようにしたいですね。