FEMA ELECTRÓNICA . SERIE B . Módulos de salida y control
4.7 Ejemplos de trama
4.7.1 Tramas 'RD' (36) y 'ANS' (37)
Ejemplo - El 'Master' (dirección '0') solicita el valor del regis-
tro número '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'
(dirección '0') con un trama de error (trama 'ERR') indican-
do que el registro es desconocido ('UNKNOWN_REGISTER',
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 presencia al 'Slave' en la dirección '22' (trama 'PING')
y el 'Slave' responde 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
14
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
Trail
REG RSV LONG CRC
54
32
32
32
52
22
0
---
0
CRC
Trail
REG RSV LONG CRC
32
32
32
32
53
0
0
---
0
CRC
En instrumentos de 4 dígitos, los valores enviados siguen es-
tando formateados 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 D2 D3 D4 D5 D6 D7 CRC
32
40
43 48 55 54 53 46 52 51 15
---
8
+0765.43
código de error '1'). El código 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 trama 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
ETX
la función 'complemento a 1'.
3
CRC0=STX ^ ID ^ RSV ^ FROM ^ TO ^ REG ^ RSV ^ LONG ^ D0
Stop
^...^ Dn
• Si (CRC0<32) -> CRC=!CRC0 (función complemento a uno)
• Si (CRC0>31) -> CRC=CRC0
ETX
3
//ejemplo de cálculo del CRC en lenguaje C
Stop
int8 Calculate_CRC(int8 CRC_Position)
{
int8 i,CRC=0;
for(i=0;c<CRC_Position;c++)
{
crc=crc ^ frame[i];
}
if(crc<32) CRC=~CRC;
return(CRC);
}
ETX
3
Stop
ETX
3
Stop
Trail
ETX
3
CRC
Stop