Codificación BCD de 2 dígitos en PLC: Display, lectura y contador con programación IEC 61131-3

Informática163,29 KB

Bloques funcionales BCD de 2 dígitos en programación de PLC

A continuación se presenta el código en lenguaje Structured Text (ST) de los bloques funcionales Display_BCD_2dig_FB y Lectura_BCD_2dig_FB, junto con los programas de ejemplo que los utilizan.

Bloque funcional Display_BCD_2dig_FB

Este bloque convierte un valor BCD de entrada (0 a 39) en las salidas necesarias para activar un display de dos dígitos, separando unidades y decenas.

FUNCTION_BLOCK Display_BCD_2dig_FB
VAR_INPUT
 i_usiEntrada_BCD: USINT;
END_VAR
VAR_OUTPUT
END_VAR
VAR
 unitats: USINT;
 desenes: USINT;
END_VAR

// IF i_usiEntrada_BCD >= 0 OR i_usiEntrada_BCD <= 39 THEN
 unitats:=i_usiEntrada_BCD MOD 10;
 desenes:=i_usiEntrada_BCD / 10;

 IF unitats=0 THEN
  q_xU1:= FALSE;
  q_xU2:= FALSE;
  q_xU4:= FALSE;
  q_xU8:= FALSE;
 ELSIF unitats=1 THEN
  q_xU1:= TRUE;
  q_xU2:= FALSE;
  q_xU4:= FALSE;
  q_xU8:= FALSE;
 ELSIF unitats=2 THEN
  q_xU1:= FALSE;
  q_xU2:= TRUE;
  q_xU4:= FALSE;
  q_xU8:= FALSE;
 ELSIF unitats=3 THEN
  q_xU1:= TRUE;
  q_xU2:= TRUE;
  q_xU4:= FALSE;
  q_xU8:= FALSE;
 ELSIF unitats=4 THEN
  q_xU1:= FALSE;
  q_xU2:= FALSE;
  q_xU4:= TRUE;
  q_xU8:= FALSE;
 ELSIF unitats=5 THEN
  q_xU1:= TRUE;
  q_xU2:= FALSE;
  q_xU4:= TRUE;
  q_xU8:= FALSE;
 ELSIF unitats=6 THEN
  q_xU1:= FALSE;
  q_xU2:= TRUE;
  q_xU4:= TRUE;
  q_xU8:= FALSE;
 ELSIF unitats=7 THEN
  q_xU1:= TRUE;
  q_xU2:= TRUE;
  q_xU4:= TRUE;
  q_xU8:= FALSE;
 ELSIF unitats=8 THEN
  q_xU1:= FALSE;
  q_xU2:= FALSE;
  q_xU4:= FALSE;
  q_xU8:= TRUE;
 ELSIF unitats=9 THEN
  q_xU1:= TRUE;
  q_xU2:= FALSE;
  q_xU4:= FALSE;
  q_xU8:= TRUE;
 END_IF
 IF desenes=0 THEN
  q_xD1:= FALSE;
  q_xD2:= FALSE;
 ELSIF desenes=1 THEN
  q_xD1:= TRUE;
  q_xD2:= FALSE;
 ELSIF desenes=2 THEN
  q_xD1:= FALSE;
  q_xD2:= TRUE;
 ELSIF desenes=3 THEN
  q_xD1:= TRUE;
  q_xD2:= TRUE;
 END_IF

ELSE
 q_xU1:= FALSE;
 q_xU2:= FALSE;
 q_xU4:= FALSE;
 q_xU8:= FALSE;
 q_xD1:= FALSE;
 q_xD2:= FALSE;
END_IF //

Programa Ex1

// PROGRAM Ex1
VAR
 Sortida_decimal: USINT;
END_VAR

NRgcZi3uBrsAAAAASUVORK5CYII=

Programa ex1_1

// PROGRAM ex1_1
VAR
END_VAR

49BtxLomaNFAAAAAElFTkSuQmCC

Programa Ex2

// PROGRAM Ex2
VAR
 Lectura: Lectura_BCD_2dig_FB;
 Lectura_ex2: USINT;
 Display: Display_BCD_2dig_FB;
END_VAR

dGkEyiuCAAAAAElFTkSuQmCC

Programa ex2_1

