Escritura de datos en dispositivos externos mediante el protocolo MC
El PLC tiene el derecho de transmisión en la comunicación maestra. La comunicación se realiza enviando comandos a los dispositivos compatibles con el protocolo MC y recibiendo respuestas. Al especificar una dirección de memoria y ejecutar una instrucción de escritura en un programa de usuario, el PLC genera un mensaje conforme al protocolo automáticamente.
Entrada
Puerto Ethernet, por ejemplo SYS_ETHERNET_USER_CONNECTION_1
Área de palabras o registro en la unidad maestra donde se encuentran los datos que se van a escribir en el esclavo.
El método de transferencia varía según el tipo de datos de Source.
Área de memoria especificada en Source |
Método de transferencia |
Nº de datos transmitidos |
Observaciones |
---|---|---|---|
Área de memoria de 16 bits WX, WY, WR, WL, DT, LD |
Transmisión de palabras |
1–960 palabras |
|
Área de memoria de 1 bits X,Y,R,L,DT,n,LD,n |
Transmisión de bits |
1–7168 bits |
Cuando el número de datos transmitidos es impar, se añade el código ficticio de 4 bits 16#0. |
Área de memoria en el esclavo donde se escriben los datos.
Unidad |
Tipo de área de memoria |
Variable del Sistema |
||
---|---|---|---|---|
Bit |
Entrada |
X | Hexadecimal SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X |
|
Salida |
Y | Hexadecimal SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y |
||
Relé de enlace |
B | Hexadecimal SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B |
||
Relé interno |
M | Decimal SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M |
||
Relé de retención |
L | Decimal SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L |
||
Palabra |
Registro de datos |
D | Decimal SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D |
|
Registro de fichero |
R | Decimal SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R |
||
ZR | Hexadecimal SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR |
|||
Registro de enlace |
W | Hexadecimal SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W |
Offset del área de memoria del esclavo donde se escriben los datos.
Rango: 16#0–16#F7FFFF (0–16252927)
Salida
Para FP7 solamente:
0: Finalización normal
1: El puerto de comunicación se utiliza para la comunicación maestra
2: El puerto de comunicación se utiliza para la comunicación esclava
3: Se excede el número de instrucciones de comunicación maestra que se pueden utilizar al mismo tiempo
4: Tiempo de espera para transmisión
5: Tiempo de espera de una respuesta
6: Error en los datos recibidos
Este error se produce cuando se recibe un telegrama anormal, p. ej. cuando hay un error de formato en la cabecera. En este caso, se descartan los datos recibidos.
7: Área reservada insuficiente en el mapa de E/S
Este error se produce cuando el número de conexiones Ethernet es superior a 16 (comunicación Ethernet avanzada). Comprobar si el área de palabras reservada para las banderas de control de comunicación es lo suficientemente grande para el número de conexiones Ethernet.
8: Búfer de envío actualmente en uso
Este error puede producirse en PLCs FP7 con versión de firmware 4.57 o posterior.
En caso de errores de comunicación, pueden establecerse otros códigos de error específicos del protocolo MC. Para más detalles, consultar la documentación del PLC utilizado.
Para otros PLCs: ajustar a 0
Durante el envío: Bandera de envío de la comunicación maestra es TRUE
Envío realizado: Bandera de envío de la comunicación maestra es FALSE
Finalización normal: FALSE
Finalización anormal: TRUE
si el área especificada utilizando el modificador índice supera el límite.
Si el puerto Ethernet es incorrecto o la conexión Ethernet está cerrada.
si el número de datos enviados especificado por Words_Bits es incorrecto.
si el área especificada utilizando el modificador índice supera el límite.
Si el puerto Ethernet es incorrecto o la conexión Ethernet está cerrada.
si el número de datos enviados especificado por Words_Bits es incorrecto.
Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU. Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.
VAR
bEnable: BOOL:=FALSE;
awValues: ARRAY [0..2] OF WORD:=[3(0)];
diMemoryOffset: DINT:=0;
iResult: INT:=0;
abValues: ARRAY [0..2] OF BOOL:=[3(FALSE)];
iPort: INT:=0;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_COMMENT,,Bit transfer,2,0,10,1,);
B(B_COMMENT,,Memory Areas: SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X ^SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y ^SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B ^SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M ^SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L,13,0,39,6,);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VARIN,,abValues,18,3,20,5,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,26,5,28,7,);
B(B_VARIN,,diMemoryOffset,26,6,28,8,);
B(B_VAROUT,,iResult,41,2,43,4,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_WRITE!,,28,0,41,8,,?DEN?DPort?DSource?DWords_Bits?HDestMemoryArea?DDestMemoryOffset?AENO?CResult);
B(B_F,Size_Of_Var!,,21,4,28,6,,?D?C);
L(1,2,5,2);
L(7,2,28,2);
L(20,4,28,4);
L(21,4,21,5);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_COMMENT,,Memory Areas: ^SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D ^SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R ^SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR ^SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W,13,0,39,5,);
B(B_COMMENT,,Word Transfer,2,0,10,1,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VARIN,,awValues,18,3,20,5,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,26,5,28,7,);
B(B_VARIN,,diMemoryOffset,26,6,28,8,);
B(B_VAROUT,,iResult,41,2,43,4,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_WRITE!,,28,0,41,8,,?DEN?DPort?DSource?DWords_Bits?HDestMemoryArea?DDestMemoryOffset?AENO?CResult);
B(B_F,Size_Of_Var!,,21,4,28,6,,?D?C);
L(1,2,5,2);
L(7,2,28,2);
L(20,4,28,4);
L(21,4,21,5);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_COMMENT,,only valid for ethernet ports! ^--> Valid Ports: SYS_ETHERNET_USER_CONNECTION_1 - SYS_ETHERNET_USER_CONNECTION_216,3,1,52,4,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
(*Bit transfer*)
If (bEnable) then
FP_MC_PROTOCOL_WRITE(Port := iPort,
Source := abValues,
Words_Bits := Size_Of_Var(abValues),
DestMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,
DestMemoryOffset := diMemoryOffset,
Result => iResult);
End_if;
(*Word transfer*)
If (bEnable) then
FP_MC_PROTOCOL_WRITE(Port := iPort,
Source := awValues,
Words_Bits := Size_Of_Var(awValues),
DestMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,
DestMemoryOffset := diMemoryOffset,
Result => iResult);
End_if;