4.7 Ejemplos de trama
4.7.1 Tramas 'RD' (36) y 'ANS' (37)
Ejemplo - El 'Master' (dirección '0') solicita el valor del registro núme-
ro '0' (valor de display) al 'Slave' en la dirección '28' (trama 'RD') y
el 'Slave' responde al 'Master' con una trama ('ANS') que contiene el
dato solicitado (765.43).
Header
STX
ID
RSV
2
36
32
Start
RD
---
Header
STX
ID
RSV
2
37
32
Start
ANS
---
4.7.2 Tramas 'ERR' (38)
Ejemplo - El 'Slave' en la dirección '11' responde al 'Master' (direc-
ción '0') con un trama de error (trama 'ERR') indicando que el registro
es desconocido ('UNKNOWN_REGISTER', código de error '1'). El códi-
Header
STX
ID
RSV
2
38
32
Start
ERR
---
4.7.3 Tramas 'PING' (32) y 'PONG' (33)
Ejemplo - El 'Master' (dirección '0') solicita confirmación de pre-
sencia al 'Slave' en la dirección '22' (trama 'PING') y el 'Slave' res-
ponde al 'Master' con una trama 'PONG'.
Header
STX
ID
RSV
FROM TO
2
32
32
32
Start Ping
---
0
Header
STX
ID
RSV
FROM TO
2
33
32
54
Start Pong ---
22
FROM
TO
REG
32
60
32
0
28
0
FROM
TO
REG
60
32
32
28
0
0
FROM
TO
REG
43
32
33
11
0
1
REG
RSV
LONG CRC
54
32
32
32
22
0
---
0
REG
RSV
LONG CRC
32
32
32
32
0
0
---
0
En instrumentos de 4 dígitos, los valores enviados siguen estando for-
mateados a 6 dígitos : el valor -321.5 se transmite como -00321.5
Trail
RSV
LONG
CRC
32
32
58
---
0
CRC
Data
RSV
LONG
D0
D1
32
40
43
48
---
8
+0765.43
go de error se codifica en el byte 'REG'. Para una lista de los códigos
de error disponibles ver la sección 4.6.
Trail
RSV
LONG
CRC
32
32
46
---
0
CRC
4.8 Cálculo del CRC
El valor en trama del byte de CRC se calcula a partir del valor en tra-
ma de los bytes que componen las secciones 'Header' y 'Data'. El
cálculo consiste en una función 'XOR' desde el byte '0' ('STX') hasta
el último byte de datos (byte Dn).
• Si el CRC calculado es menor que '32', se normaliza mediante la
Trail
función 'complemento a 1'.
ETX
CRC0=STX ^ ID ^ RSV ^ FROM ^ TO ^ REG ^ RSV ^ LONG ^ D0 ^...^ Dn
52
3
• Si (CRC0<32) -> CRC=!CRC0 (función complemento a uno)
CRC
Stop
• Si (CRC0>31) -> CRC=CRC0
Trail
//ejemplo de cálculo del CRC en lenguaje C
ETX
53
3
int8 Calculate_CRC(int8 CRC_Position)
{
CRC
Stop
int8 i,CRC=0;
for(i=0;c<CRC_Position;c++)
{
crc=crc ^ frame[i];
}
if(crc<32) CRC=~CRC;
return(CRC);
}
PCE Instruments | www.pce-instruments.com
ETX
3
Stop
D2
D3
D4
D5
D6
55
54
53
46
52
ETX
3
Stop
Trail
D7
CRC
ETX
51
15
3
CRC
Stop
13