// PROGRAM ex2_1
VAR
END_VAR

wFwMNQLCWdW8wAAAABJRU5ErkJggg==

Programa Ex3

// PROGRAM Ex3
VAR
 Inicialitzacio: RS;
 Init: BOOL;
 para_de_contar: BOOL;
 posicio: USINT;
 Display: Display_BCD_2dig_FB;
 contador_posicio: CTUD;
 contador_total: CTU;
 contador_ctd: CTD;
 timer: tof;
 RS: RS;
END_VAR

3DkQI3mOYWAAAAABJRU5ErkJggg==

AQB4Y5iDNEvMAAAAAElFTkSuQmCC

skhU3OimlMgAAAABJRU5ErkJggg==

n+G3C5H8qMf6QAAAABJRU5ErkJggg==

Programa ex3_CFC_1

// PROGRAM ex3_CFC_1
VAR
 desti: USINT;
 comptador: CTUD;
 posicio: WORD;
 para_de_contar: BOOL;
 RS: RS;
 Display: Display_BCD_2dig_FB;
END_VAR

Awvb1X+UQhtvAAAAAElFTkSuQmCC

Ax4ACC9FAAAAAElFTkSuQmCC

Programa ex3_SFC_1

// PROGRAM ex3_SFC_1
VAR
 x: USINT;
END_VAR

0Wv4dZ3AKOnUNc2KrxwemfhpYmt5MYNAEATKq0BoLe8630Z0a3yVFAA0A6VFgDADCotAIAZhBYAwAxCCwBgBqEFADCD0AIAmEFoAQDMILQAAGYQWgAAMwgtAIAZhBYAwAxCCwBgBqEFADCD0AIAmEFoAQDMILQAAGYQWgAAMwgtAIAZhBYAwAxCCwBgBqEFADBC5P8DIf4Y2pETStQAAAAASUVORK5CYII=

a8QPu2mDxPcAAAAASUVORK5CYII=

// x:=ex3_CFC.desti; //

Función Lectura_BCD_2dig

// FUNCTION Lectura_BCD_2dig : USINT
VAR
 U1: USINT;
 U2: USINT;
 U4: USINT;
 U8: USINT;
 D1: USINT;
 D2: USINT;
END_VAR

IF i_xU1 THEN
 U1:=1;
ELSE
 U1:=0;
END_IF

IF i_xU2 THEN
 U2:=2;
ELSE
 U2:=0;
END_IF

IF i_xU4 THEN
 U4:=4;
ELSE
 U4:=0;
END_IF

IF i_xU8 THEN
 U8:=8;
ELSE
 U8:=0;
END_IF

IF i_xD1 THEN
 D1:=10;
ELSE
 D1:=0;
END_IF

IF i_xD2 THEN
 D2:=20;
ELSE
 D2:=0;
END_IF

Lectura_BCD_2dig:=U1+U2+U4+U8+D1+D2; //

Bloque funcional Lectura_BCD_2dig_FB

// FUNCTION_BLOCK Lectura_BCD_2dig_FB
VAR_INPUT
 i_xPU1: BOOL;
 i_xPU2: BOOL;
 i_xPU4: BOOL;
 i_xPU8: BOOL;
 i_xPD1: BOOL;
 i_xPD2: BOOL;
END_VAR
VAR_OUTPUT
 q_usiLectura_BCD: USINT;
END_VAR
VAR
 U1: USINT;
 U2: USINT;
 U4: USINT;
 U8: USINT;
 D1: USINT;
 D2: USINT;
END_VAR

IF i_xPU1 THEN
 U1:=1;
ELSE
 U1:=0;
END_IF

IF i_xPU2 THEN
 U2:=2;
ELSE
 U2:=0;
END_IF

IF i_xPU4 THEN
 U4:=4;
ELSE
 U4:=0;
END_IF

IF i_xPU8 THEN
 U8:=8;
ELSE
 U8:=0;
END_IF

IF i_xPD1 THEN
 D1:=10;
ELSE
 D1:=0;
END_IF

IF i_xPD2 THEN
 D2:=20;
ELSE
 D2:=0;
END_IF

q_usiLectura_BCD:=U1+U2+U4+U8+D1+D2;

Descargar

PDF Word HTML