NonSoft

VBSで通信(RS232C TCP/IP UDP/IP)出来るか?


 ち〜な〜み〜に〜

VBS(VB SCRIPT/WSH)で通信(RS232C TCPIP UDPIP)が出来るかどうかを試してみました。

試した方法はMSCommLib.MSCommやMSWinsock.WinsockをCreateObjectする方法です。

(注意)
このサンプルはVB6の開発環境が無いと実行出来ません。(Visual Studio 6.0がインストールされていれば動きます)
64bit(x64)版のWINDOWSで標準のVB SCRIPTを実行するとCreateObjectでエラーが発生するため、
32bit(x86)版のVB SCRIPT(C:\Windows\SysWow64\cscript.exe)を実行してください。

このサンプルの実行結果は、RSC23Cは成功しましたがソケットの方は受信で失敗(送信は成功)してしまいました。
とりあえず、下のVBSサンプルソースを見てください。上手く行かない箇所にコメントを入れています。

ちなみに、次の方法ではVB6の開発環境が無くても全て成功します。
スクリプト通信テスト(RS232C/TCPIP/UDPIP)でVBS(WSH)のサンプルソース(コード)をダウンロード頂けます。
EXCEL通信テスト(RS232C/TCPIP/UDPIP)でエクセルVBAのサンプルソース(コード)をダウンロード頂けます。

通信(RS232C TCP/IP UDP/IP)関係のその他のツールやサンプルソース(コード)はこちらです。
通信ツール&サンプル(RS232C TCP/IP UDP/IP)


★VBSでRS232Cのサンプルソース
' COMポート設定
Set MSComm1 = CreateObject("MSCommLib.MSComm")
MSComm1.CommPort = 11
MSComm1.Settings = "9600,N,8,1"

' COMポートオープン
MSComm1.PortOpen = True

' データ送信
MSComm1.Output = "12345あいうえお"

' ACKまたはNAKを受信するまでまつ
Do
    WScript.Sleep(1000)
    RcvDat = RcvDat & MSComm1.Input
Loop While InStr(RcvDat, Chr(6)) <= 0 And _
           InStr(RcvDat, Chr(21)) <= 0

' 受信データ表示
MsgBox RcvDat

' COMポートクローズ
MSComm1.PortOpen = False

★VBSでTCP/IPのサンプルソース
' TCP/IP接続
Set Winsock1 = CreateObject("MSWinsock.Winsock")
Winsock1.Connect "127.0.0.1", 8888

' TCP/IP接続待ち
Do While Winsock1.State = 6
	WScript.Sleep(1000)
Loop

' データ送信
Winsock1.SendData "12345あいうえお"

' ACKまたはNAKを受信するまで待つ
Do
    WScript.Sleep(1000)
    Winsock1.GetData rdat
    RcvDat = RcvDat & rdat ' ここでエラーになる!!
Loop While InStr(RcvDat, Chr(6)) <= 0 And _
           InStr(RcvDat, Chr(21)) <= 0

' 受信データ表示
MsgBox RcvDat

' TCP/IP切断
Winsock1.Close

★VBSでUDP/IPのサンプルソース
' UDP/IP接続
Set Winsock1 = CreateObject("MSWinsock.Winsock")
Winsock1.Protocol = 1
Winsock1.RemoteHost = "127.0.0.1"
Winsock1.RemotePort = 8888
Winsock1.Bind 7777

' UDP/IP接続待ち?
Do While Winsock1.State = 6
	WScript.Sleep(1000)
Loop

' データ送信
Winsock1.SendData "12345あいうえお"

' ACKまたはNAKを受信するまで待つ
Do
    WScript.Sleep(1000)
    Winsock1.GetData rdat ' データが受信出来ない!!
    RcvDat = RcvDat & rdat
Loop While InStr(RcvDat, Chr(6)) <= 0 And _
           InStr(RcvDat, Chr(21)) <= 0

' 受信データ表示
MsgBox RcvDat

' UDP/IP切断
Winsock1.Close