GPIB에는 한 번에 한 바이트(8비트)씩 정보를 전송하는데 사용되는 8개의 데이터 라인이 있습니다. 명령 메시지는 다음 그림 1과 같이 8개 비트 중 7개를 사용합니다.
비트 0에서 4는 토커/리스너 할당을 대상으로 하는 디바이스의 주요 주소를 나타냅니다. 비트 5가 하이인 경우, 디바이스는 리슨해야 합니다. 비트 6이 하이인 경우, 디바이스는 반드시 얘기해야 합니다. 비트 7은 "주의하지 않음" 비트입니다. 이 값은 무시되므로 명령 메시지에서 0의 값으로 해석됩니다.
버스의 각 디바이스에는 고유한 주소가 있어야 합니다. 이 주소는 주요 주소(PAD)와 보조 주소(SAD)로 구성됩니다. 그림 1에서 볼 수 있듯이, 5개의 데이터 라인이 GPIB 주요 주소를 나타내는데 사용됩니다. 이는 총 32개의 주소에 대해 0에서 31까지의 값을 가질 수 있다는 것을 의미합니다. 그러나 특별한 명령 메시지에 사용되기 때문에 PAD 31은 기본 주소로 사용되지 않습니다. 이렇게 하면 총 31개의 주요 주소가 남아있습니다. 버스의 CIC (Controller-In-Charge)는 거의 항상 PAD 0에 있기 때문에, 버스의 인스트루먼트는 1에서 30 사이의 주요 주소를 가질 수 있습니다. GPIB를 사용하는 경우 일반적인 실수는 컨트롤러 보드와 인스트루먼트에 같은 주소를 할당하는 것입니다. 따라서 EADR 에러(주소 지정 에러)가 발생합니다.
GPIB 보조 주소는 0에서 30의 범위에서 동일하며, 이는 총 961 (31 x 31)개의 가능한 GPIB 주소를 허용하지만, 보조 주소는 매우 드물게 사용됩니다(일반적으로 SAD는 0으로 설정됨). 토커/리스너 할당은 주요 주소 지정 정보의 일부이기 때문에, PAD에서는 명령 메시지를 보낼 때 비트 6 또는 비트 5를 사용합니다. 이렇게 하면 "SAD 정보를 어떻게 보낼 수 있습니까?"라는 문제를 묻게 됩니다. 보조 주소의 경우, 명령 메시지를 보낼 때 비트 6과 5를 모두 하이로 설정합니다. 보조 주소를 가진 디바이스와 통신해야 하는 경우, 우선 기본 주소를 지정한 후 즉시 보조 주소를 지정해야 합니다.
기본 및 보조 주소 지정, 명령 메시지, 데이터 메시지를 사용하는 가장 쉬운 방법은 대화식 컨트롤(IBIC)을 사용하는 것입니다. 예를 들어, PAD 0에 보드가 있고 PAD 2와 SAD 4가 있는 인스트루먼트가 있고 보드가 말하고 인스트루먼트가 리슨하도록 하려면, IBIC에서 다음 명령 메시지를 보냅니다.
ibcmd "\x40\x22\x64"
\x40은 0 1 0 0 0 0 0의 2진 패턴을 나타내는 16진수 40을 나타냅니다. 이는 비트 6이 하이(대화)이고 주요 주소가 0이라는 것을 의미합니다. \x22는 0 0 1 0 0 0 1 0의 2진 패턴을 나타내는 16진수 22를 나타냅니다. 이는 비트 5가 하이(리슨)이고 주요 주소가 2라는 것을 의미합니다. \x64는 16진수 64를 나타내며, 이는 0 1 1 0 0 0 0의 2진수 패턴을 나타냅니다. 이는 비트 6과 5가 하이가 되므로, 다음 주소를 보조 주소로 취급하고 주소는 4입니다.
|
16진수
|
10월
|
12월
|
ASCII
|
메시지
|
16진수
|
10월
|
12월
|
ASCII
|
메시지
|
|
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
|
KO
|
3F
|
077
|
63
|
?
|
UNL
| |
| 메시지 정의 | ||||
| DCL | 디바이스 지우기 | MSA | 내 보조 주소 | |
| GET | 그룹 실행 트리거 | MTA | 내 토크 주소 | |
| GTL | 로컬로 이동 | PPC | 병렬 폴 설정 | |
| LLO | 로컬 잠금 | PPD | 병렬 폴 비활성화 | |
| MLA | 내 리슨 주소 | |||
|
16진수
|
10월
|
12월
|
ASCII
|
메시지
|
16진수
|
10월
|
12월
|
ASCII
|
메시지
|
|
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
|
u
|
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
|
|
5A
|
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 | 병렬 폴 활성화 | SPE | 시리얼 폴 활성화 | |
| PPU | 병렬 폴 설정 해제 | TCT | 컨트롤 얻기 | |
| SDC | 선택된 디바이스 지우기 | UNL | 리슨하지 않음 | |
| SPD | 시리얼 폴 비활성화 | UNT | 토크하지 않음 | |
예를 들어, ASCII "@" 문자(16진수 40)는 주요 주소 0에서 디바이스를 토커로 할당하는 메시지 "MTA0"를 나타냅니다. 또 다른 예로, ASCII "?" 문자(16진수 3F)는 이전에 리스너로 할당된 모든 디바이스가 리슨을 해제(즉, 리슨을 정지)하도록 지시하는 메시지 "UNL"를 나타냅니다.
여러 라인 인터페이스 메시지 테이블은 보드 레벨 GPIB 함수 ibcmd를 사용하는 경우 매우 유용합니다. 컨트롤러로서, ibcmd 함수를 사용하여 명령 메시지를 보냅니다. 예를 들어, 대화식 컨트롤(IBIC)을 사용하여 컨트롤러(PAD 0)를 토커로, 인스트루먼트(PAD 5)를 리스너로 지정하는 경우, 모든 디바이스가 리슨을 멈추도록 지시하려면 ibcmd "?@%"를 사용하고, 컨트롤러가 토크( (@, MTA0), 인스트루먼트가 리슨하도록 지시합니다(%, MLA5).
그런 다음 컨트롤러는 ibwrt 함수를 사용하여 인스트루먼트에 데이터를 보냅니다. (참고: ibwrt를 호출하면 ATN 라인이 지정 해제되므로, 명령 메시지 대신 버스의 데이터 라인이 데이터 메시지 전송에 사용됩니다.) 이전 예제를 계속하려면, ibwrt "hello"를 사용하여 데이터 메시지를 인스트루먼트에 hello로 보낼 수 있습니다. (물론, 사용자가 보내는 메시지는 인스트루먼트에 유용해야 합니다.)