第 5 章 リファレンス(通信モジュールイベント)
5.3 構造体説明
© 2002, 2016 Interface Corporation. All rights reserved.
5.3.2 DCB 構造体
●C 言語
typedef struct _DCB { DWORD DCBlength;
DWORD BaudRate;
DWORD fBinary;
DWORD fParity;
DWORD fOutxCtsFlow;
DWORD fOutxDsrFlow;
DWORD fDtrControl;
DWORD fDsrSensitivity;
DWORD fTXContinueOnXoff;
DWORD fOutX;
DWORD fInX;
DWORD fErrorChar;
DWORD fNull;
DWORD fRtsControl;
DWORD fAbortOnError;
DWORD fDummy2;
WORD wReserved;
WORD XonLim;
WORD XoffLim;
BYTE ByteSize;
BYTE Parity;
BYTE StopBits;
char XonChar;
char XoffChar;
char ErrorChar;
char EofChar;
char EvtChar;
WORD wReserved1;
} DCB;
© 2002, 2016 Interface Corporation. All rights reserved.
●Visual Basic Type DCB
DCBlength As Long BaudRate As Long fBitFields 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
●Delphi type
TDCB = packed record
DCBlength: DWORD;
BaudRate: DWORD;
Flags: Longint;
wReserved: DWORD;
XonLim: Word;
XoffLim: Word;
ByteSize: Byte;
Parity: Byte;
StopBits: Byte;
XonChar: CHAR;
XoffChar: CHAR;
ErrorChar: CHAR;
EofChar: CHAR;
EvtChar: CHAR;
wReserved1: Word;
end;
PDCB = ^TDCB;
メンバ 説明
DCBlength; DCB 構造体のサイズを指定します。
シリアルポートの通信速度を指定します。
RS-232C 128bps~1000000bps(1Mbps)
RS-485 128bps~4000000bps(4Mbps)
BaudRate;
インタフェースモジュールにより、設定可能範囲が異なります。
Visual Basic、Delphi は C 言語のようにビットフィールドを使用できない ため、32 ビット整数値として扱い、fRtsControl メンバの該当ビットのオ ン・オフを行います。
Visual Basic の DCB 構造体の fBitFields メンバと、Delphi の TDCB 構造 体の Flags メンバの各ビットは、C 言語の DCB 構造体の各メンバと対応し ています。ビット構成は以下のようになっています。
Bit C 言語の DCB 構造体と対応するメンバ 0 fBinary
1 fParity 2 fOutxCtsFlow 3 fOutxDsrFlow
4 fDtrControl (2 ビット使用) 6 fDsrSendsitivity
7 fTXContinueOnXoff 8 fOutX
9 fInX
10 fErrorChar 11 fNull
12 fRtsControl (2 ビット使用) 14 fabortOnError
15 fDummy2 (予約) fBitFields
Flags
fBinary バイナリモードの有効無効を指定します。1 で有効、0 で無効になります。こ の設定を無効にすることはできません(Win32API がバイナリモードしかサポ ートしてないため)。
fParity パリティモードの有効無効を指定します。1 で有効、0 で無効になります。
fOutxCtsFlow CS ハードウェアフロー制御として、CS(送信可)信号をモニタするかどうかの 有効無効を指定します。1 で有効、0 で無効になります。有効にすることで、
CS 信号が再び送信されるまで、データ出力を中断します。
fOutxDsrFlow 出力フローコントロールとして、DSR(データ・セット・レディ)信号をモニタす るかどうかの有効無効を指定します。1 で有効、0 で無効になります。有効に することで、DSR 信号が再び送信されるまで、データ出力を中断します。
DTR(データ端末レディ)フローコントロールの種類を指定します。
値 説明
DTR_CONTROL_DISABLE DTR 信号を常に無効 DTR_CONTROL_ENABLE DTR 信号を常に有効 fDtrControl
© 2002, 2016 Interface Corporation. All rights reserved.
メンバ 説明
fDsrSensitivity DSR(データ・セット・レディ)フローコントロールが無効の間、受信データを無 視するかどうかの有効無効を指定します。1 で有効、0 で無効になります。
fTXContinueOnXoff XoffChar を送信ししたときに、データ送信を中断するかどうかの有効無効を 指定します。1 で有効、0 で無効になります。なお、この設定を有効にすると、
XoffChar が送信されたときにも、データの送信は続けられます。
fOutX データが送信されている間、XON/XOFF 出力フローコントロールをするかどう かの有効無効を指定します。1 で有効、0 で無効になります。なお、有効にす ることで、XoffChar を受信したときにデータの送信が中断され、XonChar を 受信したときにデータの送信を再開します。
fInX データを受信している間、XON/XOFF 入力フローコントロールをするかどうか の有効無効を指定します。1 で有効、0 で無効になります。なお、有効にする ことで、受信バッファの空き容量が XoffLim 以下なったときに XoffChar を送 信し、受信バッファのデータが XonLim 以下になったときに XonChar を送信さ れます。
fErrorChar パリティエラー時に代替文字を使用するかどうかの有効無効を指定します。1 で有効、0 で無効になります。
fNull NULL バイトを破棄するかどうかの有効無効を指定します。1 で有効、0 で無効 になります。
RS(送信要求)信号の種類を指定します。
値 説明
RTS_CONTROL_ENABLE RS を常に有効 RTS_CONTROL_DISABLE RS を常に無効 RTS_CONTROL_HANDSHAKE 下記参照 ※1 fRtsControl
RSハンドシェイク(RSハードウェアフロー制御)になります。下記のようにRS が制御されます。
受信FIFOに格納されたデータ数が512バイト以上となったときにRS信号が無効 になります。
(受信FIFOのデータ数≧512バイト)
受信FIFOに格納されたデータ数がRS-トリガ値を下回ったときにRS信号が有効 になります。
(受信FIFOのデータ数<RS-トリガ値)
RS-トリガ値は「COMxxx(xxxはCOM番号)の詳細設定」の「受信バッファ」で設 定できます。
「受信バッファ」≦8 なら RS-トリガ値は256バイトであり、
「受信バッファ」>8 なら RS-トリガ値は384バイトになります。
設定方法は『2線式/4線式通信設定』を参照してください。
メンバ 説明
RTS_CONTROL_TOGGLE 下記参照
RSトグル(半二重通信)に設定されます。RSトグルを指定すると、下記のような制 御になります。
・PCI-4161,CBI-4641,CBI-466120WAの場合…RSが有効になり、CSが有効になりデ ィレイ時間(COMMHSFUNC構造体のdwSetupTime、下図のS)が過ぎれば、データが送 信します。 データ送信後ディレイ時間(COMMHSFUNC構造体のdwHoldTime、下図 のH)が過ぎれば、RSが無効になります。送信後CSは無効になります。
・ その他製品型式の場合… RSが有効になり、ディレイ時間(COMMHSFUNC構造体 のdwSetupTime、下図のS)が過ぎれば、データを送信します。データ送信後デ ィレイ時間(COMMHSFUNC構造体のdwHoldTime、下図のH)が過ぎれば、RSが無効 になります。
fAbortOnError エラーが発生した場合に、データの送受信を行うかどうかの有効無効を指定しま す。1 で有効、0 で無効になります。
fDummy2 予約済みです。使用できません。
wReserved 常に 0(ゼロ)を指定します。
XonLim XonChar を送信するまでの受信バッファのデータ容量を指定します。受信バッフ ァの容量が XonLim 以下なれば、XonChar を送信します。
※「XON送信しきい値、XOFF送信しきい値について」を参照ください。
XoffLim XoffChar を送信するまでの受信バッファの空き容量を指定します。受信バッファ の空き容量が XoffLim 以下になれば、XoffChar を送信します。
※「XON送信しきい値、XOFF送信しきい値について」を参照ください。
ByteSize 1 ビットのバイト数を指定します。4~8 バイトの間で指定できます。
パリティの種類を指定します。
値 説明
EVENPARITY 偶数パリティ
MARKPARITY マークパリティ
NOPARITY パリティなし
ODDPARITY 奇数パリティ
SPACEPARITY 空白パリティ
Parity
RS CS
S H
送信データ
RS
S H
送信データ
© 2002, 2016 Interface Corporation. All rights reserved.
メンバ 説明
値 説明
ONESTOPBIT 1 ストップビット
ONE5STOPBITS 1.5 ストップビット(GPC-4161 は 1.5 ス トップビットがありません。1 ストップ ビットに変更されます。)
TWOSTOPBITS 2 ストップビット
XonChar XON 文字を指定します。
XoffChar XOFF 文字を指定します。
ErrorChar パリティエラーの代替文字を指定します。
EofChar EOF 文字を指定します。
EvtChar イベント通知文字を指定します。
wReserved1 予約済みです。使用できません。
【備考】
下記のように使用する場合は注意してください。
DCB dcb;
dcb.fOutxCtsFlow = 1;
dcb.fRtsControl = RTS_CONTROL_TOGGLE;
・PCI-4161,CBI-4641,CBI-466120WA の場合…この設定は出来ません。
・その他製品型式の場合…
RS が有効になり、セットアップタイム(COMMHSFUNC 構造体の dwSetupTime)が過ぎ、かつ CS が有効なら、データ送信します。
データ送信後、ホールドタイム(COMMHSFUNC 構造体の dwHoldTime)が過ぎると、RS が無効に なる。送信後 CS は無効になります。
※この設定で通信を行う際は注意事項の「セットアップタイムとCSハードフロー制御について」
をお読みください。
【補足】
・RS(送信要求)信号の用途
送信するとき RS を有効にする(半二重通信)。
相手にデータを送ってほしくないとき RS を無効にする(ハンドシェイク(ハードウェアフロ ー制御))。
・CS(送信可)信号の用途
相手(自分)からの送信許可を受ける。
許可を受けないとデータ出力しない(ハードウェアフロー制御)。
RS CS
送信データ
S H
【使用例】
下記の場合について設定の使用例を記載します。
<4線式全二重通信の場合>
DCB dcb;
GetCommState(hPort, &dcb);
dcb.BaudRate = 9600;
dcb.fAbortOnError = 0;
dcb.Parity = 0;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 8;
dcb.fOutxDsrFlow = 0;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fOutxCtsFlow = 0;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
dcb.fInX = dcb.fOutX = 0;
SetCommState(hPort, &dcb);
<4線式半二重通信の場合>
DCB dcb;
GetCommState(hPort, &dcb);
dcb.BaudRate = 9600;
dcb.fAbortOnError = 0;
dcb.Parity = 0;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 8;
dcb.fOutxCtsFlow = 0;
dcb.fOutxDsrFlow = 0;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fOutxCtsFlow = 0;
dcb.fRtsControl = RTS_CONTROL_TOGGLE;
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
dcb.fInX = dcb.fOutX = 0;
SetCommState(hPort, &dcb);
© 2002, 2016 Interface Corporation. All rights reserved.
<CS ハードウェアフロー制御かつ RS ハンドシェイク(RS ハードウェアフロー制御)の場合>
DCB dcb;
GetCommState(hPort, &dcb);
dcb.BaudRate = 9600;
dcb.fAbortOnError = 0;
dcb.Parity = 0;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 8;
dcb.fOutxCtsFlow = 1;
dcb.fOutxDsrFlow = 0;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fOutxCtsFlow = 0;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
dcb.fInX = dcb.fOutX = 0;
SetCommState(hPort, &dcb);
<4 線式半二重通信での CS ハードウェアフロー制御の場合>
※PCI-4161,CBI-4641,CBI-466120WA ではこの設定はできません。
DCB dcb;
GetCommState(hPort, &dcb);
dcb.BaudRate = 9600;
dcb.fAbortOnError = 0;
dcb.Parity = 0;
dcb.StopBits = ONESTOPBIT;
dcb.ByteSize = 8;
dcb.fOutxCtsFlow = 1;
dcb.fOutxDsrFlow = 0;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fOutxCtsFlow = 0;
dcb.fRtsControl = RTS_CONTROL_TOGGLE;
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
dcb.fInX = dcb.fOutX = 0;
SetCommState(hPort, &dcb);