GPIBには8つのデータラインがあり、一度に1バイト(8ビット)ずつ情報を送信します。以下の図1に示すように、コマンドメッセージは8ビットのうち7ビットを使用します。
ビット0~4は、トーカ/リスナ割り当ての対象となるデバイスのプライマリアドレスを示します。ビット5がHIGHの場合、デバイスはリスンします。ビット6がHIGHの場合、デバイスは通信します。ビット7は「気にしない」ビットです。この値は無視されるため、コマンドメッセージでは0の値として解釈されます。
バスの各デバイスには固有のアドレスが必要です。このアドレスは、プライマリアドレス(PAD)とセカンダリアドレス(SAD)から構成されています。図1からわかるように、5つのデータラインはGPIBプライマリアドレスを示すために使用されます。つまり、0から31までの値を合計32(2の5乗)のアドレスとして使用できます。ただし、パッド31は特殊なコマンドメッセージに使用されるため、プライマリアドレスとして使用されることはありません。これにより、合計31のプライマリアドレスが残ります。バスのコントローラインチャージ(CIC)はほとんどの場合PAD 0であるため、バス上の計測器には1~30のプライマリアドレスを使用できます。GPIBでよくある間違いは、コントローラボードと計測器に同じアドレスを割り当てることで、EADRエラー(アドレス指定エラー)が発生することです。
GPIBセカンダリアドレスは0~30の範囲において同一であるため、合計961(31 x 31)のGPIBアドレスを使用できますが、セカンダリアドレスが使用されることはほとんどありません(SADは通常ゼロに設定されています)。トーカ/リスナの割り当ては、主要なアドレス情報の一部であるため、PADではコマンドメッセージを送信する際にビット6またはビット5を使用します。「SAD情報を送信するにはどうすればよいですか?」と尋ねられる場合があります。セカンダリアドレスでは、コマンドメッセージを送信する際にビット6と5の両方を高く設定します。セカンダリアドレスを持つデバイスと通信する必要がある場合は、最初にプライマリアドレスを指定し、すぐにセカンダリアドレスを指定する必要があります。
プライマリおよびセカンダリのアドレス指定、コマンドメッセージ、およびデータメッセージを扱う最も簡単な方法は、対話式制御(IBIC)を使用することです。たとえば、ボードがPAD 0にあり、計測器がPAD 2とSAD 4を装備している場合、ボードが通信し、計測器がリスンするようにするには、IBICで次のコマンドメッセージを送信します。
ibcmd "\x40\x22\x64"
\x40は16進数の40を表し、0 1 0 0 0 0 0のバイナリパターンを表します。これは、ビット6がHIGH(トーク)で、プライマリアドレスが0であることを意味します。\x22は16進数の22を表し、0 0 1 0 0 0 1 0のバイナリパターンを表します。これは、ビット5がHIGH(リスン)で、プライマリアドレスが2であることを意味します。\x64は16進数の64を表し、0 1 1 0 1 0 0 0のバイナリパターンを表します。つまり、ビット6と5はHIGHで、以下のアドレスをセカンダリアドレスとして扱い、アドレスは4です。
|
16進数
|
10月
|
10進数
|
ASCII
|
Msg
|
16進数
|
10月
|
10進数
|
ASCII
|
Msg
|
|
00
|
000
|
0
|
NUL
|
20
|
040
|
32
|
SP
|
MLA0
| |
|
01
|
001
|
1
|
SOH
|
GTL
|
21
|
041
|
33
|
!
|
MLA1
|
|
02
|
002
|
2
|
STX
|
22
|
042
|
34
|
"
|
MLA2
| |
|
03
|
003
|
3
|
ETX
|
23
|
043
|
35
|
#
|
MLA3
| |
|
04
|
004
|
4
|
EOT
|
SDC
|
24
|
044
|
36
|
$
|
MLA4
|
|
05
|
005
|
5
|
ENQ
|
PPC
|
25
|
045
|
37
|
%
|
MLA5
|
|
06
|
006
|
6
|
ACK
|
26
|
046
|
38
|
&
|
MLA6
| |
|
07
|
007
|
7
|
BEL
|
27
|
047
|
39
|
'
|
MLA7
| |
|
08
|
010
|
8
|
BS
|
GET
|
28
|
050
|
40
|
(
|
MLA8
|
|
09
|
011
|
9
|
HT
|
TCT
|
29
|
051
|
41
|
)
|
MLA9
|
|
0A
|
012
|
10
|
LF
|
2A
|
052
|
42
|
*
|
MLA10
| |
|
0B
|
013
|
11
|
VT
|
2B
|
053
|
43
|
+
|
MLA11
| |
|
0C
|
014
|
12
|
FF
|
2C
|
054
|
44
|
,
|
MLA12
| |
|
0D
|
015
|
13
|
CR
|
2D
|
055
|
45
|
-
|
MLA13
| |
|
0E
|
016
|
14
|
SO
|
2E
|
056
|
46
|
。
|
MLA14
| |
|
0F
|
017
|
15
|
SI
|
2F
|
057
|
47
|
/
|
MLA15
| |
|
10
|
020
|
16
|
DLE
|
30
|
060
|
48
|
0
|
MLA16
| |
|
11
|
021
|
17
|
DC1
|
LLO
|
31
|
061
|
49
|
1
|
MLA17
|
|
12
|
022
|
18
|
DC2
|
32
|
062
|
50
|
2
|
MLA18
| |
|
13
|
023
|
19
|
DC3
|
33
|
063
|
51
|
3
|
MLA19
| |
|
14
|
024
|
20
|
DC4
|
DCL
|
34
|
064
|
52
|
4
|
MLA20
|
|
15
|
025
|
21
|
NAK
|
PPU
|
35
|
065
|
53
|
5
|
MLA21
|
|
16
|
026
|
22
|
SYN
|
36
|
066
|
54
|
6
|
MLA22
| |
|
17
|
027
|
23
|
ETB
|
37
|
067
|
55
|
7
|
MLA23
| |
|
18
|
030
|
24
|
CAN
|
SPE
|
38
|
070
|
56
|
8
|
MLA24
|
|
19
|
031
|
25
|
EM
|
SPD
|
39
|
071
|
57
|
9
|
MLA25
|
|
1A
|
032
|
26
|
SUB
|
3A
|
072
|
58
|
:
|
MLA26
| |
|
1B
|
033
|
27
|
ESC
|
3B
|
073
|
59
|
;
|
MLA27
| |
|
1C
|
034
|
28
|
FS
|
3C
|
074
|
60
|
<
|
MLA28
| |
|
1D
|
035
|
29
|
GS
|
3D
|
075
|
61
|
=
|
MLA29
| |
|
1E
|
036
|
30
|
RS
|
3E
|
076
|
62
|
>
|
MLA30
| |
|
1F
|
037
|
31
|
US
|
3F
|
077
|
63
|
?
|
UNL
| |
| メッセージの定義 | ||||
| DCL | Device Clear (デバイスクリア) | MSA | My Secondary Address (セカンダリアドレス) | |
| GET | Group Execute Trigger (グループトリガ実行) | MTA | My Talk Address (トークアドレス) | |
| GTL | Go To Local (ローカルモードへ移行) | PPC | Parallel Poll Configure (パラレルポール構成) | |
| LLO | Local Lockout (ローカルのロックアウト) | PPD | Parallel Poll Disablel (パラレルポール無効) | |
| MLA | My Listen Address (リスンアドレス) | |||
|
16進数
|
10月
|
10進数
|
ASCII
|
Msg
|
16進数
|
10月
|
10進数
|
ASCII
|
Msg
|
|
40
|
100
|
64
|
@
|
MTA0
|
60
|
140
|
96
|
`
|
MSA0,PPE
|
|
41
|
101
|
65
|
A
|
MTA1
|
61
|
141
|
97
|
A
|
MSA1,PPE
|
|
42
|
102
|
66
|
B
|
MTA2
|
62
|
142
|
98
|
b
|
MSA2,PPE
|
|
43
|
103
|
67
|
C
|
MTA3
|
63
|
143
|
99
|
c
|
MSA3,PPE
|
|
44
|
104
|
68
|
D
|
MTA4
|
64
|
144
|
100
|
d
|
MSA4,PPE
|
|
45
|
105
|
69
|
E
|
MTA5
|
65
|
145
|
101
|
e
|
MSA5,PPE
|
|
46
|
106
|
70
|
F
|
MTA6
|
66
|
146
|
102
|
f
|
MSA6,PPE
|
|
47
|
107
|
71
|
G
|
MTA7
|
67
|
147
|
103
|
g
|
MSA7,PPE
|
|
48
|
110
|
72
|
H
|
MTA8
|
68
|
150
|
104
|
h
|
MSA8,PPE
|
|
49
|
111
|
73
|
I
|
MTA9
|
69
|
151
|
105
|
i
|
MSA9,PPE
|
|
4A
|
112
|
74
|
J
|
MTA10
|
6A
|
152
|
106
|
j
|
MSA10,PPE
|
|
4B
|
113
|
75
|
K
|
MTA11
|
6B
|
153
|
107
|
k
|
MSA11,PPE
|
|
4C
|
114
|
76
|
L
|
MTA12
|
6C
|
154
|
108
|
l
|
MSA12,PPE
|
|
4D
|
115
|
77
|
M
|
MTA13
|
6D
|
155
|
109
|
m
|
MSA13,PPE
|
|
4E
|
116
|
78
|
N
|
MTA14
|
6E
|
156
|
110
|
n
|
MSA14,PPE
|
|
4F
|
117
|
79
|
O
|
MTA15
|
6F
|
157
|
111
|
o
|
MSA15,PPE
|
|
50
|
120
|
80
|
P
|
MTA16
|
70
|
160
|
112
|
p
|
MSA16,PPD
|
|
51
|
121
|
81
|
Q
|
MTA17
|
71
|
161
|
113
|
q
|
MSA17,PPD
|
|
52
|
122
|
82
|
R
|
MTA18
|
72
|
162
|
114
|
r
|
MSA18,PPD
|
|
53
|
123
|
83
|
S
|
MTA19
|
73
|
163
|
115
|
s
|
MSA19,PPD
|
|
54
|
124
|
84
|
T
|
MTA20
|
74
|
164
|
116
|
t
|
MSA20,PPD
|
|
55
|
125
|
85
|
U
|
MTA21
|
75
|
165
|
117
|
μ
|
MSA21,PPD
|
|
56
|
126
|
86
|
V
|
MTA22
|
76
|
166
|
118
|
v
|
MSA22,PPD
|
|
57
|
127
|
87
|
W
|
MTA23
|
77
|
167
|
119
|
w
|
MSA23,PPD
|
|
58
|
130
|
88
|
X
|
MTA24
|
78
|
170
|
120
|
x
|
MSA24,PPD
|
|
59
|
131
|
89
|
Y
|
MTA25
|
79
|
171
|
121
|
y
|
MSA25,PPD
|
|
5 A
|
132
|
90
|
Z
|
MTA26
|
7A
|
172
|
122
|
z
|
MSA26,PPD
|
|
5B
|
133
|
91
|
MTA27
|
7B
|
173
|
123
|
{
|
MSA27,PPD
| |
|
5C
|
134
|
92
|
\
|
MTA28
|
7C
|
174
|
124
|
|
|
MSA28,PPD
|
|
5D
|
135
|
93
|
MTA29
|
7D
|
175
|
125
|
}
|
MSA29,PPD
| |
|
5E
|
136
|
94
|
^
|
MTA30
|
7E
|
176
|
126
|
~
|
MSA30,PPD
|
|
5F
|
137
|
95
|
_
|
UNT
|
7F
|
177
|
127
|
DEL
| |
| メッセージの定義 | ||||
| PPE | Parallel Poll Enable (パラレルポール有効) | SPE | Serial Poll Enable (シリアルポール有効) | |
| PPU | Parallel Poll Unconfigure (パラレルポール構成解除) | TCT | Take Control (コントロール取得) | |
| SDC | Selected Device Clear (選択されたデバイスのクリア) | UNL | Unlisten (リスン解除) | |
| SPD | Serial Poll Disable (シリアルポール無効) | UNT | Untalk (トーク解除) | |
たとえば、ASCII文字「@」 (16進数の40) は、プライマリアドレス0のデバイスをトーカとして割り当てるメッセージ「MTA0」を表します。別の例として、ASCII文字「?」 (16進数の3F) は、リスナとして割り当てられていたすべてのデバイスにリスナ解除 (リスナ停止) を指示します。
マルチラインインタフェースメッセージテーブルは、ボードレベルのGPIB関数ibcmdを使用している場合に非常に便利です。コントローラとして、ibcmd関数を使用してコマンドメッセージを送信します。たとえば、対話式制御(IBIC)を使用してコントローラ(PAD 0)をトーカ、計測器(PAD 5)をリスナとして割り当てる場合、ibcmd "?@%"を使用してすべてのデバイスにリスン停止(?、UNL)、コントローラにトーカ(@、MTA0)、計測器にリスン(%、MLA5)を指示します。
コントローラは、ibwrt関数を使用して計測器にデータを送信します。(メモ:ibwrtを呼び出すと、ATNラインがアサート解除され、バス上のデータラインがコマンドメッセージではなくデータメッセージの送信に使用されます。)上記の例を継続するには、ibwrt "hello"を使用してデータメッセージhelloを計測器に送信します。(もちろん、送信するメッセージは計測器にとって意味があります。)