VBAを用いてシリアル通信にて2行目以降のデータを受信したい

VBE

'WindowsAPI初期設定 Declare PtrSafe Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal filename As String, ByVal rw As Long, ByVal d1 As Long, ByVal d2 As Long, ByVal d3 As Long, ByVal d4 As Long, ByVal d5 As Long) As Long Declare PtrSafe Function ReadFile Lib "kernel32" (ByVal handle As Long, ByVal buf As String, ByVal bytes As Long, ReadBytes As Long, ByVal d1 As Long) As Long Declare PtrSafe Function SetCommState Lib "kernel32" (ByVal handle As Long, ByRef lpDCB As DCB) As Long Declare PtrSafe Function SetCommTimeouts Lib "kernel32" (ByVal handle As Long, ct As COMMTIMEOUTS) As Long Declare PtrSafe Function CloseHandle Lib "kernel32" (ByVal handle As Long) As Long 'CreateFile関数用定数 Const GENERIC_READ = (&H80000000) Const GENERIC_WRITE = (&H40000000) 'SetCommState関数用構造体定義 Type DCB DCBlength As Long BaudRate As Long bfModeCTL As Long wReserved As Integer XonLim As Integer XoffLim As Integer ByteSize As Byte Parity As Byte StopBits As Byte XonChar As Byte XoffChar As Byte ErrorChar As Byte EofChar As Byte EvtChar As Byte wReserved1 As Integer End Type 'SetCommTimeouts関数用構造体定義 Type COMMTIMEOUTS ReadIntervalTimeout As Long ReadTotalTimeoutMultiplier As Long ReadTotalTimeoutConstant As Long WriteTotalTimeoutMultiplier As Long WriteTotalTimeoutConstant As Long End Type Sub RS232C通信() Dim cs As DCB Dim ct As COMMTIMEOUTS dim com as boolian Dim i As Long Dim l As Long Dim buf As String * 16384 i = 1 PORT = ”COM1” OP = Right(PORT, 1) h = CreateFile(PORT, GENERIC_READ, 0, 0, OP, 0, 0) '通信条件設定 cs.BaudRate = 9600 cs.ByteSize = 8 cs.Parity = 0 cs.StopBits = 0 a = SetCommState(h, cs) 'タイムアウト設定 ct.ReadIntervalTimeout = 0 ct.ReadTotalTimeoutMultiplier = 1 ct.ReadTotalTimeoutConstant = 1000 ct.WriteTotalTimeoutMultiplier = 1 ct.WriteTotalTimeoutConstant = 1000 b = SetCommTimeouts(h, ct) 'データ送信 c = ReadFile(h, ByVal buf, 10000, l, 0) Cells(1, 5) = buf 'ポートクローズ:CloseHandle (ポートのハンドル) com = CloseHandle(h) End Sub

コメントを投稿

0 コメント