« 猫屋線にマレー投入? | Main | PECOの車止めを組む »

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 は文字列です。

また上記のプログラム例は、エラー処理を省略しています。

 

 

 

 

|

« 猫屋線にマレー投入? | Main | PECOの車止めを組む »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



« 猫屋線にマレー投入? | Main | PECOの車止めを組む »