第 4 章 リファレンス(HDLC通信部) 35
4.3 構造体
1. HDLCNPORTINTIDATA 構造体
ポートの初期化情報を設定する構造体です。
●C 言語
typedef struct {
ULONG uFormat;
ULONG uFcs;
ULONG uAddressMode;
ULONG uAddress[13];
ULONG uLineMode;
ULONG uTxc;
ULONG uRxc;
ULONG uSourceClock;
ULONG uBaudRate;
ULONG uInterface;
ULONG uTxcMode;
ULONG uSendTiming;
ULONG uCSignal;
ULONG uCloseTiming;
HANDLE hWindowHandle;
ULONG uWindowsMessage;
LPHDLCCALLBACK lpCallBackProc;
} HDLCNPORTINITDATA, *PHDLCNPORTINITDATA;
●Visual Basic
Type HDLCNPORTINITDATA
uFormat As Long
uFcs As Long
uAddressMode As Long uAddress(12) As Long uLineMode As Long
uTxc As Long
uRxc As Long
uSourceClock As Long uBaudRate As Long uInterface As Long uTxcMode As Long uSendTiming As Long uCSignal As Long uCloseTiming As Long hWindowHandle As Long uWindowsMessage As Long lpCallBackProc As Long End Type
© 1999, 2016 Interface Corporation. All rights reserved.
●Delphi type
HDLCNPORTINITDATA = record uFormat: Integer;
uFcs: Integer;
uAddressMode: Integer;
uAddress: array[0..12] of Integer;
uLineMode: Integer;
uTxc: Integer;
uRxc: Integer;
uSourceClock: Integer;
uBaudRate: Integer;
uInterface: Integer;
uTxcMode: Integer;
uSendTiming: Integer;
uCSignal: Integer;
uCloseTiming: Integer;
hWindowHandle: THandle;
uWindowsMessage: Integer;
lpCallBackProc: pointer;
End Type
メンバ 説明
符号化フォーマットの種類を選択します。
識別子 値 内容
HDLC_FORMAT_NRZI 0 NRZI HDLC_FORMAT_NRZ 1 NRZ HDLC_FORMAT_FM0 2 FM0*1) HDLC_FORMAT_FM1 3 FM1*1) uFormat
※ FM0、FM1 を設定した際は、自動で送信クロックは内部クロック、受信クロッ クは外部クロック(RT から入力したクロック)が設定されます。
*1) FM 符号化対応製品でのみ指定できます。
PCI-4172FM, PCI-4172FMU, CPZ-4172FM, PEX-467102FM, PCI-4171FM, CSI-467202FM, CSI-467302FM, CSI-467402FM, LPC-467101FM,
PCI-467101FM, PCI-467102FM
© 1999, 2016 Interface Corporation. All rights reserved.
97
FCS 生成多項式の種類を選択します。
識別子 値 内容
HDLC_FCS_16 0 ITU-T(旧 CCITT)16bit X16+X12+X5+1 HDLC_FCS_32 1 ITU-T(旧 CCITT)32bit
X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+1)
HDLC_FCS_ANSI16 2 ANSI 16bit X16+X15+X2+1
※HDLC_FCS_16, HDLC_FCS_32 の CRC 演算器初期値はオール"1"です。
HDLC_FCS_ANSI16 の CRC 演算器初期値はオール"0"です。
HDLC_FCS_ANSI16 は PCI-4116, PCI/CTP-4158, PCI/CTP-4159 では使用できません。
uFcs
アドレスの扱いを選択します。
識別子 値 内容
HDLC_ADDRESS_NONE 0 アドレス検出は行わない(全てのフレームを受 信する)
HDLC_ADDRESS_AUTO1 1 受信フレームの先頭のデータをアドレスとして 処理する
HDLC_ADDRESS_AUTO2 2 受信フレームの 2 バイト目をアドレスとして処 理する
HDLC_ADDRESS_AUTO3 3 受信フレームの先頭から 2 バイトをアドレスと して処理する
uAddressMode
※HDLC_ADDRESS_AUTO2 は PCI-4116, PCI/CTP-4158, PCI/CTP-4159 のみ有効。
uAddress 検出するアドレスを指定します。
ulAddress[0]に使用するアドレスの個数を代入し、ulAddress[1]~にアドレス を代入してください。
※uAddressMode が 0 の時は無効です。
© 1999, 2016 Interface Corporation. All rights reserved.
以下の3つの設定を行います
・全二重/半二重の選択を行います
識別子 値 内容
HDLC_LINE_FULL 0 全二重 HDLC_LINE_HALF 1 半二重モード
RS 信号(C 信号)は送信と同期させません。
半二重モード
RS 信号(C 信号)と送信を同期させます。
RS-232C RS 信号を送信データと同期させます。
フレーム送信前に RS 信号を ON にし、フレ ーム送信後 RS 信号を OFF にします。
HDLC_LINE_HALF2 2
RS-485 C 信号を送信データと同期させます。
フレーム送信前に C 信号を ON にし、フレ ーム送信後 C 信号を OFF にします。
PCI-4171(RS-232C 使用時)ではリビジョン ID が 3 以上、PCI-467120、
CPZ-467120 ではリビジョン ID が 2 以上の製品で、HDLC_LINE_HALF2 を指定 して RS 信号の自動制御ができます。リビジョン ID がこれら未満の製品では HDLC_LINE_HALF2 を指定しても RS 信号は自動的に制御されません。
RS 信 号 を 制 御 す る 必 要 が あ る 場 合 に は 、 HDLC_LINE_HALF に 設 定 し HdlcSetControlLine 関数にて制御してください。
リビジョン ID は HdlcCommonGetPciDeviceInfo 関数で取得できます。
・フラグ送信/マーク送信の選択を行います
識別子 値 内容
HDLC_TFIL_FLAG 0 送信フレーム間のギャップ期間中(終結フラグと次 のフレームの先頭フラグの間)にフラグが挿入され ます。
HDLC_TFIL_MARK 10000h 送信フレーム間のギャップ期間中(終結フラグと次 のフレームの先頭フラグの間)にマークが挿入され ます。
・エラーフレームを受信するかどうか選択します
PCI-4116, PCI/CTP-4158, PCI/CTP-4159 は本パラメータは無効です
識別子 値 内容
HDLC_REJECT_ERRORFRAME 0 エラーフレームを破棄します。
uLineMode
HDLC_ACCEPT_ERRORFRAME 100000h エラーフレームを受信します。
© 1999, 2016 Interface Corporation. All rights reserved.
99
送信クロックの種類を選択します。
(uFormat が HDLC_FORMAT_NRZI、HDLC_FORMAT_NRZ のみ有効)
識別子 値 内容
HDLC_SCLK_PTC 1 内部クロック
HDLC_SCLK_ST 2 外部クロック(ST から入力したクロック) HDLC_SCLK_RT 4 外部クロック(RT から入力したクロック) uTxc
※符号化フォーマットを FM0,FM1 に設定した際は、自動で内部クロックに設定 されます。
受信クロックの種類を選択します。
(uFormat が HDLC_FORMAT_NRZI、HDLC_FORMAT_NRZ のみ有効)
識別子 値 内容
HDLC_RCLK_RT 1 外部クロック(RT から入力したクロック) HDLC_RCLK_DPLL 2 DPLL
uRxc
※符号化フォーマットを FM0,FM1 に設定した際は、自動で外部クロック(RT から 入力したクロック)に設定されます。
ビットレート生成用クロックの種類を選択します。
識別子 値 内容
HDLC_CLOCK_19660800 0 19.6608MHz HDLC_CLOCK_14745600 1 14.7456MHz HDLC_CLOCK_8192000 2 8.192MHz HDLC_CLOCK_32000000 3 32MHz HDLC_CLOCK_12288000 4 12.288MHz HDLC_CLOCK_36864000 5 36.864MHz HDLC_CLOCK_58982400 6 58.9824MHz HDLC_CLOCK_49152000 7 49.152MHz
インタフェースモジュールにより、サポートされているクロックが異なります。
ハードウェアマニュアルの「ハードウェア仕様」―「基準クロック」をご確認 下さい
uSourceClock
通信速度を設定します。
RS-232C 128bps~1000000bps(1Mbps)
RS-485 128bps~4000000bps(4Mbps)
※符号化フォーマットを FM0,FM1 に設定する場合、内部クロック使 用する場合、128bps~2000000bps(2Mbps)です。
uBaudRate
インタフェースモジュールにより、設定可能範囲が異なります。
※送信クロック、受信クロックとも外部クロックに設定された場合この設定値 は無視されます。
物理インタフェースの種類を選択します。
識別子 値 内容
HDLC_INTERFACE_232C 0 RS-232C HDLC_INTERFACE_485 1 RS-485 uInterface
© 1999, 2016 Interface Corporation. All rights reserved.
送信クロック出力モードを指定します(RS-485 時のみ有効)。
識別子 値 内容
HDLC_STOUT_NONE 0 常に出力しない HDLC_STOUT_ALWAYS 1 常に出力する
HDLC_STOUT_SYNC 2 送信に同期させる(全二重時無効)
uTxcMode
送信前切り替え時間を指定します。
(uLineMode が HDLC_LINE_HALF、HDLC_LINE_HALF2 のみ有効)
製品型式 設定範囲 説明
PCI-4116, PCI/CTP-4158, PCI/CTP-4159
0~65535 10ms 単位で設定が可能です。
(0~655350ms)
10ms 単位で設定が可能です。(0~1990ms)
設定できる最大時間は通信速度によって、以下のように変 化します。
設定できる最大時間[s] = 255/通信速度[bps]
設定したい時間が 1ms 未満の場合は、識別子
HDLC_TIME_MICRO_SEC をつかって、1μs 単位で設定するこ ともできます。
設定時間の例 説明
30 30ms に設定
HDLC_TIME_MICRO_SEC | 100 100μs に設定 それ以外 0~199
※ 時間の最小単位は、1/通信速度[bps]になります。
時間は最小単位で切り上げられます。
※ 設定時間に設定できる最大時間を超えた時間を設定す ると、設定できる最大時間に変更されます。
※1μs単位に設定した際の設定範囲は0~999μsです。
uSendTiming
RS 信号(C 信号)の初期化時の状態を指定します。
識別子 値 内容
HDLC_CSIG_OFF 0 OFF にします HDLC_CSIG_ON 1 ON にします uCSignal
uCloseTiming 送信後切り替え時間を指定します
(uLineMode が HDLC_LINE_HALF、HDLC_LINE_HALF2 のみ有効)
設定可能範囲は uSendTiming と同じです。
hWindowsHandle イベント発生時メッセージを送るウィンドウハンドルを指定します。
メッセージを使用しないときは NULL または 0 を指定します。
uWindowsMessage イベント発生時に送られるメッセージを指定します。
メッセージを使用しないときは 0 を指定します。
lpCallbackProc イベント発生時に呼び出されるコールバックルーチンへのポインタを指定しま す。コールバックルーチンを使用しないときは NULL または 0 を指定します。
© 1999, 2016 Interface Corporation. All rights reserved.
101
2. HDLCNPORTSTATUS 構造体
送受信の現在の状況を示す構造体です。
●C 言語
typedef struct {
ULONG uSendFrame;
ULONG uSendFreeBlock;
ULONG uReceiveFrame;
ULONG uReceiveFreeBlock;
} HDLCNPORTSTATUS, *PHDLCNPORTSTATUS;
●Visual Basic
Type HDLCNPORTSTATUS
uSendFrame As Long uSendFreeBlock As Long uReceiveFrame As Long uReceiveFreeBlock As Long End Type
●Delphi type
HDLCNPORTSTATUS = record
uSendFrame: Integer;
uSendFreeBlock: Integer;
uReceiveFrame: Integer;
uReceiveFreeBlock: Integer;
end;
メンバ 説明
uSendFrame 送信待ちのフレーム数(0~128 の値)
uSendFreeBlock 空き送信ブロック数(0~128 の値)
uReceiveFrame 受信しているフレーム数(0~128 の値)
uReceiveFreeBlock 空き受信ブロック(0~128 の値)
【備考】
HDLC インタフェースモジュールは最大 16384 バイトまでのフレームを受信することができます が、受信フレームのサイズに応じて使用されるブロック数が変化します。
8 バイト以下のフレームは 受信バッファを消費しません。(ドライバの内部では保持していま すが、インタフェースモジュール上の受信バッファは使用しません)
それ以上のフレームは 9 バイト目からが受信バッファに格納されます。
© 1999, 2016 Interface Corporation. All rights reserved.
受信バッファの容量は 524288 バイトですが、内部で各 4096 バイトのブロックで管理されてい ます。
ひとつのブロックは 4096 バイトなので 4096 バイト以下のフレームを受信しても 4096 バイトの ブロックをひとつ消費します。また、10K バイトのフレームを受信した場合は、4096 バイト+4096 バイト+2048 バイト=10240 バイトとなり 3 ブロックを消費します。
4096 バイト以下のフレームだけを連続で受信した場合、128 フレームを蓄えることができます。
例)
順番に、4096 バイト、10240 バイト、7168 バイト、4096 バイトのフレームを受信したとき、受 信バッファ内では以下のように格納されています。
4096 バイト
(10240-8)バイト (7168-8)バイト (4096-8) バイト (2048-8)バイト
この場合、使用されている受信バッファは 7 ブロック(4096×7 = 28672 バイト)、残りは 121 ブロック(4096×121 = 495616 バイト)となります。
HdlcGetFrameCount で得られるフレーム数は 4 となり、
HdlcGetFrameLength で得られる先頭フレームのサイズは 2048 となります。
© 1999, 2016 Interface Corporation. All rights reserved.
103