Síntoma
Con un M241 haciendo IOscanning en Modbus RTU, ¿es posible diagnosticar la comunicación con los esclavos? Otra cuestion es ver si los LEDs del M241 de ERROR, IO tienen reflejo en alguna dirección del PLC.
Solución
Por cada equipo declarado con un nombre bajo el apartado Modbus_IOScanner aparece una variable asociada al mismo. El error se detecta con la variable "nombre.xError". En el caso del ejemplo que aparece en la nota anexa al caso es Generic_Modbus_Slave.xError. Se aconseja el uso de la rutina de reseteo de dicho bit que controla el estado, que puede encontrarse tanto en el proyecto adjunto (M251_IOSCANNER_BITVIDA) como en la nota técnica. Respecto a la pregunta sobre una dirección directa del PLC para ver los LEDs de ERR e I/O la respuesta es que hay acceso a algunas palabras de sistema a partir de %MW60000 que contienen información sobre el procesador (PLC_R, diagnóstico de estado de la CPU) pero el encendido de los LEDs es interno e independiente inicialmente del programa cargado porque se gestiona desde el propio sistema. Sí es posible bajo determinadas condiciones impedir que se encienda algún LED o incluso saber por la información conseguida si debe estar encendido. Se ilustra mediante otro ejemplo el apagado del LED I/O por fallo del IOSCANNING en un M251 (inhibición del fallo en el puerto 2). Para ello se realiza un enmascaramiento de bits y se fuerza a 1 el responsable del fallo Ethernet en el puerto 2:
PROGRAM CONTROL_LED
VAR
hideETHerror: BOOL;
pLw: POINTER TO LWORD;
END_VAR
IF hideETHerror THEN
pLw := ADR(PLC_R.i_lwSystemFault_1);
pLw^ := PLC_R.i_lwSystemFault_1 OR 16#8; // bit 4 (corresponde a ETH2) se fuerza a TRUE
END_IF
Basta con escribir este código en un POU para que en caso de fallo y ante la activación de la variable hideETHerror se provoque el apagado del LED. Se usan variables de tipo puntero por lo que se aprovecha para anexar además un breve resumen de su uso.
Con un M241 haciendo IOscanning en Modbus RTU, ¿es posible diagnosticar la comunicación con los esclavos? Otra cuestion es ver si los LEDs del M241 de ERROR, IO tienen reflejo en alguna dirección del PLC.
Solución
Por cada equipo declarado con un nombre bajo el apartado Modbus_IOScanner aparece una variable asociada al mismo. El error se detecta con la variable "nombre.xError". En el caso del ejemplo que aparece en la nota anexa al caso es Generic_Modbus_Slave.xError. Se aconseja el uso de la rutina de reseteo de dicho bit que controla el estado, que puede encontrarse tanto en el proyecto adjunto (M251_IOSCANNER_BITVIDA) como en la nota técnica. Respecto a la pregunta sobre una dirección directa del PLC para ver los LEDs de ERR e I/O la respuesta es que hay acceso a algunas palabras de sistema a partir de %MW60000 que contienen información sobre el procesador (PLC_R, diagnóstico de estado de la CPU) pero el encendido de los LEDs es interno e independiente inicialmente del programa cargado porque se gestiona desde el propio sistema. Sí es posible bajo determinadas condiciones impedir que se encienda algún LED o incluso saber por la información conseguida si debe estar encendido. Se ilustra mediante otro ejemplo el apagado del LED I/O por fallo del IOSCANNING en un M251 (inhibición del fallo en el puerto 2). Para ello se realiza un enmascaramiento de bits y se fuerza a 1 el responsable del fallo Ethernet en el puerto 2:
PROGRAM CONTROL_LED
VAR
hideETHerror: BOOL;
pLw: POINTER TO LWORD;
END_VAR
IF hideETHerror THEN
pLw := ADR(PLC_R.i_lwSystemFault_1);
pLw^ := PLC_R.i_lwSystemFault_1 OR 16#8; // bit 4 (corresponde a ETH2) se fuerza a TRUE
END_IF
Basta con escribir este código en un POU para que en caso de fallo y ante la activación de la variable hideETHerror se provoque el apagado del LED. Se usan variables de tipo puntero por lo que se aprovecha para anexar además un breve resumen de su uso.