GPIB 메시지

개요

범용 인터페이스 버스 (GPIB)에는 명령 메시지와 데이터 메시지라는 두 가지 유형의 메시지가 있습니다. 모든 GPIB 컨트롤러와 모든 GPIB 인스트루먼트는 버스 상에서 고유한 식별자를 가지며, 이 식별자를 주소라고 합니다. GPIB 컨트롤러는 명령 메시지를 사용하여 각 인스트루먼트가 언제 데이터를 버스로 전송(Talk)하고 언제 버스에서 데이터를 수신(Listen)할지 지시합니다. 이 정보는 데이터 메시지로 전달됩니다.

내용

컨트롤러, 토커, 리스너

GPIB의 세계에는 컨트롤러, 토커, 리스너가 있습니다.
  • 컨트롤러는 버스의 다른 디바이스에 토커 및 리스너 할당을 지정하여 버스의 정보 흐름을 컨트롤합니다. 인스트루먼트의 서비스 요청에 응답하고, 버스의 컨트롤을 다른 컨트롤러에 전달할 수 있습니다. 버스에는 하나의 Controller-In-Charge(CIC 또는 시스템 컨트롤러)만 있을 수 있으며, 이는 버스의 전체적인 관리를 담당합니다.
  • 토커는 버스의 데이터 라인에 정보를 저장하지만, 컨트롤러가 지시하는 경우에만 정보를 저장합니다. 한 번에 하나의 디바이스만을 통신할 수 있습니다.
  • 리스너는 버스의 데이터 라인에서 정보를 가져오지만, 컨트롤러가 이를 수행하도록 지시한 경우에만 이를 가져옵니다. 여러 개의 디바이스가 동시에 수신할 수 있습니다.

명령 메시지 vs 데이터 메시지

GPIB 컨트롤러는 명령 메시지를 사용하여 디바이스(인스트루먼트 또는 다른 컨트롤러)가 언제 통화하여 버스에 정보를 제공할 수 있고 언제 버스에서 정보를 수신할 수 있는지 알립니다. 토커와 리스너 할당은 명령 메시지로 전송되고, 정보는 데이터 메시지로 전달됩니다.

명령 메시지와 데이터 메시지 사이의 주요 차이는 ATN (Atention) 라인의 상태입니다. 이는 버스 관리 라인 중 하나입니다. ATN 라인이 지정된 경우, 데이터 라인에서 보낸 모든 메시지는 모든 디바이스에서 듣게 되고, 명령 메시지로 간주됩니다. ATN 라인이 지정되지 않은 경우, 리슨하도록 지정된 디바이스만 데이터 라인에서 메시지를 받을 수 있습니다.

GPIB 주소 지정 프로토콜


GPIB에는 한 번에 한 바이트(8비트)씩 정보를 전송하는데 사용되는 8개의 데이터 라인이 있습니다. 명령 메시지는 다음 그림 1과 같이 8개 비트 중 7개를 사용합니다.


GPIB 주소 지정 프로토콜
그림 1. GPIB 주소 지정 프로토콜



비트 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진수 포맷으로 나타낼 수 있는 특정한 비트 패턴에 대응합니다. 또한 모든 GPIB 명령 메시지는 ASCII 문자로 맵핑될 수 있습니다(ASCII는 7비트 문자 세트이기 때문에). 따라서 ASCII는 GPIB의 "언어"입니다. 여러 라인 인터페이스 테이블(테이블 1)은 ASCII 문자의 대응을 명령 메시지와 16진수, 8각수, 10진수 값을 나열합니다. 멀티라인 인터페이스 메시지 테이블은 대부분의 National Instruments GPIB 관련 기술 매뉴얼의 부록에 있습니다.
표 1(부품 1) 여러 라인 인터페이스 메시지

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내 리슨 주소


표 1(부품 2) 여러 라인 인터페이스 메시지

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로 보낼 수 있습니다. (물론, 사용자가 보내는 메시지는 인스트루먼트에 유용해야 합니다.)

명령 메시지 바로 가기


멀티라인 인터페이스 메시지 테이블에 쉽게 접근할 수 없는 경우, 다음 수식을 사용하여 MLA (My Listen Address) 명령 메시지와 MTA (My Talk Address) 명령 메시지와 같은 16진수 메시지를 생성할 수 있습니다: MLA = (16진수 20) + (16진수 PAD), MTA = (16진수 40) + (16진수 PAD) 예를 들어, 컨트롤러(PAD0)를 리스너로, 인스트루먼트(PAD 25)를 토커로 할당하려면, 각각 16진수 20(MLA0 = 16진수 20 + 16진수 00 = 16진수 20)와 16진수 59(MTA25 = 16진수 40 + 16진수 19 = 16진수 59)를 사용할 수 있습니다.

리슨하지 않음(UNL)과 토크하지 않음(UNT)은 각각 MLA과 MTA의 수식에서 PAD 31(16진수 1F)을 사용하여 형성됩니다. 예를 들어, UNL은 16진수 3F(16진수 20 + 16진수 1F = 16진수 3F)이고 UNT는 16진수 5F(16진수 40 + 16진수 1F = 16진수 5F)입니다.

보조 주소는 16진수 60을 SAD의 16진수로 더하여 형성됩니다: MSA (내 보조 주소) = (16진수 60) + (SAD (16진수) 단위). 예를 들어, SAD 20이 있는 인스트루먼트의 경우, 16진수 74 (MSA20 = 16진수 60 + 16진수 14 = 16진수 74)를 사용하여 보조 주소를 나타냅니다.

보드 레벨 vs 디바이스 레벨 함수


GPIB 함수에는 보드 레벨 함수와 디바이스 레벨 함수라는 두 가지 타입이 있습니다. 디바이스 레벨에서는 한 번에 하나의 디바이스와 통신할 수 있지만, 보드 레벨에서는 여러 디바이스와 통신할 수 있습니다(하지만 한 번에 하나의 디바이스만 통신할 수 있습니다!). GPIB 메시지의 경우, 보드 레벨 함수는 ibcmd 함수를 사용하여 수동으로 토커/리스너 할당을 수행해야 합니다. 디바이스 레벨 함수는 대신 토커/리스너 할당을 처리합니다.

Was this information helpful?

Yes

No