VBA(Excel)でDSairを制御する(続)CV値読み書き
Excelを使って、DSairのマニュアル運転操作をしようという方は、まずおられないと思います。
やはりデコーダーのCV値の管理がメインになると思います。
というわけでCV値の読み書きです。
読込は 前回書いたHTTPDSAir関数を使って
Sub DSair_cv_read_com(LocoAdress, CVNo)
fc = "/command.cgi?op=131&ADDR=0&LEN=64&DATA=GV(" + LocoAdress + "," + CVNo + ")" + " ?" + Str(Time())
HTTPDSAir (fc)
End Sub
LocoAdressは、OPSモードで使用するときデコーダーのアドレスを文字列として指定しますが、それ以外では”0”をいれます
で読込命令を出して
Sub DSair_cv_read_res()
fc = "/command.cgi?op=130&ADDR=128&LEN=264" + " ?" + Str(Time())
DSair_res = HTTPDSAir(fc)
CVValue = Mid(DSair_res, 42, 3)
End Sub
で値を読込みます。
ただし読込命令を出して、DSairがデコーダーにアクセスして、内部メモリの値が読み込んで書き替えられるまで、2−3秒かかるので、そのあいだにスリープなどの命令をいれて時間稼ぎする必要があります。
関数にすれば
Function DSair_cv_read(LocoAdress, CVNo)
fc1 = "/command.cgi?op=131&ADDR=0&LEN=64&DATA=GV(" + LocoAdress + "," + CVNo + ")" + " ?" + Str(Time())
HTTPDSAir (fc1) 'CV値の読み込み命令を出す
sleep 4000 '4秒時間を空ける
fc2 = "/command.cgi?op=130&ADDR=128&LEN=264" + " ?" + Str(Time())
DSair_res = HTTPDSAir (fc2) '内部メモリの書き替えられたCV値の読み出す
DSair_cv_read = Mid(DSair_res, 42, 3) '関数の返り値がCV値です。
End Function
となります
CV値の書き込みは
Sub DSair_cv_write(LocoAdress, CVNo, CVValue)
fc = "/command.cgi?op=131&ADDR=0&LEN=64&DATA=SV(" + LocoAdress + "," + CVNo + "," + CVValue + ")" + " ?" + Str(Time())
HTTPDSAir (fc)
End Sub
で実行できます。
サブルーチンや関数の引数 LocoAdress, CVNo, CVValue は文字列です。
また上記のプログラム例は、エラー処理を省略しています。
Comments