掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
APIのSetCommStateでStopBitを1にすると必ずエラーになるのを解消するには? (ID:148197)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
はじめまして、KEIです。 APIを使ったRS232Cの通信をしています。 StopBitに1を入れるとSetCommStateの所で必ずエラーが発生してしまいます。 0、1.5、2ではエラーが発生しません。 DCBの構造体が間違っていると思い調べてみたのですが間違っていないようでした。 御教授いただけませんでしょうか。 Private Structure DCB Public DCBlength As Int32 'DCB構造体の大きさ(バイト単位) Public BaudRate As Int32 '通信速度 Public fBitFields As Int32 'ビット単位のフィールド定義'See Comments in Win32API.Txt Public wReserved As Int16 '予約領域 Public XonLim As Int16 'XON文字送信の閾値 Public XoffLim As Int16 'XOFF文字送信の閾値 Public ByteSize As Byte '1バイトのビット数 Public Parity As Byte 'パリティの方式を指定 Public StopBits As Byte 'ストップビットの長さ指定 Public XonChar As Byte 'XON文字のコード指定 Public XoffChar As Byte 'XOFF文字のコード指定 Public ErrorChar As Byte 'パリティエラー時の代替使用文字の指定 Public EofChar As Byte '非バイナリモード時のデータ終了コード Public EvtChar As Byte 'イベント発生文字のコード指定 Public wReserved1 As Int16 '予約領域'Reserved; Do Not Use End Structure Private Declare Auto Function SetCommState Lib "kernel32.dll" (ByVal nCid As IntPtr, _ ByRef lpDCB As DCB) As Boolean Public Function Connect(ByVal PortName As String, ByVal BaudRate As int32, _ ByVal ByteSize As Byte, ByVal Parity As Byte, ByVal StopBit As Byte) As Boolean Dim MyDCB As DCB Dim MyCommTimeouts As COMMTIMEOUTS 'シリアル ポートへのハンドルを取得します。 hSerialPort = CreateFile(PortName, GENERIC_READ Or GENERIC_WRITE, 0, IntPtr.Zero, _ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, IntPtr.Zero) '取得したハンドルが有効かどうか確認します。 If hSerialPort.ToInt32 = -1 Then Return False '現在のコントロールの設定を取得します。 If Not (GetCommState(hSerialPort, MyDCB)) Then Return False '必要に応じて MyDCB のプロパティを変更します。 '警告 : 各プロパティでサポートされている値に応じて変更を行うようにしてください。 MyDCB.BaudRate = BaudRate MyDCB.ByteSize = ByteSize MyDCB.Parity = Parity MyDCB.StopBits = StopBit 'MyDCB のプロパティに基づいて COM? を再構成します。 If Not (SetCommState(hSerialPort, MyDCB)) Then Return False 'SetCommState(hSerialPort, MyDCB) '現在のタイムアウトの設定を取得します。 'If Not (GetCommTimeouts(hSerialPort, MyCommTimeouts)) Then Return False GetCommTimeouts(hSerialPort, MyCommTimeouts) ' MyCommTimeouts のプロパティを必要に応じて変更します。 ' 警告 : プロパティでサポートされている値に応じて変更を行うようにしてください。 MyCommTimeouts.ReadIntervalTimeout = 0 'タイムアウトの時間 MyCommTimeouts.ReadTotalTimeoutConstant = 4 '受信関数コール時間(インターバル0〜250ms) MyCommTimeouts.ReadTotalTimeoutMultiplier = 1 '受信1Byteあたりの時間 MyCommTimeouts.WriteTotalTimeoutConstant = 1 '送信関数コール時間 MyCommTimeouts.WriteTotalTimeoutMultiplier = 1 '送信1Byteあたりの時間 ' MyCommTimeouts のプロパティに基づいてタイムアウトの設定を再構成します。 If Not (SetCommTimeouts(hSerialPort, MyCommTimeouts)) Then Return False Return True End Function 環境 WIN7 VS2010
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.